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/components/JudgeFormSimple.vue |   95 ++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 81 insertions(+), 14 deletions(-)

diff --git a/web/src/components/JudgeFormSimple.vue b/web/src/components/JudgeFormSimple.vue
index 6445dc7..9c335e2 100644
--- a/web/src/components/JudgeFormSimple.vue
+++ b/web/src/components/JudgeFormSimple.vue
@@ -25,6 +25,28 @@
         <el-input v-model="form.phone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
       </el-form-item>
 
+      <el-form-item label="瀵嗙爜" prop="password">
+        <div style="display: flex; align-items: center; gap: 10px;">
+          <el-input 
+            v-model="form.password" 
+            type="password"
+            :placeholder="isEdit ? '璇疯緭鍏ユ柊瀵嗙爜锛�6-20浣嶏紝鍖呭惈瀛楁瘝鍜屾暟瀛楋級' : '璇疯緭鍏ョ櫥褰曞瘑鐮侊紙6-20浣嶏紝鍖呭惈瀛楁瘝鍜屾暟瀛楋級'"
+            maxlength="20"
+            @focus="handlePasswordFocus"
+            @input="handlePasswordInput"
+            style="flex: 1;"
+          />
+          <el-button 
+            v-if="isEdit" 
+            type="primary" 
+            size="small"
+            @click="handleResetPassword"
+          >
+            閲嶇疆瀵嗙爜
+          </el-button>
+        </div>
+      </el-form-item>
+
       <el-form-item label="鎬у埆" prop="gender">
         <el-radio-group v-model="form.gender">
           <el-radio :value="1">鐢�</el-radio>
@@ -144,6 +166,8 @@
 // 鏄惁涓虹紪杈戞ā寮�
 const isEdit = computed(() => !!props.judgeData?.id)
 
+
+
 // 琛ㄥ崟鏁版嵁
 const form = reactive<JudgeInput & { 
   avatarUrl?: string; 
@@ -160,6 +184,7 @@
   id: undefined,
   name: '',
   phone: '',
+  password: '',
   gender: undefined,
   description: '',
   specialtyIds: [],
@@ -171,6 +196,9 @@
 // 鍙�夌殑涓撲笟鏍囩锛堜粠鍚庣鑾峰彇锛�
 const availableTags = ref<Tag[]>([])
 
+// 璺熻釜瀵嗙爜鏄惁琚慨鏀�
+const isPasswordModified = ref(false)
+
 // 琛ㄥ崟楠岃瘉瑙勫垯
 const rules = {
   name: [
@@ -180,16 +208,41 @@
   phone: [
     { required: true, message: '璇疯緭鍏ヨ仈绯荤數璇�', trigger: 'blur' },
     { pattern: /^1[3-9]\d{9}$/, message: '璇疯緭鍏ユ纭殑鎵嬫満鍙风爜', trigger: 'blur' }
+  ],
+  password: [
+    { 
+      validator: (rule: any, value: string, callback: any) => {
+        // 缂栬緫妯″紡涓嬶紝濡傛灉鏄崰浣嶇瀵嗙爜涓旀湭淇敼锛屽垯璺宠繃楠岃瘉
+        if (isEdit.value && value === '鈥⑩�⑩�⑩�⑩�⑩�⑩�⑩��' && !isPasswordModified.value) {
+          callback()
+          return
+        }
+        
+        if (!value || value.trim() === '') {
+          callback(new Error('璇疯緭鍏ョ櫥褰曞瘑鐮�'))
+        } else if (!/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d@$!%*?&]{6,}$/.test(value)) {
+          callback(new Error('瀵嗙爜鑷冲皯6涓瓧绗︼紝蹇呴』鍖呭惈瀛楁瘝鍜屾暟瀛�'))
+        } else {
+          callback()
+        }
+      }, 
+      trigger: 'blur' 
+    }
   ]
 }
 
 // 鐩戝惉璇勫鏁版嵁鍙樺寲锛屽~鍏呰〃鍗�
 watch(() => props.judgeData, (data) => {
+  console.log('馃攳 Watch triggered, judgeData:', data)
+  console.log('馃攳 isEdit computed:', isEdit.value)
   nextTick(async () => {
     if (data && data.id) {
+      // 缂栬緫妯″紡锛氬~鍏呰〃鍗曟暟鎹�
       form.id = data.id
       form.name = data.name || ''
       form.phone = data.phone || ''
+      form.password = '' // 缂栬緫妯″紡涓嬫竻绌哄瘑鐮佸瓧娈碉紝鐢ㄦ埛闇�瑕佽緭鍏ユ柊瀵嗙爜鎴栫偣鍑婚噸缃瘑鐮�
+      isPasswordModified.value = false
       form.gender = data.gender
       form.description = data.description || ''
       form.specialtyIds = data.specialties?.map(tag => tag.id) || []
@@ -197,10 +250,7 @@
       
       // 鍔犺浇璇勫澶村儚/濯掍綋锛坱argetType=1 琛ㄧず璇勫锛�
       try {
-        console.log('=== 鍔犺浇璇勫濯掍綋 ===');
-        console.log('璇勫ID:', data.id);
         const medias = await getMediasByTarget(MediaTargetType.JUDGE_AVATAR, parseInt(data.id))
-        console.log('鑾峰彇鍒扮殑濯掍綋鍒楄〃:', medias);
         
         // 鍙彇绗竴涓浘鐗囦綔涓哄ご鍍忥紙璇勫鍙兘鏈変竴涓ご鍍忥級
         const firstImage = (medias || []).find((m: Media) => {
@@ -217,7 +267,6 @@
             url: firstImage.fullUrl
           };
           form.avatarUrl = firstImage.fullUrl;
-          console.log('璁剧疆褰撳墠澶村儚:', form.currentAvatar);
         } else {
           form.currentAvatar = null;
         }
@@ -235,16 +284,39 @@
   form.id = undefined
   form.name = ''
   form.phone = ''
+  form.password = ''
   form.gender = undefined
   form.description = ''
   form.specialtyIds = []
   form.avatarUrl = ''
   form.avatarMediaId = undefined
   form.currentAvatar = null
+  isPasswordModified.value = false
   
   nextTick(() => {
     formRef.value?.clearValidate()
   })
+}
+
+// 澶勭悊瀵嗙爜瀛楁鐒︾偣浜嬩欢
+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('瀵嗙爜宸叉竻绌猴紝璇疯緭鍏ユ柊瀵嗙爜')
 }
 
 // 澶勭悊澶村儚涓婁紶
@@ -253,14 +325,9 @@
     return; // 娌℃湁鏂板ご鍍忛渶瑕佷笂浼�
   }
   
-  console.log('=== 寮�濮嬩笂浼犲ご鍍忔枃浠� ===');
-  console.log('璇勫ID:', judgeId);
-  console.log('寰呬笂浼犵殑澶村儚:', form.currentAvatar.name);
-  
   try {
     // 涓婁紶鏂囦欢
     const uploadResult = await uploadFile(form.currentAvatar.file!);
-    console.log('涓婁紶缁撴灉:', uploadResult);
     
     if (uploadResult.success) {
       // 淇濆瓨濯掍綋淇℃伅鍒版暟鎹簱
@@ -278,7 +345,6 @@
       form.currentAvatar.uploaded = true;
       form.currentAvatar.url = uploadResult.fullUrl;
       form.avatarUrl = uploadResult.fullUrl;
-      console.log('澶村儚涓婁紶骞朵繚瀛樻垚鍔�:', form.currentAvatar.name);
     }
   } catch (error) {
     console.error('澶村儚涓婁紶澶辫触:', error);
@@ -299,9 +365,7 @@
     
     if (form.currentAvatar.isExisting && form.currentAvatar.id) {
       // 鍒犻櫎宸插瓨鍦ㄧ殑澶村儚鏂囦欢
-      console.log('鍒犻櫎宸插瓨鍦ㄧ殑澶村儚鏂囦欢:', form.currentAvatar.id);
       const result = await deleteMedia(form.currentAvatar.id);
-      console.log('鍒犻櫎缁撴灉:', result);
       
       if (result) {
         form.currentAvatar = null;
@@ -346,8 +410,12 @@
       majorIds: form.specialtyIds?.length ? form.specialtyIds.map(id => parseInt(id)) : undefined
     }
 
+    // 鍙湁鍦ㄦ柊寤烘垨瀵嗙爜琚慨鏀规椂鎵嶅寘鍚瘑鐮佸瓧娈�
+    if (!isEdit.value || isPasswordModified.value) {
+      submitData.password = form.password
+    }
+
     const savedJudge = await JudgeApi.saveJudge(submitData)
-    console.log('璇勫淇濆瓨鎴愬姛:', savedJudge);
     
     // 2. 涓婁紶鏂伴�夋嫨鐨勫ご鍍忔枃浠�
     if (savedJudge.id) {
@@ -415,7 +483,6 @@
     if (form.currentAvatar?.isExisting && form.currentAvatar.id) {
       try {
         await deleteMedia(form.currentAvatar.id);
-        console.log('宸插垹闄ゆ棫澶村儚');
       } catch (error) {
         console.warn('鍒犻櫎鏃уご鍍忓け璐ワ紝缁х画涓婁紶鏂板ご鍍�:', error);
       }

--
Gitblit v1.8.0