import { store } from "/@/store"; import { router } from "/@/router"; import { defineStore } from "pinia"; import { userType, resType } from "./types"; import { routerArrays } from "/@/layout/types"; import { storageSession } from "@pureadmin/utils"; import { useMultiTagsStoreHook } from "/@/store/modules/multiTags"; import { getRelaComName, getRelaComNo, setRelaComName } from "/@/utils/auth"; import { getLogin, getAsyncRoutes, ddDetail, refreshToken, httpCompany, httpUserInfo, httpSystemLast } from "/@/api/user"; import { getToken, setToken, setRelaComNo, removeToken, getAction, setAction, removeAction } from "/@/utils/auth"; import { removeMenus } from "/@/store/modules/permission"; export const useUserStore = defineStore({ id: "pure-user", state: (): userType => ({ token: getToken(), name: "admin", // 前端生成的验证码(按实际需求替换) verifyCode: "", // 登录显示组件判断 0:登录 1:手机登录 2:二维码登录 3:注册 4:忘记密码,默认0:登录 currentPage: 0, menuActions: getAction(), companyList: [], currentCompany: null, isSuperUser: false, swithingCompany: false, disabledCompany: false, systemInfo: {}, info: {} }), actions: { SET_TOKEN(token) { this.token = token; }, SET_NAME(name) { this.name = name; }, SET_VERIFYCODE(verifyCode) { this.verifyCode = verifyCode; }, SET_CURRENTPAGE(value) { this.currentPage = value; }, SET_ACTIONS(value) { this.actions = value; }, SET_CURRENT_COMPANY(currentCompany) { this.currentCompany = currentCompany; }, // 登入 async loginByUsername(form) { return new Promise((resolve, reject) => { getLogin(form) .then((res: resType) => { const { code, data } = res; if (code === 0) { const { token, companyNo, company_name } = data; setRelaComNo(companyNo); setRelaComName(company_name); setToken(token); resolve(res); } else { resolve(res); } }) .catch(error => { reject(error); }); }); }, //钉钉code 获取用户账号详情 dingUserInfor(code) { return new Promise((resolve, reject) => { ddDetail(code) .then((res: resType) => { const { code, data } = res; if (code === 0) { const { token, companyNo } = data; setToken(token); setRelaComNo(companyNo); resolve(res); } else { resolve("error"); } }) .catch(error => { reject(error); }); }); }, async requesetUserInfo() { // this.currentCompany = null; const { code, data } = await httpUserInfo({ noRela: true }); this.info = data; if (Number(code) === 0) { const { role_level } = data; this.isSuperUser = role_level === "1"; const code = getRelaComNo(); const companyName = getRelaComName(); if (!this.isSuperUser && this.companyList.length === 0) { const { code: __code, data: __data } = await httpCompany({ companyName }); if (Number(__code) === 0) { this.companyList = __data.list; } } const index = this.companyList.findIndex( ({ companyNo }) => companyNo === code ); const _index = index >= 0 ? index : 0; this.currentCompany = !this.isSuperUser ? this.companyList[_index] : ""; } else { throw new Error(); } }, async requsetSystemInfo() { const { data, code } = await httpSystemLast({}); if (Number(code) === 0) { this.systemInfo = data; } else { throw new Error(); } }, // 获取当前账号菜单数据 async postMenuList(form) { try { await this.requesetUserInfo(); await this.requsetSystemInfo(); return new Promise((resolve, reject) => { getAsyncRoutes(form) .then((res: resType) => { const { code, data } = res; const actionList: Array = []; switch (Number(code)) { case 0: data.forEach(e => { e.child?.forEach(s => { const item = { menu_route: s.menu_route, action: s.action }; actionList.push(item); }); }); setAction(JSON.stringify(actionList)); resolve(res); break; case 10000: removeMenus(); this.disabledCompany = true; reject(10000); return; default: resolve(res); break; } this.disabledCompany = false; }) .catch(error => { reject(error); }); }); } catch (err) { window.location.hash = "login"; } }, // 登出 清空缓存 logOut() { this.token = ""; this.name = ""; removeToken(); removeAction(); storageSession.clear(); this.currentComapny = ""; this.companyList = []; useMultiTagsStoreHook().handleTags("equal", routerArrays); router.push("/login"); }, // 刷新token async refreshToken(data) { return refreshToken(data).then(data => { if (data) { setToken(data); return data; } }); }, getMenuActions(code) { const arr = getAction(); if (arr && arr.length > 0) { const powerHook = JSON.parse(arr); const arr1 = powerHook.find(i => i.menu_route == code)?.action || []; return arr1; } else { return []; } } } }); export async function initalUser() { return useUserStore().requesetUserInfo(); } export function useUserStoreHook() { return useUserStore(store); }