user.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import { defineStore } from 'pinia';
  2. //import { useWsStore } from './ws';
  3. import { store } from '@/store';
  4. import { login } from '@/api/login';
  5. import {ACCESS_TOKEN_KEY, USER_INFO_KEY} from '@/enums/cacheEnum';
  6. import { Storage } from '@/utils/Storage';
  7. import { logout, getInfo, permmenu } from '@/api/account';
  8. import {oauthLogin} from "@/api/oauth";
  9. import {alertController} from "@ionic/vue";
  10. interface UserState {
  11. token: string;
  12. name: string;
  13. avatar: string;
  14. // like [ 'sys:user:add', 'sys:user:update' ]
  15. perms: string[];
  16. menus: API.Menu[];
  17. userInfo: Partial<API.AdminUserInfo>;
  18. timer: any
  19. }
  20. export const useUserStore = defineStore({
  21. id: 'user',
  22. state: (): UserState => ({
  23. token: Storage.get(ACCESS_TOKEN_KEY, null),
  24. name: 'amdin',
  25. avatar: '',
  26. perms: [],
  27. menus: [],
  28. userInfo: Storage.get(USER_INFO_KEY, null),
  29. timer: null
  30. }),
  31. getters: {
  32. getToken(): string {
  33. return this.token;
  34. },
  35. getAvatar(): string {
  36. return this.avatar;
  37. },
  38. getName(): string {
  39. return this.name;
  40. },
  41. getUserInfo():Partial<API.AdminUserInfo>{
  42. return this.userInfo;
  43. },
  44. },
  45. actions: {
  46. /** 清空token及用户信息 */
  47. resetToken() {
  48. this.avatar = this.token = this.name = '';
  49. this.perms = [];
  50. this.menus = [];
  51. this.userInfo = {};
  52. Storage.clear();
  53. },
  54. /** 登录成功保存token */
  55. setToken(token: string) {
  56. this.token = token ?? '';
  57. const ex = 7 * 24 * 60 * 60 * 1000;
  58. Storage.set(ACCESS_TOKEN_KEY, this.token, ex);
  59. },
  60. setUserInfo(userInfo:any){
  61. this.userInfo = userInfo ?? '';
  62. const ex = 7 * 24 * 60 * 60 * 1000;
  63. Storage.set(USER_INFO_KEY, this.userInfo,ex);
  64. },
  65. /** 登录 */
  66. async login(params: API.LoginParams) {
  67. try {
  68. const data = await login(params);
  69. this.setToken(data.token);
  70. return this.afterLogin();
  71. } catch (error) {
  72. return Promise.reject(error);
  73. }
  74. },
  75. /** 单点登录 */
  76. async oauthLogin(type: string, ticket: string,tm:string) {
  77. try {
  78. const data = await oauthLogin(type, ticket,tm);
  79. if (data != null && data.token != null) {
  80. this.setToken(data.token);
  81. return this.afterLogin();
  82. }
  83. else{
  84. return Promise.reject(false);
  85. }
  86. } catch (error) {
  87. return Promise.reject(false);
  88. }
  89. },
  90. /** 登录成功之后, 获取用户信息以及生成权限路由 */
  91. async afterLogin() {
  92. try {
  93. //const wsStore = useWsStore();
  94. const [userInfo, { perms,menus }] = await Promise.all([getInfo(), permmenu()]);
  95. this.perms = perms;
  96. this.name = userInfo.name;
  97. /*this.avatar = userInfo.headImg;*/
  98. this.userInfo = userInfo;
  99. this.menus = menus;
  100. this.setUserInfo(userInfo);
  101. // 生成路由
  102. //const generatorResult = await generatorDynamicRouter(menus);
  103. //this.menus = generatorResult.menus.filter((item) => !item.meta?.hideInMenu);
  104. //!wsStore.client && wsStore.initSocket();
  105. return { userInfo };
  106. } catch (error) {
  107. return Promise.reject(error);
  108. // return this.logout();
  109. }
  110. },
  111. /** 登出 */
  112. async logout() {
  113. await logout();
  114. //const wsStore = useWsStore();
  115. //wsStore.closeSocket();
  116. this.resetToken();
  117. this.clearTimer();
  118. //resetRouter();
  119. },
  120. /**
  121. * 设置获取经纬度定时器
  122. */
  123. setTimer(timer: any) {
  124. this.timer = timer
  125. },
  126. /**
  127. * 清除经纬度定时器
  128. */
  129. clearTimer(){
  130. clearInterval(this.timer);
  131. }
  132. },
  133. });
  134. // 在组件setup函数外使用
  135. export function useUserStoreWithOut() {
  136. return useUserStore(store);
  137. }