diff --git a/apiRc/service/skillDevelopment.js b/apiRc/service/skillDevelopment.js index 15216c5..a8d190d 100644 --- a/apiRc/service/skillDevelopment.js +++ b/apiRc/service/skillDevelopment.js @@ -7,9 +7,19 @@ import request from '@/utilsRc/request' // 获取技能信息 -export function getSkill(query) { +export function getCareerPath(query) { return request({ - url: '/jobSkillDet/getJobSkillWeight', + url: '/jobPath/getJobPathJobList', + method: 'get', + params: query, + baseUrlType: 'zytp' + }) +} + +// 获取技能信息 +export function getSkillResult(query) { + return request({ + url: '/jobDimScore/getJobDimScoreList', method: 'get', params: query, baseUrlType: 'zytp' diff --git a/pages/service/components/SkillDevelopment.vue b/pages/service/components/SkillDevelopment.vue index 002c2e8..9b01902 100644 --- a/pages/service/components/SkillDevelopment.vue +++ b/pages/service/components/SkillDevelopment.vue @@ -43,30 +43,48 @@ const store = useSkillDevelopmentStore(); - +
+
+ 职业路径 +
+
+ +
+ +
+
+
+
- 技能发展路径 + {{ store.currentCareerLabel }}技能
- -
- 基于您的当前职业和目标职业,以下是您需要重点发展的技能: -
-
暂无数据
-
-
- {{ skill.name }} -
- 技能分数: {{ skill.score }} - 权重: {{ skill.weight }} -
-
-
-
- {{ tag }} +
+
{{ item.label }}
+
+
+
{{ d.label }}
+
+
技能得分:{{ d.value }}
+
权重:{{ d.weight }}
+
@@ -190,73 +208,96 @@ button::after { position: relative; } -.skill-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 16rpx; - width: 100%; - box-sizing: border-box; +.career-paths { + grid-auto-flow: column; + + .career-index { + background: #6c64e7; + border: 3px solid #fff; + box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3); + } + + .career-label { + color: #6c64e7; + } + + .career-active { + .career-index { + background: #22c55e; + } + + .career-label { + color: #000; + } + } } -.skill-name { - font-size: 32rpx; - line-height: 46rpx; - color: rgb(16, 16, 16); - text-align: left; - font-family: 'PingFangSC-Bold', 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, 'Microsoft YaHei', sans-serif; - font-weight: 600; - flex: 1; - min-width: 0; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; +.skill-label { + color: #94a3b8; } -.skill-info { - display: flex; - align-items: center; - gap: 12rpx; - flex-shrink: 0; - margin-left: 16rpx; +.skill-detail-item { + background: #c1d2ea; } -.skill-score { - font-size: 24rpx; - line-height: 34rpx; - border-radius: 10rpx; - background-color: rgba(49, 100, 239, 0.1); - color: rgba(44, 101, 247, 1); - text-align: center; - padding: 6rpx 12rpx; - white-space: nowrap; +.skill-detail-item-label { + color: #334155; + + & + div { + color: #4f46e5; + } +} + + + + diff --git a/stores/useSkillDevelopmentStore.js b/stores/useSkillDevelopmentStore.js index d0064b3..6971d71 100644 --- a/stores/useSkillDevelopmentStore.js +++ b/stores/useSkillDevelopmentStore.js @@ -1,7 +1,7 @@ import { computed, ref, watch } from 'vue'; import { defineStore } from 'pinia'; import { getCurrentPosition, getPath } from '@/apiRc/service/careerPath'; -import { getSkill } from '@/apiRc/service/skillDevelopment'; +import { getCareerPath, getSkillResult } from '@/apiRc/service/skillDevelopment'; export const useSkillDevelopmentStore = defineStore('skill-development', () => { @@ -66,6 +66,15 @@ export const useSkillDevelopmentStore = defineStore('skill-development', () => { }); }); + const careerPaths = ref([]); + const currentCareer = ref(null); + const currentCareerLabel = computed(() => { + if (!currentCareer.value) { + return ''; + } + return currentCareer.value.label; + }); + const result = ref([]); const fetchData = async () => { @@ -117,21 +126,17 @@ export const useSkillDevelopmentStore = defineStore('skill-development', () => { } }; - const fetchResult = async () => { + const fetchCareerPaths = async () => { if (!targetCareer.value) { return; } - const current = professionsRef.value.find((d) => d.value === profession.value); - const target = pathsRef.value.find((d) => d.value === targetCareer.value); - if (!current || !target) { - return; - } + const [startJobId, endJobId] = targetCareer.value.split('-'); const params = { - currentJobName: current.label, - targetJobName: target.label + startJobId, + endJobId }; try { - const { code, msg, data } = await getSkill(params); + const { code, msg, data } = await getCareerPath(params); if (code !== 0) { uni.showToast({ title: msg, @@ -139,20 +144,54 @@ export const useSkillDevelopmentStore = defineStore('skill-development', () => { }); return; } - if (typeof data !== 'undefined' && Array.isArray(data) && data.length > 0 && data[ 0 ]) { - const excludes = data[ 0 ].currentSkillDetList.map((d) => d.skillId); - result.value = data[ 0 ].targetSkillDetList - .filter((d) => !excludes.includes(d.skillId)) - .map((d) => { - return { - type: d.skillType, - title: d.skillName, - name: d.skillName, - weight: d.skillWeight, - score: d.skillScore - }; - }); + if (!data) { + return; } + careerPaths.value = data.map((d) => { + return { + label: d.name, + value: d.jobId + }; + }); + if (careerPaths.value[0]) { + void eventResult(careerPaths.value[0]); + } + } catch (e) { + console.warn(e); + careerPaths.value = []; + } + }; + + const eventResult = async (path) => { + currentCareer.value = path; + const params = { + jobId: path.value + }; + try { + const { code, msg, data } = await $AxiosHttp.useAxiosRequest(getSkillResult, params); + if (code !== 0) { + uni.showToast({ + title: msg, + icon: 'none' + }); + return; + } + if (!data) { + return; + } + result.value = data.map((d) => { + return { + label: d.secDimName, + value: d.secDimId, + children: d.skillDetList.map((d) => { + return { + label: d.skillName, + value: d.skillScore, + weight: d.skillWeight + }; + }) + }; + }); } catch (e) { console.warn(e); } @@ -180,7 +219,7 @@ export const useSkillDevelopmentStore = defineStore('skill-development', () => { }); return; } - void fetchResult(); + void fetchCareerPaths(); }; const eventProfession = (e) => { @@ -190,6 +229,7 @@ export const useSkillDevelopmentStore = defineStore('skill-development', () => { professionLabel.value = item.label; targetCareer.value = ''; targetCareerLabel.value = ''; + careerPaths.value = []; result.value = []; }; @@ -198,6 +238,7 @@ export const useSkillDevelopmentStore = defineStore('skill-development', () => { const item = pathsRef.value[ e.detail.value ]; targetCareer.value = item.value; targetCareerLabel.value = item.label; + careerPaths.value = []; result.value = []; }; @@ -223,9 +264,13 @@ export const useSkillDevelopmentStore = defineStore('skill-development', () => { targetCareer, targetCareerLabel, pathsRef, + careerPaths, + currentCareer, + currentCareerLabel, result, eventProfession, eventTargetCareer, - eventSearch + eventSearch, + eventResult }; });