Browse Source

feat:[系统管理] [角色/部门] 页面修改

luojie
memorylkf 3 weeks ago
parent
commit
9c37e82d29
10 changed files with 419 additions and 259 deletions
  1. +1
    -0
      package.json
  2. +3
    -2
      src/api/login.js
  3. +9
    -0
      src/api/system/role.js
  4. +25
    -5
      src/lang/en.js
  5. +124
    -104
      src/lang/zh.js
  6. +2
    -0
      src/main.js
  7. +96
    -60
      src/store/modules/user.js
  8. +15
    -8
      src/views/login.vue
  9. +87
    -61
      src/views/system/dept/index.vue
  10. +57
    -19
      src/views/system/role/index.vue

+ 1
- 0
package.json View File

@ -36,6 +36,7 @@
"js-beautify": "1.13.0", "js-beautify": "1.13.0",
"js-cookie": "3.0.1", "js-cookie": "3.0.1",
"jsencrypt": "3.0.0-rc.1", "jsencrypt": "3.0.0-rc.1",
"lodash": "^4.17.21",
"nprogress": "0.2.0", "nprogress": "0.2.0",
"quill": "2.0.2", "quill": "2.0.2",
"screenfull": "5.0.2", "screenfull": "5.0.2",

+ 3
- 2
src/api/login.js View File

@ -1,7 +1,8 @@
import request from '@/utils/request' import request from '@/utils/request'
// 登录方法 // 登录方法
export function login(username, password, code, uuid) {
export function login(username, password, code, uuid, force) {
debugger
return request({ return request({
url: '/auth/login', url: '/auth/login',
headers: { headers: {
@ -9,7 +10,7 @@ export function login(username, password, code, uuid) {
repeatSubmit: false repeatSubmit: false
}, },
method: 'post', method: 'post',
data: { username, password, code, uuid }
data: { username, password, code, uuid, force }
}) })
} }

+ 9
- 0
src/api/system/role.js View File

@ -117,3 +117,12 @@ export function deptTreeSelect(roleId) {
method: 'get' method: 'get'
}) })
} }
// 设置角色的用户
export function authUserSetAll(data) {
return request({
url: '/system/role/authUser/setAll',
method: 'post',
data
})
}

+ 25
- 5
src/lang/en.js View File

@ -129,10 +129,29 @@ export default {
addRole: 'addRole', addRole: 'addRole',
modifyRole: 'modifyRole', modifyRole: 'modifyRole',
notEmpty: ' can not be empty'
notEmpty: ' can not be empty',
filterPlaceholder: 'name/mobile',
unauthorized: 'unauthorized',
authorized: 'authorized'
},
dept: {
name: 'name',
type: 'type',
parent: 'parent',
add: 'add',
edit: 'edit',
detail: 'view',
delete: 'delete',
dept: 'dept',
subject: 'subject',
team: 'team',
notEmpty: ' can not be empty',
addDept: 'addDept',
modifyDept: 'modifyDept'
} }
}, },
business:{
business: {
zykgl: { zykgl: {
zjzt: { zjzt: {
rk: '入库', rk: '入库',
@ -145,7 +164,7 @@ export default {
jyzt: { jyzt: {
wjy: '未借阅', wjy: '未借阅',
djy: '待借阅', djy: '待借阅',
jyz: '借阅中',
jyz: '借阅中'
}, },
zjzt: { zjzt: {
wsd: '未锁定', wsd: '未锁定',
@ -155,19 +174,20 @@ export default {
djd: '待解档' djd: '待解档'
}, },
zcg: { zcg: {
ysbh: '钥匙编号',
jyr: '借用人', jyr: '借用人',
zt: '状态', zt: '状态',
jyz: '借用中', jyz: '借用中',
wjy: '未借用', wjy: '未借用',
plgh: '批量归还', plgh: '批量归还',
zcg: '暂存柜', zcg: '暂存柜',
ysbh: '钥匙编号',
ys1jyr: '钥匙1借用人', ys1jyr: '钥匙1借用人',
ys2jyr: '钥匙2借用人', ys2jyr: '钥匙2借用人',
glyj: '关联药剂', glyj: '关联药剂',
ffys: '发放钥匙', ffys: '发放钥匙',
gh: '归还', gh: '归还',
ysgh: '钥匙归还',
ysff: '钥匙发放',
ysgh: '钥匙归还'
} }
} }
} }

+ 124
- 104
src/lang/zh.js View File

@ -1,135 +1,154 @@
export default { export default {
system: { system: {
title: '华西海圻管理系统',
tip: '提示',
logOut: '确认注销并退出系统吗?'
title: 'HXHQ',
tip: 'prompt',
logOut: 'Are you sure to log out and exit the system?'
}, },
form: { form: {
search: '查询',
reset: '重置',
add: '新增',
export: '导出',
saveConfirm: '确定',
confirm: '确认',
cancel: '取消',
operate: '操作',
placeholderInput: '请输入',
placeholderSelect: '请选择',
confirmDelete: '确认删除?'
search: 'search',
reset: 'reset',
add: 'add',
export: 'export',
saveConfirm: 'confirm',
confirm: 'confirm',
cancel: 'cancel',
operate: 'operate',
placeholderInput: 'Please Enter',
placeholderSelect: 'Please Select',
confirmDelete: 'confirm delete?'
}, },
menu: { menu: {
PersonalCenter: '个人中心',
Workbench: '工作台',
PersonalCenter: 'Personal Center',
Workbench: 'Workbench',
TrialManage: '试验管理',
TrialManage: 'TrialManage',
FormManage: '表单管理',
NonTrialForm: '非试验表单',
DrugForm: '麻精药表单',
FormManage: 'FormManage',
NonTrialForm: 'NonTrialForm',
DrugForm: 'DrugForm',
ResourceManage: '资源库管理',
ReagentManage: '试剂管理',
SpecimenManage: '供试品管理',
DosageManage: '给药制剂管理',
DrugManage: '麻精药管理',
KeyManage: '钥匙管理',
InstrumentManage: '仪器管理',
ResourceManage: 'ResourceManage',
ReagentManage: 'ReagentManage',
SpecimenManage: 'SpecimenManage',
DosageManage: 'DosageManage',
DrugManage: 'DrugManage',
KeyManage: 'KeyManage',
InstrumentManage: 'InstrumentManage',
ArchiveManage: '档案管理',
TrialArchiveManage: '试验档案管理',
NonTrialArchiveManage: '非试验档案管理',
DrugConfigArchiveManage: '麻精药配置档案管理',
SpecimenArchiveManage: '供试品档案管理',
DosageArchiveManage: '给药制剂档案管理',
DrugArchiveManage: '麻精药档案管理',
ReagentArchiveManage: '试剂档案管理',
ArchiveRecord: '档案记录',
ArchiveManage: 'ArchiveManage',
TrialArchiveManage: 'TrialArchiveManage',
NonTrialArchiveManage: 'NonTrialArchiveManage',
DrugConfigArchiveManage: 'DrugConfigArchiveManage',
SpecimenArchiveManage: 'SpecimenArchiveManage',
DosageArchiveManage: 'DosageArchiveManage',
DrugArchiveManage: 'DrugArchiveManage',
ReagentArchiveManage: 'ReagentArchiveManage',
ArchiveRecord: 'ArchiveRecord',
SystemManage: '系统管理',
MenuManage: '菜单管理',
RoleManage: '角色管理',
UserManage: '用户管理',
DeptManage: '部门/学科管理',
TemplateManage: '模板管理',
DictManage: '字典管理',
LogManage: '日志管理'
SystemManage: 'SystemManage',
MenuManage: 'MenuManage',
RoleManage: 'RoleManage',
UserManage: 'UserManage',
DeptManage: 'DeptManage/SubjectManage',
TemplateManage: 'TemplateManage',
DictManage: 'DictManage',
LogManage: 'LogManage'
}, },
login: { login: {
title: '华西海圻管理系统',
logIn: '登录',
username: '账号',
usernameRequired: '请输入您的账号',
password: '密码',
passwordRequired: '请输入您的密码',
code: '验证码',
codeRequired: '请输入验证码',
rememberMe: '记住密码',
loginIng: '登 录 中...',
logOut: '退出登录',
profile: '个人中心'
title: 'Login Form',
logIn: 'Login in',
username: 'Username',
usernameRequired: 'Please Enter Username',
password: 'Password',
passwordRequired: 'Please Enter Password',
code: 'Code',
codeRequired: 'Please Enter Code',
rememberMe: 'Remember Me',
loginIng: 'Loging...',
logOut: 'logOut',
profile: 'profile'
}, },
tagsView: { tagsView: {
refresh: '刷新',
close: '关闭',
closeOthers: '关闭其它',
closeAll: '关闭所有'
refresh: 'Refresh',
close: 'Close',
closeOthers: 'Close Others',
closeAll: 'Close All'
}, },
settings: { settings: {
title: '系统布局配置',
theme: '主题色',
tagsView: '开启 Tags-View',
fixedHeader: '固定 Header',
sidebarLogo: '侧边栏 Logo'
title: 'Page style setting',
theme: 'Theme Color',
tagsView: 'Open Tags-View',
fixedHeader: 'Fixed Header',
sidebarLogo: 'Sidebar Logo'
}, },
page: { page: {
system: { system: {
menu: { menu: {
name: '菜单名称',
status: '菜单状态',
statusAll: '全部',
statusVisible: '显示',
statusHide: '隐藏',
name: 'name',
status: 'status',
statusAll: 'All',
statusVisible: 'visible',
statusHide: 'hide',
index: '序号',
sort: '菜单排序',
router: '路由地址',
type: '菜单类型',
typeDir: '目录',
typeMenu: '菜单',
typeBtn: '按钮',
add: '添加',
edit: '编辑',
delete: '删除',
index: 'index',
sort: 'sort',
router: 'router',
type: 'type',
typeDir: 'dir',
typeMenu: 'menu',
typeBtn: 'btn',
add: 'add',
edit: 'edit',
delete: 'delete',
parent: '上级菜单',
comp: '组件路径',
icon: '菜单图标',
permit: '权限字符',
parent: 'parent',
comp: 'comp',
icon: 'icon',
permit: 'permit',
addMenu: '新增菜单',
modifyMenu: '编辑菜单',
addMenu: 'addMenu',
modifyMenu: 'modifyMenu',
root: '主类目',
root: 'root',
notEmpty: '不能为空'
notEmpty: ' can not be empty'
}, },
role: { role: {
name: '角色名称',
key: '角色编码',
status: '状态',
remark: '备注',
permit: '权限',
name: 'name',
key: 'code',
status: 'status',
remark: 'remark',
permit: 'permit',
statusEnable: '启用',
statusDisable: '禁用',
statusEnable: 'enable',
statusDisable: 'disable',
edit: '编辑',
allocate: '分配用户',
detail: '详情',
edit: 'edit',
allocate: 'allocate',
detail: 'detail',
addRole: '新增角色',
modifyRole: '编辑角色',
notEmpty: '不能为空'
addRole: 'addRole',
modifyRole: 'modifyRole',
notEmpty: ' can not be empty',
filterPlaceholder: 'name/mobile',
unauthorized: 'unauthorized',
authorized: 'authorized'
},
dept: {
name: 'name',
type: 'type',
parent: 'parent',
add: 'add',
edit: 'edit',
detail: 'view',
delete: 'delete',
dept: 'dept',
subject: 'subject',
team: 'team',
notEmpty: ' can not be empty',
addDept: 'addDept',
modifyDept: 'modifyDept'
} }
}, },
business: { business: {
@ -145,7 +164,7 @@ export default {
jyzt: { jyzt: {
wjy: '未借阅', wjy: '未借阅',
djy: '待借阅', djy: '待借阅',
jyz: '借阅中',
jyz: '借阅中'
}, },
zjzt: { zjzt: {
wsd: '未锁定', wsd: '未锁定',
@ -155,19 +174,20 @@ export default {
djd: '待解档' djd: '待解档'
}, },
zcg: { zcg: {
ysbh: '钥匙编号',
jyr: '借用人', jyr: '借用人',
zt: '状态', zt: '状态',
jyz: '借用中', jyz: '借用中',
wjy: '未借用', wjy: '未借用',
plgh: '批量归还', plgh: '批量归还',
zcg: '暂存柜', zcg: '暂存柜',
ysbh: '钥匙编号',
ys1jyr: '钥匙1借用人', ys1jyr: '钥匙1借用人',
ys2jyr: '钥匙2借用人', ys2jyr: '钥匙2借用人',
glyj: '关联药剂', glyj: '关联药剂',
ffys: '发放钥匙', ffys: '发放钥匙',
gh: '归还', gh: '归还',
ysgh: '钥匙归还',
ysff: '钥匙发放',
ysgh: '钥匙归还'
} }
} }
} }

+ 2
- 0
src/main.js View File

@ -79,6 +79,8 @@ DictData.install()
*/ */
import i18n from './lang' import i18n from './lang'
import _ from 'lodash'
Vue.use(Element, { Vue.use(Element, {
i18n: (key, value) => i18n.t(key, value), i18n: (key, value) => i18n.t(key, value),
size: Cookies.get('size') || 'medium' // set element-ui default size size: Cookies.get('size') || 'medium' // set element-ui default size

+ 96
- 60
src/store/modules/user.js View File

@ -1,8 +1,8 @@
import router from '@/router' import router from '@/router'
import { MessageBox, } from 'element-ui'
import { MessageBox } from 'element-ui'
import { login, logout, getInfo, refreshToken } from '@/api/login' import { login, logout, getInfo, refreshToken } from '@/api/login'
import { getToken, setToken, setExpiresIn, removeToken } from '@/utils/auth' import { getToken, setToken, setExpiresIn, removeToken } from '@/utils/auth'
import { isEmpty } from "@/utils/validate"
import { isEmpty } from '@/utils/validate'
import defAva from '@/assets/images/profile.jpg' import defAva from '@/assets/images/profile.jpg'
const user = { const user = {
@ -50,86 +50,122 @@ const user = {
const password = userInfo.password const password = userInfo.password
const code = userInfo.code const code = userInfo.code
const uuid = userInfo.uuid const uuid = userInfo.uuid
const force = userInfo.force
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
login(username, password, code, uuid).then(res => {
let data = res.data
setToken(data.access_token)
commit('SET_TOKEN', data.access_token)
setExpiresIn(data.expires_in)
commit('SET_EXPIRES_IN', data.expires_in)
resolve()
}).catch(error => {
reject(error)
})
login(username, password, code, uuid, force)
.then((res) => {
let data = res.data
setToken(data.access_token)
commit('SET_TOKEN', data.access_token)
setExpiresIn(data.expires_in)
commit('SET_EXPIRES_IN', data.expires_in)
resolve()
})
.catch((error) => {
reject(error)
})
}) })
}, },
// 获取用户信息 // 获取用户信息
GetInfo({ commit, state }) { GetInfo({ commit, state }) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
getInfo().then(res => {
const user = res.user
const avatar = (isEmpty(user.avatar)) ? defAva : user.avatar
if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组
commit('SET_ROLES', res.roles)
commit('SET_PERMISSIONS', res.permissions)
} else {
commit('SET_ROLES', ['ROLE_DEFAULT'])
}
commit('SET_ID', user.userId)
commit('SET_NAME', user.userName)
commit('SET_NICK_NAME', user.nickName)
commit('SET_AVATAR', avatar)
/* 初始密码提示 */
if(res.isDefaultModifyPwd) {
MessageBox.confirm('您的密码还是初始密码,请修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } })
}).catch(() => {})
}
/* 过期密码提示 */
if(!res.isDefaultModifyPwd && res.isPasswordExpired) {
MessageBox.confirm('您的密码已过期,请尽快修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } })
}).catch(() => {})
}
resolve(res)
}).catch(error => {
reject(error)
})
getInfo()
.then((res) => {
const user = res.user
const avatar = isEmpty(user.avatar) ? defAva : user.avatar
if (res.roles && res.roles.length > 0) {
// 验证返回的roles是否是一个非空数组
commit('SET_ROLES', res.roles)
commit('SET_PERMISSIONS', res.permissions)
} else {
commit('SET_ROLES', ['ROLE_DEFAULT'])
}
commit('SET_ID', user.userId)
commit('SET_NAME', user.userName)
commit('SET_NICK_NAME', user.nickName)
commit('SET_AVATAR', avatar)
/* 初始密码提示 */
if (res.isDefaultModifyPwd) {
MessageBox.confirm(
'您的密码还是初始密码,请修改密码!',
'安全提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}
)
.then(() => {
router.push({
name: 'Profile',
params: { activeTab: 'resetPwd' }
})
})
.catch(() => {})
}
/* 过期密码提示 */
if (!res.isDefaultModifyPwd && res.isPasswordExpired) {
MessageBox.confirm(
'您的密码已过期,请尽快修改密码!',
'安全提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}
)
.then(() => {
router.push({
name: 'Profile',
params: { activeTab: 'resetPwd' }
})
})
.catch(() => {})
}
resolve(res)
})
.catch((error) => {
reject(error)
})
}) })
}, },
// 刷新token // 刷新token
RefreshToken({commit, state}) {
RefreshToken({ commit, state }) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
refreshToken(state.token).then(res => {
setExpiresIn(res.data)
commit('SET_EXPIRES_IN', res.data)
resolve()
}).catch(error => {
reject(error)
})
refreshToken(state.token)
.then((res) => {
setExpiresIn(res.data)
commit('SET_EXPIRES_IN', res.data)
resolve()
})
.catch((error) => {
reject(error)
})
}) })
}, },
// 退出系统 // 退出系统
LogOut({ commit, state }) { LogOut({ commit, state }) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
logout(state.token).then(() => {
commit('SET_TOKEN', '')
commit('SET_ROLES', [])
commit('SET_PERMISSIONS', [])
removeToken()
resolve()
}).catch(error => {
reject(error)
})
logout(state.token)
.then(() => {
commit('SET_TOKEN', '')
commit('SET_ROLES', [])
commit('SET_PERMISSIONS', [])
removeToken()
resolve()
})
.catch((error) => {
reject(error)
})
}) })
}, },
// 前端 登出 // 前端 登出
FedLogOut({ commit }) { FedLogOut({ commit }) {
return new Promise(resolve => {
return new Promise((resolve) => {
commit('SET_TOKEN', '') commit('SET_TOKEN', '')
removeToken() removeToken()
resolve() resolve()

+ 15
- 8
src/views/login.vue View File

@ -38,7 +38,7 @@
<img :src="codeUrl" @click="getCode" class="login-code-img"/> <img :src="codeUrl" @click="getCode" class="login-code-img"/>
</div> </div>
</el-form-item> </el-form-item>
<el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">{{ $t('login.rememberMe') }}</el-checkbox>
<!-- <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">{{ $t('login.rememberMe') }}</el-checkbox> -->
<el-form-item style="width:100%;"> <el-form-item style="width:100%;">
<el-button <el-button
:loading="loading" :loading="loading"
@ -82,7 +82,8 @@ export default {
password: "admin123", password: "admin123",
rememberMe: false, rememberMe: false,
code: "", code: "",
uuid: ""
uuid: "",
force:false
}, },
loginRules: { loginRules: {
username: [ username: [
@ -111,7 +112,7 @@ export default {
}, },
created() { created() {
this.getCode(); this.getCode();
this.getCookie();
// this.getCookie();
}, },
methods: { methods: {
getCode() { getCode() {
@ -130,7 +131,8 @@ export default {
this.loginForm = { this.loginForm = {
username: username === undefined ? this.loginForm.username : username, username: username === undefined ? this.loginForm.username : username,
password: password === undefined ? this.loginForm.password : decrypt(password), password: password === undefined ? this.loginForm.password : decrypt(password),
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
force:false
}; };
}, },
handleLogin() { handleLogin() {
@ -148,11 +150,16 @@ export default {
} }
this.$store.dispatch("Login", this.loginForm).then(() => { this.$store.dispatch("Login", this.loginForm).then(() => {
this.$router.push({ path: this.redirect || "/" }).catch(()=>{}); this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
}).catch(() => {
this.loading = false;
if (this.captchaEnabled) {
this.getCode();
}).catch(err => {
if(err && err.message==='exists'){
}else{
this.loading = false;
if (this.captchaEnabled) {
this.getCode();
}
} }
}); });
} }
}); });

+ 87
- 61
src/views/system/dept/index.vue View File

@ -1,15 +1,15 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
<el-form-item label="部门名称" prop="deptName">
<el-form-item :label="$t('page.system.dept.name')+':'" prop="deptName">
<el-input <el-input
v-model="queryParams.deptName" v-model="queryParams.deptName"
placeholder="请输入部门名称"
:placeholder="$t('form.placeholderInput')"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status">
<!-- <el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="部门状态" clearable> <el-select v-model="queryParams.status" placeholder="部门状态" clearable>
<el-option <el-option
v-for="dict in dict.type.sys_normal_disable" v-for="dict in dict.type.sys_normal_disable"
@ -18,10 +18,10 @@
:value="dict.value" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item>
</el-form-item> -->
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{$t('form.search')}}</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{$t('form.reset')}}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -34,9 +34,9 @@
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:dept:add']" v-hasPermi="['system:dept:add']"
>新增</el-button>
>{{$t('form.add')}}</el-button>
</el-col> </el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<el-button <el-button
type="info" type="info"
plain plain
@ -45,7 +45,7 @@
@click="toggleExpandAll" @click="toggleExpandAll"
>展开/折叠</el-button> >展开/折叠</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> -->
</el-row> </el-row>
<el-table <el-table
@ -56,9 +56,15 @@
:default-expand-all="isExpandAll" :default-expand-all="isExpandAll"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}" :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
> >
<el-table-column prop="deptName" label="部门名称" width="260"></el-table-column>
<el-table-column prop="orderNum" label="排序" width="200"></el-table-column>
<el-table-column prop="status" label="状态" width="100">
<el-table-column prop="deptName" :label="$t('page.system.dept.name')"></el-table-column>
<el-table-column prop="type" :label="$t('page.system.dept.type')" width="200">
<template slot-scope="scope">
<span v-if="scope.row.type===1">{{$t('page.system.dept.dept')}}</span>
<span v-if="scope.row.type===3">{{$t('page.system.dept.subject')}}</span>
<span v-if="scope.row.type===5">{{$t('page.system.dept.team')}}</span>
</template>
</el-table-column>
<!-- <el-table-column prop="status" label="状态" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/> <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
</template> </template>
@ -67,31 +73,34 @@
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
</el-table-column> -->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
@click="handleUpdate(scope.row,false)"
v-hasPermi="['system:dept:edit']" v-hasPermi="['system:dept:edit']"
>修改</el-button>
>{{$t('page.system.dept.edit')}}</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-plus"
@click="handleAdd(scope.row)" @click="handleAdd(scope.row)"
v-hasPermi="['system:dept:add']" v-hasPermi="['system:dept:add']"
>新增</el-button>
>{{$t('page.system.dept.add')}}</el-button>
<el-button <el-button
v-if="scope.row.parentId != 0" v-if="scope.row.parentId != 0"
size="mini" size="mini"
type="text" type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['system:dept:remove']" v-hasPermi="['system:dept:remove']"
>删除</el-button>
>{{$t('page.system.dept.delete')}}</el-button>
<el-button
size="mini"
type="text"
@click="handleUpdate(scope.row,true)"
v-hasPermi="['system:dept:edit']"
>{{$t('page.system.dept.detail')}}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -101,24 +110,34 @@
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row> <el-row>
<el-col :span="24" v-if="form.parentId !== 0"> <el-col :span="24" v-if="form.parentId !== 0">
<el-form-item label="上级部门" prop="parentId">
<treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" placeholder="选择上级部门" />
<el-form-item :label="$t('page.system.dept.parent')+':'" prop="parentId">
<treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" :placeholder="$t('form.placeholderSelect')" :disabled="readonly" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12">
<el-form-item label="部门名称" prop="deptName">
<el-input v-model="form.deptName" placeholder="请输入部门名称" />
<el-col :span="24">
<el-form-item :label="$t('page.system.dept.name')+':'" prop="deptName">
<el-input v-model="form.deptName" :placeholder="$t('form.placeholderInput')" :readonly="readonly" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="24">
<el-form-item :label="$t('page.system.dept.type')+':'" prop="type">
<el-radio-group v-model="form.type" :disabled="readonly">
<el-radio :label="1" >{{$t('page.system.dept.dept')}}</el-radio>
<el-radio :label="3" >{{$t('page.system.dept.subject')}}</el-radio>
<el-radio :label="5" >{{$t('page.system.dept.team')}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<el-form-item label="显示排序" prop="orderNum"> <el-form-item label="显示排序" prop="orderNum">
<el-input-number v-model="form.orderNum" controls-position="right" :min="0" /> <el-input-number v-model="form.orderNum" controls-position="right" :min="0" />
</el-form-item> </el-form-item>
</el-col>
</el-col> -->
</el-row> </el-row>
<el-row>
<!-- <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="负责人" prop="leader"> <el-form-item label="负责人" prop="leader">
<el-input v-model="form.leader" placeholder="请输入负责人" maxlength="20" /> <el-input v-model="form.leader" placeholder="请输入负责人" maxlength="20" />
@ -147,11 +166,11 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
</el-row> -->
</el-form> </el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
<div slot="footer" class="dialog-footer" v-if="!readonly">
<el-button type="primary" @click="submitForm">{{$t('form.saveConfirm')}}</el-button>
<el-button @click="cancel">{{$t('form.cancel')}}</el-button>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
@ -194,29 +213,33 @@ export default {
// //
rules: { rules: {
parentId: [ parentId: [
{ required: true, message: "上级部门不能为空", trigger: "blur" }
{ required: true, message: this.$t('page.system.dept.parent')+ this.$t('page.system.dept.notEmpty'), trigger: "change" }
], ],
deptName: [ deptName: [
{ required: true, message: "部门名称不能为空", trigger: "blur" }
],
orderNum: [
{ required: true, message: "显示排序不能为空", trigger: "blur" }
{ required: true, message: this.$t('page.system.dept.name')+ this.$t('page.system.dept.notEmpty'), trigger: "blur" }
], ],
email: [
{
type: "email",
message: "请输入正确的邮箱地址",
trigger: ["blur", "change"]
}
type: [
{ required: true, message: this.$t('page.system.dept.type')+ this.$t('page.system.dept.notEmpty'), trigger: "change" }
], ],
phone: [
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur"
}
]
}
// orderNum: [
// { required: true, message: "", trigger: "blur" }
// ],
// email: [
// {
// type: "email",
// message: "",
// trigger: ["blur", "change"]
// }
// ],
// phone: [
// {
// pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
// message: "",
// trigger: "blur"
// }
// ]
},
readonly:false,
} }
}, },
created() { created() {
@ -253,11 +276,12 @@ export default {
deptId: undefined, deptId: undefined,
parentId: undefined, parentId: undefined,
deptName: undefined, deptName: undefined,
orderNum: undefined,
orderNum: 0,
leader: undefined, leader: undefined,
phone: undefined, phone: undefined,
email: undefined, email: undefined,
status: "0"
status: "0",
type:undefined
} }
this.resetForm("form") this.resetForm("form")
}, },
@ -272,12 +296,13 @@ export default {
}, },
/** 新增按钮操作 */ /** 新增按钮操作 */
handleAdd(row) { handleAdd(row) {
this.readonly = false
this.reset() this.reset()
if (row != undefined) { if (row != undefined) {
this.form.parentId = row.deptId this.form.parentId = row.deptId
} }
this.open = true this.open = true
this.title = "添加部门"
this.title = this.$t('page.system.dept.addDept')
listDept().then(response => { listDept().then(response => {
this.deptOptions = this.handleTree(response.data, "deptId") this.deptOptions = this.handleTree(response.data, "deptId")
}) })
@ -291,12 +316,13 @@ export default {
}) })
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) {
handleUpdate(row,readonly) {
this.readonly = readonly
this.reset() this.reset()
getDept(row.deptId).then(response => { getDept(row.deptId).then(response => {
this.form = response.data this.form = response.data
this.open = true this.open = true
this.title = "修改部门"
this.title = this.$t('page.system.dept.modifyDept')
listDeptExcludeChild(row.deptId).then(response => { listDeptExcludeChild(row.deptId).then(response => {
this.deptOptions = this.handleTree(response.data, "deptId") this.deptOptions = this.handleTree(response.data, "deptId")
if (this.deptOptions.length == 0) { if (this.deptOptions.length == 0) {
@ -312,13 +338,13 @@ export default {
if (valid) { if (valid) {
if (this.form.deptId != undefined) { if (this.form.deptId != undefined) {
updateDept(this.form).then(response => { updateDept(this.form).then(response => {
this.$modal.msgSuccess("修改成功")
// this.$modal.msgSuccess("")
this.open = false this.open = false
this.getList() this.getList()
}) })
} else { } else {
addDept(this.form).then(response => { addDept(this.form).then(response => {
this.$modal.msgSuccess("新增成功")
// this.$modal.msgSuccess("")
this.open = false this.open = false
this.getList() this.getList()
}) })
@ -328,11 +354,11 @@ export default {
}, },
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
this.$modal.confirm('是否确认删除名称为"' + row.deptName + '"的数据项?').then(function() {
this.$modal.confirm(this.$t('form.confirmDelete')).then(function() {
return delDept(row.deptId) return delDept(row.deptId)
}).then(() => { }).then(() => {
this.getList() this.getList()
this.$modal.msgSuccess("删除成功")
// this.$modal.msgSuccess("")
}).catch(() => {}) }).catch(() => {})
} }
} }

+ 57
- 19
src/views/system/role/index.vue View File

@ -133,7 +133,7 @@
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
@click="handleUpdate(scope.row)"
@click="handleStatusChange(scope.row)"
v-hasPermi="['system:role:edit']" v-hasPermi="['system:role:edit']"
v-if="scope.row.status==='0'" v-if="scope.row.status==='0'"
>{{$t('page.system.role.statusDisable')}}</el-button> >{{$t('page.system.role.statusDisable')}}</el-button>
@ -141,7 +141,7 @@
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
@click="handleUpdate(scope.row)"
@click="handleStatusChange(scope.row)"
v-hasPermi="['system:role:edit']" v-hasPermi="['system:role:edit']"
v-if="scope.row.status==='1'" v-if="scope.row.status==='1'"
>{{$t('page.system.role.statusEnable')}}</el-button> >{{$t('page.system.role.statusEnable')}}</el-button>
@ -175,7 +175,7 @@
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> --> </el-dropdown> -->
<el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']">
<!-- <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']">
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button> <el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item command="handleDataScope" icon="el-icon-circle-check" <el-dropdown-item command="handleDataScope" icon="el-icon-circle-check"
@ -183,7 +183,7 @@
<el-dropdown-item command="handleAuthUser" icon="el-icon-user" <el-dropdown-item command="handleAuthUser" icon="el-icon-user"
v-hasPermi="['system:role:edit']">分配用户</el-dropdown-item> v-hasPermi="['system:role:edit']">分配用户</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown>
</el-dropdown> -->
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -296,18 +296,22 @@
<!-- 分配角色数据权限对话框 --> <!-- 分配角色数据权限对话框 -->
<el-dialog :title="transferDialog.title" :visible.sync="transferDialog.visible" width="500px" append-to-body>
<el-transfer v-model="transferDialog.selected" :data="transferDialog.list"></el-transfer>
<el-dialog :title="transferDialog.title" :visible.sync="transferDialog.visible" width="750px" append-to-body>
<el-transfer class="role-transfer" v-model="transferDialog.selected" :data="transferDialog.list" :titles="[$t('page.system.role.unauthorized'), $t('page.system.role.authorized')]"
filterable
:filter-method="filterMethod"
:filter-placeholder="$t('page.system.role.filterPlaceholder')">
</el-transfer>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitDataScope">{{$t('form.saveConfirm')}}</el-button>
<el-button @click="cancelDataScope">{{$t('form.cancel')}}</el-button>
<el-button type="primary" @click="changRoleUser">{{$t('form.saveConfirm')}}</el-button>
<el-button @click="transferDialog.visible = false">{{$t('form.cancel')}}</el-button>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect } from "@/api/system/role"
import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect,allocatedUserList,authUserSetAll } from "@/api/system/role"
import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu" import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu"
export default { export default {
@ -403,6 +407,7 @@ export default {
list:[], list:[],
selected:[], selected:[],
roleId:''
} }
} }
@ -470,14 +475,18 @@ export default {
}, },
// //
handleStatusChange(row) { handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用"
this.$modal.confirm('确认要"' + text + '""' + row.roleName + '"角色吗?').then(function() {
return changeRoleStatus(row.roleId, row.status)
}).then(() => {
this.$modal.msgSuccess(text + "成功")
}).catch(function() {
row.status = row.status === "0" ? "1" : "0"
changeRoleStatus(row.roleId, row.status === "0"?'1':'0').then(response => {
this.getList()
}) })
// let text = row.status === "0" ? "" : ""
// this.$modal.confirm('"' + text + '""' + row.roleName + '"').then(function() {
// return changeRoleStatus(row.roleId, row.status)
// }).then(() => {
// this.$modal.msgSuccess(text + "")
// }).catch(function() {
// row.status = row.status === "0" ? "1" : "0"
// })
}, },
// //
cancel() { cancel() {
@ -678,9 +687,38 @@ export default {
}, `role_${new Date().getTime()}.xlsx`) }, `role_${new Date().getTime()}.xlsx`)
}, },
transfer(){
this.transferDialog.visible = true
transfer(row){
allocatedUserList({roleId:row.roleId}).then(response => {
let list = []
_.forEach(response.list,(item)=>{
list.push({
key:item.userId,
label:`${item.nickName}(${item.phonenumber})`
})
})
this.transferDialog.selected = response.selected
this.transferDialog.list = list
this.transferDialog.roleId = row.roleId
this.transferDialog.visible = true
}
)
},
filterMethod(query, item){
return item.label.indexOf(query) > -1;
},
changRoleUser(){
authUserSetAll({ roleId: this.transferDialog.roleId, userIdList: this.transferDialog.selected && this.transferDialog.selected.length>0 ? this.transferDialog.selected:[] }).then(res => {
this.transferDialog.visible = false
})
} }
} }
} }
</script>
</script>
<style lang="scss">
.role-transfer{
.el-transfer-panel{
width: 250px;
}
}
</style>

Loading…
Cancel
Save