You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

315 lines
10 KiB

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