新功能:
1.菜单新增是否固定配置; 2.菜单新增框外显示配置
This commit is contained in:
@@ -171,6 +171,8 @@ class Menu(CoreModel):
|
|||||||
cache = models.BooleanField(default=False, blank=True, verbose_name="是否页面缓存", help_text="是否页面缓存")
|
cache = models.BooleanField(default=False, blank=True, verbose_name="是否页面缓存", help_text="是否页面缓存")
|
||||||
visible = models.BooleanField(default=True, blank=True, verbose_name="侧边栏中是否显示",
|
visible = models.BooleanField(default=True, blank=True, verbose_name="侧边栏中是否显示",
|
||||||
help_text="侧边栏中是否显示")
|
help_text="侧边栏中是否显示")
|
||||||
|
is_iframe = models.BooleanField(default=False, blank=True, verbose_name="框架外显示", help_text="框架外显示")
|
||||||
|
is_affix = models.BooleanField(default=False, blank=True, verbose_name="是否固定", help_text="是否固定")
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = table_prefix + "system_menu"
|
db_table = table_prefix + "system_menu"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import XEUtils from "xe-utils"
|
import XEUtils from "xe-utils"
|
||||||
|
import {dynamicRoutes, staticRoutes} from "/@/router/route";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description: 处理后端菜单数据格式
|
* @description: 处理后端菜单数据格式
|
||||||
@@ -13,20 +14,51 @@ export const handleMenu = (menuData: Array<any>) => {
|
|||||||
isLink: item.is_link,
|
isLink: item.is_link,
|
||||||
isHide: !item.visible,
|
isHide: !item.visible,
|
||||||
isKeepAlive: item.cache,
|
isKeepAlive: item.cache,
|
||||||
isAffix: false,
|
isAffix: item.is_affix,
|
||||||
isIframe: false,
|
isIframe: item.is_iframe,
|
||||||
roles: ['admin'],
|
roles: ['admin'],
|
||||||
icon: item.icon
|
icon: item.icon
|
||||||
}
|
}
|
||||||
item.name = item.component_name
|
item.name = item.component_name
|
||||||
|
item.path = item.web_path
|
||||||
return item
|
return item
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 处理框架外的路由
|
||||||
|
const handleFrame = (item: any) => {
|
||||||
|
if (item.is_iframe) {
|
||||||
|
item.meta = {
|
||||||
|
title: item.title,
|
||||||
|
isLink: item.is_link,
|
||||||
|
isHide: !item.visible,
|
||||||
|
isKeepAlive: item.cache,
|
||||||
|
isAffix: item.is_affix,
|
||||||
|
isIframe: item.is_iframe,
|
||||||
|
roles: ['admin'],
|
||||||
|
icon: item.icon
|
||||||
|
}
|
||||||
|
item.name = item.component_name
|
||||||
|
item.path = item.web_path
|
||||||
|
}
|
||||||
|
return item
|
||||||
|
}
|
||||||
|
|
||||||
|
// 框架内路由
|
||||||
|
const dynamicRoutes:Array<any> = []
|
||||||
|
// 框架外路由
|
||||||
|
const staticRoutes:Array<any> = []
|
||||||
|
|
||||||
menuData.forEach((val) => {
|
menuData.forEach((val) => {
|
||||||
handleMeta(val)
|
console.log(111,val.is_iframe)
|
||||||
val.path = val.web_path
|
if(val.is_iframe){
|
||||||
|
staticRoutes.push(handleFrame(val))
|
||||||
|
console.log(staticRoutes)
|
||||||
|
}else{
|
||||||
|
dynamicRoutes.push(handleMeta(val))
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const data = XEUtils.toArrayTree(menuData, {
|
const data = XEUtils.toArrayTree(dynamicRoutes, {
|
||||||
parentKey: 'parent',
|
parentKey: 'parent',
|
||||||
strict: true,
|
strict: true,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="路由地址" prop="web_path">
|
<el-form-item v-if="!menuFormData.is_link" label="路由地址" prop="web_path">
|
||||||
<el-input v-model="menuFormData.web_path" placeholder="请输入路由地址,请以/开头" />
|
<el-input v-model="menuFormData.web_path" placeholder="请输入路由地址,请以/开头" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
@@ -56,6 +56,16 @@
|
|||||||
<el-switch v-model="menuFormData.is_link" width="60" inline-prompt active-text="是" inactive-text="否" />
|
<el-switch v-model="menuFormData.is_link" width="60" inline-prompt active-text="是" inactive-text="否" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item required v-if="!menuFormData.is_catalog" label="是否固定">
|
||||||
|
<el-switch v-model="menuFormData.is_affix" width="60" inline-prompt active-text="是" inactive-text="否" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item v-if="!menuFormData.is_catalog" required label="框外显示">
|
||||||
|
<el-switch v-model="menuFormData.is_iframe" width="60" inline-prompt active-text="是" inactive-text="否" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<el-form-item label="备注">
|
<el-form-item label="备注">
|
||||||
@@ -168,6 +178,8 @@ let menuFormData = reactive<MenuFormDataType>({
|
|||||||
description: '',
|
description: '',
|
||||||
is_catalog: false,
|
is_catalog: false,
|
||||||
is_link: false,
|
is_link: false,
|
||||||
|
is_iframe: false,
|
||||||
|
is_affix: false,
|
||||||
});
|
});
|
||||||
let menuBtnLoading = ref(false);
|
let menuBtnLoading = ref(false);
|
||||||
|
|
||||||
@@ -186,6 +198,8 @@ const setMenuFormData = () => {
|
|||||||
menuFormData.description = props.initFormData?.description || '';
|
menuFormData.description = props.initFormData?.description || '';
|
||||||
menuFormData.is_catalog = !!props.initFormData.is_catalog;
|
menuFormData.is_catalog = !!props.initFormData.is_catalog;
|
||||||
menuFormData.is_link = !!props.initFormData.is_link;
|
menuFormData.is_link = !!props.initFormData.is_link;
|
||||||
|
menuFormData.is_iframe =!!props.initFormData.is_iframe;
|
||||||
|
menuFormData.is_affix =!!props.initFormData.is_affix;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ export interface MenuTreeItemType {
|
|||||||
visible: boolean;
|
visible: boolean;
|
||||||
creator: string;
|
creator: string;
|
||||||
parent: number | string;
|
parent: number | string;
|
||||||
|
is_iframe:boolean;
|
||||||
|
is_affix:boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface MenuFormDataType {
|
export interface MenuFormDataType {
|
||||||
@@ -60,4 +62,8 @@ export interface MenuFormDataType {
|
|||||||
description: string;
|
description: string;
|
||||||
is_catalog: boolean;
|
is_catalog: boolean;
|
||||||
is_link: boolean;
|
is_link: boolean;
|
||||||
}
|
|
||||||
|
is_iframe:boolean;
|
||||||
|
|
||||||
|
is_affix:boolean;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user