From c8ec9c4d08deffdb16c65644f01d6bab5b99be90 Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Mon, 21 Sep 2026 15:00:19 +0800 Subject: [PATCH] =?UTF-8?q?1.=E9=92=89=E9=92=89=E4=BF=AE=E5=A4=8D=E8=B7=B3?= =?UTF-8?q?=E8=BD=AC=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/dingtalk-pc.ts | 6 +++--- src/utils/wechat-pc.ts | 17 ++++++++++++----- src/views/canteen/canteenCategory/form.vue | 8 +++++++- src/views/canteen/canteenSpu/form.vue | 14 ++++++++++++++ src/views/login/index.vue | 6 +----- 5 files changed, 37 insertions(+), 14 deletions(-) diff --git a/src/utils/dingtalk-pc.ts b/src/utils/dingtalk-pc.ts index f68ba005..36cdabb7 100644 --- a/src/utils/dingtalk-pc.ts +++ b/src/utils/dingtalk-pc.ts @@ -5,13 +5,13 @@ import { getWechatPcRedirectUri, isLocalDevOrigin, parseWechatOAuthState, + PC_DING_BIND_TICKET_KEY, type WechatPcAction, } from '/@/utils/wechat-pc'; -export const SOCIAL_TYPE_DINGTALK = 'DINGTALK'; +export { PC_DING_BIND_TICKET_KEY }; -/** 钉钉登录(未绑定)扫码后暂存 ticket,登录页弹窗绑定 */ -export const PC_DING_BIND_TICKET_KEY = 'pc_ding_bind_ticket'; +export const SOCIAL_TYPE_DINGTALK = 'DINGTALK'; export type DingTalkPcAction = 'LOGIN' | 'SETTINGS'; diff --git a/src/utils/wechat-pc.ts b/src/utils/wechat-pc.ts index 0c6fa733..3e804c0f 100644 --- a/src/utils/wechat-pc.ts +++ b/src/utils/wechat-pc.ts @@ -14,6 +14,8 @@ export const PC_WX_PWD_TICKET_KEY = 'pc_wx_pwd_ticket'; export const PC_WX_CONFIRM_TICKET_KEY = 'pc_wx_confirm_ticket'; /** 微信登录(未绑定)扫码后暂存 ticket,登录页弹窗绑定 */ export const PC_WX_BIND_TICKET_KEY = 'pc_wx_bind_ticket'; +/** 钉钉登录(未绑定)扫码后暂存 ticket,登录页弹窗绑定(与 dingtalk-pc 共用) */ +export const PC_DING_BIND_TICKET_KEY = 'pc_ding_bind_ticket'; /** 弹窗内扫码登录/确认成功后通知父页面 */ export const PC_WX_AUTH_DONE_KEY = 'pc_wx_auth_done'; /** 弹窗扫码登录成功后,把 token 写入 localStorage 供父页面接管(Cookie 在弹窗场景下不可靠) */ @@ -233,12 +235,17 @@ export function clearWechatGateMarkers() { localStorage.removeItem(PC_WX_TOKEN_PAYLOAD_KEY); } +/** 是否存在微信/钉钉首次绑定 ticket */ +export function hasSocialBindTicket(): boolean { + return !!(localStorage.getItem(PC_WX_BIND_TICKET_KEY) || localStorage.getItem(PC_DING_BIND_TICKET_KEY)); +} + export function notifyWechatAuthError(message: string) { const payload = JSON.stringify({ message, ts: Date.now() }); writeStorageKey(PC_WX_AUTH_ERROR_KEY, payload); } -/** 轮询 token;弹窗关闭、已写入 token 或存在微信绑定 ticket 时回调 */ +/** 轮询 token;弹窗关闭、已写入 token 或存在微信/钉钉绑定 ticket 时回调 */ export function pollWechatAuthDone( win: Window | null, onSuccess: () => void, @@ -271,7 +278,7 @@ export function pollWechatAuthDone( localStorage.removeItem(PC_WX_AUTH_ERROR_KEY); return; } - if (localStorage.getItem(PC_WX_BIND_TICKET_KEY)) { + if (hasSocialBindTicket()) { window.clearInterval(timer); onSuccess(); return; @@ -286,7 +293,7 @@ export function pollWechatAuthDone( if ( Cookies.get('token') || Session.getToken() || - localStorage.getItem(PC_WX_BIND_TICKET_KEY) || + hasSocialBindTicket() || (localStorage.getItem(PC_WX_AUTH_DONE_KEY) || '') !== authDoneBaseline ) { done(); @@ -295,7 +302,7 @@ export function pollWechatAuthDone( } if (Date.now() - started > maxMs) { window.clearInterval(timer); - onError?.('微信授权超时,请重试'); + onError?.('授权超时,请重试'); } }, 500); return () => window.clearInterval(timer); @@ -314,7 +321,7 @@ export function finishWechatAuthRedirect(hasToken: boolean) { window.close(); return; } - const needBind = !hasToken && !!localStorage.getItem(PC_WX_BIND_TICKET_KEY); + const needBind = !hasToken && hasSocialBindTicket(); window.location.href = hasToken ? '/' : needBind ? '/#/login?wxPcBind=1' : '/#/login'; } diff --git a/src/views/canteen/canteenCategory/form.vue b/src/views/canteen/canteenCategory/form.vue index 3cfdfb44..431c1647 100644 --- a/src/views/canteen/canteenCategory/form.vue +++ b/src/views/canteen/canteenCategory/form.vue @@ -1,6 +1,6 @@