/* * @Author: zouwenying * @Date: 2020-10-22 14:40:01 * @LastEditTime: 2020-11-20 10:02:36 * @LastEditors: Please set LastEditors * @Description: In User Settings Edit * @FilePath: \vue-manage-system-master\src\store\store.js */ import Vue from 'vue'; import Vuex from 'vuex'; import http from '@utils/http.js'; Vue.use(Vuex); const store = new Vuex.Store({ state: { token: '', collapse: false, //控制面板是否显示 tagsList: [], //标签页所显示的内容 // 新弹窗 modalParams: {}, // 权限列表 permissionList: [], //菜单列表 menuList: [], // 当前登录用户信息 cruUserInfo: {}, thisDetai: {}, //查询是否有未读消息 messageNumber: false, //最近消息列表集合 messageList: [], //记录消息的状态 messageStatus: 2, // 弹窗集合 popups: '', theme: 'light', //控制界面的颜色, // 查询的点的坐标 searchPointInfo: {}, //所有社区下拉 areaSelect: [], //所有民族 nationArray: [], //所有籍贯 nativeArray: [], //公司部门 companyArray: [], departmentArray: [], communityArray: [], // 当前缩放比 scale: document.body.clientWidth / 1920, dragItemData: {} }, getters: { getTheme(state) { return state.theme; }, getPopups(state) { return state.popups || []; }, getToken(state) { return state.token; }, getSearchPointInfo(state) { return state.searchPointInfo; }, getCollapse(state) { return state.collapse; }, getTagsList(state) { return state.tagsList; }, getModalParams(state) { return state.modalParams; }, // 判断按钮是否有权限 hasPermission: (state) => (role) => { if (state.permissionList.size) { return state.permissionList.has(role); } else { return false; } }, //获取菜单列表 getMenuList(state) { return state.menuList; }, // 获取当前登录用户信息 getCruUserInfo(state) { return state.cruUserInfo; }, getThisDetai(state) { return state.thisDetai; }, getAreaSelect(state) { return state.areaSelect; }, getNationArray(state) { return state.nationArray; }, getNativeArray(state) { return state.nativeArray; }, getCompanyArray(state) { return state.companyArray; }, getDepartmentArray(state) { return state.departmentArray; }, getCommunityArray(state) { return state.communityArray; }, getScale(state) { return state.scale; }, getDragItem(state, data) { return state.dragItemData; }, }, mutations: { setSearchPointInfo(state, data) { state.searchPointInfo = data; }, setPopups(state, data) { state.popups = data; }, setToken(state, data) { state.token = data; }, setCollapse(state, data) { state.collapse = data; }, setTagList(state, data) { state.tagsList = data; }, setModalParams(state, data) { state.modalParams = data; }, setPermissionList(state, data) { state.permissionList = data; }, setMenuList(state, data) { state.menuList = data; }, setcCruUserInfo(state, data) { state.cruUserInfo = data; }, setThisDetai(state, data) { state.thisDetai = data; }, setmessageNumber(state, data) { state.messageNumber = data; }, setmessageList(state, data) { state.messageList = data; }, setmessageStatus(state, data) { state.messageStatus = data; }, setTheme(state, data) { state.theme = data; }, setAreaSelect(state, data) { state.areaSelect = data; }, setNationArray(state, data) { state.nationArray = data; }, setNativeArray(state, data) { state.nativeArray = data; }, setCompanyArray(state, data) { state.companyArray = data; }, setDepartmentArray(state, data) { state.departmentArray = data; }, setCommunityArray(state, data) { state.communityArray = data; }, setScale(state, data) { state.scale = data; }, setDragItem(state, data) { state.dragItemData = data; }, }, actions: { tags(ctx, data) { ctx.commit('setTagList', data); }, /** * @description: 打开弹窗 * @param {type} ctx vuex的上下文 * @param {object} args { * id: 唯一标识,必须 * url: 打开的组件url地址,必须 * params: 传递给弹出组件的参数, * notip: 是否显示*为填项必内容,为true时不显示 * backgroud: 是否强制显示底部透明背景色,默认第二个弹出层时不显示透明底色,为true时一定显示 * full: 是否为全屏展示,true为全屏 * } * @return {null} null: */ addPopup(ctx, args) { const params = { ...args }; const list = ctx.getters.getPopups; params.id = 'modal_' + +new Date(); import(/* webpackChunkName: "[request]" */ `@/views${params.url}`) .then((res) => { params.component = res.default; params.show = true; list.push(params); ctx.commit('setPopups', list); // ctx.commit('setalertModalParams', params); }) .catch((err) => { if (err.message.indexOf('Loading chunk') == 0) { ELEMENT.Message.info('版本已更新,请刷新页面重试'); } else { ELEMENT.Message.info(err.message); } }); }, delPopup(ctx, id) { // let id=id; // ctx.commit('setalertModalParams', { show: false}); const list = ctx.getters.getPopups; list.every((item, index) => { if (item.id === id) { list.splice(index, 1); ctx.commit('setPopups', list); // 解决弹窗关闭,滚动条没有关闭的情况 // const $bar = document.querySelector('.dmp-scroll-bar') // if ($bar) { // document.body.removeChild(document.querySelector('.dmp-scroll-bar')) // } return false; } return true; }); }, collapse(ctx, data) { ctx.commit('setCollapse', data); }, openModal(ctx, args) { const params = { ...args }; params.id = 'modal_' + +new Date(); import(/* webpackChunkName: "[request]" */ `@/views${params.url}`) .then((res) => { params.component = res.default; params.show = true; ctx.commit('setModalParams', params); }) .catch((err) => { ELEMENT.Message.error(`${err.message},请刷新页面重试`); }); }, closeModal(ctx) { ctx.commit('setModalParams', { show: false }); }, SET_MENU_LIST(ctx) { let value = ctx.getters['getMenuList'] || []; if (!value.length) { http.get('/sc-user-center/user/findUserMenu', { appId: '1002' }).then(({ status, data, msg }) => { if (0 === status) { ctx.commit('setMenuList', data[0].children); ctx.commit('setThisDetai', data[0]); window.localStorage.setItem('SC_listMuen', JSON.stringify(data[0].children)) window.sessionStorage.setItem('setThisDetai', JSON.stringify(data[0])) } else { this.$message.error(msg) } }); } } } }); export default store;