store.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. /*
  2. * @Author: zouwenying
  3. * @Date: 2020-10-22 14:40:01
  4. * @LastEditTime: 2020-11-20 10:02:36
  5. * @LastEditors: Please set LastEditors
  6. * @Description: In User Settings Edit
  7. * @FilePath: \vue-manage-system-master\src\store\store.js
  8. */
  9. import Vue from 'vue';
  10. import Vuex from 'vuex';
  11. import http from '@utils/http.js';
  12. Vue.use(Vuex);
  13. const store = new Vuex.Store({
  14. state: {
  15. token: '',
  16. collapse: false, //控制面板是否显示
  17. tagsList: [], //标签页所显示的内容
  18. // 新弹窗
  19. modalParams: {},
  20. // 权限列表
  21. permissionList: [],
  22. //菜单列表
  23. menuList: [],
  24. // 当前登录用户信息
  25. cruUserInfo: {},
  26. thisDetai: {},
  27. //查询是否有未读消息
  28. messageNumber: false,
  29. //最近消息列表集合
  30. messageList: [],
  31. //记录消息的状态
  32. messageStatus: 2,
  33. // 弹窗集合
  34. popups: '',
  35. theme: 'light', //控制界面的颜色,
  36. // 查询的点的坐标
  37. searchPointInfo: {},
  38. //所有社区下拉
  39. areaSelect: [],
  40. //所有民族
  41. nationArray: [],
  42. //所有籍贯
  43. nativeArray: [],
  44. //公司部门
  45. companyArray: [],
  46. departmentArray: [],
  47. communityArray: [],
  48. // 当前缩放比
  49. scale: document.body.clientWidth / 1920,
  50. dragItemData: {}
  51. },
  52. getters: {
  53. getTheme(state) {
  54. return state.theme;
  55. },
  56. getPopups(state) {
  57. return state.popups || [];
  58. },
  59. getToken(state) {
  60. return state.token;
  61. },
  62. getSearchPointInfo(state) {
  63. return state.searchPointInfo;
  64. },
  65. getCollapse(state) {
  66. return state.collapse;
  67. },
  68. getTagsList(state) {
  69. return state.tagsList;
  70. },
  71. getModalParams(state) {
  72. return state.modalParams;
  73. },
  74. // 判断按钮是否有权限
  75. hasPermission: (state) => (role) => {
  76. if (state.permissionList.size) {
  77. return state.permissionList.has(role);
  78. } else {
  79. return false;
  80. }
  81. },
  82. //获取菜单列表
  83. getMenuList(state) {
  84. return state.menuList;
  85. },
  86. // 获取当前登录用户信息
  87. getCruUserInfo(state) {
  88. return state.cruUserInfo;
  89. },
  90. getThisDetai(state) {
  91. return state.thisDetai;
  92. },
  93. getAreaSelect(state) {
  94. return state.areaSelect;
  95. },
  96. getNationArray(state) {
  97. return state.nationArray;
  98. },
  99. getNativeArray(state) {
  100. return state.nativeArray;
  101. },
  102. getCompanyArray(state) {
  103. return state.companyArray;
  104. },
  105. getDepartmentArray(state) {
  106. return state.departmentArray;
  107. },
  108. getCommunityArray(state) {
  109. return state.communityArray;
  110. },
  111. getScale(state) {
  112. return state.scale;
  113. },
  114. getDragItem(state, data) {
  115. return state.dragItemData;
  116. },
  117. },
  118. mutations: {
  119. setSearchPointInfo(state, data) {
  120. state.searchPointInfo = data;
  121. },
  122. setPopups(state, data) {
  123. state.popups = data;
  124. },
  125. setToken(state, data) {
  126. state.token = data;
  127. },
  128. setCollapse(state, data) {
  129. state.collapse = data;
  130. },
  131. setTagList(state, data) {
  132. state.tagsList = data;
  133. },
  134. setModalParams(state, data) {
  135. state.modalParams = data;
  136. },
  137. setPermissionList(state, data) {
  138. state.permissionList = data;
  139. },
  140. setMenuList(state, data) {
  141. state.menuList = data;
  142. },
  143. setcCruUserInfo(state, data) {
  144. state.cruUserInfo = data;
  145. },
  146. setThisDetai(state, data) {
  147. state.thisDetai = data;
  148. },
  149. setmessageNumber(state, data) {
  150. state.messageNumber = data;
  151. },
  152. setmessageList(state, data) {
  153. state.messageList = data;
  154. },
  155. setmessageStatus(state, data) {
  156. state.messageStatus = data;
  157. },
  158. setTheme(state, data) {
  159. state.theme = data;
  160. },
  161. setAreaSelect(state, data) {
  162. state.areaSelect = data;
  163. },
  164. setNationArray(state, data) {
  165. state.nationArray = data;
  166. },
  167. setNativeArray(state, data) {
  168. state.nativeArray = data;
  169. },
  170. setCompanyArray(state, data) {
  171. state.companyArray = data;
  172. },
  173. setDepartmentArray(state, data) {
  174. state.departmentArray = data;
  175. },
  176. setCommunityArray(state, data) {
  177. state.communityArray = data;
  178. },
  179. setScale(state, data) {
  180. state.scale = data;
  181. },
  182. setDragItem(state, data) {
  183. state.dragItemData = data;
  184. },
  185. },
  186. actions: {
  187. tags(ctx, data) {
  188. ctx.commit('setTagList', data);
  189. },
  190. /**
  191. * @description: 打开弹窗
  192. * @param {type} ctx vuex的上下文
  193. * @param {object} args {
  194. * id: 唯一标识,必须
  195. * url: 打开的组件url地址,必须
  196. * params: 传递给弹出组件的参数,
  197. * notip: 是否显示*为填项必内容,为true时不显示
  198. * backgroud: 是否强制显示底部透明背景色,默认第二个弹出层时不显示透明底色,为true时一定显示
  199. * full: 是否为全屏展示,true为全屏
  200. * }
  201. * @return {null} null:
  202. */
  203. addPopup(ctx, args) {
  204. const params = { ...args };
  205. const list = ctx.getters.getPopups;
  206. params.id = 'modal_' + +new Date();
  207. import(/* webpackChunkName: "[request]" */ `@/views${params.url}`)
  208. .then((res) => {
  209. params.component = res.default;
  210. params.show = true;
  211. list.push(params);
  212. ctx.commit('setPopups', list);
  213. // ctx.commit('setalertModalParams', params);
  214. })
  215. .catch((err) => {
  216. if (err.message.indexOf('Loading chunk') == 0) {
  217. ELEMENT.Message.info('版本已更新,请刷新页面重试');
  218. } else {
  219. ELEMENT.Message.info(err.message);
  220. }
  221. });
  222. },
  223. delPopup(ctx, id) {
  224. // let id=id;
  225. // ctx.commit('setalertModalParams', { show: false});
  226. const list = ctx.getters.getPopups;
  227. list.every((item, index) => {
  228. if (item.id === id) {
  229. list.splice(index, 1);
  230. ctx.commit('setPopups', list);
  231. // 解决弹窗关闭,滚动条没有关闭的情况
  232. // const $bar = document.querySelector('.dmp-scroll-bar')
  233. // if ($bar) {
  234. // document.body.removeChild(document.querySelector('.dmp-scroll-bar'))
  235. // }
  236. return false;
  237. }
  238. return true;
  239. });
  240. },
  241. collapse(ctx, data) {
  242. ctx.commit('setCollapse', data);
  243. },
  244. openModal(ctx, args) {
  245. const params = { ...args };
  246. params.id = 'modal_' + +new Date();
  247. import(/* webpackChunkName: "[request]" */ `@/views${params.url}`)
  248. .then((res) => {
  249. params.component = res.default;
  250. params.show = true;
  251. ctx.commit('setModalParams', params);
  252. })
  253. .catch((err) => {
  254. ELEMENT.Message.error(`${err.message},请刷新页面重试`);
  255. });
  256. },
  257. closeModal(ctx) {
  258. ctx.commit('setModalParams', { show: false });
  259. },
  260. SET_MENU_LIST(ctx) {
  261. let value = ctx.getters['getMenuList'] || [];
  262. if (!value.length) {
  263. http.get('/sc-user-center/user/findUserMenu', { appId: '1002' }).then(({ status, data, msg }) => {
  264. if (0 === status) {
  265. ctx.commit('setMenuList', data[0].children);
  266. ctx.commit('setThisDetai', data[0]);
  267. window.localStorage.setItem('SC_listMuen', JSON.stringify(data[0].children))
  268. window.sessionStorage.setItem('setThisDetai', JSON.stringify(data[0]))
  269. } else {
  270. this.$message.error(msg)
  271. }
  272. });
  273. }
  274. }
  275. }
  276. });
  277. export default store;