diff --git a/apiRc/jobSkill.js b/apiRc/jobSkill.js index 4c9f8ac..8741153 100644 --- a/apiRc/jobSkill.js +++ b/apiRc/jobSkill.js @@ -13,6 +13,16 @@ export function getJobSkillDetail(params) { }) } +// 获取技能权重 +export function getJobSkillWeight(params) { + return request({ + url: '/jobSkillDet/getJobSkillWeight', + method: 'get', + params, + baseUrlType: 'zytp' + }) +} + // 暂未使用 - 如果需要在 CareerPath.vue 中点击路径职位查看详细技能信息时使用 // 使用场景:获取职业路径中某个职位的详细技能信息(包含技能分数、类型等) // export function getJobPathSkill(data) { diff --git a/apiRc/user/user.js b/apiRc/user/user.js index 7e43b26..a40ac31 100644 --- a/apiRc/user/user.js +++ b/apiRc/user/user.js @@ -8,8 +8,7 @@ import request from '@/utilsRc/request' // 获取用户信息(职业规划推荐用) export function appUserInfo() { return request({ - url: '/app/user/appUserInfo', - method: 'get', - baseUrlType: 'user' // 使用用户接口专用baseUrl + fullUrl: 'http://222.80.110.161:11111/api/ks/app/user/appUserInfo', + method: 'get' }) } diff --git a/common/globalFunction.js b/common/globalFunction.js index 874e94d..f97113a 100644 --- a/common/globalFunction.js +++ b/common/globalFunction.js @@ -50,7 +50,8 @@ const prePage = () => { return prePage.$vm; } -export const urls ='http://10.110.145.145/images/train/' +// export const urls ='http://10.110.145.145/images/train/' +export const urls ='http://222.80.110.161:11111/images/train/' /** * 页面跳转封装,支持 query 参数传递和返回回调 @@ -60,34 +61,74 @@ export const urls ='http://10.110.145.145/images/train/' * @param {object} options.query - 携带参数 * @param {function} options.onBack - 页面返回时的回调(目标页调用 uni.navigateBack 时传递数据) */ -export const navTo = function(url, { - needLogin = false, - query = {}, - onBack = null -} = {}) { - const userStore = useUserStore(); - - if (needLogin && !userStore.hasLogin) { - uni.navigateTo({ - url: '/pages/complete-info/complete-info' - }); - return; - } - - const queryStr = Object.entries(query) - .map(([key, val]) => `${key}=${encodeURIComponent(val)}`) - .join('&'); - const finalUrl = queryStr ? `${url}?${queryStr}` : url; - - if (onBack) { - const pages = getCurrentPages(); - const currentPage = pages[pages.length - 1]; - currentPage.__onBackCallback__ = onBack; - } - - uni.navigateTo({ - url: finalUrl - }); +export const navTo = function(url, { + needLogin = false, + query = {}, + onBack = null +} = {}) { + const userStore = useUserStore(); + + if (needLogin && !userStore.hasLogin) { + const pages = getCurrentPages(); + if (pages.length >= 10) { + uni.redirectTo({ + url: '/pages/complete-info/complete-info', + fail: (err) => { + console.error('页面跳转失败:', err); + } + }); + } else { + uni.navigateTo({ + url: '/pages/complete-info/complete-info', + fail: (err) => { + console.error('页面跳转失败:', err); + uni.redirectTo({ + url: '/pages/complete-info/complete-info', + fail: (err2) => { + console.error('redirectTo也失败:', err2); + } + }); + } + }); + } + return; + } + + const queryStr = Object.entries(query) + .map(([key, val]) => `${key}=${encodeURIComponent(val)}`) + .join('&'); + const finalUrl = queryStr ? `${url}?${queryStr}` : url; + + if (onBack) { + const pages = getCurrentPages(); + const currentPage = pages[pages.length - 1]; + currentPage.__onBackCallback__ = onBack; + } + + const pages = getCurrentPages(); + if (pages.length >= 10) { + // 页面栈已满,使用redirectTo替代 + uni.redirectTo({ + url: finalUrl, + fail: (err) => { + console.error('页面跳转失败:', err); + } + }); + } else { + uni.navigateTo({ + url: finalUrl, + fail: (err) => { + console.error('页面跳转失败:', err); + // 失败后尝试redirectTo + uni.redirectTo({ + url: finalUrl, + fail: (err2) => { + console.error('redirectTo也失败:', err2); + } + }); + } + }); + } }; export const navBack = function({ diff --git a/components/jobfair/signDialog.vue b/components/jobfair/signDialog.vue index 1b12efb..70a1704 100644 --- a/components/jobfair/signDialog.vue +++ b/components/jobfair/signDialog.vue @@ -54,7 +54,7 @@ {{ item.jobTitle }} - {{ item.salaryRange }}元/月 + {{ item.minSalary }} - {{ item.maxSalary }}元/月 diff --git a/config.js b/config.js index a819393..c00d7aa 100644 --- a/config.js +++ b/config.js @@ -3,10 +3,14 @@ export default { baseUrl: 'http://222.80.110.161:11111/api/ks', // 测试 // baseUrl: 'http://ks.zhaopinzao8dian.com/api/ks', // 测试 - LCBaseUrl:'http://10.110.145.145:9100',//招聘、培训、帮扶 - LCBaseUrlInner:'http://10.110.145.145:10100',//内网端口 - imgBaseUrl:'http://10.110.145.145/images', //图片基础url - trainVideoImgUrl:'http://10.110.145.145:9100/file/file/minio', + // LCBaseUrl:'http://10.110.145.145:9100',//内网端口 + // LCBaseUrlInner:'http://10.110.145.145:10100',//招聘、培训、帮扶 + // imgBaseUrl:'http://10.110.145.145/images', //图片基础url + // trainVideoImgUrl:'http://10.110.145.145:9100/file/file/minio', + LCBaseUrl:'http://222.80.110.161:11111/prod-api',//内网端口 + LCBaseUrlInner:'http://222.80.110.161:11111/prod-psout-api',//招聘、培训、帮扶 + imgBaseUrl:'http://222.80.110.161:11111/images', //图片基础url + trainVideoImgUrl:'http://222.80.110.161:11111/prod-api/file/file/minio', // sseAI+ // StreamBaseURl: 'http://39.98.44.136:8000', StreamBaseURl: 'https://qd.zhaopinzao8dian.com/ai', @@ -21,7 +25,7 @@ export default { // 只使用本地缓寸的数据 OnlyUseCachedDB: true, // 使用模拟定位 - UsingSimulatedPositioning: true, + UsingSimulatedPositioning: false, // 应用信息 appInfo: { // 应用名称 diff --git a/packageA/pages/personalInfo/personalInfo.vue b/packageA/pages/personalInfo/personalInfo.vue index 7d75162..10fe842 100644 --- a/packageA/pages/personalInfo/personalInfo.vue +++ b/packageA/pages/personalInfo/personalInfo.vue @@ -394,11 +394,31 @@ function addSkill() { // 删除技能 function removeSkill(index) { - state.skills.splice(index, 1); + const skill = state.skills[index]; - // 更新完成度 - const result = getFormCompletionPercent(fromValue); - percent.value = result; + // 如果有技能id,调用删除接口 + if (skill && skill.id) { + $api.createRequest(`/app/appskill/${skill.id}`, {}, 'DELETE').then(() => { + // 接口调用成功,从本地数组中移除 + state.skills.splice(index, 1); + + // 更新完成度 + const result = getFormCompletionPercent(fromValue); + percent.value = result; + + $api.msg('删除成功'); + }).catch((err) => { + console.error('删除技能失败:', err); + $api.msg('删除失败,请重试'); + }); + } else { + // 没有id的技能(新增的),直接从本地数组中移除 + state.skills.splice(index, 1); + + // 更新完成度 + const result = getFormCompletionPercent(fromValue); + percent.value = result; + } } // 获取技能等级文本 diff --git a/packageA/pages/post/post.vue b/packageA/pages/post/post.vue index 05279af..4060ebc 100644 --- a/packageA/pages/post/post.vue +++ b/packageA/pages/post/post.vue @@ -68,6 +68,39 @@ {{ jobInfo.description }} + + + + 职位图片 + + + + + + + + + + + 联系人信息 + + + + + 联系人: + {{ contact.contactPerson }} + + + 职位: + {{ contact.position }} + + + 电话: + {{ contact.contactPersonPhone }} + + + + @@ -482,6 +515,16 @@ function formatPublishTime(dateString) { return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`; } } + +// 预览图片 +function previewImage(url, index) { + // 获取所有图片的URL列表 + const allImageUrls = jobInfo.value.filesList.map(file => file.fileUrl); + uni.previewImage({ + urls: allImageUrls, + current: index + }); +} diff --git a/pages/nearby/components/three.vue b/pages/nearby/components/three.vue index 8355421..1126a62 100644 --- a/pages/nearby/components/three.vue +++ b/pages/nearby/components/three.vue @@ -1,5 +1,5 @@ \ No newline at end of file diff --git a/stores/useLocationStore.js b/stores/useLocationStore.js index fc0c453..c8fd9fe 100644 --- a/stores/useLocationStore.js +++ b/stores/useLocationStore.js @@ -24,8 +24,8 @@ const useLocationStore = defineStore("location", () => { timeout: 10000, success: function(res) { const resd = { - longitude: 120.382665, - latitude: 36.066938 + longitude: 75.993802, + latitude: 39.468225 } if (config.UsingSimulatedPositioning) { // 使用模拟定位 longitudeVal.value = resd.longitude @@ -44,8 +44,8 @@ const useLocationStore = defineStore("location", () => { // latitudeVal.value = '' // reject(err) const resd = { - longitude: 120.382665, - latitude: 36.066938 + longitude: 75.993802, + latitude: 39.468225 } longitudeVal.value = resd.longitude latitudeVal.value = resd.latitude diff --git a/utils/loginHelper.js b/utils/loginHelper.js index 77ce8b3..919567d 100644 --- a/utils/loginHelper.js +++ b/utils/loginHelper.js @@ -72,9 +72,32 @@ export function navigateToLoginPage(options = {}) { ? `?${new URLSearchParams(params).toString()}` : ''; - uni.navigateTo({ - url: `${loginPage}${queryString}` - }); + const finalUrl = `${loginPage}${queryString}`; + const pages = getCurrentPages(); + + if (pages.length >= 10) { + // 页面栈已满,使用redirectTo替代 + uni.redirectTo({ + url: finalUrl, + fail: (err) => { + console.error('页面跳转失败:', err); + } + }); + } else { + uni.navigateTo({ + url: finalUrl, + fail: (err) => { + console.error('页面跳转失败:', err); + // 失败后尝试redirectTo + uni.redirectTo({ + url: finalUrl, + fail: (err2) => { + console.error('redirectTo也失败:', err2); + } + }); + } + }); + } } } diff --git a/utils/request.js b/utils/request.js index ab07299..573cce0 100644 --- a/utils/request.js +++ b/utils/request.js @@ -215,14 +215,34 @@ export function myRequest(url, data = {}, method = 'GET', port = 9100, headers = resolve(resData.data) return } - // 处理业务错误 - if (resData.data?.code === 401 || resData.data?.code === 402) { - uni.navigateTo({ - url:'/packageB/login?flag=nw' - }) - // navTo('/packageB/login?flag=nw'); - useUserStore().logOut() - + // 处理业务错误 + if (resData.data?.code === 401 || resData.data?.code === 402) { + const pages = getCurrentPages(); + if (pages.length >= 10) { + // 页面栈已满,使用redirectTo替代 + uni.redirectTo({ + url:'/packageB/login?flag=nw', + fail: (err) => { + console.error('页面跳转失败:', err); + } + }); + } else { + uni.navigateTo({ + url:'/packageB/login?flag=nw', + fail: (err) => { + console.error('页面跳转失败:', err); + // 失败后尝试redirectTo + uni.redirectTo({ + url:'/packageB/login?flag=nw', + fail: (err2) => { + console.error('redirectTo也失败:', err2); + } + }); + } + }); + } + useUserStore().logOut() + } // 显示具体的错误信息 const errorMsg = msg || '请求出现异常,请联系工作人员' diff --git a/utilsRc/config.js b/utilsRc/config.js index 94697f0..c29333e 100644 --- a/utilsRc/config.js +++ b/utilsRc/config.js @@ -26,10 +26,13 @@ let exports = { // baseUrl: 'http://ks.zhaopinzao8dian.com/api/ks', // 已从根目录config.js引用,不再重复配置 // ========== 职业图谱专用baseUrl ========== - zytpBaseUrl: 'http://ks.zhaopinzao8dian.com/api/ks_zytp/admin-api/zytp', + zytpBaseUrl: 'http://222.80.110.161:11111/career-map/api/ks_zytp/admin-api/zytp', - // ========== 用户接口专用baseUrl(appUserInfo等接口使用) ========== + // ========== 用户接口专用baseUrl(其他用户接口使用) ========== userBaseUrl: 'http://ks.zhaopinzao8dian.com/api/ks', // 用户相关接口使用根目录config.js的baseUrl + + // ========== appUserInfo接口专用baseUrl ========== + appUserInfoBaseUrl: 'http://222.80.110.161:11111/api/ks', // appUserInfo接口专用,与其他接口路径不一致 diff --git a/utilsRc/request.js b/utilsRc/request.js index 5a915ad..de40339 100644 --- a/utilsRc/request.js +++ b/utilsRc/request.js @@ -14,23 +14,28 @@ let timeout = 10000 const baseUrl = configRc.baseUrl const zytpBaseUrl = configRc.zytpBaseUrl || '' const userBaseUrl = configRc.userBaseUrl || '' +const appUserInfoBaseUrl = configRc.appUserInfoBaseUrl || '' const request = config => { // 是否需要设置 token const isToken = (config.headers || {}).isToken === false config.header = config.header || {} - // 从存储中获取微信登录的 token - const token = getToken() - if (token && !isToken) { - config.header['Authorization'] = 'Bearer ' + token - } // get请求映射params参数 const baseType = config.baseUrlType + // 职业图谱相关接口不需要Authorization + const isZytpApi = baseType === 'zytp' + // 从存储中获取微信登录的 token + const token = getToken() + if (token && !isToken && !isZytpApi) { + config.header['Authorization'] = 'Bearer ' + token + } let requestBaseUrl = baseUrl if (baseType === 'zytp' && zytpBaseUrl) { requestBaseUrl = zytpBaseUrl } else if (baseType === 'user' && userBaseUrl) { requestBaseUrl = userBaseUrl + } else if (baseType === 'appUserInfo' && appUserInfoBaseUrl) { + requestBaseUrl = appUserInfoBaseUrl } let requestUrl = config.fullUrl ? config.fullUrl : (requestBaseUrl + (config.url || ''))