1.钉钉修复跳转问题

This commit is contained in:
zjf committed 2026-09-21 15:00:19 +08:00
1 parent 4dac32d89c
commit c8ec9c4d08
5 files changed
+37 -14

No files matched your search

+3 -3
View File
@@ -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';
+12 -5
View File
@@ -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';
}
+7 -1
View File
@@ -1,6 +1,6 @@
<template>
<el-dialog :title="form.id ? '编辑' : '新增'" v-model="visible" :close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px"
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="110px"
v-loading="loading">
<el-row :gutter="24">
<el-col :span="14" class="mb20">
@@ -13,6 +13,11 @@
<el-input v-model.trim="form.name" placeholder="请输入分类名称" />
</el-form-item>
</el-col>
<el-col :span="14" class="mb20">
<el-form-item label="分类英文名称" prop="nameEn">
<el-input v-model.trim="form.nameEn" placeholder="请输入分类英文名称" />
</el-form-item>
</el-col>
<el-col :span="14" class="mb20">
<el-form-item label="餐段类型" prop="categoryType">
<el-select v-model="form.categoryType" placeholder="请选择餐段类型" multiple>
@@ -69,6 +74,7 @@ const form = reactive({
id: "",
parentId: "",
name: "",
nameEn: "",
picUrl: "",
sort: "",
status: "",
+14
View File
@@ -21,6 +21,16 @@
<el-input v-model.trim="form.name" placeholder="请输入菜品名称" />
</el-form-item>
</el-col>
<el-col :span="14" class="mb20">
<el-form-item label="菜品英文名称" prop="nameEn">
<el-input v-model.trim="form.nameEn" placeholder="请输入菜品英文名称" />
</el-form-item>
</el-col>
<el-col :span="14" class="mb20" v-if="form.spuType === 2">
<el-form-item label="套餐名" prop="comboName">
<el-input v-model.trim="form.comboName" placeholder="请输入套餐名" />
</el-form-item>
</el-col>
<el-col :span="14" class="mb20">
<el-form-item label="菜品分类" prop="categoryId">
<select-ctcg v-model="form.categoryId" />
@@ -208,6 +218,8 @@ const form = reactive({
id: "",
merchantId: "",
name: "",
nameEn: "",
comboName: "",
introduction: "",
description: "<p></p>",
categoryId: "",
@@ -263,6 +275,7 @@ const dataRules = ref({
const onSpuTypeChange = () => {
if (form.spuType !== 2) {
form.comboItems = []
form.comboName = ""
}
}
@@ -338,6 +351,7 @@ const onSubmit = async () => {
const _pa: any = {
...form,
spuType: isCombo ? 2 : 1,
comboName: isCombo ? form.comboName : "",
price: storePrice(form.price),
marketPrice: storePrice(form.marketPrice),
comboItems: isCombo
+1 -5
View File
@@ -62,8 +62,7 @@ import { useMessage } from '/@/hooks/message';
import { Session, Local } from '/@/utils/storage';
import { initBackEndControlRoutes } from '/@/router/backEnd';
import { LoginTypeEnum } from '/@/api/login';
import { PC_WX_BIND_TICKET_KEY } from '/@/utils/wechat-pc';
import { PC_DING_BIND_TICKET_KEY } from '/@/utils/dingtalk-pc';
import { PC_WX_BIND_TICKET_KEY, hasSocialBindTicket } from '/@/utils/wechat-pc';
import WxPcBind from './component/wx-pc-bind.vue';
// 引入组件
@@ -90,9 +89,6 @@ const loginType = ref(LoginTypeEnum.PASSWORD);
const username = ref('');
const wxPcBindRef = ref<{ openWithStoredTicket: () => boolean }>();
const hasSocialBindTicket = () =>
!!localStorage.getItem(PC_WX_BIND_TICKET_KEY) || !!localStorage.getItem(PC_DING_BIND_TICKET_KEY);
const openSocialBind = () => {
const tryOpen = (left = 15) => {
if (wxPcBindRef.value?.openWithStoredTicket()) {