| | |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="重置密码" prop="password" v-if="isEdit"> |
| | | <el-input |
| | | v-model="form.password" |
| | | type="password" |
| | | placeholder="请输入新密码(6-20位)" |
| | | maxlength="20" |
| | | show-password |
| | | @focus="handlePasswordFocus" |
| | | @input="handlePasswordInput" |
| | | /> |
| | | <el-form-item label="密码" prop="password" v-if="isEdit"> |
| | | <div style="display: flex; align-items: center; gap: 10px;"> |
| | | <el-input |
| | | v-model="form.password" |
| | | type="password" |
| | | :placeholder="isPasswordModified ? '请输入新密码(6-20位,包含字母和数字)' : '点击重置密码按钮来修改密码'" |
| | | maxlength="20" |
| | | show-password |
| | | :disabled="!isPasswordModified" |
| | | @focus="handlePasswordFocus" |
| | | @input="handlePasswordInput" |
| | | style="flex: 1;" |
| | | /> |
| | | <el-button |
| | | type="primary" |
| | | size="small" |
| | | @click="handleResetPassword" |
| | | > |
| | | 重置密码 |
| | | </el-button> |
| | | </div> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="员工角色" prop="roleId"> |
| | |
| | | password: [ |
| | | { |
| | | validator: (rule, value, callback) => { |
| | | if (!value) { |
| | | // 编辑模式下,如果是占位符密码且未修改,则跳过验证 |
| | | if (isEdit.value && value === '••••••••' && !isPasswordModified.value) { |
| | | callback() |
| | | return |
| | | } |
| | | |
| | | if (!value || value.trim() === '') { |
| | | callback(new Error('请输入登录密码')) |
| | | } else if (value.length < 6 || value.length > 20) { |
| | | callback(new Error('密码长度应在6-20个字符之间')) |
| | | } else if (!/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d@$!%*?&]{6,}$/.test(value)) { |
| | | callback(new Error('密码至少6个字符,必须包含字母和数字')) |
| | | } else { |
| | | callback() |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | // 处理重置密码 |
| | | const handleResetPassword = () => { |
| | | form.password = '' |
| | | isPasswordModified.value = true |
| | | ElMessage.success('密码已清空,请输入新密码') |
| | | } |
| | | |
| | | // 提交表单 |
| | | const handleSubmit = async () => { |
| | | if (!formRef.value) return |