Browse Source

修改授权登录

ZaiZai 1 year ago
parent
commit
034913b8b9
3 changed files with 63 additions and 92 deletions
  1. 1 1
      public/version.json
  2. 47 39
      src/store/modules/user.js
  3. 15 52
      src/views/login/index.vue

+ 1 - 1
public/version.json

@@ -1,3 +1,3 @@
 {
-  "value": "20240125135441"
+  "value": "20240125141423"
 }

+ 47 - 39
src/store/modules/user.js

@@ -1,4 +1,5 @@
 import pinia from '~src/store/init'
+import website from '~src/config'
 import appConfig from '~src/config/app'
 import { useAppStore } from '~src/store'
 import { getRoutes } from '~api/menu'
@@ -6,22 +7,24 @@ import themeData from '~src/config/theme'
 import tokenData from '~src/router/modules/token'
 import { logout, refreshToken, userLogin } from '~api/user'
 import { userConfigInfo, userConfigSave } from '~api/other'
-import { setStoreValue } from '~src/utils/storage'
-import { ArrToOneObj, arrIndex, getArrValue, getObjValue, isNullES } from 'js-fast-way'
+import { getStoreValue, setStoreValue } from '~src/utils/storage'
+import { ArrToOneObj, arrIndex, getArrValue, getObjValue } from 'js-fast-way'
 import { useOsTheme } from 'hc-vue3-ui'
-
+import { setAppName } from '~uti/tools'
+import logoIcon from '~src/assets/logo/icon.png'
+import logoName from '~src/assets/logo/name.png'
 
 //初始变量
 const store = useAppStore(pinia)
 
 //登录
 export const useAppLogin = async (form) => {
-    const { error, code, res } = await userLogin(form)
+    const { error, code, res, msg } = await userLogin(form)
     if (!error && code === 200) {
-        await setUserAppInfo(res)
-        return { error, code, res }
+        const info = await setUserAppInfo(res)
+        return { error: info.error, msg: info.msg }
     } else {
-        return { error, code, res }
+        return { error: true, msg: msg }
     }
 }
 
@@ -36,43 +39,49 @@ export const setUserAppInfo = async (res) => {
     if (routerRes.length <= 0) {
         return { error: true, msg: '路由异常' }
     }
-    //获取路由首页
-    const isHomeUrl = await getHomeRouter(routerRes)
-    if (isNullES(isHomeUrl)) {
-        return { error: true, msg: '菜单权限异常' }
-    }
+    await getHomeRouter(routerRes)
     //获取配置数据
     await initUserConfigInfo()
-    return true
+    return { error: false, msg: '成功' }
 }
 
+//设置租户信息
+export const setUserTenantInfo = async (res = {}) => {
+    const { tenantAvatar, tenantAvatarText, tenantTitle, tenantId } = res
+
+    //设置标题
+    const title = tenantTitle ? tenantTitle : website.title
+    store.setTitle(title)
+    setAppName(title)
+
+    //设置logo图标
+    const icon = tenantAvatar ? tenantAvatar : logoIcon
+    store.setLogoIcon(icon)
+
+    //设置logo文字
+    const name = tenantAvatarText ? tenantAvatarText : logoName
+    store.setLogoName(name)
+
+    //设置租户ID
+    const id = tenantId ? tenantId : '000000'
+    store.setTenantId(id)
+
+    //返回数据
+    return { title, icon, name, id }
+}
 
 //获取路由菜单的主入口路径
-const getHomeRouter = async (arr) => {
-    //判断 arr 数组中的 children 中是否有数据,没数据的话,取下一个元素
-    const menus = arr.filter((item) => {
-        if (item?.children.length > 0) {
-            const menua = item.children.filter((items) => {
-                const children = getArrValue(items?.children)
-                return children.length > 0
-            })
-            return menua.length > 0
-        } else {
-            return false
-        }
-    })
-    //处理数据
-    if (menus.length <= 0) {
-        store.setHomeUrl('home-index')
-        return false
-    }
-    const code = menus[0]?.children[0]?.children[0]?.code
-    if (isNullES(code)) {
-        store.setHomeUrl('home-index')
-        return false
+const getHomeRouter = async () => {
+    const routes = getStoreValue('routesArr') ?? []
+    //没有菜单路由数据
+    if (routes.length <= 0) {
+        store.setHomeUrl('home')
+        return 'home'
     }
+    //设置主入口
+    const code = routes[0]
     store.setHomeUrl(code)
-    return true
+    return code
 }
 
 //用户信息初始化
@@ -111,9 +120,7 @@ export const initUserConfigInfo = async () => {
 export const setRouterData = async () => {
     //请求接口,获取路由数据
     const { error, data } = await getRoutes()
-    if (error) {
-        return Promise.reject(false)
-    }
+    if (error) return []
     const resData = getArrValue(data)
     //数据转换
     let routesObj = {}, routesArr = []
@@ -123,6 +130,7 @@ export const setRouterData = async () => {
     store.setMenus(resData)
     setStoreValue('route', routesObj)
     setStoreValue('routes', routes)
+    setStoreValue('routesArr', routesArr)
     return resData
 }
 

+ 15 - 52
src/views/login/index.vue

@@ -44,14 +44,11 @@
 import { nextTick, onMounted, ref } from 'vue'
 import { useRouter } from 'vue-router'
 import { useAppStore } from '~src/store'
-import { useAppLogin } from '~sto/user'
+import { setUserTenantInfo, useAppLogin } from '~sto/user'
 import { getTenantID } from '~api/user'
-import config from '~src/config/index'
-import { getTopUrl, setAppName } from '~uti/tools'
+import { getTopUrl } from '~uti/tools'
 import HcPicVue from './components/pic.vue'
-import logoIcon from '~src/assets/logo/icon.png'
-import logoName from '~src/assets/logo/name.png'
-import { formValidate, getObjVal, isNullES, setImageColorStyle } from 'js-fast-way'
+import { formValidate, getObjVal, setImageColorStyle } from 'js-fast-way'
 import { useDefer } from 'hc-vue3-ui'
 const defer = useDefer()
 
@@ -107,47 +104,14 @@ const passwordKeyUp = (e) => {
 const getTenantIdApi = async () => {
     const { error, code, data } = await getTenantID(getTopUrl())
     const res = getObjVal(data)
-    if (!error && code === 200 && res) {
-        const { tenantAvatar, tenantAvatarText, tenantTitle, tenantId } = res
-        tenantMode.value = false
-        //设置标题
-        userStore.setTitle(tenantTitle)
-        setAppName(tenantTitle)
-
-        //设置logo图标
-        const logoIconValue = tenantAvatar ? tenantAvatar : logoIcon
-        appLogoIcon.value = logoIconValue
-        userStore.setLogoIcon(logoIconValue)
-
-        //设置logo文字
-        const logoNameValue = tenantAvatarText ? tenantAvatarText : logoName
-        appLogoName.value = logoNameValue
-        userStore.setLogoName(logoNameValue)
-
-        //设置租户ID
-        formValue.value.tenantId = tenantId
-        userStore.setTenantId(tenantId)
-    } else {
-        tenantMode.value = true
-        //设置标题
-        userStore.setTitle(config.title)
-        setAppName(config.title)
-
-        //设置logo图标
-        appLogoIcon.value = logoIcon
-        userStore.setLogoIcon(logoIcon)
-
-        //设置logo文字
-        appLogoName.value = logoName
-        userStore.setLogoName(logoName)
-
-        //设置租户ID
-        formValue.value.tenantId = '000000'
-        userStore.setTenantId('000000')
-    }
-    nextTick(() => {
+    tenantMode.value = !(!error && code === 200 && res)
+    const { icon, name, id } = await setUserTenantInfo(res)
+    appLogoIcon.value = icon //设置logo图标
+    appLogoName.value = name //设置logo文字
+    formValue.value.tenantId = id //设置租户ID
+    await nextTick(() => {
         setAppImageColor()
-    }).then()
+    })
 }
 
 //登录
@@ -158,19 +122,18 @@ const formValidateClick = async () => {
     //登录请求
     loading.value = true
     const { error, msg } = await useAppLogin(formValue.value)
-    loading.value = false
     //登录失败
-    if (error && isNullES(msg)) return false
-    if (error && !isNullES(msg)) {
+    if (error) {
+        loading.value = false
         window?.$message?.error(msg)
         return false
     }
     //登录成功
+    loading.value = false
     window?.$message?.success('登录成功')
     setTimeout(() => {
-        router.push({
-            name: userStore.homeUrl,
-        })
+        loading.value = false
+        router.push({ name: userStore.homeUrl })
     }, 1500)
 }