| | |
| | | import type { UserInfo } from '/#/store'; |
| | | import type { ErrorMessageMode } from '/#/axios'; |
| | | /* |
| | | * @Description: file content |
| | | * @Author: Ben Lin |
| | | * @version: |
| | | * @Date: 2024-06-18 15:09:47 |
| | | * @LastEditors: Ben Lin |
| | | * @LastEditTime: 2024-10-07 17:01:32 |
| | | */ |
| | | import type { UserInfo } from '#/store'; |
| | | import type { ErrorMessageMode } from '#/axios'; |
| | | import { defineStore } from 'pinia'; |
| | | import { store } from '/@/store'; |
| | | import { RoleEnum } from '/@/enums/roleEnum'; |
| | | import { PageEnum } from '/@/enums/pageEnum'; |
| | | import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY } from '/@/enums/cacheEnum'; |
| | | import { getAuthCache, setAuthCache } from '/@/utils/auth'; |
| | | import { GetUserInfoModel, LoginParams } from '/@/api/sys/model/userModel'; |
| | | import { doLogout, getTgUserInfo, getUserInfo, loginApi } from '/@/api/sys/user'; |
| | | import { useI18n } from '/@/hooks/web/useI18n'; |
| | | import { useMessage } from '/@/hooks/web/useMessage'; |
| | | import { router } from '/@/router'; |
| | | import { usePermissionStore } from '/@/store/modules/permission'; |
| | | import { RouteRecordRaw } from 'vue-router'; |
| | | import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; |
| | | import { isArray, isEmpty } from '/@/utils/is'; |
| | | import { AccountInfo } from '/@/api/tigerapi/model/systemModel'; |
| | | |
| | | import { store } from '@/store'; |
| | | import { RoleEnum } from '@/enums/roleEnum'; |
| | | import { PageEnum } from '@/enums/pageEnum'; |
| | | import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY } from '@/enums/cacheEnum'; |
| | | import { getAuthCache, setAuthCache } from '@/utils/auth'; |
| | | import { GetUserInfoModel } from '@/api/sys/model/userModel'; |
| | | import { doLogout, getTgUserInfo, loginApi } from '@/api/sys/user'; |
| | | import { useI18n } from '@/hooks/web/useI18n'; |
| | | import { useMessage } from '@/hooks/web/useMessage'; |
| | | import { router } from '@/router'; |
| | | import { isArray } from '@/utils/is'; |
| | | import { h } from 'vue'; |
| | | import { AccountInfo } from '/@/api/tigerapi/model/systemModel'; |
| | | import { getMenuAuthList } from '/@/api/sys/menu'; |
| | | import { iV_USER_MENU } from '/@/api/tigerapi/model/vModel'; |
| | | import { useGlobSetting } from '/@/hooks/setting'; |
| | | import { getSysParam } from '/@/api/tigerapi/system'; |
| | | import { ApiAction } from '/@/api/model/baseModel'; |
| | | |
| | | const globSetting = useGlobSetting(); |
| | | interface UserState { |
| | | userInfo: Nullable<UserInfo>; |
| | | token?: string; |
| | |
| | | this.setSessionTimeout(false); |
| | | } else { |
| | | // const permissionStore = usePermissionStore(); |
| | | |
| | | // // 动态路由加载(首次) |
| | | // if (!permissionStore.isDynamicAddedRoute) { |
| | | // const routes = await permissionStore.buildRoutesAction(); |
| | | // routes.forEach((route) => { |
| | | // [...routes, PAGE_NOT_FOUND_ROUTE].forEach((route) => { |
| | | // router.addRoute(route as unknown as RouteRecordRaw); |
| | | // }); |
| | | // router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw); |
| | | // // 记录动态路由加载完成 |
| | | // permissionStore.setDynamicAddedRoute(true); |
| | | // } |
| | | |
| | | goHome && (await router.replace(userInfo?.homePath || PageEnum.BASE_HOME)); |
| | | } |
| | | return userInfo; |
| | | }, |
| | | async getUserInfoAction(changepwd: boolean): Promise<UserInfo | null> { |
| | | async getUserInfoAction(changepwd?: boolean): Promise<UserInfo | null> { |
| | | if (!this.getToken) return null; |
| | | const data = await getTgUserInfo(); |
| | | const vUserMenu = await getMenuAuthList(data.USER_ID); |
| | |
| | | changepwd: changepwd, |
| | | username: data.USER_NAME, |
| | | realName: data.USER_NAME, |
| | | orgCode: '', //globSetting.useOrg == 'Y' ? data.ORG_CODE : '', |
| | | prodCode: data.ORG_CODE, //globSetting.useOrg == 'N' ? data.ORG_CODE : '', |
| | | orgCode: data.ORG_CODE, //globSetting.useOrg == 'Y' ? data.ORG_CODE : '', |
| | | prodCode: data.FTY_CODE, //globSetting.useOrg == 'N' ? data.ORG_CODE : '', |
| | | avatar: '', |
| | | roles: vUserMenu.Data.Items as unknown as iV_USER_MENU[], |
| | | byOrg: false, |
| | | byProd: false, |
| | | byWh: false, |
| | | }; |
| | | /* 从系统参数获取启用哪种权限 */ |
| | | var action = await getSysParam({ group: 'ByAuthActive' }); |
| | | if (action.IsSuccessed) { |
| | | userInfo.byOrg = |
| | | action.Data.filter((x) => x.PARAM_CODE == 'ByOrgActive')[0].PARAM_VALUE == 'Y'; |
| | | userInfo.byProd = |
| | | action.Data.filter((x) => x.PARAM_CODE == 'ByProdActive')[0].PARAM_VALUE == 'Y'; |
| | | userInfo.byWh = |
| | | action.Data.filter((x) => x.PARAM_CODE == 'ByWhActive')[0].PARAM_VALUE == 'Y'; |
| | | } |
| | | const { roles = [] } = userInfo; |
| | | if (isArray(roles)) { |
| | | const roleList = roles.map((item) => item.value) as RoleEnum[]; |
| | |
| | | this.setUserInfo(userInfo); |
| | | return userInfo; |
| | | }, |
| | | async getTgUserInfoAction(changepwd: boolean, orgCode?: string): Promise<UserInfo | null> { |
| | | /** |
| | | * @description: logout |
| | | */ |
| | | async logout(goLogin = false) { |
| | | if (this.getToken) { |
| | | try { |
| | | await doLogout({ Data: this.getToken } as unknown as ApiAction<string>); |
| | | } catch { |
| | | console.log('注销Token失败'); |
| | | } |
| | | } |
| | | this.setToken(undefined); |
| | | this.setSessionTimeout(false); |
| | | this.setUserInfo(null); |
| | | if (goLogin) { |
| | | // 直接回登陆页 |
| | | router.replace(PageEnum.BASE_LOGIN); |
| | | } else { |
| | | // 回登陆页带上当前路由地址 |
| | | router.replace({ |
| | | path: PageEnum.BASE_LOGIN, |
| | | query: { |
| | | redirect: encodeURIComponent(router.currentRoute.value.fullPath), |
| | | }, |
| | | }); |
| | | } |
| | | }, |
| | | async getTgUserInfoAction(changepwd?: boolean, orgCode?: string): Promise<UserInfo | null> { |
| | | if (!this.getToken) return null; |
| | | const data = await getTgUserInfo(); |
| | | const vUserMenu = await getMenuAuthList(data.USER_ID); |
| | |
| | | username: data.USER_NAME, |
| | | changepwd: changepwd, |
| | | realName: data.USER_NAME, |
| | | orgCode: '', //globSetting.useOrg == 'Y' ? data.ORG_CODE : '', |
| | | orgCode: data.ORG_CODE, //globSetting.useOrg == 'Y' ? data.ORG_CODE : '', |
| | | prodCode: data.FTY_CODE, //globSetting.useOrg == 'N' ? data.FTY_CODE : '', |
| | | avatar: '', |
| | | roles: vUserMenu.Data.Items as unknown as iV_USER_MENU[], |
| | | }; |
| | | } as unknown as UserInfo; |
| | | this.setUserInfo(userInfo); |
| | | //console.log(data[0].LOGINNAME); |
| | | return userInfo; |
| | | }, |
| | | /** |
| | | * @description: logout |
| | | */ |
| | | async logout(goLogin = false) { |
| | | if (this.getToken) { |
| | | try { |
| | | await doLogout({ Data: this.getToken }); |
| | | } catch { |
| | | console.log('注销Token失败'); |
| | | } |
| | | } |
| | | this.setToken(undefined); |
| | | this.setSessionTimeout(false); |
| | | this.setUserInfo(null); |
| | | goLogin && router.push(PageEnum.BASE_LOGIN); |
| | | }, |
| | | |
| | | /** |
| | | * @description: Confirm before logging out |
| | | */ |
| | |
| | | title: () => h('span', t('sys.app.logoutTip')), |
| | | content: () => h('span', t('sys.app.logoutMessage')), |
| | | onOk: async () => { |
| | | // 主动登出,不带redirect地址 |
| | | await this.logout(true); |
| | | }, |
| | | }); |