From 8337c34fcc761d07acaad796d10f3e12e9bbe2d1 Mon Sep 17 00:00:00 2001
From: lrj <owen.stl@gmail.com>
Date: 星期日, 05 十月 2025 08:56:04 +0800
Subject: [PATCH] feat: 微信项目详情支持阶段评分时间轴
---
web/src/components/JudgeFormSimple.vue | 93 +++++++++++++++++++++++++++++++++++++++-------
1 files changed, 79 insertions(+), 14 deletions(-)
diff --git a/web/src/components/JudgeFormSimple.vue b/web/src/components/JudgeFormSimple.vue
index 6445dc7..8da6855 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,6 +208,26 @@
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'
+ }
]
}
@@ -187,9 +235,12 @@
watch(() => props.judgeData, (data) => {
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 +248,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 +265,6 @@
url: firstImage.fullUrl
};
form.avatarUrl = firstImage.fullUrl;
- console.log('璁剧疆褰撳墠澶村儚:', form.currentAvatar);
} else {
form.currentAvatar = null;
}
@@ -235,16 +282,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 +323,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 +343,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 +363,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 +408,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 +481,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