Browse Source

角色管理-全宗管理-菜单管理 03-30

master
xuhuajiao 2 years ago
parent
commit
f7b177bf78
  1. 17
      src/assets/styles/mixin.scss
  2. 58
      src/assets/styles/yxk-admin.scss
  3. 2
      src/views/system/dept/index.vue
  4. 338
      src/views/system/groupManage/index.vue
  5. 76
      src/views/system/menu/index.vue
  6. 69
      src/views/system/role/index.vue

17
src/assets/styles/mixin.scss

@ -262,11 +262,11 @@
@mixin tree_tab_item{
[data-theme="dark"] & {
padding: 15px 0;
padding: 15px 0 12px 0;
}
[data-theme="light"] & {
color: #A6ADB6;
padding-bottom: 15px;
padding-bottom: 12px;
}
}
@ -282,8 +282,8 @@
@mixin tree_no_header{
[data-theme="dark"] & {
margin-top:120px;
min-height: calc(100vh - 260px);
margin-top:122px;
min-height: calc(100vh - 262px);
padding: 0 20px;
}
}
@ -546,3 +546,12 @@
background-color: #D6DBE7 !important;
}
}
@mixin row_height_min{
[data-theme="dark"] & {
min-height: calc(100vh - 262px);
}
[data-theme="light"] & {
min-height: calc(100vh - 282px);
}
}

58
src/assets/styles/yxk-admin.scss

@ -8,7 +8,6 @@
}
.container-left{
@include tree_height_min;
@include tree_no_header;
}
}
.elect-cont-right{
@ -23,6 +22,12 @@
}
}
.role-cont-left{
.container-left{
@include tree_no_header;
}
}
.hideSidebar{
// siderbar-收起 54 + 间距 60 + treeLeft 265
.elect-cont-right{
@ -36,6 +41,15 @@
}
}
.row-container{
@include bg_color;
@include box_padding;
.container-wrap{
margin-top: 20px;
@include row_height_min;
}
}
.head-container {
// padding: 20px;
@ -319,13 +333,7 @@
background-color: transparent;
}
.el-checkbox__input.is-checked .el-checkbox__inner{
@include checkbox-active-style;
}
.el-checkbox__input.is-disabled .el-checkbox__inner{
@include checkbox-disabled-style;
}
.el-table__body tr.hover-row > td,
.el-table__body tr.hover-row.current-row > td,
@ -496,7 +504,8 @@
}
.el-form-item__content{
width: 225px;
.el-input__inner{
.el-input__inner,
.el-textarea__inner{
border-color: #E6E8ED;
&:focus{
border-color:#0348F3;
@ -606,7 +615,6 @@
// }
}
// position: relative;
// position: fixed;
// width: 620px;
@ -735,6 +743,7 @@
// }
}
.dialog-footer,
.el-message-box__btns{
display: flex;
@ -1164,6 +1173,23 @@ input[type ='number'] {
// color: #fff;
// }
.dialog-middle{
.el-dialog{
width: 536px;
.el-dialog__body {
.el-form-item {
.el-form-item__content{
width: 400px;
}
&:nth-child(odd){
margin-right: 0;
}
}
}
}
}
.el-message-box{
width: 504px;
padding: 0 20px 30px 20px;
@ -1545,6 +1571,7 @@ input[type ='number'] {
font-size: 14px;
@include tree_tab_item;
line-height: 26px;
cursor: pointer;
&.role-tab-active{
font-size: 16px;
@include tree_tab_item_active;
@ -1557,3 +1584,16 @@ input[type ='number'] {
}
}
// checkbox
.el-checkbox__input.is-checked .el-checkbox__inner{
@include checkbox-active-style;
}
.el-checkbox__input.is-indeterminate .el-checkbox__inner{
@include checkbox-active-style;
}
.el-checkbox__input.is-disabled .el-checkbox__inner{
@include checkbox-disabled-style;
}

2
src/views/system/dept/index.vue

@ -75,7 +75,7 @@
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU"></el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU"></el-button>
</div>
</div>
</el-dialog>

338
src/views/system/groupManage/index.vue

@ -0,0 +1,338 @@
<template>
<div class="app-container">
<div class="container-main" style="justify-content: flex-start;">
<!--侧边部门数据-->
<div class="elect-cont-right">
<!--工具栏-->
<div class="head-container">
<div v-if="crud.props.searchToggle" class="head-search">
<!-- 搜索 -->
<el-input v-model="query.blurry" size="small" clearable placeholder="输入全宗名称搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<date-range-picker v-model="query.createTime" class="date-item" />
<rrOperation />
</div>
<crudOperation :permission="permission" />
</div>
<div class="container-right">
<span class="right-top-line" />
<span class="left-bottom-line" />
<!-- 表单渲染 -->
<el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" class="group-form">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="90px">
<el-row>
<el-form-item label="全宗号" prop="groupNumber">
<el-input v-model="form.groupNumber" />
</el-form-item>
</el-row>
<el-form-item label="全宗名称" prop="groupName" class="form-item-style">
<el-input v-model="form.groupName" />
</el-form-item>
<el-form-item label="全宗简称" prop="groupShort">
<el-input v-model="form.groupShort" />
</el-form-item>
<el-form-item label="排序" prop="sort" class="form-item-style">
<el-input-number
v-model.number="form.sort"
:min="0"
:max="999"
controls-position="right"
/>
</el-form-item>
<el-form-item label="状态" prop="enabled">
<el-radio label="启用" />
<el-radio label="停用" />
</el-form-item>
<el-form-item label="备注" prop="description">
<el-input v-model="form.description" style="width: 586px;" rows="5" type="textarea" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
</div>
</div>
</el-dialog>
<el-table ref="table" v-loading="crud.loading" highlight-current-row style="width: 100%;" :data="crud.data" @selection-change="crud.selectionChangeHandler" @current-change="handleCurrentChange">
<el-table-column :selectable="checkboxT" type="selection" align="center" width="55" />
<el-table-column prop="groupNumber" label="全宗号" />
<el-table-column prop="groupName" label="全宗名称" />
<el-table-column prop="dept" label="部门" />
<el-table-column prop="sort" label="排序" />
<el-table-column label="状态" align="center" prop="enabled" width="60">
<template slot-scope="scope">
<el-switch v-model="scope.row.enabled" />
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" prop="createTime" label="创建日期">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<pagination />
</div>
</div>
<div class="elect-cont-left role-cont-left" style="margin: 0 0 0 20px;">
<div class="container-left">
<span class="right-top-line" />
<span class="left-bottom-line" />
<div slot="header" class="tree-tab">
<el-tooltip class="item" effect="dark" content="选择门类关联" placement="top">
<span class="role-span role-tab-active">门类关联</span>
</el-tooltip>
<el-button
v-permission="['admin','roles:edit']"
:disabled="!showButton"
:loading="menuLoading"
size="mini"
@click="saveMenu"
>保存</el-button>
</div>
<el-tree
ref="menu"
lazy
:data="menus"
:default-checked-keys="menuIds"
:load="getMenuDatas"
:props="defaultProps"
check-strictly
accordion
show-checkbox
node-key="id"
@check="menuChange"
/>
</div>
</div>
</div>
</div>
</template>
<script>
import crudRoles from '@/api/system/role'
import { getDepts, getDeptSuperior } from '@/api/system/dept'
import { getMenusTree, getChild } from '@/api/system/menu'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import pagination from '@crud/Pagination'
import DateRangePicker from '@/components/DateRangePicker'
const defaultForm = { groupNumber: null, groupName: null, groupShort: null, description: null, enabled: 'true', sort: '' }
export default {
name: 'Group',
components: { pagination, crudOperation, rrOperation, DateRangePicker },
cruds() {
return CRUD({ title: '全宗', url: 'api/roles', sort: 'level,asc', crudMethod: { ...crudRoles }})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
data() {
return {
defaultProps: { children: 'children', label: 'label', isLeaf: 'leaf' },
currentId: 0, menuLoading: false, showButton: false,
menus: [], menuIds: [], depts: [], deptDatas: [], // 使
permission: {
add: ['admin', 'roles:add'],
edit: ['admin', 'roles:edit'],
del: ['admin', 'roles:del']
},
rules: {
groupNumber: [
{ required: true, message: '请输入全宗号', trigger: 'blur' }
],
groupName: [
{ required: true, message: '请输入全宗名称', trigger: 'blur' }
],
groupShort: [
{ required: true, message: '请输入全宗简称', trigger: 'blur' }
],
sort: [
{ required: true, message: '请输入排序', trigger: 'blur' }
],
enabled: [
{ required: true, message: '请选择状态', trigger: 'change' }
]
}
}
},
created() {
crudRoles.getLevel().then(data => {
this.level = data.level
})
},
methods: {
getMenuDatas(node, resolve) {
setTimeout(() => {
getMenusTree(node.data.id ? node.data.id : 0).then(res => {
resolve(res)
})
}, 100)
},
[CRUD.HOOK.afterRefresh]() {
this.$refs.menu.setCheckedKeys([])
},
//
[CRUD.HOOK.beforeToAdd](crud, form) {
this.deptDatas = []
form.menus = null
},
//
[CRUD.HOOK.beforeToEdit](crud, form) {
this.deptDatas = []
if (form.dataScope === '自定义') {
this.getSupDepts(form.depts)
}
const _this = this
form.depts.forEach(function(dept) {
_this.deptDatas.push(dept.id)
})
//
form.menus = null
},
//
[CRUD.HOOK.afterValidateCU](crud) {
if (crud.form.dataScope === '自定义' && this.deptDatas.length === 0) {
this.$message({
message: '自定义数据权限不能为空',
type: 'warning'
})
return false
} else if (crud.form.dataScope === '自定义') {
const depts = []
this.deptDatas.forEach(function(data) {
const dept = { id: data }
depts.push(dept)
})
crud.form.depts = depts
} else {
crud.form.depts = []
}
return true
},
//
handleCurrentChange(val) {
if (val) {
const _this = this
//
this.$refs.menu.setCheckedKeys([])
// id
this.currentId = val.id
// key
this.menuIds = []
val.menus.forEach(function(data) {
_this.menuIds.push(data.id)
})
this.showButton = true
}
},
menuChange(menu) {
// id
getChild(menu.id).then(childIds => {
// menuIds
if (this.menuIds.indexOf(menu.id) !== -1) {
for (let i = 0; i < childIds.length; i++) {
const index = this.menuIds.indexOf(childIds[i])
if (index !== -1) {
this.menuIds.splice(index, 1)
}
}
} else {
for (let i = 0; i < childIds.length; i++) {
const index = this.menuIds.indexOf(childIds[i])
if (index === -1) {
this.menuIds.push(childIds[i])
}
}
}
this.$refs.menu.setCheckedKeys(this.menuIds)
})
},
//
saveMenu() {
this.menuLoading = true
const role = { id: this.currentId, menus: [] }
// key
this.menuIds.forEach(function(id) {
const menu = { id: id }
role.menus.push(menu)
})
crudRoles.editMenu(role).then(() => {
this.crud.notify('保存成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.menuLoading = false
this.update()
}).catch(err => {
this.menuLoading = false
console.log(err.response.data.message)
})
},
//
update() {
//
crudRoles.get(this.currentId).then(res => {
for (let i = 0; i < this.crud.data.length; i++) {
if (res.id === this.crud.data[i].id) {
this.crud.data[i] = res
break
}
}
})
},
//
getDepts() {
getDepts({ enabled: true }).then(res => {
this.depts = res.content.map(function(obj) {
if (obj.hasChildren) {
obj.children = null
}
return obj
})
})
},
getSupDepts(depts) {
const ids = []
depts.forEach(dept => {
ids.push(dept.id)
})
getDeptSuperior(ids).then(res => {
const date = res.content
this.buildDepts(date)
this.depts = date
})
},
buildDepts(depts) {
depts.forEach(data => {
if (data.children) {
this.buildDepts(data.children)
}
if (data.hasChildren && !data.children) {
data.children = null
}
})
},
checkboxT(row) {
return row.level >= this.level
}
}
}
</script>
<style lang="scss" scoped>
.group-form{
.el-form-item{
&:nth-child(odd){
margin-right: 0;
}
&.form-item-style{
margin-right: 40px;
}
}
}
.tree-tab span.role-span.role-tab-active{
border-bottom: none;
}
</style>

76
src/views/system/menu/index.vue

@ -1,6 +1,5 @@
<template>
<div>
<div class="app-container row-container">
<!--工具栏-->
<div class="head-container">
<div v-if="crud.props.searchToggle" class="head-search">
@ -17,6 +16,7 @@
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="80px">
<el-row>
<el-form-item label="菜单类型" prop="type">
<el-radio-group v-model="form.type" size="mini" style="width: 178px">
<el-radio-button label="0">目录</el-radio-button>
@ -24,6 +24,8 @@
<el-radio-button label="2">按钮</el-radio-button>
</el-radio-group>
</el-form-item>
</el-row>
<el-row>
<el-form-item v-show="form.type.toString() !== '2'" label="菜单图标" prop="icon">
<el-popover
placement="bottom-start"
@ -38,45 +40,57 @@
</el-input>
</el-popover>
</el-form-item>
<el-form-item v-show="form.type.toString() !== '2'" label="外链菜单" prop="iFrame">
</el-row>
<el-row>
<!-- <el-col :span="8"> -->
<el-form-item v-show="form.type.toString() !== '2'" label="外链菜单" prop="iFrame" style="width: 180px; margin-right: 0;">
<el-radio-group v-model="form.iFrame" size="mini">
<el-radio-button label="true"></el-radio-button>
<el-radio-button label="false"></el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-show="form.type.toString() === '1'" label="菜单缓存" prop="cache">
<el-radio-group v-model="form.cache" size="mini">
<el-radio-button label="true"></el-radio-button>
<el-radio-button label="false"></el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-show="form.type.toString() !== '2'" label="菜单可见" prop="hidden">
<!-- </el-col>
<el-col :span="8"> -->
<el-form-item v-show="form.type.toString() !== '2'" label="菜单可见" prop="hidden" style="width: 180px; margin-right: 0;">
<el-radio-group v-model="form.hidden" size="mini">
<el-radio-button label="false"></el-radio-button>
<el-radio-button label="true"></el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-if="form.type.toString() !== '2'" label="菜单标题" prop="title">
<el-input v-model="form.title" :style=" form.type.toString() === '0' ? 'width: 450px' : 'width: 178px'" placeholder="菜单标题" />
<!-- </el-col>
<el-col :span="8"> -->
<el-form-item v-show="form.type.toString() === '1'" label="菜单缓存" prop="cache" style="width: 180px; margin-right: 0;">
<el-radio-group v-model="form.cache" size="mini">
<el-radio-button label="true"></el-radio-button>
<el-radio-button label="false"></el-radio-button>
</el-radio-group>
</el-form-item>
<!-- </el-col> -->
</el-row>
<el-form-item v-if="form.type.toString() !== '2'" label="菜单名称" prop="title">
<el-input v-model="form.title" :style=" form.type.toString() === '0' ? 'width: 580px' : 'width: 225px'" placeholder="菜单标题" />
</el-form-item>
<el-row>
<el-form-item v-if="form.type.toString() === '2'" label="按钮名称" prop="title">
<el-input v-model="form.title" placeholder="按钮名称" style="width: 178px;" />
<el-input v-model="form.title" placeholder="按钮名称" style="width:580px;" />
</el-form-item>
</el-row>
<el-form-item v-show="form.type.toString() !== '0'" label="权限标识" prop="permission">
<el-input v-model="form.permission" :disabled="form.iFrame.toString() === 'true'" placeholder="权限标识" style="width: 178px;" />
<el-input v-model="form.permission" :disabled="form.iFrame.toString() === 'true'" placeholder="权限标识" />
</el-form-item>
<el-form-item v-if="form.type.toString() !== '2'" label="路由地址" prop="path">
<el-input v-model="form.path" placeholder="路由地址" style="width: 178px;" />
<el-input v-model="form.path" placeholder="路由地址" />
</el-form-item>
<el-form-item label="菜单排序" prop="menuSort">
<el-input-number v-model.number="form.menuSort" :min="0" :max="999" controls-position="right" style="width: 178px;" />
<el-input-number v-model.number="form.menuSort" :min="0" :max="999" controls-position="right" />
</el-form-item>
<el-form-item v-show="form.iFrame.toString() !== 'true' && form.type.toString() === '1'" label="组件名称" prop="componentName">
<el-input v-model="form.componentName" style="width: 178px;" placeholder="匹配组件内Name字段" />
<el-input v-model="form.componentName" placeholder="匹配组件内Name字段" />
</el-form-item>
<el-form-item v-show="form.iFrame.toString() !== 'true' && form.type.toString() === '1'" label="组件路径" prop="component">
<el-input v-model="form.component" style="width: 178px;" placeholder="组件路径" />
<el-input v-model="form.component" placeholder="组件路径" />
</el-form-item>
<el-row>
<el-form-item label="上级类目" prop="pid">
<treeselect
v-model="form.pid"
@ -86,6 +100,7 @@
placeholder="选择上级类目"
/>
</el-form-item>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
@ -94,7 +109,7 @@
</div>
</el-dialog>
<!--表格渲染-->
<div class="app-container container-wrap" style="margin-top:0;min-height: calc(100vh - 292px);">
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<el-table
@ -110,19 +125,19 @@
@selection-change="crud.selectionChangeHandler"
>
<el-table-column type="selection" align="center" width="55" />
<el-table-column :show-overflow-tooltip="true" label="菜单标题" width="125px" prop="title" />
<el-table-column prop="icon" label="图标" align="center" width="60px">
<el-table-column :show-overflow-tooltip="true" label="菜单标题" width="300px" prop="title" />
<el-table-column prop="icon" label="图标" align="center" width="75px">
<template slot-scope="scope">
<svg-icon :icon-class="scope.row.icon ? scope.row.icon : ''" />
</template>
</el-table-column>
<el-table-column prop="menuSort" align="center" label="排序">
<el-table-column :show-overflow-tooltip="true" prop="permission" label="权限标识" />
<el-table-column :show-overflow-tooltip="true" prop="component" label="组件路径" />
<el-table-column prop="menuSort" align="center" label="排序" width="100px">
<template slot-scope="scope">
{{ scope.row.menuSort }}
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" prop="permission" label="权限标识" />
<el-table-column :show-overflow-tooltip="true" prop="component" label="组件路径" />
<el-table-column prop="iFrame" label="外链" width="75px">
<template slot-scope="scope">
<span v-if="scope.row.iFrame"></span>
@ -141,12 +156,12 @@
<span v-else></span>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建日期" width="150px">
<el-table-column prop="createTime" label="创建日期" width="200px">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
<el-table-column v-if="checkPer(['admin','menu:edit','menu:del'])" label="操作" width="130px" align="center" fixed="right">
<!-- <el-table-column v-if="checkPer(['admin','menu:edit','menu:del'])" label="操作" width="130px" align="center" fixed="right">
<template slot-scope="scope">
<udOperation
:data="scope.row"
@ -154,7 +169,7 @@
msg="确定删除吗,如果存在下级节点则一并删除,此操作不能撤销!"
/>
</template>
</el-table-column>
</el-table-column> -->
</el-table>
</div>
</div>
@ -169,14 +184,13 @@ import { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import DateRangePicker from '@/components/DateRangePicker'
// crudpresenter
const defaultForm = { id: null, title: null, menuSort: 999, path: null, component: null, componentName: null, iFrame: false, roles: [], pid: 0, icon: null, cache: false, hidden: false, type: 0, permission: null }
export default {
name: 'Menu',
components: { Treeselect, IconSelect, crudOperation, rrOperation, udOperation, DateRangePicker },
components: { Treeselect, IconSelect, crudOperation, rrOperation, DateRangePicker },
cruds() {
return CRUD({ title: '菜单', url: 'api/menus', crudMethod: { ...crudMenu }})
},
@ -258,8 +272,4 @@ export default {
::v-deep .el-input-number .el-input__inner {
text-align: left;
}
// ::v-deep .vue-treeselect__control,::v-deep .vue-treeselect__placeholder,::v-deep .vue-treeselect__single-value {
// height: 30px;
// line-height: 30px;
// }
</style>

69
src/views/system/role/index.vue

@ -17,44 +17,21 @@
<span class="right-top-line" />
<span class="left-bottom-line" />
<!-- 表单渲染 -->
<el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title">
<el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" class="dialog-middle">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="80px">
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="85px">
<el-form-item label="角色名称" prop="name">
<el-input v-model="form.name" style="width: 380px;" />
</el-form-item>
<el-form-item label="角色级别" prop="level">
<el-input-number v-model.number="form.level" :min="1" controls-position="right" style="width: 145px;" />
</el-form-item>
<el-form-item label="数据范围" prop="dataScope">
<el-select v-model="form.dataScope" style="width: 140px" placeholder="请选择数据范围" @change="changeScope">
<el-option
v-for="item in dateScopes"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item>
<el-form-item v-if="form.dataScope === '自定义'" label="数据权限" prop="depts">
<treeselect
v-model="deptDatas"
:load-options="loadDepts"
:options="depts"
multiple
style="width: 380px"
placeholder="请选择"
/>
<el-input v-model="form.name" />
</el-form-item>
<el-form-item label="描述信息" prop="description">
<el-input v-model="form.description" style="width: 380px;" rows="5" type="textarea" />
<el-input v-model="form.description" rows="5" type="textarea" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU"></el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确定</el-button>
</div>
</div>
</el-dialog>
@ -84,16 +61,16 @@
<pagination />
</div>
</div>
<div class="elect-cont-left" style="margin: 0 0 0 20px;">
<div class="elect-cont-left role-cont-left" style="margin: 0 0 0 20px;">
<div class="container-left">
<span class="right-top-line" />
<span class="left-bottom-line" />
<div slot="header" class="tree-tab">
<el-tooltip class="item" effect="dark" content="选择指定角色分配菜单" placement="top">
<span class="role-span role-tab-active">菜单分配</span>
<span :class="['role-span', {'role-tab-active': roleTabIndex == 0}]" @click="changeActiveTab(0)">菜单分配</span>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="选择指定角色分配菜单" placement="top">
<span class="role-span">全宗范围</span>
<el-tooltip class="item" effect="dark" content="选择指定角色分配全宗范围" placement="top">
<span :class="['role-span', {'role-tab-active': roleTabIndex == 1}]" @click="changeActiveTab(1)">全宗范围</span>
</el-tooltip>
<el-button
v-permission="['admin','roles:edit']"
@ -129,17 +106,13 @@ import { getMenusTree, getChild } from '@/api/system/menu'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
// import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect'
import DateRangePicker from '@/components/DateRangePicker'
const defaultForm = { id: null, name: null, depts: [], description: null, dataScope: '全部', level: 3 }
export default {
name: 'Role',
components: { Treeselect, pagination, crudOperation, rrOperation, DateRangePicker },
components: { pagination, crudOperation, rrOperation, DateRangePicker },
cruds() {
return CRUD({ title: '角色', url: 'api/roles', sort: 'level,asc', crudMethod: { ...crudRoles }})
},
@ -162,7 +135,8 @@ export default {
permission: [
{ required: true, message: '请输入权限', trigger: 'blur' }
]
}
},
roleTabIndex: 0
}
},
created() {
@ -171,6 +145,9 @@ export default {
})
},
methods: {
changeActiveTab(index) {
this.roleTabIndex = index
},
getMenuDatas(node, resolve) {
setTimeout(() => {
getMenusTree(node.data.id ? node.data.id : 0).then(res => {
@ -319,22 +296,6 @@ export default {
}
})
},
//
loadDepts({ action, parentNode, callback }) {
if (action === LOAD_CHILDREN_OPTIONS) {
getDepts({ enabled: true, pid: parentNode.id }).then(res => {
parentNode.children = res.content.map(function(obj) {
if (obj.hasChildren) {
obj.children = null
}
return obj
})
setTimeout(() => {
callback()
}, 200)
})
}
},
//
changeScope() {
if (this.form.dataScope === '自定义') {

Loading…
Cancel
Save