import { setToken, removeToken, removeRememberMe, setTokenId } from '@/utils/auth' import { filterAsyncRouter } from '@/store/modules/permission' import { default as api } from '../../utils/api' import global from '../../utils/common.js' import store from '../../store' import router, { resetRouter } from '../../router' import Vue from 'vue' // import { getOwnList, getRenwuListByPath } from '@/api/renwu' // import { getNeedRecordList } from '@/api/ysjl' const user = { state: { nickname: '', username: '', userId: '', avatar: 'https://s.gravatar.com/avatar/04e13ae1e36866dbc9f5882663db641d?s=80', clientType: '', roles: [], departmentId: '', menus: [], permissions: [], allUser: [], allCategory: [], messageCount: [], prodName: process.env.NODE_ENV === 'development' ? '' : '/sdmaFront' // 开发环境下为空,生产环境下请设置为tomcat项目名称或者nginx代理项目名称。(例如:/dist) }, mutations: { SET_USER: (state, userInfo) => { state.nickname = userInfo.userVO.nickname state.username = userInfo.userVO.username state.userId = userInfo.userVO.id state.clientType = userInfo.userVO.clientType state.roles = userInfo.roleList state.departmentId = userInfo.userVO.departmentId state.menus = userInfo.menuList state.permissions = userInfo.permissionList state.allUser = userInfo.allUser state.allCategory = userInfo.allCategory state.messageCount = userInfo.messageCount state.avatar = process.env.VUE_APP_IMG_URL + 'HeadPortrait/' + userInfo.userVO.nickname + '.jpg' }, RESET_USER: (state) => { state.imgUrl = '' state.nickname = '' state.username = '' state.userId = '' state.roles = [] state.departmentId = '' state.menus = [] state.permissions = [] localStorage.clear() } }, actions: { // 登录 Login({ commit, state }, loginForm) { return new Promise((resolve, reject) => { api({ url: 'user/login', method: 'post', data: loginForm }).then(data => { localStorage.setItem('token', data.loginToken) setToken() global.it = data.id setTokenId(data.id) if (loginForm.password.length < 8 || loginForm.password === 'Ma123456') { Vue.prototype.$prompt('请输入新密码(未修改密码,不允许登录)', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', inputPattern: /.{8,}/, inputErrorMessage: '新密码最低长度8位!' }).then(({ value }) => { api({ url: '/user/changePwd', method: 'post', data: { username: loginForm.username, password: loginForm.password, newPassword: value, type: 'login' } }).then(() => reject('请使用修改后的新密码进行登录系统!')) .catch(_ => reject('修改密码失败!')) }).catch(_ => reject('未修改密码,不允许登录!')) } else { resolve(data) } }).catch(err => { reject(err) // 删除本地Cookies,防止出现登录死循环 removeRememberMe() }) }) }, // 获取用户信息 GetInfo({ commit }) { return new Promise((resolve, reject) => { api({ url: '/user/getInfo', method: 'get' }).then(data => { // 获取全部用户 api({ url: '/user/all', method: 'get' }).then(data => { user.state.allUser = data }).catch(error => { reject(error) }) // 获取全部设备种类 api({ url: '/category/all', method: 'get' }).then(data => { user.state.allCategory = data }).catch(error => { reject(error) }) // 储存用户信息 commit('SET_USER', data) // cookie保存登录状态,仅靠vuex保存的话,页面刷新就会丢失登录状态 setToken() global.it = data.userVO.id // 查询相关待办条数 /* const messagePush = [] const departmentId = user.state.departmentId getOwnList({ // 我的任务 pageNum: 1, // 页码 pageRow: 20, // 每页条数 searchYsjl: {} }).then(task => { messagePush.push({ key: 'MyTask', value: task.totalCount }) }) getRenwuListByPath({ // 待分配任务 searchRenwu: { shiyongdanwei: undefined, shebeizhongleidaima: '', bjState: '2' } }, 'list').then(task => { messagePush.push({ key: 'AllotList', value: task.totalCount }, { key: 'allot', value: task.totalCount > 0 ? 1 : 0 }) }) getRenwuListByPath({ // 退回任务 pageNum: 1, // 页码 pageRow: 20, // 每页条数 searchRw: {} }, 'getTuihuiList').then(task => { messagePush.push({ key: 'BackRenwu', value: task.totalCount }) }) getNeedRecordList({ // 待办记录 pageNum: 1, // 页码 pageRow: 20, // 每页条数 searchYsjl: { cjState: 'ysjl' }, hasChild: true }).then((ysjl) => { messagePush.push({ key: 'TODOYsjl', value: ysjl.totalCount }, { key: 'ysjl', value: ysjl.totalCount > 0 ? 1 : 0 }) }) getNeedRecordList({ // 检验报告列表 pageNum: 1, // 页码 pageRow: 20, // 每页条数 searchYsjl: { flowStatus: departmentId === 75 ? 1 : null }, hasChild: true, hasFinish: false }).then((ysjl) => { messagePush.push({ key: 'TODOReport', value: ysjl.totalCount }, { key: 'bggl', value: ysjl.totalCount > 0 ? 1 : 0 }) }) getNeedRecordList({ // 待审报告列表 pageNum: 1, // 页码 pageRow: 20, // 每页条数 hasTrial: true, hasChild: true, hasFinish: false }).then((ysjl) => { messagePush.push({ key: 'dsbg-list', value: ysjl.totalCount }) }) if (departmentId === 75) { // 锅炉科室定检 getNeedRecordList({ // 未打印 pageNum: 1, // 页码 pageRow: 20, // 每页条数 searchYsjl: { departmentId: departmentId, printState: 0 }, hasChild: false, hasFinish: true, flowstatus: undefined }).then((data) => { messagePush.push({ key: 'PrintReportGlKsWdy', value: data.totalCount }) }) getNeedRecordList({ // 未发放 pageNum: 1, // 页码 pageRow: 20, // 每页条数 hasChild: false, hasFinish: true, flowstatus: undefined, searchYsjl: { shebeizhongleidaima: '1000', printState: 1, fafangState: 0 } }).then((data) => { messagePush.push({ key: 'GrantReportGlCreate', value: data.totalCount }, { key: 'grant', value: data.totalCount > 0 ? 1 : 0 }) }) getNeedRecordList({ // 已发放 pageNum: 1, // 页码 pageRow: 20, // 每页条数 hasChild: false, hasFinish: true, flowstatus: undefined, searchYsjl: { shebeizhongleidaima: '1000', printState: 1, fafangState: 1 } }).then((data) => { messagePush.push({ key: 'GrantReportGlYiFafang', value: data.totalCount }) }) } user.state.messageCount = messagePush*/ // 赋值要放在 set_user 后面,否则被冲刷掉了。 // 查询路由 const asyncRouter = filterAsyncRouter(data.menuList) asyncRouter.push({ path: '*', redirect: '/404', hidden: true }) store.dispatch('GenerateRoutes', asyncRouter).then(() => { // 生成该用户的新路由json操作完毕之后,调用vue-router的动态新增路由方法,将新路由添加 router.addRoutes(asyncRouter) // 动态添加可访问路由表 }) resolve(data) }).catch(error => { reject(error) // 删除本地Cookies,防止出现登录死循环 removeRememberMe() removeToken() router.push('/login') }) }) }, // 登出 LogOut({ commit }) { return new Promise((resolve) => { api({ url: 'user/logout', method: 'post' }).then(data => { commit('RESET_USER') removeToken() removeRememberMe() resolve(data) }).catch(() => { commit('RESET_USER') removeToken() removeRememberMe() resetRouter() }) }) }, // 前端 登出 FedLogOut({ commit }) { return new Promise(resolve => { commit('SET_TOKEN', '') removeToken() localStorage.clear() resolve() }) } } } export default user