2023-05-06 15:58:45 +08:00
|
|
|
<template>
|
|
|
|
<a-card :bordered="false">
|
|
|
|
|
|
|
|
<!-- 操作按钮区域 -->
|
|
|
|
<div class="table-operator">
|
2023-05-23 18:27:53 +08:00
|
|
|
<a-button @click="handleAdd" type="primary" icon="plus">Add</a-button>
|
2023-05-06 15:58:45 +08:00
|
|
|
<a-button
|
|
|
|
@click="batchDel"
|
|
|
|
v-if="selectedRowKeys.length > 0"
|
|
|
|
ghost
|
|
|
|
type="primary"
|
2023-05-23 18:27:53 +08:00
|
|
|
icon="delete">Batch Remove
|
2023-05-06 15:58:45 +08:00
|
|
|
</a-button>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<!-- table区域-begin -->
|
|
|
|
<div>
|
|
|
|
|
|
|
|
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
|
2023-05-23 18:27:53 +08:00
|
|
|
<i class="anticon anticon-info-circle ant-alert-icon"></i>To Select <a style="font-weight: 600">{{
|
|
|
|
selectedRowKeys.length }}</a> Item
|
|
|
|
<a style="margin-left: 24px" @click="onClearSelected">Clear</a>
|
2023-05-06 15:58:45 +08:00
|
|
|
</div>
|
|
|
|
|
|
|
|
<a-table
|
|
|
|
:columns="columns"
|
|
|
|
size="middle"
|
|
|
|
:pagination="false"
|
|
|
|
:dataSource="dataSource"
|
|
|
|
:loading="loading"
|
|
|
|
@expand="expandSubmenu"
|
|
|
|
:expandedRowKeys="expandedRowKeys"
|
|
|
|
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
|
|
|
|
@expandedRowsChange="handleExpandedRowsChange">
|
|
|
|
|
|
|
|
<span slot="action" slot-scope="text, record">
|
2023-05-23 18:27:53 +08:00
|
|
|
<a @click="handleEdit(record)">Edit</a>
|
2023-05-06 15:58:45 +08:00
|
|
|
|
|
|
|
<a-divider type="vertical"/>
|
|
|
|
<a-dropdown>
|
|
|
|
<a class="ant-dropdown-link">
|
2023-05-23 18:27:53 +08:00
|
|
|
More <a-icon type="down"/>
|
2023-05-06 15:58:45 +08:00
|
|
|
</a>
|
|
|
|
<a-menu slot="overlay">
|
|
|
|
<a-menu-item>
|
2023-05-23 18:27:53 +08:00
|
|
|
<a href="javascript:;" @click="handleDetail(record)">Detail</a>
|
2023-05-06 15:58:45 +08:00
|
|
|
</a-menu-item>
|
|
|
|
<a-menu-item>
|
2023-05-23 18:27:53 +08:00
|
|
|
<a href="javascript:;" @click="handleAddSub(record)">AddSub</a>
|
2023-05-06 15:58:45 +08:00
|
|
|
</a-menu-item>
|
|
|
|
<a-menu-item>
|
2023-05-23 18:27:53 +08:00
|
|
|
<a href="javascript:;" @click="handleDataRule(record)">DataRule</a>
|
2023-05-06 15:58:45 +08:00
|
|
|
</a-menu-item>
|
|
|
|
|
|
|
|
<a-menu-item>
|
2023-05-23 18:27:53 +08:00
|
|
|
<a-popconfirm title="Do You Want To Delete This Item?'" @confirm="() => handleDelete(record.id)" placement="topLeft">
|
|
|
|
<a>Delete</a>
|
2023-05-06 15:58:45 +08:00
|
|
|
</a-popconfirm>
|
|
|
|
</a-menu-item>
|
|
|
|
</a-menu>
|
|
|
|
</a-dropdown>
|
|
|
|
</span>
|
|
|
|
<!-- 字符串超长截取省略号显示 -->
|
|
|
|
<span slot="url" slot-scope="text">
|
|
|
|
<j-ellipsis :value="text" :length="25"/>
|
|
|
|
</span>
|
|
|
|
<!-- 字符串超长截取省略号显示-->
|
|
|
|
<span slot="component" slot-scope="text">
|
|
|
|
<j-ellipsis :value="text"/>
|
|
|
|
</span>
|
|
|
|
</a-table>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<!-- table区域-end -->
|
|
|
|
|
|
|
|
<permission-modal ref="modalForm" @ok="modalFormOk"></permission-modal>
|
|
|
|
<permission-data-rule-list ref="PermissionDataRuleList" @ok="modalFormOk"></permission-data-rule-list>
|
|
|
|
|
|
|
|
</a-card>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
import PermissionModal from './modules/PermissionModal'
|
|
|
|
import { getSystemMenuList, getSystemSubmenu, getSystemSubmenuBatch } from '@/api/api'
|
|
|
|
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
|
|
|
|
import PermissionDataRuleList from './PermissionDataRuleList'
|
|
|
|
import JEllipsis from '@/components/jeecg/JEllipsis'
|
|
|
|
|
|
|
|
const columns = [
|
|
|
|
{
|
2023-05-23 18:27:53 +08:00
|
|
|
title: 'NAME',
|
2023-05-06 15:58:45 +08:00
|
|
|
dataIndex: 'name',
|
|
|
|
key: 'name'
|
|
|
|
}, {
|
2023-05-23 18:27:53 +08:00
|
|
|
title: 'MENU TYPE',
|
2023-05-06 15:58:45 +08:00
|
|
|
dataIndex: 'menuType',
|
|
|
|
key: 'menuType',
|
|
|
|
customRender: function(text) {
|
|
|
|
if (text == 0) {
|
2023-05-23 18:27:53 +08:00
|
|
|
return 'MENU'
|
2023-05-06 15:58:45 +08:00
|
|
|
} else if (text == 1) {
|
2023-05-23 18:27:53 +08:00
|
|
|
return 'MENU'
|
2023-05-06 15:58:45 +08:00
|
|
|
} else if (text == 2) {
|
2023-05-23 18:27:53 +08:00
|
|
|
return 'BUTTON/PERMS'
|
2023-05-06 15:58:45 +08:00
|
|
|
} else {
|
|
|
|
return text
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},/*{
|
|
|
|
title: '权限编码',
|
|
|
|
dataIndex: 'perms',
|
|
|
|
key: 'permissionCode',
|
|
|
|
},*/{
|
2023-05-23 18:27:53 +08:00
|
|
|
title: 'ICON',
|
2023-05-06 15:58:45 +08:00
|
|
|
dataIndex: 'icon',
|
|
|
|
key: 'icon'
|
|
|
|
},
|
|
|
|
{
|
2023-05-23 18:27:53 +08:00
|
|
|
title: 'COMPONENT',
|
2023-05-06 15:58:45 +08:00
|
|
|
dataIndex: 'component',
|
|
|
|
key: 'component',
|
|
|
|
scopedSlots: { customRender: 'component' }
|
|
|
|
},
|
|
|
|
{
|
2023-05-23 18:27:53 +08:00
|
|
|
title: 'URL',
|
2023-05-06 15:58:45 +08:00
|
|
|
dataIndex: 'url',
|
|
|
|
key: 'url',
|
|
|
|
scopedSlots: { customRender: 'url' }
|
|
|
|
},
|
|
|
|
{
|
2023-05-23 18:27:53 +08:00
|
|
|
title: 'SORT NO',
|
2023-05-06 15:58:45 +08:00
|
|
|
dataIndex: 'sortNo',
|
|
|
|
key: 'sortNo'
|
|
|
|
},
|
|
|
|
{
|
2023-05-23 18:27:53 +08:00
|
|
|
title: 'ACTION',
|
2023-05-06 15:58:45 +08:00
|
|
|
dataIndex: 'action',
|
|
|
|
scopedSlots: { customRender: 'action' },
|
|
|
|
align: 'center',
|
|
|
|
width: 150
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
export default {
|
|
|
|
name: 'PermissionListAsync',
|
|
|
|
mixins: [JeecgListMixin],
|
|
|
|
components: {
|
|
|
|
PermissionDataRuleList,
|
|
|
|
PermissionModal,
|
|
|
|
JEllipsis
|
|
|
|
},
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
description: '这是菜单管理页面',
|
|
|
|
// 表头
|
|
|
|
columns: columns,
|
|
|
|
loading: false,
|
|
|
|
// 展开的行,受控属性
|
|
|
|
expandedRowKeys: [],
|
|
|
|
url: {
|
|
|
|
list: '/sys/permission/list',
|
|
|
|
delete: '/sys/permission/delete',
|
|
|
|
deleteBatch: '/sys/permission/deleteBatch'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
loadData() {
|
|
|
|
this.loading = true
|
|
|
|
getSystemMenuList().then((res) => {
|
|
|
|
if (res.success) {
|
|
|
|
this.dataSource = res.result
|
|
|
|
return this.loadDataByExpandedRows(this.dataSource)
|
|
|
|
}
|
|
|
|
}).finally(()=>{
|
|
|
|
this.loading = false
|
|
|
|
})
|
|
|
|
},
|
|
|
|
expandSubmenu(expanded, record){
|
|
|
|
if (expanded && (!record.children || record.children.length === 0)) {
|
|
|
|
getSystemSubmenu({parentId:record.id}).then((res) => {
|
|
|
|
if (res.success) {
|
|
|
|
record.children = res.result
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
},
|
|
|
|
// 根据已展开的行查询数据(用于保存后刷新时异步加载子级的数据)
|
|
|
|
loadDataByExpandedRows(dataList) {
|
|
|
|
if (this.expandedRowKeys.length > 0) {
|
|
|
|
return getSystemSubmenuBatch({ parentIds: this.expandedRowKeys.join(',') }).then((res) => {
|
|
|
|
if (res.success) {
|
|
|
|
let childrenMap = res.result
|
|
|
|
let fn = (list) => {
|
|
|
|
if(list&&list.length>0){
|
|
|
|
list.forEach(data => {
|
|
|
|
if (this.expandedRowKeys.includes(data.id)) {
|
|
|
|
data.children = childrenMap[data.id]
|
|
|
|
fn(data.children)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fn(dataList)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
} else {
|
|
|
|
return Promise.resolve()
|
|
|
|
}
|
|
|
|
},
|
|
|
|
// 打开数据规则编辑
|
|
|
|
handleDataRule(record) {
|
|
|
|
this.$refs.PermissionDataRuleList.edit(record)
|
|
|
|
},
|
|
|
|
handleAddSub(record) {
|
2023-05-23 18:27:53 +08:00
|
|
|
this.$refs.modalForm.title = "Add submenu";
|
2023-05-06 15:58:45 +08:00
|
|
|
this.$refs.modalForm.disableSubmit = false;
|
|
|
|
this.$refs.modalForm.edit({status:'1',permsType:'1',route:true,'parentId':record.id,menuType:1});
|
|
|
|
},
|
|
|
|
handleExpandedRowsChange(expandedRows) {
|
|
|
|
this.expandedRowKeys = expandedRows
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
<style scoped>
|
|
|
|
@import '~@assets/less/common.less';
|
|
|
|
</style>
|