From 1468002fe2534c74bf14d836ce54e50fa24d3948 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=B3?= Date: Wed, 12 Nov 2025 12:20:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apiRc/jobPath.js | 56 ++++ apiRc/jobRecommend.js | 64 +++++ apiRc/jobSkill.js | 77 ++++++ apiRc/user/user.js | 2 +- manifest.json | 2 +- pages/service/career-planning.vue | 196 +++++++++++--- pages/service/components/CareerPath.vue | 247 ++++++++++++++---- pages/service/components/CareerRecommend.vue | 234 ++++++++++------- pages/service/components/SkillDevelopment.vue | 63 +++++ project.config.json | 35 +++ project.private.config.json | 22 ++ .../dist/dev/mp-weixin/project.config.json | 55 ++-- utilsRc/config.js | 4 +- utilsRc/request.js | 16 +- 14 files changed, 856 insertions(+), 217 deletions(-) create mode 100644 apiRc/jobPath.js create mode 100644 apiRc/jobRecommend.js create mode 100644 apiRc/jobSkill.js create mode 100644 project.config.json create mode 100644 project.private.config.json diff --git a/apiRc/jobPath.js b/apiRc/jobPath.js new file mode 100644 index 0000000..d0930e6 --- /dev/null +++ b/apiRc/jobPath.js @@ -0,0 +1,56 @@ +/* + * @Date: 2025-11-12 + * @Description: 职业路径相关接口 + */ +import request from '@/utilsRc/request' + +// 根据职业名称获取路径列表 +export function getJobPathPage(params) { + return request({ + url: '/jobPath/getJobPathPage', + method: 'get', + params, + baseUrlType: 'zytp' + }) +} + +// 根据职业路径ID获取详情 +export function getJobPathDetail(params) { + return request({ + url: '/jobPath/getJobPathDetail', + method: 'get', + params, + baseUrlType: 'zytp' + }) +} + +// 获取职业路径数量 +export function getJobPathNum() { + return request({ + url: '/jobPath/getJobPathNum', + method: 'get', + baseUrlType: 'zytp' + }) +} + +// 导入职业路径 +export function importJobPath(data) { + return request({ + url: '/jobPath/importJobPath', + method: 'post', + data, + baseUrlType: 'zytp' + }) +} + +// 导出职业路径 +export function exportJobPath(params) { + return request({ + url: '/jobPath/exportJobPath', + method: 'get', + params, + baseUrlType: 'zytp', + responseType: 'arraybuffer' + }) +} + diff --git a/apiRc/jobRecommend.js b/apiRc/jobRecommend.js new file mode 100644 index 0000000..df1ef7c --- /dev/null +++ b/apiRc/jobRecommend.js @@ -0,0 +1,64 @@ +/* + * @Date: 2025-11-12 + * @Description: 职业推荐相关接口 + */ +import request from '@/utilsRc/request' + +function createFormData(payload = {}) { + if (typeof FormData !== 'undefined') { + const formData = new FormData() + Object.keys(payload).forEach(key => { + const value = payload[key] + if (value !== undefined && value !== null && value !== '') { + formData.append(key, value) + } + }) + return formData + } + return payload +} + +export function recommendJob(data) { + const formData = createFormData({ + jobId: data?.jobId + }) + + return request({ + url: '/job/recommendJob', + method: 'post', + data: formData, + baseUrlType: 'zytp', + header: { + 'content-type': 'multipart/form-data' + } + }) +} + +export function countJobRecommendRecords(data) { + const formData = createFormData({ + jobId: data?.jobId, + jobName: data?.jobName, + recommendType: data?.recommendType, + startDate: data?.startDate, + endDate: data?.endDate + }) + + return request({ + url: '/jobRecommendRecord/countJobRecommendRecords', + method: 'post', + data: formData, + baseUrlType: 'zytp', + header: { + 'content-type': 'multipart/form-data' + } + }) +} + +export function getJobRecommendRecords(params) { + return request({ + url: '/jobRecommendRecord/getJobRecommendRecords', + method: 'get', + params, + baseUrlType: 'zytp' + }) +} diff --git a/apiRc/jobSkill.js b/apiRc/jobSkill.js new file mode 100644 index 0000000..1ebeedb --- /dev/null +++ b/apiRc/jobSkill.js @@ -0,0 +1,77 @@ +/* + * @Date: 2025-11-12 + * @Description: 职业技能相关接口 + */ +import request from '@/utilsRc/request' + +export function getJobSkillDetail(params) { + return request({ + url: '/jobSkillDet/getJobSkillDet', + method: 'get', + params, + baseUrlType: 'zytp' + }) +} + +export function getJobPathSkill(data) { + let formData + if (typeof FormData !== 'undefined') { + formData = new FormData() + if (data?.pathId !== undefined && data?.pathId !== null) { + formData.append('pathId', data.pathId) + } + if (data?.currentJobName !== undefined && data?.currentJobName !== null) { + formData.append('currentJobName', data.currentJobName) + } + } else { + formData = { + pathId: data?.pathId ?? '', + currentJobName: data?.currentJobName ?? '' + } + } + + return request({ + url: '/jobSkillDet/getJobPathSkill', + method: 'post', + data: formData, + baseUrlType: 'zytp', + header: { + 'content-type': 'multipart/form-data' + } + }) +} + +// 获取技能热度分析列表 +export function getSkillsHeatAnalysisList(params) { + return request({ + url: '/skillsHeatAnalysis/list', + method: 'get', + params, + baseUrlType: 'zytp' + }) +} + +// 获取技能数量 +export function getSkillNum(data) { + let formData + if (typeof FormData !== 'undefined') { + formData = new FormData() + if (data?.skillType !== undefined && data?.skillType !== null) { + formData.append('skillType', data.skillType) + } + } else { + formData = { + skillType: data?.skillType ?? '' + } + } + + return request({ + url: '/skill/getSkillNum', + method: 'post', + data: formData, + baseUrlType: 'zytp', + header: { + 'content-type': 'multipart/form-data' + } + }) +} diff --git a/apiRc/user/user.js b/apiRc/user/user.js index 07ae540..a40ac31 100644 --- a/apiRc/user/user.js +++ b/apiRc/user/user.js @@ -8,7 +8,7 @@ import request from '@/utilsRc/request' // 获取用户信息(职业规划推荐用) export function appUserInfo() { return request({ - url: '/app/user/appUserInfo', + fullUrl: 'http://222.80.110.161:11111/api/ks/app/user/appUserInfo', method: 'get' }) } diff --git a/manifest.json b/manifest.json index 65f0c1c..fdfb69e 100644 --- a/manifest.json +++ b/manifest.json @@ -50,7 +50,7 @@ "quickapp" : {}, /* 小程序特有相关 */ "mp-weixin" : { - "appid" : "wx9d1cbc11c8c40ba7", + "appid" : "wx4aa34488b965a331", "setting" : { "urlCheck" : false, "es6" : true, diff --git a/pages/service/career-planning.vue b/pages/service/career-planning.vue index ae4dd6c..3d8c31d 100644 --- a/pages/service/career-planning.vue +++ b/pages/service/career-planning.vue @@ -35,10 +35,14 @@ - + /> + + @@ -50,9 +54,10 @@ @@ -291,6 +419,13 @@ onMounted(() => { padding: 0; } +.path-summary { + margin-top: 16rpx; + font-size: 24rpx; + color: #666666; + text-align: center; +} + .path-section { background-color: #FFFFFF; border-radius: 16rpx; diff --git a/pages/service/components/CareerRecommend.vue b/pages/service/components/CareerRecommend.vue index 5acdb8d..befff89 100644 --- a/pages/service/components/CareerRecommend.vue +++ b/pages/service/components/CareerRecommend.vue @@ -5,7 +5,7 @@ 当前职位信息 当前职位 - {{ currentJob || '前端开发工程师' }} + {{ currentJobDisplay }} @@ -20,11 +20,16 @@ > {{ skill }} + 暂无技能数据 - 相似推荐职位 + + 相似推荐职位 + 共{{ recommendRecordCount }}条记录 + + 暂无推荐职位 diff --git a/project.config.json b/project.config.json new file mode 100644 index 0000000..013e402 --- /dev/null +++ b/project.config.json @@ -0,0 +1,35 @@ +{ + "setting": { + "es6": true, + "postcss": true, + "minified": true, + "uglifyFileName": false, + "enhance": true, + "packNpmRelationList": [], + "babelSetting": { + "ignore": [], + "disablePlugins": [], + "outputPath": "" + }, + "useCompilerPlugins": false, + "minifyWXML": true, + "compileWorklet": false, + "uploadWithSourceMap": true, + "packNpmManually": false, + "minifyWXSS": true, + "localPlugins": false, + "disableUseStrict": false, + "condition": false, + "swc": false, + "disableSWC": true + }, + "compileType": "miniprogram", + "simulatorPluginLibVersion": {}, + "packOptions": { + "ignore": [], + "include": [] + }, + "appid": "wx4aa34488b965a331", + "editorSetting": {}, + "libVersion": "3.11.1" +} \ No newline at end of file diff --git a/project.private.config.json b/project.private.config.json new file mode 100644 index 0000000..cf2433c --- /dev/null +++ b/project.private.config.json @@ -0,0 +1,22 @@ +{ + "libVersion": "3.11.1", + "projectname": "ks-app-employment-service", + "setting": { + "urlCheck": true, + "coverView": true, + "lazyloadPlaceholderEnable": false, + "skylineRenderEnable": false, + "preloadBackgroundData": false, + "autoAudits": false, + "showShadowRootInWxmlPanel": true, + "compileHotReLoad": true, + "useApiHook": true, + "useApiHostProcess": true, + "useStaticServer": false, + "useLanDebug": false, + "showES6CompileOption": false, + "checkInvalidKey": true, + "ignoreDevUnusedFiles": true, + "bigPackageSizeSupport": false + } +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/project.config.json b/unpackage/dist/dev/mp-weixin/project.config.json index 259a170..013e402 100644 --- a/unpackage/dist/dev/mp-weixin/project.config.json +++ b/unpackage/dist/dev/mp-weixin/project.config.json @@ -1,36 +1,35 @@ { - "description": "项目配置文件。", - "packOptions": { - "ignore": [] - }, "setting": { - "urlCheck": false, "es6": true, "postcss": true, "minified": true, - "newFeature": true, - "bigPackageSizeSupport": true + "uglifyFileName": false, + "enhance": true, + "packNpmRelationList": [], + "babelSetting": { + "ignore": [], + "disablePlugins": [], + "outputPath": "" + }, + "useCompilerPlugins": false, + "minifyWXML": true, + "compileWorklet": false, + "uploadWithSourceMap": true, + "packNpmManually": false, + "minifyWXSS": true, + "localPlugins": false, + "disableUseStrict": false, + "condition": false, + "swc": false, + "disableSWC": true }, "compileType": "miniprogram", - "libVersion": "3.5.7", - "appid": "wx9d1cbc11c8c40ba7", - "projectname": "qingdao-employment-service", - "condition": { - "search": { - "current": -1, - "list": [] - }, - "conversation": { - "current": -1, - "list": [] - }, - "game": { - "current": -1, - "list": [] - }, - "miniprogram": { - "current": -1, - "list": [] - } - } + "simulatorPluginLibVersion": {}, + "packOptions": { + "ignore": [], + "include": [] + }, + "appid": "wx4aa34488b965a331", + "editorSetting": {}, + "libVersion": "3.11.1" } \ No newline at end of file diff --git a/utilsRc/config.js b/utilsRc/config.js index e011f73..4769b47 100644 --- a/utilsRc/config.js +++ b/utilsRc/config.js @@ -19,8 +19,8 @@ let exports = { // baseUrl: 'http://10.160.0.5:8903', // 演示环境外网 // baseUrl: 'http://111.34.80.140:8081/prod-api', // 正式环境(不要轻易连接) - - baseUrl: 'http://10.160.0.5:8907', // 正式环境在济南人才上部署(不要轻易连接) + baseUrl: 'http://ks.zhaopinzao8dian.com/api/ks', + zytpBaseUrl: 'http://ks.zhaopinzao8dian.com/api/ks', diff --git a/utilsRc/request.js b/utilsRc/request.js index 47c2ad5..6736d1b 100644 --- a/utilsRc/request.js +++ b/utilsRc/request.js @@ -12,6 +12,7 @@ import { toast, showConfirm, tansParams } from '@/utilsRc/common' let timeout = 10000 const baseUrl = configRc.baseUrl +const zytpBaseUrl = configRc.zytpBaseUrl || '' const request = config => { // 是否需要设置 token @@ -22,20 +23,27 @@ const request = config => { } config.header['Authorization'] = 'Bearer ' + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJVMDRocERSZjdZMXJUbUxXb05uOUpzYUdDZzBNazJJQSIsInVzZXJJZCI6MX0.LZ29vvA4tK3b9Hki4nU9Jb1himXZM2AEOue3CMRY95w' // get请求映射params参数 + const baseType = config.baseUrlType + const requestBaseUrl = baseType === 'zytp' && zytpBaseUrl ? zytpBaseUrl : baseUrl + let requestUrl = config.fullUrl ? config.fullUrl : (requestBaseUrl + (config.url || '')) + if (config.params) { - let url = config.url + '?' + tansParams(config.params) + let url = tansParams(config.params) url = url.slice(0, -1) - config.url = url + if (url) { + requestUrl += (requestUrl.includes('?') ? '&' : '?') + url + } } return new Promise((resolve, reject) => { uni.request({ method: config.method || 'get', timeout: config.timeout || timeout, - url: baseUrl + config.url, + url: requestUrl, // url: 'https://gccrcdh.sd-talent.cn:80/zhq' + config.url, data: config.data, header: config.header, - dataType: 'json' + dataType: 'json', + responseType: config.responseType || 'text' }).then(response => { let res = response.data let error = response.errMsg!='request:ok'