From b39a0502e7941ce966fda53664cf1b04ba52d65f Mon Sep 17 00:00:00 2001
From: lrj <owen.stl@gmail.com>
Date: 星期三, 01 十月 2025 17:30:24 +0800
Subject: [PATCH] 清理测试文件:删除所有test、debug、fix、check_开头的文件,为重构做准备

---
 web/src/views/employee/EmployeeForm.vue |   76 ++++++++++++++++++++++++++++++-------
 1 files changed, 61 insertions(+), 15 deletions(-)

diff --git a/web/src/views/employee/EmployeeForm.vue b/web/src/views/employee/EmployeeForm.vue
index d5151f8..3ab65c9 100644
--- a/web/src/views/employee/EmployeeForm.vue
+++ b/web/src/views/employee/EmployeeForm.vue
@@ -39,14 +39,27 @@
         />
       </el-form-item>
 
-      <el-form-item label="閲嶇疆瀵嗙爜" prop="password" v-if="isEdit">
-        <el-input 
-          v-model="form.password" 
-          type="password"
-          placeholder="鐣欑┖鍒欎笉淇敼瀵嗙爜"
-          maxlength="20"
-          show-password
-        />
+      <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">
@@ -115,6 +128,9 @@
 const roles = ref<Role[]>([])
 const rolesLoading = ref(false)
 
+// 璺熻釜瀵嗙爜鏄惁琚慨鏀�
+const isPasswordModified = ref(false)
+
 // 璁$畻鏄惁涓虹紪杈戞ā寮�
 const isEdit = computed(() => !!props.employee?.id)
 
@@ -159,13 +175,16 @@
   password: [
     { 
       validator: (rule, value, callback) => {
-        if (isEdit.value && !value) {
-          // 缂栬緫妯″紡涓嬪瘑鐮佸彲浠ヤ负绌猴紙涓嶄慨鏀癸級
+        // 缂栬緫妯″紡涓嬶紝濡傛灉鏄崰浣嶇瀵嗙爜涓旀湭淇敼锛屽垯璺宠繃楠岃瘉
+        if (isEdit.value && value === '鈥⑩�⑩�⑩�⑩�⑩�⑩�⑩��' && !isPasswordModified.value) {
           callback()
-        } else if (!value) {
+          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()
         }
@@ -192,6 +211,7 @@
   form.password = ''
   form.roleId = ''
   form.description = ''
+  isPasswordModified.value = false
   formRef.value?.clearValidate()
 }
 
@@ -202,7 +222,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 +236,27 @@
 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 !== '鈥⑩�⑩�⑩�⑩�⑩�⑩�⑩��'
+  }
+}
+
+// 澶勭悊閲嶇疆瀵嗙爜
+const handleResetPassword = () => {
+  form.password = ''
+  isPasswordModified.value = true
+  ElMessage.success('瀵嗙爜宸叉竻绌猴紝璇疯緭鍏ユ柊瀵嗙爜')
 }
 
 // 鎻愪氦琛ㄥ崟
@@ -232,11 +274,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