1.钉钉修复跳转问题
This commit is contained in:
1 parent
4dac32d89c
commit
c8ec9c4d08
5 files changed
+37
-14
No files matched your search
@@ -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
@@ -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';
|
||||
}
|
||||
|
||||
|
||||
@@ -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: "",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
Reference in new issue
Block a user