From 087c686d8113845ce64c7f78a2c87924025cec6d Mon Sep 17 00:00:00 2001 From: francis-fh Date: Thu, 4 Jun 2026 14:45:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E4=BD=93=E6=9C=BA=E7=9A=84=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packageA/pages/post/post.vue | 8 ++-- pages/index/components/index-one.vue | 30 +++----------- utils/loginHelper.js | 59 +++++++++++++++++++++++++--- 3 files changed, 65 insertions(+), 32 deletions(-) diff --git a/packageA/pages/post/post.vue b/packageA/pages/post/post.vue index 42b0dca..0d343b5 100644 --- a/packageA/pages/post/post.vue +++ b/packageA/pages/post/post.vue @@ -256,6 +256,7 @@ import dictLabel from '@/components/dict-Label/dict-Label.vue'; import RadarMap from './component/radarMap.vue'; import { storeToRefs } from 'pinia'; import useUserStore from '@/stores/useUserStore'; +import { checkLoginAndNavigate } from '@/utils/loginHelper'; const { userInfo } = storeToRefs(useUserStore()); // 与首页一致的用户类型获取:优先store,兜底缓存 const currentUserType = computed(() => { @@ -445,9 +446,7 @@ function getCompetivetuveness(encryptJobId) { // 申请岗位 function jobApply() { - const tokenValue = uni.getStorageSync('token') || ''; - if (!tokenValue) { - $api.msg('请您先登录'); + if (!checkLoginAndNavigate({ content: '投递简历请先登录' })) { return; } // 显示确认弹窗 @@ -502,6 +501,9 @@ function cancelApply() { // 取消/收藏岗位 function jobCollection() { + if (!checkLoginAndNavigate({ content: '收藏请先登录' })) { + return; + } const encryptJobId = jobIdRef.value; if (jobInfo.value.isCollection) { $api.createRequest(`/app/job/collection/${encryptJobId}`, {}, 'DELETE').then((resData) => { diff --git a/pages/index/components/index-one.vue b/pages/index/components/index-one.vue index 78229ba..9ab8718 100644 --- a/pages/index/components/index-one.vue +++ b/pages/index/components/index-one.vue @@ -78,7 +78,7 @@ - + 简历指导 @@ -937,18 +937,8 @@ const handleLoginSuccess = () => { // onLoad 函数已移至下方,包含筛选参数处理 // 处理附近工作点击 -const handleNearbyClick = (options ) => { - // #ifdef MP-WEIXIN - if (checkLogin()) { - navTo('/packageA/pages/nearby/nearby'); - } - // #endif - // #ifdef H5 - const token = options.token || uni.getStorageSync('zkr-token'); - if (token) { - navTo('/packageA/pages/nearby/nearby'); - } - // #endif +const handleNearbyClick = () => { + navTo('/packageA/pages/nearby/nearby'); }; const handleNoticeClick = () =>{ if (checkLogin()) { @@ -976,20 +966,12 @@ function handleInstitutionClick(type){ } // 处理服务功能点击 const handleServiceClick = (serviceType) => { - if (checkLogin()) { + const noLoginRequired = ['resume-creation']; + if (noLoginRequired.includes(serviceType) || checkLogin()) { navToService(serviceType); } }; -// H5的简历指导跳转 -const handelGoResumeGuide = () => { - const token = uni.getStorageSync('zkr-token'); - // myToken.value = token; - if (token) { - // navTo() - navTo('/pages/resume-guide/resume-guide'); - } - -} + // 处理直播按钮点击 const handleLiveClick = () => { // #ifdef MP-WEIXIN diff --git a/utils/loginHelper.js b/utils/loginHelper.js index 9b0de1a..caad28c 100644 --- a/utils/loginHelper.js +++ b/utils/loginHelper.js @@ -5,6 +5,9 @@ import useUserStore from '@/stores/useUserStore'; +/** 一体机 H5 首页地址 */ +export const MACHINE_HOME_URL = 'https://www.xjksly.cn/mechine-single-vue/'; + /** * 检查当前平台类型 * @returns {string} 平台类型:'mp-weixin' | 'h5' | 'app' @@ -88,21 +91,64 @@ export function navigateToLoginPage(options = {}) { } } +/** + * 检查用户是否已登录 + * @returns {boolean} + */ +export function isUserLoggedIn() { + const userStore = useUserStore(); + const tokenValue = uni.getStorageSync('token') || ''; + return !!(tokenValue && userStore.hasLogin); +} + +/** + * H5 一体机端:弹窗提示登录,点击确定跳转一体机首页 + * @param {Object} options + * @param {string} options.content 提示文案 + * @returns {Promise} 用户是否点击确定 + */ +export function promptH5MachineLogin(options = {}) { + const { content = '您还未登录,请先登录' } = options; + return new Promise((resolve) => { + uni.showModal({ + title: '提示', + content, + showCancel: true, + cancelText: '取消', + confirmText: '确定', + success: (res) => { + if (res.confirm) { + // #ifdef H5 + window.location.href = MACHINE_HOME_URL; + // #endif + resolve(true); + } else { + resolve(false); + } + }, + fail: () => resolve(false), + }); + }); +} + /** * 检查登录状态,如果未登录则跳转到对应登录页面 * @param {Object} options 选项 * @param {string} options.redirectUrl 登录成功后跳转的URL * @param {string} options.loginType 登录类型 + * @param {string} options.content H5 一体机端登录提示文案 * @returns {boolean} 是否已登录 */ export function checkLoginAndNavigate(options = {}) { - const userStore = useUserStore(); - - if (userStore.hasLogin) { + if (isUserLoggedIn()) { return true; } - - // 未登录,跳转到对应登录页面 + + if (getPlatformType() === 'h5') { + promptH5MachineLogin(options); + return false; + } + navigateToLoginPage(options); return false; } @@ -202,6 +248,9 @@ export default { getPlatformType, navigateToLoginPage, checkLoginAndNavigate, + isUserLoggedIn, + promptH5MachineLogin, + MACHINE_HOME_URL, parseIdCardLoginParams, decodeIdCardBase64, refreshWxLoginCode,