From 55ba35230ebb11f23466c955c688d737f8e49840 Mon Sep 17 00:00:00 2001 From: dzq Date: Fri, 18 Apr 2025 09:01:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=A7=93=E5=90=8D=E5=AD=97=E6=AE=B5=E5=B9=B6=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?token=E7=99=BB=E5=BD=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在订单提交请求中添加用户姓名字段,并实现通过token进行登录的功能。同时优化了路由守卫中的登录状态检查逻辑。 --- src/App.vue | 21 +++++++++++++++++++++ src/common/apis/ab98/index.ts | 9 +++++++++ src/common/apis/shop/type.ts | 2 ++ src/pages/product/components/checkout.vue | 3 ++- src/pinia/stores/ab98-user.ts | 12 ++++++++++-- src/router/guard.ts | 4 ++-- 6 files changed, 46 insertions(+), 5 deletions(-) diff --git a/src/App.vue b/src/App.vue index 081fad3..3910c3d 100644 --- a/src/App.vue +++ b/src/App.vue @@ -3,10 +3,14 @@ import Layout from "@/layout/index.vue" import { useUserStore } from "@/pinia/stores/user" import { useDark } from "@@/composables/useDark" import { useWxStore } from "@/pinia/stores/wx" +import { tokenLogin } from '@/common/apis/ab98' +import { useAb98UserStore } from '@/pinia/stores/ab98-user' // const userStore = useUserStore() const wxStore = useWxStore() const route = useRoute() +const router = useRouter() +const ab98UserStore = useAb98UserStore() const { isDark, initDark } = useDark() @@ -31,6 +35,23 @@ onMounted(() => { const state = urlParams.get('state') || undefined; const corpid = urlParams.get('corpid') || undefined; const isAdmin = urlParams.get('isAdmin') || undefined; + + if (state && state.indexOf('token') !== -1) { + const token = state.split('token_')[1]; + ab98UserStore.setTokenLogin(token); + + tokenLogin(token).then(res => { + if (res && res.code == 0) { + if (res.data.success) { + ab98UserStore.setTel(res.data.tel) + ab98UserStore.setUserInfo(res.data) + ab98UserStore.setIsLogin(true) + router.push('/') + } + } + }) + } + if (isAdmin == '1') { wxStore.setIsCabinetAdmin(true); } diff --git a/src/common/apis/ab98/index.ts b/src/common/apis/ab98/index.ts index 3774630..27e0df8 100644 --- a/src/common/apis/ab98/index.ts +++ b/src/common/apis/ab98/index.ts @@ -52,4 +52,13 @@ export function logoutApi(token: string) { method: 'post', params: { token } }) +} + +/** ab98Token登录 */ +export function tokenLogin(token: string) { + return request>({ + url: '/wx/login/tokenLogin', + method: 'get', + params: { token } + }) } \ No newline at end of file diff --git a/src/common/apis/shop/type.ts b/src/common/apis/shop/type.ts index 41c9525..d810719 100644 --- a/src/common/apis/shop/type.ts +++ b/src/common/apis/shop/type.ts @@ -26,6 +26,8 @@ export interface SubmitOrderRequestData { paymentType: 'wechat' | 'balance'; /** 联系电话 */ mobile: string; + /** 用户姓名 */ + name: string; /** 企业微信用户ID或汇邦云用户ID */ qyUserid: string; /** 是否内部订单 0否 1汇邦云用户 2企业微信用户 */ diff --git a/src/pages/product/components/checkout.vue b/src/pages/product/components/checkout.vue index f83b64f..90e1ed9 100644 --- a/src/pages/product/components/checkout.vue +++ b/src/pages/product/components/checkout.vue @@ -17,7 +17,7 @@ const wxStore = useWxStore() const { openid, balance, corpidLogin, userid: qyUserid } = storeToRefs(wxStore) const ab98UserStore = useAb98UserStore() -const { tel, userid: ab98Userid } = storeToRefs(ab98UserStore) +const { tel, userid: ab98Userid, name } = storeToRefs(ab98UserStore) const selectedPayment = ref<'wechat' | 'balance'>('wechat') const contact = ref("") @@ -101,6 +101,7 @@ async function handleSubmit() { })), paymentType: selectedPayment.value, mobile: tel.value, + name: name.value, qyUserid: isInternal === 2 ? qyUserid.value : ab98Userid.value, isInternal: isInternal } diff --git a/src/pinia/stores/ab98-user.ts b/src/pinia/stores/ab98-user.ts index 9e7cad5..98e50c7 100644 --- a/src/pinia/stores/ab98-user.ts +++ b/src/pinia/stores/ab98-user.ts @@ -36,7 +36,9 @@ export const useAb98UserStore = defineStore("ab98User", () => { const tel = ref(storedTel ? decodeURIComponent(storedTel) : "") // 用户认证令牌 const storedToken = localStorage.getItem(STORAGE_KEYS.TOKEN) - const token = ref(storedToken ? decodeURIComponent(storedToken) : "") + const token = ref(storedToken ? decodeURIComponent(storedToken) : ""); + + const tokenLogin = ref(""); // 用户登录状态 const isLogin = ref(false); isLogin.value = tel.value ? true : false; @@ -98,6 +100,10 @@ export const useAb98UserStore = defineStore("ab98User", () => { isLogin.value = value; } + const setTokenLogin = (value: string) => { + tokenLogin.value = value; + } + return { face_img, sex, @@ -107,11 +113,13 @@ export const useAb98UserStore = defineStore("ab98User", () => { tel, token, isLogin, + tokenLogin, setUserInfo, setToken, setTel, setIsLogin, - clearUserInfo + clearUserInfo, + setTokenLogin } }) diff --git a/src/router/guard.ts b/src/router/guard.ts index 58e89dc..bc614da 100644 --- a/src/router/guard.ts +++ b/src/router/guard.ts @@ -7,6 +7,7 @@ import { getToken } from "@@/utils/cache/cookies" import NProgress from "nprogress" import { useAb98UserStore } from '@/pinia/stores/ab98-user' +const ab98UserStore = useAb98UserStore() NProgress.configure({ showSpinner: false }) @@ -26,8 +27,7 @@ export function registerNavigationGuard(router: Router) { return true; } - const userStore = useAb98UserStore() - if (!userStore.isLogin) { + if (!ab98UserStore.isLogin) { // 如果在免登录的白名单中,则直接进入 if (isWhiteList(to)) return true // 其他没有访问权限的页面将被重定向到登录页面