123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import pinia from '~src/store/init'
- import { useAppStore } from '~src/store'
- import { getRoutes } from '~api/menu'
- import { getRefreshToken, setRefreshToken, setToken } from 'hc-vue3-ui'
- import tokenData from '~src/router/modules/token'
- import { ArrToOneObj, getArrValue, isNullES } from 'js-fast-way'
- import { logout, refreshToken, userLogin } from '~api/user'
- import { getStore, setStore } from '~src/utils/storage'
- //初始变量
- const store = useAppStore(pinia)
- //登录
- export const useAppLogin = async (form) => {
- const { error, code, res } = await userLogin(form)
- if (!error && code === 200) {
- setToken(res['access_token'])
- setRefreshToken(res['refresh_token'])
- store.setUserInfo(res)
- //获取路由菜单
- const routerRes = await setRouterData()
- if (routerRes.length <= 0) {
- return { error: true, msg: '路由异常' }
- }
- await getHomeRouter()
- return { error, code, res }
- } else {
- return { error, code, res }
- }
- }
- //设置路由信息
- 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] //合并
- //数据缓存
- setStore('menus', resData)
- setStore('route', routesObj)
- setStore('routes', routes)
- return resData
- }
- //获取路由菜单的主入口路径
- const getHomeRouter = async () => {
- const menus = getArrValue(getStore('menus'))
- //没有菜单路由数据
- if (menus.length <= 0) {
- store.setHomePage('index')
- store.setPage('anomaly')
- } else {
- const code = await getRoutesHomeUrl(menus, 0)
- store.setHomePage(code)
- store.setPage(code)
- if (code === 'index') {
- const pageCode = await getRoutesHomeUrl(menus, 1)
- store.setPage(pageCode)
- }
- }
- }
- //递归获取最子级的菜单
- const getRoutesHomeUrl = async (arr, index = 0) => {
- const item = arr[index]
- if (!isNullES(item.children) && item.children.length > 0) {
- return await getRoutesHomeUrl(item.children, index)
- } else {
- return item.code
- }
- }
- //刷新token
- export const RefreshToken = async () => {
- try {
- const { dept_id, role_id } = store.getUserInfo
- const refresh = getRefreshToken()
- const { error, code, res } = await refreshToken(refresh, dept_id, role_id)
- if (!error && code === 200) {
- setToken(res['access_token'])
- setRefreshToken(res['refresh_token'])
- store.setUserInfo(res)
- return Promise.resolve(res)
- } else {
- return Promise.reject(res)
- }
- } catch (e) {
- window.console.warn('token 刷新失败: ', e)
- return Promise.reject(e)
- }
- }
- //登出
- export const LogOut = async () => {
- return await logout()
- }
|