mirror of
https://gitee.com/ssssssss-team/magic-boot.git
synced 2025-03-03 22:32:50 +08:00
MT:新增树形菜单页面
This commit is contained in:
parent
1d957c76d5
commit
4b8a88b31e
@ -43,3 +43,9 @@
|
|||||||
- (新增)数据源管理
|
- (新增)数据源管理
|
||||||
- (新增)数据库管理
|
- (新增)数据库管理
|
||||||
- (新增)
|
- (新增)
|
||||||
|
|
||||||
|
|
||||||
|
## 开发日志
|
||||||
|
|
||||||
|
### 2021-11-04
|
||||||
|
> 升级magic-editor到1.6.3版本
|
||||||
|
@ -59,13 +59,11 @@ export default {
|
|||||||
{
|
{
|
||||||
field: 'name',
|
field: 'name',
|
||||||
title: '菜单名称',
|
title: '菜单名称',
|
||||||
width: '400',
|
|
||||||
align: 'left'
|
align: 'left'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'url',
|
field: 'url',
|
||||||
title: '路径',
|
title: '路径',
|
||||||
width: '250',
|
|
||||||
align: 'left'
|
align: 'left'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -94,26 +92,27 @@ export default {
|
|||||||
{
|
{
|
||||||
title: '操作',
|
title: '操作',
|
||||||
type: 'btns',
|
type: 'btns',
|
||||||
|
width: 262,
|
||||||
fixed: 'right',
|
fixed: 'right',
|
||||||
align: 'left',
|
align: 'left',
|
||||||
btns: [
|
btns: [
|
||||||
{
|
{
|
||||||
title: '添加下级菜单',
|
title: '添加下级菜单',
|
||||||
type: 'primary',
|
type: 'text',
|
||||||
click: (row) => {
|
click: (row) => {
|
||||||
this.addSubMenu(row.id)
|
this.addSubMenu(row.id)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '编辑',
|
title: '编辑',
|
||||||
type: 'primary',
|
type: 'text',
|
||||||
click: (row) => {
|
click: (row) => {
|
||||||
this.handleUpdate(row)
|
this.handleUpdate(row)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '删除',
|
title: '删除',
|
||||||
type: 'danger',
|
type: 'text',
|
||||||
click: (row) => {
|
click: (row) => {
|
||||||
this.$common.handleDelete({
|
this.$common.handleDelete({
|
||||||
url: 'menu/delete',
|
url: 'menu/delete',
|
||||||
|
230
magic-boot-ui/src/views/system/menu/menu-tree-list.vue
Normal file
230
magic-boot-ui/src/views/system/menu/menu-tree-list.vue
Normal file
@ -0,0 +1,230 @@
|
|||||||
|
<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>
|
Loading…
Reference in New Issue
Block a user