user.ts 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. import { store } from "/@/store";
  2. import { router } from "/@/router";
  3. import { defineStore } from "pinia";
  4. import { userType, resType } from "./types";
  5. import { routerArrays } from "/@/layout/types";
  6. import { storageSession } from "@pureadmin/utils";
  7. import { useMultiTagsStoreHook } from "/@/store/modules/multiTags";
  8. import { getRelaComName, getRelaComNo, setRelaComName } from "/@/utils/auth";
  9. import {
  10. getLogin,
  11. getAsyncRoutes,
  12. ddDetail,
  13. refreshToken,
  14. httpCompany,
  15. httpUserInfo,
  16. httpSystemLast
  17. } from "/@/api/user";
  18. import {
  19. getToken,
  20. setToken,
  21. setRelaComNo,
  22. removeToken,
  23. getAction,
  24. setAction,
  25. removeAction
  26. } from "/@/utils/auth";
  27. import { removeMenus } from "/@/store/modules/permission";
  28. export const useUserStore = defineStore({
  29. id: "pure-user",
  30. state: (): userType => ({
  31. token: getToken(),
  32. name: "admin",
  33. // 前端生成的验证码(按实际需求替换)
  34. verifyCode: "",
  35. // 登录显示组件判断 0:登录 1:手机登录 2:二维码登录 3:注册 4:忘记密码,默认0:登录
  36. currentPage: 0,
  37. menuActions: getAction(),
  38. companyList: [],
  39. currentCompany: null,
  40. isSuperUser: false,
  41. swithingCompany: false,
  42. disabledCompany: false,
  43. systemInfo: {},
  44. info: {}
  45. }),
  46. actions: {
  47. SET_TOKEN(token) {
  48. this.token = token;
  49. },
  50. SET_NAME(name) {
  51. this.name = name;
  52. },
  53. SET_VERIFYCODE(verifyCode) {
  54. this.verifyCode = verifyCode;
  55. },
  56. SET_CURRENTPAGE(value) {
  57. this.currentPage = value;
  58. },
  59. SET_ACTIONS(value) {
  60. this.actions = value;
  61. },
  62. SET_CURRENT_COMPANY(currentCompany) {
  63. this.currentCompany = currentCompany;
  64. },
  65. // 登入
  66. async loginByUsername(form) {
  67. return new Promise((resolve, reject) => {
  68. getLogin(form)
  69. .then((res: resType) => {
  70. const { code, data } = res;
  71. if (code === 0) {
  72. const { token, companyNo, company_name } = data;
  73. setRelaComNo(companyNo);
  74. setRelaComName(company_name);
  75. setToken(token);
  76. resolve(res);
  77. } else {
  78. resolve(res);
  79. }
  80. })
  81. .catch(error => {
  82. reject(error);
  83. });
  84. });
  85. },
  86. //钉钉code 获取用户账号详情
  87. dingUserInfor(code) {
  88. return new Promise((resolve, reject) => {
  89. ddDetail(code)
  90. .then((res: resType) => {
  91. const { code, data } = res;
  92. if (code === 0) {
  93. const { token, companyNo } = data;
  94. setToken(token);
  95. setRelaComNo(companyNo);
  96. resolve(res);
  97. } else {
  98. resolve("error");
  99. }
  100. })
  101. .catch(error => {
  102. reject(error);
  103. });
  104. });
  105. },
  106. async requesetUserInfo() {
  107. // this.currentCompany = null;
  108. const { code, data } = await httpUserInfo({
  109. noRela: true
  110. });
  111. this.info = data;
  112. if (Number(code) === 0) {
  113. const { role_level } = data;
  114. this.isSuperUser = role_level === "1";
  115. const code = getRelaComNo();
  116. const companyName = getRelaComName();
  117. if (!this.isSuperUser && this.companyList.length === 0) {
  118. const { code: __code, data: __data } = await httpCompany({
  119. companyName
  120. });
  121. if (Number(__code) === 0) {
  122. this.companyList = __data.list;
  123. }
  124. }
  125. const index = this.companyList.findIndex(
  126. ({ companyNo }) => companyNo === code
  127. );
  128. const _index = index >= 0 ? index : 0;
  129. this.currentCompany = !this.isSuperUser ? this.companyList[_index] : "";
  130. } else {
  131. throw new Error();
  132. }
  133. },
  134. async requsetSystemInfo() {
  135. const { data, code } = await httpSystemLast({});
  136. if (Number(code) === 0) {
  137. this.systemInfo = data;
  138. } else {
  139. throw new Error();
  140. }
  141. },
  142. // 获取当前账号菜单数据
  143. async postMenuList(form) {
  144. try {
  145. await this.requesetUserInfo();
  146. await this.requsetSystemInfo();
  147. return new Promise((resolve, reject) => {
  148. getAsyncRoutes(form)
  149. .then((res: resType) => {
  150. const { code, data } = res;
  151. const actionList: Array<any> = [];
  152. switch (Number(code)) {
  153. case 0:
  154. data.forEach(e => {
  155. e.child?.forEach(s => {
  156. const item = {
  157. menu_route: s.menu_route,
  158. action: s.action
  159. };
  160. actionList.push(item);
  161. });
  162. });
  163. setAction(JSON.stringify(actionList));
  164. resolve(res);
  165. break;
  166. case 10000:
  167. removeMenus();
  168. this.disabledCompany = true;
  169. reject(10000);
  170. return;
  171. default:
  172. resolve(res);
  173. break;
  174. }
  175. this.disabledCompany = false;
  176. })
  177. .catch(error => {
  178. reject(error);
  179. });
  180. });
  181. } catch (err) {
  182. window.location.hash = "login";
  183. }
  184. },
  185. // 登出 清空缓存
  186. logOut() {
  187. this.token = "";
  188. this.name = "";
  189. removeToken();
  190. removeAction();
  191. storageSession.clear();
  192. this.currentComapny = "";
  193. this.companyList = [];
  194. useMultiTagsStoreHook().handleTags("equal", routerArrays);
  195. router.push("/login");
  196. },
  197. // 刷新token
  198. async refreshToken(data) {
  199. return refreshToken(data).then(data => {
  200. if (data) {
  201. setToken(data);
  202. return data;
  203. }
  204. });
  205. },
  206. getMenuActions(code) {
  207. const arr = getAction();
  208. if (arr && arr.length > 0) {
  209. const powerHook = JSON.parse(arr);
  210. const arr1 = powerHook.find(i => i.menu_route == code)?.action || [];
  211. return arr1;
  212. } else {
  213. return [];
  214. }
  215. }
  216. }
  217. });
  218. export async function initalUser() {
  219. return useUserStore().requesetUserInfo();
  220. }
  221. export function useUserStoreHook() {
  222. return useUserStore(store);
  223. }