import { login, logout, userinfo, menuList, dingdingdetail, usergetinfo, roleProcessInfo, requsetCompanyList } from "@/apis/user"; import { getToken, setToken, removeToken, getMenu, setMenu, removeMenu, getBtn, setBtn, removeBtn, get_business_company, set_business_company, remove_business_company, get_business_companyNo, set_business_companyNo, remove_business_companyNo, get_private_field, set_private_field, remove_private_field, get_action_data, set_action_data, remove_action_data, get_role_level, set_role_level, remove_role_level, getUserCompany, } from "@/utils/auth"; import store from ".."; const state = { token: getToken(), name: "", avatar: require("@/assets/img/avatar.gif"), introduction: "", roles: ["admin"], btnList: getBtn(), navList: getMenu(), role_level:get_role_level() || "1", business_company: get_business_company() || "", business_companyNo: get_business_companyNo() || "", private_field: get_private_field() || [], roleProcess: get_action_data() || [], currentCompany: getUserCompany() }; const mutations = { SET_TOKEN: (state, token) => { state.token = token; }, SET_MENU: (state, menu) => { state.menu = menu; }, SET_HAS: (state, has) => { state.has = has; }, SET_INTRODUCTION: (state, introduction) => { state.introduction = introduction; }, SET_NAME: (state, name) => { state.name = name; }, SET_AVATAR: (state, avatar) => { state.avatar = avatar; }, SET_ROLES: (state, roles) => { state.roles = roles; }, navListFn(state, val) { if (!val) { val = []; } state.navList = val; setMenu(val); }, btnListFn(state, val) { if (!val) { val = []; } state.btnList = val; setBtn(val); }, business_company(state, val) { state.business_company = val; set_business_company(val); }, business_companyNo(state, val) { state.business_companyNo = val; set_business_companyNo(val); }, roleProcess(state, val) { state.roleProcess = val; set_action_data(val); }, private_field(state, val) { state.private_field = val; set_private_field(val); }, setCurrentCompany(state,val){ state.currentCompany = val; } }; const actions = { // user login login({ commit }, userInfo) { const { username, password } = userInfo; return new Promise((resolve, reject) => { login({ username: username.trim(), password: password }) .then((response) => { const {code, data } = response; if (code === 0) { const {token,nickname}=data commit("SET_TOKEN", token); commit("SET_NAME", nickname); setToken(token); } resolve(response); }) .catch((error) => { reject(error); }); }); }, dingUserInfor({ commit }, code) { return new Promise(async (resolve, reject) => { dingdingdetail(code) .then((response) => { const { data } = response; if (response.code === 0) { commit("SET_TOKEN", data.token); setToken(data.token); resolve("success"); } else { resolve("error"); } }) .catch((error) => { reject(error); }); }); }, async getMenuList({ commit, that }) { return new Promise(async (resolve, reject) => { if (!getToken()) { resolve("noToken"); } else { const { ucode, udata, umsg } = await getUserInfo(); if (ucode >= 100 && ucode <= 104) { resolve("noToken"); } else if (ucode !== 0) { resolve({ code: ucode, data: udata, massage: umsg }); } else { // // 保存默认业务公司名称 // commit("business_company", business_company); // // 保存默认业务公司编号 // commit("business_companyNo", business_companyNo); // 关键字段设置 // commit("private_field", private_field === "" ? [] : private_field); // const { pcode, pdata, pmsg } = await getRoleProcess(roleid); // if (pcode >= 100 && pcode <= 104) { // resolve("noToken"); // } else if (pcode !== 0) { // resolve({ code: pcode, data: {}, massage: pmsg }); // } else { // 保存默认业务公司编号 // commit("roleProcess", pdata ?? []); const { mcode, mdata, mmsg } = await getRoleMenuList(); if (mcode >= 100 && mcode <= 104) { resolve("noToken"); } else if (mcode !== 0) { resolve({ code: mcodd, data: {}, massage: mmsg }); } else { const { arrag, isok, btnList } = mdata; // 生成页面权限 commit("navListFn", arrag); // 生成按钮权限 commit("btnListFn", btnList); // 生成路由 initRouter(arrag, that); resolve(isok ? "success-dataV" : "success"); } // } } } }); }, // user logout logout({ commit, state, dispatch }) { return new Promise((resolve, reject) => { commit("SET_TOKEN", ""); commit("SET_ROLES", []); removeToken(); commit("SET_MENU", ""); commit("SET_HAS", ""); removeMenu(); removeBtn(); remove_business_company(); commit("business_company", ""); commit("business_companyNo", ""); remove_business_companyNo(); remove_private_field(); commit("private_field", []); remove_action_data(); commit("action_data", []); // removeMainList() // reset visited views and cached views // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485 dispatch("tagsView/delAllViews", null, { root: true }); resolve(); }); }, // remove token resetToken({ commit }) { return new Promise((resolve) => { commit("SET_TOKEN", ""); commit("SET_ROLES", []); removeToken(); resolve(); }); }, }; async function getUserInfo() { const { code, data, meaasge } = await usergetinfo({}); return { ucode: code, udata: data, umsg: meaasge, }; } async function initalUserInfo() { const { code, data } = await usergetinfo({}); if (code === 0) { store.commit("user/SET_NAME", data.nickname); } } async function getRoleProcess(roleid) { const { code, data, meaasge } = await roleProcessInfo({ roleid }); let list = data; list.map((si) => { si.action = []; if (si.child && si.child.length > 0) { si.child.map((sii) => { si.action.push(sii.order_process + ""); return sii; }); } return si; }); return { pcode: code, pdata: list, pmsg: meaasge, }; } async function getRoleMenuList() { const { code, data, meaasge } = await menuList({}); let arrag = []; let btnList = []; let list = []; let isok = false; if (code === 0) { list = data ?? []; list = list.filter((item) => item.child && item.child.length > 0); list.forEach((v1) => { const { menu_route, child } = v1; if (menu_route === "bigScreen" && child.length) { isok = true; } let pItem = { name: v1.menu_route, path: `/${v1.menu_route}`, meta: { title: v1.menu_name, icon: v1.menu_img, }, children: [], }; v1.child.forEach((v2) => { let item = { path: v2.menu_route, name: v2.menu_route, hidden: parseInt(v2.is_display + "") === 0, meta: { title: v2.menu_name, icon: v2.menu_img, }, url: v2.menu_url, }; let model = { menu_route: v2.menu_route, action: v2.action, }; btnList.push(model); pItem.children.push(item); }); arrag.push(pItem); }); } return { mcode: code, mdata: { isok, arrag, btnList, }, mmsg: meaasge, }; } function initRouter(arr) { const IndexRoute = [ // 个人信息 { path: "/person", component: () => import("@/layout/index"), redirect: "/person/my-message", hidden: true, alwaysShow: true, meta: { title: "个人中心", icon: "user", }, children: [ { path: "my-message", component: () => import("@/views/person-infor/my-message"), name: "MyMessage", alwaysShow: true, meta: { title: "我的信息", noCache: true, breadcrumb: true }, }, { path: "change-phone", component: () => import("@/views/person-infor/change-phone"), name: "ChangePhone", alwaysShow: true, meta: { title: "更换手机号", noCache: true, breadcrumb: true }, }, { path: "change-password", component: () => import("@/views/person-infor/change-password"), name: "ChangePassword", alwaysShow: true, meta: { title: "修改密码", noCache: true, breadcrumb: true }, }, ], }, //欢迎页 { path: "/welcome", component: () => import("@/layout/index"), redirect: "/welcome/dashboard", children: [ { path: "dashboard", component: () => import("@/views/dashboard/index"), name: "Dashboard", meta: { title: "首页", icon: "dashboard", affix: true }, }, ], }, ]; arr.map((v1) => { v1.component = (resolve) => require([`@/layout/index.vue`], resolve); if (v1.children && v1.children.length > 0) { v1.redirect = `/${v1.name}/${v1.children[0].name}`; v1.children.map((v2) => { v2.component = (resolve) => require([`@/views/${v2.url}.vue`], resolve); return v2; }); } return v1; }); IndexRoute.push(...arr); IndexRoute.push({ path: "404", component: () => import("@/views/error-page/404"), hidden: false, noCache: true, }); IndexRoute.push({ path: "*", redirect: "/404", }); window.vm.$router.addRoutes(IndexRoute); } initalUserInfo(); export default { namespaced: true, state, mutations, actions, };