diff --git a/src/assets/sass/_global.scss b/src/assets/sass/_global.scss
index 575a4bd8..287d915e 100644
--- a/src/assets/sass/_global.scss
+++ b/src/assets/sass/_global.scss
@@ -168,6 +168,13 @@ $alignSelfs: auto, flex-start, flex-end, center, baseline, stretch;
}
}
}
+ &_g {
+ @for $i from -20 to 20 {
+ &-#{$i} {
+ flex-grow: #{$i};
+ }
+ }
+ }
// justify-content
&_j_c {
@each $var in $justifyContents {
diff --git a/src/router/index.js b/src/router/index.js
index b2dd48b1..514adc2c 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -102,7 +102,7 @@ function addRoutes(menus = [], routeList = []) {
component: dynamics[`../views/modules/iframe/index.vue`],
meta: {
id: item.id,
- title: item.name,
+ label: item.name,
type: item.type,
url: item.url,
dynamic: true,
diff --git a/src/utils/enum.js b/src/utils/enum.js
index 49261541..876c9ecb 100644
--- a/src/utils/enum.js
+++ b/src/utils/enum.js
@@ -52,7 +52,8 @@ export const MenuType = {
MENU: 1,
BUTTON: 2,
IFRAME: 3,
- URL: 4
+ URL: 4,
+ GROUP: 5
}
// 文件存储类型
export const FileStorageType = {
diff --git a/src/views/layout/components/headbar/components/menu/index.vue b/src/views/layout/components/headbar/components/menu/index.vue
index 72acff50..bc3f6e3c 100644
--- a/src/views/layout/components/headbar/components/menu/index.vue
+++ b/src/views/layout/components/headbar/components/menu/index.vue
@@ -34,10 +34,15 @@ watchEffect(() => {
:active-text-color="menuTheme.activeTextColor"
:unique-opened="true"
mode="horizontal">
+
+
+
@@ -45,12 +50,20 @@ watchEffect(() => {
diff --git a/src/views/layout/components/headbar/index.vue b/src/views/layout/components/headbar/index.vue
index 2708b488..834b94ad 100644
--- a/src/views/layout/components/headbar/index.vue
+++ b/src/views/layout/components/headbar/index.vue
@@ -1,25 +1,27 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/layout/components/sub-menu/index.vue b/src/views/layout/components/sub-menu/index.vue
index 93d1cade..03c52b6d 100644
--- a/src/views/layout/components/sub-menu/index.vue
+++ b/src/views/layout/components/sub-menu/index.vue
@@ -26,7 +26,14 @@ const clickHandle = () => {
-
+
+
+
+ {{ data.label }}
+
+
+
+
{{ data.label }}
diff --git a/src/views/modules/develop/menu/components/sidebar.vue b/src/views/modules/develop/menu/components/sidebar.vue
index b0fdce34..d5b75d43 100644
--- a/src/views/modules/develop/menu/components/sidebar.vue
+++ b/src/views/modules/develop/menu/components/sidebar.vue
@@ -51,12 +51,12 @@ const addHandle = (row) => {
id: `${ VIRTUAL_ID_KEY }${ index.value }`,
name: `未命名${ index.value }`,
parentId: 0,
- type: 0
+ type: MenuType.CATALOG
}
if (row) {
menu.parentId = row.id
- if (row.type === 1) {
- menu.type = 2
+ if (row.type === MenuType.MENU) {
+ menu.type = MenuType.BUTTON
}
if (!row.children) {
row.children = []
@@ -107,7 +107,7 @@ const deleteHandle = (node, row) => {
const clickHandle = (row, node) => {
value.value = row.id
- emits('change', { row, parentType: node.parent.data.type || 0 })
+ emits('change', { row, parentType: node.parent.data.type || MenuType.CATALOG })
}
const allowDragHandle = (node) => {
@@ -128,17 +128,22 @@ const allowDropHandle = (dragNode, dropNode, type) => {
break
case 'prev':
case 'next':
- dropParentType = dropNode.parent.data.type || 0
+ dropParentType = dropNode.parent.data.type || MenuType.CATALOG
break
}
switch (dragData.type) {
case MenuType.CATALOG:
- if (dropParentType !== MenuType.CATALOG) {
+ if (dropParentType !== MenuType.CATALOG && dropParentType !== MenuType.GROUP) {
+ result = false
+ }
+ break
+ case MenuType.GROUP:
+ if (dropParentType !== MenuType.CATALOG && dropParentType !== MenuType.GROUP) {
result = false
}
break
case MenuType.MENU:
- if (dropParentType !== MenuType.CATALOG) {
+ if (dropParentType !== MenuType.CATALOG && dropParentType !== MenuType.GROUP) {
result = false
}
break
@@ -148,12 +153,12 @@ const allowDropHandle = (dragNode, dropNode, type) => {
}
break
case MenuType.IFRAME:
- if (dropParentType !== MenuType.CATALOG) {
+ if (dropParentType !== MenuType.CATALOG && dropParentType !== MenuType.GROUP) {
result = false
}
break
case MenuType.URL:
- if (dropParentType !== MenuType.CATALOG) {
+ if (dropParentType !== MenuType.CATALOG && dropParentType !== MenuType.GROUP) {
result = false
}
break
@@ -246,7 +251,7 @@ onBeforeMount(() => {
diff --git a/src/views/modules/develop/menu/index.vue b/src/views/modules/develop/menu/index.vue
index 8df58d63..e1e88eb6 100644
--- a/src/views/modules/develop/menu/index.vue
+++ b/src/views/modules/develop/menu/index.vue
@@ -40,7 +40,7 @@ const row = ref(null) // todo: 引用传递 用于编辑之后修改 列表数
const parentType = ref(0) // 父级的类型
const rules = reactive(function() {
const checkUrl = (_rule, value, callback) => {
- const types = [1, 3, 4]
+ const types = [MenuType.MENU, MenuType.IFRAME, MenuType.URL]
if (types.includes(form.type) && !value) {
callback(new Error('请输入路由Path / Http[s] URL'))
} else {
@@ -48,7 +48,7 @@ const rules = reactive(function() {
}
}
const checkPermission = (_rule, value, callback) => {
- const types = [2]
+ const types = [MenuType.BUTTON]
if (types.includes(form.type) && !value) {
callback(new Error('请输入授权标识'))
} else {
@@ -56,7 +56,7 @@ const rules = reactive(function() {
}
}
const checkIcon = (_rule, value, callback) => {
- const types = [0, 1, 3, 4]
+ const types = [MenuType.CATALOG, MenuType.MENU, MenuType.IFRAME, MenuType.URL]
if (types.includes(form.type) && !value) {
callback(new Error('请输入授权标识'))
} else {
@@ -138,13 +138,13 @@ const changeHandle = (val) => {
const buttonHandle = (val) => {
let result = false
switch (parentType.value) {
- case 0:
- if (val === 2) {
+ case MenuType.CATALOG:
+ if (val === MenuType.BUTTON) {
result = true
}
break
- case 1:
- if (val === 0 || val === 3 || val === 4) {
+ case MenuType.MENU:
+ if (val === MenuType.CATALOG || val === MenuType.IFRAME || val === MenuType.URL) {
result = true
}
break
@@ -220,19 +220,22 @@ onBeforeMount(() => {
:key="item.value">{{item.label}}
-
+
-
+
-
+
-
+
-
+
@@ -242,7 +245,7 @@ onBeforeMount(() => {
controls-position="right"
:disabled="readonly" />
-
+