From dcbb3e02a7d63e4c8a4a821589ca60b3feba5ec2 Mon Sep 17 00:00:00 2001 From: danchaotaiyang Date: Thu, 22 Jan 2026 01:15:41 +0800 Subject: [PATCH] =?UTF-8?q?=3D=20=E8=81=8C=E4=B8=9A=E8=A7=84=E5=88=92?= =?UTF-8?q?=E6=8E=A8=E8=8D=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/service/career-planning.vue | 189 ++----- pages/service/components/CareerPath.vue | 512 ++++-------------- pages/service/components/CareerRecommend.vue | 86 ++- pages/service/components/SkillDevelopment.vue | 487 +++-------------- stores/useCareerPathStore.js | 110 ++-- stores/useCareerRecommendationStore.js | 41 +- stores/useSkillDevelopmentStore.js | 114 ++-- 7 files changed, 426 insertions(+), 1113 deletions(-) diff --git a/pages/service/career-planning.vue b/pages/service/career-planning.vue index 5eab772..7a35d07 100644 --- a/pages/service/career-planning.vue +++ b/pages/service/career-planning.vue @@ -26,15 +26,9 @@ const activeTab = ref(0); const selectedJobTitle = ref(''); const selectedJobPossessedSkills = ref([]); const selectedJobImprovementSkills = ref([]); -const isLoadingJobSkill = ref(false); const currentJobId = ref(null); const currentJobName = ref(''); -// 技能发展所需的数据 -const recommendSkillsData = ref({ - currentJobSkills: [], - recommendedJobs: [] -}); const pathSkillsData = ref({ pathData: { @@ -319,121 +313,6 @@ function handleMoreClick() { // TODO: 实现更多功能 } -function normalizeSkillLevel(score) { - const numericScore = Number(score); - if (Number.isNaN(numericScore)) { - return 0; - } - const rounded = Math.round(numericScore); - return Math.max(1, Math.min(6, rounded)); -} - -function splitSkillListByScore(skills = []) { - if (!Array.isArray(skills) || skills.length === 0) { - return { - possessed: [], - improvement: [] - }; - } - - const sorted = [...skills].sort((a, b) => (Number(b.skillScore) || 0) - (Number(a.skillScore) || 0)); - const midpoint = Math.ceil(sorted.length / 2); - const mapSkill = (item) => ({ - name: item?.skillName || '', - level: normalizeSkillLevel(item?.skillScore) - }); - - return { - possessed: sorted.slice(0, midpoint).map(mapSkill), - improvement: sorted.slice(midpoint).map(mapSkill) - }; -} - -// 处理职位卡片点击 -async function handleJobCardClick(job) { - if (!job) { - return; - } - - selectedJobTitle.value = job.title || job.jobName || ''; - selectedJobPossessedSkills.value = []; - selectedJobImprovementSkills.value = []; - - if (isLoadingJobSkill.value) { - return; - } - - isLoadingJobSkill.value = true; - uni.showLoading({ - title: '加载中...', - mask: true - }); - - try { - // 从 appUserInfo 接口获取技能数据 - const response = await appUserInfo(); - const userInfo = response?.data || {}; - const appSkillsList = Array.isArray(userInfo?.appSkillsList) ? userInfo.appSkillsList : []; - - // 将 appSkillsList 转换为 splitSkillListByScore 需要的格式 - const skillList = appSkillsList.map(item => ({ - skillName: item?.name || item?.nameStr || '', - skillScore: item?.levels || item?.levelStr || 0 - })).filter(item => item.skillName); - - const { possessed, improvement } = splitSkillListByScore(skillList); - - if (possessed.length === 0 && improvement.length === 0) { - // 如果 appUserInfo 中没有技能数据,尝试使用推荐职位数据中的技能信息 - const fallbackSkills = Array.isArray(job?.rawSkills) ? job.rawSkills : []; - if (fallbackSkills.length === 0) { - uni.showToast({ - title: '暂无技能数据', - icon: 'none' - }); - return; - } - const fallbackSplit = splitSkillListByScore(fallbackSkills); - selectedJobPossessedSkills.value = fallbackSplit.possessed; - selectedJobImprovementSkills.value = fallbackSplit.improvement; - } else { - selectedJobPossessedSkills.value = possessed; - selectedJobImprovementSkills.value = improvement; - } - skillDetailPopup.value?.open(); - } catch (error) { - // 接口调用失败,尝试使用推荐职位数据中的技能信息 - const fallbackSkills = Array.isArray(job?.rawSkills) ? job.rawSkills : []; - if (fallbackSkills.length > 0) { - const fallbackSplit = splitSkillListByScore(fallbackSkills); - selectedJobPossessedSkills.value = fallbackSplit.possessed; - selectedJobImprovementSkills.value = fallbackSplit.improvement; - skillDetailPopup.value?.open(); - } else { - uni.showToast({ - title: '获取技能信息失败', - icon: 'none' - }); - } - } finally { - isLoadingJobSkill.value = false; - uni.hideLoading(); - } -} - -// 处理技能弹出层关闭 -function handleSkillPopupClose() { - // 可以在这里处理关闭后的逻辑 -} - -// 处理职业推荐技能数据更新 -function handleRecommendSkillsUpdated(data) { - recommendSkillsData.value = { - currentJobSkills: data.currentJobSkills || [], - recommendedJobs: data.recommendedJobs || [] - }; -} - // 处理职业路径数据更新 function handlePathDataUpdated(data) { pathSkillsData.value = { @@ -485,7 +364,6 @@ onMounted(() => { :job-title="selectedJobTitle" :possessed-skills="selectedJobPossessedSkills" :improvement-skills="selectedJobImprovementSkills" - @close="handleSkillPopupClose" /> @@ -506,13 +384,7 @@ onMounted(() => { - + { + + diff --git a/pages/service/components/SkillDevelopment.vue b/pages/service/components/SkillDevelopment.vue index b326bc3..a17e1aa 100644 --- a/pages/service/components/SkillDevelopment.vue +++ b/pages/service/components/SkillDevelopment.vue @@ -1,382 +1,85 @@ - - + + +