user.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  1. import {
  2. login,
  3. logout,
  4. userinfo,
  5. menuList,
  6. dingdingdetail,
  7. usergetinfo,
  8. roleProcessInfo,
  9. requsetCompanyList
  10. } from "@/apis/user";
  11. import {
  12. getToken,
  13. setToken,
  14. removeToken,
  15. getMenu,
  16. setMenu,
  17. removeMenu,
  18. getBtn,
  19. setBtn,
  20. removeBtn,
  21. get_business_company,
  22. set_business_company,
  23. remove_business_company,
  24. get_business_companyNo,
  25. set_business_companyNo,
  26. remove_business_companyNo,
  27. get_private_field,
  28. set_private_field,
  29. remove_private_field,
  30. get_action_data,
  31. set_action_data,
  32. remove_action_data,
  33. get_role_level,
  34. set_role_level,
  35. remove_role_level,
  36. getUserCompany,
  37. } from "@/utils/auth";
  38. import store from "..";
  39. const state = {
  40. token: getToken(),
  41. name: "",
  42. avatar: require("@/assets/img/avatar.gif"),
  43. introduction: "",
  44. roles: ["admin"],
  45. btnList: getBtn(),
  46. navList: getMenu(),
  47. role_level:get_role_level() || "1",
  48. business_company: get_business_company() || "",
  49. business_companyNo: get_business_companyNo() || "",
  50. private_field: get_private_field() || [],
  51. roleProcess: get_action_data() || [],
  52. currentCompany: getUserCompany()
  53. };
  54. const mutations = {
  55. SET_TOKEN: (state, token) => {
  56. state.token = token;
  57. },
  58. SET_MENU: (state, menu) => {
  59. state.menu = menu;
  60. },
  61. SET_HAS: (state, has) => {
  62. state.has = has;
  63. },
  64. SET_INTRODUCTION: (state, introduction) => {
  65. state.introduction = introduction;
  66. },
  67. SET_NAME: (state, name) => {
  68. state.name = name;
  69. },
  70. SET_AVATAR: (state, avatar) => {
  71. state.avatar = avatar;
  72. },
  73. SET_ROLES: (state, roles) => {
  74. state.roles = roles;
  75. },
  76. navListFn(state, val) {
  77. if (!val) {
  78. val = [];
  79. }
  80. state.navList = val;
  81. setMenu(val);
  82. },
  83. btnListFn(state, val) {
  84. if (!val) {
  85. val = [];
  86. }
  87. state.btnList = val;
  88. setBtn(val);
  89. },
  90. business_company(state, val) {
  91. state.business_company = val;
  92. set_business_company(val);
  93. },
  94. business_companyNo(state, val) {
  95. state.business_companyNo = val;
  96. set_business_companyNo(val);
  97. },
  98. roleProcess(state, val) {
  99. state.roleProcess = val;
  100. set_action_data(val);
  101. },
  102. private_field(state, val) {
  103. state.private_field = val;
  104. set_private_field(val);
  105. },
  106. setCurrentCompany(state,val){
  107. state.currentCompany = val;
  108. }
  109. };
  110. const actions = {
  111. // user login
  112. login({ commit }, userInfo) {
  113. const { username, password } = userInfo;
  114. return new Promise((resolve, reject) => {
  115. login({ username: username.trim(), password: password })
  116. .then((response) => {
  117. const {code, data } = response;
  118. if (code === 0) {
  119. const {token,nickname}=data
  120. commit("SET_TOKEN", token);
  121. commit("SET_NAME", nickname);
  122. setToken(token);
  123. }
  124. resolve(response);
  125. })
  126. .catch((error) => {
  127. reject(error);
  128. });
  129. });
  130. },
  131. dingUserInfor({ commit }, code) {
  132. return new Promise(async (resolve, reject) => {
  133. dingdingdetail(code)
  134. .then((response) => {
  135. const { data } = response;
  136. if (response.code === 0) {
  137. commit("SET_TOKEN", data.token);
  138. setToken(data.token);
  139. resolve("success");
  140. } else {
  141. resolve("error");
  142. }
  143. })
  144. .catch((error) => {
  145. reject(error);
  146. });
  147. });
  148. },
  149. async getMenuList({ commit, that }) {
  150. return new Promise(async (resolve, reject) => {
  151. if (!getToken()) {
  152. resolve("noToken");
  153. } else {
  154. const { ucode, udata, umsg } = await getUserInfo();
  155. if (ucode >= 100 && ucode <= 104) {
  156. resolve("noToken");
  157. } else if (ucode !== 0) {
  158. resolve({ code: ucode, data: udata, massage: umsg });
  159. } else {
  160. // // 保存默认业务公司名称
  161. // commit("business_company", business_company);
  162. // // 保存默认业务公司编号
  163. // commit("business_companyNo", business_companyNo);
  164. // 关键字段设置
  165. // commit("private_field", private_field === "" ? [] : private_field);
  166. // const { pcode, pdata, pmsg } = await getRoleProcess(roleid);
  167. // if (pcode >= 100 && pcode <= 104) {
  168. // resolve("noToken");
  169. // } else if (pcode !== 0) {
  170. // resolve({ code: pcode, data: {}, massage: pmsg });
  171. // } else {
  172. // 保存默认业务公司编号
  173. // commit("roleProcess", pdata ?? []);
  174. const { mcode, mdata, mmsg } = await getRoleMenuList();
  175. if (mcode >= 100 && mcode <= 104) {
  176. resolve("noToken");
  177. } else if (mcode !== 0) {
  178. resolve({ code: mcodd, data: {}, massage: mmsg });
  179. } else {
  180. const { arrag, isok, btnList } = mdata;
  181. // 生成页面权限
  182. commit("navListFn", arrag);
  183. // 生成按钮权限
  184. commit("btnListFn", btnList);
  185. // 生成路由
  186. initRouter(arrag, that);
  187. resolve(isok ? "success-dataV" : "success");
  188. }
  189. // }
  190. }
  191. }
  192. });
  193. },
  194. // user logout
  195. logout({ commit, state, dispatch }) {
  196. return new Promise((resolve, reject) => {
  197. commit("SET_TOKEN", "");
  198. commit("SET_ROLES", []);
  199. removeToken();
  200. commit("SET_MENU", "");
  201. commit("SET_HAS", "");
  202. removeMenu();
  203. removeBtn();
  204. remove_business_company();
  205. commit("business_company", "");
  206. commit("business_companyNo", "");
  207. remove_business_companyNo();
  208. remove_private_field();
  209. commit("private_field", []);
  210. remove_action_data();
  211. commit("action_data", []);
  212. // removeMainList()
  213. // reset visited views and cached views
  214. // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485
  215. dispatch("tagsView/delAllViews", null, { root: true });
  216. resolve();
  217. });
  218. },
  219. // remove token
  220. resetToken({ commit }) {
  221. return new Promise((resolve) => {
  222. commit("SET_TOKEN", "");
  223. commit("SET_ROLES", []);
  224. removeToken();
  225. resolve();
  226. });
  227. },
  228. };
  229. async function getUserInfo() {
  230. const { code, data, meaasge } = await usergetinfo({});
  231. return {
  232. ucode: code,
  233. udata: data,
  234. umsg: meaasge,
  235. };
  236. }
  237. async function initalUserInfo() {
  238. const { code, data } = await usergetinfo({});
  239. if (code === 0) {
  240. store.commit("user/SET_NAME", data.nickname);
  241. }
  242. }
  243. async function getRoleProcess(roleid) {
  244. const { code, data, meaasge } = await roleProcessInfo({ roleid });
  245. let list = data;
  246. list.map((si) => {
  247. si.action = [];
  248. if (si.child && si.child.length > 0) {
  249. si.child.map((sii) => {
  250. si.action.push(sii.order_process + "");
  251. return sii;
  252. });
  253. }
  254. return si;
  255. });
  256. return {
  257. pcode: code,
  258. pdata: list,
  259. pmsg: meaasge,
  260. };
  261. }
  262. async function getRoleMenuList() {
  263. const { code, data, meaasge } = await menuList({});
  264. let arrag = [];
  265. let btnList = [];
  266. let list = [];
  267. let isok = false;
  268. if (code === 0) {
  269. list = data ?? [];
  270. list = list.filter((item) => item.child && item.child.length > 0);
  271. list.forEach((v1) => {
  272. const { menu_route, child } = v1;
  273. if (menu_route === "bigScreen" && child.length) {
  274. isok = true;
  275. }
  276. let pItem = {
  277. name: v1.menu_route,
  278. path: `/${v1.menu_route}`,
  279. meta: {
  280. title: v1.menu_name,
  281. icon: v1.menu_img,
  282. },
  283. children: [],
  284. };
  285. v1.child.forEach((v2) => {
  286. let item = {
  287. path: v2.menu_route,
  288. name: v2.menu_route,
  289. hidden: parseInt(v2.is_display + "") === 0,
  290. meta: {
  291. title: v2.menu_name,
  292. icon: v2.menu_img,
  293. },
  294. url: v2.menu_url,
  295. };
  296. let model = {
  297. menu_route: v2.menu_route,
  298. action: v2.action,
  299. };
  300. btnList.push(model);
  301. pItem.children.push(item);
  302. });
  303. arrag.push(pItem);
  304. });
  305. }
  306. return {
  307. mcode: code,
  308. mdata: {
  309. isok,
  310. arrag,
  311. btnList,
  312. },
  313. mmsg: meaasge,
  314. };
  315. }
  316. function initRouter(arr) {
  317. const IndexRoute = [
  318. // 个人信息
  319. {
  320. path: "/person",
  321. component: () => import("@/layout/index"),
  322. redirect: "/person/my-message",
  323. hidden: true,
  324. alwaysShow: true,
  325. meta: {
  326. title: "个人中心",
  327. icon: "user",
  328. },
  329. children: [
  330. {
  331. path: "my-message",
  332. component: () => import("@/views/person-infor/my-message"),
  333. name: "MyMessage",
  334. alwaysShow: true,
  335. meta: { title: "我的信息", noCache: true, breadcrumb: true },
  336. },
  337. {
  338. path: "change-phone",
  339. component: () => import("@/views/person-infor/change-phone"),
  340. name: "ChangePhone",
  341. alwaysShow: true,
  342. meta: { title: "更换手机号", noCache: true, breadcrumb: true },
  343. },
  344. {
  345. path: "change-password",
  346. component: () => import("@/views/person-infor/change-password"),
  347. name: "ChangePassword",
  348. alwaysShow: true,
  349. meta: { title: "修改密码", noCache: true, breadcrumb: true },
  350. },
  351. ],
  352. },
  353. //欢迎页
  354. {
  355. path: "/welcome",
  356. component: () => import("@/layout/index"),
  357. redirect: "/welcome/dashboard",
  358. children: [
  359. {
  360. path: "dashboard",
  361. component: () => import("@/views/dashboard/index"),
  362. name: "Dashboard",
  363. meta: { title: "首页", icon: "dashboard", affix: true },
  364. },
  365. ],
  366. },
  367. ];
  368. arr.map((v1) => {
  369. v1.component = (resolve) => require([`@/layout/index.vue`], resolve);
  370. if (v1.children && v1.children.length > 0) {
  371. v1.redirect = `/${v1.name}/${v1.children[0].name}`;
  372. v1.children.map((v2) => {
  373. v2.component = (resolve) => require([`@/views/${v2.url}.vue`], resolve);
  374. return v2;
  375. });
  376. }
  377. return v1;
  378. });
  379. IndexRoute.push(...arr);
  380. IndexRoute.push({
  381. path: "404",
  382. component: () => import("@/views/error-page/404"),
  383. hidden: false,
  384. noCache: true,
  385. });
  386. IndexRoute.push({
  387. path: "*",
  388. redirect: "/404",
  389. });
  390. window.vm.$router.addRoutes(IndexRoute);
  391. }
  392. initalUserInfo();
  393. export default {
  394. namespaced: true,
  395. state,
  396. mutations,
  397. actions,
  398. };