123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- 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'
- 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 { 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, msg } = await userLogin(form)
- if (!error && code === 200) {
- const info = await setUserAppInfo(res)
- return { error: info.error, msg: info.msg }
- } else {
- return { error: true, msg: msg }
- }
- }
- //设置用户信息
- export const setUserAppInfo = async (res) => {
- store.setTokenVal(res['access_token'])
- store.setRefreshTokenVal(res['refresh_token'])
- store.setTenantId(res['tenant_id'])
- store.setUserInfo(res)
- store.setIsLogin(true)
- //获取路由菜单
- const routerRes = await setRouterData()
- if (routerRes.length <= 0) {
- return { error: true, msg: '路由异常' }
- }
- await getHomeRouter(routerRes)
- //获取配置数据
- await initUserConfigInfo()
- 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 () => {
- const routes = store.menus
- //没有菜单路由数据
- if (routes.length <= 0) {
- store.setHomeUrl('home')
- return 'home'
- } else {
- const code = await getRoutesHomeUrl(routes)
- store.setHomeUrl(code)
- return code
- }
- }
- //递归获取最子级的菜单
- const getRoutesHomeUrl = async (arr) => {
- const item = arr[0]
- if (!isNullES(item.children) && item.children.length > 0) {
- return await getRoutesHomeUrl(item.children)
- } else {
- return item.code
- }
- }
- //用户信息初始化
- export const initUserConfigInfo = async () => {
- const { error, data } = await userConfigInfo()
- if (error) return false
- const res = getObjValue(data)
- if (res?.theme) {
- const { theme, color } = res
- //设置主题
- store.setTheme(theme)
- //设置模式
- if (theme === 'auto') {
- store.setThemeVal(useOsTheme())
- } else {
- store.setThemeVal(theme)
- }
- //获取主色调和首页主题数据
- let themeColor = themeData.color
- let colorIndex = arrIndex(themeColor, 'name', color)
- //设置主色调
- if (colorIndex !== -1) {
- store.setColor(themeColor[colorIndex])
- }
- return true
- } else {
- await userConfigSave({
- theme: appConfig?.theme || '',
- color: appConfig?.color?.name || '',
- })
- return true
- }
- }
- //设置路由信息
- export const setRouterData = async () => {
- //请求接口,获取路由数据
- 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] //合并
- //数据缓存
- store.setMenus(resData)
- setStoreValue('route', routesObj)
- setStoreValue('routes', routes)
- setStoreValue('routesArr', routesArr)
- return resData
- }
- //刷新token
- export const RefreshToken = async () => {
- try {
- window.console.log('刷新 token')
- const { dept_id, role_id } = store.getUserInfo
- const refresh = store.getRefreshToken
- const tenantId = store.getTenantId
- const { error, code, res } = await refreshToken(refresh, tenantId, dept_id, role_id)
- if (!error && code === 200) {
- store.setTokenVal(res['access_token'])
- store.setRefreshTokenVal(res['refresh_token'])
- store.setTenantId(res['tenant_id'])
- 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()
- }
|