ZaiZai 1 жил өмнө
parent
commit
1489c682f4

+ 6 - 0
src/router/modules/base.js

@@ -18,6 +18,12 @@ export default [
         meta: { title: '授权登录' },
         component: () => import('~src/views/user/auth.vue'),
     },
+    {
+        path: '/auth-token',
+        name: 'auth-token',
+        meta: { title: '授权登录' },
+        component: () => import('~src/views/home/auth.vue'),
+    },
     {
         path: '/pdf',
         name: 'pdf',

+ 23 - 16
src/store/modules/user.js

@@ -18,28 +18,35 @@ const store = useAppStore(pinia)
 export const useAppLogin = async (form) => {
     const { error, code, res } = await userLogin(form)
     if (!error && code === 200) {
-        store.setTokenVal(res['access_token'])
-        store.setRefreshTokenVal(res['refresh_token'])
-        store.setTenantId(res['tenant_id'])
-        store.setUserInfo(res)
-        //获取路由菜单
-        const routerRes = await setRouterData()
-        if (routerRes.length <= 0) {
-            return { error: true, msg: '路由异常' }
-        }
-        //获取路由首页
-        const isHomeUrl = await getHomeRouter(routerRes)
-        if (isNullES(isHomeUrl)) {
-            return { error: true, msg: '菜单权限异常' }
-        }
-        //获取配置数据
-        await initUserConfigInfo()
+        await setUserAppInfo(res)
         return { error, code, res }
     } else {
         return { error, code, res }
     }
 }
 
+//设置用户信息
+export const setUserAppInfo = async (res) => {
+    store.setTokenVal(res['access_token'])
+    store.setRefreshTokenVal(res['refresh_token'])
+    store.setTenantId(res['tenant_id'])
+    store.setUserInfo(res)
+    //获取路由菜单
+    const routerRes = await setRouterData()
+    if (routerRes.length <= 0) {
+        return { error: true, msg: '路由异常' }
+    }
+    //获取路由首页
+    const isHomeUrl = await getHomeRouter(routerRes)
+    if (isNullES(isHomeUrl)) {
+        return { error: true, msg: '菜单权限异常' }
+    }
+    //获取配置数据
+    await initUserConfigInfo()
+    return true
+}
+
+
 //获取路由菜单的主入口路径
 const getHomeRouter = async (arr) => {
     //判断 arr 数组中的 children 中是否有数据,没数据的话,取下一个元素

+ 85 - 0
src/views/home/auth.vue

@@ -0,0 +1,85 @@
+<template>
+    <div v-loading="loading" class="hc-body-loading" element-loading-text="授权登录中...">
+        <div v-if="isErrorShow" class="error-page">
+            <div :style="`background-image: url(${svg403});`" class="img" />
+            <div class="content">
+                <h1>403</h1>
+                <div class="desc">抱歉,token授权登录异常,请重新进入</div>
+                <div class="actions">
+                    <el-button block size="large" type="primary" @click="toLoginTap">手动登录</el-button>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script setup>
+import { onMounted, ref } from 'vue'
+import { useAppStore } from '~src/store'
+import { loginByToken } from '~api/user'
+import { useRoute, useRouter } from 'vue-router'
+import svg403 from '~src/assets/view/403.svg'
+import { setUserAppInfo } from '~sto/user'
+import { getObjVal, getObjValue, isNullES } from 'js-fast-way'
+
+//初始变量
+const router = useRouter()
+const useRoutes = useRoute()
+const store = useAppStore()
+
+//变量
+const loading = ref(true)
+const isErrorShow = ref(false)
+
+//渲染完成
+onMounted(() => {
+    //先清理下缓存
+    store.clearStoreData()
+    // http://档案的域名/#/auth-token?token=xxxxxxx
+    const { token } = getObjValue(useRoutes.query)
+    if (!isNullES(token)) {
+        isErrorShow.value = false
+        loginByTokenApi({
+            token: token,
+        })
+    } else {
+        loading.value = false
+        isErrorShow.value = true
+    }
+})
+
+//请求授权登录
+const loginByTokenApi = async (form) => {
+    const { error, code, data } = await loginByToken(form)
+    const res = getObjVal(data)
+    if (!error && code === 200 && res) {
+        await setUserAppInfo(res)
+        setTimeout(() => {
+            loading.value = false
+            isErrorShow.value = false
+            window?.$message?.success('授权登录成功')
+            router.push({
+                name: store.homeUrl ?? 'home',
+            })
+        }, 1500)
+    } else {
+        window.$message?.error('授权登录失败')
+        isErrorShow.value = true
+        loading.value = false
+    }
+}
+
+//跳转登陆
+const toLoginTap = () => {
+    router.push({ path: '/login' })
+}
+</script>
+
+<style lang="scss" scoped>
+@import "../../styles/error/style.scss";
+.hc-body-loading {
+    position: relative;
+    height: 100%;
+    width: 100%;
+}
+</style>

+ 7 - 5
src/views/user/auth.vue

@@ -34,12 +34,14 @@ const isErrorShow = ref(false)
 
 //渲染完成
 onMounted(() => {
+    //先清理下缓存
+    store.clearStoreData()
     // 域名后加  /#/auth?token=xxxxxxx
-    const { token } = getObjValue(useRoutes.query)
+    const { token, tenantid } = getObjValue(useRoutes.query)
     if (token) {
         isErrorShow.value = false
         store.setTokenVal(token)
-        queryCurrentUserData()
+        queryCurrentUserData(tenantid ?? '000000')
     } else {
         loading.value = false
         isErrorShow.value = true
@@ -47,11 +49,11 @@ onMounted(() => {
 })
 
 //获取用户信息
-const queryCurrentUserData = async () => {
+const queryCurrentUserData = async (tenantId) => {
     const { error, code, data } = await userApi.queryCurrentUserData()
     if (!error && code === 200) {
         await useAppLoginApi({
-            tenantId: '000000',
+            tenantId: tenantId,
             username: data.account,
             password: data.plaintextPassword,
             type: 'account',
@@ -79,7 +81,7 @@ const useAppLoginApi = async (form) => {
         isErrorShow.value = false
         window?.$message?.success('授权登录成功')
         router.push({
-            name: store.homeUrl,
+            name: store.homeUrl ?? 'home',
         })
     }, 1500)
 }