iZaiZaiA 2 жил өмнө
parent
commit
061ee10b89

+ 3 - 4
src/api/request/header.js

@@ -1,14 +1,13 @@
 import {Base64} from 'js-base64';
 import website from '~src/config';
-import appAuth from '~src/api/util/auth';
+import {getToken} from '~src/api/util/auth';
 
 export function getTokenHeader(text= false) {
     let headers = {};
     headers['Authorization'] = `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`;
     //让每个请求携带token
-    if (appAuth.getToken()) {
-        headers[website.tokenHeader] = 'bearer ' + appAuth.getToken()
-    }
+    const token = getToken()
+    if (token) headers[website.tokenHeader] = 'bearer ' + token
     //headers中配置text请求
     if (text === true) {
         headers["Content-Type"] = "text/plain";

+ 5 - 3
src/api/request/index.js

@@ -2,7 +2,7 @@ import axios from 'axios';
 import {Base64} from 'js-base64';
 import website from '~src/config';
 import router from '~src/router/index';
-import appAuth from '~src/api/util/auth';
+import {getToken} from '~src/api/util/auth';
 import {toSerialize} from "vue-utils-plus"
 
 //默认超时时间
@@ -20,8 +20,10 @@ axios.interceptors.request.use(config => {
     const isToken = meta['isToken'] === false;
     config.headers['Authorization'] = `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`;
     //让每个请求携带token
-    if (appAuth.getToken() && !isToken) {
-        config.headers[website.tokenHeader] = 'bearer ' + appAuth.getToken()
+    const token = getToken()
+    console.log(token)
+    if (token && !isToken) {
+        config.headers[website.tokenHeader] = 'bearer ' + token
     }
     //headers中配置text请求
     if (config['text'] === true) {

+ 22 - 19
src/api/util/auth.js

@@ -1,23 +1,26 @@
 import Cookies from 'js-cookie'
 import config from "~src/config/index";
 
-export default {
-    getToken(form) {
-        return Cookies.get(config.tokenKey)
-    },
-    setToken(token) {
-        return Cookies.set(config.tokenKey, token)
-    },
-    getRefreshToken() {
-        return Cookies.get(config.refreshTokenKey)
-    },
-    setRefreshToken(token) {
-        return Cookies.set(config.refreshTokenKey, token)
-    },
-    removeToken() {
-        return Cookies.remove(config.tokenKey)
-    },
-    removeRefreshToken() {
-        return Cookies.remove(config.refreshTokenKey)
-    }
+export const getToken = () => {
+    return Cookies.get(config.tokenKey)
+}
+
+export const setToken = (token) => {
+    return Cookies.set(config['tokenKey'], token)
+}
+
+export const getRefreshToken = () => {
+    return Cookies.get(config['refreshTokenKey'])
+}
+
+export const setRefreshToken = (token) => {
+    return Cookies.set(config['refreshTokenKey'], token)
+}
+
+export const removeToken = () => {
+    return Cookies.remove(config['tokenKey'])
+}
+
+export const removeRefreshToken = () => {
+    return Cookies.remove(config['refreshTokenKey'])
 }

+ 4 - 5
src/router/index.js

@@ -1,9 +1,8 @@
 import * as vueRouter from 'vue-router'
 import baseData from "./modules/base";
 import config from '~src/config/index'
-import authStore from '~src/api/util/auth'
+import {getToken} from '~src/api/util/auth'
 import {getRouterData} from './routers'
-import {isItem} from "vue-utils-plus"
 import NProgress from "nprogress";
 import "~src/styles/app/nprogress.scss";
 
@@ -16,14 +15,14 @@ const router = vueRouter.createRouter({
 //路由拦截
 router.beforeEach(async (to, from, next) => {
     NProgress.start();
-    const token = authStore.getToken()
+    const token = getToken()
     if (to.path === '/login') {
         next()
     } else if (!token) {
         next('/login')
     } else {
-        const {routes} = await getRouterData()
-        if (isItem(routes, to.name)) {
+        const res = await getRouterData(to.name)
+        if (res) {
             next()
         } else {
             next('/404')

+ 7 - 28
src/router/routers.js

@@ -1,33 +1,12 @@
-import pinia from "~src/store/init"
-import {getRoutes} from '~api/menu';
-import tokenData from "./modules/token";
-import {useAppStore} from "~src/store/index";
-import { getStoreData, setStoreData }  from '~src/utils/storage'
-import { getArrValue, getObjNullValue, ArrToOneObj } from "vue-utils-plus"
-
-//变量初始化
-const userStore = useAppStore(pinia)
+import { getStoreData }  from '~src/utils/storage'
+import {getArrValue,isItem} from "vue-utils-plus"
 
 //获取路由菜单
-export const getRouterData = async () => {
-    const route = getObjNullValue(getStoreData('route'))
-    if (!route) {
-        //请求接口,获取路由数据
-        const {error, data} = await getRoutes()
-        if (error) return []
-        const resData = getArrValue(data)
-        //数据转换
-        let routesObj = {}, routesArr = []
-        await ArrToOneObj(resData, 'code', routesObj, routesArr)
-        const routes = [...tokenData, ...routesArr] //合并
-        //数据缓存
-        userStore.setMenus(resData)
-        setStoreData('route', routesObj)
-        setStoreData('routes', routes)
-        return {route: routesObj, routes}
+export const getRouterData = async (toName) => {
+    const routes = getArrValue(getStoreData('routes'))
+    if (isItem(routes,toName)) {
+        return true
     } else {
-        //加载本地缓存路由
-        const routes = getArrValue(getStoreData('routes'))
-        return {route, routes}
+        return false
     }
 }

+ 8 - 8
src/store/index.js

@@ -1,8 +1,8 @@
 import { defineStore } from 'pinia'
 import pinia from "~src/store/init"
 import appConfig from '~src/config/app';
-import authStore from '~src/api/util/auth'
-import { getStoreData, setStoreData, clearStoreAll }  from '~src/utils/storage'
+import {getStoreData, setStoreData, clearStoreAll}  from '~src/utils/storage'
+import {setToken, setRefreshToken, removeToken,removeRefreshToken} from '~src/api/util/auth'
 
 export const useAppStore = defineStore('main', {
     state: () =>({
@@ -80,14 +80,14 @@ export const useAppStore = defineStore('main', {
             setStoreData('homeTheme',value)
         },
         //用户信息
-        setToken(value){
+        setTokenVal(value){
             this.token = value
-            authStore.setToken(value)
+            setToken(value)
             setStoreData('token',value)
         },
-        setRefreshToken(value){
+        setRefreshTokenVal(value){
             this.refreshToken = value
-            authStore.setRefreshToken(value)
+            setRefreshToken(value)
             setStoreData('refreshToken',value)
         },
         setTenantId(value){
@@ -175,8 +175,8 @@ export const useAppStore = defineStore('main', {
             this.isCollapse = false
             //清除缓存
             clearStoreAll()
-            authStore.removeToken()
-            authStore.removeRefreshToken()
+            removeToken()
+            removeRefreshToken()
         },
     }
 })

+ 49 - 25
src/store/modules/user.js

@@ -1,38 +1,44 @@
 import pinia from "~src/store/init"
 import appConfig from '~src/config/app';
-import {useAppStore} from "~src/store/index";
+import {useAppStore} from "~src/store";
+import {useOsTheme} from 'vooks'
+import {getRoutes} from '~api/menu';
+import themeData from '~src/config/theme';
+import tokenData from "~src/router/modules/token";
+import {setStoreData} from "~src/utils/storage";
 import {userLogin,refreshToken,logout} from '~api/user';
 import {userConfigInfo, userConfigSave} from "~api/other";
-import themeData from '~src/config/theme';
-import {getIndex, getObjValue} from "vue-utils-plus"
-import {useOsTheme} from 'vooks'
+import {ArrToOneObj, getArrValue, getIndex, getObjValue} from "vue-utils-plus"
 
+//初始变量
 const store = useAppStore(pinia)
 
 //登录
 export const useAppLogin = async (form) => {
-    try {
-        const { error, status, res } = await userLogin(form);
-        if (!error && status === 200) {
-            store.setToken(res['access_token'])
-            store.setRefreshToken(res['refresh_token'])
-            store.setTenantId(res['tenant_id'])
-            store.setUserInfo(res)
-            await initUserConfigInfo()
-            return Promise.resolve(res);
-        } else {
-            return Promise.reject(res);
+    const { error, status, res } = await userLogin(form);
+    if (!error && status === 200) {
+        console.log(res['access_token'])
+        store.setTokenVal(res['access_token'])
+        store.setRefreshTokenVal(res['refresh_token'])
+        store.setTenantId(res['tenant_id'])
+        store.setUserInfo(res)
+        const routerRes = await setRouterData()
+        if (!routerRes) {
+            return Promise.reject({msg:'路由异常'});
         }
-    } catch (e) {
-        window.console.warn('token 刷新失败: ', e);
-        return Promise.reject(e);
+        await initUserConfigInfo()
+        return Promise.resolve(res);
+    } else {
+        return Promise.reject(res);
     }
 }
 
 //用户信息初始化
 export const initUserConfigInfo = async () => {
     const {error, data} = await userConfigInfo();
-    if (error) return true
+    if (error) {
+        return Promise.reject(false);
+    }
     const res = getObjValue(data)
     if (res?.theme) {
         const {theme,color,homeTheme,shotWebRtc,fullScreen,opinionView} = res
@@ -60,7 +66,7 @@ export const initUserConfigInfo = async () => {
         store.setOrderServiceTipModal(opinionView ?? 1)
         store.setShotWebRtc(shotWebRtc)
         store.setShotWebRtc(fullScreen)
-        return true
+        return Promise.resolve(true);
     } else {
         await userConfigSave({
             theme: appConfig?.theme || '',
@@ -70,10 +76,29 @@ export const initUserConfigInfo = async () => {
             fullScreen: '1',
             opinionView: 1
         })
-        return true
+        return Promise.resolve(true);
     }
 }
 
+//设置路由信息
+export const setRouterData = async () => {
+    //请求接口,获取路由数据
+    const {error, data} = await getRoutes()
+    if (error) {
+        return Promise.reject(false);
+    }
+    const resData = getArrValue(data)
+    //数据转换
+    let routesObj = {}, routesArr = []
+    await ArrToOneObj(resData, 'code', routesObj, routesArr)
+    const routes = [...tokenData, ...routesArr] //合并
+    //数据缓存
+    store.setMenus(resData)
+    setStoreData('route', routesObj)
+    setStoreData('routes', routes)
+    return Promise.resolve(true);
+}
+
 //刷新token
 export const RefreshToken = async () => {
     try {
@@ -83,8 +108,8 @@ export const RefreshToken = async () => {
         const tenantId = store.getTenantId;
         const { error, status, res } = await refreshToken(refresh, tenantId, dept_id, role_id);
         if (!error && status === 200) {
-            store.setToken(res['access_token'])
-            store.setRefreshToken(res['refresh_token'])
+            store.setTokenVal(res['access_token'])
+            store.setRefreshTokenVal(res['refresh_token'])
             store.setTenantId(res['tenant_id'])
             store.setUserInfo(res)
             return Promise.resolve(res);
@@ -99,6 +124,5 @@ export const RefreshToken = async () => {
 
 //登出
 export const LogOut = async () => {
-    await logout();
-    return Promise.resolve(true);
+    return await logout();
 }

+ 18 - 19
src/views/login/index.vue

@@ -95,8 +95,9 @@
 <script setup>
 import {ref} from "vue";
 import router from '~src/router/index';
-import {useAppStore} from "~src/store/index";
+import {useAppStore} from "~src/store";
 import {useAppLogin} from "~sto/user";
+import {formValidate} from "vue-utils-plus"
 
 const userStore = useAppStore()
 userStore.clearStoreData() //先清理下缓存
@@ -131,19 +132,18 @@ const passwordKeyUp = (e) => {
 
 //登录
 const loading = ref(false)
-const formValidateClick = () => {
-    formRef.value.validate((valid) => {
-        if (valid) {
-            loading.value = true;
-            useAppLogin(formValue.value).then(({data}) => {
-                loading.value = false;
-                window?.$message?.success('登录成功');
-                router.push({path: '/home/index'});
-            }).catch(() => {
-                loading.value = false;
-            })
-        }
-    })
+const formValidateClick = async () => {
+    const formRes = await formValidate(formRef.value)
+    if (formRes) {
+        loading.value = true;
+        useAppLogin(formValue.value).then(() => {
+            loading.value = false;
+            window?.$message?.success('登录成功');
+            router.push({path: '/home/index'});
+        }).catch(() => {
+            loading.value = false;
+        })
+    }
 }
 
 //游客登录
@@ -157,11 +157,10 @@ const touristsRules = {
     }
 }
 const touristsValidateClick = async () => {
-    await touristsRef.value.validate((valid) => {
-        if (valid) {
-            console.log(touristsForm.value)
-        }
-    })
+    const formRes = await formValidate(touristsRef.value)
+    if (formRes) {
+        console.log(touristsForm.value)
+    }
 }
 
 //忘记密码