update: 菜单管理

This commit is contained in:
easy 2023-01-30 18:11:05 +08:00
parent fda769acc6
commit 0c9de15e9a
2 changed files with 66 additions and 9 deletions

View File

@ -4,3 +4,10 @@ import server from '@/utils/request';
export const getMenuTree_api = (data: object) => server.post(`/menu/_all/tree`, data); export const getMenuTree_api = (data: object) => server.post(`/menu/_all/tree`, data);
export const queryOwnThree = (data: any) => server.post<any>('/menu/user-own/tree', data) export const queryOwnThree = (data: any) => server.post<any>('/menu/user-own/tree', data)
// 获取资产类型
export const getAssetsType_api = () => server.get(`/asset/types`);
// 获取菜单详情
export const getMenuDetail_api = (id:string) => server.get(`/menu/${id}`);

View File

@ -98,21 +98,37 @@
<a-card> <a-card>
<h3>权限配置</h3> <h3>权限配置</h3>
<a-form :model="form.data" class="basic-form permiss-form"> <a-form :model="form.data" class="basic-form permiss-form">
<a-form-item label="数据权限控制" name="accessSupport" required> <a-form-item name="accessSupport" required>
<template #label>
<span style="margin-right: 3px">数据权限控制</span>
<a-tooltip title="此菜单页面数据所对应的资产类型">
<question-circle-outlined
class="img-style"
style="color: #a6a6a6"
/>
</a-tooltip>
</template>
<a-radio-group <a-radio-group
v-model:value="form.data.accessSupport" v-model:value="form.data.accessSupport"
name="radioGroup" name="radioGroup"
> >
<a-radio value="unsupported">不支持</a-radio> <a-radio value="unsupported">不支持</a-radio>
<a-radio value="support">支持</a-radio> <a-radio value="support">支持</a-radio>
<a-radio value="indirect">间接控制</a-radio> <a-radio value="indirect">
<span style="margin-right: 3px">间接控制</span>
<a-tooltip
title="此菜单内的数据基于其他菜单的数据权限控制"
>
<question-circle-filled class="img-style" />
</a-tooltip>
</a-radio>
</a-radio-group> </a-radio-group>
<a-form-item <a-form-item
name="assetType" name="assetType"
v-if="form.data.accessSupport === 'support'" v-if="form.data.accessSupport === 'support'"
:rules="[{ required: true, message: '请选择资产类型' }]" :rules="[{ required: true, message: '请选择资产类型' }]"
style="margin-top: 24px; margin-bottom: 0"
> >
<a-select <a-select
v-model:value="form.data.assetType" v-model:value="form.data.assetType"
@ -131,6 +147,7 @@
name="indirectMenus" name="indirectMenus"
v-if="form.data.accessSupport === 'indirect'" v-if="form.data.accessSupport === 'indirect'"
:rules="[{ required: true, message: '请选择关联菜单' }]" :rules="[{ required: true, message: '请选择关联菜单' }]"
style="margin-top: 24px; margin-bottom: 0"
> >
<a-tree-select <a-tree-select
v-model:value="form.data.indirectMenus" v-model:value="form.data.indirectMenus"
@ -161,6 +178,7 @@
v-model:value="form.data.permissions" v-model:value="form.data.permissions"
style="width: 300px" style="width: 300px"
allowClear allowClear
placeholder="请输入权限名称"
/> />
</a-form-item> </a-form-item>
</a-form> </a-form>
@ -171,19 +189,29 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { PlusOutlined } from '@ant-design/icons-vue'; import {
PlusOutlined,
QuestionCircleFilled,
QuestionCircleOutlined,
} from '@ant-design/icons-vue';
import {
getMenuTree_api,
getAssetsType_api,
getMenuDetail_api,
} from '@/api/system/menu';
import { exportPermission_api } from '@/api/system/permission';
const route = useRoute(); const route = useRoute();
const routeParams = { const routeParams = {
id: route.params.id === ':id' ? '' : route.params.id, id: route.params.id === ':id' ? '' : (route.params.id as string),
...route.query, ...route.query,
url: route.query.basePath,
}; };
const form = reactive({ const form = reactive({
data: { data: {
name: '', name: '',
code: '', code: '',
url: '',
sortIndex: '', sortIndex: '',
icon: '', icon: '',
describe: '', describe: '',
@ -194,10 +222,29 @@ const form = reactive({
...routeParams, ...routeParams,
} as formType, } as formType,
treeData: [], treeData: [], //
assetsType: [] as assetType[], assetsType: [] as assetType[], //
}); premissonList: [], //
init: () => {
//
routeParams.id &&
getMenuDetail_api(routeParams.id).then((resp) => {
console.log('菜单详情', resp);
});
//
// exportPermission_api()
//
getMenuTree_api({ paging: false }).then((resp) => {
console.log('关联菜单', resp);
});
//
getAssetsType_api().then((resp:any) => {
form.assetsType = resp.result.map((item:any)=>({label:item.name,value:item.id}))
});
},
});
form.init();
const clickSave = () => {}; const clickSave = () => {};
type formType = { type formType = {
@ -250,6 +297,9 @@ type assetType = {
display: block; display: block;
:deep(.ant-form-item-label) { :deep(.ant-form-item-label) {
overflow: inherit; overflow: inherit;
.img-style {
cursor: help;
}
label::after { label::after {
display: none; display: none;
} }