feat:菜单管理-查
This commit is contained in:
parent
1e84782603
commit
65f1d7d2bc
@ -11,7 +11,7 @@ async def get_role_menus(rid: int):
|
|||||||
db = connections.get("default")
|
db = connections.get("default")
|
||||||
return await db.execute_query_dict(
|
return await db.execute_query_dict(
|
||||||
"""
|
"""
|
||||||
select m.id, m.name, m.meta, m.path, m.type, m.component, m.pid, m.identifier
|
select m.id, m.name, m.meta, m.path, m.type, m.component, m.pid, m.identifier, m.api, m.method
|
||||||
FROM sys_menu as m, sys_role_menu WHERE m.id = sys_role_menu.mid
|
FROM sys_menu as m, sys_role_menu WHERE m.id = sys_role_menu.mid
|
||||||
AND sys_role_menu.rid = (?) AND sys_role_menu.`status` = 1""",
|
AND sys_role_menu.rid = (?) AND sys_role_menu.`status` = 1""",
|
||||||
[rid],
|
[rid],
|
||||||
|
BIN
backend/mini.db
BIN
backend/mini.db
Binary file not shown.
Binary file not shown.
Binary file not shown.
44
frontend/src/service/menu.js
Normal file
44
frontend/src/service/menu.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 获取角色列表, 需要考虑创建用户选择角色应该是所有未被删除的情况
|
||||||
|
export function getMenus(params) {
|
||||||
|
return request({
|
||||||
|
url: '/menu',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 条件查询
|
||||||
|
export function queryMenu(data) {
|
||||||
|
return request({
|
||||||
|
url: '/menu/query',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除
|
||||||
|
export function delMenu(id) {
|
||||||
|
return request({
|
||||||
|
url: `/menu/${id}`,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建
|
||||||
|
export function addMenu(data) {
|
||||||
|
return request({
|
||||||
|
url: '/menu',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改
|
||||||
|
export function putMenu(id, data) {
|
||||||
|
return request({
|
||||||
|
url: `/menu/${id}`,
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
67
frontend/src/views/main/system/menu/conf.js
Normal file
67
frontend/src/views/main/system/menu/conf.js
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
export const columns = [
|
||||||
|
{
|
||||||
|
title: '名称',
|
||||||
|
dataIndex: 'name',
|
||||||
|
key: 'name',
|
||||||
|
width: 120
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '图标',
|
||||||
|
dataIndex: 'meta',
|
||||||
|
key: 'meta',
|
||||||
|
width: 60
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '路由',
|
||||||
|
dataIndex: 'path',
|
||||||
|
key: 'path',
|
||||||
|
width: 120
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '类型',
|
||||||
|
dataIndex: 'type',
|
||||||
|
key: 'type',
|
||||||
|
width: 80
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '组件路径',
|
||||||
|
dataIndex: 'component',
|
||||||
|
key: 'component',
|
||||||
|
width: 120
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '权限标识',
|
||||||
|
dataIndex: 'identifier',
|
||||||
|
key: 'identifier',
|
||||||
|
width: 120
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '请求接口',
|
||||||
|
dataIndex: 'api',
|
||||||
|
key: 'api',
|
||||||
|
width: 80
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '请求方法',
|
||||||
|
dataIndex: 'method',
|
||||||
|
key: 'method',
|
||||||
|
width: 80
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '创建时间',
|
||||||
|
dataIndex: 'created',
|
||||||
|
key: 'created',
|
||||||
|
width: 80
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '更新时间',
|
||||||
|
dataIndex: 'modified',
|
||||||
|
key: 'modified',
|
||||||
|
width: 80
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '操作',
|
||||||
|
key: 'action',
|
||||||
|
width: 120
|
||||||
|
}
|
||||||
|
]
|
@ -1,7 +1,95 @@
|
|||||||
<script setup></script>
|
<script setup>
|
||||||
|
import { PlusOutlined } from '@ant-design/icons-vue'
|
||||||
|
|
||||||
|
import { columns } from './conf'
|
||||||
|
import { formatTime } from '@/utils/format'
|
||||||
|
import { userStore } from '@/stores/user'
|
||||||
|
import { loadIconCpn } from '@/utils/loadCpn'
|
||||||
|
|
||||||
|
// 列表数据
|
||||||
|
const dataSource = userStore().userMenus
|
||||||
|
|
||||||
|
// 菜单类型隐射
|
||||||
|
|
||||||
|
const menuType = {
|
||||||
|
0: '目录',
|
||||||
|
1: '菜单',
|
||||||
|
2: '按钮'
|
||||||
|
}
|
||||||
|
|
||||||
|
const methodColor = {
|
||||||
|
GET: '#61AFFE',
|
||||||
|
POST: '#49CC90',
|
||||||
|
DELETE: '#F93E3E',
|
||||||
|
PUT: '#FCA130'
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
const addClick = () => {
|
||||||
|
console.log('点击')
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>menu</div>
|
<div class="user">
|
||||||
|
<!-- 列表 -->
|
||||||
|
<div class="data">
|
||||||
|
<a-card title="菜单列表"
|
||||||
|
><template #extra>
|
||||||
|
<a-button type="primary" v-per="'role:create'" @click="addClick">
|
||||||
|
<template #icon><plus-outlined /></template>
|
||||||
|
新增</a-button
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 数据 -->
|
||||||
|
<a-table
|
||||||
|
:columns="columns"
|
||||||
|
:scroll="{ x: 1600, y: 'calc(100vh - 380px)' }"
|
||||||
|
:data-source="dataSource"
|
||||||
|
>
|
||||||
|
<template #bodyCell="{ column, record }">
|
||||||
|
<template v-if="column.key === 'meta'">
|
||||||
|
<component :is="loadIconCpn(record.meta?.icon)"></component>
|
||||||
|
</template>
|
||||||
|
<template v-if="column.key === 'type'">
|
||||||
|
{{ menuType[record.type] }}
|
||||||
|
</template>
|
||||||
|
<template v-if="column.key === 'method'">
|
||||||
|
<a-tag :color="methodColor[record.method]">{{ record.method }}</a-tag>
|
||||||
|
</template>
|
||||||
|
<template v-else-if="column.key === 'created'">
|
||||||
|
{{ formatTime(record.created) }}
|
||||||
|
</template>
|
||||||
|
<template v-else-if="column.key === 'modified'">
|
||||||
|
{{ formatTime(record.modified) }}
|
||||||
|
</template>
|
||||||
|
<template v-else-if="column.key === 'action'">
|
||||||
|
<span>
|
||||||
|
<a v-per="'role:update'" @click="putClick(record)">编辑</a>
|
||||||
|
<a-divider type="vertical" />
|
||||||
|
<template v-if="record.status !== 9">
|
||||||
|
<a v-per="'role:delete'" @click="delClick(record)">删除</a>
|
||||||
|
</template>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</a-table>
|
||||||
|
</a-card>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped></style>
|
<style scoped>
|
||||||
|
.search {
|
||||||
|
display: flex;
|
||||||
|
/* justify-content: center; */
|
||||||
|
align-content: center;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
padding: 24px;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
.data {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
Loading…
Reference in New Issue
Block a user