14 changed files with 2642 additions and 2622 deletions
File diff suppressed because it is too large
File diff suppressed because it is too large
@ -1,511 +1,506 @@ |
|||||
<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 |
||||
<el-form-item label="角色名称" prop="roleName"> |
ref="queryForm" |
||||
<el-input v-model="queryParams.roleName" placeholder="请输入角色名称" clearable style="width: 240px" @keyup.enter.native="handleQuery" /> |
:model="queryParams" |
||||
</el-form-item> |
size="small" |
||||
<el-form-item label="权限字符" prop="roleKey"> |
:inline="true" |
||||
<el-input v-model="queryParams.roleKey" placeholder="请输入权限字符" clearable style="width: 240px" @keyup.enter.native="handleQuery" /> |
v-show="showSearch" |
||||
</el-form-item> |
class="page-query-form system-role-query-form" |
||||
<el-form-item label="状态" prop="status"> |
label-position="top" |
||||
<el-select v-model="queryParams.status" placeholder="角色状态" clearable style="width: 240px"> |
@submit.native.prevent="handleQuery" |
||||
<el-option label="正常" :value="0" /> |
> |
||||
<el-option label="停用" :value="1" /> |
<el-form-item :label="$t('systemRole.query.roleName')" prop="roleName"> |
||||
</el-select> |
<el-input |
||||
</el-form-item> |
v-model="queryParams.roleName" |
||||
<!-- <el-form-item label="创建时间"> |
:placeholder="$t('systemRole.placeholder.roleName')" |
||||
<el-date-picker v-model="dateRange" style="width: 240px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker> |
clearable |
||||
</el-form-item> --> |
@keyup.enter.native="handleQuery" |
||||
<el-form-item> |
/> |
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> |
</el-form-item> |
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> |
<el-form-item :label="$t('systemRole.query.roleKey')" prop="roleKey"> |
||||
</el-form-item> |
<el-input |
||||
|
v-model="queryParams.roleKey" |
||||
|
:placeholder="$t('systemRole.placeholder.roleKey')" |
||||
|
clearable |
||||
|
@keyup.enter.native="handleQuery" |
||||
|
/> |
||||
|
</el-form-item> |
||||
|
<el-form-item :label="$t('systemRole.query.status')" prop="status"> |
||||
|
<el-select v-model="queryParams.status" :placeholder="$t('systemRole.placeholder.status')" clearable> |
||||
|
<el-option :label="$t('systemRole.status.normal')" :value="0" /> |
||||
|
<el-option :label="$t('systemRole.status.disabled')" :value="1" /> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
<el-form-item class="page-query-actions"> |
||||
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t("common.search") }}</el-button> |
||||
|
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t("common.reset") }}</el-button> |
||||
|
</el-form-item> |
||||
</el-form> |
</el-form> |
||||
|
|
||||
<el-row :gutter="10" class="mb8"> |
<el-row :gutter="10" class="mb8 page-toolbar"> |
||||
<el-col :span="1.5"> |
<el-col :span="1.5"> |
||||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['system:role:add']">新增</el-button> |
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['system:role:add']"> |
||||
</el-col> |
{{ $t("common.add") }} |
||||
<el-col :span="1.5"> |
</el-button> |
||||
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate" v-hasPermi="['system:role:edit']">修改</el-button> |
</el-col> |
||||
</el-col> |
<el-col :span="1.5"> |
||||
<!-- <el-col :span="1.5">--> |
<el-button |
||||
<!-- <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['system:role:remove']">删除</el-button>--> |
type="success" |
||||
<!-- </el-col>--> |
plain |
||||
<el-col :span="1.5"> |
icon="el-icon-edit" |
||||
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['system:role:export']">导出</el-button> |
size="mini" |
||||
</el-col> |
:disabled="single" |
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
@click="handleUpdate" |
||||
|
v-hasPermi="['system:role:edit']" |
||||
|
> |
||||
|
{{ $t("common.edit") }} |
||||
|
</el-button> |
||||
|
</el-col> |
||||
|
<el-col :span="1.5"> |
||||
|
<!-- <el-button |
||||
|
type="warning" |
||||
|
plain |
||||
|
icon="el-icon-download" |
||||
|
size="mini" |
||||
|
@click="handleExport" |
||||
|
v-hasPermi="['system:role:export']" |
||||
|
> |
||||
|
{{ $t("systemRole.button.export") }} |
||||
|
</el-button> --> |
||||
|
</el-col> |
||||
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" /> |
||||
</el-row> |
</el-row> |
||||
|
|
||||
<el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange"> |
<el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange"> |
||||
<el-table-column type="selection" width="55" align="center" /> |
<el-table-column type="selection" width="55" align="center" /> |
||||
<el-table-column label="角色编号" prop="roleId" width="120" /> |
<el-table-column :label="$t('systemRole.table.roleId')" prop="roleId" width="120" /> |
||||
<el-table-column label="角色名称" prop="roleName" :show-overflow-tooltip="true" width="150" /> |
<el-table-column :label="$t('systemRole.table.roleName')" prop="roleName" :show-overflow-tooltip="true" width="150" /> |
||||
<el-table-column label="权限字符" prop="roleKey" :show-overflow-tooltip="true" width="150" /> |
<el-table-column :label="$t('systemRole.table.roleKey')" prop="roleKey" :show-overflow-tooltip="true" width="150" /> |
||||
<el-table-column label="显示顺序" prop="roleSort" width="100" /> |
<el-table-column :label="$t('systemRole.table.roleSort')" prop="roleSort" width="100" /> |
||||
<el-table-column label="状态" align="center" width="100"> |
<el-table-column :label="$t('systemRole.table.status')" align="center" width="100"> |
||||
<template slot-scope="scope"> |
<template slot-scope="scope"> |
||||
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch> |
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)" /> |
||||
</template> |
</template> |
||||
</el-table-column> |
</el-table-column> |
||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180"> |
<el-table-column :label="$t('systemRole.table.createTime')" align="center" prop="createTime" width="180"> |
||||
<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> |
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
<el-table-column :label="$t('systemRole.table.actions')" align="center" class-name="small-padding fixed-width"> |
||||
<template slot-scope="scope" v-if="scope.row.roleId !== 1"> |
<template slot-scope="scope" v-if="scope.row.roleId !== 1"> |
||||
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:role:edit']">修改</el-button> |
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:role:edit']"> |
||||
<!-- <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:role:remove']">删除</el-button>--> |
{{ $t("common.edit") }} |
||||
<el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']"> |
</el-button> |
||||
<!-- <el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button> --> |
<el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']"> |
||||
<el-dropdown-menu slot="dropdown"> |
<el-dropdown-menu slot="dropdown"> |
||||
<el-dropdown-item command="handleDataScope" icon="el-icon-circle-check" v-hasPermi="['system:role:edit']">数据权限</el-dropdown-item> |
<el-dropdown-item command="handleDataScope" icon="el-icon-circle-check" v-hasPermi="['system:role:edit']"> |
||||
<el-dropdown-item command="handleAuthUser" icon="el-icon-user" v-hasPermi="['system:role:edit']">分配用户</el-dropdown-item> |
{{ $t("systemRole.dropdown.dataScope") }} |
||||
</el-dropdown-menu> |
</el-dropdown-item> |
||||
</el-dropdown> |
<el-dropdown-item command="handleAuthUser" icon="el-icon-user" v-hasPermi="['system:role:edit']"> |
||||
</template> |
{{ $t("systemRole.dropdown.assignUser") }} |
||||
</el-table-column> |
</el-dropdown-item> |
||||
|
</el-dropdown-menu> |
||||
|
</el-dropdown> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
</el-table> |
</el-table> |
||||
|
|
||||
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> |
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> |
||||
|
|
||||
<!-- 添加或修改角色配置对话框 --> |
<el-dialog :title="title" :visible.sync="open" width="860px" append-to-body> |
||||
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body> |
<el-form ref="form" :model="form" :rules="rules" label-position="top" class="page-dialog-form"> |
||||
<el-form ref="form" :model="form" :rules="rules" label-width="100px"> |
<div class="page-dialog-grid"> |
||||
<el-form-item label="角色名称" prop="roleName"> |
<el-form-item :label="$t('systemRole.form.roleName')" prop="roleName"> |
||||
<el-input v-model="form.roleName" placeholder="请输入角色名称" /> |
<el-input v-model="form.roleName" :placeholder="$t('systemRole.placeholder.roleName')" /> |
||||
</el-form-item> |
</el-form-item> |
||||
<el-form-item prop="roleKey"> |
<el-form-item prop="roleKey"> |
||||
<span slot="label"> |
<span slot="label"> |
||||
<el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)" placement="top"> |
<el-tooltip :content="$t('systemRole.tooltip.roleKey')" placement="top"> |
||||
<i class="el-icon-question"></i> |
<i class="el-icon-question"></i> |
||||
</el-tooltip> |
</el-tooltip> |
||||
权限字符 |
{{ $t("systemRole.form.roleKey") }} |
||||
</span> |
</span> |
||||
<el-input v-model="form.roleKey" placeholder="请输入权限字符" /> |
<el-input v-model="form.roleKey" :placeholder="$t('systemRole.placeholder.permissionKey')" /> |
||||
</el-form-item> |
</el-form-item> |
||||
<el-form-item label="角色顺序" prop="roleSort"> |
<el-form-item :label="$t('systemRole.form.roleSort')" prop="roleSort"> |
||||
<el-input-number v-model="form.roleSort" controls-position="right" :min="0" /> |
<el-input-number v-model="form.roleSort" controls-position="right" :min="0" /> |
||||
</el-form-item> |
</el-form-item> |
||||
<el-form-item label="状态" prop="status"> |
<el-form-item :label="$t('systemRole.form.status')" prop="status"> |
||||
<el-radio-group v-model="form.status"> |
<el-radio-group v-model="form.status"> |
||||
<el-radio :label="0">正常</el-radio> |
<el-radio :label="0">{{ $t("systemRole.status.normal") }}</el-radio> |
||||
<el-radio :label="1">停用</el-radio> |
<el-radio :label="1">{{ $t("systemRole.status.disabled") }}</el-radio> |
||||
</el-radio-group> |
</el-radio-group> |
||||
</el-form-item> |
</el-form-item> |
||||
<el-form-item label="菜单权限"> |
|
||||
<el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event, 'menu')">展开/折叠</el-checkbox> |
|
||||
<el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event, 'menu')">全选/全不选</el-checkbox> |
|
||||
<el-checkbox v-model="form.menuCheckStrictly" @change="handleCheckedTreeConnect($event, 'menu')">父子联动</el-checkbox> |
|
||||
<el-tree class="tree-border" :data="menuOptions" show-checkbox ref="menu" node-key="id" :check-strictly="!form.menuCheckStrictly" empty-text="加载中,请稍候" :props="defaultProps"></el-tree> |
|
||||
</el-form-item> |
|
||||
<el-form-item label="备注"> |
|
||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input> |
|
||||
</el-form-item> |
|
||||
</el-form> |
|
||||
<div slot="footer" class="dialog-footer"> |
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button> |
|
||||
<el-button @click="cancel">取 消</el-button> |
|
||||
</div> |
</div> |
||||
|
<el-form-item :label="$t('systemRole.form.menuPermission')"> |
||||
|
<div class="page-tree-option-group"> |
||||
|
<el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event, 'menu')">{{ $t("systemRole.tree.expandCollapse") }}</el-checkbox> |
||||
|
<el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event, 'menu')">{{ $t("systemRole.tree.selectAll") }}</el-checkbox> |
||||
|
<el-checkbox v-model="form.menuCheckStrictly" @change="handleCheckedTreeConnect($event, 'menu')">{{ $t("systemRole.tree.parentChildLinkage") }}</el-checkbox> |
||||
|
</div> |
||||
|
<el-tree |
||||
|
ref="menu" |
||||
|
class="tree-border" |
||||
|
:data="menuOptions" |
||||
|
show-checkbox |
||||
|
node-key="id" |
||||
|
:check-strictly="!form.menuCheckStrictly" |
||||
|
:empty-text="$t('systemRole.tree.loading')" |
||||
|
:props="defaultProps" |
||||
|
/> |
||||
|
</el-form-item> |
||||
|
<el-form-item :label="$t('systemRole.form.remark')"> |
||||
|
<el-input v-model="form.remark" type="textarea" :placeholder="$t('systemRole.placeholder.remark')" /> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
<div slot="footer" class="dialog-footer"> |
||||
|
<el-button type="primary" @click="submitForm">{{ $t("common.confirm") }}</el-button> |
||||
|
<el-button @click="cancel">{{ $t("common.cancel") }}</el-button> |
||||
|
</div> |
||||
</el-dialog> |
</el-dialog> |
||||
|
|
||||
<!-- 分配角色数据权限对话框 --> |
|
||||
<el-dialog :title="title" :visible.sync="openDataScope" width="800px" append-to-body> |
<el-dialog :title="title" :visible.sync="openDataScope" width="800px" append-to-body> |
||||
<el-form :model="form" label-width="80px"> |
<el-form :model="form" label-position="top" class="page-dialog-form"> |
||||
<el-form-item label="角色名称"> |
<div class="page-dialog-grid"> |
||||
<el-input v-model="form.roleName" :disabled="true" /> |
<el-form-item :label="$t('systemRole.form.scopeRoleName')"> |
||||
</el-form-item> |
<el-input v-model="form.roleName" :disabled="true" /> |
||||
<el-form-item label="权限字符"> |
</el-form-item> |
||||
<el-input v-model="form.roleKey" :disabled="true" /> |
<el-form-item :label="$t('systemRole.form.scopeRoleKey')"> |
||||
</el-form-item> |
<el-input v-model="form.roleKey" :disabled="true" /> |
||||
<el-form-item label="权限范围"> |
</el-form-item> |
||||
<el-select v-model="form.dataScope" @change="dataScopeSelectChange"> |
<el-form-item :label="$t('systemRole.form.permissionRange')" class="page-dialog-grid__full"> |
||||
<el-option v-for="item in dataScopeOptions" :key="item.value" :label="item.label" :value="item.value"></el-option> |
<el-select v-model="form.dataScope" @change="dataScopeSelectChange"> |
||||
</el-select> |
<el-option v-for="item in dataScopeOptions" :key="item.value" :label="item.label" :value="item.value" /> |
||||
</el-form-item> |
</el-select> |
||||
<el-form-item label="数据权限" v-show="form.dataScope == 2"> |
</el-form-item> |
||||
<el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">展开/折叠</el-checkbox> |
|
||||
<el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">全选/全不选</el-checkbox> |
|
||||
<el-checkbox v-model="form.deptCheckStrictly" @change="handleCheckedTreeConnect($event, 'dept')">父子联动</el-checkbox> |
|
||||
<el-tree class="tree-border" :data="deptOptions" show-checkbox default-expand-all ref="dept" node-key="id" :check-strictly="!form.deptCheckStrictly" empty-text="加载中,请稍候" :props="defaultProps"></el-tree> |
|
||||
</el-form-item> |
|
||||
</el-form> |
|
||||
<div slot="footer" class="dialog-footer"> |
|
||||
<el-button type="primary" @click="submitDataScope">确 定</el-button> |
|
||||
<el-button @click="cancelDataScope">取 消</el-button> |
|
||||
</div> |
</div> |
||||
|
<el-form-item :label="$t('systemRole.form.dataPermission')" v-show="form.dataScope == 2"> |
||||
|
<div class="page-tree-option-group"> |
||||
|
<el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">{{ $t("systemRole.tree.expandCollapse") }}</el-checkbox> |
||||
|
<el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">{{ $t("systemRole.tree.selectAll") }}</el-checkbox> |
||||
|
<el-checkbox v-model="form.deptCheckStrictly" @change="handleCheckedTreeConnect($event, 'dept')">{{ $t("systemRole.tree.parentChildLinkage") }}</el-checkbox> |
||||
|
</div> |
||||
|
<el-tree |
||||
|
ref="dept" |
||||
|
class="tree-border" |
||||
|
:data="deptOptions" |
||||
|
show-checkbox |
||||
|
default-expand-all |
||||
|
node-key="id" |
||||
|
:check-strictly="!form.deptCheckStrictly" |
||||
|
:empty-text="$t('systemRole.tree.loading')" |
||||
|
:props="defaultProps" |
||||
|
/> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
<div slot="footer" class="dialog-footer"> |
||||
|
<el-button type="primary" @click="submitDataScope">{{ $t("common.confirm") }}</el-button> |
||||
|
<el-button @click="cancelDataScope">{{ $t("common.cancel") }}</el-button> |
||||
|
</div> |
||||
</el-dialog> |
</el-dialog> |
||||
</div> |
</div> |
||||
</template> |
</template> |
||||
|
|
||||
<script> |
<script> |
||||
import { |
import { |
||||
listRole, |
listRole, |
||||
getRole, |
getRole, |
||||
delRole, |
delRole, |
||||
addRole, |
addRole, |
||||
updateRole, |
updateRole, |
||||
dataScope, |
dataScope, |
||||
changeRoleStatus, |
changeRoleStatus, |
||||
deptTreeSelect |
deptTreeSelect, |
||||
} from "@/api/system/role" |
} from "@/api/system/role"; |
||||
import { |
import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu"; |
||||
treeselect as menuTreeselect, |
|
||||
roleMenuTreeselect |
|
||||
} from "@/api/system/menu" |
|
||||
import { status } from "nprogress"; |
|
||||
|
|
||||
export default { |
export default { |
||||
name: "Role", |
name: "Role", |
||||
dicts: [], |
dicts: [], |
||||
data() { |
data() { |
||||
return { |
return { |
||||
// 遮罩层 |
loading: true, |
||||
loading: true, |
ids: [], |
||||
// 选中数组 |
single: true, |
||||
ids: [], |
multiple: true, |
||||
// 非单个禁用 |
showSearch: true, |
||||
single: true, |
total: 0, |
||||
// 非多个禁用 |
roleList: [], |
||||
multiple: true, |
title: "", |
||||
// 显示搜索条件 |
open: false, |
||||
showSearch: true, |
openDataScope: false, |
||||
// 总条数 |
menuExpand: false, |
||||
total: 0, |
menuNodeAll: false, |
||||
// 角色表格数据 |
deptExpand: true, |
||||
roleList: [], |
deptNodeAll: false, |
||||
// 弹出层标题 |
dateRange: [], |
||||
title: "", |
dataScopeOptions: [], |
||||
// 是否显示弹出层 |
menuOptions: [], |
||||
open: false, |
deptOptions: [], |
||||
// 是否显示弹出层(数据权限) |
queryParams: { |
||||
openDataScope: false, |
pageNum: 1, |
||||
menuExpand: false, |
pageSize: 10, |
||||
menuNodeAll: false, |
roleName: undefined, |
||||
deptExpand: true, |
roleKey: undefined, |
||||
deptNodeAll: false, |
status: undefined, |
||||
// 日期范围 |
}, |
||||
dateRange: [], |
form: { |
||||
// 数据范围选项 |
status: 0, |
||||
dataScopeOptions: [{ |
}, |
||||
value: "1", |
defaultProps: { |
||||
label: "全部数据权限" |
children: "children", |
||||
}, |
label: "label", |
||||
{ |
}, |
||||
value: "2", |
rules: {}, |
||||
label: "自定数据权限" |
}; |
||||
}, |
}, |
||||
{ |
created() { |
||||
value: "3", |
this.initI18nState(); |
||||
label: "本部门数据权限" |
this.getList(); |
||||
}, |
}, |
||||
{ |
methods: { |
||||
value: "4", |
initI18nState() { |
||||
label: "本部门及以下数据权限" |
this.dataScopeOptions = [ |
||||
}, |
{ value: "1", label: this.$t("systemRole.dataScope.all") }, |
||||
{ |
{ value: "2", label: this.$t("systemRole.dataScope.custom") }, |
||||
value: "5", |
{ value: "3", label: this.$t("systemRole.dataScope.dept") }, |
||||
label: "仅本人数据权限" |
{ value: "4", label: this.$t("systemRole.dataScope.deptAndChild") }, |
||||
} |
{ value: "5", label: this.$t("systemRole.dataScope.self") }, |
||||
], |
]; |
||||
// 菜单列表 |
this.rules = { |
||||
menuOptions: [], |
roleName: [{ required: true, message: this.$t("systemRole.validation.roleNameRequired"), trigger: "blur" }], |
||||
// 部门列表 |
roleKey: [{ required: true, message: this.$t("systemRole.validation.roleKeyRequired"), trigger: "blur" }], |
||||
deptOptions: [], |
roleSort: [{ required: true, message: this.$t("systemRole.validation.roleSortRequired"), trigger: "blur" }], |
||||
// 查询参数 |
}; |
||||
queryParams: { |
}, |
||||
pageNum: 1, |
getList() { |
||||
pageSize: 10, |
this.loading = true; |
||||
roleName: undefined, |
listRole(this.addDateRange(this.queryParams, this.dateRange)).then((response) => { |
||||
roleKey: undefined, |
this.roleList = response.data.list; |
||||
status: undefined |
this.total = response.data.total; |
||||
}, |
this.loading = false; |
||||
// 表单参数 |
}); |
||||
form: {status: 0}, |
}, |
||||
defaultProps: { |
getMenuTreeselect() { |
||||
children: "children", |
menuTreeselect().then((response) => { |
||||
label: "label" |
this.menuOptions = response.data; |
||||
}, |
}); |
||||
// 表单校验 |
}, |
||||
rules: { |
getMenuAllCheckedKeys() { |
||||
roleName: [{ |
const checkedKeys = this.$refs.menu.getCheckedKeys(); |
||||
required: true, |
const halfCheckedKeys = this.$refs.menu.getHalfCheckedKeys(); |
||||
message: "角色名称不能为空", |
checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys); |
||||
trigger: "blur" |
return checkedKeys; |
||||
}], |
}, |
||||
roleKey: [{ |
getDeptAllCheckedKeys() { |
||||
required: true, |
const checkedKeys = this.$refs.dept.getCheckedKeys(); |
||||
message: "权限字符不能为空", |
const halfCheckedKeys = this.$refs.dept.getHalfCheckedKeys(); |
||||
trigger: "blur" |
checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys); |
||||
}], |
return checkedKeys; |
||||
roleSort: [{ |
}, |
||||
required: true, |
getRoleMenuTreeselect(roleId) { |
||||
message: "角色顺序不能为空", |
return roleMenuTreeselect(roleId).then((response) => { |
||||
trigger: "blur" |
this.menuOptions = response.menus; |
||||
}] |
return response; |
||||
} |
}); |
||||
|
}, |
||||
|
getDeptTree(roleId) { |
||||
|
return deptTreeSelect(roleId).then((response) => { |
||||
|
this.deptOptions = response.depts; |
||||
|
return response; |
||||
|
}); |
||||
|
}, |
||||
|
handleStatusChange(row) { |
||||
|
const text = row.status === "0" ? this.$t("systemRole.status.normal") : this.$t("systemRole.status.disabled"); |
||||
|
this.$modal |
||||
|
.confirm(this.$t("systemRole.message.confirmStatusChange", { action: text, roleName: row.roleName })) |
||||
|
.then(() => changeRoleStatus(row.roleId, row.status)) |
||||
|
.then(() => { |
||||
|
this.$modal.msgSuccess(this.$t("systemRole.message.statusChangeSuccess", { action: text })); |
||||
|
}) |
||||
|
.catch(() => { |
||||
|
row.status = row.status === "0" ? "1" : "0"; |
||||
|
}); |
||||
|
}, |
||||
|
cancel() { |
||||
|
this.open = false; |
||||
|
this.reset(); |
||||
|
}, |
||||
|
cancelDataScope() { |
||||
|
this.openDataScope = false; |
||||
|
this.reset(); |
||||
|
}, |
||||
|
reset() { |
||||
|
if (this.$refs.menu !== undefined) { |
||||
|
this.$refs.menu.setCheckedKeys([]); |
||||
|
} |
||||
|
this.menuExpand = false; |
||||
|
this.menuNodeAll = false; |
||||
|
this.deptExpand = true; |
||||
|
this.deptNodeAll = false; |
||||
|
this.form = { |
||||
|
roleId: undefined, |
||||
|
roleName: undefined, |
||||
|
roleKey: undefined, |
||||
|
roleSort: 0, |
||||
|
status: 0, |
||||
|
menuIds: [], |
||||
|
deptIds: [], |
||||
|
menuCheckStrictly: true, |
||||
|
deptCheckStrictly: true, |
||||
|
remark: undefined, |
||||
|
}; |
||||
|
this.resetForm("form"); |
||||
|
}, |
||||
|
handleQuery() { |
||||
|
this.queryParams.pageNum = 1; |
||||
|
this.getList(); |
||||
|
}, |
||||
|
resetQuery() { |
||||
|
this.dateRange = []; |
||||
|
this.resetForm("queryForm"); |
||||
|
this.handleQuery(); |
||||
|
}, |
||||
|
handleSelectionChange(selection) { |
||||
|
this.ids = selection.map((item) => item.roleId); |
||||
|
this.single = selection.length !== 1; |
||||
|
this.multiple = !selection.length; |
||||
|
}, |
||||
|
handleCommand(command, row) { |
||||
|
switch (command) { |
||||
|
case "handleDataScope": |
||||
|
this.handleDataScope(row); |
||||
|
break; |
||||
|
case "handleAuthUser": |
||||
|
this.handleAuthUser(row); |
||||
|
break; |
||||
|
default: |
||||
|
break; |
||||
|
} |
||||
|
}, |
||||
|
handleCheckedTreeExpand(value, type) { |
||||
|
if (type === "menu") { |
||||
|
const treeList = this.menuOptions; |
||||
|
for (let i = 0; i < treeList.length; i += 1) { |
||||
|
this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value; |
||||
|
} |
||||
|
} else if (type === "dept") { |
||||
|
const treeList = this.deptOptions; |
||||
|
for (let i = 0; i < treeList.length; i += 1) { |
||||
|
this.$refs.dept.store.nodesMap[treeList[i].id].expanded = value; |
||||
} |
} |
||||
|
} |
||||
}, |
}, |
||||
created() { |
handleCheckedTreeNodeAll(value, type) { |
||||
this.getList() |
if (type === "menu") { |
||||
|
this.$refs.menu.setCheckedNodes(value ? this.menuOptions : []); |
||||
|
} else if (type === "dept") { |
||||
|
this.$refs.dept.setCheckedNodes(value ? this.deptOptions : []); |
||||
|
} |
||||
}, |
}, |
||||
methods: { |
handleCheckedTreeConnect(value, type) { |
||||
/** 查询角色列表 */ |
if (type === "menu") { |
||||
getList() { |
this.form.menuCheckStrictly = !!value; |
||||
this.loading = true |
} else if (type === "dept") { |
||||
listRole(this.addDateRange(this.queryParams, this.dateRange)).then(response => { |
this.form.deptCheckStrictly = !!value; |
||||
this.roleList = response.data.list |
} |
||||
this.total = response.data.total |
}, |
||||
this.loading = false |
handleAdd() { |
||||
}) |
this.reset(); |
||||
}, |
this.getMenuTreeselect(); |
||||
/** 查询菜单树结构 */ |
this.open = true; |
||||
getMenuTreeselect() { |
this.title = this.$t("systemRole.dialog.addTitle"); |
||||
menuTreeselect().then(response => { |
}, |
||||
this.menuOptions = response.data |
handleUpdate(row) { |
||||
}) |
this.reset(); |
||||
}, |
const roleId = row.roleId || this.ids; |
||||
// 所有菜单节点数据 |
const roleMenu = this.getRoleMenuTreeselect(roleId); |
||||
getMenuAllCheckedKeys() { |
getRole(roleId).then((response) => { |
||||
// 目前被选中的菜单节点 |
this.form = response.data; |
||||
let checkedKeys = this.$refs.menu.getCheckedKeys() |
this.open = true; |
||||
// 半选中的菜单节点 |
this.$nextTick(() => { |
||||
let halfCheckedKeys = this.$refs.menu.getHalfCheckedKeys() |
roleMenu.then((res) => { |
||||
checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys) |
const checkedKeys = res.checkedKeys; |
||||
return checkedKeys |
checkedKeys.forEach((value) => { |
||||
}, |
this.$nextTick(() => { |
||||
// 所有部门节点数据 |
this.$refs.menu.setChecked(value, true, false); |
||||
getDeptAllCheckedKeys() { |
}); |
||||
// 目前被选中的部门节点 |
}); |
||||
let checkedKeys = this.$refs.dept.getCheckedKeys() |
}); |
||||
// 半选中的部门节点 |
}); |
||||
let halfCheckedKeys = this.$refs.dept.getHalfCheckedKeys() |
}); |
||||
checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys) |
this.title = this.$t("systemRole.dialog.editTitle"); |
||||
return checkedKeys |
}, |
||||
}, |
dataScopeSelectChange(value) { |
||||
/** 根据角色ID查询菜单树结构 */ |
if (value !== "2") { |
||||
getRoleMenuTreeselect(roleId) { |
this.$refs.dept.setCheckedKeys([]); |
||||
return roleMenuTreeselect(roleId).then(response => { |
} |
||||
this.menuOptions = response.menus |
}, |
||||
return response |
handleDataScope(row) { |
||||
}) |
this.reset(); |
||||
}, |
const deptTree = this.getDeptTree(row.roleId); |
||||
/** 根据角色ID查询部门树结构 */ |
getRole(row.roleId).then((response) => { |
||||
getDeptTree(roleId) { |
this.form = response.data; |
||||
return deptTreeSelect(roleId).then(response => { |
this.openDataScope = true; |
||||
this.deptOptions = response.depts |
this.$nextTick(() => { |
||||
return response |
deptTree.then((res) => { |
||||
}) |
this.$refs.dept.setCheckedKeys(res.checkedKeys); |
||||
}, |
}); |
||||
// 角色状态修改 |
}); |
||||
handleStatusChange(row) { |
}); |
||||
let text = row.status === "0" ? "启用" : "停用" |
this.title = this.$t("systemRole.dialog.dataScopeTitle"); |
||||
this.$modal.confirm('确认要"' + text + '""' + row.roleName + '"角色吗?').then(function () { |
}, |
||||
return changeRoleStatus(row.roleId, row.status) |
handleAuthUser(row) { |
||||
}).then(() => { |
this.$router.push("/system/role-auth/user/" + row.roleId); |
||||
this.$modal.msgSuccess(text + "成功") |
}, |
||||
}).catch(function () { |
submitForm() { |
||||
row.status = row.status === "0" ? "1" : "0" |
this.$refs.form.validate((valid) => { |
||||
}) |
if (!valid) { |
||||
}, |
return; |
||||
// 取消按钮 |
|
||||
cancel() { |
|
||||
this.open = false |
|
||||
this.reset() |
|
||||
}, |
|
||||
// 取消按钮(数据权限) |
|
||||
cancelDataScope() { |
|
||||
this.openDataScope = false |
|
||||
this.reset() |
|
||||
}, |
|
||||
// 表单重置 |
|
||||
reset() { |
|
||||
if (this.$refs.menu != undefined) { |
|
||||
this.$refs.menu.setCheckedKeys([]) |
|
||||
} |
|
||||
this.menuExpand = false |
|
||||
this.menuNodeAll = false |
|
||||
this.deptExpand = true |
|
||||
this.deptNodeAll = false |
|
||||
this.form = { |
|
||||
roleId: undefined, |
|
||||
roleName: undefined, |
|
||||
roleKey: undefined, |
|
||||
roleSort: 0, |
|
||||
status: 0, |
|
||||
menuIds: [], |
|
||||
deptIds: [], |
|
||||
menuCheckStrictly: true, |
|
||||
deptCheckStrictly: true, |
|
||||
remark: undefined |
|
||||
} |
|
||||
this.resetForm("form") |
|
||||
}, |
|
||||
/** 搜索按钮操作 */ |
|
||||
handleQuery() { |
|
||||
this.queryParams.pageNum = 1 |
|
||||
this.getList() |
|
||||
}, |
|
||||
/** 重置按钮操作 */ |
|
||||
resetQuery() { |
|
||||
this.dateRange = [] |
|
||||
this.resetForm("queryForm") |
|
||||
this.handleQuery() |
|
||||
}, |
|
||||
// 多选框选中数据 |
|
||||
handleSelectionChange(selection) { |
|
||||
this.ids = selection.map(item => item.roleId) |
|
||||
this.single = selection.length != 1 |
|
||||
this.multiple = !selection.length |
|
||||
}, |
|
||||
// 更多操作触发 |
|
||||
handleCommand(command, row) { |
|
||||
switch (command) { |
|
||||
case "handleDataScope": |
|
||||
this.handleDataScope(row) |
|
||||
break |
|
||||
case "handleAuthUser": |
|
||||
this.handleAuthUser(row) |
|
||||
break |
|
||||
default: |
|
||||
break |
|
||||
} |
|
||||
}, |
|
||||
// 树权限(展开/折叠) |
|
||||
handleCheckedTreeExpand(value, type) { |
|
||||
if (type == 'menu') { |
|
||||
let treeList = this.menuOptions |
|
||||
for (let i = 0; i < treeList.length; i++) { |
|
||||
this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value |
|
||||
} |
|
||||
} else if (type == 'dept') { |
|
||||
let treeList = this.deptOptions |
|
||||
for (let i = 0; i < treeList.length; i++) { |
|
||||
this.$refs.dept.store.nodesMap[treeList[i].id].expanded = value |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
// 树权限(全选/全不选) |
|
||||
handleCheckedTreeNodeAll(value, type) { |
|
||||
if (type == 'menu') { |
|
||||
this.$refs.menu.setCheckedNodes(value ? this.menuOptions : []) |
|
||||
} else if (type == 'dept') { |
|
||||
this.$refs.dept.setCheckedNodes(value ? this.deptOptions : []) |
|
||||
} |
|
||||
}, |
|
||||
// 树权限(父子联动) |
|
||||
handleCheckedTreeConnect(value, type) { |
|
||||
if (type == 'menu') { |
|
||||
this.form.menuCheckStrictly = value ? true : false |
|
||||
} else if (type == 'dept') { |
|
||||
this.form.deptCheckStrictly = value ? true : false |
|
||||
} |
|
||||
}, |
|
||||
/** 新增按钮操作 */ |
|
||||
handleAdd() { |
|
||||
this.reset() |
|
||||
this.getMenuTreeselect() |
|
||||
this.open = true |
|
||||
this.title = "添加角色" |
|
||||
}, |
|
||||
/** 修改按钮操作 */ |
|
||||
handleUpdate(row) { |
|
||||
this.reset() |
|
||||
const roleId = row.roleId || this.ids |
|
||||
const roleMenu = this.getRoleMenuTreeselect(roleId) |
|
||||
getRole(roleId).then(response => { |
|
||||
this.form = response.data |
|
||||
this.open = true |
|
||||
this.$nextTick(() => { |
|
||||
roleMenu.then(res => { |
|
||||
let checkedKeys = res.checkedKeys |
|
||||
checkedKeys.forEach((v) => { |
|
||||
this.$nextTick(() => { |
|
||||
this.$refs.menu.setChecked(v, true, false) |
|
||||
}) |
|
||||
}) |
|
||||
}) |
|
||||
}) |
|
||||
}) |
|
||||
this.title = "修改角色" |
|
||||
}, |
|
||||
/** 选择角色权限范围触发 */ |
|
||||
dataScopeSelectChange(value) { |
|
||||
if (value !== '2') { |
|
||||
this.$refs.dept.setCheckedKeys([]) |
|
||||
} |
|
||||
}, |
|
||||
/** 分配数据权限操作 */ |
|
||||
handleDataScope(row) { |
|
||||
this.reset() |
|
||||
const deptTreeSelect = this.getDeptTree(row.roleId) |
|
||||
getRole(row.roleId).then(response => { |
|
||||
this.form = response.data |
|
||||
this.openDataScope = true |
|
||||
this.$nextTick(() => { |
|
||||
deptTreeSelect.then(res => { |
|
||||
this.$refs.dept.setCheckedKeys(res.checkedKeys) |
|
||||
}) |
|
||||
}) |
|
||||
}) |
|
||||
this.title = "分配数据权限" |
|
||||
}, |
|
||||
/** 分配用户操作 */ |
|
||||
handleAuthUser: function (row) { |
|
||||
const roleId = row.roleId |
|
||||
this.$router.push("/system/role-auth/user/" + roleId) |
|
||||
}, |
|
||||
/** 提交按钮 */ |
|
||||
submitForm: function () { |
|
||||
this.$refs["form"].validate(valid => { |
|
||||
if (valid) { |
|
||||
if (this.form.roleId != undefined) { |
|
||||
this.form.menuIds = this.getMenuAllCheckedKeys() |
|
||||
updateRole(this.form).then(response => { |
|
||||
this.$modal.msgSuccess("修改成功") |
|
||||
this.open = false |
|
||||
this.getList() |
|
||||
}) |
|
||||
} else { |
|
||||
this.form.menuIds = this.getMenuAllCheckedKeys() |
|
||||
addRole(this.form).then(response => { |
|
||||
this.$modal.msgSuccess("新增成功") |
|
||||
this.open = false |
|
||||
this.getList() |
|
||||
}) |
|
||||
} |
|
||||
} |
|
||||
}) |
|
||||
}, |
|
||||
/** 提交按钮(数据权限) */ |
|
||||
submitDataScope: function () { |
|
||||
if (this.form.roleId != undefined) { |
|
||||
this.form.deptIds = this.getDeptAllCheckedKeys() |
|
||||
dataScope(this.form).then(response => { |
|
||||
this.$modal.msgSuccess("修改成功") |
|
||||
this.openDataScope = false |
|
||||
this.getList() |
|
||||
}) |
|
||||
} |
|
||||
}, |
|
||||
/** 删除按钮操作 */ |
|
||||
handleDelete(row) { |
|
||||
const roleIds = row.roleId || this.ids |
|
||||
this.$modal.confirm('是否确认删除角色编号为"' + roleIds + '"的数据项?').then(function () { |
|
||||
return delRole(roleIds) |
|
||||
}).then(() => { |
|
||||
this.getList() |
|
||||
this.$modal.msgSuccess("删除成功") |
|
||||
}).catch(() => {}) |
|
||||
}, |
|
||||
/** 导出按钮操作 */ |
|
||||
handleExport() { |
|
||||
this.download('system/role/export', { |
|
||||
...this.queryParams |
|
||||
}, `role_${new Date().getTime()}.xlsx`) |
|
||||
} |
} |
||||
} |
this.form.menuIds = this.getMenuAllCheckedKeys(); |
||||
} |
const request = this.form.roleId !== undefined ? updateRole(this.form) : addRole(this.form); |
||||
|
request.then(() => { |
||||
|
this.$modal.msgSuccess( |
||||
|
this.form.roleId !== undefined ? this.$t("systemRole.message.editSuccess") : this.$t("systemRole.message.addSuccess") |
||||
|
); |
||||
|
this.open = false; |
||||
|
this.getList(); |
||||
|
}); |
||||
|
}); |
||||
|
}, |
||||
|
submitDataScope() { |
||||
|
if (this.form.roleId !== undefined) { |
||||
|
this.form.deptIds = this.getDeptAllCheckedKeys(); |
||||
|
dataScope(this.form).then(() => { |
||||
|
this.$modal.msgSuccess(this.$t("systemRole.message.editSuccess")); |
||||
|
this.openDataScope = false; |
||||
|
this.getList(); |
||||
|
}); |
||||
|
} |
||||
|
}, |
||||
|
handleDelete(row) { |
||||
|
const roleIds = row.roleId || this.ids; |
||||
|
this.$modal |
||||
|
.confirm(this.$t("systemRole.message.confirmDelete", { roleIds })) |
||||
|
.then(() => delRole(roleIds)) |
||||
|
.then(() => { |
||||
|
this.getList(); |
||||
|
this.$modal.msgSuccess(this.$t("systemRole.message.deleteSuccess")); |
||||
|
}) |
||||
|
.catch(() => {}); |
||||
|
}, |
||||
|
handleExport() { |
||||
|
this.download( |
||||
|
"system/role/export", |
||||
|
{ |
||||
|
...this.queryParams, |
||||
|
}, |
||||
|
`role_${new Date().getTime()}.xlsx` |
||||
|
); |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
</script> |
</script> |
||||
|
|||||
File diff suppressed because it is too large
Loading…
Reference in new issue