store.js 8.5 KB

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