diff --git a/backend/dvadmin/system/models.py b/backend/dvadmin/system/models.py index 4389266..4141c57 100644 --- a/backend/dvadmin/system/models.py +++ b/backend/dvadmin/system/models.py @@ -183,6 +183,7 @@ class Menu(CoreModel): component_name = models.CharField(max_length=50, verbose_name="组件名称", null=True, blank=True, help_text="组件名称") status = models.BooleanField(default=True, blank=True, verbose_name="菜单状态", help_text="菜单状态") + frame_out = 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="侧边栏中是否显示", help_text="侧边栏中是否显示") diff --git a/backend/dvadmin/system/views/menu.py b/backend/dvadmin/system/views/menu.py index b00086a..6410d99 100644 --- a/backend/dvadmin/system/views/menu.py +++ b/backend/dvadmin/system/views/menu.py @@ -146,7 +146,7 @@ class WebRouterSerializer(CustomModelSerializer): class Meta: model = Menu fields = ('id', 'parent', 'icon', 'sort', 'path', 'name', 'title', 'is_link', 'is_catalog', 'web_path', 'component', - 'component_name', 'cache', 'visible', 'menuPermission') + 'component_name', 'cache', 'visible', 'menuPermission', 'frame_out') read_only_fields = ["id"] diff --git a/web/src/menu/index.js b/web/src/menu/index.js index 4333213..3ca26b2 100644 --- a/web/src/menu/index.js +++ b/web/src/menu/index.js @@ -9,7 +9,7 @@ import { uniqueId } from 'lodash' import { request } from '@/api/service' import XEUtils from 'xe-utils' -import { frameInRoutes } from '@/router/routes' +import { frameInRoutes, frameOutRoutes } from '@/router/routes' const _import = require('@/libs/util.import.' + process.env.NODE_ENV) const pluginImport = require('@/libs/util.import.plugin') /** @@ -79,7 +79,11 @@ export const handleRouter = function (menuData) { cache: item.cache } } - result.push(obj) + if (item.frame_out) { + frameOutRoutes.push(obj) + } else { + result.push(obj) + } } else { if (item.is_link === 0) { delete item.path @@ -87,7 +91,7 @@ export const handleRouter = function (menuData) { } } frameInRoutes[0].children = [...result] - return frameInRoutes + return { routes: frameInRoutes, frameOut: frameOutRoutes } } /** diff --git a/web/src/router/index.js b/web/src/router/index.js index a55e22e..5c4e780 100644 --- a/web/src/router/index.js +++ b/web/src/router/index.js @@ -30,7 +30,7 @@ VueRouter.prototype.replace = function replace (location) { } Vue.use(VueRouter) - +console.log(routes) // 导出路由 在 main.js 里使用 const router = new VueRouter({ routes @@ -72,11 +72,17 @@ router.beforeEach(async (to, from, next) => { getMenu().then(ret => { // 校验路由是否有效 ret = checkRouter(ret) - const routes = handleRouter(ret) + const { routes, frameOut } = handleRouter(ret) // 处理路由 得到每一级的路由设置 store.commit('d2admin/page/init', routes) - - router.addRoutes(routes) + routes.map((r) => { + router.addRoute(r) + }) + frameOut.map((r) => { + router.addRoute(r) + router.options.routes.push(r) + }) + console.log('router', router, routes, frameOut) // routes.forEach(route => router.addRoute(route)) const menu = handleAsideMenu(ret) diff --git a/web/src/router/routes.js b/web/src/router/routes.js index 83ef3eb..47b15bf 100644 --- a/web/src/router/routes.js +++ b/web/src/router/routes.js @@ -100,6 +100,7 @@ const errorPage = [{ // 导出需要显示菜单的 export const frameInRoutes = frameIn +export const frameOutRoutes = frameOut // 重新组织后导出 export default [ diff --git a/web/src/views/system/menu/crud.js b/web/src/views/system/menu/crud.js index 7480a33..cd84f79 100644 --- a/web/src/views/system/menu/crud.js +++ b/web/src/views/system/menu/crud.js @@ -449,6 +449,32 @@ export const crudOptions = (vm) => { } } } + }, { + title: '主框架外展示', + key: 'frame_out', + search: { + disabled: false + }, + width: 75, + type: 'radio', + dict: { + data: vm.dictionary('button_whether_bool') + }, + form: { + value: false, + component: { + placeholder: '请选择主框架外展示' + }, + rules: [ // 表单校验规则 + { required: true, message: '主框架外展示必填项' } + ], + helper: { + render (h) { + return (< el-alert title="是否显示在主框架外展示" type="warning" /> + ) + } + } + } }, { title: '状态',