mirror of
https://gitee.com/ssssssss-team/magic-boot.git
synced 2026-05-15 00:00:02 +08:00
演示模式,后台权限code控制
This commit is contained in:
@@ -9,7 +9,6 @@ const { errorLog: needErrorLog } = settings
|
||||
|
||||
function checkNeed() {
|
||||
const env = process.env.NODE_ENV
|
||||
console.log(needErrorLog)
|
||||
if (isString(needErrorLog)) {
|
||||
return env === needErrorLog
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ const hasPermission = {
|
||||
bind(el, binding, vnode) {
|
||||
if (binding.value) {
|
||||
const permissionList = Vue.prototype.$authorities
|
||||
if (permissionList && permissionList.length && !permissionList.includes(binding.value)) {
|
||||
if (permissionList && permissionList.length && !permissionList.includes(binding.value) && process.env.NODE_ENV != 'preview') {
|
||||
el.style.display = 'none'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,6 +85,9 @@ service.interceptors.response.use(
|
||||
if(currentMessage){
|
||||
currentMessage.close()
|
||||
}
|
||||
if(res.code == 403 && process.env.NODE_ENV == 'preview'){
|
||||
res.message = '演示模式,不允许操作!'
|
||||
}
|
||||
currentMessage = Message({
|
||||
message: res.message || 'Error',
|
||||
type: 'error',
|
||||
|
||||
@@ -62,6 +62,7 @@ treeTable.deleteEmptyChildren = (children) => {
|
||||
}
|
||||
|
||||
treeTable.recursionSearch = (fields, data, text, html) => {
|
||||
html = html != undefined ? html : true
|
||||
var searchData = []
|
||||
for(var i in data){
|
||||
var treeNode = data[i]
|
||||
|
||||
@@ -144,7 +144,7 @@ export default {
|
||||
}
|
||||
},
|
||||
{
|
||||
permission: 'dict:items',
|
||||
permission: 'dict:items:view',
|
||||
title: '字典项',
|
||||
type: 'text',
|
||||
icon: 'el-icon-menu',
|
||||
|
||||
@@ -1,331 +0,0 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
|
||||
<el-button class="filter-item" style="margin-bottom:10px;" type="primary" icon="el-icon-edit" @click="addSubMenu('0')">
|
||||
添加菜单
|
||||
</el-button>
|
||||
|
||||
<dragTreeTable
|
||||
:data="treeData"
|
||||
:onDrag="onTreeDataChange"
|
||||
fixed
|
||||
height="100%"
|
||||
border>
|
||||
</dragTreeTable>
|
||||
<!-- <el-tree :data="menuTreeList"-->
|
||||
<!-- :props="defaultProps"-->
|
||||
<!-- node-key="id"-->
|
||||
<!-- :default-expanded-keys="menuTreeExpandedList"-->
|
||||
<!-- draggable>-->
|
||||
<!-- <span class="custom-tree-node" slot-scope="{ node, data }">-->
|
||||
<!-- <span>{{ node.label }}</span>-->
|
||||
<!-- <span>-->
|
||||
<!-- <el-button-->
|
||||
<!-- type="text"-->
|
||||
<!-- size="mini"-->
|
||||
<!-- style="width: 270px;text-align: left;color: #5a5e66;"-->
|
||||
<!-- @click="() => append(data)">-->
|
||||
<!-- {{ data.url }}-->
|
||||
<!-- </el-button>-->
|
||||
<!-- <el-button-->
|
||||
<!-- type="text"-->
|
||||
<!-- size="mini"-->
|
||||
<!-- style="width: 100px;text-align: left;color: #5a5e66;"-->
|
||||
<!-- @click="() => append(data)">-->
|
||||
<!-- {{ data.permission }}-->
|
||||
<!-- </el-button>-->
|
||||
<!-- <el-button-->
|
||||
<!-- type="text"-->
|
||||
<!-- size="mini"-->
|
||||
<!-- style="width: 100px;text-align: left;color: #5a5e66;"-->
|
||||
<!-- @click="() => append(data)">-->
|
||||
<!-- {{ data.sort }}-->
|
||||
<!-- </el-button>-->
|
||||
<!-- <el-button-->
|
||||
<!-- type="text"-->
|
||||
<!-- size="mini"-->
|
||||
<!-- style="width: 100px;text-align: left;color: #5a5e66;"-->
|
||||
<!-- @click="() => append(data)">-->
|
||||
<!-- {{ data.isShow }}-->
|
||||
<!-- </el-button>-->
|
||||
<!-- <el-button-->
|
||||
<!-- type="text"-->
|
||||
<!-- size="mini"-->
|
||||
<!-- @click="() => append(data)">-->
|
||||
<!-- 添加下级菜单-->
|
||||
<!-- </el-button>-->
|
||||
<!-- <el-button-->
|
||||
<!-- type="text"-->
|
||||
<!-- size="mini"-->
|
||||
<!-- @click="() => remove(node, data)">-->
|
||||
<!-- 编辑-->
|
||||
<!-- </el-button>-->
|
||||
<!-- <el-button-->
|
||||
<!-- type="text"-->
|
||||
<!-- size="mini"-->
|
||||
<!-- @click="() => remove(node, data)">-->
|
||||
<!-- 删除-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </span>-->
|
||||
<!-- </span>-->
|
||||
<!-- </el-tree>-->
|
||||
|
||||
<el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" :close-on-click-modal="false">
|
||||
<el-form ref="dataForm" :rules="rules" :model="temp" label-position="left" label-width="100px" style="width: 400px; margin-left:50px;">
|
||||
<el-form-item label="菜单名称" prop="name">
|
||||
<el-input v-model="temp.name" />
|
||||
</el-form-item>
|
||||
<el-form-item label="菜单链接" prop="url">
|
||||
<el-input v-model="temp.url" />
|
||||
</el-form-item>
|
||||
<el-form-item label="权限标识" prop="permission">
|
||||
<el-input v-model="temp.permission" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="temp.sort" />
|
||||
</el-form-item>
|
||||
<el-form-item label="描述">
|
||||
<el-input v-model="temp.descRibe" :autosize="{ minRows: 4, maxRows: 6}" type="textarea" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否显示">
|
||||
<el-checkbox v-model="temp.isShow">显示</el-checkbox>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogFormVisible = false">
|
||||
关闭
|
||||
</el-button>
|
||||
<el-button type="primary" @click="save()">
|
||||
确认
|
||||
</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import dragTreeTable from "drag-tree-table";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
treeData: {
|
||||
custom_field: {
|
||||
id: 'id',
|
||||
order: 'sort',
|
||||
lists: 'children',
|
||||
parent_id: 'parent_id'
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
type: 'selection',
|
||||
title: '菜单名称',
|
||||
field: 'name',
|
||||
width: 200,
|
||||
align: 'left',
|
||||
formatter: (item) => {
|
||||
return '<a>'+item.name+'</a>'
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'selection',
|
||||
title: '路径',
|
||||
field: 'url',
|
||||
width: 200,
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
type: 'selection',
|
||||
title: '权限标识',
|
||||
field: 'permission',
|
||||
width: 200,
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
type: 'selection',
|
||||
title: '排序',
|
||||
field: 'sort',
|
||||
width: 200,
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
type: 'selection',
|
||||
title: '是否显示',
|
||||
field: 'isShow',
|
||||
width: 200,
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
type: 'action',
|
||||
width: 350,
|
||||
align: 'center',
|
||||
actions: [
|
||||
{
|
||||
text: '添加下级菜单',
|
||||
onclick: (item) => {
|
||||
// item是当前行的数据
|
||||
console.log(item)
|
||||
},
|
||||
formatter: (item) => {
|
||||
return '<i>查看角色</i>'
|
||||
}
|
||||
},
|
||||
{
|
||||
text: '编辑',
|
||||
onclick: (item) => {
|
||||
// item是当前行的数据
|
||||
console.log(item)
|
||||
},
|
||||
formatter: (item) => {
|
||||
return '<i>编辑</i>'
|
||||
}
|
||||
},
|
||||
{
|
||||
text: '删除',
|
||||
onclick: (item) => {
|
||||
// item是当前行的数据
|
||||
console.log(item)
|
||||
},
|
||||
formatter: (item) => {
|
||||
return '<i>编辑</i>'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
],
|
||||
lists: []
|
||||
},
|
||||
menuTreeExpandedList:[],
|
||||
menuTreeList:[],
|
||||
defaultProps: {
|
||||
children: 'children',
|
||||
label: 'name'
|
||||
},
|
||||
dialogFormVisible: false,
|
||||
dialogStatus: '',
|
||||
textMap: {
|
||||
update: '修改',
|
||||
create: '添加'
|
||||
},
|
||||
temp: this.getTemp(),
|
||||
listConfigDialogVisible: false,
|
||||
formConfigDialogVisible: false,
|
||||
rules: {
|
||||
name: [{ required: true, message: '请输入菜单名称', trigger: 'change' }]
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
dragTreeTable
|
||||
},
|
||||
created(){
|
||||
this.getMenuTreeList();
|
||||
},
|
||||
methods: {
|
||||
onTreeDataChange(list) {
|
||||
this.treeData.lists = list;
|
||||
},
|
||||
getMenuTreeList(){
|
||||
this.$get('menu/tree', { pid: this.temp.pid }).then(res => {
|
||||
this.menuTreeList = res.data.list
|
||||
this.menuTreeExpandedList = this.getMenuId(this.menuTreeList);
|
||||
this.treeData.lists = res.data.list
|
||||
console.log(this.menuTreeList)
|
||||
console.log(this.menuTreeExpandedList)
|
||||
})
|
||||
},
|
||||
getMenuId(menuArr){
|
||||
let idArr = [];
|
||||
if (menuArr != null && menuArr.length > 0){
|
||||
for (let i = 0; i < menuArr.length; i++) {
|
||||
idArr.push(menuArr[i].id);
|
||||
idArr.push(...this.getMenuId(menuArr[i].children));
|
||||
}
|
||||
}
|
||||
return idArr;
|
||||
},
|
||||
getTemp() {
|
||||
return {
|
||||
id: '',
|
||||
name: '',
|
||||
url: '',
|
||||
permission: '',
|
||||
sort: 0,
|
||||
descRibe: '',
|
||||
isShow: true,
|
||||
pid: ''
|
||||
}
|
||||
},
|
||||
resetTemp() {
|
||||
this.temp = this.getTemp()
|
||||
},
|
||||
getSort() {
|
||||
this.$get('menu/sort', { pid: this.temp.pid }).then(res => {
|
||||
this.temp.sort = res.data
|
||||
})
|
||||
},
|
||||
addSubMenu(id) {
|
||||
this.resetTemp()
|
||||
this.temp.pid = id
|
||||
this.temp.id = this.$common.uuid()
|
||||
this.getSort()
|
||||
this.dialogStatus = 'create'
|
||||
this.dialogFormVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs['dataForm'].clearValidate()
|
||||
})
|
||||
},
|
||||
save() {
|
||||
this.$refs['dataForm'].validate((valid) => {
|
||||
if (valid) {
|
||||
this.temp.isShow = this.temp.isShow === true ? 1 : 0
|
||||
this.$post('menu/save', this.temp).then(() => {
|
||||
this.reloadTable()
|
||||
this.dialogFormVisible = false
|
||||
this.$notify({
|
||||
title: '成功',
|
||||
message: (this.dialogStatus === 'create' ? '创建' : '修改') + '成功',
|
||||
type: 'success',
|
||||
duration: 2000
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
reloadTable() {
|
||||
this.$refs.table.reloadList()
|
||||
},
|
||||
handleUpdate(row) {
|
||||
for (var t in this.temp) {
|
||||
if (t === 'isShow') {
|
||||
if (row[t] === 1) {
|
||||
this.temp[t] = true
|
||||
} else {
|
||||
this.temp[t] = false
|
||||
}
|
||||
} else {
|
||||
this.temp[t] = row[t]
|
||||
}
|
||||
}
|
||||
this.dialogStatus = 'update'
|
||||
this.dialogFormVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs['dataForm'].clearValidate()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.custom-tree-node {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
font-size: 14px;
|
||||
padding-right: 8px;
|
||||
}
|
||||
</style>
|
||||
@@ -16,7 +16,7 @@
|
||||
</div>
|
||||
|
||||
<el-row class="toolbar-container">
|
||||
<el-button class="filter-item" type="primary" icon="el-icon-edit" @click="addSubMenu('0')">
|
||||
<el-button class="filter-item" type="primary" icon="el-icon-edit" @click="addSubMenu('0')" v-permission="'menu:save'">
|
||||
添加菜单
|
||||
</el-button>
|
||||
<el-button type="primary" icon="el-icon-sort" plain @click="expand">展开/折叠</el-button>
|
||||
@@ -156,6 +156,7 @@ export default {
|
||||
{
|
||||
title: '添加下级菜单',
|
||||
type: 'text',
|
||||
permission: 'menu:save',
|
||||
icon: 'el-icon-plus',
|
||||
click: (row) => {
|
||||
this.addSubMenu(row.id)
|
||||
@@ -164,6 +165,7 @@ export default {
|
||||
{
|
||||
title: '修改',
|
||||
type: 'text',
|
||||
permission: 'menu:save',
|
||||
icon: 'el-icon-edit',
|
||||
click: (row) => {
|
||||
this.handleUpdate(row)
|
||||
@@ -172,6 +174,7 @@ export default {
|
||||
{
|
||||
title: '删除',
|
||||
type: 'text',
|
||||
permission: 'menu:delete',
|
||||
icon: 'el-icon-delete',
|
||||
click: (row) => {
|
||||
this.$common.handleDelete({
|
||||
|
||||
@@ -1,230 +0,0 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
|
||||
<el-button class="filter-item" style="margin-bottom:10px;" type="primary" icon="el-icon-edit" @click="addSubMenu('0')">
|
||||
添加菜单
|
||||
</el-button>
|
||||
|
||||
<el-tree :data="menuTreeList"
|
||||
:props="defaultProps"
|
||||
node-key="id"
|
||||
:default-expanded-keys="menuTreeExpandedList"
|
||||
draggable>
|
||||
<span class="custom-tree-node" slot-scope="{ node, data }">
|
||||
<span>{{ node.label }}</span>
|
||||
<span>
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
style="width: 270px;text-align: left;color: #5a5e66;"
|
||||
@click="() => append(data)">
|
||||
{{ data.url }}
|
||||
</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
style="width: 100px;text-align: left;color: #5a5e66;"
|
||||
@click="() => append(data)">
|
||||
{{ data.permission }}
|
||||
</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
style="width: 100px;text-align: left;color: #5a5e66;"
|
||||
@click="() => append(data)">
|
||||
{{ data.sort }}
|
||||
</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
style="width: 100px;text-align: left;color: #5a5e66;"
|
||||
@click="() => append(data)">
|
||||
{{ data.isShow }}
|
||||
</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
@click="() => append(data)">
|
||||
添加下级菜单
|
||||
</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
@click="() => remove(node, data)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
@click="() => remove(node, data)">
|
||||
删除
|
||||
</el-button>
|
||||
</span>
|
||||
</span>
|
||||
</el-tree>
|
||||
|
||||
<el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" :close-on-click-modal="false">
|
||||
<el-form ref="dataForm" :rules="rules" :model="temp" label-position="left" label-width="100px" style="width: 400px; margin-left:50px;">
|
||||
<el-form-item label="菜单名称" prop="name">
|
||||
<el-input v-model="temp.name" />
|
||||
</el-form-item>
|
||||
<el-form-item label="菜单链接" prop="url">
|
||||
<el-input v-model="temp.url" />
|
||||
</el-form-item>
|
||||
<el-form-item label="权限标识" prop="permission">
|
||||
<el-input v-model="temp.permission" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="temp.sort" />
|
||||
</el-form-item>
|
||||
<el-form-item label="描述">
|
||||
<el-input v-model="temp.descRibe" :autosize="{ minRows: 4, maxRows: 6}" type="textarea" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否显示">
|
||||
<el-checkbox v-model="temp.isShow">显示</el-checkbox>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogFormVisible = false">
|
||||
关闭
|
||||
</el-button>
|
||||
<el-button type="primary" @click="save()">
|
||||
确认
|
||||
</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
menuTreeExpandedList:[],
|
||||
menuTreeList:[],
|
||||
defaultProps: {
|
||||
children: 'children',
|
||||
label: 'name'
|
||||
},
|
||||
dialogFormVisible: false,
|
||||
dialogStatus: '',
|
||||
textMap: {
|
||||
update: '修改',
|
||||
create: '添加'
|
||||
},
|
||||
temp: this.getTemp(),
|
||||
listConfigDialogVisible: false,
|
||||
formConfigDialogVisible: false,
|
||||
rules: {
|
||||
name: [{ required: true, message: '请输入菜单名称', trigger: 'change' }]
|
||||
}
|
||||
}
|
||||
},
|
||||
created(){
|
||||
this.getMenuTreeList();
|
||||
},
|
||||
methods: {
|
||||
getMenuTreeList(){
|
||||
this.$get('menu/tree', { pid: this.temp.pid }).then(res => {
|
||||
this.menuTreeList = res.data.list
|
||||
this.menuTreeExpandedList = this.getMenuId(this.menuTreeList);
|
||||
console.log(this.menuTreeList)
|
||||
console.log(this.menuTreeExpandedList)
|
||||
})
|
||||
},
|
||||
getMenuId(menuArr){
|
||||
let idArr = [];
|
||||
if (menuArr != null && menuArr.length > 0){
|
||||
for (let i = 0; i < menuArr.length; i++) {
|
||||
idArr.push(menuArr[i].id);
|
||||
idArr.push(...this.getMenuId(menuArr[i].children));
|
||||
}
|
||||
}
|
||||
return idArr;
|
||||
},
|
||||
getTemp() {
|
||||
return {
|
||||
id: '',
|
||||
name: '',
|
||||
url: '',
|
||||
permission: '',
|
||||
sort: 0,
|
||||
descRibe: '',
|
||||
isShow: true,
|
||||
pid: ''
|
||||
}
|
||||
},
|
||||
resetTemp() {
|
||||
this.temp = this.getTemp()
|
||||
},
|
||||
getSort() {
|
||||
this.$get('menu/sort', { pid: this.temp.pid }).then(res => {
|
||||
this.temp.sort = res.data
|
||||
})
|
||||
},
|
||||
addSubMenu(id) {
|
||||
this.resetTemp()
|
||||
this.temp.pid = id
|
||||
this.temp.id = this.$common.uuid()
|
||||
this.getSort()
|
||||
this.dialogStatus = 'create'
|
||||
this.dialogFormVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs['dataForm'].clearValidate()
|
||||
})
|
||||
},
|
||||
save() {
|
||||
this.$refs['dataForm'].validate((valid) => {
|
||||
if (valid) {
|
||||
this.temp.isShow = this.temp.isShow === true ? 1 : 0
|
||||
this.$post('menu/save', this.temp).then(() => {
|
||||
this.reloadTable()
|
||||
this.dialogFormVisible = false
|
||||
this.$notify({
|
||||
title: '成功',
|
||||
message: (this.dialogStatus === 'create' ? '创建' : '修改') + '成功',
|
||||
type: 'success',
|
||||
duration: 2000
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
reloadTable() {
|
||||
this.$refs.table.reloadList()
|
||||
},
|
||||
handleUpdate(row) {
|
||||
for (var t in this.temp) {
|
||||
if (t === 'isShow') {
|
||||
if (row[t] === 1) {
|
||||
this.temp[t] = true
|
||||
} else {
|
||||
this.temp[t] = false
|
||||
}
|
||||
} else {
|
||||
this.temp[t] = row[t]
|
||||
}
|
||||
}
|
||||
this.dialogStatus = 'update'
|
||||
this.dialogFormVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs['dataForm'].clearValidate()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.custom-tree-node {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
font-size: 14px;
|
||||
padding-right: 8px;
|
||||
}
|
||||
</style>
|
||||
@@ -1,170 +0,0 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
|
||||
<el-button class="filter-item" style="margin-bottom:10px;" type="primary" icon="el-icon-edit" @click="addSubMenu('0')">
|
||||
添加菜单
|
||||
</el-button>
|
||||
|
||||
<vxe-grid v-bind="gridOptions" @form-submit="findList"></vxe-grid>
|
||||
|
||||
<el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" :close-on-click-modal="false">
|
||||
<el-form ref="dataForm" :rules="rules" :model="temp" label-position="left" label-width="100px" style="width: 400px; margin-left:50px;">
|
||||
<el-form-item label="菜单名称" prop="name">
|
||||
<el-input v-model="temp.name" />
|
||||
</el-form-item>
|
||||
<el-form-item label="菜单链接" prop="url">
|
||||
<el-input v-model="temp.url" />
|
||||
</el-form-item>
|
||||
<el-form-item label="权限标识" prop="permission">
|
||||
<el-input v-model="temp.permission" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="temp.sort" />
|
||||
</el-form-item>
|
||||
<el-form-item label="描述">
|
||||
<el-input v-model="temp.descRibe" :autosize="{ minRows: 4, maxRows: 6}" type="textarea" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否显示">
|
||||
<el-checkbox v-model="temp.isShow">显示</el-checkbox>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogFormVisible = false">
|
||||
关闭
|
||||
</el-button>
|
||||
<el-button type="primary" @click="save()">
|
||||
确认
|
||||
</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
gridOptions: {
|
||||
resizable: true,
|
||||
border: true,
|
||||
showOverflow: true,
|
||||
loading: false,
|
||||
height: 400,
|
||||
exportConfig: {},
|
||||
formConfig: {
|
||||
data: {
|
||||
name: '',
|
||||
sex: ''
|
||||
},
|
||||
items: [
|
||||
{ field: 'name', title: '菜单名称', itemRender: { name: '$input', props: { placeholder: '请输入名称' } } },
|
||||
{ field: 'url', title: '路径', titlePrefix: { message: '输入存在的路径', icon: 'fa fa-info-circle' }, itemRender: { name: '$input', pops: { placeholder: '请输入名称' } } },
|
||||
{ itemRender: { name: '$buttons', children: [{ props: { type: 'submit', content: '查询', status: 'primary' } }, { props: { type: 'reset', content: '重置' } }] } }
|
||||
]
|
||||
},
|
||||
toolbarConfig: {
|
||||
export: true,
|
||||
custom: true
|
||||
},
|
||||
columns: [
|
||||
{ type: 'seq', width: 60 },
|
||||
{ type: 'checkbox', width: 60 },
|
||||
{ field: 'name', title: '菜单名称' , showOverflow: true },
|
||||
{ field: 'url', title: '路径' , showOverflow: true },
|
||||
{ field: 'permission', title: '权限标识' },
|
||||
{ field: 'sort', title: '排序' },
|
||||
{ field: 'isShow', title: '是否显示' },
|
||||
{ title: '操作' }
|
||||
],
|
||||
data: []
|
||||
},
|
||||
dialogFormVisible: false,
|
||||
dialogStatus: '',
|
||||
textMap: {
|
||||
update: '修改',
|
||||
create: '添加'
|
||||
},
|
||||
temp: this.getTemp(),
|
||||
listConfigDialogVisible: false,
|
||||
formConfigDialogVisible: false,
|
||||
rules: {
|
||||
name: [{ required: true, message: '请输入菜单名称', trigger: 'change' }]
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getTemp() {
|
||||
return {
|
||||
id: '',
|
||||
name: '',
|
||||
url: '',
|
||||
permission: '',
|
||||
sort: 0,
|
||||
descRibe: '',
|
||||
isShow: true,
|
||||
pid: ''
|
||||
}
|
||||
},
|
||||
resetTemp() {
|
||||
this.temp = this.getTemp()
|
||||
},
|
||||
getSort() {
|
||||
this.$get('menu/sort', { pid: this.temp.pid }).then(res => {
|
||||
this.temp.sort = res.data
|
||||
})
|
||||
},
|
||||
addSubMenu(id) {
|
||||
this.resetTemp()
|
||||
this.temp.pid = id
|
||||
this.temp.id = this.$common.uuid()
|
||||
this.getSort()
|
||||
this.dialogStatus = 'create'
|
||||
this.dialogFormVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs['dataForm'].clearValidate()
|
||||
})
|
||||
},
|
||||
save() {
|
||||
this.$refs['dataForm'].validate((valid) => {
|
||||
if (valid) {
|
||||
this.temp.isShow = this.temp.isShow === true ? 1 : 0
|
||||
this.$post('menu/save', this.temp).then(() => {
|
||||
this.reloadTable()
|
||||
this.dialogFormVisible = false
|
||||
this.$notify({
|
||||
title: '成功',
|
||||
message: (this.dialogStatus === 'create' ? '创建' : '修改') + '成功',
|
||||
type: 'success',
|
||||
duration: 2000
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
reloadTable() {
|
||||
this.$refs.table.reloadList()
|
||||
},
|
||||
handleUpdate(row) {
|
||||
for (var t in this.temp) {
|
||||
if (t === 'isShow') {
|
||||
if (row[t] === 1) {
|
||||
this.temp[t] = true
|
||||
} else {
|
||||
this.temp[t] = false
|
||||
}
|
||||
} else {
|
||||
this.temp[t] = row[t]
|
||||
}
|
||||
}
|
||||
this.dialogStatus = 'update'
|
||||
this.dialogFormVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs['dataForm'].clearValidate()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
@@ -22,7 +22,7 @@
|
||||
</div>
|
||||
|
||||
<el-row class="toolbar-container">
|
||||
<el-button class="filter-item" type="primary" icon="el-icon-edit" @click="addSubOffice('0')">
|
||||
<el-button class="filter-item" type="primary" icon="el-icon-edit" @click="addSubOffice('0')" v-permission="'office:save'">
|
||||
添加机构
|
||||
</el-button>
|
||||
<el-button type="primary" icon="el-icon-sort" plain @click="expand">展开/折叠</el-button>
|
||||
@@ -155,6 +155,7 @@ export default {
|
||||
{
|
||||
title: '添加下级机构',
|
||||
type: 'text',
|
||||
permission: 'office:save',
|
||||
icon: 'el-icon-plus',
|
||||
click: (row) => {
|
||||
this.addSubOffice(row.id)
|
||||
@@ -163,6 +164,7 @@ export default {
|
||||
{
|
||||
title: '修改',
|
||||
type: 'text',
|
||||
permission: 'office:save',
|
||||
icon: 'el-icon-edit',
|
||||
click: (row) => {
|
||||
this.handleUpdate(row)
|
||||
@@ -171,6 +173,7 @@ export default {
|
||||
{
|
||||
title: '删除',
|
||||
type: 'text',
|
||||
permission: 'office:delete',
|
||||
icon: 'el-icon-delete',
|
||||
click: (row) => {
|
||||
this.$common.handleDelete({
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
<el-button v-permission="'user:save'" class="filter-item" type="primary" icon="el-icon-edit" @click="handleCreate">
|
||||
添加
|
||||
</el-button>
|
||||
<mb-button :el="{ plain: true }" :request-url="'user/delete'" :btn-type="'delete'" :request-data="{ id: ids }" :after-handler="reloadTable" />
|
||||
<mb-button v-permission="'user:delete'" :el="{ plain: true }" :request-url="'user/delete'" :btn-type="'delete'" :request-data="{ id: ids }" :after-handler="reloadTable" />
|
||||
</el-row>
|
||||
|
||||
<mb-table ref="table" v-bind="tableOptions" @selection-change="selectionChange" />
|
||||
|
||||
Reference in New Issue
Block a user