Commit e6db0d39b9ba98f6396866715ed3b6d56994697a
1 parent
2e79c9f3
feat(layout): add mix sidebar mode
Showing
64 changed files
with
1523 additions
and
1090 deletions
CHANGELOG.zh_CN.md
package.json
@@ -21,23 +21,23 @@ | @@ -21,23 +21,23 @@ | ||
21 | "reinstall": "rimraf yarn.lock && rimraf package.lock.json && rimraf node_modules && npm run bootstrap" | 21 | "reinstall": "rimraf yarn.lock && rimraf package.lock.json && rimraf node_modules && npm run bootstrap" |
22 | }, | 22 | }, |
23 | "dependencies": { | 23 | "dependencies": { |
24 | - "@iconify/iconify": "^2.0.0-rc.2", | ||
25 | - "@vueuse/core": "^4.0.0-rc.9", | 24 | + "@iconify/iconify": "^2.0.0-rc.4", |
25 | + "@vueuse/core": "^4.0.0", | ||
26 | "ant-design-vue": "^2.0.0-rc.5", | 26 | "ant-design-vue": "^2.0.0-rc.5", |
27 | - "apexcharts": "^3.22.3", | 27 | + "apexcharts": "^3.23.0", |
28 | "axios": "^0.21.0", | 28 | "axios": "^0.21.0", |
29 | "crypto-es": "^1.2.6", | 29 | "crypto-es": "^1.2.6", |
30 | "echarts": "^4.9.0", | 30 | "echarts": "^4.9.0", |
31 | - "lodash-es": "^4.17.15", | 31 | + "lodash-es": "^4.17.20", |
32 | "mockjs": "^1.1.0", | 32 | "mockjs": "^1.1.0", |
33 | "moment": "^2.29.1", | 33 | "moment": "^2.29.1", |
34 | "nprogress": "^0.2.0", | 34 | "nprogress": "^0.2.0", |
35 | "path-to-regexp": "^6.2.0", | 35 | "path-to-regexp": "^6.2.0", |
36 | "qrcode": "^1.4.4", | 36 | "qrcode": "^1.4.4", |
37 | "sortablejs": "^1.12.0", | 37 | "sortablejs": "^1.12.0", |
38 | - "vditor": "^3.7.2", | 38 | + "vditor": "^3.7.3", |
39 | "vue": "^3.0.4", | 39 | "vue": "^3.0.4", |
40 | - "vue-i18n": "^9.0.0-beta.13", | 40 | + "vue-i18n": "9.0.0-beta.14", |
41 | "vue-router": "^4.0.1", | 41 | "vue-router": "^4.0.1", |
42 | "vue-types": "^3.0.1", | 42 | "vue-types": "^3.0.1", |
43 | "vuex": "^4.0.0-rc.2", | 43 | "vuex": "^4.0.0-rc.2", |
@@ -48,7 +48,7 @@ | @@ -48,7 +48,7 @@ | ||
48 | "devDependencies": { | 48 | "devDependencies": { |
49 | "@commitlint/cli": "^11.0.0", | 49 | "@commitlint/cli": "^11.0.0", |
50 | "@commitlint/config-conventional": "^11.0.0", | 50 | "@commitlint/config-conventional": "^11.0.0", |
51 | - "@iconify/json": "^1.1.272", | 51 | + "@iconify/json": "^1.1.275", |
52 | "@ls-lint/ls-lint": "^1.9.2", | 52 | "@ls-lint/ls-lint": "^1.9.2", |
53 | "@purge-icons/generated": "^0.4.1", | 53 | "@purge-icons/generated": "^0.4.1", |
54 | "@types/echarts": "^4.9.3", | 54 | "@types/echarts": "^4.9.3", |
@@ -61,10 +61,10 @@ | @@ -61,10 +61,10 @@ | ||
61 | "@types/qrcode": "^1.3.5", | 61 | "@types/qrcode": "^1.3.5", |
62 | "@types/rollup-plugin-visualizer": "^2.6.0", | 62 | "@types/rollup-plugin-visualizer": "^2.6.0", |
63 | "@types/sortablejs": "^1.10.6", | 63 | "@types/sortablejs": "^1.10.6", |
64 | - "@types/yargs": "^15.0.11", | 64 | + "@types/yargs": "^15.0.12", |
65 | "@types/zxcvbn": "^4.4.0", | 65 | "@types/zxcvbn": "^4.4.0", |
66 | - "@typescript-eslint/eslint-plugin": "^4.10.0", | ||
67 | - "@typescript-eslint/parser": "^4.10.0", | 66 | + "@typescript-eslint/eslint-plugin": "^4.11.0", |
67 | + "@typescript-eslint/parser": "^4.11.0", | ||
68 | "@vue/compiler-sfc": "^3.0.4", | 68 | "@vue/compiler-sfc": "^3.0.4", |
69 | "@vuedx/typecheck": "^0.2.4-0", | 69 | "@vuedx/typecheck": "^0.2.4-0", |
70 | "@vuedx/typescript-plugin-vue": "^0.2.4-0", | 70 | "@vuedx/typescript-plugin-vue": "^0.2.4-0", |
@@ -75,16 +75,16 @@ | @@ -75,16 +75,16 @@ | ||
75 | "cross-env": "^7.0.3", | 75 | "cross-env": "^7.0.3", |
76 | "dot-prop": "^6.0.1", | 76 | "dot-prop": "^6.0.1", |
77 | "dotenv": "^8.2.0", | 77 | "dotenv": "^8.2.0", |
78 | - "eslint": "^7.15.0", | ||
79 | - "eslint-config-prettier": "^7.0.0", | 78 | + "eslint": "^7.16.0", |
79 | + "eslint-config-prettier": "^7.1.0", | ||
80 | "eslint-plugin-prettier": "^3.3.0", | 80 | "eslint-plugin-prettier": "^3.3.0", |
81 | - "eslint-plugin-vue": "^7.2.0", | 81 | + "eslint-plugin-vue": "^7.3.0", |
82 | "esno": "^0.3.0", | 82 | "esno": "^0.3.0", |
83 | "fs-extra": "^9.0.1", | 83 | "fs-extra": "^9.0.1", |
84 | "globrex": "^0.1.2", | 84 | "globrex": "^0.1.2", |
85 | "husky": "^4.3.6", | 85 | "husky": "^4.3.6", |
86 | "koa-static": "^5.0.0", | 86 | "koa-static": "^5.0.0", |
87 | - "less": "^3.13.0", | 87 | + "less": "^4.0.0", |
88 | "lint-staged": "^10.5.3", | 88 | "lint-staged": "^10.5.3", |
89 | "portfinder": "^1.0.28", | 89 | "portfinder": "^1.0.28", |
90 | "postcss-import": "^12.0.1", | 90 | "postcss-import": "^12.0.1", |
src/assets/images/layout/menu-mix.svg deleted
100644 → 0
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1" | ||
3 | - xmlns="http://www.w3.org/2000/svg" | ||
4 | - xmlns:xlink="http://www.w3.org/1999/xlink"> | ||
5 | - <defs> | ||
6 | - <filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox" id="filter-1"> | ||
7 | - <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset> | ||
8 | - <feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur> | ||
9 | - <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix> | ||
10 | - <feMerge> | ||
11 | - <feMergeNode in="shadowMatrixOuter1"></feMergeNode> | ||
12 | - <feMergeNode in="SourceGraphic"></feMergeNode> | ||
13 | - </feMerge> | ||
14 | - </filter> | ||
15 | - <rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect> | ||
16 | - <filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox" id="filter-4"> | ||
17 | - <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset> | ||
18 | - <feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur> | ||
19 | - <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix> | ||
20 | - </filter> | ||
21 | - </defs> | ||
22 | - <g id="配置面板" width="48" height="40" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> | ||
23 | - <g id="setting-copy-2" width="48" height="40" transform="translate(-1190.000000, -136.000000)"> | ||
24 | - <g id="Group-8" width="48" height="40" transform="translate(1167.000000, 0.000000)"> | ||
25 | - <g id="Group-5-Copy-5" filter="url(#filter-1)" transform="translate(25.000000, 137.000000)"> | ||
26 | - <mask id="mask-3" fill="white"> | ||
27 | - <use xlink:href="#path-2"></use> | ||
28 | - </mask> | ||
29 | - <g id="Rectangle-18"> | ||
30 | - <use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use> | ||
31 | - <use fill="#F0F2F5" fill-rule="evenodd" xlink:href="#path-2"></use> | ||
32 | - </g> | ||
33 | - <rect id="Rectangle-18" fill="#fff" mask="url(#mask-3)" x="0" y="0" width="16" height="40"></rect> | ||
34 | - <rect id="Rectangle-11" fill="#303648" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect> | ||
35 | - </g> | ||
36 | - </g> | ||
37 | - </g> | ||
38 | - </g> | ||
39 | -</svg> |
src/assets/images/layout/menu-sidebar.svg deleted
100644 → 0
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1" | ||
3 | - xmlns="http://www.w3.org/2000/svg" | ||
4 | - xmlns:xlink="http://www.w3.org/1999/xlink"> | ||
5 | - <defs> | ||
6 | - <filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox" id="filter-1"> | ||
7 | - <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset> | ||
8 | - <feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur> | ||
9 | - <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix> | ||
10 | - <feMerge> | ||
11 | - <feMergeNode in="shadowMatrixOuter1"></feMergeNode> | ||
12 | - <feMergeNode in="SourceGraphic"></feMergeNode> | ||
13 | - </feMerge> | ||
14 | - </filter> | ||
15 | - <rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect> | ||
16 | - <filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox" id="filter-4"> | ||
17 | - <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset> | ||
18 | - <feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur> | ||
19 | - <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix> | ||
20 | - </filter> | ||
21 | - </defs> | ||
22 | - <g width="48" height="40" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> | ||
23 | - <g id="setting-copy-2" width="48" height="40" transform="translate(-1190.000000, -136.000000)"> | ||
24 | - <g id="Group-8" width="48" height="40" transform="translate(1167.000000, 0.000000)"> | ||
25 | - <g id="Group-5-Copy-5" filter="url(#filter-1)" transform="translate(25.000000, 137.000000)"> | ||
26 | - <mask id="mask-3" fill="white"> | ||
27 | - <use xlink:href="#path-2"></use> | ||
28 | - </mask> | ||
29 | - <g id="Rectangle-18"> | ||
30 | - <use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use> | ||
31 | - <use fill="#F0F2F5" fill-rule="evenodd" xlink:href="#path-2"></use> | ||
32 | - </g> | ||
33 | - <rect id="Rectangle-11" fill="#FFFFFF" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect> | ||
34 | - <rect id="Rectangle-18" fill="#303648" mask="url(#mask-3)" x="0" y="0" width="16" height="40"></rect> | ||
35 | - </g> | ||
36 | - </g> | ||
37 | - </g> | ||
38 | - </g> | ||
39 | -</svg> |
src/assets/images/layout/menu-top.svg deleted
100644 → 0
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1" | ||
3 | - xmlns="http://www.w3.org/2000/svg" | ||
4 | - xmlns:xlink="http://www.w3.org/1999/xlink"> | ||
5 | - | ||
6 | - <defs> | ||
7 | - <filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox" id="filter-1"> | ||
8 | - <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset> | ||
9 | - <feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur> | ||
10 | - <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix> | ||
11 | - <feMerge> | ||
12 | - <feMergeNode in="shadowMatrixOuter1"></feMergeNode> | ||
13 | - <feMergeNode in="SourceGraphic"></feMergeNode> | ||
14 | - </feMerge> | ||
15 | - </filter> | ||
16 | - <rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect> | ||
17 | - <filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox" id="filter-4"> | ||
18 | - <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset> | ||
19 | - <feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur> | ||
20 | - <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix> | ||
21 | - </filter> | ||
22 | - </defs> | ||
23 | - <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> | ||
24 | - <g id="setting-copy-2" transform="translate(-1254.000000, -337.000000)"> | ||
25 | - <g id="Group-8" transform="translate(1167.000000, 0.000000)"> | ||
26 | - <g id="Group-5" filter="url(#filter-1)" transform="translate(89.000000, 338.000000)"> | ||
27 | - <mask id="mask-3" fill="white"> | ||
28 | - <use xlink:href="#path-2"></use> | ||
29 | - </mask> | ||
30 | - <g id="Rectangle-18"> | ||
31 | - <use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use> | ||
32 | - <use fill="#F0F2F5" fill-rule="evenodd" xlink:href="#path-2"></use> | ||
33 | - </g> | ||
34 | - <rect id="Rectangle-11" fill="#303648" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect> | ||
35 | - </g> | ||
36 | - </g> | ||
37 | - </g> | ||
38 | - </g> | ||
39 | -</svg> |
src/components/Application/src/AppLogo.vue
@@ -3,14 +3,10 @@ | @@ -3,14 +3,10 @@ | ||
3 | * @Description: logo component | 3 | * @Description: logo component |
4 | --> | 4 | --> |
5 | <template> | 5 | <template> |
6 | - <div | ||
7 | - class="anticon" | ||
8 | - :class="[prefixCls, theme, { 'collapsed-show-title': getCollapsedShowTitle }]" | ||
9 | - @click="handleGoHome" | ||
10 | - > | 6 | + <div class="anticon" :class="[prefixCls, theme]" @click="handleGoHome"> |
11 | <img src="/@/assets/images/logo.png" /> | 7 | <img src="/@/assets/images/logo.png" /> |
12 | <div class="ml-2 ellipsis" :class="[`${prefixCls}__title`]" v-show="showTitle"> | 8 | <div class="ml-2 ellipsis" :class="[`${prefixCls}__title`]" v-show="showTitle"> |
13 | - {{ globSetting.title }} | 9 | + {{ title }} |
14 | </div> | 10 | </div> |
15 | </div> | 11 | </div> |
16 | </template> | 12 | </template> |
@@ -40,9 +36,7 @@ | @@ -40,9 +36,7 @@ | ||
40 | setup() { | 36 | setup() { |
41 | const { prefixCls } = useDesign('app-logo'); | 37 | const { prefixCls } = useDesign('app-logo'); |
42 | 38 | ||
43 | - const { getCollapsedShowTitle } = useMenuSetting(); | ||
44 | - | ||
45 | - const globSetting = useGlobSetting(); | 39 | + const { title } = useGlobSetting(); |
46 | 40 | ||
47 | const go = useGo(); | 41 | const go = useGo(); |
48 | 42 | ||
@@ -52,8 +46,7 @@ | @@ -52,8 +46,7 @@ | ||
52 | 46 | ||
53 | return { | 47 | return { |
54 | handleGoHome, | 48 | handleGoHome, |
55 | - globSetting, | ||
56 | - getCollapsedShowTitle, | 49 | + title, |
57 | prefixCls, | 50 | prefixCls, |
58 | }; | 51 | }; |
59 | }, | 52 | }, |
@@ -70,10 +63,6 @@ | @@ -70,10 +63,6 @@ | ||
70 | cursor: pointer; | 63 | cursor: pointer; |
71 | transition: all 0.2s ease; | 64 | transition: all 0.2s ease; |
72 | 65 | ||
73 | - &.collapsed-show-title { | ||
74 | - padding-left: 20px; | ||
75 | - } | ||
76 | - | ||
77 | &.light { | 66 | &.light { |
78 | border-bottom: 1px solid @border-color-base; | 67 | border-bottom: 1px solid @border-color-base; |
79 | } | 68 | } |
src/components/Application/src/search/AppSearchModal.vue
@@ -65,10 +65,12 @@ | @@ -65,10 +65,12 @@ | ||
65 | import { useI18n } from '/@/hooks/web/useI18n'; | 65 | import { useI18n } from '/@/hooks/web/useI18n'; |
66 | import { ClickOutSide } from '/@/components/ClickOutSide'; | 66 | import { ClickOutSide } from '/@/components/ClickOutSide'; |
67 | import { useAppInject } from '/@/hooks/web/useAppInject'; | 67 | import { useAppInject } from '/@/hooks/web/useAppInject'; |
68 | + | ||
68 | export default defineComponent({ | 69 | export default defineComponent({ |
69 | name: 'AppSearchModal', | 70 | name: 'AppSearchModal', |
70 | components: { SearchOutlined, ClickOutSide, AppSearchFooter }, | 71 | components: { SearchOutlined, ClickOutSide, AppSearchFooter }, |
71 | emits: ['close'], | 72 | emits: ['close'], |
73 | + | ||
72 | props: { | 74 | props: { |
73 | visible: Boolean, | 75 | visible: Boolean, |
74 | }, | 76 | }, |
src/components/ClickOutSide/src/index.vue
@@ -3,12 +3,13 @@ | @@ -3,12 +3,13 @@ | ||
3 | </template> | 3 | </template> |
4 | <script lang="ts"> | 4 | <script lang="ts"> |
5 | import type { Ref } from 'vue'; | 5 | import type { Ref } from 'vue'; |
6 | - import { defineComponent, ref } from 'vue'; | 6 | + import { defineComponent, ref, onMounted } from 'vue'; |
7 | 7 | ||
8 | import { useClickOutside } from '/@/hooks/web/useClickOutside'; | 8 | import { useClickOutside } from '/@/hooks/web/useClickOutside'; |
9 | 9 | ||
10 | export default defineComponent({ | 10 | export default defineComponent({ |
11 | name: 'ClickOutSide', | 11 | name: 'ClickOutSide', |
12 | + emits: ['mounted', 'clickOutside'], | ||
12 | setup(_, { emit }) { | 13 | setup(_, { emit }) { |
13 | const wrap = ref<ElRef>(null); | 14 | const wrap = ref<ElRef>(null); |
14 | 15 | ||
@@ -16,6 +17,10 @@ | @@ -16,6 +17,10 @@ | ||
16 | emit('clickOutside'); | 17 | emit('clickOutside'); |
17 | }); | 18 | }); |
18 | 19 | ||
20 | + onMounted(() => { | ||
21 | + emit('mounted'); | ||
22 | + }); | ||
23 | + | ||
19 | return { wrap }; | 24 | return { wrap }; |
20 | }, | 25 | }, |
21 | }); | 26 | }); |
src/components/Markdown/src/index.vue
@@ -57,7 +57,7 @@ | @@ -57,7 +57,7 @@ | ||
57 | onUnmounted(() => { | 57 | onUnmounted(() => { |
58 | const vditorInstance = unref(vditorRef); | 58 | const vditorInstance = unref(vditorRef); |
59 | if (!vditorInstance) return; | 59 | if (!vditorInstance) return; |
60 | - vditorInstance.destroy(); | 60 | + vditorInstance?.destroy?.(); |
61 | }); | 61 | }); |
62 | 62 | ||
63 | return { | 63 | return { |
src/components/Menu/index.ts
@@ -6,4 +6,8 @@ export const BasicMenu = createAsyncComponent(() => import('./src/BasicMenu.vue' | @@ -6,4 +6,8 @@ export const BasicMenu = createAsyncComponent(() => import('./src/BasicMenu.vue' | ||
6 | loading: false, | 6 | loading: false, |
7 | }); | 7 | }); |
8 | 8 | ||
9 | +export const MenuTag = createAsyncComponent(() => import('./src/components/MenuItemTag.vue'), { | ||
10 | + loading: false, | ||
11 | +}); | ||
12 | + | ||
9 | withInstall(BasicMenu); | 13 | withInstall(BasicMenu); |
src/components/Menu/src/BasicMenu.vue
@@ -17,7 +17,7 @@ | @@ -17,7 +17,7 @@ | ||
17 | :item="item" | 17 | :item="item" |
18 | :theme="theme" | 18 | :theme="theme" |
19 | :level="1" | 19 | :level="1" |
20 | - :showTitle="showTitle" | 20 | + :showTitle="!getCollapsed" |
21 | :isHorizontal="isHorizontal" | 21 | :isHorizontal="isHorizontal" |
22 | /> | 22 | /> |
23 | </template> | 23 | </template> |
@@ -95,16 +95,12 @@ | @@ -95,16 +95,12 @@ | ||
95 | prefixCls, | 95 | prefixCls, |
96 | `justify-${align}`, | 96 | `justify-${align}`, |
97 | { | 97 | { |
98 | - [`${prefixCls}--hide-title`]: !unref(showTitle), | ||
99 | - [`${prefixCls}--collapsed-show-title`]: props.collapsedShowTitle, | ||
100 | [`${prefixCls}__second`]: !props.isHorizontal && unref(getSplit), | 98 | [`${prefixCls}__second`]: !props.isHorizontal && unref(getSplit), |
101 | [`${prefixCls}__sidebar-hor`]: unref(getIsTopMenu), | 99 | [`${prefixCls}__sidebar-hor`]: unref(getIsTopMenu), |
102 | }, | 100 | }, |
103 | ]; | 101 | ]; |
104 | }); | 102 | }); |
105 | 103 | ||
106 | - const showTitle = computed(() => props.collapsedShowTitle && unref(getCollapsed)); | ||
107 | - | ||
108 | const getInlineCollapseOptions = computed(() => { | 104 | const getInlineCollapseOptions = computed(() => { |
109 | const isInline = props.mode === MenuModeEnum.INLINE; | 105 | const isInline = props.mode === MenuModeEnum.INLINE; |
110 | 106 | ||
@@ -168,7 +164,7 @@ | @@ -168,7 +164,7 @@ | ||
168 | getMenuClass, | 164 | getMenuClass, |
169 | handleOpenChange, | 165 | handleOpenChange, |
170 | getOpenKeys, | 166 | getOpenKeys, |
171 | - showTitle, | 167 | + getCollapsed, |
172 | ...toRefs(menuState), | 168 | ...toRefs(menuState), |
173 | }; | 169 | }; |
174 | }, | 170 | }, |
src/components/Menu/src/components/MenuItemTag.vue
@@ -15,6 +15,7 @@ | @@ -15,6 +15,7 @@ | ||
15 | 15 | ||
16 | const getShowTag = computed(() => { | 16 | const getShowTag = computed(() => { |
17 | const { item, showTitle, isHorizontal } = props; | 17 | const { item, showTitle, isHorizontal } = props; |
18 | + | ||
18 | if (!item || showTitle || isHorizontal) return false; | 19 | if (!item || showTitle || isHorizontal) return false; |
19 | 20 | ||
20 | const { tag } = item; | 21 | const { tag } = item; |
src/components/Menu/src/index.less
@@ -48,47 +48,16 @@ | @@ -48,47 +48,16 @@ | ||
48 | opacity: 1 !important; | 48 | opacity: 1 !important; |
49 | } | 49 | } |
50 | 50 | ||
51 | - &--hide-title { | ||
52 | - &.ant-menu-inline-collapsed > .ant-menu-item, | ||
53 | - &.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item, | ||
54 | - &.ant-menu-inline-collapsed | ||
55 | - > .ant-menu-item-group | ||
56 | - > .ant-menu-item-group-list | ||
57 | - > .ant-menu-submenu | ||
58 | - > .ant-menu-submenu-title, | ||
59 | - &.ant-menu-inline-collapsed .ant-menu-submenu-title { | ||
60 | - padding-right: 16px !important; | ||
61 | - padding-left: 16px !important; | ||
62 | - } | ||
63 | - } | ||
64 | - | ||
65 | - &--collapsed-show-title.ant-menu-inline-collapsed { | ||
66 | - .@{basic-menu-prefix-cls}-item__level1 { | ||
67 | - padding: 2px 0; | ||
68 | - } | ||
69 | - | ||
70 | - & > li[role='menuitem']:not(.ant-menu-submenu), | ||
71 | - & > li > .ant-menu-submenu-title { | ||
72 | - display: flex; | ||
73 | - margin-top: 10px; | ||
74 | - font-size: 12px; | ||
75 | - flex-direction: column; | ||
76 | - align-items: center; | ||
77 | - line-height: 24px; | ||
78 | - } | ||
79 | - | ||
80 | - & > li > .ant-menu-submenu-title { | ||
81 | - line-height: 24px; | ||
82 | - } | ||
83 | - .@{basic-menu-content-prefix-cls}-wrapper { | ||
84 | - display: flex; | ||
85 | - justify-content: center; | ||
86 | - align-items: center; | ||
87 | - flex-direction: column; | ||
88 | - .@{basic-menu-content-prefix-cls}--show-title { | ||
89 | - line-height: 30px; | ||
90 | - } | ||
91 | - } | 51 | + &.ant-menu-inline-collapsed > .ant-menu-item, |
52 | + &.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item, | ||
53 | + &.ant-menu-inline-collapsed | ||
54 | + > .ant-menu-item-group | ||
55 | + > .ant-menu-item-group-list | ||
56 | + > .ant-menu-submenu | ||
57 | + > .ant-menu-submenu-title, | ||
58 | + &.ant-menu-inline-collapsed .ant-menu-submenu-title { | ||
59 | + padding-right: 16px !important; | ||
60 | + padding-left: 16px !important; | ||
92 | } | 61 | } |
93 | 62 | ||
94 | .@{basic-menu-content-prefix-cls}-wrapper { | 63 | .@{basic-menu-content-prefix-cls}-wrapper { |
@@ -252,43 +221,6 @@ | @@ -252,43 +221,6 @@ | ||
252 | } | 221 | } |
253 | } | 222 | } |
254 | 223 | ||
255 | - .@{basic-menu-tag-prefix-cls} { | ||
256 | - position: absolute; | ||
257 | - top: calc(50% - 8px); | ||
258 | - right: 30px; | ||
259 | - display: inline-block; | ||
260 | - padding: 2px 4px; | ||
261 | - margin-right: 4px; | ||
262 | - font-size: 12px; | ||
263 | - line-height: 14px; | ||
264 | - color: #fff; | ||
265 | - border-radius: 2px; | ||
266 | - | ||
267 | - &--dot { | ||
268 | - top: calc(50% - 4px); | ||
269 | - width: 8px; | ||
270 | - height: 8px; | ||
271 | - padding: 0; | ||
272 | - border-radius: 50%; | ||
273 | - } | ||
274 | - | ||
275 | - &--primary { | ||
276 | - background: @primary-color; | ||
277 | - } | ||
278 | - | ||
279 | - &--error { | ||
280 | - background: @error-color; | ||
281 | - } | ||
282 | - | ||
283 | - &--success { | ||
284 | - background: @success-color; | ||
285 | - } | ||
286 | - | ||
287 | - &--warn { | ||
288 | - background: @warning-color; | ||
289 | - } | ||
290 | - } | ||
291 | - | ||
292 | .ant-menu-submenu, | 224 | .ant-menu-submenu, |
293 | .ant-menu-submenu-inline { | 225 | .ant-menu-submenu-inline { |
294 | transition: unset; | 226 | transition: unset; |
@@ -322,3 +254,40 @@ | @@ -322,3 +254,40 @@ | ||
322 | } | 254 | } |
323 | } | 255 | } |
324 | } | 256 | } |
257 | + | ||
258 | +.@{basic-menu-tag-prefix-cls} { | ||
259 | + position: absolute; | ||
260 | + top: calc(50% - 8px); | ||
261 | + right: 30px; | ||
262 | + display: inline-block; | ||
263 | + padding: 2px 4px; | ||
264 | + margin-right: 4px; | ||
265 | + font-size: 12px; | ||
266 | + line-height: 14px; | ||
267 | + color: #fff; | ||
268 | + border-radius: 2px; | ||
269 | + | ||
270 | + &--dot { | ||
271 | + top: calc(50% - 4px); | ||
272 | + width: 6px; | ||
273 | + height: 6px; | ||
274 | + padding: 0; | ||
275 | + border-radius: 50%; | ||
276 | + } | ||
277 | + | ||
278 | + &--primary { | ||
279 | + background: @primary-color; | ||
280 | + } | ||
281 | + | ||
282 | + &--error { | ||
283 | + background: @error-color; | ||
284 | + } | ||
285 | + | ||
286 | + &--success { | ||
287 | + background: @success-color; | ||
288 | + } | ||
289 | + | ||
290 | + &--warn { | ||
291 | + background: @warning-color; | ||
292 | + } | ||
293 | +} |
src/components/Menu/src/props.ts
@@ -10,8 +10,6 @@ export const basicProps = { | @@ -10,8 +10,6 @@ export const basicProps = { | ||
10 | default: () => [], | 10 | default: () => [], |
11 | }, | 11 | }, |
12 | 12 | ||
13 | - collapsedShowTitle: propTypes.bool, | ||
14 | - | ||
15 | // 最好是4 倍数 | 13 | // 最好是4 倍数 |
16 | inlineIndent: propTypes.number.def(20), | 14 | inlineIndent: propTypes.number.def(20), |
17 | // 菜单组件的mode属性 | 15 | // 菜单组件的mode属性 |
@@ -19,7 +17,6 @@ export const basicProps = { | @@ -19,7 +17,6 @@ export const basicProps = { | ||
19 | type: String as PropType<MenuModeEnum>, | 17 | type: String as PropType<MenuModeEnum>, |
20 | default: MenuModeEnum.INLINE, | 18 | default: MenuModeEnum.INLINE, |
21 | }, | 19 | }, |
22 | - showLogo: propTypes.bool, | ||
23 | type: { | 20 | type: { |
24 | type: String as PropType<MenuTypeEnum>, | 21 | type: String as PropType<MenuTypeEnum>, |
25 | default: MenuTypeEnum.MIX, | 22 | default: MenuTypeEnum.MIX, |
src/components/Tinymce/src/Editor.vue
src/design/var/index.less
src/directives/clickOutside.ts
0 → 100644
1 | +import { on } from '/@/utils/domUtils'; | ||
2 | +import { isServer } from '/@/utils/is'; | ||
3 | +import type { ComponentPublicInstance, DirectiveBinding, ObjectDirective } from 'vue'; | ||
4 | + | ||
5 | +type DocumentHandler = <T extends MouseEvent>(mouseup: T, mousedown: T) => void; | ||
6 | + | ||
7 | +type FlushList = Map< | ||
8 | + HTMLElement, | ||
9 | + { | ||
10 | + documentHandler: DocumentHandler; | ||
11 | + bindingFn: (...args: unknown[]) => unknown; | ||
12 | + } | ||
13 | +>; | ||
14 | + | ||
15 | +const nodeList: FlushList = new Map(); | ||
16 | + | ||
17 | +let startClick: MouseEvent; | ||
18 | + | ||
19 | +if (!isServer) { | ||
20 | + on(document, 'mousedown', (e: MouseEvent) => (startClick = e)); | ||
21 | + on(document, 'mouseup', (e: MouseEvent) => { | ||
22 | + for (const { documentHandler } of nodeList.values()) { | ||
23 | + documentHandler(e, startClick); | ||
24 | + } | ||
25 | + }); | ||
26 | +} | ||
27 | + | ||
28 | +function createDocumentHandler(el: HTMLElement, binding: DirectiveBinding): DocumentHandler { | ||
29 | + let excludes: HTMLElement[] = []; | ||
30 | + if (Array.isArray(binding.arg)) { | ||
31 | + excludes = binding.arg; | ||
32 | + } else { | ||
33 | + // due to current implementation on binding type is wrong the type casting is necessary here | ||
34 | + excludes.push((binding.arg as unknown) as HTMLElement); | ||
35 | + } | ||
36 | + return function (mouseup, mousedown) { | ||
37 | + const popperRef = (binding.instance as ComponentPublicInstance<{ | ||
38 | + popperRef: Nullable<HTMLElement>; | ||
39 | + }>).popperRef; | ||
40 | + const mouseUpTarget = mouseup.target as Node; | ||
41 | + const mouseDownTarget = mousedown.target as Node; | ||
42 | + const isBound = !binding || !binding.instance; | ||
43 | + const isTargetExists = !mouseUpTarget || !mouseDownTarget; | ||
44 | + const isContainedByEl = el.contains(mouseUpTarget) || el.contains(mouseDownTarget); | ||
45 | + const isSelf = el === mouseUpTarget; | ||
46 | + | ||
47 | + const isTargetExcluded = | ||
48 | + (excludes.length && excludes.some((item) => item?.contains(mouseUpTarget))) || | ||
49 | + (excludes.length && excludes.includes(mouseDownTarget as HTMLElement)); | ||
50 | + const isContainedByPopper = | ||
51 | + popperRef && (popperRef.contains(mouseUpTarget) || popperRef.contains(mouseDownTarget)); | ||
52 | + if ( | ||
53 | + isBound || | ||
54 | + isTargetExists || | ||
55 | + isContainedByEl || | ||
56 | + isSelf || | ||
57 | + isTargetExcluded || | ||
58 | + isContainedByPopper | ||
59 | + ) { | ||
60 | + return; | ||
61 | + } | ||
62 | + binding.value(); | ||
63 | + }; | ||
64 | +} | ||
65 | + | ||
66 | +const ClickOutside: ObjectDirective = { | ||
67 | + beforeMount(el, binding) { | ||
68 | + nodeList.set(el, { | ||
69 | + documentHandler: createDocumentHandler(el, binding), | ||
70 | + bindingFn: binding.value, | ||
71 | + }); | ||
72 | + }, | ||
73 | + updated(el, binding) { | ||
74 | + nodeList.set(el, { | ||
75 | + documentHandler: createDocumentHandler(el, binding), | ||
76 | + bindingFn: binding.value, | ||
77 | + }); | ||
78 | + }, | ||
79 | + unmounted(el) { | ||
80 | + nodeList.delete(el); | ||
81 | + }, | ||
82 | +}; | ||
83 | + | ||
84 | +export default ClickOutside; |
src/enums/menuEnum.ts
src/hooks/setting/useHeaderSetting.ts
@@ -16,6 +16,7 @@ const { | @@ -16,6 +16,7 @@ const { | ||
16 | getSplit, | 16 | getSplit, |
17 | getShowHeaderTrigger, | 17 | getShowHeaderTrigger, |
18 | getIsSidebarType, | 18 | getIsSidebarType, |
19 | + getIsMixSidebar, | ||
19 | getIsTopMenu, | 20 | getIsTopMenu, |
20 | } = useMenuSetting(); | 21 | } = useMenuSetting(); |
21 | const { getShowBreadCrumb, getShowLogo } = useRootSetting(); | 22 | const { getShowBreadCrumb, getShowLogo } = useRootSetting(); |
@@ -27,13 +28,18 @@ const getShowFullHeaderRef = computed(() => { | @@ -27,13 +28,18 @@ const getShowFullHeaderRef = computed(() => { | ||
27 | !unref(getFullContent) && | 28 | !unref(getFullContent) && |
28 | unref(getShowMixHeaderRef) && | 29 | unref(getShowMixHeaderRef) && |
29 | unref(getShowHeader) && | 30 | unref(getShowHeader) && |
30 | - !unref(getIsTopMenu) | 31 | + !unref(getIsTopMenu) && |
32 | + !unref(getIsMixSidebar) | ||
31 | ); | 33 | ); |
32 | }); | 34 | }); |
33 | 35 | ||
34 | const getShowInsetHeaderRef = computed(() => { | 36 | const getShowInsetHeaderRef = computed(() => { |
35 | const need = !unref(getFullContent) && unref(getShowHeader); | 37 | const need = !unref(getFullContent) && unref(getShowHeader); |
36 | - return (need && !unref(getShowMixHeaderRef)) || (need && unref(getIsTopMenu)); | 38 | + return ( |
39 | + (need && !unref(getShowMixHeaderRef)) || | ||
40 | + (need && unref(getIsTopMenu)) || | ||
41 | + (need && unref(getIsMixSidebar)) | ||
42 | + ); | ||
37 | }); | 43 | }); |
38 | 44 | ||
39 | // Get header configuration | 45 | // Get header configuration |
@@ -66,7 +72,7 @@ const getShowBread = computed(() => { | @@ -66,7 +72,7 @@ const getShowBread = computed(() => { | ||
66 | }); | 72 | }); |
67 | 73 | ||
68 | const getShowHeaderLogo = computed(() => { | 74 | const getShowHeaderLogo = computed(() => { |
69 | - return unref(getShowLogo) && !unref(getIsSidebarType); | 75 | + return unref(getShowLogo) && !unref(getIsSidebarType) && !unref(getIsMixSidebar); |
70 | }); | 76 | }); |
71 | 77 | ||
72 | const getShowContent = computed(() => { | 78 | const getShowContent = computed(() => { |
src/hooks/setting/useMenuSetting.ts
@@ -37,10 +37,10 @@ const getCanDrag = computed(() => unref(getMenuSetting).canDrag); | @@ -37,10 +37,10 @@ const getCanDrag = computed(() => unref(getMenuSetting).canDrag); | ||
37 | 37 | ||
38 | const getAccordion = computed(() => unref(getMenuSetting).accordion); | 38 | const getAccordion = computed(() => unref(getMenuSetting).accordion); |
39 | 39 | ||
40 | -const getCollapsedShowTitle = computed(() => unref(getMenuSetting).collapsedShowTitle); | ||
41 | - | ||
42 | const getTopMenuAlign = computed(() => unref(getMenuSetting).topMenuAlign); | 40 | const getTopMenuAlign = computed(() => unref(getMenuSetting).topMenuAlign); |
43 | 41 | ||
42 | +const getCloseMixSidebarOnChange = computed(() => unref(getMenuSetting).closeMixSidebarOnChange); | ||
43 | + | ||
44 | const getIsSidebarType = computed(() => unref(getMenuType) === MenuTypeEnum.SIDEBAR); | 44 | const getIsSidebarType = computed(() => unref(getMenuType) === MenuTypeEnum.SIDEBAR); |
45 | 45 | ||
46 | const getIsTopMenu = computed(() => unref(getMenuType) === MenuTypeEnum.TOP_MENU); | 46 | const getIsTopMenu = computed(() => unref(getMenuType) === MenuTypeEnum.TOP_MENU); |
@@ -61,6 +61,10 @@ const getIsHorizontal = computed(() => { | @@ -61,6 +61,10 @@ const getIsHorizontal = computed(() => { | ||
61 | return unref(getMenuMode) === MenuModeEnum.HORIZONTAL; | 61 | return unref(getMenuMode) === MenuModeEnum.HORIZONTAL; |
62 | }); | 62 | }); |
63 | 63 | ||
64 | +const getIsMixSidebar = computed(() => { | ||
65 | + return unref(getMenuType) === MenuTypeEnum.MIX_SIDEBAR; | ||
66 | +}); | ||
67 | + | ||
64 | const getIsMixMode = computed(() => { | 68 | const getIsMixMode = computed(() => { |
65 | return unref(getMenuMode) === MenuModeEnum.INLINE && unref(getMenuType) === MenuTypeEnum.MIX; | 69 | return unref(getMenuMode) === MenuModeEnum.INLINE && unref(getMenuType) === MenuTypeEnum.MIX; |
66 | }); | 70 | }); |
@@ -70,14 +74,15 @@ const getRealWidth = computed(() => { | @@ -70,14 +74,15 @@ const getRealWidth = computed(() => { | ||
70 | }); | 74 | }); |
71 | 75 | ||
72 | const getMiniWidthNumber = computed(() => { | 76 | const getMiniWidthNumber = computed(() => { |
73 | - const { collapsedShowTitle } = unref(getMenuSetting); | ||
74 | - return collapsedShowTitle ? SIDE_BAR_SHOW_TIT_MINI_WIDTH : SIDE_BAR_MINI_WIDTH; | 77 | + return SIDE_BAR_MINI_WIDTH; |
75 | }); | 78 | }); |
76 | 79 | ||
77 | const getCalcContentWidth = computed(() => { | 80 | const getCalcContentWidth = computed(() => { |
78 | const width = | 81 | const width = |
79 | unref(getIsTopMenu) || !unref(getShowMenu) || (unref(getSplit) && unref(getMenuHidden)) | 82 | unref(getIsTopMenu) || !unref(getShowMenu) || (unref(getSplit) && unref(getMenuHidden)) |
80 | ? 0 | 83 | ? 0 |
84 | + : unref(getIsMixSidebar) | ||
85 | + ? SIDE_BAR_SHOW_TIT_MINI_WIDTH | ||
81 | : unref(getRealWidth); | 86 | : unref(getRealWidth); |
82 | 87 | ||
83 | return `calc(100% - ${unref(width)}px)`; | 88 | return `calc(100% - ${unref(width)}px)`; |
@@ -124,7 +129,6 @@ export function useMenuSetting() { | @@ -124,7 +129,6 @@ export function useMenuSetting() { | ||
124 | getMenuTheme, | 129 | getMenuTheme, |
125 | getCanDrag, | 130 | getCanDrag, |
126 | getIsHorizontal, | 131 | getIsHorizontal, |
127 | - getCollapsedShowTitle, | ||
128 | getIsSidebarType, | 132 | getIsSidebarType, |
129 | getAccordion, | 133 | getAccordion, |
130 | getShowTopMenu, | 134 | getShowTopMenu, |
@@ -135,5 +139,7 @@ export function useMenuSetting() { | @@ -135,5 +139,7 @@ export function useMenuSetting() { | ||
135 | getMenuBgColor, | 139 | getMenuBgColor, |
136 | getShowSidebar, | 140 | getShowSidebar, |
137 | getIsMixMode, | 141 | getIsMixMode, |
142 | + getIsMixSidebar, | ||
143 | + getCloseMixSidebarOnChange, | ||
138 | }; | 144 | }; |
139 | } | 145 | } |
src/hooks/web/useApexCharts.ts
@@ -51,7 +51,7 @@ export function useApexCharts(elRef: Ref<HTMLDivElement>) { | @@ -51,7 +51,7 @@ export function useApexCharts(elRef: Ref<HTMLDivElement>) { | ||
51 | 51 | ||
52 | tryOnUnmounted(() => { | 52 | tryOnUnmounted(() => { |
53 | if (!chartInstance) return; | 53 | if (!chartInstance) return; |
54 | - chartInstance.destroy(); | 54 | + chartInstance?.destroy?.(); |
55 | chartInstance = null; | 55 | chartInstance = null; |
56 | }); | 56 | }); |
57 | 57 |
src/hooks/web/useI18n.ts
@@ -36,5 +36,5 @@ export function useI18n(namespace?: string) { | @@ -36,5 +36,5 @@ export function useI18n(namespace?: string) { | ||
36 | // Mainly to configure the vscode i18nn ally plugin. This function is only used for routing and menus. Please use useI18n for other places | 36 | // Mainly to configure the vscode i18nn ally plugin. This function is only used for routing and menus. Please use useI18n for other places |
37 | 37 | ||
38 | // 为什么要编写此函数? | 38 | // 为什么要编写此函数? |
39 | -// 主要用于配合vscode i18nn ally插件。此功能仅用于路由和菜单。请在其他地方使用useIs18n | 39 | +// 主要用于配合vscode i18nn ally插件。此功能仅用于路由和菜单。请在其他地方使用useI18n |
40 | export const t = (key: string) => key; | 40 | export const t = (key: string) => key; |
src/layouts/default/header/components/Breadcrumb.vue
@@ -48,7 +48,7 @@ | @@ -48,7 +48,7 @@ | ||
48 | if (currentRoute.value.name === REDIRECT_NAME) { | 48 | if (currentRoute.value.name === REDIRECT_NAME) { |
49 | return; | 49 | return; |
50 | } | 50 | } |
51 | - const matched = currentRoute.value.matched; | 51 | + const matched = currentRoute.value?.matched; |
52 | if (!matched || matched.length === 0) return; | 52 | if (!matched || matched.length === 0) return; |
53 | 53 | ||
54 | let breadcrumbList = filter(toRaw(matched), (item) => { | 54 | let breadcrumbList = filter(toRaw(matched), (item) => { |
@@ -102,7 +102,7 @@ | @@ -102,7 +102,7 @@ | ||
102 | color: @breadcrumb-item-normal-color; | 102 | color: @breadcrumb-item-normal-color; |
103 | 103 | ||
104 | a { | 104 | a { |
105 | - color: @text-color-base; | 105 | + color: rgba(0, 0, 0, 0.65); |
106 | 106 | ||
107 | &:hover { | 107 | &:hover { |
108 | color: @primary-color; | 108 | color: @primary-color; |
src/layouts/default/header/index.vue
@@ -10,7 +10,9 @@ | @@ -10,7 +10,9 @@ | ||
10 | :style="getLogoWidth" | 10 | :style="getLogoWidth" |
11 | /> | 11 | /> |
12 | <LayoutTrigger | 12 | <LayoutTrigger |
13 | - v-if="(getShowContent && getShowHeaderTrigger && !getSplit) || getIsMobile" | 13 | + v-if=" |
14 | + (getShowContent && getShowHeaderTrigger && !getSplit && !getIsMixSidebar) || getIsMobile | ||
15 | + " | ||
14 | :theme="getHeaderTheme" | 16 | :theme="getHeaderTheme" |
15 | :sider="false" | 17 | :sider="false" |
16 | /> | 18 | /> |
@@ -110,6 +112,7 @@ | @@ -110,6 +112,7 @@ | ||
110 | getSplit, | 112 | getSplit, |
111 | getIsMixMode, | 113 | getIsMixMode, |
112 | getMenuWidth, | 114 | getMenuWidth, |
115 | + getIsMixSidebar, | ||
113 | } = useMenuSetting(); | 116 | } = useMenuSetting(); |
114 | const { getShowLocale } = useLocaleSetting(); | 117 | const { getShowLocale } = useLocaleSetting(); |
115 | const { getUseErrorHandle } = useRootSetting(); | 118 | const { getUseErrorHandle } = useRootSetting(); |
@@ -173,6 +176,7 @@ | @@ -173,6 +176,7 @@ | ||
173 | getUseLockPage, | 176 | getUseLockPage, |
174 | getUseErrorHandle, | 177 | getUseErrorHandle, |
175 | getLogoWidth, | 178 | getLogoWidth, |
179 | + getIsMixSidebar, | ||
176 | }; | 180 | }; |
177 | }, | 181 | }, |
178 | }); | 182 | }); |
src/layouts/default/index.vue
@@ -2,7 +2,7 @@ | @@ -2,7 +2,7 @@ | ||
2 | <Layout :class="prefixCls"> | 2 | <Layout :class="prefixCls"> |
3 | <LayoutFeatures /> | 3 | <LayoutFeatures /> |
4 | <LayoutHeader fixed v-if="getShowFullHeaderRef" /> | 4 | <LayoutHeader fixed v-if="getShowFullHeaderRef" /> |
5 | - <Layout> | 5 | + <Layout class="ant-layout-has-sider"> |
6 | <LayoutSideBar v-if="getShowSidebar || getIsMobile" /> | 6 | <LayoutSideBar v-if="getShowSidebar || getIsMobile" /> |
7 | <Layout :class="`${prefixCls}__main`"> | 7 | <Layout :class="`${prefixCls}__main`"> |
8 | <LayoutMultipleHeader /> | 8 | <LayoutMultipleHeader /> |
@@ -53,13 +53,14 @@ | @@ -53,13 +53,14 @@ | ||
53 | 53 | ||
54 | const { getShowFullHeaderRef } = useHeaderSetting(); | 54 | const { getShowFullHeaderRef } = useHeaderSetting(); |
55 | 55 | ||
56 | - const { getShowSidebar } = useMenuSetting(); | 56 | + const { getShowSidebar, getIsMixSidebar } = useMenuSetting(); |
57 | 57 | ||
58 | return { | 58 | return { |
59 | getShowFullHeaderRef, | 59 | getShowFullHeaderRef, |
60 | getShowSidebar, | 60 | getShowSidebar, |
61 | prefixCls, | 61 | prefixCls, |
62 | getIsMobile, | 62 | getIsMobile, |
63 | + getIsMixSidebar, | ||
63 | }; | 64 | }; |
64 | }, | 65 | }, |
65 | }); | 66 | }); |
src/layouts/default/menu/index.tsx
@@ -43,7 +43,6 @@ export default defineComponent({ | @@ -43,7 +43,6 @@ export default defineComponent({ | ||
43 | const { | 43 | const { |
44 | getMenuMode, | 44 | getMenuMode, |
45 | getMenuType, | 45 | getMenuType, |
46 | - getCollapsedShowTitle, | ||
47 | getMenuTheme, | 46 | getMenuTheme, |
48 | getCollapsed, | 47 | getCollapsed, |
49 | getAccordion, | 48 | getAccordion, |
@@ -132,12 +131,10 @@ export default defineComponent({ | @@ -132,12 +131,10 @@ export default defineComponent({ | ||
132 | isHorizontal={props.isHorizontal} | 131 | isHorizontal={props.isHorizontal} |
133 | type={unref(getMenuType)} | 132 | type={unref(getMenuType)} |
134 | mode={unref(getComputedMenuMode)} | 133 | mode={unref(getComputedMenuMode)} |
135 | - collapsedShowTitle={unref(getCollapsedShowTitle)} | ||
136 | theme={unref(getComputedMenuTheme)} | 134 | theme={unref(getComputedMenuTheme)} |
137 | items={unref(menusRef)} | 135 | items={unref(menusRef)} |
138 | accordion={unref(getAccordion)} | 136 | accordion={unref(getAccordion)} |
139 | onMenuClick={handleMenuClick} | 137 | onMenuClick={handleMenuClick} |
140 | - showLogo={unref(getIsShowLogo)} | ||
141 | /> | 138 | /> |
142 | ); | 139 | ); |
143 | } | 140 | } |
src/layouts/default/setting/SettingDrawer.tsx
@@ -61,7 +61,6 @@ export default defineComponent({ | @@ -61,7 +61,6 @@ export default defineComponent({ | ||
61 | getShowMenu, | 61 | getShowMenu, |
62 | getMenuType, | 62 | getMenuType, |
63 | getTrigger, | 63 | getTrigger, |
64 | - getCollapsedShowTitle, | ||
65 | getMenuFixed, | 64 | getMenuFixed, |
66 | getCollapsed, | 65 | getCollapsed, |
67 | getCanDrag, | 66 | getCanDrag, |
@@ -71,6 +70,8 @@ export default defineComponent({ | @@ -71,6 +70,8 @@ export default defineComponent({ | ||
71 | getMenuBgColor, | 70 | getMenuBgColor, |
72 | getIsTopMenu, | 71 | getIsTopMenu, |
73 | getSplit, | 72 | getSplit, |
73 | + getIsMixSidebar, | ||
74 | + getCloseMixSidebarOnChange, | ||
74 | } = useMenuSetting(); | 75 | } = useMenuSetting(); |
75 | 76 | ||
76 | const { | 77 | const { |
@@ -106,6 +107,13 @@ export default defineComponent({ | @@ -106,6 +107,13 @@ export default defineComponent({ | ||
106 | def={unref(getSplit)} | 107 | def={unref(getSplit)} |
107 | disabled={!unref(getShowMenuRef) || unref(getMenuType) !== MenuTypeEnum.MIX} | 108 | disabled={!unref(getShowMenuRef) || unref(getMenuType) !== MenuTypeEnum.MIX} |
108 | /> | 109 | /> |
110 | + | ||
111 | + <SwitchItem | ||
112 | + title={t('layout.setting.closeMixSidebarOnChange')} | ||
113 | + event={HandlerEnum.MENU_CLOSE_MIX_SIDEBAR_ON_CHANGE} | ||
114 | + def={unref(getCloseMixSidebarOnChange)} | ||
115 | + disabled={!unref(getIsMixSidebar)} | ||
116 | + /> | ||
109 | </> | 117 | </> |
110 | ); | 118 | ); |
111 | } | 119 | } |
@@ -166,14 +174,9 @@ export default defineComponent({ | @@ -166,14 +174,9 @@ export default defineComponent({ | ||
166 | title={t('layout.setting.menuCollapse')} | 174 | title={t('layout.setting.menuCollapse')} |
167 | event={HandlerEnum.MENU_COLLAPSED} | 175 | event={HandlerEnum.MENU_COLLAPSED} |
168 | def={unref(getCollapsed)} | 176 | def={unref(getCollapsed)} |
169 | - disabled={!unref(getShowMenuRef)} | ||
170 | - /> | ||
171 | - <SwitchItem | ||
172 | - title={t('layout.setting.collapseMenuDisplayName')} | ||
173 | - event={HandlerEnum.MENU_COLLAPSED_SHOW_TITLE} | ||
174 | - def={unref(getCollapsedShowTitle)} | ||
175 | - disabled={!unref(getShowMenuRef) || !unref(getCollapsed)} | 177 | + disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)} |
176 | /> | 178 | /> |
179 | + | ||
177 | <SwitchItem | 180 | <SwitchItem |
178 | title={t('layout.setting.fixedHeader')} | 181 | title={t('layout.setting.fixedHeader')} |
179 | event={HandlerEnum.HEADER_FIXED} | 182 | event={HandlerEnum.HEADER_FIXED} |
@@ -184,7 +187,7 @@ export default defineComponent({ | @@ -184,7 +187,7 @@ export default defineComponent({ | ||
184 | title={t('layout.setting.fixedSideBar')} | 187 | title={t('layout.setting.fixedSideBar')} |
185 | event={HandlerEnum.MENU_FIXED} | 188 | event={HandlerEnum.MENU_FIXED} |
186 | def={unref(getMenuFixed)} | 189 | def={unref(getMenuFixed)} |
187 | - disabled={!unref(getShowMenuRef)} | 190 | + disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)} |
188 | /> | 191 | /> |
189 | <SelectItem | 192 | <SelectItem |
190 | title={t('layout.setting.topMenuLayout')} | 193 | title={t('layout.setting.topMenuLayout')} |
@@ -192,7 +195,10 @@ export default defineComponent({ | @@ -192,7 +195,10 @@ export default defineComponent({ | ||
192 | def={unref(getTopMenuAlign)} | 195 | def={unref(getTopMenuAlign)} |
193 | options={topMenuAlignOptions} | 196 | options={topMenuAlignOptions} |
194 | disabled={ | 197 | disabled={ |
195 | - !unref(getShowHeader) || unref(getSplit) || (!unref(getIsTopMenu) && !unref(getSplit)) | 198 | + !unref(getShowHeader) || |
199 | + unref(getSplit) || | ||
200 | + (!unref(getIsTopMenu) && !unref(getSplit)) || | ||
201 | + unref(getIsMixSidebar) | ||
196 | } | 202 | } |
197 | /> | 203 | /> |
198 | <SelectItem | 204 | <SelectItem |
@@ -200,7 +206,7 @@ export default defineComponent({ | @@ -200,7 +206,7 @@ export default defineComponent({ | ||
200 | event={HandlerEnum.MENU_TRIGGER} | 206 | event={HandlerEnum.MENU_TRIGGER} |
201 | def={triggerDef} | 207 | def={triggerDef} |
202 | options={triggerOptions} | 208 | options={triggerOptions} |
203 | - disabled={!unref(getShowMenuRef)} | 209 | + disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)} |
204 | /> | 210 | /> |
205 | <SelectItem | 211 | <SelectItem |
206 | title={t('layout.setting.contentMode')} | 212 | title={t('layout.setting.contentMode')} |
@@ -282,7 +288,12 @@ export default defineComponent({ | @@ -282,7 +288,12 @@ export default defineComponent({ | ||
282 | event={HandlerEnum.HEADER_SHOW} | 288 | event={HandlerEnum.HEADER_SHOW} |
283 | def={unref(getShowHeader)} | 289 | def={unref(getShowHeader)} |
284 | /> | 290 | /> |
285 | - <SwitchItem title="Logo" event={HandlerEnum.SHOW_LOGO} def={unref(getShowLogo)} /> | 291 | + <SwitchItem |
292 | + title="Logo" | ||
293 | + event={HandlerEnum.SHOW_LOGO} | ||
294 | + def={unref(getShowLogo)} | ||
295 | + disabled={unref(getIsMixSidebar)} | ||
296 | + /> | ||
286 | <SwitchItem | 297 | <SwitchItem |
287 | title={t('layout.setting.footer')} | 298 | title={t('layout.setting.footer')} |
288 | event={HandlerEnum.SHOW_FOOTER} | 299 | event={HandlerEnum.SHOW_FOOTER} |
src/layouts/default/setting/components/TypePicker.vue
@@ -6,12 +6,13 @@ | @@ -6,12 +6,13 @@ | ||
6 | @click="handler(item)" | 6 | @click="handler(item)" |
7 | :class="[ | 7 | :class="[ |
8 | `${prefixCls}__item`, | 8 | `${prefixCls}__item`, |
9 | + `${prefixCls}__item--${item.type}`, | ||
9 | { | 10 | { |
10 | [`${prefixCls}__item--active`]: def === item.type, | 11 | [`${prefixCls}__item--active`]: def === item.type, |
11 | }, | 12 | }, |
12 | ]" | 13 | ]" |
13 | > | 14 | > |
14 | - <img :src="item.src" /> | 15 | + <div class="mix-sidebar" /> |
15 | </div> | 16 | </div> |
16 | </Tooltip> | 17 | </Tooltip> |
17 | </template> | 18 | </template> |
@@ -58,33 +59,118 @@ | @@ -58,33 +59,118 @@ | ||
58 | 59 | ||
59 | &__item { | 60 | &__item { |
60 | position: relative; | 61 | position: relative; |
61 | - width: 70px; | ||
62 | - height: 50px; | ||
63 | - margin: 0 20px 20px 0; | 62 | + width: 56px; |
63 | + height: 48px; | ||
64 | + margin-right: 16px; | ||
65 | + overflow: hidden; | ||
64 | cursor: pointer; | 66 | cursor: pointer; |
65 | - border-radius: 6px; | 67 | + background-color: #f0f2f5; |
68 | + border-radius: 4px; | ||
69 | + box-shadow: 0 1px 2.5px 0 rgba(0, 0, 0, 0.18); | ||
66 | 70 | ||
71 | + &::before, | ||
67 | &::after { | 72 | &::after { |
68 | position: absolute; | 73 | position: absolute; |
69 | - top: 50%; | ||
70 | - left: 50%; | ||
71 | - width: 0; | ||
72 | - height: 0; | ||
73 | content: ''; | 74 | content: ''; |
74 | - opacity: 0; | ||
75 | - transition: all 0.3s; | ||
76 | } | 75 | } |
77 | 76 | ||
77 | + &--sidebar { | ||
78 | + &::before { | ||
79 | + top: 0; | ||
80 | + left: 0; | ||
81 | + z-index: 1; | ||
82 | + width: 33%; | ||
83 | + height: 100%; | ||
84 | + background-color: #273352; | ||
85 | + border-radius: 4px 0 0 4px; | ||
86 | + } | ||
87 | + | ||
88 | + &::after { | ||
89 | + top: 0; | ||
90 | + left: 0; | ||
91 | + width: 100%; | ||
92 | + height: 25%; | ||
93 | + background-color: #fff; | ||
94 | + } | ||
95 | + } | ||
96 | + | ||
97 | + &--mix { | ||
98 | + &::before { | ||
99 | + top: 0; | ||
100 | + left: 0; | ||
101 | + width: 33%; | ||
102 | + height: 100%; | ||
103 | + background-color: #fff; | ||
104 | + border-radius: 4px 0 0 4px; | ||
105 | + } | ||
106 | + | ||
107 | + &::after { | ||
108 | + top: 0; | ||
109 | + left: 0; | ||
110 | + z-index: 1; | ||
111 | + width: 100%; | ||
112 | + height: 25%; | ||
113 | + background-color: #273352; | ||
114 | + } | ||
115 | + } | ||
116 | + | ||
117 | + &--top-menu { | ||
118 | + &::after { | ||
119 | + top: 0; | ||
120 | + left: 0; | ||
121 | + width: 100%; | ||
122 | + height: 25%; | ||
123 | + background-color: #273352; | ||
124 | + } | ||
125 | + } | ||
126 | + | ||
127 | + &--mix-sidebar { | ||
128 | + &::before { | ||
129 | + top: 0; | ||
130 | + left: 0; | ||
131 | + z-index: 1; | ||
132 | + width: 25%; | ||
133 | + height: 100%; | ||
134 | + background-color: #273352; | ||
135 | + border-radius: 4px 0 0 4px; | ||
136 | + } | ||
137 | + | ||
138 | + &::after { | ||
139 | + top: 0; | ||
140 | + left: 0; | ||
141 | + width: 100%; | ||
142 | + height: 25%; | ||
143 | + background-color: #fff; | ||
144 | + } | ||
145 | + | ||
146 | + .mix-sidebar { | ||
147 | + position: absolute; | ||
148 | + left: 25%; | ||
149 | + width: 15%; | ||
150 | + height: 100%; | ||
151 | + background-color: #fff; | ||
152 | + } | ||
153 | + } | ||
154 | + | ||
155 | + // &::after { | ||
156 | + // position: absolute; | ||
157 | + // top: 50%; | ||
158 | + // left: 50%; | ||
159 | + // width: 0; | ||
160 | + // height: 0; | ||
161 | + // content: ''; | ||
162 | + // opacity: 0; | ||
163 | + // transition: all 0.3s; | ||
164 | + // } | ||
165 | + | ||
78 | &:hover, | 166 | &:hover, |
79 | &--active { | 167 | &--active { |
168 | + padding: 12px; | ||
169 | + border: 2px solid @primary-color; | ||
170 | + | ||
171 | + &::before, | ||
80 | &::after { | 172 | &::after { |
81 | - top: -8px; | ||
82 | - left: -4px; | ||
83 | - width: 80px; | ||
84 | - height: 64px; | ||
85 | - border: 2px solid @primary-color; | ||
86 | - border-radius: 6px; | ||
87 | - opacity: 1; | 173 | + border-radius: 0; |
88 | } | 174 | } |
89 | } | 175 | } |
90 | } | 176 | } |
src/layouts/default/setting/enum.ts
1 | import { ContentEnum, RouterTransitionEnum } from '/@/enums/appEnum'; | 1 | import { ContentEnum, RouterTransitionEnum } from '/@/enums/appEnum'; |
2 | import { MenuModeEnum, MenuTypeEnum, TopMenuAlignEnum, TriggerEnum } from '/@/enums/menuEnum'; | 2 | import { MenuModeEnum, MenuTypeEnum, TopMenuAlignEnum, TriggerEnum } from '/@/enums/menuEnum'; |
3 | 3 | ||
4 | -import mixImg from '/@/assets/images/layout/menu-mix.svg'; | ||
5 | -import sidebarImg from '/@/assets/images/layout/menu-sidebar.svg'; | ||
6 | -import menuTopImg from '/@/assets/images/layout/menu-top.svg'; | ||
7 | import { useI18n } from '/@/hooks/web/useI18n'; | 4 | import { useI18n } from '/@/hooks/web/useI18n'; |
8 | 5 | ||
9 | const { t } = useI18n(); | 6 | const { t } = useI18n(); |
@@ -22,6 +19,7 @@ export enum HandlerEnum { | @@ -22,6 +19,7 @@ export enum HandlerEnum { | ||
22 | MENU_THEME, | 19 | MENU_THEME, |
23 | MENU_SPLIT, | 20 | MENU_SPLIT, |
24 | MENU_FIXED, | 21 | MENU_FIXED, |
22 | + MENU_CLOSE_MIX_SIDEBAR_ON_CHANGE, | ||
25 | 23 | ||
26 | // header | 24 | // header |
27 | HEADER_SHOW, | 25 | HEADER_SHOW, |
@@ -116,19 +114,21 @@ export const menuTypeList = [ | @@ -116,19 +114,21 @@ export const menuTypeList = [ | ||
116 | title: t('layout.setting.menuTypeSidebar'), | 114 | title: t('layout.setting.menuTypeSidebar'), |
117 | mode: MenuModeEnum.INLINE, | 115 | mode: MenuModeEnum.INLINE, |
118 | type: MenuTypeEnum.SIDEBAR, | 116 | type: MenuTypeEnum.SIDEBAR, |
119 | - src: sidebarImg, | ||
120 | }, | 117 | }, |
121 | { | 118 | { |
122 | title: t('layout.setting.menuTypeMix'), | 119 | title: t('layout.setting.menuTypeMix'), |
123 | mode: MenuModeEnum.INLINE, | 120 | mode: MenuModeEnum.INLINE, |
124 | type: MenuTypeEnum.MIX, | 121 | type: MenuTypeEnum.MIX, |
125 | - src: mixImg, | ||
126 | }, | 122 | }, |
127 | 123 | ||
128 | { | 124 | { |
129 | title: t('layout.setting.menuTypeTopMenu'), | 125 | title: t('layout.setting.menuTypeTopMenu'), |
130 | mode: MenuModeEnum.HORIZONTAL, | 126 | mode: MenuModeEnum.HORIZONTAL, |
131 | type: MenuTypeEnum.TOP_MENU, | 127 | type: MenuTypeEnum.TOP_MENU, |
132 | - src: menuTopImg, | 128 | + }, |
129 | + { | ||
130 | + title: t('layout.setting.menuTypeMixSidebar'), | ||
131 | + mode: MenuModeEnum.INLINE, | ||
132 | + type: MenuTypeEnum.MIX_SIDEBAR, | ||
133 | }, | 133 | }, |
134 | ]; | 134 | ]; |
src/layouts/default/setting/handler.ts
@@ -48,9 +48,6 @@ export function handler(event: HandlerEnum, value: any): DeepPartial<ProjectConf | @@ -48,9 +48,6 @@ export function handler(event: HandlerEnum, value: any): DeepPartial<ProjectConf | ||
48 | case HandlerEnum.MENU_WIDTH: | 48 | case HandlerEnum.MENU_WIDTH: |
49 | return { menuSetting: { menuWidth: value } }; | 49 | return { menuSetting: { menuWidth: value } }; |
50 | 50 | ||
51 | - case HandlerEnum.MENU_COLLAPSED_SHOW_TITLE: | ||
52 | - return { menuSetting: { collapsedShowTitle: value } }; | ||
53 | - | ||
54 | case HandlerEnum.MENU_SHOW_SIDEBAR: | 51 | case HandlerEnum.MENU_SHOW_SIDEBAR: |
55 | return { menuSetting: { show: value } }; | 52 | return { menuSetting: { show: value } }; |
56 | 53 | ||
@@ -60,6 +57,8 @@ export function handler(event: HandlerEnum, value: any): DeepPartial<ProjectConf | @@ -60,6 +57,8 @@ export function handler(event: HandlerEnum, value: any): DeepPartial<ProjectConf | ||
60 | 57 | ||
61 | case HandlerEnum.MENU_SPLIT: | 58 | case HandlerEnum.MENU_SPLIT: |
62 | return { menuSetting: { split: value } }; | 59 | return { menuSetting: { split: value } }; |
60 | + case HandlerEnum.MENU_CLOSE_MIX_SIDEBAR_ON_CHANGE: | ||
61 | + return { menuSetting: { closeMixSidebarOnChange: value } }; | ||
63 | 62 | ||
64 | case HandlerEnum.MENU_FIXED: | 63 | case HandlerEnum.MENU_FIXED: |
65 | return { menuSetting: { fixed: value } }; | 64 | return { menuSetting: { fixed: value } }; |
src/layouts/default/sider/LayoutSider.vue
@@ -128,5 +128,55 @@ | @@ -128,5 +128,55 @@ | ||
128 | }); | 128 | }); |
129 | </script> | 129 | </script> |
130 | <style lang="less"> | 130 | <style lang="less"> |
131 | - @import './index.less'; | 131 | + @import (reference) '../../../design/index.less'; |
132 | + @prefix-cls: ~'@{namespace}-layout-sideBar'; | ||
133 | + | ||
134 | + .@{prefix-cls} { | ||
135 | + z-index: @layout-sider-fixed-z-index; | ||
136 | + | ||
137 | + &--fixed { | ||
138 | + position: fixed; | ||
139 | + top: 0; | ||
140 | + left: 0; | ||
141 | + height: 100%; | ||
142 | + } | ||
143 | + | ||
144 | + &--mix { | ||
145 | + top: @header-height; | ||
146 | + height: calc(100% - @header-height); | ||
147 | + } | ||
148 | + | ||
149 | + &.ant-layout-sider-dark { | ||
150 | + background: @sider-dark-bg-color; | ||
151 | + | ||
152 | + .ant-layout-sider-trigger { | ||
153 | + color: darken(@white, 25%); | ||
154 | + background: @trigger-dark-bg-color; | ||
155 | + | ||
156 | + &:hover { | ||
157 | + color: @white; | ||
158 | + background: @trigger-dark-hover-bg-color; | ||
159 | + } | ||
160 | + } | ||
161 | + } | ||
162 | + | ||
163 | + &:not(.ant-layout-sider-dark) { | ||
164 | + // box-shadow: 2px 0 8px 0 rgba(29, 35, 41, 0.05); | ||
165 | + | ||
166 | + .ant-layout-sider-trigger { | ||
167 | + color: @text-color-base; | ||
168 | + border-top: 1px solid @border-color-light; | ||
169 | + } | ||
170 | + } | ||
171 | + | ||
172 | + .ant-layout-sider-zero-width-trigger { | ||
173 | + top: 40%; | ||
174 | + z-index: 10; | ||
175 | + } | ||
176 | + | ||
177 | + & .ant-layout-sider-trigger { | ||
178 | + height: 36px; | ||
179 | + line-height: 36px; | ||
180 | + } | ||
181 | + } | ||
132 | </style> | 182 | </style> |
src/layouts/default/sider/MixSider.vue
0 → 100644
1 | +<template> | ||
2 | + <div :class="`${prefixCls}-dom`" /> | ||
3 | + | ||
4 | + <div | ||
5 | + v-click-outside="handleClickOutside" | ||
6 | + :class="[ | ||
7 | + prefixCls, | ||
8 | + getMenuTheme, | ||
9 | + { | ||
10 | + open: openMenu, | ||
11 | + }, | ||
12 | + ]" | ||
13 | + > | ||
14 | + <AppLogo :showTitle="false" :class="`${prefixCls}-logo`" /> | ||
15 | + <ScrollContainer> | ||
16 | + <ul :class="`${prefixCls}-module`"> | ||
17 | + <li | ||
18 | + :class="[ | ||
19 | + `${prefixCls}-module__item `, | ||
20 | + { | ||
21 | + [`${prefixCls}-module__item--active`]: item.path === activePath, | ||
22 | + }, | ||
23 | + ]" | ||
24 | + v-for="item in menuModules" | ||
25 | + :key="item.path" | ||
26 | + @click="hanldeModuleClick(item.path)" | ||
27 | + > | ||
28 | + <MenuTag :item="item" :showTitle="false" :isHorizontal="false" /> | ||
29 | + <g-icon | ||
30 | + :class="`${prefixCls}-module__icon`" | ||
31 | + :size="22" | ||
32 | + :icon="item.meta && item.meta.icon" | ||
33 | + /> | ||
34 | + <p :class="`${prefixCls}-module__name`">{{ t(item.name) }}</p> | ||
35 | + </li> | ||
36 | + </ul> | ||
37 | + </ScrollContainer> | ||
38 | + | ||
39 | + <div :class="`${prefixCls}-menu-list`" ref="sideRef" :style="getMenuStyle"> | ||
40 | + <div | ||
41 | + :class="[ | ||
42 | + `${prefixCls}-menu-list__title`, | ||
43 | + { | ||
44 | + show: openMenu, | ||
45 | + }, | ||
46 | + ]" | ||
47 | + > | ||
48 | + <span class="text"> {{ title }}</span> | ||
49 | + </div> | ||
50 | + <ScrollContainer :class="`${prefixCls}-menu-list__content`"> | ||
51 | + <BasicMenu | ||
52 | + :isHorizontal="false" | ||
53 | + mode="inline" | ||
54 | + :items="chilrenMenus" | ||
55 | + :theme="getMenuTheme" | ||
56 | + @menuClick="handleMenuClick" | ||
57 | + /> | ||
58 | + </ScrollContainer> | ||
59 | + <div | ||
60 | + v-show="getShowDragBar && openMenu" | ||
61 | + :class="`${prefixCls}-drag-bar`" | ||
62 | + ref="dragBarRef" | ||
63 | + ></div> | ||
64 | + </div> | ||
65 | + </div> | ||
66 | +</template> | ||
67 | +<script lang="ts"> | ||
68 | + import { defineComponent, onMounted, ref, computed, CSSProperties, unref } from 'vue'; | ||
69 | + import type { Menu } from '/@/router/types'; | ||
70 | + import type { RouteLocationNormalized } from 'vue-router'; | ||
71 | + import { useDesign } from '/@/hooks/web/useDesign'; | ||
72 | + import { getShallowMenus, getChildrenMenus, getCurrentParentPath } from '/@/router/menus'; | ||
73 | + import { useI18n } from '/@/hooks/web/useI18n'; | ||
74 | + import { ScrollContainer } from '/@/components/Container'; | ||
75 | + import { AppLogo } from '/@/components/Application'; | ||
76 | + import { useGo } from '/@/hooks/web/usePage'; | ||
77 | + import { BasicMenu, MenuTag } from '/@/components/Menu'; | ||
78 | + import { listenerLastChangeTab } from '/@/logics/mitt/tabChange'; | ||
79 | + import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; | ||
80 | + import { useDragLine } from './useLayoutSider'; | ||
81 | + | ||
82 | + import clickOutside from '/@/directives/clickOutside'; | ||
83 | + import { useGlobSetting } from '/@/hooks/setting'; | ||
84 | + | ||
85 | + export default defineComponent({ | ||
86 | + name: 'LayoutMixSider', | ||
87 | + components: { | ||
88 | + ScrollContainer, | ||
89 | + AppLogo, | ||
90 | + BasicMenu, | ||
91 | + MenuTag, | ||
92 | + }, | ||
93 | + directives: { | ||
94 | + clickOutside, | ||
95 | + }, | ||
96 | + setup() { | ||
97 | + let menuModules = ref<Menu[]>([]); | ||
98 | + const activePath = ref(''); | ||
99 | + const chilrenMenus = ref<Menu[]>([]); | ||
100 | + const openMenu = ref(false); | ||
101 | + const dragBarRef = ref<ElRef>(null); | ||
102 | + const sideRef = ref<ElRef>(null); | ||
103 | + const currentRoute = ref<Nullable<RouteLocationNormalized>>(null); | ||
104 | + | ||
105 | + const { prefixCls } = useDesign('layout-mix-sider'); | ||
106 | + const go = useGo(); | ||
107 | + const { t } = useI18n(); | ||
108 | + const { | ||
109 | + getMenuWidth, | ||
110 | + getCanDrag, | ||
111 | + getCloseMixSidebarOnChange, | ||
112 | + getMenuTheme, | ||
113 | + getMixSidebarTheme, | ||
114 | + } = useMenuSetting(); | ||
115 | + const { title } = useGlobSetting(); | ||
116 | + | ||
117 | + useDragLine(sideRef, dragBarRef, true); | ||
118 | + | ||
119 | + const getMenuStyle = computed( | ||
120 | + (): CSSProperties => { | ||
121 | + return { | ||
122 | + width: unref(openMenu) ? `${unref(getMenuWidth)}px` : 0, | ||
123 | + }; | ||
124 | + } | ||
125 | + ); | ||
126 | + | ||
127 | + const getShowDragBar = computed(() => unref(getCanDrag)); | ||
128 | + | ||
129 | + onMounted(async () => { | ||
130 | + menuModules.value = await getShallowMenus(); | ||
131 | + }); | ||
132 | + | ||
133 | + listenerLastChangeTab((route) => { | ||
134 | + currentRoute.value = route; | ||
135 | + setActive(); | ||
136 | + if (unref(getCloseMixSidebarOnChange)) { | ||
137 | + openMenu.value = false; | ||
138 | + } | ||
139 | + }); | ||
140 | + | ||
141 | + async function hanldeModuleClick(path: string) { | ||
142 | + const children = await getChildrenMenus(path); | ||
143 | + | ||
144 | + if (unref(activePath) === path) { | ||
145 | + openMenu.value = !unref(openMenu); | ||
146 | + if (!unref(openMenu)) { | ||
147 | + setActive(); | ||
148 | + } | ||
149 | + } else { | ||
150 | + openMenu.value = true; | ||
151 | + activePath.value = path; | ||
152 | + } | ||
153 | + | ||
154 | + if (!children || children.length === 0) { | ||
155 | + go(path); | ||
156 | + chilrenMenus.value = []; | ||
157 | + openMenu.value = false; | ||
158 | + return; | ||
159 | + } | ||
160 | + chilrenMenus.value = children; | ||
161 | + } | ||
162 | + | ||
163 | + async function setActive() { | ||
164 | + const path = currentRoute.value?.path; | ||
165 | + if (!path) return; | ||
166 | + const parentPath = await getCurrentParentPath(path); | ||
167 | + activePath.value = parentPath; | ||
168 | + // hanldeModuleClick(parentPath); | ||
169 | + } | ||
170 | + | ||
171 | + function handleMenuClick(path: string) { | ||
172 | + go(path); | ||
173 | + } | ||
174 | + | ||
175 | + function handleClickOutside() { | ||
176 | + openMenu.value = false; | ||
177 | + setActive(); | ||
178 | + } | ||
179 | + | ||
180 | + return { | ||
181 | + t, | ||
182 | + prefixCls, | ||
183 | + menuModules, | ||
184 | + hanldeModuleClick, | ||
185 | + activePath, | ||
186 | + chilrenMenus, | ||
187 | + getShowDragBar, | ||
188 | + handleMenuClick, | ||
189 | + getMenuStyle, | ||
190 | + handleClickOutside, | ||
191 | + sideRef, | ||
192 | + dragBarRef, | ||
193 | + title, | ||
194 | + openMenu, | ||
195 | + getMenuTheme, | ||
196 | + getMixSidebarTheme, | ||
197 | + }; | ||
198 | + }, | ||
199 | + }); | ||
200 | +</script> | ||
201 | +<style lang="less"> | ||
202 | + @import (reference) '../../../design/index.less'; | ||
203 | + @prefix-cls: ~'@{namespace}-layout-mix-sider'; | ||
204 | + @tag-prefix-cls: ~'@{namespace}-basic-menu-item-tag'; | ||
205 | + @width: 80px; | ||
206 | + .@{prefix-cls} { | ||
207 | + position: fixed; | ||
208 | + top: 0; | ||
209 | + left: 0; | ||
210 | + z-index: @layout-mix-sider-fixed-z-index; | ||
211 | + width: @width; | ||
212 | + height: 100%; | ||
213 | + max-width: @width; | ||
214 | + min-width: @width; | ||
215 | + overflow: hidden; | ||
216 | + background: @sider-dark-bg-color; | ||
217 | + transition: all 0.2s ease 0s; | ||
218 | + flex: 0 0 @width; | ||
219 | + .@{tag-prefix-cls} { | ||
220 | + position: absolute; | ||
221 | + top: 6px; | ||
222 | + right: 2px; | ||
223 | + } | ||
224 | + | ||
225 | + &-dom { | ||
226 | + width: @width; | ||
227 | + height: 100%; | ||
228 | + max-width: @width; | ||
229 | + min-width: @width; | ||
230 | + overflow: hidden; | ||
231 | + transition: all 0.2s ease 0s; | ||
232 | + flex: 0 0 @width; | ||
233 | + } | ||
234 | + | ||
235 | + &-logo { | ||
236 | + display: flex; | ||
237 | + height: @header-height; | ||
238 | + padding-left: 0 !important; | ||
239 | + justify-content: center; | ||
240 | + | ||
241 | + img { | ||
242 | + width: @logo-width; | ||
243 | + height: @logo-width; | ||
244 | + } | ||
245 | + } | ||
246 | + | ||
247 | + &.light { | ||
248 | + .@{prefix-cls}-logo { | ||
249 | + border-bottom: 1px solid rgb(238, 238, 238); | ||
250 | + } | ||
251 | + | ||
252 | + &.open { | ||
253 | + > .scroll-container { | ||
254 | + border-right: 1px solid rgb(238, 238, 238); | ||
255 | + } | ||
256 | + } | ||
257 | + | ||
258 | + .@{prefix-cls}-module { | ||
259 | + &__item { | ||
260 | + font-weight: normal; | ||
261 | + color: rgba(0, 0, 0, 0.65); | ||
262 | + | ||
263 | + &--active { | ||
264 | + color: @primary-color; | ||
265 | + background: unset; | ||
266 | + } | ||
267 | + } | ||
268 | + } | ||
269 | + } | ||
270 | + | ||
271 | + &.dark { | ||
272 | + &.open { | ||
273 | + .@{prefix-cls}-logo { | ||
274 | + border-bottom: 1px solid rgb(114 114 114); | ||
275 | + } | ||
276 | + | ||
277 | + > .scroll-container { | ||
278 | + border-right: 1px solid rgb(114 114 114); | ||
279 | + } | ||
280 | + } | ||
281 | + .@{prefix-cls}-menu-list { | ||
282 | + background: @sider-dark-bg-color; | ||
283 | + | ||
284 | + &__title { | ||
285 | + color: @white; | ||
286 | + border-bottom: none; | ||
287 | + border-bottom: 1px solid rgb(114 114 114); | ||
288 | + } | ||
289 | + } | ||
290 | + } | ||
291 | + | ||
292 | + &-module { | ||
293 | + position: relative; | ||
294 | + height: calc(100% - @header-height) !important; | ||
295 | + padding-top: 1px; | ||
296 | + | ||
297 | + &__item { | ||
298 | + position: relative; | ||
299 | + padding: 12px 0; | ||
300 | + color: rgba(255, 255, 255, 0.65); | ||
301 | + text-align: center; | ||
302 | + cursor: pointer; | ||
303 | + transition: all 0.3s ease; | ||
304 | + | ||
305 | + &:hover { | ||
306 | + color: @white; | ||
307 | + } | ||
308 | + // &:hover, | ||
309 | + &--active { | ||
310 | + font-weight: 700; | ||
311 | + color: @white; | ||
312 | + background: @sider-dark-darken-bg-color; | ||
313 | + | ||
314 | + &::before { | ||
315 | + position: absolute; | ||
316 | + top: 0; | ||
317 | + left: 0; | ||
318 | + width: 3px; | ||
319 | + height: 100%; | ||
320 | + background: @primary-color; | ||
321 | + content: ''; | ||
322 | + } | ||
323 | + } | ||
324 | + } | ||
325 | + | ||
326 | + &__icon { | ||
327 | + margin-bottom: 8px; | ||
328 | + font-size: 24px; | ||
329 | + } | ||
330 | + | ||
331 | + &__name { | ||
332 | + margin-bottom: 0; | ||
333 | + font-size: 12px; | ||
334 | + } | ||
335 | + } | ||
336 | + | ||
337 | + &-menu-list { | ||
338 | + position: fixed; | ||
339 | + top: 0; | ||
340 | + left: 80px; | ||
341 | + width: 0; | ||
342 | + width: 200px; | ||
343 | + height: calc(100%); | ||
344 | + background: #fff; | ||
345 | + transition: width 0.2s; | ||
346 | + .@{tag-prefix-cls} { | ||
347 | + position: absolute; | ||
348 | + top: 10px; | ||
349 | + right: 30px; | ||
350 | + } | ||
351 | + | ||
352 | + &__title { | ||
353 | + display: flex; | ||
354 | + height: @header-height; | ||
355 | + margin-left: -6px; | ||
356 | + font-size: 18px; | ||
357 | + color: @primary-color; | ||
358 | + border-bottom: 1px solid rgb(238, 238, 238); | ||
359 | + opacity: 0; | ||
360 | + transition: unset; | ||
361 | + // justify-content: center; | ||
362 | + align-items: center; | ||
363 | + justify-content: start; | ||
364 | + | ||
365 | + &.show { | ||
366 | + opacity: 1; | ||
367 | + transition: all 0.5s ease; | ||
368 | + } | ||
369 | + } | ||
370 | + | ||
371 | + &__content { | ||
372 | + height: calc(100% - @header-height) !important; | ||
373 | + | ||
374 | + .scrollbar__wrap { | ||
375 | + height: 100%; | ||
376 | + overflow-x: hidden; | ||
377 | + } | ||
378 | + | ||
379 | + .scrollbar__bar.is-horizontal { | ||
380 | + display: none; | ||
381 | + } | ||
382 | + | ||
383 | + .ant-menu { | ||
384 | + height: 100%; | ||
385 | + } | ||
386 | + | ||
387 | + .ant-menu-inline, | ||
388 | + .ant-menu-vertical, | ||
389 | + .ant-menu-vertical-left { | ||
390 | + border-right: 1px solid transparent; | ||
391 | + } | ||
392 | + } | ||
393 | + } | ||
394 | + | ||
395 | + &-drag-bar { | ||
396 | + position: absolute; | ||
397 | + top: 0; | ||
398 | + right: -3px; | ||
399 | + width: 3px; | ||
400 | + height: 100%; | ||
401 | + cursor: ew-resize; | ||
402 | + background: #f8f8f9; | ||
403 | + border-top: none; | ||
404 | + border-bottom: none; | ||
405 | + box-shadow: 0 0 4px 0 rgba(28, 36, 56, 0.15); | ||
406 | + } | ||
407 | + } | ||
408 | +</style> |
src/layouts/default/sider/index.less deleted
100644 → 0
1 | -@import (reference) '../../../design/index.less'; | ||
2 | -@prefix-cls: ~'@{namespace}-layout-sideBar'; | ||
3 | - | ||
4 | -.@{prefix-cls} { | ||
5 | - z-index: @layout-sider-fixed-z-index; | ||
6 | - | ||
7 | - &--fixed { | ||
8 | - position: fixed; | ||
9 | - top: 0; | ||
10 | - left: 0; | ||
11 | - height: 100%; | ||
12 | - } | ||
13 | - | ||
14 | - &--mix { | ||
15 | - top: @header-height; | ||
16 | - height: calc(100% - @header-height); | ||
17 | - } | ||
18 | - | ||
19 | - &.ant-layout-sider-dark { | ||
20 | - background: @sider-dark-bg-color; | ||
21 | - | ||
22 | - .ant-layout-sider-trigger { | ||
23 | - color: darken(@white, 25%); | ||
24 | - background: @trigger-dark-bg-color; | ||
25 | - | ||
26 | - &:hover { | ||
27 | - color: @white; | ||
28 | - background: @trigger-dark-hover-bg-color; | ||
29 | - } | ||
30 | - } | ||
31 | - } | ||
32 | - | ||
33 | - &:not(.ant-layout-sider-dark) { | ||
34 | - // box-shadow: 2px 0 8px 0 rgba(29, 35, 41, 0.05); | ||
35 | - | ||
36 | - .ant-layout-sider-trigger { | ||
37 | - color: @text-color-base; | ||
38 | - border-top: 1px solid @border-color-light; | ||
39 | - } | ||
40 | - } | ||
41 | - | ||
42 | - .ant-layout-sider-zero-width-trigger { | ||
43 | - top: 40%; | ||
44 | - z-index: 10; | ||
45 | - } | ||
46 | - | ||
47 | - & .ant-layout-sider-trigger { | ||
48 | - height: 36px; | ||
49 | - line-height: 36px; | ||
50 | - } | ||
51 | -} |
src/layouts/default/sider/index.vue
@@ -10,6 +10,7 @@ | @@ -10,6 +10,7 @@ | ||
10 | > | 10 | > |
11 | <Sider /> | 11 | <Sider /> |
12 | </Drawer> | 12 | </Drawer> |
13 | + <MixSider v-else-if="getIsMixSidebar" /> | ||
13 | <Sider v-else /> | 14 | <Sider v-else /> |
14 | </template> | 15 | </template> |
15 | <script lang="ts"> | 16 | <script lang="ts"> |
@@ -17,16 +18,17 @@ | @@ -17,16 +18,17 @@ | ||
17 | 18 | ||
18 | import Sider from './LayoutSider.vue'; | 19 | import Sider from './LayoutSider.vue'; |
19 | import { Drawer } from 'ant-design-vue'; | 20 | import { Drawer } from 'ant-design-vue'; |
21 | + import MixSider from './MixSider.vue'; | ||
20 | import { useAppInject } from '/@/hooks/web/useAppInject'; | 22 | import { useAppInject } from '/@/hooks/web/useAppInject'; |
21 | import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; | 23 | import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; |
22 | import { useDesign } from '/@/hooks/web/useDesign'; | 24 | import { useDesign } from '/@/hooks/web/useDesign'; |
23 | export default defineComponent({ | 25 | export default defineComponent({ |
24 | name: 'SiderWrapper', | 26 | name: 'SiderWrapper', |
25 | - components: { Sider, Drawer }, | 27 | + components: { Sider, Drawer, MixSider }, |
26 | setup() { | 28 | setup() { |
27 | const { prefixCls } = useDesign('layout-sider-wrapper'); | 29 | const { prefixCls } = useDesign('layout-sider-wrapper'); |
28 | const { getIsMobile } = useAppInject(); | 30 | const { getIsMobile } = useAppInject(); |
29 | - const { setMenuSetting, getCollapsed, getMenuWidth } = useMenuSetting(); | 31 | + const { setMenuSetting, getCollapsed, getMenuWidth, getIsMixSidebar } = useMenuSetting(); |
30 | 32 | ||
31 | function handleClose() { | 33 | function handleClose() { |
32 | setMenuSetting({ | 34 | setMenuSetting({ |
@@ -34,7 +36,7 @@ | @@ -34,7 +36,7 @@ | ||
34 | }); | 36 | }); |
35 | } | 37 | } |
36 | 38 | ||
37 | - return { prefixCls, getIsMobile, getCollapsed, handleClose, getMenuWidth }; | 39 | + return { prefixCls, getIsMobile, getCollapsed, handleClose, getMenuWidth, getIsMixSidebar }; |
38 | }, | 40 | }, |
39 | }); | 41 | }); |
40 | </script> | 42 | </script> |
src/layouts/default/sider/useLayoutSider.ts
@@ -71,21 +71,30 @@ export function useTrigger(getIsMobile: Ref<boolean>) { | @@ -71,21 +71,30 @@ export function useTrigger(getIsMobile: Ref<boolean>) { | ||
71 | * @param siderRef | 71 | * @param siderRef |
72 | * @param dragBarRef | 72 | * @param dragBarRef |
73 | */ | 73 | */ |
74 | -export function useDragLine(siderRef: Ref<any>, dragBarRef: Ref<any>) { | 74 | +export function useDragLine(siderRef: Ref<any>, dragBarRef: Ref<any>, mix = false) { |
75 | const { getMiniWidthNumber, getCollapsed, setMenuSetting } = useMenuSetting(); | 75 | const { getMiniWidthNumber, getCollapsed, setMenuSetting } = useMenuSetting(); |
76 | 76 | ||
77 | onMounted(() => { | 77 | onMounted(() => { |
78 | nextTick(() => { | 78 | nextTick(() => { |
79 | - const [exec] = useDebounce(changeWrapWidth, 20); | 79 | + const [exec] = useDebounce(changeWrapWidth, 80); |
80 | exec(); | 80 | exec(); |
81 | }); | 81 | }); |
82 | }); | 82 | }); |
83 | 83 | ||
84 | + function getEl(elRef: Ref<ElRef | ComponentRef>): any { | ||
85 | + const el = unref(elRef); | ||
86 | + if (!el) return null; | ||
87 | + if (Reflect.has(el, '$el')) { | ||
88 | + return (unref(elRef) as ComponentRef)?.$el; | ||
89 | + } | ||
90 | + return unref(elRef); | ||
91 | + } | ||
92 | + | ||
84 | function handleMouseMove(ele: HTMLElement, wrap: HTMLElement, clientX: number) { | 93 | function handleMouseMove(ele: HTMLElement, wrap: HTMLElement, clientX: number) { |
85 | document.onmousemove = function (innerE) { | 94 | document.onmousemove = function (innerE) { |
86 | let iT = (ele as any).left + (innerE.clientX - clientX); | 95 | let iT = (ele as any).left + (innerE.clientX - clientX); |
87 | innerE = innerE || window.event; | 96 | innerE = innerE || window.event; |
88 | - const maxT = 600; | 97 | + const maxT = 800; |
89 | const minT = unref(getMiniWidthNumber); | 98 | const minT = unref(getMiniWidthNumber); |
90 | iT < 0 && (iT = 0); | 99 | iT < 0 && (iT = 0); |
91 | iT > maxT && (iT = maxT); | 100 | iT > maxT && (iT = maxT); |
@@ -97,31 +106,36 @@ export function useDragLine(siderRef: Ref<any>, dragBarRef: Ref<any>) { | @@ -97,31 +106,36 @@ export function useDragLine(siderRef: Ref<any>, dragBarRef: Ref<any>) { | ||
97 | 106 | ||
98 | // Drag and drop in the menu area-release the mouse | 107 | // Drag and drop in the menu area-release the mouse |
99 | function removeMouseup(ele: any) { | 108 | function removeMouseup(ele: any) { |
100 | - const wrap = unref(siderRef).$el; | 109 | + const wrap = getEl(siderRef); |
101 | document.onmouseup = function () { | 110 | document.onmouseup = function () { |
102 | document.onmousemove = null; | 111 | document.onmousemove = null; |
103 | document.onmouseup = null; | 112 | document.onmouseup = null; |
113 | + wrap.style.transition = 'width 0.2s'; | ||
104 | const width = parseInt(wrap.style.width); | 114 | const width = parseInt(wrap.style.width); |
105 | - const miniWidth = unref(getMiniWidthNumber); | ||
106 | 115 | ||
107 | - if (!unref(getCollapsed)) { | ||
108 | - width > miniWidth + 20 | ||
109 | - ? setMenuSetting({ menuWidth: width }) | ||
110 | - : setMenuSetting({ collapsed: true }); | 116 | + if (!mix) { |
117 | + const miniWidth = unref(getMiniWidthNumber); | ||
118 | + if (!unref(getCollapsed)) { | ||
119 | + width > miniWidth + 20 | ||
120 | + ? setMenuSetting({ menuWidth: width }) | ||
121 | + : setMenuSetting({ collapsed: true }); | ||
122 | + } else { | ||
123 | + width > miniWidth && setMenuSetting({ collapsed: false, menuWidth: width }); | ||
124 | + } | ||
111 | } else { | 125 | } else { |
112 | - width > miniWidth && setMenuSetting({ collapsed: false, menuWidth: width }); | 126 | + setMenuSetting({ menuWidth: width }); |
113 | } | 127 | } |
128 | + | ||
114 | ele.releaseCapture?.(); | 129 | ele.releaseCapture?.(); |
115 | }; | 130 | }; |
116 | } | 131 | } |
117 | 132 | ||
118 | function changeWrapWidth() { | 133 | function changeWrapWidth() { |
119 | - const ele = unref(dragBarRef)?.$el; | ||
120 | - if (!ele) { | ||
121 | - return; | ||
122 | - } | ||
123 | - const side = unref(siderRef); | ||
124 | - const wrap = (side || {}).$el; | 134 | + const ele = getEl(dragBarRef); |
135 | + if (!ele) return; | ||
136 | + const wrap = getEl(siderRef); | ||
137 | + if (!wrap) return; | ||
138 | + | ||
125 | ele.onmousedown = (e: any) => { | 139 | ele.onmousedown = (e: any) => { |
126 | wrap.style.transition = 'unset'; | 140 | wrap.style.transition = 'unset'; |
127 | const clientX = e?.clientX; | 141 | const clientX = e?.clientX; |
src/layouts/page/useCache.ts
@@ -15,7 +15,10 @@ export function useCache(isPage: boolean) { | @@ -15,7 +15,10 @@ export function useCache(isPage: boolean) { | ||
15 | if (routeName && ![ParentLayoutName].includes(routeName)) { | 15 | if (routeName && ![ParentLayoutName].includes(routeName)) { |
16 | name.value = routeName; | 16 | name.value = routeName; |
17 | } else { | 17 | } else { |
18 | - const matched = currentRoute.value.matched; | 18 | + const matched = currentRoute.value?.matched; |
19 | + if (!matched) { | ||
20 | + return; | ||
21 | + } | ||
19 | const len = matched.length; | 22 | const len = matched.length; |
20 | if (len < 2) return; | 23 | if (len < 2) return; |
21 | name.value = matched[len - 2].name as string; | 24 | name.value = matched[len - 2].name as string; |
src/locales/lang/en/layout/setting.ts
@@ -12,7 +12,8 @@ export default { | @@ -12,7 +12,8 @@ export default { | ||
12 | menuTriggerTop: 'Top', | 12 | menuTriggerTop: 'Top', |
13 | // menu type | 13 | // menu type |
14 | menuTypeSidebar: 'Left menu mode', | 14 | menuTypeSidebar: 'Left menu mode', |
15 | - menuTypeMix: 'Mixed mode', | 15 | + menuTypeMixSidebar: 'Left menu mixed mode', |
16 | + menuTypeMix: 'Top Menu Mix mode', | ||
16 | menuTypeTopMenu: 'Top menu mode', | 17 | menuTypeTopMenu: 'Top menu mode', |
17 | 18 | ||
18 | on: 'On', | 19 | on: 'On', |
@@ -35,6 +36,7 @@ export default { | @@ -35,6 +36,7 @@ export default { | ||
35 | interfaceDisplay: 'Interface display', | 36 | interfaceDisplay: 'Interface display', |
36 | animation: 'Animation', | 37 | animation: 'Animation', |
37 | splitMenu: 'Split menu', | 38 | splitMenu: 'Split menu', |
39 | + closeMixSidebarOnChange: 'Switch page to close menu', | ||
38 | 40 | ||
39 | headerTheme: 'Header theme', | 41 | headerTheme: 'Header theme', |
40 | sidebarTheme: 'Menu theme', | 42 | sidebarTheme: 'Menu theme', |
@@ -43,7 +45,6 @@ export default { | @@ -43,7 +45,6 @@ export default { | ||
43 | menuSearch: 'Menu search', | 45 | menuSearch: 'Menu search', |
44 | menuAccordion: 'Sidebar accordion', | 46 | menuAccordion: 'Sidebar accordion', |
45 | menuCollapse: 'Collapse menu', | 47 | menuCollapse: 'Collapse menu', |
46 | - collapseMenuDisplayName: 'Collapse menu display name', | ||
47 | topMenuLayout: 'Top menu layout', | 48 | topMenuLayout: 'Top menu layout', |
48 | menuCollapseButton: 'Menu collapse button', | 49 | menuCollapseButton: 'Menu collapse button', |
49 | contentMode: 'Content area width', | 50 | contentMode: 'Content area width', |
src/locales/lang/en/routes/demo/comp.ts
@@ -9,6 +9,12 @@ export default { | @@ -9,6 +9,12 @@ export default { | ||
9 | scrollAction: 'Scroll Function', | 9 | scrollAction: 'Scroll Function', |
10 | virtualScroll: 'Virtual Scroll', | 10 | virtualScroll: 'Virtual Scroll', |
11 | 11 | ||
12 | + tree: 'Tree', | ||
13 | + | ||
14 | + treeBasic: 'Basic', | ||
15 | + editTree: 'Right-click', | ||
16 | + actionTree: 'Function operation', | ||
17 | + | ||
12 | modal: 'Modal', | 18 | modal: 'Modal', |
13 | drawer: 'Drawer', | 19 | drawer: 'Drawer', |
14 | desc: 'Desc', | 20 | desc: 'Desc', |
src/locales/lang/en/routes/demo/level.ts
src/locales/lang/en/routes/demo/tree.ts deleted
100644 → 0
src/locales/lang/zh_CN/layout/setting.ts
@@ -12,7 +12,8 @@ export default { | @@ -12,7 +12,8 @@ export default { | ||
12 | menuTriggerTop: '顶部', | 12 | menuTriggerTop: '顶部', |
13 | // menu type | 13 | // menu type |
14 | menuTypeSidebar: '左侧菜单模式', | 14 | menuTypeSidebar: '左侧菜单模式', |
15 | - menuTypeMix: '混合模式', | 15 | + menuTypeMixSidebar: '左侧菜单混合模式', |
16 | + menuTypeMix: '顶部菜单混合模式', | ||
16 | menuTypeTopMenu: '顶部菜单模式', | 17 | menuTypeTopMenu: '顶部菜单模式', |
17 | 18 | ||
18 | on: '开', | 19 | on: '开', |
@@ -34,6 +35,7 @@ export default { | @@ -34,6 +35,7 @@ export default { | ||
34 | interfaceDisplay: '界面显示', | 35 | interfaceDisplay: '界面显示', |
35 | animation: '动画', | 36 | animation: '动画', |
36 | splitMenu: '分割菜单', | 37 | splitMenu: '分割菜单', |
38 | + closeMixSidebarOnChange: '切换页面关闭菜单', | ||
37 | 39 | ||
38 | headerTheme: '顶栏主题', | 40 | headerTheme: '顶栏主题', |
39 | sidebarTheme: '菜单主题', | 41 | sidebarTheme: '菜单主题', |
@@ -42,7 +44,6 @@ export default { | @@ -42,7 +44,6 @@ export default { | ||
42 | menuSearch: '菜单搜索', | 44 | menuSearch: '菜单搜索', |
43 | menuAccordion: '侧边菜单手风琴模式', | 45 | menuAccordion: '侧边菜单手风琴模式', |
44 | menuCollapse: '折叠菜单', | 46 | menuCollapse: '折叠菜单', |
45 | - collapseMenuDisplayName: '折叠菜单显示名称', | ||
46 | topMenuLayout: '顶部菜单布局', | 47 | topMenuLayout: '顶部菜单布局', |
47 | menuCollapseButton: '菜单折叠按钮', | 48 | menuCollapseButton: '菜单折叠按钮', |
48 | contentMode: '内容区域宽度', | 49 | contentMode: '内容区域宽度', |
src/locales/lang/zh_CN/routes/demo/charts.ts
src/locales/lang/zh_CN/routes/demo/comp.ts
@@ -9,6 +9,11 @@ export default { | @@ -9,6 +9,11 @@ export default { | ||
9 | scrollAction: '滚动函数', | 9 | scrollAction: '滚动函数', |
10 | virtualScroll: '虚拟滚动', | 10 | virtualScroll: '虚拟滚动', |
11 | 11 | ||
12 | + tree: 'Tree', | ||
13 | + treeBasic: '基础树', | ||
14 | + editTree: '右键示例', | ||
15 | + actionTree: '函数操作示例', | ||
16 | + | ||
12 | modal: '弹窗扩展', | 17 | modal: '弹窗扩展', |
13 | drawer: '抽屉扩展', | 18 | drawer: '抽屉扩展', |
14 | desc: '详情组件', | 19 | desc: '详情组件', |
src/locales/lang/zh_CN/routes/demo/level.ts
src/locales/lang/zh_CN/routes/demo/tree.ts deleted
100644 → 0
src/router/menus/modules/demo/comp.ts
@@ -15,6 +15,107 @@ const menu: MenuModule = { | @@ -15,6 +15,107 @@ const menu: MenuModule = { | ||
15 | name: t('routes.demo.comp.basic'), | 15 | name: t('routes.demo.comp.basic'), |
16 | }, | 16 | }, |
17 | { | 17 | { |
18 | + path: 'form', | ||
19 | + name: t('routes.demo.form.form'), | ||
20 | + | ||
21 | + children: [ | ||
22 | + { | ||
23 | + path: 'basic', | ||
24 | + name: t('routes.demo.form.basic'), | ||
25 | + }, | ||
26 | + { | ||
27 | + path: 'useForm', | ||
28 | + name: t('routes.demo.form.useForm'), | ||
29 | + }, | ||
30 | + { | ||
31 | + path: 'refForm', | ||
32 | + name: t('routes.demo.form.refForm'), | ||
33 | + }, | ||
34 | + { | ||
35 | + path: 'advancedForm', | ||
36 | + name: t('routes.demo.form.advancedForm'), | ||
37 | + }, | ||
38 | + { | ||
39 | + path: 'ruleForm', | ||
40 | + name: t('routes.demo.form.ruleForm'), | ||
41 | + }, | ||
42 | + { | ||
43 | + path: 'dynamicForm', | ||
44 | + name: t('routes.demo.form.dynamicForm'), | ||
45 | + }, | ||
46 | + { | ||
47 | + path: 'customerForm', | ||
48 | + name: t('routes.demo.form.customerForm'), | ||
49 | + }, | ||
50 | + ], | ||
51 | + }, | ||
52 | + { | ||
53 | + path: 'table', | ||
54 | + name: t('routes.demo.table.table'), | ||
55 | + children: [ | ||
56 | + { | ||
57 | + path: 'basic', | ||
58 | + name: t('routes.demo.table.basic'), | ||
59 | + }, | ||
60 | + { | ||
61 | + path: 'treeTable', | ||
62 | + name: t('routes.demo.table.treeTable'), | ||
63 | + }, | ||
64 | + { | ||
65 | + path: 'fetchTable', | ||
66 | + name: t('routes.demo.table.fetchTable'), | ||
67 | + }, | ||
68 | + { | ||
69 | + path: 'fixedColumn', | ||
70 | + name: t('routes.demo.table.fixedColumn'), | ||
71 | + }, | ||
72 | + { | ||
73 | + path: 'customerCell', | ||
74 | + name: t('routes.demo.table.customerCell'), | ||
75 | + }, | ||
76 | + { | ||
77 | + path: 'formTable', | ||
78 | + name: t('routes.demo.table.formTable'), | ||
79 | + }, | ||
80 | + { | ||
81 | + path: 'useTable', | ||
82 | + name: t('routes.demo.table.useTable'), | ||
83 | + }, | ||
84 | + { | ||
85 | + path: 'refTable', | ||
86 | + name: t('routes.demo.table.refTable'), | ||
87 | + }, | ||
88 | + { | ||
89 | + path: 'multipleHeader', | ||
90 | + name: t('routes.demo.table.multipleHeader'), | ||
91 | + }, | ||
92 | + { | ||
93 | + path: 'mergeHeader', | ||
94 | + name: t('routes.demo.table.mergeHeader'), | ||
95 | + }, | ||
96 | + { | ||
97 | + path: 'expandTable', | ||
98 | + name: t('routes.demo.table.expandTable'), | ||
99 | + }, | ||
100 | + { | ||
101 | + path: 'fixedHeight', | ||
102 | + name: t('routes.demo.table.fixedHeight'), | ||
103 | + }, | ||
104 | + { | ||
105 | + path: 'footerTable', | ||
106 | + name: t('routes.demo.table.footerTable'), | ||
107 | + }, | ||
108 | + { | ||
109 | + path: 'editCellTable', | ||
110 | + name: t('routes.demo.table.editCellTable'), | ||
111 | + }, | ||
112 | + { | ||
113 | + path: 'editRowTable', | ||
114 | + name: t('routes.demo.table.editRowTable'), | ||
115 | + }, | ||
116 | + ], | ||
117 | + }, | ||
118 | + { | ||
18 | path: 'countTo', | 119 | path: 'countTo', |
19 | name: t('routes.demo.comp.countTo'), | 120 | name: t('routes.demo.comp.countTo'), |
20 | }, | 121 | }, |
@@ -55,6 +156,48 @@ const menu: MenuModule = { | @@ -55,6 +156,48 @@ const menu: MenuModule = { | ||
55 | }, | 156 | }, |
56 | }, | 157 | }, |
57 | { | 158 | { |
159 | + path: 'tree', | ||
160 | + name: t('routes.demo.comp.tree'), | ||
161 | + children: [ | ||
162 | + { | ||
163 | + path: 'basic', | ||
164 | + name: t('routes.demo.comp.treeBasic'), | ||
165 | + }, | ||
166 | + { | ||
167 | + path: 'editTree', | ||
168 | + name: t('routes.demo.comp.editTree'), | ||
169 | + }, | ||
170 | + { | ||
171 | + path: 'actionTree', | ||
172 | + name: t('routes.demo.comp.actionTree'), | ||
173 | + }, | ||
174 | + ], | ||
175 | + }, | ||
176 | + { | ||
177 | + name: t('routes.demo.editor.editor'), | ||
178 | + path: 'editor', | ||
179 | + children: [ | ||
180 | + { | ||
181 | + path: 'markdown', | ||
182 | + name: t('routes.demo.editor.markdown'), | ||
183 | + }, | ||
184 | + { | ||
185 | + path: 'tinymce', | ||
186 | + name: t('routes.demo.editor.tinymce'), | ||
187 | + children: [ | ||
188 | + { | ||
189 | + path: 'index', | ||
190 | + name: t('routes.demo.editor.tinymceBasic'), | ||
191 | + }, | ||
192 | + { | ||
193 | + path: 'editor', | ||
194 | + name: t('routes.demo.editor.tinymceForm'), | ||
195 | + }, | ||
196 | + ], | ||
197 | + }, | ||
198 | + ], | ||
199 | + }, | ||
200 | + { | ||
58 | path: 'scroll', | 201 | path: 'scroll', |
59 | name: t('routes.demo.comp.scroll'), | 202 | name: t('routes.demo.comp.scroll'), |
60 | children: [ | 203 | children: [ |
src/router/menus/modules/demo/editor.ts deleted
100644 → 0
1 | -import type { MenuModule } from '/@/router/types.d'; | ||
2 | -import { t } from '/@/hooks/web/useI18n'; | ||
3 | - | ||
4 | -const menu: MenuModule = { | ||
5 | - orderNo: 500, | ||
6 | - menu: { | ||
7 | - name: t('routes.demo.editor.editor'), | ||
8 | - path: '/editor', | ||
9 | - children: [ | ||
10 | - { | ||
11 | - path: 'markdown', | ||
12 | - name: t('routes.demo.editor.markdown'), | ||
13 | - }, | ||
14 | - { | ||
15 | - path: 'tinymce', | ||
16 | - name: t('routes.demo.editor.tinymce'), | ||
17 | - children: [ | ||
18 | - { | ||
19 | - path: 'index', | ||
20 | - name: t('routes.demo.editor.tinymceBasic'), | ||
21 | - }, | ||
22 | - { | ||
23 | - path: 'editor', | ||
24 | - name: t('routes.demo.editor.tinymceForm'), | ||
25 | - }, | ||
26 | - ], | ||
27 | - }, | ||
28 | - ], | ||
29 | - }, | ||
30 | -}; | ||
31 | -export default menu; |
src/router/menus/modules/demo/feat.ts
@@ -63,6 +63,28 @@ const menu: MenuModule = { | @@ -63,6 +63,28 @@ const menu: MenuModule = { | ||
63 | name: t('routes.demo.feat.errorLog'), | 63 | name: t('routes.demo.feat.errorLog'), |
64 | }, | 64 | }, |
65 | { | 65 | { |
66 | + name: t('routes.demo.excel.excel'), | ||
67 | + path: 'excel', | ||
68 | + children: [ | ||
69 | + { | ||
70 | + path: 'customExport', | ||
71 | + name: t('routes.demo.excel.customExport'), | ||
72 | + }, | ||
73 | + { | ||
74 | + path: 'jsonExport', | ||
75 | + name: t('routes.demo.excel.jsonExport'), | ||
76 | + }, | ||
77 | + { | ||
78 | + path: 'arrayExport', | ||
79 | + name: t('routes.demo.excel.arrayExport'), | ||
80 | + }, | ||
81 | + { | ||
82 | + path: 'importExcel', | ||
83 | + name: t('routes.demo.excel.importExcel'), | ||
84 | + }, | ||
85 | + ], | ||
86 | + }, | ||
87 | + { | ||
66 | path: 'testTab', | 88 | path: 'testTab', |
67 | name: t('routes.demo.feat.tab'), | 89 | name: t('routes.demo.feat.tab'), |
68 | children: [ | 90 | children: [ |
src/router/menus/modules/demo/form.ts deleted
100644 → 0
1 | -import type { MenuModule } from '/@/router/types.d'; | ||
2 | -import { t } from '/@/hooks/web/useI18n'; | ||
3 | - | ||
4 | -const menu: MenuModule = { | ||
5 | - orderNo: 40, | ||
6 | - menu: { | ||
7 | - path: '/form', | ||
8 | - name: t('routes.demo.form.form'), | ||
9 | - | ||
10 | - children: [ | ||
11 | - { | ||
12 | - path: 'basic', | ||
13 | - name: t('routes.demo.form.basic'), | ||
14 | - }, | ||
15 | - { | ||
16 | - path: 'useForm', | ||
17 | - name: t('routes.demo.form.useForm'), | ||
18 | - }, | ||
19 | - { | ||
20 | - path: 'refForm', | ||
21 | - name: t('routes.demo.form.refForm'), | ||
22 | - }, | ||
23 | - { | ||
24 | - path: 'advancedForm', | ||
25 | - name: t('routes.demo.form.advancedForm'), | ||
26 | - }, | ||
27 | - { | ||
28 | - path: 'ruleForm', | ||
29 | - name: t('routes.demo.form.ruleForm'), | ||
30 | - }, | ||
31 | - { | ||
32 | - path: 'dynamicForm', | ||
33 | - name: t('routes.demo.form.dynamicForm'), | ||
34 | - }, | ||
35 | - { | ||
36 | - path: 'customerForm', | ||
37 | - name: t('routes.demo.form.customerForm'), | ||
38 | - }, | ||
39 | - ], | ||
40 | - }, | ||
41 | -}; | ||
42 | -export default menu; |
src/router/menus/modules/demo/table.ts deleted
100644 → 0
1 | -import type { MenuModule } from '/@/router/types.d'; | ||
2 | -import { t } from '/@/hooks/web/useI18n'; | ||
3 | - | ||
4 | -const menu: MenuModule = { | ||
5 | - orderNo: 30, | ||
6 | - menu: { | ||
7 | - path: '/table', | ||
8 | - name: t('routes.demo.table.table'), | ||
9 | - children: [ | ||
10 | - { | ||
11 | - path: 'basic', | ||
12 | - name: t('routes.demo.table.basic'), | ||
13 | - }, | ||
14 | - { | ||
15 | - path: 'treeTable', | ||
16 | - name: t('routes.demo.table.treeTable'), | ||
17 | - }, | ||
18 | - { | ||
19 | - path: 'fetchTable', | ||
20 | - name: t('routes.demo.table.fetchTable'), | ||
21 | - }, | ||
22 | - { | ||
23 | - path: 'fixedColumn', | ||
24 | - name: t('routes.demo.table.fixedColumn'), | ||
25 | - }, | ||
26 | - { | ||
27 | - path: 'customerCell', | ||
28 | - name: t('routes.demo.table.customerCell'), | ||
29 | - }, | ||
30 | - { | ||
31 | - path: 'formTable', | ||
32 | - name: t('routes.demo.table.formTable'), | ||
33 | - }, | ||
34 | - { | ||
35 | - path: 'useTable', | ||
36 | - name: t('routes.demo.table.useTable'), | ||
37 | - }, | ||
38 | - { | ||
39 | - path: 'refTable', | ||
40 | - name: t('routes.demo.table.refTable'), | ||
41 | - }, | ||
42 | - { | ||
43 | - path: 'multipleHeader', | ||
44 | - name: t('routes.demo.table.multipleHeader'), | ||
45 | - }, | ||
46 | - { | ||
47 | - path: 'mergeHeader', | ||
48 | - name: t('routes.demo.table.mergeHeader'), | ||
49 | - }, | ||
50 | - { | ||
51 | - path: 'expandTable', | ||
52 | - name: t('routes.demo.table.expandTable'), | ||
53 | - }, | ||
54 | - { | ||
55 | - path: 'fixedHeight', | ||
56 | - name: t('routes.demo.table.fixedHeight'), | ||
57 | - }, | ||
58 | - { | ||
59 | - path: 'footerTable', | ||
60 | - name: t('routes.demo.table.footerTable'), | ||
61 | - }, | ||
62 | - { | ||
63 | - path: 'editCellTable', | ||
64 | - name: t('routes.demo.table.editCellTable'), | ||
65 | - }, | ||
66 | - { | ||
67 | - path: 'editRowTable', | ||
68 | - name: t('routes.demo.table.editRowTable'), | ||
69 | - }, | ||
70 | - ], | ||
71 | - }, | ||
72 | -}; | ||
73 | -export default menu; |
src/router/menus/modules/demo/tree.ts deleted
100644 → 0
1 | -import type { MenuModule } from '/@/router/types.d'; | ||
2 | -import { t } from '/@/hooks/web/useI18n'; | ||
3 | - | ||
4 | -const menu: MenuModule = { | ||
5 | - orderNo: 50, | ||
6 | - menu: { | ||
7 | - path: '/tree', | ||
8 | - name: t('routes.demo.tree.tree'), | ||
9 | - children: [ | ||
10 | - { | ||
11 | - path: 'basic', | ||
12 | - name: t('routes.demo.tree.basic'), | ||
13 | - }, | ||
14 | - { | ||
15 | - path: 'editTree', | ||
16 | - name: t('routes.demo.tree.editTree'), | ||
17 | - }, | ||
18 | - { | ||
19 | - path: 'actionTree', | ||
20 | - name: t('routes.demo.tree.actionTree'), | ||
21 | - }, | ||
22 | - ], | ||
23 | - }, | ||
24 | -}; | ||
25 | -export default menu; |
src/router/routes/modules/demo/comp.ts
@@ -22,6 +22,208 @@ const comp: AppRouteModule = { | @@ -22,6 +22,208 @@ const comp: AppRouteModule = { | ||
22 | title: t('routes.demo.comp.basic'), | 22 | title: t('routes.demo.comp.basic'), |
23 | }, | 23 | }, |
24 | }, | 24 | }, |
25 | + | ||
26 | + { | ||
27 | + path: 'form', | ||
28 | + name: 'FormDemo', | ||
29 | + redirect: '/comp/form/basic', | ||
30 | + component: getParentLayout('FormDemo'), | ||
31 | + meta: { | ||
32 | + // icon: 'mdi:form-select', | ||
33 | + title: t('routes.demo.form.form'), | ||
34 | + }, | ||
35 | + children: [ | ||
36 | + { | ||
37 | + path: 'basic', | ||
38 | + name: 'FormBasicDemo', | ||
39 | + component: () => import('/@/views/demo/form/index.vue'), | ||
40 | + meta: { | ||
41 | + title: t('routes.demo.form.basic'), | ||
42 | + }, | ||
43 | + }, | ||
44 | + { | ||
45 | + path: 'useForm', | ||
46 | + name: 'UseFormDemo', | ||
47 | + component: () => import('/@/views/demo/form/UseForm.vue'), | ||
48 | + meta: { | ||
49 | + title: t('routes.demo.form.useForm'), | ||
50 | + }, | ||
51 | + }, | ||
52 | + { | ||
53 | + path: 'refForm', | ||
54 | + name: 'RefFormDemo', | ||
55 | + component: () => import('/@/views/demo/form/RefForm.vue'), | ||
56 | + meta: { | ||
57 | + title: t('routes.demo.form.refForm'), | ||
58 | + }, | ||
59 | + }, | ||
60 | + { | ||
61 | + path: 'advancedForm', | ||
62 | + name: 'AdvancedFormDemo', | ||
63 | + component: () => import('/@/views/demo/form/AdvancedForm.vue'), | ||
64 | + meta: { | ||
65 | + title: t('routes.demo.form.advancedForm'), | ||
66 | + }, | ||
67 | + }, | ||
68 | + { | ||
69 | + path: 'ruleForm', | ||
70 | + name: 'RuleFormDemo', | ||
71 | + component: () => import('/@/views/demo/form/RuleForm.vue'), | ||
72 | + meta: { | ||
73 | + title: t('routes.demo.form.ruleForm'), | ||
74 | + }, | ||
75 | + }, | ||
76 | + { | ||
77 | + path: 'dynamicForm', | ||
78 | + name: 'DynamicFormDemo', | ||
79 | + component: () => import('/@/views/demo/form/DynamicForm.vue'), | ||
80 | + meta: { | ||
81 | + title: t('routes.demo.form.dynamicForm'), | ||
82 | + }, | ||
83 | + }, | ||
84 | + { | ||
85 | + path: 'customerForm', | ||
86 | + name: 'CustomerFormDemo', | ||
87 | + component: () => import('/@/views/demo/form/CustomerForm.vue'), | ||
88 | + meta: { | ||
89 | + title: t('routes.demo.form.customerForm'), | ||
90 | + }, | ||
91 | + }, | ||
92 | + ], | ||
93 | + }, | ||
94 | + { | ||
95 | + path: 'table', | ||
96 | + name: 'TableDemo', | ||
97 | + redirect: '/comp/table/basic', | ||
98 | + component: getParentLayout('TableDemo'), | ||
99 | + meta: { | ||
100 | + // icon: 'carbon:table-split', | ||
101 | + title: t('routes.demo.table.table'), | ||
102 | + }, | ||
103 | + | ||
104 | + children: [ | ||
105 | + { | ||
106 | + path: 'basic', | ||
107 | + name: 'TableBasicDemo', | ||
108 | + component: () => import('/@/views/demo/table/Basic.vue'), | ||
109 | + meta: { | ||
110 | + title: t('routes.demo.table.basic'), | ||
111 | + }, | ||
112 | + }, | ||
113 | + { | ||
114 | + path: 'treeTable', | ||
115 | + name: 'TreeTableDemo', | ||
116 | + component: () => import('/@/views/demo/table/TreeTable.vue'), | ||
117 | + meta: { | ||
118 | + title: t('routes.demo.table.treeTable'), | ||
119 | + }, | ||
120 | + }, | ||
121 | + { | ||
122 | + path: 'fetchTable', | ||
123 | + name: 'FetchTableDemo', | ||
124 | + component: () => import('/@/views/demo/table/FetchTable.vue'), | ||
125 | + meta: { | ||
126 | + title: t('routes.demo.table.fetchTable'), | ||
127 | + }, | ||
128 | + }, | ||
129 | + { | ||
130 | + path: 'fixedColumn', | ||
131 | + name: 'FixedColumnDemo', | ||
132 | + component: () => import('/@/views/demo/table/FixedColumn.vue'), | ||
133 | + meta: { | ||
134 | + title: t('routes.demo.table.fixedColumn'), | ||
135 | + }, | ||
136 | + }, | ||
137 | + { | ||
138 | + path: 'customerCell', | ||
139 | + name: 'CustomerCellDemo', | ||
140 | + component: () => import('/@/views/demo/table/CustomerCell.vue'), | ||
141 | + meta: { | ||
142 | + title: t('routes.demo.table.customerCell'), | ||
143 | + }, | ||
144 | + }, | ||
145 | + { | ||
146 | + path: 'formTable', | ||
147 | + name: 'FormTableDemo', | ||
148 | + component: () => import('/@/views/demo/table/FormTable.vue'), | ||
149 | + meta: { | ||
150 | + title: t('routes.demo.table.formTable'), | ||
151 | + }, | ||
152 | + }, | ||
153 | + { | ||
154 | + path: 'useTable', | ||
155 | + name: 'UseTableDemo', | ||
156 | + component: () => import('/@/views/demo/table/UseTable.vue'), | ||
157 | + meta: { | ||
158 | + title: t('routes.demo.table.useTable'), | ||
159 | + }, | ||
160 | + }, | ||
161 | + { | ||
162 | + path: 'refTable', | ||
163 | + name: 'RefTableDemo', | ||
164 | + component: () => import('/@/views/demo/table/RefTable.vue'), | ||
165 | + meta: { | ||
166 | + title: t('routes.demo.table.refTable'), | ||
167 | + }, | ||
168 | + }, | ||
169 | + { | ||
170 | + path: 'multipleHeader', | ||
171 | + name: 'MultipleHeaderDemo', | ||
172 | + component: () => import('/@/views/demo/table/MultipleHeader.vue'), | ||
173 | + meta: { | ||
174 | + title: t('routes.demo.table.multipleHeader'), | ||
175 | + }, | ||
176 | + }, | ||
177 | + { | ||
178 | + path: 'mergeHeader', | ||
179 | + name: 'MergeHeaderDemo', | ||
180 | + component: () => import('/@/views/demo/table/MergeHeader.vue'), | ||
181 | + meta: { | ||
182 | + title: t('routes.demo.table.mergeHeader'), | ||
183 | + }, | ||
184 | + }, | ||
185 | + { | ||
186 | + path: 'expandTable', | ||
187 | + name: 'ExpandTableDemo', | ||
188 | + component: () => import('/@/views/demo/table/ExpandTable.vue'), | ||
189 | + meta: { | ||
190 | + title: t('routes.demo.table.expandTable'), | ||
191 | + }, | ||
192 | + }, | ||
193 | + { | ||
194 | + path: 'fixedHeight', | ||
195 | + name: 'FixedHeightDemo', | ||
196 | + component: () => import('/@/views/demo/table/FixedHeight.vue'), | ||
197 | + meta: { | ||
198 | + title: t('routes.demo.table.fixedHeight'), | ||
199 | + }, | ||
200 | + }, | ||
201 | + { | ||
202 | + path: 'footerTable', | ||
203 | + name: 'FooterTableDemo', | ||
204 | + component: () => import('/@/views/demo/table/FooterTable.vue'), | ||
205 | + meta: { | ||
206 | + title: t('routes.demo.table.footerTable'), | ||
207 | + }, | ||
208 | + }, | ||
209 | + { | ||
210 | + path: 'editCellTable', | ||
211 | + name: 'EditCellTableDemo', | ||
212 | + component: () => import('/@/views/demo/table/EditCellTable.vue'), | ||
213 | + meta: { | ||
214 | + title: t('routes.demo.table.editCellTable'), | ||
215 | + }, | ||
216 | + }, | ||
217 | + { | ||
218 | + path: 'editRowTable', | ||
219 | + name: 'EditRowTableDemo', | ||
220 | + component: () => import('/@/views/demo/table/EditRowTable.vue'), | ||
221 | + meta: { | ||
222 | + title: t('routes.demo.table.editRowTable'), | ||
223 | + }, | ||
224 | + }, | ||
225 | + ], | ||
226 | + }, | ||
25 | { | 227 | { |
26 | path: 'transition', | 228 | path: 'transition', |
27 | name: 'transitionDemo', | 229 | name: 'transitionDemo', |
@@ -38,7 +240,89 @@ const comp: AppRouteModule = { | @@ -38,7 +240,89 @@ const comp: AppRouteModule = { | ||
38 | title: t('routes.demo.comp.countTo'), | 240 | title: t('routes.demo.comp.countTo'), |
39 | }, | 241 | }, |
40 | }, | 242 | }, |
41 | - | 243 | + { |
244 | + path: 'tree', | ||
245 | + name: 'TreeDemo', | ||
246 | + redirect: '/comp/tree/basic', | ||
247 | + component: getParentLayout('TreeDemo'), | ||
248 | + meta: { | ||
249 | + // icon: 'clarity:tree-view-line', | ||
250 | + title: t('routes.demo.comp.tree'), | ||
251 | + }, | ||
252 | + children: [ | ||
253 | + { | ||
254 | + path: 'basic', | ||
255 | + name: 'BasicTreeDemo', | ||
256 | + component: () => import('/@/views/demo/tree/index.vue'), | ||
257 | + meta: { | ||
258 | + title: t('routes.demo.comp.treeBasic'), | ||
259 | + }, | ||
260 | + }, | ||
261 | + { | ||
262 | + path: 'editTree', | ||
263 | + name: 'EditTreeDemo', | ||
264 | + component: () => import('/@/views/demo/tree/EditTree.vue'), | ||
265 | + meta: { | ||
266 | + title: t('routes.demo.comp.editTree'), | ||
267 | + }, | ||
268 | + }, | ||
269 | + { | ||
270 | + path: 'actionTree', | ||
271 | + name: 'ActionTreeDemo', | ||
272 | + component: () => import('/@/views/demo/tree/ActionTree.vue'), | ||
273 | + meta: { | ||
274 | + title: t('routes.demo.comp.actionTree'), | ||
275 | + }, | ||
276 | + }, | ||
277 | + ], | ||
278 | + }, | ||
279 | + { | ||
280 | + path: 'editor', | ||
281 | + name: 'EditorDemo', | ||
282 | + redirect: '/comp/editor/markdown', | ||
283 | + component: getParentLayout('EditorDemo'), | ||
284 | + meta: { | ||
285 | + // icon: 'carbon:table-split', | ||
286 | + title: t('routes.demo.editor.editor'), | ||
287 | + }, | ||
288 | + children: [ | ||
289 | + { | ||
290 | + path: 'markdown', | ||
291 | + name: 'MarkdownDemo', | ||
292 | + component: () => import('/@/views/demo/editor/Markdown.vue'), | ||
293 | + meta: { | ||
294 | + title: t('routes.demo.editor.markdown'), | ||
295 | + }, | ||
296 | + }, | ||
297 | + { | ||
298 | + path: 'tinymce', | ||
299 | + component: getParentLayout('TinymceDemo'), | ||
300 | + name: 'TinymceDemo', | ||
301 | + meta: { | ||
302 | + title: t('routes.demo.editor.tinymce'), | ||
303 | + }, | ||
304 | + redirect: '/comp/editor/tinymce/index', | ||
305 | + children: [ | ||
306 | + { | ||
307 | + path: 'index', | ||
308 | + name: 'TinymceBasicDemo', | ||
309 | + component: () => import('/@/views/demo/editor/tinymce/index.vue'), | ||
310 | + meta: { | ||
311 | + title: t('routes.demo.editor.tinymceBasic'), | ||
312 | + }, | ||
313 | + }, | ||
314 | + { | ||
315 | + path: 'editor', | ||
316 | + name: 'TinymceFormDemo', | ||
317 | + component: () => import('/@/views/demo/editor/tinymce/Editor.vue'), | ||
318 | + meta: { | ||
319 | + title: t('routes.demo.editor.tinymceForm'), | ||
320 | + }, | ||
321 | + }, | ||
322 | + ], | ||
323 | + }, | ||
324 | + ], | ||
325 | + }, | ||
42 | { | 326 | { |
43 | path: 'scroll', | 327 | path: 'scroll', |
44 | name: 'ScrollDemo', | 328 | name: 'ScrollDemo', |
src/router/routes/modules/demo/editor.ts deleted
100644 → 0
1 | -import type { AppRouteModule } from '/@/router/types'; | ||
2 | - | ||
3 | -import { getParentLayout, LAYOUT } from '/@/router/constant'; | ||
4 | -import { t } from '/@/hooks/web/useI18n'; | ||
5 | - | ||
6 | -const editor: AppRouteModule = { | ||
7 | - path: '/editor', | ||
8 | - name: 'Editor', | ||
9 | - component: LAYOUT, | ||
10 | - redirect: '/editor/markdown', | ||
11 | - meta: { | ||
12 | - icon: 'carbon:table-split', | ||
13 | - title: t('routes.demo.editor.editor'), | ||
14 | - }, | ||
15 | - children: [ | ||
16 | - { | ||
17 | - path: 'markdown', | ||
18 | - name: 'MarkdownDemo', | ||
19 | - component: () => import('/@/views/demo/editor/Markdown.vue'), | ||
20 | - meta: { | ||
21 | - title: t('routes.demo.editor.markdown'), | ||
22 | - }, | ||
23 | - }, | ||
24 | - { | ||
25 | - path: 'tinymce', | ||
26 | - component: getParentLayout('TinymceDemo'), | ||
27 | - name: 'TinymceDemo', | ||
28 | - meta: { | ||
29 | - title: t('routes.demo.editor.tinymce'), | ||
30 | - }, | ||
31 | - redirect: '/editor/tinymce/index', | ||
32 | - children: [ | ||
33 | - { | ||
34 | - path: 'index', | ||
35 | - name: 'TinymceBasicDemo', | ||
36 | - component: () => import('/@/views/demo/editor/tinymce/index.vue'), | ||
37 | - meta: { | ||
38 | - title: t('routes.demo.editor.tinymceBasic'), | ||
39 | - }, | ||
40 | - }, | ||
41 | - { | ||
42 | - path: 'editor', | ||
43 | - name: 'TinymceFormDemo', | ||
44 | - component: () => import('/@/views/demo/editor/tinymce/Editor.vue'), | ||
45 | - meta: { | ||
46 | - title: t('routes.demo.editor.tinymceForm'), | ||
47 | - }, | ||
48 | - }, | ||
49 | - ], | ||
50 | - }, | ||
51 | - ], | ||
52 | -}; | ||
53 | - | ||
54 | -export default editor; |
src/router/routes/modules/demo/excel.ts deleted
100644 → 0
1 | -import type { AppRouteModule } from '/@/router/types'; | ||
2 | - | ||
3 | -import { LAYOUT } from '/@/router/constant'; | ||
4 | -import { t } from '/@/hooks/web/useI18n'; | ||
5 | - | ||
6 | -const excel: AppRouteModule = { | ||
7 | - path: '/excel', | ||
8 | - name: 'Excel', | ||
9 | - component: LAYOUT, | ||
10 | - redirect: '/excel/customExport', | ||
11 | - meta: { | ||
12 | - icon: 'mdi:microsoft-excel', | ||
13 | - title: t('routes.demo.excel.excel'), | ||
14 | - }, | ||
15 | - | ||
16 | - children: [ | ||
17 | - { | ||
18 | - path: 'customExport', | ||
19 | - name: 'CustomExport', | ||
20 | - component: () => import('/@/views/demo/excel/CustomExport.vue'), | ||
21 | - meta: { | ||
22 | - title: t('routes.demo.excel.customExport'), | ||
23 | - }, | ||
24 | - }, | ||
25 | - { | ||
26 | - path: 'jsonExport', | ||
27 | - name: 'JsonExport', | ||
28 | - component: () => import('/@/views/demo/excel/JsonExport.vue'), | ||
29 | - meta: { | ||
30 | - title: t('routes.demo.excel.jsonExport'), | ||
31 | - }, | ||
32 | - }, | ||
33 | - { | ||
34 | - path: 'arrayExport', | ||
35 | - name: 'ArrayExport', | ||
36 | - component: () => import('/@/views/demo/excel/ArrayExport.vue'), | ||
37 | - meta: { | ||
38 | - title: t('routes.demo.excel.arrayExport'), | ||
39 | - }, | ||
40 | - }, | ||
41 | - { | ||
42 | - path: 'importExcel', | ||
43 | - name: 'ImportExcel', | ||
44 | - component: () => import('/@/views/demo/excel/ImportExcel.vue'), | ||
45 | - meta: { | ||
46 | - title: t('routes.demo.excel.importExcel'), | ||
47 | - }, | ||
48 | - }, | ||
49 | - ], | ||
50 | -}; | ||
51 | - | ||
52 | -export default excel; |
src/router/routes/modules/demo/feat.ts
1 | import type { AppRouteModule } from '/@/router/types'; | 1 | import type { AppRouteModule } from '/@/router/types'; |
2 | 2 | ||
3 | -import { LAYOUT } from '/@/router/constant'; | 3 | +import { getParentLayout, LAYOUT } from '/@/router/constant'; |
4 | import { t } from '/@/hooks/web/useI18n'; | 4 | import { t } from '/@/hooks/web/useI18n'; |
5 | 5 | ||
6 | const feat: AppRouteModule = { | 6 | const feat: AppRouteModule = { |
@@ -111,6 +111,51 @@ const feat: AppRouteModule = { | @@ -111,6 +111,51 @@ const feat: AppRouteModule = { | ||
111 | }, | 111 | }, |
112 | }, | 112 | }, |
113 | { | 113 | { |
114 | + path: 'excel', | ||
115 | + name: 'Excel', | ||
116 | + redirect: '/feat/excel/customExport', | ||
117 | + component: getParentLayout('Excel'), | ||
118 | + meta: { | ||
119 | + // icon: 'mdi:microsoft-excel', | ||
120 | + title: t('routes.demo.excel.excel'), | ||
121 | + }, | ||
122 | + | ||
123 | + children: [ | ||
124 | + { | ||
125 | + path: 'customExport', | ||
126 | + name: 'CustomExport', | ||
127 | + component: () => import('/@/views/demo/excel/CustomExport.vue'), | ||
128 | + meta: { | ||
129 | + title: t('routes.demo.excel.customExport'), | ||
130 | + }, | ||
131 | + }, | ||
132 | + { | ||
133 | + path: 'jsonExport', | ||
134 | + name: 'JsonExport', | ||
135 | + component: () => import('/@/views/demo/excel/JsonExport.vue'), | ||
136 | + meta: { | ||
137 | + title: t('routes.demo.excel.jsonExport'), | ||
138 | + }, | ||
139 | + }, | ||
140 | + { | ||
141 | + path: 'arrayExport', | ||
142 | + name: 'ArrayExport', | ||
143 | + component: () => import('/@/views/demo/excel/ArrayExport.vue'), | ||
144 | + meta: { | ||
145 | + title: t('routes.demo.excel.arrayExport'), | ||
146 | + }, | ||
147 | + }, | ||
148 | + { | ||
149 | + path: 'importExcel', | ||
150 | + name: 'ImportExcel', | ||
151 | + component: () => import('/@/views/demo/excel/ImportExcel.vue'), | ||
152 | + meta: { | ||
153 | + title: t('routes.demo.excel.importExcel'), | ||
154 | + }, | ||
155 | + }, | ||
156 | + ], | ||
157 | + }, | ||
158 | + { | ||
114 | path: 'testTab/:id', | 159 | path: 'testTab/:id', |
115 | name: 'TestTab', | 160 | name: 'TestTab', |
116 | component: () => import('/@/views/demo/feat/tab-params/index.vue'), | 161 | component: () => import('/@/views/demo/feat/tab-params/index.vue'), |
src/router/routes/modules/demo/form.ts deleted
100644 → 0
1 | -import type { AppRouteModule } from '/@/router/types'; | ||
2 | - | ||
3 | -import { LAYOUT } from '/@/router/constant'; | ||
4 | -import { t } from '/@/hooks/web/useI18n'; | ||
5 | - | ||
6 | -const form: AppRouteModule = { | ||
7 | - path: '/form', | ||
8 | - name: 'FormDemo', | ||
9 | - component: LAYOUT, | ||
10 | - redirect: '/form/basic', | ||
11 | - meta: { | ||
12 | - icon: 'mdi:form-select', | ||
13 | - title: t('routes.demo.form.form'), | ||
14 | - }, | ||
15 | - children: [ | ||
16 | - { | ||
17 | - path: 'basic', | ||
18 | - name: 'FormBasicDemo', | ||
19 | - component: () => import('/@/views/demo/form/index.vue'), | ||
20 | - meta: { | ||
21 | - title: t('routes.demo.form.basic'), | ||
22 | - }, | ||
23 | - }, | ||
24 | - { | ||
25 | - path: 'useForm', | ||
26 | - name: 'UseFormDemo', | ||
27 | - component: () => import('/@/views/demo/form/UseForm.vue'), | ||
28 | - meta: { | ||
29 | - title: t('routes.demo.form.useForm'), | ||
30 | - }, | ||
31 | - }, | ||
32 | - { | ||
33 | - path: 'refForm', | ||
34 | - name: 'RefFormDemo', | ||
35 | - component: () => import('/@/views/demo/form/RefForm.vue'), | ||
36 | - meta: { | ||
37 | - title: t('routes.demo.form.refForm'), | ||
38 | - }, | ||
39 | - }, | ||
40 | - { | ||
41 | - path: 'advancedForm', | ||
42 | - name: 'AdvancedFormDemo', | ||
43 | - component: () => import('/@/views/demo/form/AdvancedForm.vue'), | ||
44 | - meta: { | ||
45 | - title: t('routes.demo.form.advancedForm'), | ||
46 | - }, | ||
47 | - }, | ||
48 | - { | ||
49 | - path: 'ruleForm', | ||
50 | - name: 'RuleFormDemo', | ||
51 | - component: () => import('/@/views/demo/form/RuleForm.vue'), | ||
52 | - meta: { | ||
53 | - title: t('routes.demo.form.ruleForm'), | ||
54 | - }, | ||
55 | - }, | ||
56 | - { | ||
57 | - path: 'dynamicForm', | ||
58 | - name: 'DynamicFormDemo', | ||
59 | - component: () => import('/@/views/demo/form/DynamicForm.vue'), | ||
60 | - meta: { | ||
61 | - title: t('routes.demo.form.dynamicForm'), | ||
62 | - }, | ||
63 | - }, | ||
64 | - { | ||
65 | - path: 'customerForm', | ||
66 | - name: 'CustomerFormDemo', | ||
67 | - component: () => import('/@/views/demo/form/CustomerForm.vue'), | ||
68 | - meta: { | ||
69 | - title: t('routes.demo.form.customerForm'), | ||
70 | - }, | ||
71 | - }, | ||
72 | - ], | ||
73 | -}; | ||
74 | -export default form; |
src/router/routes/modules/demo/table.ts deleted
100644 → 0
1 | -import type { AppRouteModule } from '/@/router/types'; | ||
2 | - | ||
3 | -import { LAYOUT } from '/@/router/constant'; | ||
4 | -import { t } from '/@/hooks/web/useI18n'; | ||
5 | - | ||
6 | -const table: AppRouteModule = { | ||
7 | - path: '/table', | ||
8 | - name: 'TableDemo', | ||
9 | - component: LAYOUT, | ||
10 | - redirect: '/table/basic', | ||
11 | - meta: { | ||
12 | - icon: 'carbon:table-split', | ||
13 | - title: t('routes.demo.table.table'), | ||
14 | - }, | ||
15 | - | ||
16 | - children: [ | ||
17 | - { | ||
18 | - path: 'basic', | ||
19 | - name: 'TableBasicDemo', | ||
20 | - component: () => import('/@/views/demo/table/Basic.vue'), | ||
21 | - meta: { | ||
22 | - title: t('routes.demo.table.basic'), | ||
23 | - }, | ||
24 | - }, | ||
25 | - { | ||
26 | - path: 'treeTable', | ||
27 | - name: 'TreeTableDemo', | ||
28 | - component: () => import('/@/views/demo/table/TreeTable.vue'), | ||
29 | - meta: { | ||
30 | - title: t('routes.demo.table.treeTable'), | ||
31 | - }, | ||
32 | - }, | ||
33 | - { | ||
34 | - path: 'fetchTable', | ||
35 | - name: 'FetchTableDemo', | ||
36 | - component: () => import('/@/views/demo/table/FetchTable.vue'), | ||
37 | - meta: { | ||
38 | - title: t('routes.demo.table.fetchTable'), | ||
39 | - }, | ||
40 | - }, | ||
41 | - { | ||
42 | - path: 'fixedColumn', | ||
43 | - name: 'FixedColumnDemo', | ||
44 | - component: () => import('/@/views/demo/table/FixedColumn.vue'), | ||
45 | - meta: { | ||
46 | - title: t('routes.demo.table.fixedColumn'), | ||
47 | - }, | ||
48 | - }, | ||
49 | - { | ||
50 | - path: 'customerCell', | ||
51 | - name: 'CustomerCellDemo', | ||
52 | - component: () => import('/@/views/demo/table/CustomerCell.vue'), | ||
53 | - meta: { | ||
54 | - title: t('routes.demo.table.customerCell'), | ||
55 | - }, | ||
56 | - }, | ||
57 | - { | ||
58 | - path: 'formTable', | ||
59 | - name: 'FormTableDemo', | ||
60 | - component: () => import('/@/views/demo/table/FormTable.vue'), | ||
61 | - meta: { | ||
62 | - title: t('routes.demo.table.formTable'), | ||
63 | - }, | ||
64 | - }, | ||
65 | - { | ||
66 | - path: 'useTable', | ||
67 | - name: 'UseTableDemo', | ||
68 | - component: () => import('/@/views/demo/table/UseTable.vue'), | ||
69 | - meta: { | ||
70 | - title: t('routes.demo.table.useTable'), | ||
71 | - }, | ||
72 | - }, | ||
73 | - { | ||
74 | - path: 'refTable', | ||
75 | - name: 'RefTableDemo', | ||
76 | - component: () => import('/@/views/demo/table/RefTable.vue'), | ||
77 | - meta: { | ||
78 | - title: t('routes.demo.table.refTable'), | ||
79 | - }, | ||
80 | - }, | ||
81 | - { | ||
82 | - path: 'multipleHeader', | ||
83 | - name: 'MultipleHeaderDemo', | ||
84 | - component: () => import('/@/views/demo/table/MultipleHeader.vue'), | ||
85 | - meta: { | ||
86 | - title: t('routes.demo.table.multipleHeader'), | ||
87 | - }, | ||
88 | - }, | ||
89 | - { | ||
90 | - path: 'mergeHeader', | ||
91 | - name: 'MergeHeaderDemo', | ||
92 | - component: () => import('/@/views/demo/table/MergeHeader.vue'), | ||
93 | - meta: { | ||
94 | - title: t('routes.demo.table.mergeHeader'), | ||
95 | - }, | ||
96 | - }, | ||
97 | - { | ||
98 | - path: 'expandTable', | ||
99 | - name: 'ExpandTableDemo', | ||
100 | - component: () => import('/@/views/demo/table/ExpandTable.vue'), | ||
101 | - meta: { | ||
102 | - title: t('routes.demo.table.expandTable'), | ||
103 | - }, | ||
104 | - }, | ||
105 | - { | ||
106 | - path: 'fixedHeight', | ||
107 | - name: 'FixedHeightDemo', | ||
108 | - component: () => import('/@/views/demo/table/FixedHeight.vue'), | ||
109 | - meta: { | ||
110 | - title: t('routes.demo.table.fixedHeight'), | ||
111 | - }, | ||
112 | - }, | ||
113 | - { | ||
114 | - path: 'footerTable', | ||
115 | - name: 'FooterTableDemo', | ||
116 | - component: () => import('/@/views/demo/table/FooterTable.vue'), | ||
117 | - meta: { | ||
118 | - title: t('routes.demo.table.footerTable'), | ||
119 | - }, | ||
120 | - }, | ||
121 | - { | ||
122 | - path: 'editCellTable', | ||
123 | - name: 'EditCellTableDemo', | ||
124 | - component: () => import('/@/views/demo/table/EditCellTable.vue'), | ||
125 | - meta: { | ||
126 | - title: t('routes.demo.table.editCellTable'), | ||
127 | - }, | ||
128 | - }, | ||
129 | - { | ||
130 | - path: 'editRowTable', | ||
131 | - name: 'EditRowTableDemo', | ||
132 | - component: () => import('/@/views/demo/table/EditRowTable.vue'), | ||
133 | - meta: { | ||
134 | - title: t('routes.demo.table.editRowTable'), | ||
135 | - }, | ||
136 | - }, | ||
137 | - ], | ||
138 | -}; | ||
139 | - | ||
140 | -export default table; |
src/router/routes/modules/demo/tree.ts deleted
100644 → 0
1 | -import type { AppRouteModule } from '/@/router/types'; | ||
2 | - | ||
3 | -import { LAYOUT } from '/@/router/constant'; | ||
4 | -import { t } from '/@/hooks/web/useI18n'; | ||
5 | - | ||
6 | -const tree: AppRouteModule = { | ||
7 | - path: '/tree', | ||
8 | - name: 'TreeDemo', | ||
9 | - component: LAYOUT, | ||
10 | - redirect: '/tree/basic', | ||
11 | - meta: { | ||
12 | - icon: 'clarity:tree-view-line', | ||
13 | - title: t('routes.demo.tree.tree'), | ||
14 | - }, | ||
15 | - children: [ | ||
16 | - { | ||
17 | - path: 'basic', | ||
18 | - name: 'BasicTreeDemo', | ||
19 | - component: () => import('/@/views/demo/tree/index.vue'), | ||
20 | - meta: { | ||
21 | - title: t('routes.demo.tree.basic'), | ||
22 | - }, | ||
23 | - }, | ||
24 | - { | ||
25 | - path: 'editTree', | ||
26 | - name: 'EditTreeDemo', | ||
27 | - component: () => import('/@/views/demo/tree/EditTree.vue'), | ||
28 | - meta: { | ||
29 | - title: t('routes.demo.tree.editTree'), | ||
30 | - }, | ||
31 | - }, | ||
32 | - { | ||
33 | - path: 'actionTree', | ||
34 | - name: 'ActionTreeDemo', | ||
35 | - component: () => import('/@/views/demo/tree/ActionTree.vue'), | ||
36 | - meta: { | ||
37 | - title: t('routes.demo.tree.actionTree'), | ||
38 | - }, | ||
39 | - }, | ||
40 | - ], | ||
41 | -}; | ||
42 | - | ||
43 | -export default tree; |
src/settings/colorSetting.ts
@@ -11,6 +11,7 @@ export const HEADER_PRESET_BG_COLOR_LIST: string[] = [ | @@ -11,6 +11,7 @@ export const HEADER_PRESET_BG_COLOR_LIST: string[] = [ | ||
11 | '#24292e', | 11 | '#24292e', |
12 | '#394664', | 12 | '#394664', |
13 | '#001529', | 13 | '#001529', |
14 | + '#383f45', | ||
14 | ]; | 15 | ]; |
15 | 16 | ||
16 | // sider preset color | 17 | // sider preset color |
@@ -24,4 +25,5 @@ export const SIDE_BAR_BG_COLOR_LIST: string[] = [ | @@ -24,4 +25,5 @@ export const SIDE_BAR_BG_COLOR_LIST: string[] = [ | ||
24 | '#001628', | 25 | '#001628', |
25 | '#28333E', | 26 | '#28333E', |
26 | '#344058', | 27 | '#344058', |
28 | + '#383f45', | ||
27 | ]; | 29 | ]; |
src/settings/projectSetting.ts
@@ -81,11 +81,9 @@ const setting: ProjectConfig = { | @@ -81,11 +81,9 @@ const setting: ProjectConfig = { | ||
81 | fixed: true, | 81 | fixed: true, |
82 | // Menu collapse | 82 | // Menu collapse |
83 | collapsed: false, | 83 | collapsed: false, |
84 | - // Whether to display the menu name when folding the menu | ||
85 | - collapsedShowTitle: false, | ||
86 | // Whether it can be dragged | 84 | // Whether it can be dragged |
87 | // Only limited to the opening of the left menu, the mouse has a drag bar on the right side of the menu | 85 | // Only limited to the opening of the left menu, the mouse has a drag bar on the right side of the menu |
88 | - canDrag: false, | 86 | + canDrag: true, |
89 | // Whether to show no dom | 87 | // Whether to show no dom |
90 | show: true, | 88 | show: true, |
91 | // Whether to show dom | 89 | // Whether to show dom |
@@ -106,6 +104,8 @@ const setting: ProjectConfig = { | @@ -106,6 +104,8 @@ const setting: ProjectConfig = { | ||
106 | trigger: TriggerEnum.HEADER, | 104 | trigger: TriggerEnum.HEADER, |
107 | // Turn on accordion mode, only show a menu | 105 | // Turn on accordion mode, only show a menu |
108 | accordion: true, | 106 | accordion: true, |
107 | + // Switch page to close menu | ||
108 | + closeMixSidebarOnChange: false, | ||
109 | }, | 109 | }, |
110 | 110 | ||
111 | // Multi-label | 111 | // Multi-label |
src/store/modules/tab.ts
@@ -88,8 +88,9 @@ class Tab extends VuexModule { | @@ -88,8 +88,9 @@ class Tab extends VuexModule { | ||
88 | if (item.meta?.affix) { | 88 | if (item.meta?.affix) { |
89 | const name = item.name as string; | 89 | const name = item.name as string; |
90 | pageCacheSet.add(name); | 90 | pageCacheSet.add(name); |
91 | - } else if (item.matched && needCache) { | ||
92 | - const matched = item.matched; | 91 | + } else if (item?.matched && needCache) { |
92 | + const matched = item?.matched; | ||
93 | + if (!matched) return; | ||
93 | const len = matched.length; | 94 | const len = matched.length; |
94 | 95 | ||
95 | if (len < 2) return; | 96 | if (len < 2) return; |
src/types/config.d.ts
@@ -7,7 +7,6 @@ export interface MenuSetting { | @@ -7,7 +7,6 @@ export interface MenuSetting { | ||
7 | bgColor: string; | 7 | bgColor: string; |
8 | fixed: boolean; | 8 | fixed: boolean; |
9 | collapsed: boolean; | 9 | collapsed: boolean; |
10 | - collapsedShowTitle: boolean; | ||
11 | canDrag: boolean; | 10 | canDrag: boolean; |
12 | show: boolean; | 11 | show: boolean; |
13 | hidden: boolean; | 12 | hidden: boolean; |
@@ -19,6 +18,7 @@ export interface MenuSetting { | @@ -19,6 +18,7 @@ export interface MenuSetting { | ||
19 | topMenuAlign: 'start' | 'center' | 'end'; | 18 | topMenuAlign: 'start' | 'center' | 'end'; |
20 | trigger: TriggerEnum; | 19 | trigger: TriggerEnum; |
21 | accordion: boolean; | 20 | accordion: boolean; |
21 | + closeMixSidebarOnChange: boolean; | ||
22 | } | 22 | } |
23 | 23 | ||
24 | export interface MultiTabsSetting { | 24 | export interface MultiTabsSetting { |
@@ -109,6 +109,7 @@ export interface ProjectConfig { | @@ -109,6 +109,7 @@ export interface ProjectConfig { | ||
109 | // pageLayout是否开启keep-alive | 109 | // pageLayout是否开启keep-alive |
110 | openKeepAlive: boolean; | 110 | openKeepAlive: boolean; |
111 | 111 | ||
112 | + // | ||
112 | // 锁屏时间 | 113 | // 锁屏时间 |
113 | lockTime: number; | 114 | lockTime: number; |
114 | // 显示面包屑 | 115 | // 显示面包屑 |
src/utils/factory/createAsyncComponent.tsx
@@ -34,7 +34,9 @@ export function createAsyncComponent(loader: Fn, options: Options = {}) { | @@ -34,7 +34,9 @@ export function createAsyncComponent(loader: Fn, options: Options = {}) { | ||
34 | loadingComponent: loading ? <Spin spinning={true} size={size} /> : undefined, | 34 | loadingComponent: loading ? <Spin spinning={true} size={size} /> : undefined, |
35 | // The error component will be displayed if a timeout is | 35 | // The error component will be displayed if a timeout is |
36 | // provided and exceeded. Default: Infinity. | 36 | // provided and exceeded. Default: Infinity. |
37 | + // TODO | ||
37 | timeout, | 38 | timeout, |
39 | + // errorComponent | ||
38 | // Defining if component is suspensible. Default: true. | 40 | // Defining if component is suspensible. Default: true. |
39 | // suspensible: false, | 41 | // suspensible: false, |
40 | delay, | 42 | delay, |
yarn.lock
@@ -1041,53 +1041,58 @@ | @@ -1041,53 +1041,58 @@ | ||
1041 | resolved "https://registry.npmjs.org/@iconify/iconify/-/iconify-2.0.0-rc.1.tgz#a8bae29d71016d5af98c69f56a73c4a040217b3a" | 1041 | resolved "https://registry.npmjs.org/@iconify/iconify/-/iconify-2.0.0-rc.1.tgz#a8bae29d71016d5af98c69f56a73c4a040217b3a" |
1042 | integrity sha512-ji5H04VjYtR4seIEgVVLPxg1KRhrFquOiyfPyLVS6vYPkuqV6bcWdssi05YSmf/OAzG4E7Qsg80/bOKyd5tYTw== | 1042 | integrity sha512-ji5H04VjYtR4seIEgVVLPxg1KRhrFquOiyfPyLVS6vYPkuqV6bcWdssi05YSmf/OAzG4E7Qsg80/bOKyd5tYTw== |
1043 | 1043 | ||
1044 | -"@iconify/iconify@>=2.0.0-rc.1", "@iconify/iconify@^2.0.0-rc.2": | 1044 | +"@iconify/iconify@>=2.0.0-rc.1": |
1045 | version "2.0.0-rc.2" | 1045 | version "2.0.0-rc.2" |
1046 | resolved "https://registry.npmjs.org/@iconify/iconify/-/iconify-2.0.0-rc.2.tgz#c4a95ddc06ca9b9496df03604e66fdefb39f4c4b" | 1046 | resolved "https://registry.npmjs.org/@iconify/iconify/-/iconify-2.0.0-rc.2.tgz#c4a95ddc06ca9b9496df03604e66fdefb39f4c4b" |
1047 | integrity sha512-BybEHU5/I9EQ0CcwKAqmreZ2bMnAXrqLCTptAc6vPetHMbrXdZfejP5mt57e/8PNSt/qE7BHniU5PCYA+PGIHw== | 1047 | integrity sha512-BybEHU5/I9EQ0CcwKAqmreZ2bMnAXrqLCTptAc6vPetHMbrXdZfejP5mt57e/8PNSt/qE7BHniU5PCYA+PGIHw== |
1048 | 1048 | ||
1049 | -"@iconify/json@^1.1.272": | ||
1050 | - version "1.1.272" | ||
1051 | - resolved "https://registry.npmjs.org/@iconify/json/-/json-1.1.272.tgz#27c7caee9764e0304161261ec08ffc2794944b66" | ||
1052 | - integrity sha512-FyiTc7UiXJ5cDfk09lv70sYOSi5uLyK+a0LnF1KgWmofkikL06p98ksNRN7stmHryOYarSy75xgi6MbgAwtltQ== | ||
1053 | - | ||
1054 | -"@intlify/core-base@9.0.0-beta.13": | ||
1055 | - version "9.0.0-beta.13" | ||
1056 | - resolved "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.0.0-beta.13.tgz#fb6bc278209cb7bef44853a42160fedb0560c3f8" | ||
1057 | - integrity sha512-ukImWV+QvRmNZtCTLrSW391z46eMuBheCMPZh801nM3v0Dosfu2PtWO5/z8Q9Bsom4Q+PNQ5eBtOQj2yCAhVEA== | ||
1058 | - dependencies: | ||
1059 | - "@intlify/message-compiler" "9.0.0-beta.13" | ||
1060 | - "@intlify/message-resolver" "9.0.0-beta.13" | ||
1061 | - "@intlify/runtime" "9.0.0-beta.13" | ||
1062 | - "@intlify/shared" "9.0.0-beta.13" | ||
1063 | - | ||
1064 | -"@intlify/message-compiler@9.0.0-beta.13": | ||
1065 | - version "9.0.0-beta.13" | ||
1066 | - resolved "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.0.0-beta.13.tgz#3b8ddcb2be3f80b28c6e4f6028c0b3ec4e709849" | ||
1067 | - integrity sha512-1z7716InFM8FdTAz64wqZvFuT4wL7WKF63v+vUEW4s9FLoL0U+xIccor9P5XHAvvG1gPMH/Zxd0deg/ULZ1Mcg== | ||
1068 | - dependencies: | ||
1069 | - "@intlify/message-resolver" "9.0.0-beta.13" | ||
1070 | - "@intlify/shared" "9.0.0-beta.13" | 1049 | +"@iconify/iconify@^2.0.0-rc.4": |
1050 | + version "2.0.0-rc.4" | ||
1051 | + resolved "https://registry.npmjs.org/@iconify/iconify/-/iconify-2.0.0-rc.4.tgz#46098fb544a4eb3af724219e4955c9022801835e" | ||
1052 | + integrity sha512-YCSECbeXKFJEIVkKgKMjUzJ439ysufmL/a31B1j7dCvnHaBWsX9J4XehhJgg/aTy3yvhHaVhI6xt1kSMZP799A== | ||
1053 | + | ||
1054 | +"@iconify/json@^1.1.275": | ||
1055 | + version "1.1.275" | ||
1056 | + resolved "https://registry.npmjs.org/@iconify/json/-/json-1.1.275.tgz#ac9a706cdc7c9e64ab8e8bb09ae770f551f7496f" | ||
1057 | + integrity sha512-Nt6tXJpZFd/gFRV24BvmlIdxnbMxgshIKFPQwOWgeVjKiOKEwiBKjXUzBE74As7/Olps/ac1gEB40N9/DGOJ3Q== | ||
1058 | + | ||
1059 | +"@intlify/core-base@9.0.0-beta.14": | ||
1060 | + version "9.0.0-beta.14" | ||
1061 | + resolved "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.0.0-beta.14.tgz#b190d1dd95d28977b26353c77121d2d84d15b7ee" | ||
1062 | + integrity sha512-ZX+JJvBtcdVZxrTg8oO6flXC965aURIvAeDOYT3DqlUWekHKQ2hUVc1J8SP7rzEgFUqDqCMrDMtv2gZNvxD2Aw== | ||
1063 | + dependencies: | ||
1064 | + "@intlify/message-compiler" "9.0.0-beta.14" | ||
1065 | + "@intlify/message-resolver" "9.0.0-beta.14" | ||
1066 | + "@intlify/runtime" "9.0.0-beta.14" | ||
1067 | + "@intlify/shared" "9.0.0-beta.14" | ||
1068 | + | ||
1069 | +"@intlify/message-compiler@9.0.0-beta.14": | ||
1070 | + version "9.0.0-beta.14" | ||
1071 | + resolved "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.0.0-beta.14.tgz#4b5a4467459c402e71652075e9d95e5d85e85588" | ||
1072 | + integrity sha512-fXgiQuLKsYINnzhnCQD3OJnT2/59HrPw8WWiG8MpuMSDcUkUXV4ie0DW+9x48QQqpel7TU11Lage3zuFxw27iQ== | ||
1073 | + dependencies: | ||
1074 | + "@intlify/message-resolver" "9.0.0-beta.14" | ||
1075 | + "@intlify/shared" "9.0.0-beta.14" | ||
1071 | source-map "0.6.1" | 1076 | source-map "0.6.1" |
1072 | 1077 | ||
1073 | -"@intlify/message-resolver@9.0.0-beta.13": | ||
1074 | - version "9.0.0-beta.13" | ||
1075 | - resolved "https://registry.npmjs.org/@intlify/message-resolver/-/message-resolver-9.0.0-beta.13.tgz#ae6de0bf0e54093160442d465e719bf03fd0f146" | ||
1076 | - integrity sha512-mR1eSpRtB4jh11TpQTUyzjEwqZ6D30mJYREEfSrl5YKfUKwDQrulrOaIO8T5gVQG2m09vfxJHVrgfJ2hR8z/0Q== | 1078 | +"@intlify/message-resolver@9.0.0-beta.14": |
1079 | + version "9.0.0-beta.14" | ||
1080 | + resolved "https://registry.npmjs.org/@intlify/message-resolver/-/message-resolver-9.0.0-beta.14.tgz#f964706650d71ef06669c17c29cb60500ef2617a" | ||
1081 | + integrity sha512-/PPLMHX0w/ECkG+Fmne8L3WVVVwAp3tpdisf5G775b49Fspy4dKXqkLXM2NZKhdguJbXWHXXXiRkr+mlhq8G9Q== | ||
1077 | 1082 | ||
1078 | -"@intlify/runtime@9.0.0-beta.13": | ||
1079 | - version "9.0.0-beta.13" | ||
1080 | - resolved "https://registry.npmjs.org/@intlify/runtime/-/runtime-9.0.0-beta.13.tgz#8deff103ee6982c6d531314e9f965b90768d8a27" | ||
1081 | - integrity sha512-hcb3sg75SokuzNDG8IC6PJmwjsS/xdgevd99UNG1zKb7s5qFFb90ApvPDpiH0+R9TMQe11fZqg5dyrVBKqAV4A== | 1083 | +"@intlify/runtime@9.0.0-beta.14": |
1084 | + version "9.0.0-beta.14" | ||
1085 | + resolved "https://registry.npmjs.org/@intlify/runtime/-/runtime-9.0.0-beta.14.tgz#367f6b09c991c71905b73224e238aa8382976b2d" | ||
1086 | + integrity sha512-WgFnXkniJIMrZfW1kcxejQ96te56r3us632/WME7SL1IYsGV+WErXiJMBrHf8ngwAy15WmfYoKWr32sRxWjCtw== | ||
1082 | dependencies: | 1087 | dependencies: |
1083 | - "@intlify/message-compiler" "9.0.0-beta.13" | ||
1084 | - "@intlify/message-resolver" "9.0.0-beta.13" | ||
1085 | - "@intlify/shared" "9.0.0-beta.13" | 1088 | + "@intlify/message-compiler" "9.0.0-beta.14" |
1089 | + "@intlify/message-resolver" "9.0.0-beta.14" | ||
1090 | + "@intlify/shared" "9.0.0-beta.14" | ||
1086 | 1091 | ||
1087 | -"@intlify/shared@9.0.0-beta.13": | ||
1088 | - version "9.0.0-beta.13" | ||
1089 | - resolved "https://registry.npmjs.org/@intlify/shared/-/shared-9.0.0-beta.13.tgz#2d93d695f19fd699ea8b336066f9d6dfc185f094" | ||
1090 | - integrity sha512-/rqC3YEGHs3uu3XSsF1zdBKJb+on34Yn8Z58K3YxJsFxKPHa8mH73EUtN79hTZWh6Js4zEa/WsCgZCM62b8eJA== | 1092 | +"@intlify/shared@9.0.0-beta.14": |
1093 | + version "9.0.0-beta.14" | ||
1094 | + resolved "https://registry.npmjs.org/@intlify/shared/-/shared-9.0.0-beta.14.tgz#c221a45f666a40935f998d2e3c14451a516b9f56" | ||
1095 | + integrity sha512-f+Gev5GnrNLyieJCB6sB/qqe03XaMf6yJiAXG3IamZ4mp45oj2Lw9Oj3hAepDW36VUZK2wCIDmWy53pxJNIFpQ== | ||
1091 | 1096 | ||
1092 | "@koa/cors@^3.1.0": | 1097 | "@koa/cors@^3.1.0": |
1093 | version "3.1.0" | 1098 | version "3.1.0" |
@@ -1558,10 +1563,10 @@ | @@ -1558,10 +1563,10 @@ | ||
1558 | resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" | 1563 | resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" |
1559 | integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== | 1564 | integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== |
1560 | 1565 | ||
1561 | -"@types/yargs@^15.0.11": | ||
1562 | - version "15.0.11" | ||
1563 | - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.11.tgz#361d7579ecdac1527687bcebf9946621c12ab78c" | ||
1564 | - integrity sha512-jfcNBxHFYJ4nPIacsi3woz1+kvUO6s1CyeEhtnDHBjHUMNj5UlW2GynmnSgiJJEdNg9yW5C8lfoNRZrHGv5EqA== | 1566 | +"@types/yargs@^15.0.12": |
1567 | + version "15.0.12" | ||
1568 | + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.12.tgz#6234ce3e3e3fa32c5db301a170f96a599c960d74" | ||
1569 | + integrity sha512-f+fD/fQAo3BCbCDlrUpznF1A5Zp9rB0noS5vnoormHSIPFKL0Z2DcUJ3Gxp5ytH4uLRNxy7AwYUC9exZzqGMAw== | ||
1565 | dependencies: | 1570 | dependencies: |
1566 | "@types/yargs-parser" "*" | 1571 | "@types/yargs-parser" "*" |
1567 | 1572 | ||
@@ -1575,61 +1580,61 @@ | @@ -1575,61 +1580,61 @@ | ||
1575 | resolved "https://registry.npmjs.org/@types/zxcvbn/-/zxcvbn-4.4.0.tgz#fbc1d941cc6d9d37d18405c513ba6b294f89b609" | 1580 | resolved "https://registry.npmjs.org/@types/zxcvbn/-/zxcvbn-4.4.0.tgz#fbc1d941cc6d9d37d18405c513ba6b294f89b609" |
1576 | integrity sha512-GQLOT+SN20a+AI51y3fAimhyTF4Y0RG+YP3gf91OibIZ7CJmPFgoZi+ZR5a+vRbS01LbQosITWum4ATmJ1Z6Pg== | 1581 | integrity sha512-GQLOT+SN20a+AI51y3fAimhyTF4Y0RG+YP3gf91OibIZ7CJmPFgoZi+ZR5a+vRbS01LbQosITWum4ATmJ1Z6Pg== |
1577 | 1582 | ||
1578 | -"@typescript-eslint/eslint-plugin@^4.10.0": | ||
1579 | - version "4.10.0" | ||
1580 | - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.10.0.tgz#19ed3baf4bc4232c5a7fcd32eaca75c3a5baf9f3" | ||
1581 | - integrity sha512-h6/V46o6aXpKRlarP1AiJEXuCJ7cMQdlpfMDrcllIgX3dFkLwEBTXAoNP98ZoOmqd1xvymMVRAI4e7yVvlzWEg== | 1583 | +"@typescript-eslint/eslint-plugin@^4.11.0": |
1584 | + version "4.11.0" | ||
1585 | + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.11.0.tgz#bc6c1e4175c0cf42083da4314f7931ad12f731cc" | ||
1586 | + integrity sha512-x4arJMXBxyD6aBXLm3W7mSDZRiABzy+2PCLJbL7OPqlp53VXhaA1HKK7R2rTee5OlRhnUgnp8lZyVIqjnyPT6g== | ||
1582 | dependencies: | 1587 | dependencies: |
1583 | - "@typescript-eslint/experimental-utils" "4.10.0" | ||
1584 | - "@typescript-eslint/scope-manager" "4.10.0" | 1588 | + "@typescript-eslint/experimental-utils" "4.11.0" |
1589 | + "@typescript-eslint/scope-manager" "4.11.0" | ||
1585 | debug "^4.1.1" | 1590 | debug "^4.1.1" |
1586 | functional-red-black-tree "^1.0.1" | 1591 | functional-red-black-tree "^1.0.1" |
1587 | regexpp "^3.0.0" | 1592 | regexpp "^3.0.0" |
1588 | semver "^7.3.2" | 1593 | semver "^7.3.2" |
1589 | tsutils "^3.17.1" | 1594 | tsutils "^3.17.1" |
1590 | 1595 | ||
1591 | -"@typescript-eslint/experimental-utils@4.10.0": | ||
1592 | - version "4.10.0" | ||
1593 | - resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.10.0.tgz#dbf5d0f89802d5feaf7d11e5b32df29bbc2f3a0e" | ||
1594 | - integrity sha512-opX+7ai1sdWBOIoBgpVJrH5e89ra1KoLrJTz0UtWAa4IekkKmqDosk5r6xqRaNJfCXEfteW4HXQAwMdx+jjEmw== | 1596 | +"@typescript-eslint/experimental-utils@4.11.0": |
1597 | + version "4.11.0" | ||
1598 | + resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.11.0.tgz#d1a47cc6cfe1c080ce4ead79267574b9881a1565" | ||
1599 | + integrity sha512-1VC6mSbYwl1FguKt8OgPs8xxaJgtqFpjY/UzUYDBKq4pfQ5lBvN2WVeqYkzf7evW42axUHYl2jm9tNyFsb8oLg== | ||
1595 | dependencies: | 1600 | dependencies: |
1596 | "@types/json-schema" "^7.0.3" | 1601 | "@types/json-schema" "^7.0.3" |
1597 | - "@typescript-eslint/scope-manager" "4.10.0" | ||
1598 | - "@typescript-eslint/types" "4.10.0" | ||
1599 | - "@typescript-eslint/typescript-estree" "4.10.0" | 1602 | + "@typescript-eslint/scope-manager" "4.11.0" |
1603 | + "@typescript-eslint/types" "4.11.0" | ||
1604 | + "@typescript-eslint/typescript-estree" "4.11.0" | ||
1600 | eslint-scope "^5.0.0" | 1605 | eslint-scope "^5.0.0" |
1601 | eslint-utils "^2.0.0" | 1606 | eslint-utils "^2.0.0" |
1602 | 1607 | ||
1603 | -"@typescript-eslint/parser@^4.10.0": | ||
1604 | - version "4.10.0" | ||
1605 | - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.10.0.tgz#1a622b0847b765b2d8f0ede6f0cdd85f03d76031" | ||
1606 | - integrity sha512-amBvUUGBMadzCW6c/qaZmfr3t9PyevcSWw7hY2FuevdZVp5QPw/K76VSQ5Sw3BxlgYCHZcK6DjIhSZK0PQNsQg== | 1608 | +"@typescript-eslint/parser@^4.11.0": |
1609 | + version "4.11.0" | ||
1610 | + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.11.0.tgz#1dd3d7e42708c10ce9f3aa64c63c0ab99868b4e2" | ||
1611 | + integrity sha512-NBTtKCC7ZtuxEV5CrHUO4Pg2s784pvavc3cnz6V+oJvVbK4tH9135f/RBP6eUA2KHiFKAollSrgSctQGmHbqJQ== | ||
1607 | dependencies: | 1612 | dependencies: |
1608 | - "@typescript-eslint/scope-manager" "4.10.0" | ||
1609 | - "@typescript-eslint/types" "4.10.0" | ||
1610 | - "@typescript-eslint/typescript-estree" "4.10.0" | 1613 | + "@typescript-eslint/scope-manager" "4.11.0" |
1614 | + "@typescript-eslint/types" "4.11.0" | ||
1615 | + "@typescript-eslint/typescript-estree" "4.11.0" | ||
1611 | debug "^4.1.1" | 1616 | debug "^4.1.1" |
1612 | 1617 | ||
1613 | -"@typescript-eslint/scope-manager@4.10.0": | ||
1614 | - version "4.10.0" | ||
1615 | - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.10.0.tgz#dbd7e1fc63d7363e3aaff742a6f2b8afdbac9d27" | ||
1616 | - integrity sha512-WAPVw35P+fcnOa8DEic0tQUhoJJsgt+g6DEcz257G7vHFMwmag58EfowdVbiNcdfcV27EFR0tUBVXkDoIvfisQ== | 1618 | +"@typescript-eslint/scope-manager@4.11.0": |
1619 | + version "4.11.0" | ||
1620 | + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.11.0.tgz#2d906537db8a3a946721699e4fc0833810490254" | ||
1621 | + integrity sha512-6VSTm/4vC2dHM3ySDW9Kl48en+yLNfVV6LECU8jodBHQOhO8adAVizaZ1fV0QGZnLQjQ/y0aBj5/KXPp2hBTjA== | ||
1617 | dependencies: | 1622 | dependencies: |
1618 | - "@typescript-eslint/types" "4.10.0" | ||
1619 | - "@typescript-eslint/visitor-keys" "4.10.0" | 1623 | + "@typescript-eslint/types" "4.11.0" |
1624 | + "@typescript-eslint/visitor-keys" "4.11.0" | ||
1620 | 1625 | ||
1621 | -"@typescript-eslint/types@4.10.0": | ||
1622 | - version "4.10.0" | ||
1623 | - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.10.0.tgz#12f983750ebad867f0c806e705c1953cd6415789" | ||
1624 | - integrity sha512-+dt5w1+Lqyd7wIPMa4XhJxUuE8+YF+vxQ6zxHyhLGHJjHiunPf0wSV8LtQwkpmAsRi1lEOoOIR30FG5S2HS33g== | 1626 | +"@typescript-eslint/types@4.11.0": |
1627 | + version "4.11.0" | ||
1628 | + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.11.0.tgz#86cf95e7eac4ccfd183f9fcf1480cece7caf4ca4" | ||
1629 | + integrity sha512-XXOdt/NPX++txOQHM1kUMgJUS43KSlXGdR/aDyEwuAEETwuPt02Nc7v+s57PzuSqMbNLclblQdv3YcWOdXhQ7g== | ||
1625 | 1630 | ||
1626 | -"@typescript-eslint/typescript-estree@4.10.0": | ||
1627 | - version "4.10.0" | ||
1628 | - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.10.0.tgz#1e62e45fd57866afd42daf5e9fb6bd4e8dbcfa75" | ||
1629 | - integrity sha512-mGK0YRp9TOk6ZqZ98F++bW6X5kMTzCRROJkGXH62d2azhghmq+1LNLylkGe6uGUOQzD452NOAEth5VAF6PDo5g== | 1631 | +"@typescript-eslint/typescript-estree@4.11.0": |
1632 | + version "4.11.0" | ||
1633 | + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.11.0.tgz#1144d145841e5987d61c4c845442a24b24165a4b" | ||
1634 | + integrity sha512-eA6sT5dE5RHAFhtcC+b5WDlUIGwnO9b0yrfGa1mIOIAjqwSQCpXbLiFmKTdRbQN/xH2EZkGqqLDrKUuYOZ0+Hg== | ||
1630 | dependencies: | 1635 | dependencies: |
1631 | - "@typescript-eslint/types" "4.10.0" | ||
1632 | - "@typescript-eslint/visitor-keys" "4.10.0" | 1636 | + "@typescript-eslint/types" "4.11.0" |
1637 | + "@typescript-eslint/visitor-keys" "4.11.0" | ||
1633 | debug "^4.1.1" | 1638 | debug "^4.1.1" |
1634 | globby "^11.0.1" | 1639 | globby "^11.0.1" |
1635 | is-glob "^4.0.1" | 1640 | is-glob "^4.0.1" |
@@ -1637,12 +1642,12 @@ | @@ -1637,12 +1642,12 @@ | ||
1637 | semver "^7.3.2" | 1642 | semver "^7.3.2" |
1638 | tsutils "^3.17.1" | 1643 | tsutils "^3.17.1" |
1639 | 1644 | ||
1640 | -"@typescript-eslint/visitor-keys@4.10.0": | ||
1641 | - version "4.10.0" | ||
1642 | - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.10.0.tgz#9478822329a9bc8ebcc80623d7f79a01da5ee451" | ||
1643 | - integrity sha512-hPyz5qmDMuZWFtHZkjcCpkAKHX8vdu1G3YsCLEd25ryZgnJfj6FQuJ5/O7R+dB1ueszilJmAFMtlU4CA6se3Jg== | 1645 | +"@typescript-eslint/visitor-keys@4.11.0": |
1646 | + version "4.11.0" | ||
1647 | + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.11.0.tgz#906669a50f06aa744378bb84c7d5c4fdbc5b7d51" | ||
1648 | + integrity sha512-tRYKyY0i7cMk6v4UIOCjl1LhuepC/pc6adQqJk4Is3YcC6k46HvsV9Wl7vQoLbm9qADgeujiT7KdLrylvFIQ+A== | ||
1644 | dependencies: | 1649 | dependencies: |
1645 | - "@typescript-eslint/types" "4.10.0" | 1650 | + "@typescript-eslint/types" "4.11.0" |
1646 | eslint-visitor-keys "^2.0.0" | 1651 | eslint-visitor-keys "^2.0.0" |
1647 | 1652 | ||
1648 | "@vue/compiler-core@*", "@vue/compiler-core@3.0.4", "@vue/compiler-core@^3.0.0-rc.5": | 1653 | "@vue/compiler-core@*", "@vue/compiler-core@3.0.4", "@vue/compiler-core@^3.0.0-rc.5": |
@@ -1800,18 +1805,18 @@ | @@ -1800,18 +1805,18 @@ | ||
1800 | vscode-languageserver-textdocument "^1.0.1" | 1805 | vscode-languageserver-textdocument "^1.0.1" |
1801 | vscode-uri "^2.1.2" | 1806 | vscode-uri "^2.1.2" |
1802 | 1807 | ||
1803 | -"@vueuse/core@^4.0.0-rc.9": | ||
1804 | - version "4.0.0-rc.9" | ||
1805 | - resolved "https://registry.npmjs.org/@vueuse/core/-/core-4.0.0-rc.9.tgz#5e5f6029704ddc8f851286389ebf7faadf7073d5" | ||
1806 | - integrity sha512-h/6qJ523kT9qASaX7ZgJKdrnubpuTmzFg+RIi1XL/Z/Uj9OpCCru1ORc8VPmFy6TfOcE4j/8Q9ZDmXJV3IfcIQ== | 1808 | +"@vueuse/core@^4.0.0": |
1809 | + version "4.0.0" | ||
1810 | + resolved "https://registry.npmjs.org/@vueuse/core/-/core-4.0.0.tgz#5bea3eaa848e3b3e00427f5053fb98e7e4834b0f" | ||
1811 | + integrity sha512-BBkqriC2j9SH/LuHCggS2MP7VSwBfGkTB9qQh1lzadodk2TnM1JHwM76f3G0hCGqqhEF7ab8Xs+1M1PlvuEQYA== | ||
1807 | dependencies: | 1812 | dependencies: |
1808 | - "@vueuse/shared" "4.0.0-rc.9" | 1813 | + "@vueuse/shared" "4.0.0" |
1809 | vue-demi latest | 1814 | vue-demi latest |
1810 | 1815 | ||
1811 | -"@vueuse/shared@4.0.0-rc.9": | ||
1812 | - version "4.0.0-rc.9" | ||
1813 | - resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-4.0.0-rc.9.tgz#a54ddff35ad6f2d595e21163ddaa064ace9d7220" | ||
1814 | - integrity sha512-JeEbKhE5TxMJZzfQt7GWyjY/RALr+orQJsoS0bKgtH0OG0L+iId3AOOuMkeBXsKWg6Q7wrtAYGLeM12SViD/NQ== | 1816 | +"@vueuse/shared@4.0.0": |
1817 | + version "4.0.0" | ||
1818 | + resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-4.0.0.tgz#d495b8fd2f28a453ef0fccae175ca848a4a84bb0" | ||
1819 | + integrity sha512-8tn1BpnaMJU2LqFyFzzN6Dvmc1uDsSlb3Neli5bwwb9f+rcASpuOS3nAWAY6/rIODZP1iwXDNCL4rNFR3YxYtQ== | ||
1815 | dependencies: | 1820 | dependencies: |
1816 | vue-demi latest | 1821 | vue-demi latest |
1817 | 1822 | ||
@@ -1869,7 +1874,7 @@ aggregate-error@^3.0.0: | @@ -1869,7 +1874,7 @@ aggregate-error@^3.0.0: | ||
1869 | clean-stack "^2.0.0" | 1874 | clean-stack "^2.0.0" |
1870 | indent-string "^4.0.0" | 1875 | indent-string "^4.0.0" |
1871 | 1876 | ||
1872 | -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: | 1877 | +ajv@^6.10.0, ajv@^6.12.4: |
1873 | version "6.12.6" | 1878 | version "6.12.6" |
1874 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" | 1879 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" |
1875 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== | 1880 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== |
@@ -1972,10 +1977,10 @@ anymatch@~3.1.1: | @@ -1972,10 +1977,10 @@ anymatch@~3.1.1: | ||
1972 | normalize-path "^3.0.0" | 1977 | normalize-path "^3.0.0" |
1973 | picomatch "^2.0.4" | 1978 | picomatch "^2.0.4" |
1974 | 1979 | ||
1975 | -apexcharts@^3.22.3: | ||
1976 | - version "3.22.3" | ||
1977 | - resolved "https://registry.npmjs.org/apexcharts/-/apexcharts-3.22.3.tgz#a829c4500db8478069b80e227741830b77d89467" | ||
1978 | - integrity sha512-ZRZWmAmSdyc+tFhHMZ10ZxbvSbomWe46izpi8yQj5cKLxuujw2XeXVQ0jxnPl9yE5Q7W2hAbDWStaouBN4mSuw== | 1980 | +apexcharts@^3.23.0: |
1981 | + version "3.23.0" | ||
1982 | + resolved "https://registry.npmjs.org/apexcharts/-/apexcharts-3.23.0.tgz#12877aa789d658aef5eb930af6c3b8850fefd925" | ||
1983 | + integrity sha512-1mV6qouuopvYR6UFSXi/Ge4jRMe//zyAN3aK05mAs4Iuet8mA0w31Q6OU6syD77bawt9p3YKNOmNF7OO2u9w0g== | ||
1979 | dependencies: | 1984 | dependencies: |
1980 | svg.draggable.js "^2.2.2" | 1985 | svg.draggable.js "^2.2.2" |
1981 | svg.easing.js "^2.0.0" | 1986 | svg.easing.js "^2.0.0" |
@@ -2046,11 +2051,6 @@ assign-symbols@^1.0.0: | @@ -2046,11 +2051,6 @@ assign-symbols@^1.0.0: | ||
2046 | resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" | 2051 | resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" |
2047 | integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= | 2052 | integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= |
2048 | 2053 | ||
2049 | -astral-regex@^1.0.0: | ||
2050 | - version "1.0.0" | ||
2051 | - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" | ||
2052 | - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== | ||
2053 | - | ||
2054 | astral-regex@^2.0.0: | 2054 | astral-regex@^2.0.0: |
2055 | version "2.0.0" | 2055 | version "2.0.0" |
2056 | resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" | 2056 | resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" |
@@ -2918,6 +2918,13 @@ cookies@~0.8.0: | @@ -2918,6 +2918,13 @@ cookies@~0.8.0: | ||
2918 | depd "~2.0.0" | 2918 | depd "~2.0.0" |
2919 | keygrip "~1.1.0" | 2919 | keygrip "~1.1.0" |
2920 | 2920 | ||
2921 | +copy-anything@^2.0.1: | ||
2922 | + version "2.0.1" | ||
2923 | + resolved "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.1.tgz#2afbce6da684bdfcbec93752fa762819cb480d9a" | ||
2924 | + integrity sha512-lA57e7viQHOdPQcrytv5jFeudZZOXuyk47lZym279FiDQ8jeZomXiGuVf6ffMKkJ+3TIai3J1J3yi6M+/4U35g== | ||
2925 | + dependencies: | ||
2926 | + is-what "^3.7.1" | ||
2927 | + | ||
2921 | copy-descriptor@^0.1.0: | 2928 | copy-descriptor@^0.1.0: |
2922 | version "0.1.1" | 2929 | version "0.1.1" |
2923 | resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" | 2930 | resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" |
@@ -3432,10 +3439,10 @@ escape-string-regexp@^1.0.5: | @@ -3432,10 +3439,10 @@ escape-string-regexp@^1.0.5: | ||
3432 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" | 3439 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" |
3433 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= | 3440 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= |
3434 | 3441 | ||
3435 | -eslint-config-prettier@^7.0.0: | ||
3436 | - version "7.0.0" | ||
3437 | - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.0.0.tgz#c1ae4106f74e6c0357f44adb076771d032ac0e97" | ||
3438 | - integrity sha512-8Y8lGLVPPZdaNA7JXqnvETVC7IiVRgAP6afQu9gOQRn90YY3otMNh+x7Vr2vMePQntF+5erdSUBqSzCmU/AxaQ== | 3442 | +eslint-config-prettier@^7.1.0: |
3443 | + version "7.1.0" | ||
3444 | + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz#5402eb559aa94b894effd6bddfa0b1ca051c858f" | ||
3445 | + integrity sha512-9sm5/PxaFG7qNJvJzTROMM1Bk1ozXVTKI0buKOyb0Bsr1hrwi0H/TzxF/COtf1uxikIK8SwhX7K6zg78jAzbeA== | ||
3439 | 3446 | ||
3440 | eslint-plugin-prettier@^3.3.0: | 3447 | eslint-plugin-prettier@^3.3.0: |
3441 | version "3.3.0" | 3448 | version "3.3.0" |
@@ -3444,15 +3451,15 @@ eslint-plugin-prettier@^3.3.0: | @@ -3444,15 +3451,15 @@ eslint-plugin-prettier@^3.3.0: | ||
3444 | dependencies: | 3451 | dependencies: |
3445 | prettier-linter-helpers "^1.0.0" | 3452 | prettier-linter-helpers "^1.0.0" |
3446 | 3453 | ||
3447 | -eslint-plugin-vue@^7.2.0: | ||
3448 | - version "7.2.0" | ||
3449 | - resolved "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.2.0.tgz#dd8323fe7ca28fe9377ce3f5f6cf17afe2686f2a" | ||
3450 | - integrity sha512-4mt0yIv6rBDNtvis/g22a0ozJ12GfcdEzX77u0ICYjKlxOVtGrKGEvo0cbOObHaKDg9a9kJcoaNodqE4TPfS2A== | 3454 | +eslint-plugin-vue@^7.3.0: |
3455 | + version "7.3.0" | ||
3456 | + resolved "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.3.0.tgz#0faf0fcf0e1b1052bf800d4dee42d64f50679cb0" | ||
3457 | + integrity sha512-4rc9xrZgwT4aLz3XE6lrHu+FZtDLWennYvtzVvvS81kW9c65U4DUzQQWAFjDCgCFvN6HYWxi7ueEtxZVSB+f0g== | ||
3451 | dependencies: | 3458 | dependencies: |
3452 | eslint-utils "^2.1.0" | 3459 | eslint-utils "^2.1.0" |
3453 | natural-compare "^1.4.0" | 3460 | natural-compare "^1.4.0" |
3454 | semver "^7.3.2" | 3461 | semver "^7.3.2" |
3455 | - vue-eslint-parser "^7.2.0" | 3462 | + vue-eslint-parser "^7.3.0" |
3456 | 3463 | ||
3457 | eslint-scope@^5.0.0, eslint-scope@^5.1.1: | 3464 | eslint-scope@^5.0.0, eslint-scope@^5.1.1: |
3458 | version "5.1.1" | 3465 | version "5.1.1" |
@@ -3479,10 +3486,10 @@ eslint-visitor-keys@^2.0.0: | @@ -3479,10 +3486,10 @@ eslint-visitor-keys@^2.0.0: | ||
3479 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" | 3486 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" |
3480 | integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== | 3487 | integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== |
3481 | 3488 | ||
3482 | -eslint@^7.15.0: | ||
3483 | - version "7.15.0" | ||
3484 | - resolved "https://registry.npmjs.org/eslint/-/eslint-7.15.0.tgz#eb155fb8ed0865fcf5d903f76be2e5b6cd7e0bc7" | ||
3485 | - integrity sha512-Vr64xFDT8w30wFll643e7cGrIkPEU50yIiI36OdSIDoSGguIeaLzBo0vpGvzo9RECUqq7htURfwEtKqwytkqzA== | 3489 | +eslint@^7.16.0: |
3490 | + version "7.16.0" | ||
3491 | + resolved "https://registry.npmjs.org/eslint/-/eslint-7.16.0.tgz#a761605bf9a7b32d24bb7cde59aeb0fd76f06092" | ||
3492 | + integrity sha512-iVWPS785RuDA4dWuhhgXTNrGxHHK3a8HLSMBgbbU59ruJDubUraXN8N5rn7kb8tG6sjg74eE0RA3YWT51eusEw== | ||
3486 | dependencies: | 3493 | dependencies: |
3487 | "@babel/code-frame" "^7.0.0" | 3494 | "@babel/code-frame" "^7.0.0" |
3488 | "@eslint/eslintrc" "^0.2.2" | 3495 | "@eslint/eslintrc" "^0.2.2" |
@@ -3518,7 +3525,7 @@ eslint@^7.15.0: | @@ -3518,7 +3525,7 @@ eslint@^7.15.0: | ||
3518 | semver "^7.2.1" | 3525 | semver "^7.2.1" |
3519 | strip-ansi "^6.0.0" | 3526 | strip-ansi "^6.0.0" |
3520 | strip-json-comments "^3.1.0" | 3527 | strip-json-comments "^3.1.0" |
3521 | - table "^5.2.3" | 3528 | + table "^6.0.4" |
3522 | text-table "^0.2.0" | 3529 | text-table "^0.2.0" |
3523 | v8-compile-cache "^2.0.3" | 3530 | v8-compile-cache "^2.0.3" |
3524 | 3531 | ||
@@ -4788,6 +4795,11 @@ is-utf8@^0.2.0, is-utf8@^0.2.1: | @@ -4788,6 +4795,11 @@ is-utf8@^0.2.0, is-utf8@^0.2.1: | ||
4788 | resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" | 4795 | resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" |
4789 | integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= | 4796 | integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= |
4790 | 4797 | ||
4798 | +is-what@^3.7.1: | ||
4799 | + version "3.12.0" | ||
4800 | + resolved "https://registry.npmjs.org/is-what/-/is-what-3.12.0.tgz#f4405ce4bd6dd420d3ced51a026fb90e03705e55" | ||
4801 | + integrity sha512-2ilQz5/f/o9V7WRWJQmpFYNmQFZ9iM+OXRonZKcYgTkCzjb949Vi4h282PD1UfmgHk666rcWonbRJ++KI41VGw== | ||
4802 | + | ||
4791 | is-windows@^1.0.1, is-windows@^1.0.2: | 4803 | is-windows@^1.0.1, is-windows@^1.0.2: |
4792 | version "1.0.2" | 4804 | version "1.0.2" |
4793 | resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" | 4805 | resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" |
@@ -5091,11 +5103,13 @@ koa@^2.13.0: | @@ -5091,11 +5103,13 @@ koa@^2.13.0: | ||
5091 | type-is "^1.6.16" | 5103 | type-is "^1.6.16" |
5092 | vary "^1.1.2" | 5104 | vary "^1.1.2" |
5093 | 5105 | ||
5094 | -less@^3.13.0: | ||
5095 | - version "3.13.0" | ||
5096 | - resolved "https://registry.npmjs.org/less/-/less-3.13.0.tgz#6a47bb19d97edcf7a53d444b099275dd6b17c85a" | ||
5097 | - integrity sha512-uPhr9uoSGVKKYVGz0rXcYBK1zjwcIWRGcbnSgNt66XuIZYrYPaQiS+LeUOvqedBwrwdBYYaLqSff5ytGYuT7rA== | 5106 | +less@^4.0.0: |
5107 | + version "4.0.0" | ||
5108 | + resolved "https://registry.npmjs.org/less/-/less-4.0.0.tgz#d238cc25576c1f722794dbca4ac82e5e3c7e9e65" | ||
5109 | + integrity sha512-av1eEa2D0xZfF7fjLJS/Dld7zAYSLU7EOEJvuOELeaNI3i6L/81AdjbK5/pytaRkBwi7ZEa0433IDvMLskKCOw== | ||
5098 | dependencies: | 5110 | dependencies: |
5111 | + copy-anything "^2.0.1" | ||
5112 | + parse-node-version "^1.0.1" | ||
5099 | tslib "^1.10.0" | 5113 | tslib "^1.10.0" |
5100 | optionalDependencies: | 5114 | optionalDependencies: |
5101 | errno "^0.1.1" | 5115 | errno "^0.1.1" |
@@ -5219,6 +5233,11 @@ lodash-es@^4.17.15: | @@ -5219,6 +5233,11 @@ lodash-es@^4.17.15: | ||
5219 | resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" | 5233 | resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" |
5220 | integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== | 5234 | integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== |
5221 | 5235 | ||
5236 | +lodash-es@^4.17.20: | ||
5237 | + version "4.17.20" | ||
5238 | + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.20.tgz#29f6332eefc60e849f869c264bc71126ad61e8f7" | ||
5239 | + integrity sha512-JD1COMZsq8maT6mnuz1UMV0jvYD0E0aUsSOdrr1/nAG3dhqQXwRRgeW0cSqH1U43INKcqxaiVIQNOUDld7gRDA== | ||
5240 | + | ||
5222 | lodash._reinterpolate@^3.0.0: | 5241 | lodash._reinterpolate@^3.0.0: |
5223 | version "3.0.0" | 5242 | version "3.0.0" |
5224 | resolved "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" | 5243 | resolved "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" |
@@ -6036,6 +6055,11 @@ parse-json@^5.0.0: | @@ -6036,6 +6055,11 @@ parse-json@^5.0.0: | ||
6036 | json-parse-even-better-errors "^2.3.0" | 6055 | json-parse-even-better-errors "^2.3.0" |
6037 | lines-and-columns "^1.1.6" | 6056 | lines-and-columns "^1.1.6" |
6038 | 6057 | ||
6058 | +parse-node-version@^1.0.1: | ||
6059 | + version "1.0.1" | ||
6060 | + resolved "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" | ||
6061 | + integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== | ||
6062 | + | ||
6039 | parse-passwd@^1.0.0: | 6063 | parse-passwd@^1.0.0: |
6040 | version "1.0.0" | 6064 | version "1.0.0" |
6041 | resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" | 6065 | resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" |
@@ -7141,15 +7165,6 @@ slash@^3.0.0: | @@ -7141,15 +7165,6 @@ slash@^3.0.0: | ||
7141 | resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" | 7165 | resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" |
7142 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== | 7166 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== |
7143 | 7167 | ||
7144 | -slice-ansi@^2.1.0: | ||
7145 | - version "2.1.0" | ||
7146 | - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" | ||
7147 | - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== | ||
7148 | - dependencies: | ||
7149 | - ansi-styles "^3.2.0" | ||
7150 | - astral-regex "^1.0.0" | ||
7151 | - is-fullwidth-code-point "^2.0.0" | ||
7152 | - | ||
7153 | slice-ansi@^3.0.0: | 7168 | slice-ansi@^3.0.0: |
7154 | version "3.0.0" | 7169 | version "3.0.0" |
7155 | resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" | 7170 | resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" |
@@ -7648,17 +7663,7 @@ svg.select.js@^3.0.1: | @@ -7648,17 +7663,7 @@ svg.select.js@^3.0.1: | ||
7648 | dependencies: | 7663 | dependencies: |
7649 | svg.js "^2.6.5" | 7664 | svg.js "^2.6.5" |
7650 | 7665 | ||
7651 | -table@^5.2.3: | ||
7652 | - version "5.4.6" | ||
7653 | - resolved "https://registry.npmjs.org/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" | ||
7654 | - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== | ||
7655 | - dependencies: | ||
7656 | - ajv "^6.10.2" | ||
7657 | - lodash "^4.17.14" | ||
7658 | - slice-ansi "^2.1.0" | ||
7659 | - string-width "^3.0.0" | ||
7660 | - | ||
7661 | -table@^6.0.3: | 7666 | +table@^6.0.3, table@^6.0.4: |
7662 | version "6.0.4" | 7667 | version "6.0.4" |
7663 | resolved "https://registry.npmjs.org/table/-/table-6.0.4.tgz#c523dd182177e926c723eb20e1b341238188aa0d" | 7668 | resolved "https://registry.npmjs.org/table/-/table-6.0.4.tgz#c523dd182177e926c723eb20e1b341238188aa0d" |
7664 | integrity sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw== | 7669 | integrity sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw== |
@@ -8090,10 +8095,10 @@ vary@^1.1.2: | @@ -8090,10 +8095,10 @@ vary@^1.1.2: | ||
8090 | resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" | 8095 | resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" |
8091 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= | 8096 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= |
8092 | 8097 | ||
8093 | -vditor@^3.7.2: | ||
8094 | - version "3.7.2" | ||
8095 | - resolved "https://registry.npmjs.org/vditor/-/vditor-3.7.2.tgz#d1308fa34a7457a89384f5667be53f05c6a3eec6" | ||
8096 | - integrity sha512-CtDba2Jr/op+/E7aRKBoOY8rl8SMkkTdQHxuAbZzb7qv044BXadJIhiBLVv84UHhHaTgsDb/SWMklyoinxegAw== | 8098 | +vditor@^3.7.3: |
8099 | + version "3.7.3" | ||
8100 | + resolved "https://registry.npmjs.org/vditor/-/vditor-3.7.3.tgz#6f7bdee7dca758985b29be1533ed952178f0aac4" | ||
8101 | + integrity sha512-2EHwAc9l+HOo6dcScSJDPmVTsVuEqHK2ucZwAHgvctpua3pMz/CAGMHgPoyB5X1Pju7yrLfsESHZh8V6Ndh6rg== | ||
8097 | dependencies: | 8102 | dependencies: |
8098 | diff-match-patch "^1.0.5" | 8103 | diff-match-patch "^1.0.5" |
8099 | 8104 | ||
@@ -8232,18 +8237,6 @@ vue-demi@latest: | @@ -8232,18 +8237,6 @@ vue-demi@latest: | ||
8232 | resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.4.5.tgz#ea422a4468cb6321a746826a368a770607f87791" | 8237 | resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.4.5.tgz#ea422a4468cb6321a746826a368a770607f87791" |
8233 | integrity sha512-51xf1B6hV2PfjnzYHO/yUForFCRQ49KS8ngQb5T6l1HDEmfghTFtsxtRa5tbx4eqQsH76ll/0gIxuf1gei0ubw== | 8238 | integrity sha512-51xf1B6hV2PfjnzYHO/yUForFCRQ49KS8ngQb5T6l1HDEmfghTFtsxtRa5tbx4eqQsH76ll/0gIxuf1gei0ubw== |
8234 | 8239 | ||
8235 | -vue-eslint-parser@^7.2.0: | ||
8236 | - version "7.2.0" | ||
8237 | - resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.2.0.tgz#1e17ae94ca71e617025e05143c8ac5593aacb6ef" | ||
8238 | - integrity sha512-uVcQqe8sUNzdHGcRHMd2Z/hl6qEaWrAmglTKP92Fnq9TYU9un8xsyFgEdFJaXh/1rd7h8Aic1GaiQow5nVneow== | ||
8239 | - dependencies: | ||
8240 | - debug "^4.1.1" | ||
8241 | - eslint-scope "^5.0.0" | ||
8242 | - eslint-visitor-keys "^1.1.0" | ||
8243 | - espree "^6.2.1" | ||
8244 | - esquery "^1.0.1" | ||
8245 | - lodash "^4.17.15" | ||
8246 | - | ||
8247 | vue-eslint-parser@^7.3.0: | 8240 | vue-eslint-parser@^7.3.0: |
8248 | version "7.3.0" | 8241 | version "7.3.0" |
8249 | resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.3.0.tgz#894085839d99d81296fa081d19643733f23d7559" | 8242 | resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.3.0.tgz#894085839d99d81296fa081d19643733f23d7559" |
@@ -8256,13 +8249,13 @@ vue-eslint-parser@^7.3.0: | @@ -8256,13 +8249,13 @@ vue-eslint-parser@^7.3.0: | ||
8256 | esquery "^1.0.1" | 8249 | esquery "^1.0.1" |
8257 | lodash "^4.17.15" | 8250 | lodash "^4.17.15" |
8258 | 8251 | ||
8259 | -vue-i18n@^9.0.0-beta.13: | ||
8260 | - version "9.0.0-beta.13" | ||
8261 | - resolved "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.0.0-beta.13.tgz#89cf5dd1566025f441132231d15ed621ef70ba96" | ||
8262 | - integrity sha512-ZN6r5ITODu9NYAAbe1IGVUkNeamuleaXTLn5NMn/YZQ+5NSjDjysyVZVLkVOEOIw6bT2tLveyjsWlAZBVtfcPw== | 8252 | +vue-i18n@9.0.0-beta.14: |
8253 | + version "9.0.0-beta.14" | ||
8254 | + resolved "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.0.0-beta.14.tgz#2b2b89bc5371263d499bd17e3c0696bb9582c4f9" | ||
8255 | + integrity sha512-jPFtBXcRLuGc4YrI97JJuvj70BndqOhpQNJNthAIPC5x8eJIno44NkK/P769nqQWkbsnYO1sNwb+6oCO6QhaxA== | ||
8263 | dependencies: | 8256 | dependencies: |
8264 | - "@intlify/core-base" "9.0.0-beta.13" | ||
8265 | - "@intlify/shared" "9.0.0-beta.13" | 8257 | + "@intlify/core-base" "9.0.0-beta.14" |
8258 | + "@intlify/shared" "9.0.0-beta.14" | ||
8266 | "@vue/devtools-api" "^6.0.0-beta.2" | 8259 | "@vue/devtools-api" "^6.0.0-beta.2" |
8267 | 8260 | ||
8268 | vue-router@^4.0.1: | 8261 | vue-router@^4.0.1: |