From 6d519474e44855682043d3c40db2c86a6822caca Mon Sep 17 00:00:00 2001
From: lrj <owen.stl@gmail.com>
Date: 星期三, 24 九月 2025 19:37:59 +0800
Subject: [PATCH] 修改员工和评委的设置

---
 web/src/views/employee/EmployeeForm.vue |   36 +++++++++++++++++++++++++++++-------
 1 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/web/src/views/employee/EmployeeForm.vue b/web/src/views/employee/EmployeeForm.vue
index d5151f8..263cd38 100644
--- a/web/src/views/employee/EmployeeForm.vue
+++ b/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 ? '鍛樺伐淇℃伅鏇存柊鎴愬姛' : '鍛樺伐鍒涘缓鎴愬姛')

--
Gitblit v1.8.0