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