user.ts 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. import { defineStore } from "pinia";
  2. import { store } from "/@/store";
  3. import { userType, resType } from "./types";
  4. import { router } from "/@/router";
  5. import { routerArrays } from "/@/layout/types";
  6. import { storageSession } from "@pureadmin/utils";
  7. import { getLogin, getMenuList, refreshToken } from "/@/api/user";
  8. import {
  9. getToken,
  10. setToken,
  11. removeToken,
  12. getUserInfo,
  13. setUserInfo,
  14. removeUserInfo
  15. } from "/@/utils/auth";
  16. import { useMultiTagsStoreHook } from "/@/store/modules/multiTags";
  17. const userinfo = getUserInfo();
  18. export const useUserStore = defineStore({
  19. id: "pure-user",
  20. state: (): userType => ({
  21. token: getToken(),
  22. name: "admin",
  23. // 前端生成的验证码(按实际需求替换)
  24. verifyCode: "",
  25. // 登录显示组件判断 0:登录 1:手机登录 2:二维码登录 3:注册 4:忘记密码,默认0:登录
  26. currentPage: 0,
  27. userInfo: userinfo || null
  28. }),
  29. actions: {
  30. SET_TOKEN(token) {
  31. this.token = token;
  32. },
  33. SET_NAME(name) {
  34. this.name = name;
  35. },
  36. SET_VERIFYCODE(verifyCode) {
  37. this.verifyCode = verifyCode;
  38. },
  39. SET_CURRENTPAGE(value) {
  40. this.currentPage = value;
  41. },
  42. SET_USERINFO(value) {
  43. this.userInfo = value;
  44. },
  45. // 登入
  46. async loginByUsername(form) {
  47. return new Promise((resolve, reject) => {
  48. getLogin(form)
  49. .then((res: resType) => {
  50. const { code, data } = res;
  51. if (code === 0) {
  52. const { token, userinfo } = data;
  53. setToken(token);
  54. setUserInfo(userinfo);
  55. resolve(res);
  56. } else {
  57. resolve(res);
  58. }
  59. })
  60. .catch(error => {
  61. reject(error);
  62. });
  63. });
  64. },
  65. // 获取当前账号菜单数据
  66. async postMenuList(form) {
  67. return new Promise((resolve, reject) => {
  68. getMenuList(form)
  69. .then((res: resType) => {
  70. const { code, data } = res;
  71. if (code === 0) {
  72. const systemRouter = {
  73. path: "/system",
  74. redirect: "/system/menuOperator/index",
  75. meta: {
  76. icon: "setting",
  77. title: "系统管理",
  78. rank: 11
  79. },
  80. children: [
  81. {
  82. path: "/system/menuOperator/index",
  83. name: "menuOperator",
  84. meta: {
  85. icon: "flUser",
  86. title: "用户管理"
  87. }
  88. },
  89. {
  90. path: "/system/oplog/index",
  91. name: "oplog",
  92. meta: {
  93. icon: "role",
  94. title: "角色管理"
  95. }
  96. },
  97. {
  98. path: "/system/updates/index",
  99. name: "updates",
  100. meta: {
  101. icon: "dept",
  102. title: "部门管理"
  103. }
  104. }
  105. ]
  106. };
  107. const interestRouter = {
  108. path: "/interest",
  109. redirect: "/interest/account/index",
  110. meta: {
  111. icon: "setting",
  112. title: "权限管理",
  113. rank: 11
  114. },
  115. children: [
  116. {
  117. path: "/interest/account/index",
  118. name: "account",
  119. meta: {
  120. icon: "flUser",
  121. title: "用户管理"
  122. }
  123. },
  124. {
  125. path: "/interest/role/index",
  126. name: "role",
  127. meta: {
  128. icon: "role",
  129. title: "角色管理"
  130. }
  131. },
  132. {
  133. path: "/interest/action/index",
  134. name: "action",
  135. meta: {
  136. icon: "dept",
  137. title: "部门管理"
  138. }
  139. },
  140. {
  141. path: "/interest/dataShare/index",
  142. name: "dataShare",
  143. meta: {
  144. icon: "dict",
  145. title: "字典管理"
  146. }
  147. },
  148. {
  149. path: "/interest/group/index",
  150. name: "group",
  151. meta: {
  152. icon: "dict",
  153. title: "字典管理"
  154. }
  155. }
  156. ]
  157. };
  158. const arrag = [interestRouter, systemRouter];
  159. resolve(res);
  160. // console.log(arrag);
  161. } else {
  162. resolve(res);
  163. }
  164. })
  165. .catch(error => {
  166. reject(error);
  167. });
  168. });
  169. },
  170. // 登出 清空缓存
  171. logOut() {
  172. this.token = "";
  173. this.name = "";
  174. removeToken();
  175. storageSession.clear();
  176. useMultiTagsStoreHook().handleTags("equal", routerArrays);
  177. router.push("/login");
  178. },
  179. // 刷新token
  180. async refreshToken(data) {
  181. return refreshToken(data).then(data => {
  182. if (data) {
  183. setToken(data);
  184. return data;
  185. }
  186. });
  187. }
  188. }
  189. });
  190. export function useUserStoreHook() {
  191. return useUserStore(store);
  192. }