store.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  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. Vue.use(Vuex);
  12. const store = new Vuex.Store({
  13. state: {
  14. token: "",
  15. collapse: false,//控制面板是否显示
  16. tagsList: [],//标签页所显示的内容
  17. // 新弹窗
  18. modalParams: {},
  19. // 权限列表
  20. permissionList: [],
  21. //菜单列表
  22. menuList:[],
  23. thisMenuList:[],
  24. // 当前登录用户信息
  25. cruUserInfo:{},
  26. //查询是否有未读消息
  27. messageNumber:false,
  28. //最近消息列表集合
  29. messageList:[],
  30. //记录消息的状态
  31. messageStatus:2,
  32. // 弹窗集合
  33. popups: '',
  34. theme:'light',//控制界面的颜色,
  35. // 查询的点的坐标
  36. searchPointInfo:{},
  37. },
  38. getters: {
  39. getTheme(state) {
  40. return state.theme
  41. },
  42. getPopups(state) {
  43. return state.popups || [];
  44. },
  45. getToken(state) {
  46. return state.token;
  47. },
  48. getSearchPointInfo(state){
  49. return state.searchPointInfo;
  50. },
  51. getCollapse(state) {
  52. return state.collapse;
  53. },
  54. getTagsList(state) {
  55. return state.tagsList;
  56. },
  57. getModalParams(state) {
  58. return state.modalParams;
  59. },
  60. // 判断按钮是否有权限
  61. hasPermission: (state) => (role) => {
  62. if (state.permissionList.size) {
  63. return state.permissionList.has(role)
  64. } else {
  65. return false
  66. }
  67. },
  68. //获取菜单列表
  69. getMenuList(state){
  70. return state.menuList;
  71. },
  72. getThisMenuList(state){
  73. return state.thisMenuList;
  74. },
  75. // 获取当前登录用户信息
  76. getCruUserInfo(state){
  77. return state.cruUserInfo;
  78. }
  79. },
  80. mutations: {
  81. setSearchPointInfo(state,data){
  82. state.searchPointInfo = data;
  83. },
  84. setPopups(state, data) {
  85. state.popups = data;
  86. },
  87. setToken(state, data) {
  88. state.token = data;
  89. },
  90. setCollapse(state, data) {
  91. state.collapse = data;
  92. },
  93. setTagList(state, data) {
  94. state.tagsList = data;
  95. },
  96. setModalParams(state, data) {
  97. state.modalParams = data;
  98. },
  99. setPermissionList(state, data) {
  100. state.permissionList = data;
  101. },
  102. setMenuList(state,data){
  103. state.menuList = data;
  104. },
  105. setThisMenuList(state,data){
  106. state.thisMenuList = data;
  107. },
  108. setcCruUserInfo(state,data){
  109. state.cruUserInfo = data;
  110. },
  111. setmessageNumber(state,data){
  112. state.messageNumber=data;
  113. },
  114. setmessageList(state,data){
  115. state.messageList=data;
  116. },
  117. setmessageStatus(state,data){
  118. state.messageStatus=data;
  119. },
  120. setTheme(state, data) {
  121. state.theme = data
  122. },
  123. },
  124. actions: {
  125. tags(ctx, data) {
  126. ctx.commit("setTagList", data)
  127. },
  128. /**
  129. * @description: 打开弹窗
  130. * @param {type} ctx vuex的上下文
  131. * @param {object} args {
  132. * id: 唯一标识,必须
  133. * url: 打开的组件url地址,必须
  134. * params: 传递给弹出组件的参数,
  135. * notip: 是否显示*为填项必内容,为true时不显示
  136. * backgroud: 是否强制显示底部透明背景色,默认第二个弹出层时不显示透明底色,为true时一定显示
  137. * full: 是否为全屏展示,true为全屏
  138. * }
  139. * @return {null} null:
  140. */
  141. addPopup(ctx, args) {
  142. const params = {...args};
  143. const list = ctx.getters.getPopups;
  144. params.id = 'modal_' + (+new Date())
  145. import(/* webpackChunkName: "[request]" */ `@/views${params.url}`).then((res) => {
  146. params.component = res.default;
  147. params.show = true;
  148. list.push(params);
  149. ctx.commit('setPopups', list);
  150. // ctx.commit('setalertModalParams', params);
  151. }).catch((err) => {
  152. if (err.message.indexOf("Loading chunk") == 0) {
  153. ELEMENT.Message.info("版本已更新,请刷新页面重试");
  154. } else {
  155. ELEMENT.Message.info(err.message);
  156. }
  157. });
  158. },
  159. delPopup(ctx, id) {
  160. // let id=id;
  161. // ctx.commit('setalertModalParams', { show: false});
  162. const list = ctx.getters.getPopups;
  163. list.every((item, index) => {
  164. if (item.id === id) {
  165. list.splice(index, 1);
  166. ctx.commit('setPopups', list);
  167. // 解决弹窗关闭,滚动条没有关闭的情况
  168. // const $bar = document.querySelector('.dmp-scroll-bar')
  169. // if ($bar) {
  170. // document.body.removeChild(document.querySelector('.dmp-scroll-bar'))
  171. // }
  172. return false;
  173. }
  174. return true
  175. });
  176. },
  177. collapse(ctx, data) {
  178. ctx.commit("setCollapse", data);
  179. },
  180. openModal(ctx, args) {
  181. const params = {...args};
  182. params.id = 'modal_' + (+new Date())
  183. import(/* webpackChunkName: "[request]" */ `@/views${params.url}`).then((res) => {
  184. params.component = res.default;
  185. params.show = true;
  186. ctx.commit('setModalParams', params);
  187. }).catch(err => {
  188. ELEMENT.Message.error(`${err.message},请刷新页面重试`);
  189. });
  190. },
  191. closeModal(ctx) {
  192. ctx.commit('setModalParams', { show: false});
  193. }
  194. }
  195. })
  196. export default store;