lrj
5 天以前 6d519474e44855682043d3c40db2c86a6822caca
web/src/views/employee/EmployeeForm.vue
@@ -43,9 +43,11 @@
        <el-input 
          v-model="form.password" 
          type="password"
          placeholder="留空则不修改密码"
          placeholder="请输入新密码(6-20位)"
          maxlength="20"
          show-password
          @focus="handlePasswordFocus"
          @input="handlePasswordInput"
        />
      </el-form-item>
@@ -115,6 +117,9 @@
const roles = ref<Role[]>([])
const rolesLoading = ref(false)
// 跟踪密码是否被修改
const isPasswordModified = ref(false)
// 计算是否为编辑模式
const isEdit = computed(() => !!props.employee?.id)
@@ -159,10 +164,7 @@
  password: [
    { 
      validator: (rule, value, callback) => {
        if (isEdit.value && !value) {
          // 编辑模式下密码可以为空(不修改)
          callback()
        } else if (!value) {
        if (!value) {
          callback(new Error('请输入登录密码'))
        } else if (value.length < 6 || value.length > 20) {
          callback(new Error('密码长度应在6-20个字符之间'))
@@ -192,6 +194,7 @@
  form.password = ''
  form.roleId = ''
  form.description = ''
  isPasswordModified.value = false
  formRef.value?.clearValidate()
}
@@ -202,7 +205,8 @@
    form.id = employee.id
    form.name = employee.name
    form.phone = employee.phone
    form.password = '' // 密码不回显
    form.password = '••••••••' // 编辑时显示占位符密码
    isPasswordModified.value = false // 重置密码修改状态
    form.roleId = employee.roleId
    form.description = employee.description || ''
  } else {
@@ -215,6 +219,20 @@
const handleClose = () => {
  visible.value = false
  resetForm()
}
// 处理密码字段焦点事件
const handlePasswordFocus = () => {
  if (isEdit.value && form.password === '••••••••') {
    form.password = ''
  }
}
// 处理密码输入事件
const handlePasswordInput = (value: string) => {
  if (isEdit.value) {
    isPasswordModified.value = value !== '' && value !== '••••••••'
  }
}
// 提交表单
@@ -232,11 +250,15 @@
      id: form.id,
      name: form.name.trim(),
      phone: form.phone.trim(),
      password: form.password || undefined, // 空密码传 undefined
      roleId: form.roleId,
      description: form.description?.trim() || undefined
    }
    // 只有在新建或密码被修改时才包含密码字段
    if (!isEdit.value || isPasswordModified.value) {
      submitData.password = form.password
    }
    await employeeApi.saveEmployee(submitData)
    
    ElMessage.success(isEdit.value ? '员工信息更新成功' : '员工创建成功')