门店信息中专业经验修改到服务技能页面
This commit is contained in:
parent
a800372ad2
commit
917a0af084
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue