mirror of https://github.com/veops/cmdb.git
221 lines
6.2 KiB
JavaScript
221 lines
6.2 KiB
JavaScript
import Vue from 'vue'
|
|
import { login, getInfo, logout } from '@/api/login'
|
|
import { ACCESS_TOKEN } from '@/store/global/mutation-types'
|
|
import { welcome } from '@/utils/util'
|
|
import { getAllUsers } from '../../api/login'
|
|
import { searchPermResourceByRoleId } from '@/modules/acl/api/permission'
|
|
import { getEmployeeByUid, getEmployeeList } from '@/api/employee'
|
|
import { getAllDepartmentList } from '@/api/company'
|
|
import { getAuthDataEnable } from '@/api/auth'
|
|
|
|
const user = {
|
|
state: {
|
|
token: '',
|
|
name: '',
|
|
welcome: '',
|
|
avatar: '',
|
|
uid: 0,
|
|
roles: [],
|
|
info: {},
|
|
authed: false,
|
|
allUsers: [],
|
|
allEmployees: [],
|
|
allDepartments: [],
|
|
detailPermissions: {
|
|
'backend': [
|
|
{
|
|
'name': '公司信息',
|
|
'permissions': ['read']
|
|
},
|
|
{
|
|
'name': '公司架构',
|
|
'permissions': ['read']
|
|
},
|
|
{
|
|
'name': '用户分组',
|
|
'permissions': ['read']
|
|
}
|
|
]
|
|
},
|
|
username: '',
|
|
mobile: '',
|
|
department_id: undefined,
|
|
employee_id: undefined,
|
|
email: '',
|
|
nickname: '',
|
|
sex: '',
|
|
position_name: '',
|
|
direct_supervisor_id: null,
|
|
auth_enable: {}
|
|
},
|
|
|
|
mutations: {
|
|
SET_TOKEN: (state, token) => {
|
|
state.token = token
|
|
},
|
|
|
|
SET_USER_INFO: (state, { name, welcome, avatar, roles, info, uid, username, mobile, department_id, employee_id, email, nickname, sex, position_name, direct_supervisor_id, annual_leave }) => {
|
|
state.name = name
|
|
state.welcome = welcome
|
|
state.avatar = avatar
|
|
state.roles = roles
|
|
state.info = info
|
|
state.uid = uid
|
|
state.authed = true
|
|
state.username = username
|
|
state.mobile = mobile
|
|
state.department_id = department_id
|
|
state.employee_id = employee_id
|
|
state.email = email
|
|
state.nickname = nickname
|
|
state.sex = sex
|
|
state.position_name = position_name
|
|
state.direct_supervisor_id = direct_supervisor_id
|
|
state.annual_leave = annual_leave
|
|
},
|
|
|
|
LOAD_ALL_USERS: (state, users) => {
|
|
state.allUsers = users
|
|
},
|
|
LOAD_ALL_EMPLOYEES: (state, allEmployees) => {
|
|
state.allEmployees = allEmployees
|
|
},
|
|
LOAD_ALL_DEPARMTMENTS: (state, allDepartments) => {
|
|
state.allDepartments = allDepartments
|
|
},
|
|
SET_DETAIL_PERMISSIONS: (state, data) => {
|
|
state.detailPermissions = data.backend.length ? {
|
|
...state.detailPermissions,
|
|
...data
|
|
} : state.detailPermissions
|
|
},
|
|
SET_AUTH_ENABLE: (state, data) => {
|
|
state.auth_enable = data
|
|
}
|
|
},
|
|
|
|
actions: {
|
|
// 获取enable_list
|
|
GetAuthDataEnable({ commit }, userInfo) {
|
|
return new Promise((resolve, reject) => {
|
|
getAuthDataEnable().then(res => {
|
|
commit('SET_AUTH_ENABLE', res)
|
|
resolve()
|
|
}).catch(error => {
|
|
reject(error)
|
|
})
|
|
})
|
|
},
|
|
// 登录
|
|
Login({ commit }, { userInfo, auth_type = undefined }) {
|
|
return new Promise((resolve, reject) => {
|
|
login(userInfo, auth_type).then(response => {
|
|
Vue.ls.set(ACCESS_TOKEN, response.token, 7 * 24 * 60 * 60 * 1000)
|
|
commit('SET_TOKEN', response.token)
|
|
resolve()
|
|
}).catch(error => {
|
|
reject(error)
|
|
})
|
|
})
|
|
},
|
|
|
|
// 获取用户信息
|
|
GetInfo({ commit }) {
|
|
return new Promise((resolve, reject) => {
|
|
getInfo().then(response => {
|
|
const result = response.result
|
|
|
|
const role = result.role
|
|
role.permissions = result.role.permissions
|
|
role.permissions.map(per => {
|
|
if (per.actionEntitySet != null && per.actionEntitySet.length > 0) {
|
|
const action = per.actionEntitySet.map(action => { return action.action })
|
|
per.actionList = action
|
|
}
|
|
})
|
|
role.permissionList = role.permissions.map(permission => { return permission })
|
|
searchPermResourceByRoleId(result.rid, {
|
|
resource_type_id: '操作权限',
|
|
app_id: 'backend',
|
|
}).then(res => {
|
|
commit('SET_DETAIL_PERMISSIONS', { backend: res.resources })
|
|
resolve(response)
|
|
})
|
|
getEmployeeByUid(result.uid).then(res => {
|
|
commit('SET_USER_INFO', {
|
|
roles: result.role,
|
|
info: result,
|
|
name: result.name,
|
|
welcome: welcome(),
|
|
avatar: result.avatar,
|
|
uid: result.uid,
|
|
username: result.username,
|
|
mobile: res.mobile,
|
|
department_id: res.department_id,
|
|
employee_id: res.employee_id,
|
|
email: res.email,
|
|
nickname: res.nickname,
|
|
sex: res.sex,
|
|
position_name: res.position_name,
|
|
direct_supervisor_id: res.direct_supervisor_id,
|
|
annual_leave: res.annual_leave
|
|
})
|
|
})
|
|
}).catch(error => {
|
|
reject(error)
|
|
})
|
|
})
|
|
},
|
|
|
|
// 登出
|
|
Logout({ commit, state }) {
|
|
return new Promise((resolve) => {
|
|
commit('SET_TOKEN', '')
|
|
commit('SET_ROLES', [])
|
|
Vue.ls.remove(ACCESS_TOKEN)
|
|
|
|
logout(state.token).then(() => {
|
|
resolve()
|
|
}).catch(() => {
|
|
resolve()
|
|
}).finally(() => {
|
|
window.location.href = '/user/logout'
|
|
})
|
|
})
|
|
},
|
|
|
|
loadAllUsers({ commit, state }) {
|
|
return new Promise((resolve, reject) => {
|
|
getAllUsers({ page_size: 9999 }).then(res => {
|
|
commit('LOAD_ALL_USERS', res.users)
|
|
resolve()
|
|
}).catch(error => {
|
|
reject(error)
|
|
})
|
|
})
|
|
},
|
|
loadAllEmployees({ commit, state }) {
|
|
return new Promise((resolve, reject) => {
|
|
getEmployeeList({ page_size: 99999 }).then(res => {
|
|
commit('LOAD_ALL_EMPLOYEES', res.data_list)
|
|
resolve()
|
|
}).catch(error => {
|
|
reject(error)
|
|
})
|
|
})
|
|
},
|
|
loadAllDepartments({ commit, state }) {
|
|
return new Promise((resolve, reject) => {
|
|
getAllDepartmentList({ is_tree: 0 }).then(res => {
|
|
commit('LOAD_ALL_DEPARMTMENTS', res)
|
|
resolve()
|
|
}).catch(error => {
|
|
reject(error)
|
|
})
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
export default user
|