门店信息中专业经验修改到服务技能页面

This commit is contained in:
BAKEYi 2026-06-01 18:18:08 +08:00
parent a800372ad2
commit 917a0af084
2 changed files with 2485 additions and 2407 deletions

View File

@ -45,6 +45,20 @@
</view>
</view>
</view>
<view class="box-cont" style="padding: 0;">
<view class="form-item-two" @click="editable ? openExperiencePicker() : null">
<text class="label required">专业经验</text>
<view class="picker-content">
<text :class="displayMajor ? 'picker-value' : 'placeholder'">
{{ displayExperienceText || '请选择' }}
</text>
<image v-if="editable"
src="https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/dccc4513-377c-4bfa-9fd2-a5cfdb9798f3"
class="arrow-right" mode="aspectFit"></image>
</view>
</view>
</view>
</view>
<!-- 底部按钮 -->
@ -93,6 +107,12 @@
serviceList: [], //
selectedSkills: [], // ID
originalSkills: [], // ID
//
originalMajor: null, //
pendingMajor: null, //
displayMajor: null, //
editable: false, //
buttonType: 'change', // : change-, edit-/, view-
showAuditTip: false, //
@ -115,19 +135,26 @@
.map(item => item.title);
return selectedTitles.join('、');
},
// major
displayExperienceText() {
return this.getExperienceText(this.displayMajor);
},
hasChanges() {
//
const current = [...this.selectedSkills].sort().join(',');
const original = [...this.originalSkills].sort().join(',');
return current !== original;
// ()
const currentSorted = [...this.currentSkills].sort().join(',');
const selectedSorted = [...this.selectedSkills].sort().join(',');
const skillsChanged = currentSorted !== selectedSorted;
const majorChanged = String(this.displayMajor || '') !== String(this.originalMajor || '');
return skillsChanged || majorChanged;
},
//
shouldShowRejectReason() {
//
return this.auditStatus === 3 &&
!this.showPendingSkills &&
!this.skillsChanged &&
!this.hasChanges &&
this.backText;
//
!this.hasPendingApply();
},
//
@ -150,6 +177,9 @@
async initPage() {
this.isLoading = true;
try {
this.originalMajor = this.sjInformation?.data?.major || null;
this.displayMajor = this.originalMajor;
//
await this.loadServiceSkills();
//
@ -161,10 +191,28 @@
}
},
//
getExperienceText(major) {
const experiences = ['', '实习', '1-3年', '3-5年', '5-10年', '10年以上'];
return experiences[major] || '';
},
//
openExperiencePicker() {
if (!this.editable) return;
uni.showActionSheet({
itemList: ['实习', '1-3年', '3-5年', '5-10年', '10年以上'],
success: (res) => {
this.displayMajor = res.tapIndex + 1;
}
});
},
//
async cleanupRejectedSkillsIfNeeded() {
try {
const rejectedSkills = uni.getStorageSync('rejectedSkills');
const rejectedMajor = uni.getStorageSync('rejectedMajor');
const lastApplyTime = uni.getStorageSync('lastApplyTime');
if (rejectedSkills && rejectedSkills.length > 0) {
@ -186,11 +234,13 @@
const currentSorted = [...currentSkillIds].sort().join(',');
const rejectedSorted = [...rejectedSkills].sort().join(',');
const currentMajor = res.data.major;
//
if (currentSorted !== rejectedSorted) {
if (currentSorted !== rejectedSorted || String(currentMajor) !== String(rejectedMajor)) {
console.log('检测到技能已变更,清理驳回相关存储');
uni.removeStorageSync('rejectedSkills');
uni.removeStorageSync('rejectedMajor');
uni.removeStorageSync('lastRejectTime');
}
}
@ -277,15 +327,18 @@
console.log('解析后的技能ID:', skillIds);
this.pendingMajor = detail.major || this.originalMajor;
//
if (this.auditStatus === 1) { //
this.selectedSkills = [...skillIds];
this.displayMajor = this.pendingMajor;
console.log('审核中,待审核技能:', this.selectedSkills);
//
uni.setStorageSync('lastApplyTime', new Date().getTime());
} else if (this.auditStatus === 3) { //
//
await this.handleRejectedSkills(skillIds);
await this.handleRejectedData(skillIds, detail.major);
}
this.updateCheckedStatus();
@ -298,6 +351,7 @@
console.log('申请详情返回数据为空或code不为200:', res);
//
uni.removeStorageSync('rejectedSkills');
uni.removeStorageSync('rejectedMajor');
uni.removeStorageSync('lastRejectTime');
await this.loadCurrentEffectiveSkills();
}
@ -310,36 +364,42 @@
},
//
async handleRejectedSkills(rejectedSkillIds) {
async handleRejectedData(rejectedSkillIds, rejectedMajor) {
const storedRejectedSkills = uni.getStorageSync('rejectedSkills');
const storedRejectedMajor = uni.getStorageSync('rejectedMajor');
const lastRejectTime = uni.getStorageSync('lastRejectTime');
//
const currentSkills = await this.getCurrentEffectiveSkillIds();
const currentMajor = this.sjInformation?.data?.major || null;
const rejectedSorted = [...rejectedSkillIds].sort().join(',');
const storedSorted = storedRejectedSkills ? [...storedRejectedSkills].sort().join(',') : '';
const currentSorted = [...currentSkills].sort().join(',');
//
if (rejectedSorted === currentSorted) {
if (rejectedSorted === currentSorted && String(rejectedMajor||'') === String(currentMajor||'')) {
console.log('驳回数据与当前生效技能相同,可能数据过时,忽略本次驳回数据');
this.selectedSkills = [...currentSkills];
this.displayMajor = currentMajor;
//
uni.removeStorageSync('rejectedSkills');
uni.removeStorageSync('rejectedMajor');
uni.removeStorageSync('lastRejectTime');
this.backText = ''; //
return;
}
//
if (rejectedSorted !== storedSorted) {
if (rejectedSorted !== storedSorted || String(rejectedMajor) !== String(storedRejectedMajor)) {
console.log('发现新的驳回数据,更新存储:', rejectedSkillIds);
uni.setStorageSync('rejectedSkills', rejectedSkillIds);
uni.setStorageSync('rejectedMajor', rejectedMajor);
uni.setStorageSync('lastRejectTime', new Date().getTime());
}
this.selectedSkills = [...rejectedSkillIds];
this.displayMajor = rejectedMajor || currentMajor;
console.log('审核驳回,被驳回技能:', this.selectedSkills);
},
@ -378,11 +438,14 @@
this.currentSkills = [...currentSkills];
this.originalSkills = [...currentSkills];
this.originalMajor = this.sjInformation?.data?.major || null;
console.log('当前生效的技能ID:', this.currentSkills);
//
if (this.auditStatus === null || this.auditStatus === 2) {
this.selectedSkills = [...currentSkills];
this.displayMajor = this.originalMajor;
}
// selectedSkills
// handleRejectedSkills
@ -435,13 +498,14 @@
this.editable = false;
this.showPendingSkills = false;
} else if (this.auditStatus === 3) { //
//
//
const rejectedSkills = uni.getStorageSync('rejectedSkills');
const rejectedMajor = uni.getStorageSync('rejectedMajor');
const rejectedSorted = rejectedSkills ? [...rejectedSkills].sort().join(',') : '';
const currentSorted = [...this.currentSkills].sort().join(',');
//
if (rejectedSorted === currentSorted) {
if (rejectedSorted === currentSorted && String(rejectedMajor||'') === String(this.originalMajor||'')) {
console.log('驳回数据无效,按无申请状态处理');
this.showAuditTip = false;
this.buttonType = 'change';
@ -491,6 +555,11 @@
//
togglePendingSkills() {
this.showPendingSkills = !this.showPendingSkills;
if (this.showPendingSkills) {
this.displayMajor = this.pendingMajor;
} else {
this.displayMajor = this.originalMajor;
}
//
this.updateNavTitle();
},
@ -501,6 +570,7 @@
this.buttonType = 'edit';
//
this.showPendingSkills = true;
this.displayMajor = this.pendingMajor || this.originalMajor;
//
this.updateNavTitle();
},
@ -509,6 +579,7 @@
cancelChange() {
//
this.selectedSkills = [...this.originalSkills];
this.displayMajor = this.originalMajor;
this.updateCheckedStatus();
this.editable = false;
@ -527,6 +598,10 @@
});
return;
}
if (!this.displayMajor) {
uni.showToast({ title: '请选择专业经验', icon: 'none' });
return;
}
if (!this.hasChanges) {
uni.showToast({
@ -542,7 +617,8 @@
});
const params = {
apply_type: 2, //
servers_kill: this.selectedSkills //
servers_kill: this.selectedSkills, //
major: this.displayMajor
};
console.log('提交的数据:', params);
@ -560,10 +636,12 @@
//
uni.removeStorageSync('rejectedSkills');
uni.removeStorageSync('rejectedMajor');
uni.removeStorageSync('lastRejectTime');
//
uni.setStorageSync('lastApplyTime', new Date().getTime());
this.pendingMajor = this.displayMajor;
//
this.showAuditTip = true;
@ -746,6 +824,55 @@
color: #333333;
}
/* 迁移的专业经验表单样式 */
.form-item-two {
display: flex;
align-items: center;
justify-content: space-between;
padding: 24rpx 24rpx;
}
.form-item-two > text.label {
flex-shrink: 0;
font-size: 28rpx;
color: #333333;
font-weight: 500;
}
.required::before {
content: '*';
color: #FF0000;
margin-right: 4rpx;
}
.picker-content {
flex: 1;
display: flex;
align-items: center;
justify-content: flex-end;
gap: 16rpx;
}
.picker-value,
.placeholder {
font-size: 28rpx;
text-align: right;
}
.picker-value {
color: #333333;
}
.placeholder {
color: #999999;
}
.arrow-right {
width: 9rpx;
height: 16rpx;
flex-shrink: 0;
}
.bottom-actions {
position: fixed;
bottom: 0;

View File

@ -69,25 +69,6 @@
class="arrow-right" mode="aspectFit"></image>
</view>
</view>
<!-- 其他信息标题 -->
<view class="section-title">
<view class="title-bar"></view>
<text>其他信息</text>
</view>
<!-- 专业经验 -->
<view class="form-item-two box-cont" @click="editable ? openExperiencePicker() : null">
<text class="label required">专业经验</text>
<view class="picker-content">
<text :class="displayData.major ? 'picker-value' : 'placeholder'">
{{displayData.experienceText || '请选择'}}
</text>
<image v-if="editable"
src="https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/dccc4513-377c-4bfa-9fd2-a5cfdb9798f3"
class="arrow-right" mode="aspectFit"></image>
</view>
</view>
</view>
<!-- 底部按钮区域 -->
@ -371,13 +352,11 @@
name: userData.name || '',
dependency: userData.dependency || '',
address: userData.address || '',
major: userData.major || '',
dependency_code: userData.dependency_code || '',
dependency_province: userData.dependency_province || '',
dependency_city: userData.dependency_city || '',
longitude: userData.longitude || '',
latitude: userData.latitude || '',
experienceText: this.getExperienceText(userData.major)
latitude: userData.latitude || ''
};
this.dependency_code = userData.dependency_code || '';
@ -470,14 +449,12 @@
name: detail.name || this.originalData.name,
dependency: detail.dependency || this.originalData.dependency,
address: detail.address || this.originalData.address,
major: detail.major || this.originalData.major,
dependency_code: detail.dependency_code || this.originalData.dependency_code,
dependency_province: detail.dependency_province || this.originalData
.dependency_province,
dependency_city: detail.dependency_city || this.originalData.dependency_city,
longitude: detail.longitude || this.originalData.longitude,
latitude: detail.latitude || this.originalData.latitude,
experienceText: this.getExperienceText(detail.major || this.originalData.major)
latitude: detail.latitude || this.originalData.latitude
};
}
@ -553,11 +530,6 @@
}
},
getExperienceText(major) {
const experiences = ['', '实习', '1-3年', '3-5年', '5-10年', '10年以上'];
return experiences[major] || '';
},
startChange() {
this.editable = true;
this.buttonType = 'edit';
@ -617,8 +589,7 @@
latitude: this.displayData.latitude,
dependency_code: this.displayData.dependency_code,
dependency_province: this.displayData.dependency_province,
dependency_city: this.displayData.dependency_city,
major: this.displayData.major
dependency_city: this.displayData.dependency_city
};
console.log('提交的数据:', submitData);
@ -695,13 +666,6 @@
});
return false;
}
if (!this.displayData.major) {
uni.showToast({
title: '请选择专业经验',
icon: 'none'
});
return false;
}
return true;
},
@ -1206,19 +1170,6 @@
});
this.$forceUpdate();
},
openExperiencePicker() {
if (!this.editable) return;
uni.showActionSheet({
itemList: ['实习', '1-3年', '3-5年', '5-10年', '10年以上'],
success: (res) => {
const experiences = ['实习', '1-3年', '3-5年', '5-10年', '10年以上'];
this.displayData.major = res.tapIndex + 1;
this.displayData.experienceText = experiences[res.tapIndex];
console.log('选择专业经验:', this.displayData.major, this.displayData.experienceText);
}
});
}
}
}