@ditari/bsui 5.1.1 → 5.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/index.cjs +2 -0
- package/dist/cjs/components/index.cjs.map +1 -1
- package/dist/cjs/components/layout/AppContext.cjs.map +1 -1
- package/dist/cjs/components/layout/Layout.vue2.cjs +14 -4
- package/dist/cjs/components/layout/Layout.vue2.cjs.map +1 -1
- package/dist/cjs/components/layout/List.cjs +33 -28
- package/dist/cjs/components/layout/List.cjs.map +1 -1
- package/dist/cjs/components/layout/components/layout/RouterContent.vue2.cjs +41 -11
- package/dist/cjs/components/layout/components/layout/RouterContent.vue2.cjs.map +1 -1
- package/dist/cjs/components/layout/components/layout/RouterContentName.vue.cjs +10 -0
- package/dist/cjs/components/layout/components/layout/RouterContentName.vue.cjs.map +1 -0
- package/dist/cjs/components/layout/components/layout/RouterContentName.vue2.cjs +52 -0
- package/dist/cjs/components/layout/components/layout/RouterContentName.vue2.cjs.map +1 -0
- package/dist/cjs/components/layout/components/menu/Menu.cjs +3 -2
- package/dist/cjs/components/layout/components/menu/Menu.cjs.map +1 -1
- package/dist/cjs/components/layout/index.cjs +2 -0
- package/dist/cjs/components/layout/index.cjs.map +1 -1
- package/dist/cjs/components/tab/Tab.vue2.cjs +137 -28
- package/dist/cjs/components/tab/Tab.vue2.cjs.map +1 -1
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/components/index.mjs +1 -0
- package/dist/esm/components/index.mjs.map +1 -1
- package/dist/esm/components/layout/AppContext.mjs.map +1 -1
- package/dist/esm/components/layout/Layout.vue2.mjs +15 -5
- package/dist/esm/components/layout/Layout.vue2.mjs.map +1 -1
- package/dist/esm/components/layout/List.mjs +34 -29
- package/dist/esm/components/layout/List.mjs.map +1 -1
- package/dist/esm/components/layout/components/layout/RouterContent.vue2.mjs +43 -13
- package/dist/esm/components/layout/components/layout/RouterContent.vue2.mjs.map +1 -1
- package/dist/esm/components/layout/components/layout/RouterContentName.vue.mjs +6 -0
- package/dist/esm/components/layout/components/layout/RouterContentName.vue.mjs.map +1 -0
- package/dist/esm/components/layout/components/layout/RouterContentName.vue2.mjs +48 -0
- package/dist/esm/components/layout/components/layout/RouterContentName.vue2.mjs.map +1 -0
- package/dist/esm/components/layout/components/menu/Menu.mjs +3 -2
- package/dist/esm/components/layout/components/menu/Menu.mjs.map +1 -1
- package/dist/esm/components/layout/index.mjs +1 -0
- package/dist/esm/components/layout/index.mjs.map +1 -1
- package/dist/esm/components/tab/Tab.vue2.mjs +139 -30
- package/dist/esm/components/tab/Tab.vue2.mjs.map +1 -1
- package/dist/esm/index.mjs +1 -0
- package/dist/esm/index.mjs.map +1 -1
- package/dist/types/components/layout/AppContext.d.ts +3 -0
- package/dist/types/components/layout/AppContext.d.ts.map +1 -1
- package/dist/types/components/layout/Layout.vue.d.ts +51 -3
- package/dist/types/components/layout/Layout.vue.d.ts.map +1 -1
- package/dist/types/components/layout/List.d.ts.map +1 -1
- package/dist/types/components/layout/components/layout/HeaderLayout.vue.d.ts +11 -0
- package/dist/types/components/layout/components/layout/HeaderLayout.vue.d.ts.map +1 -1
- package/dist/types/components/layout/components/layout/RouterContent.vue.d.ts +4 -14
- package/dist/types/components/layout/components/layout/RouterContent.vue.d.ts.map +1 -1
- package/dist/types/components/layout/components/layout/RouterContentName.vue.d.ts +19 -0
- package/dist/types/components/layout/components/layout/RouterContentName.vue.d.ts.map +1 -0
- package/dist/types/components/layout/components/menu/Menu.d.ts.map +1 -1
- package/dist/types/components/layout/index.d.ts +1 -0
- package/dist/types/components/layout/index.d.ts.map +1 -1
- package/dist/types/components/tab/Tab.vue.d.ts +11 -0
- package/dist/types/components/tab/Tab.vue.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/cjs/_virtual/_commonjsHelpers.cjs +0 -47
- package/dist/cjs/_virtual/_commonjsHelpers.cjs.map +0 -1
- package/dist/cjs/_virtual/dayjs.min.cjs +0 -12
- package/dist/cjs/_virtual/dayjs.min.cjs.map +0 -1
- package/dist/cjs/_virtual/dayjs.min2.cjs +0 -6
- package/dist/cjs/_virtual/dayjs.min2.cjs.map +0 -1
- package/dist/cjs/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.cjs +0 -20
- package/dist/cjs/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.cjs.map +0 -1
- package/dist/esm/_virtual/_commonjsHelpers.mjs +0 -41
- package/dist/esm/_virtual/_commonjsHelpers.mjs.map +0 -1
- package/dist/esm/_virtual/dayjs.min.mjs +0 -8
- package/dist/esm/_virtual/dayjs.min.mjs.map +0 -1
- package/dist/esm/_virtual/dayjs.min2.mjs +0 -4
- package/dist/esm/_virtual/dayjs.min2.mjs.map +0 -1
- package/dist/esm/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.mjs +0 -18
- package/dist/esm/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.mjs.map +0 -1
|
@@ -1,20 +1,50 @@
|
|
|
1
|
-
import { defineComponent,
|
|
2
|
-
import { getActivePinia } from 'pinia';
|
|
1
|
+
import { defineComponent, computed, h, watch, resolveComponent, createBlock, openBlock, withCtx, createVNode, Transition, KeepAlive, resolveDynamicComponent, unref } from 'vue';
|
|
3
2
|
import { useRoute } from 'vue-router';
|
|
4
|
-
import {
|
|
3
|
+
import { storeToRefs } from 'pinia';
|
|
4
|
+
import { useNavTabStore } from '@ditari/store';
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
8
8
|
__name: "RouterContent",
|
|
9
9
|
setup(__props) {
|
|
10
|
-
const
|
|
11
|
-
const keepAliveStore = pinia ? useKeepAliveStore() : null;
|
|
12
|
-
const keepAliveNames = ref([]);
|
|
13
|
-
if (keepAliveStore) {
|
|
14
|
-
const { get } = keepAliveStore;
|
|
15
|
-
keepAliveNames.value = get;
|
|
16
|
-
}
|
|
10
|
+
const { list } = storeToRefs(useNavTabStore());
|
|
17
11
|
const route = useRoute();
|
|
12
|
+
const cachedViews = computed(() => {
|
|
13
|
+
return list.value.filter(
|
|
14
|
+
(tab) => {
|
|
15
|
+
var _a;
|
|
16
|
+
return ((_a = tab.meta) == null ? void 0 : _a.keepAlive) === true && tab.fullPath;
|
|
17
|
+
}
|
|
18
|
+
).map((tab) => tab.fullPath);
|
|
19
|
+
});
|
|
20
|
+
const wrapperMap = /* @__PURE__ */ new Map();
|
|
21
|
+
const getWrapper = (Component, route2) => {
|
|
22
|
+
if (!Component) return null;
|
|
23
|
+
const wrapperName = route2.fullPath;
|
|
24
|
+
if (wrapperMap.has(wrapperName)) {
|
|
25
|
+
return wrapperMap.get(wrapperName);
|
|
26
|
+
}
|
|
27
|
+
const wrapper = defineComponent({
|
|
28
|
+
name: wrapperName,
|
|
29
|
+
// 这确保了 keep-alive 的 include 能够匹配到
|
|
30
|
+
setup() {
|
|
31
|
+
return () => h(Component);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
wrapperMap.set(wrapperName, wrapper);
|
|
35
|
+
return wrapper;
|
|
36
|
+
};
|
|
37
|
+
watch(
|
|
38
|
+
cachedViews,
|
|
39
|
+
(names) => {
|
|
40
|
+
wrapperMap.forEach((_, key) => {
|
|
41
|
+
if (!names.includes(key)) {
|
|
42
|
+
wrapperMap.delete(key);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
{ deep: true }
|
|
47
|
+
);
|
|
18
48
|
return (_ctx, _cache) => {
|
|
19
49
|
const _component_router_view = resolveComponent("router-view");
|
|
20
50
|
return openBlock(), createBlock(_component_router_view, null, {
|
|
@@ -28,9 +58,9 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
28
58
|
},
|
|
29
59
|
{
|
|
30
60
|
default: withCtx(() => [
|
|
31
|
-
(openBlock(), createBlock(KeepAlive, { include:
|
|
32
|
-
(openBlock(), createBlock(resolveDynamicComponent(Component), {
|
|
33
|
-
key: unref(route).
|
|
61
|
+
(openBlock(), createBlock(KeepAlive, { include: cachedViews.value }, [
|
|
62
|
+
(openBlock(), createBlock(resolveDynamicComponent(getWrapper(Component, unref(route))), {
|
|
63
|
+
key: unref(route).fullPath
|
|
34
64
|
}))
|
|
35
65
|
], 1032, ["include"]))
|
|
36
66
|
]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouterContent.vue2.mjs","sources":["../../../../../../src/components/layout/components/layout/RouterContent.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport {
|
|
1
|
+
{"version":3,"file":"RouterContent.vue2.mjs","sources":["../../../../../../src/components/layout/components/layout/RouterContent.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed, defineComponent, h, watch } from \"vue\";\r\nimport { useRoute } from \"vue-router\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport { useNavTabStore } from \"@ditari/store\";\r\n\r\nconst { list } = storeToRefs(useNavTabStore());\r\nconst route = useRoute();\r\n\r\n// 1. 依然保留 cachedViews,它存储的是 fullPath 数组\r\nconst cachedViews = computed<string[]>(() => {\r\n return list.value\r\n .filter(\r\n tab => tab.meta?.keepAlive === true && tab.fullPath\r\n ) // 确保 fullPath 存在\r\n .map(tab => tab.fullPath as string); // 明确断言为 string\r\n});\r\n\r\n// 2. 使用 shallowRef 存储包装组件,避免不必要的深层响应式开销\r\nconst wrapperMap = new Map();\r\n\r\nconst getWrapper = (Component: any, route: any) => {\r\n if (!Component) return null;\r\n\r\n // 使用 fullPath 作为唯一的组件名\r\n const wrapperName = route.fullPath;\r\n\r\n if (wrapperMap.has(wrapperName)) {\r\n return wrapperMap.get(wrapperName);\r\n }\r\n\r\n // 3. 关键:创建一个新组件,其 name 必须在 cachedViews 数组中\r\n const wrapper = defineComponent({\r\n name: wrapperName, // 这确保了 keep-alive 的 include 能够匹配到\r\n setup() {\r\n return () => h(Component);\r\n }\r\n });\r\n\r\n wrapperMap.set(wrapperName, wrapper);\r\n return wrapper;\r\n};\r\nwatch(\r\n cachedViews,\r\n names => {\r\n wrapperMap.forEach((_, key) => {\r\n if (!names.includes(key)) {\r\n wrapperMap.delete(key);\r\n }\r\n });\r\n },\r\n { deep: true }\r\n);\r\n</script>\r\n<template>\r\n <router-view v-slot=\"{ Component }\">\r\n <transition name=\"main\" mode=\"out-in\" appear>\r\n <keep-alive :include=\"cachedViews\">\r\n <component\r\n :is=\"getWrapper(Component, route)\"\r\n :key=\"route.fullPath\"\r\n />\r\n </keep-alive>\r\n </transition>\r\n </router-view>\r\n</template>\r\n"],"names":["route","_createBlock","_withCtx","_createVNode","_Transition","_KeepAlive","_openBlock","_resolveDynamicComponent","_unref"],"mappings":";;;;;;;;;AAOA,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,WAAA,CAAY,gBAAgB,CAAA;AAC7C,IAAA,MAAM,QAAQ,QAAA,EAAS;AAGvB,IAAA,MAAM,WAAA,GAAc,SAAmB,MAAM;AAC3C,MAAA,OAAO,KAAK,KAAA,CACT,MAAA;AAAA,QACC,CAAA,GAAA,KAAI;;AAAG,UAAA,OAAA,CAAA,CAAA,EAAA,GAAA,GAAA,CAAI,IAAA,KAAJ,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAU,SAAA,MAAc,IAAA,IAAQ,GAAA,CAAI,QAAA;AAAA,QAAA;AAAA,OAC7C,CACC,GAAA,CAAI,CAAA,GAAA,KAAO,GAAA,CAAI,QAAkB,CAAA;AAAA,IACtC,CAAC,CAAA;AAGD,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAAI;AAE3B,IAAA,MAAM,UAAA,GAAa,CAAC,SAAA,EAAgBA,MAAAA,KAAe;AACjD,MAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AAGvB,MAAA,MAAM,cAAcA,MAAAA,CAAM,QAAA;AAE1B,MAAA,IAAI,UAAA,CAAW,GAAA,CAAI,WAAW,CAAA,EAAG;AAC/B,QAAA,OAAO,UAAA,CAAW,IAAI,WAAW,CAAA;AAAA,MACnC;AAGA,MAAA,MAAM,UAAU,eAAA,CAAgB;AAAA,QAC9B,IAAA,EAAM,WAAA;AAAA;AAAA,QACN,KAAA,GAAQ;AACN,UAAA,OAAO,MAAM,EAAE,SAAS,CAAA;AAAA,QAC1B;AAAA,OACD,CAAA;AAED,MAAA,UAAA,CAAW,GAAA,CAAI,aAAa,OAAO,CAAA;AACnC,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AACA,IAAA,KAAA;AAAA,MACE,WAAA;AAAA,MACA,CAAA,KAAA,KAAS;AACP,QAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAA,EAAG,GAAA,KAAQ;AAC7B,UAAA,IAAI,CAAC,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AACxB,YAAA,UAAA,CAAW,OAAO,GAAG,CAAA;AAAA,UACvB;AAAA,QACF,CAAC,CAAA;AAAA,MACH,CAAA;AAAA,MACA,EAAE,MAAM,IAAA;AAAK,KACf;;;0BAGEC,WAAA,CASc,sBAAA,EAAA,IAAA,EAAA;AAAA,QARZ,OAAA,EAAAC,OAAA,CAAA,CAOa,EARQ,WAAS,KAAA;AAAA,UAC9BC,WAAA;AAAA,YAOaC,UAAA;AAAA,YAAA;AAAA,cAPD,IAAA,EAAK,MAAA;AAAA,cAAO,IAAA,EAAK,QAAA;AAAA,cAAS,MAAA,EAAA;AAAA;;+BACpC,MAKa;AAAA,8BALbH,WAAA,CAKaI,SAAA,EAAA,EALA,OAAA,EAAS,WAAA,CAAA,OAAW,EAAA;AAAA,mBAC/BC,SAAA,EAAA,EAAAL,WAAA,CAGEM,uBAAA,CAFK,UAAA,CAAW,WAAWC,KAAA,CAAA,KAAA,CAAK,CAAA,CAAA,EAAA;AAAA,oBAC/B,GAAA,EAAKA,KAAA,CAAA,KAAA,CAAA,CAAM;AAAA;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RouterContentName.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { defineComponent, computed, resolveComponent, createBlock, openBlock, withCtx, createVNode, Transition, KeepAlive, resolveDynamicComponent, unref } from 'vue';
|
|
2
|
+
import { useRoute } from 'vue-router';
|
|
3
|
+
import { storeToRefs } from 'pinia';
|
|
4
|
+
import { useKeepAliveStore } from '@ditari/store';
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
8
|
+
__name: "RouterContentName",
|
|
9
|
+
setup(__props) {
|
|
10
|
+
const keepAliveStore = useKeepAliveStore();
|
|
11
|
+
const { get } = storeToRefs(keepAliveStore);
|
|
12
|
+
const keepAliveNames = computed(() => get.value);
|
|
13
|
+
const route = useRoute();
|
|
14
|
+
return (_ctx, _cache) => {
|
|
15
|
+
const _component_router_view = resolveComponent("router-view");
|
|
16
|
+
return openBlock(), createBlock(_component_router_view, null, {
|
|
17
|
+
default: withCtx(({ Component }) => [
|
|
18
|
+
createVNode(
|
|
19
|
+
Transition,
|
|
20
|
+
{
|
|
21
|
+
name: "main",
|
|
22
|
+
mode: "out-in",
|
|
23
|
+
appear: ""
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
default: withCtx(() => [
|
|
27
|
+
(openBlock(), createBlock(KeepAlive, { include: keepAliveNames.value }, [
|
|
28
|
+
(openBlock(), createBlock(resolveDynamicComponent(Component), {
|
|
29
|
+
key: unref(route).path
|
|
30
|
+
}))
|
|
31
|
+
], 1032, ["include"]))
|
|
32
|
+
]),
|
|
33
|
+
_: 2
|
|
34
|
+
/* DYNAMIC */
|
|
35
|
+
},
|
|
36
|
+
1024
|
|
37
|
+
/* DYNAMIC_SLOTS */
|
|
38
|
+
)
|
|
39
|
+
]),
|
|
40
|
+
_: 1
|
|
41
|
+
/* STABLE */
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
export { _sfc_main as default };
|
|
48
|
+
//# sourceMappingURL=RouterContentName.vue2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RouterContentName.vue2.mjs","sources":["../../../../../../src/components/layout/components/layout/RouterContentName.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from \"vue\";\r\nimport { useRoute } from \"vue-router\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport { useKeepAliveStore } from \"@ditari/store\";\r\n\r\nconst keepAliveStore = useKeepAliveStore();\r\n\r\nconst { get } = storeToRefs(keepAliveStore);\r\nconst keepAliveNames = computed<string[]>(() => get.value);\r\n\r\nconst route = useRoute();\r\n</script>\r\n\r\n<template>\r\n <router-view v-slot=\"{ Component }\">\r\n <transition name=\"main\" mode=\"out-in\" appear>\r\n <keep-alive :include=\"keepAliveNames\">\r\n <component :is=\"Component\" :key=\"route.path\" />\r\n </keep-alive>\r\n </transition>\r\n </router-view>\r\n</template>\r\n\r\n<style scoped></style>\r\n"],"names":["_createBlock","_withCtx","_createVNode","_Transition","_KeepAlive","_openBlock","_resolveDynamicComponent","_unref"],"mappings":";;;;;;;;;AAOA,IAAA,MAAM,iBAAiB,iBAAA,EAAkB;AAEzC,IAAA,MAAM,EAAE,GAAA,EAAI,GAAI,WAAA,CAAY,cAAc,CAAA;AAC1C,IAAA,MAAM,cAAA,GAAiB,QAAA,CAAmB,MAAM,GAAA,CAAI,KAAK,CAAA;AAEzD,IAAA,MAAM,QAAQ,QAAA,EAAS;;;0BAIrBA,WAAA,CAMc,sBAAA,EAAA,IAAA,EAAA;AAAA,QALZ,OAAA,EAAAC,OAAA,CAAA,CAIa,EALQ,WAAS,KAAA;AAAA,UAC9BC,WAAA;AAAA,YAIaC,UAAA;AAAA,YAAA;AAAA,cAJD,IAAA,EAAK,MAAA;AAAA,cAAO,IAAA,EAAK,QAAA;AAAA,cAAS,MAAA,EAAA;AAAA;;+BACpC,MAEa;AAAA,8BAFbH,WAAA,CAEaI,SAAA,EAAA,EAFA,OAAA,EAAS,cAAA,CAAA,OAAc,EAAA;AAAA,mBAClCC,SAAA,EAAA,EAAAL,WAAA,CAA+CM,uBAAA,CAA/B,SAAS,CAAA,EAAA;AAAA,oBAAG,GAAA,EAAKC,KAAA,CAAA,KAAA,CAAA,CAAM;AAAA;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -129,15 +129,16 @@ var Menu = /* @__PURE__ */ defineComponent({
|
|
|
129
129
|
}
|
|
130
130
|
}));
|
|
131
131
|
watch(() => layout.value.collapsed, (val) => {
|
|
132
|
+
var _a, _b, _c;
|
|
132
133
|
const id = selectedKeys.value[0];
|
|
133
134
|
const rs = findMatchedMenuById(id, data.value);
|
|
134
135
|
if (val) {
|
|
135
136
|
openKeys.value = [];
|
|
136
137
|
} else {
|
|
137
138
|
if (rs == null ? void 0 : rs.parentItem) {
|
|
138
|
-
openKeys.value = [rs.parentItem.key];
|
|
139
|
+
openKeys.value = [(_a = rs.parentItem) == null ? void 0 : _a.key];
|
|
139
140
|
} else {
|
|
140
|
-
openKeys.value = [rs.matchItem.key];
|
|
141
|
+
openKeys.value = ((_b = rs.matchItem) == null ? void 0 : _b.key) ? [(_c = rs.matchItem) == null ? void 0 : _c.key] : [];
|
|
141
142
|
}
|
|
142
143
|
}
|
|
143
144
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.mjs","sources":["../../../../../../src/components/layout/components/menu/Menu.tsx"],"sourcesContent":["import {\r\n computed,\r\n defineComponent,\r\n inject,\r\n watch\r\n} from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport {\r\n AppContext,\r\n AppContextKey\r\n} from \"../../AppContext\";\r\nimport { useAppStore, useMenuStore } from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\n\r\nimport useMenuCore from \"../../../../utils/useMenuCore\";\r\n\r\nexport default defineComponent({\r\n name: \"DMenu\",\r\n emits: [\"onMenuClick\"],\r\n setup(_, { emit }) {\r\n // ⭐️ 修复:直接调用 Store 函数,Pinia 内部机制会处理实例缺失时的行为\r\n const appStore = useAppStore();\r\n const menuStore = useMenuStore();\r\n\r\n const appContext = inject<AppContext | null>(\r\n AppContextKey,\r\n null\r\n );\r\n\r\n const renderMenuIcon = appContext?.renderMenuIcon;\r\n\r\n const { layout, modeConfig } = storeToRefs(appStore);\r\n\r\n const { openKeys, selectedKeys, data } =\r\n storeToRefs(menuStore);\r\n\r\n const menuList = computed(() => {\r\n const menuData = JSON.parse(\r\n JSON.stringify(data.value)\r\n );\r\n return renderIcon(menuData);\r\n });\r\n\r\n function renderIcon(data: []) {\r\n // 需要递归处理\r\n data.forEach(\r\n (item: {\r\n name: string;\r\n icon: unknown;\r\n children: [];\r\n }) => {\r\n if (item.icon) {\r\n const icon = item.icon;\r\n item.icon = () =>\r\n renderMenuIcon?.({ icon } as {\r\n icon: string;\r\n });\r\n }\r\n if (item.children && item.children.length) {\r\n renderIcon(item.children);\r\n }\r\n }\r\n );\r\n return data;\r\n }\r\n\r\n const { findMatchedMenuById, findMenuItemByUrl } =\r\n useMenuCore();\r\n const { menuWrapperStyle } = useStyle();\r\n const { onClick } = useMenu();\r\n\r\n function useStyle() {\r\n const menuWrapperStyle = computed(\r\n () => css`\r\n flex: 1;\r\n overflow: hidden;\r\n\r\n .ant-menu {\r\n height: 100%;\r\n overflow: scroll;\r\n -ms-overflow-style: none; /* 对 IE 和 Edge 生效 */\r\n scrollbar-width: none; /* 对 Firefox 生效 */\r\n\r\n ${modeConfig.value.mode === \"light\"\r\n ? \"background:transparent;\"\r\n : \"\"}\r\n /* Webkit 浏览器 */\r\n ::-webkit-scrollbar {\r\n display: none;\r\n }\r\n }\r\n `\r\n );\r\n return {\r\n menuWrapperStyle\r\n };\r\n }\r\n\r\n function useMenu() {\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n /**\r\n * 根据URL路径查找最接近的父级菜单\r\n */\r\n const findClosestParentMenu = (\r\n url: string,\r\n menus: any[]\r\n ): any => {\r\n // 移除查询参数和哈希\r\n const cleanUrl = url.split(\"?\")[0].split(\"#\")[0];\r\n const pathSegments = cleanUrl\r\n .split(\"/\")\r\n .filter(Boolean);\r\n\r\n // 从最长路径开始尝试匹配\r\n for (let i = pathSegments.length; i > 0; i--) {\r\n const testPath =\r\n \"/\" + pathSegments.slice(0, i).join(\"/\");\r\n const foundItem = findMenuItemByUrl(\r\n testPath,\r\n menus\r\n );\r\n if (foundItem) return foundItem;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n /**\r\n * 在标签切换的时候,路由会变化,需要动态关联左侧菜单的选中状态\r\n */\r\n watch(\r\n () => route.fullPath,\r\n async path => {\r\n const flag = selectedKeys.value.some(\r\n (item: string) => item === path\r\n );\r\n if (!flag) {\r\n let menuItem = findMenuItemByUrl(\r\n path,\r\n data.value\r\n );\r\n\r\n // 如果没有精确匹配,尝试匹配父级路径\r\n if (!menuItem) {\r\n menuItem = findClosestParentMenu(\r\n path,\r\n data.value\r\n );\r\n }\r\n\r\n if (!menuItem) {\r\n openKeys.value = [];\r\n selectedKeys.value = [path];\r\n } else {\r\n const rs = getFullParentChain(\r\n menuItem.id,\r\n data.value as never\r\n );\r\n if (!layout.value.collapsed) {\r\n openKeys.value = rs!;\r\n }\r\n selectedKeys.value = [menuItem.key];\r\n }\r\n }\r\n }\r\n );\r\n\r\n watch(\r\n () => layout.value.collapsed,\r\n val => {\r\n const id = selectedKeys.value[0];\r\n const rs = findMatchedMenuById(\r\n id,\r\n data.value as never\r\n );\r\n\r\n if (val) {\r\n openKeys.value = [];\r\n } else {\r\n if (rs?.parentItem) {\r\n openKeys.value = [rs.parentItem.key];\r\n } else {\r\n openKeys.value = [rs!.matchItem.key];\r\n }\r\n }\r\n }\r\n );\r\n\r\n /**\r\n * 获取从根到目标菜单项的完整 key 链\r\n * @param targetId 目标菜单项 id\r\n * @param menus 菜单数据\r\n * @param parentChain 递归传递的父级链\r\n */\r\n const getFullParentChain = (\r\n targetId: string,\r\n menus: any[],\r\n parentChain: string[] = []\r\n ): string[] | null => {\r\n for (const menu of menus) {\r\n // 找到目标项,返回完整链(包含自身 key)\r\n if (menu.id === targetId) {\r\n return [...parentChain, menu.key];\r\n }\r\n\r\n // 递归查找子菜单\r\n if (menu.children?.length) {\r\n const result = getFullParentChain(\r\n targetId,\r\n menu.children,\r\n [...parentChain, menu.key] // 传递当前层级的 key\r\n );\r\n if (result) return result;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n const onClick = ({\r\n key,\r\n keyPath,\r\n item\r\n }: {\r\n item: { originItemValue: any };\r\n key: string;\r\n keyPath: string[];\r\n }) => {\r\n const rs = findMatchedMenuById(key, data.value);\r\n if (item.originItemValue?.isExternalLink) {\r\n emit(\"onMenuClick\", item);\r\n } else {\r\n openKeys.value = keyPath;\r\n selectedKeys.value = [rs.matchItem?.key];\r\n if (rs.matchItem?.url !== route.path) {\r\n // 判断目标路由和当前路由是否相等;\r\n // 不相等的时候再跳转\r\n router.push(rs.matchItem?.url).then(r => {\r\n if (r) {\r\n console.warn(r);\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n return {\r\n openKeys,\r\n selectedKeys,\r\n data,\r\n onClick\r\n };\r\n }\r\n\r\n return () => (\r\n <div class={menuWrapperStyle.value}>\r\n <a-menu\r\n v-model:open-keys={openKeys.value}\r\n v-model:selected-keys={selectedKeys.value}\r\n items={menuList.value}\r\n mode=\"inline\"\r\n triggerSubMenuAction={\"hover\"}\r\n onClick={onClick}\r\n ></a-menu>\r\n </div>\r\n );\r\n }\r\n});\r\n"],"names":["name","emits","setup","_","emit","appStore","useAppStore","menuStore","useMenuStore","appContext","inject","AppContextKey","renderMenuIcon","layout","modeConfig","storeToRefs","openKeys","selectedKeys","data","menuList","computed","menuData","JSON","parse","stringify","value","renderIcon","forEach","item","icon","children","length","findMatchedMenuById","findMenuItemByUrl","useMenuCore","menuWrapperStyle","useStyle","onClick","useMenu","css","mode","route","useRoute","router","useRouter","findClosestParentMenu","url","menus","cleanUrl","split","pathSegments","filter","Boolean","i","testPath","slice","join","foundItem","watch","fullPath","path","flag","some","menuItem","rs","getFullParentChain","id","collapsed","key","val","parentItem","matchItem","targetId","parentChain","menu","result","keyPath","originItemValue","isExternalLink","push","then","r","console","warn","_createVNode","_resolveComponent","$event"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Menu.mjs","sources":["../../../../../../src/components/layout/components/menu/Menu.tsx"],"sourcesContent":["import {\r\n computed,\r\n defineComponent,\r\n inject,\r\n watch\r\n} from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport {\r\n AppContext,\r\n AppContextKey\r\n} from \"../../AppContext\";\r\nimport { useAppStore, useMenuStore } from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\n\r\nimport useMenuCore from \"../../../../utils/useMenuCore\";\r\n\r\nexport default defineComponent({\r\n name: \"DMenu\",\r\n emits: [\"onMenuClick\"],\r\n setup(_, { emit }) {\r\n // ⭐️ 修复:直接调用 Store 函数,Pinia 内部机制会处理实例缺失时的行为\r\n const appStore = useAppStore();\r\n const menuStore = useMenuStore();\r\n\r\n const appContext = inject<AppContext | null>(\r\n AppContextKey,\r\n null\r\n );\r\n\r\n const renderMenuIcon = appContext?.renderMenuIcon;\r\n\r\n const { layout, modeConfig } = storeToRefs(appStore);\r\n\r\n const { openKeys, selectedKeys, data } =\r\n storeToRefs(menuStore);\r\n\r\n const menuList = computed(() => {\r\n const menuData = JSON.parse(\r\n JSON.stringify(data.value)\r\n );\r\n return renderIcon(menuData);\r\n });\r\n\r\n function renderIcon(data: []) {\r\n // 需要递归处理\r\n data.forEach(\r\n (item: {\r\n name: string;\r\n icon: unknown;\r\n children: [];\r\n }) => {\r\n if (item.icon) {\r\n const icon = item.icon;\r\n item.icon = () =>\r\n renderMenuIcon?.({ icon } as {\r\n icon: string;\r\n });\r\n }\r\n if (item.children && item.children.length) {\r\n renderIcon(item.children);\r\n }\r\n }\r\n );\r\n return data;\r\n }\r\n\r\n const { findMatchedMenuById, findMenuItemByUrl } =\r\n useMenuCore();\r\n const { menuWrapperStyle } = useStyle();\r\n const { onClick } = useMenu();\r\n\r\n function useStyle() {\r\n const menuWrapperStyle = computed(\r\n () => css`\r\n flex: 1;\r\n overflow: hidden;\r\n\r\n .ant-menu {\r\n height: 100%;\r\n overflow: scroll;\r\n -ms-overflow-style: none; /* 对 IE 和 Edge 生效 */\r\n scrollbar-width: none; /* 对 Firefox 生效 */\r\n\r\n ${modeConfig.value.mode === \"light\"\r\n ? \"background:transparent;\"\r\n : \"\"}\r\n /* Webkit 浏览器 */\r\n ::-webkit-scrollbar {\r\n display: none;\r\n }\r\n }\r\n `\r\n );\r\n return {\r\n menuWrapperStyle\r\n };\r\n }\r\n\r\n function useMenu() {\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n /**\r\n * 根据URL路径查找最接近的父级菜单\r\n */\r\n const findClosestParentMenu = (\r\n url: string,\r\n menus: any[]\r\n ): any => {\r\n // 移除查询参数和哈希\r\n const cleanUrl = url.split(\"?\")[0].split(\"#\")[0];\r\n const pathSegments = cleanUrl\r\n .split(\"/\")\r\n .filter(Boolean);\r\n\r\n // 从最长路径开始尝试匹配\r\n for (let i = pathSegments.length; i > 0; i--) {\r\n const testPath =\r\n \"/\" + pathSegments.slice(0, i).join(\"/\");\r\n const foundItem = findMenuItemByUrl(\r\n testPath,\r\n menus\r\n );\r\n if (foundItem) return foundItem;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n /**\r\n * 在标签切换的时候,路由会变化,需要动态关联左侧菜单的选中状态\r\n */\r\n watch(\r\n () => route.fullPath,\r\n async path => {\r\n const flag = selectedKeys.value.some(\r\n (item: string) => item === path\r\n );\r\n if (!flag) {\r\n let menuItem = findMenuItemByUrl(\r\n path,\r\n data.value\r\n );\r\n\r\n // 如果没有精确匹配,尝试匹配父级路径\r\n if (!menuItem) {\r\n menuItem = findClosestParentMenu(\r\n path,\r\n data.value\r\n );\r\n }\r\n\r\n if (!menuItem) {\r\n openKeys.value = [];\r\n selectedKeys.value = [path];\r\n } else {\r\n const rs = getFullParentChain(\r\n menuItem.id,\r\n data.value as never\r\n );\r\n if (!layout.value.collapsed) {\r\n openKeys.value = rs!;\r\n }\r\n selectedKeys.value = [menuItem.key];\r\n }\r\n }\r\n }\r\n );\r\n\r\n watch(\r\n () => layout.value.collapsed,\r\n val => {\r\n const id = selectedKeys.value[0];\r\n const rs = findMatchedMenuById(\r\n id,\r\n data.value as never\r\n );\r\n\r\n if (val) {\r\n openKeys.value = [];\r\n } else {\r\n if (rs?.parentItem) {\r\n openKeys.value = [rs.parentItem?.key];\r\n } else {\r\n openKeys.value = rs!.matchItem?.key\r\n ? [rs!.matchItem?.key]\r\n : [];\r\n }\r\n }\r\n }\r\n );\r\n\r\n /**\r\n * 获取从根到目标菜单项的完整 key 链\r\n * @param targetId 目标菜单项 id\r\n * @param menus 菜单数据\r\n * @param parentChain 递归传递的父级链\r\n */\r\n const getFullParentChain = (\r\n targetId: string,\r\n menus: any[],\r\n parentChain: string[] = []\r\n ): string[] | null => {\r\n for (const menu of menus) {\r\n // 找到目标项,返回完整链(包含自身 key)\r\n if (menu.id === targetId) {\r\n return [...parentChain, menu.key];\r\n }\r\n\r\n // 递归查找子菜单\r\n if (menu.children?.length) {\r\n const result = getFullParentChain(\r\n targetId,\r\n menu.children,\r\n [...parentChain, menu.key] // 传递当前层级的 key\r\n );\r\n if (result) return result;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n const onClick = ({\r\n key,\r\n keyPath,\r\n item\r\n }: {\r\n item: { originItemValue: any };\r\n key: string;\r\n keyPath: string[];\r\n }) => {\r\n const rs = findMatchedMenuById(key, data.value);\r\n if (item.originItemValue?.isExternalLink) {\r\n emit(\"onMenuClick\", item);\r\n } else {\r\n openKeys.value = keyPath;\r\n selectedKeys.value = [rs.matchItem?.key];\r\n if (rs.matchItem?.url !== route.path) {\r\n // 判断目标路由和当前路由是否相等;\r\n // 不相等的时候再跳转\r\n router.push(rs.matchItem?.url).then(r => {\r\n if (r) {\r\n console.warn(r);\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n return {\r\n openKeys,\r\n selectedKeys,\r\n data,\r\n onClick\r\n };\r\n }\r\n\r\n return () => (\r\n <div class={menuWrapperStyle.value}>\r\n <a-menu\r\n v-model:open-keys={openKeys.value}\r\n v-model:selected-keys={selectedKeys.value}\r\n items={menuList.value}\r\n mode=\"inline\"\r\n triggerSubMenuAction={\"hover\"}\r\n onClick={onClick}\r\n ></a-menu>\r\n </div>\r\n );\r\n }\r\n});\r\n"],"names":["name","emits","setup","_","emit","appStore","useAppStore","menuStore","useMenuStore","appContext","inject","AppContextKey","renderMenuIcon","layout","modeConfig","storeToRefs","openKeys","selectedKeys","data","menuList","computed","menuData","JSON","parse","stringify","value","renderIcon","forEach","item","icon","children","length","findMatchedMenuById","findMenuItemByUrl","useMenuCore","menuWrapperStyle","useStyle","onClick","useMenu","css","mode","route","useRoute","router","useRouter","findClosestParentMenu","url","menus","cleanUrl","split","pathSegments","filter","Boolean","i","testPath","slice","join","foundItem","watch","fullPath","path","flag","some","menuItem","rs","getFullParentChain","id","collapsed","key","val","parentItem","matchItem","targetId","parentChain","menu","result","keyPath","originItemValue","isExternalLink","push","then","r","console","warn","_createVNode","_resolveComponent","$event"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import list from './List.mjs';
|
|
2
2
|
import show from './Show.mjs';
|
|
3
3
|
import './Layout.vue.mjs';
|
|
4
|
+
export { AppContextKey } from './AppContext.mjs';
|
|
4
5
|
import './components/index.mjs';
|
|
5
6
|
import _sfc_main from './Layout.vue2.mjs';
|
|
6
7
|
export { default as AppTheme } from './components/layout/ThemeApp.vue2.mjs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../src/components/layout/index.ts"],"sourcesContent":["import List from \"./List\";\r\nimport Show from \"./Show\";\r\nimport type { App } from \"vue\";\r\n\r\nimport Layout from \"./Layout.vue\";\r\n\r\nexport * from \"./components\";\r\n\r\nList.install = function (app: App) {\r\n app.component(List.name!, List);\r\n return app;\r\n};\r\n\r\nShow.install = function (app: App) {\r\n app.component(Show.name!, Show);\r\n return app;\r\n};\r\nLayout.install = function (app: App) {\r\n app.component(\"DLayout\", Layout);\r\n return app;\r\n};\r\n\r\nexport { Layout, List, Show };\r\n"],"names":["List","Show","Layout"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../src/components/layout/index.ts"],"sourcesContent":["import List from \"./List\";\r\nimport Show from \"./Show\";\r\nimport type { App } from \"vue\";\r\n\r\nimport Layout from \"./Layout.vue\";\r\n\r\nexport * from \"./AppContext\";\r\nexport * from \"./components\";\r\n\r\nList.install = function (app: App) {\r\n app.component(List.name!, List);\r\n return app;\r\n};\r\n\r\nShow.install = function (app: App) {\r\n app.component(Show.name!, Show);\r\n return app;\r\n};\r\nLayout.install = function (app: App) {\r\n app.component(\"DLayout\", Layout);\r\n return app;\r\n};\r\n\r\nexport { Layout, List, Show };\r\n"],"names":["List","Show","Layout"],"mappings":";;;;;;;;;;;AASAA,IAAA,CAAK,OAAA,GAAU,SAAU,GAAA,EAAU;AACjC,EAAA,GAAA,CAAI,SAAA,CAAUA,IAAA,CAAK,IAAA,EAAOA,IAAI,CAAA;AAC9B,EAAA,OAAO,GAAA;AACT,CAAA;AAEAC,IAAA,CAAK,OAAA,GAAU,SAAU,GAAA,EAAU;AACjC,EAAA,GAAA,CAAI,SAAA,CAAUA,IAAA,CAAK,IAAA,EAAOA,IAAI,CAAA;AAC9B,EAAA,OAAO,GAAA;AACT,CAAA;AACAC,SAAA,CAAO,OAAA,GAAU,SAAU,GAAA,EAAU;AACnC,EAAA,GAAA,CAAI,SAAA,CAAU,WAAWA,SAAM,CAAA;AAC/B,EAAA,OAAO,GAAA;AACT,CAAA;;;;"}
|
|
@@ -1,20 +1,25 @@
|
|
|
1
|
-
import { defineComponent, computed, watch, resolveComponent, createElementBlock, openBlock, normalizeClass, unref, createVNode, createElementVNode, isRef, withCtx, Fragment, renderList, createBlock, createCommentVNode, toDisplayString } from 'vue';
|
|
1
|
+
import { defineComponent, computed, watch, inject, resolveComponent, createElementBlock, openBlock, normalizeClass, unref, createVNode, createElementVNode, isRef, withCtx, Fragment, renderList, createBlock, createCommentVNode, toDisplayString, createTextVNode } from 'vue';
|
|
2
2
|
import { useRoute, useRouter } from 'vue-router';
|
|
3
3
|
import { theme } from 'ant-design-vue';
|
|
4
4
|
import { storeToRefs } from 'pinia';
|
|
5
|
+
import { AppContextKey } from '../layout/AppContext.mjs';
|
|
5
6
|
import Search from './Search.mjs';
|
|
6
|
-
import { CloseOutlined } from '@ant-design/icons-vue';
|
|
7
|
+
import { ReloadOutlined, CloseOutlined } from '@ant-design/icons-vue';
|
|
7
8
|
import { useNavTabStore } from '@ditari/store';
|
|
8
9
|
import { css } from '@emotion/css';
|
|
9
10
|
|
|
10
11
|
"use strict";
|
|
11
12
|
const _hoisted_1 = { class: "d-tabs-nav" };
|
|
12
|
-
const _hoisted_2 = {
|
|
13
|
-
const _hoisted_3 = {
|
|
13
|
+
const _hoisted_2 = {
|
|
14
14
|
key: 0,
|
|
15
|
+
class: "tab-item"
|
|
16
|
+
};
|
|
17
|
+
const _hoisted_3 = { class: "tab-item" };
|
|
18
|
+
const _hoisted_4 = {
|
|
19
|
+
key: 2,
|
|
15
20
|
class: "tab-close"
|
|
16
21
|
};
|
|
17
|
-
const
|
|
22
|
+
const _hoisted_5 = ["onClick"];
|
|
18
23
|
var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
19
24
|
__name: "Tab",
|
|
20
25
|
setup(__props) {
|
|
@@ -26,6 +31,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
26
31
|
onChange,
|
|
27
32
|
onClose
|
|
28
33
|
} = useTab();
|
|
34
|
+
const { enableTabContextMenu, onContextMenuClick } = useTabsContextMenu();
|
|
29
35
|
function useStyle() {
|
|
30
36
|
const { useToken } = theme;
|
|
31
37
|
const { token } = useToken();
|
|
@@ -113,7 +119,49 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
113
119
|
onClose: onClose2
|
|
114
120
|
};
|
|
115
121
|
}
|
|
122
|
+
function useTabsContextMenu() {
|
|
123
|
+
const appContext = inject(
|
|
124
|
+
AppContextKey,
|
|
125
|
+
null
|
|
126
|
+
);
|
|
127
|
+
const store = useNavTabStore();
|
|
128
|
+
const router = useRouter();
|
|
129
|
+
const onContextMenuClick2 = ({ key }, targetKey) => {
|
|
130
|
+
var _a, _b, _c, _d;
|
|
131
|
+
switch (key) {
|
|
132
|
+
case "reload":
|
|
133
|
+
if (targetKey !== activeKey.value) {
|
|
134
|
+
router.push(targetKey).then(() => {
|
|
135
|
+
var _a2;
|
|
136
|
+
return (_a2 = appContext == null ? void 0 : appContext.onReloadPage) == null ? void 0 : _a2.call(appContext);
|
|
137
|
+
});
|
|
138
|
+
} else {
|
|
139
|
+
(_a = appContext == null ? void 0 : appContext.onReloadPage) == null ? void 0 : _a.call(appContext);
|
|
140
|
+
}
|
|
141
|
+
break;
|
|
142
|
+
case "other":
|
|
143
|
+
(_b = store.closeOtherTabs) == null ? void 0 : _b.call(store, targetKey);
|
|
144
|
+
router.push(targetKey);
|
|
145
|
+
break;
|
|
146
|
+
case "left":
|
|
147
|
+
(_c = store.closeLeftTabs) == null ? void 0 : _c.call(store, targetKey);
|
|
148
|
+
router.push(targetKey);
|
|
149
|
+
break;
|
|
150
|
+
case "right":
|
|
151
|
+
(_d = store.closeRightTabs) == null ? void 0 : _d.call(store, targetKey);
|
|
152
|
+
router.push(targetKey);
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
return {
|
|
157
|
+
enableTabContextMenu: (appContext == null ? void 0 : appContext.enableTabContextMenu) || false,
|
|
158
|
+
onContextMenuClick: onContextMenuClick2
|
|
159
|
+
};
|
|
160
|
+
}
|
|
116
161
|
return (_ctx, _cache) => {
|
|
162
|
+
const _component_a_menu_item = resolveComponent("a-menu-item");
|
|
163
|
+
const _component_a_menu = resolveComponent("a-menu");
|
|
164
|
+
const _component_a_dropdown = resolveComponent("a-dropdown");
|
|
117
165
|
const _component_a_tab_pane = resolveComponent("a-tab-pane");
|
|
118
166
|
const _component_a_tabs = resolveComponent("a-tabs");
|
|
119
167
|
return openBlock(), createElementBlock(
|
|
@@ -154,47 +202,108 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
154
202
|
2
|
|
155
203
|
/* CLASS */
|
|
156
204
|
),
|
|
157
|
-
_cache[
|
|
205
|
+
_cache[5] || (_cache[5] = createElementVNode(
|
|
158
206
|
"div",
|
|
159
207
|
{ class: "tab-dividers" },
|
|
160
208
|
null,
|
|
161
209
|
-1
|
|
162
210
|
/* CACHED */
|
|
163
211
|
)),
|
|
164
|
-
|
|
165
|
-
createElementVNode(
|
|
212
|
+
!unref(enableTabContextMenu) ? (openBlock(), createElementBlock(
|
|
166
213
|
"div",
|
|
167
214
|
_hoisted_2,
|
|
168
215
|
toDisplayString(((_a = item.meta) == null ? void 0 : _a.title) || "\u65E0\u6807\u9898"),
|
|
169
216
|
1
|
|
170
217
|
/* TEXT */
|
|
171
|
-
),
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
218
|
+
)) : createCommentVNode("v-if", true),
|
|
219
|
+
unref(enableTabContextMenu) ? (openBlock(), createBlock(
|
|
220
|
+
_component_a_dropdown,
|
|
221
|
+
{
|
|
222
|
+
key: 1,
|
|
223
|
+
trigger: ["contextmenu"]
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
overlay: withCtx(() => [
|
|
227
|
+
createVNode(_component_a_menu, {
|
|
228
|
+
onClick: (e) => unref(onContextMenuClick)(e, item.fullPath)
|
|
229
|
+
}, {
|
|
230
|
+
default: withCtx(() => [
|
|
231
|
+
createVNode(_component_a_menu_item, { key: "reload" }, {
|
|
232
|
+
default: withCtx(() => [
|
|
233
|
+
createVNode(unref(ReloadOutlined)),
|
|
234
|
+
_cache[1] || (_cache[1] = createTextVNode(
|
|
235
|
+
" \u91CD\u65B0\u52A0\u8F7D ",
|
|
236
|
+
-1
|
|
237
|
+
/* CACHED */
|
|
238
|
+
))
|
|
239
|
+
]),
|
|
240
|
+
_: 1
|
|
241
|
+
/* STABLE */
|
|
242
|
+
}),
|
|
243
|
+
createVNode(_component_a_menu_item, { key: "other" }, {
|
|
244
|
+
default: withCtx(() => [
|
|
245
|
+
createVNode(unref(CloseOutlined)),
|
|
246
|
+
_cache[2] || (_cache[2] = createTextVNode(
|
|
247
|
+
" \u5173\u95ED\u5176\u4ED6 ",
|
|
248
|
+
-1
|
|
249
|
+
/* CACHED */
|
|
250
|
+
))
|
|
251
|
+
]),
|
|
252
|
+
_: 1
|
|
253
|
+
/* STABLE */
|
|
254
|
+
}),
|
|
255
|
+
createVNode(_component_a_menu_item, { key: "right" }, {
|
|
256
|
+
default: withCtx(() => [..._cache[3] || (_cache[3] = [
|
|
257
|
+
createTextVNode(
|
|
258
|
+
"\u5173\u95ED\u53F3\u4FA7\u6807\u7B7E ",
|
|
259
|
+
-1
|
|
260
|
+
/* CACHED */
|
|
261
|
+
)
|
|
262
|
+
])]),
|
|
263
|
+
_: 1
|
|
264
|
+
/* STABLE */
|
|
265
|
+
}),
|
|
266
|
+
createVNode(_component_a_menu_item, { key: "left" }, {
|
|
267
|
+
default: withCtx(() => [..._cache[4] || (_cache[4] = [
|
|
268
|
+
createTextVNode(
|
|
269
|
+
"\u5173\u95ED\u5DE6\u4FA7\u6807\u7B7E ",
|
|
270
|
+
-1
|
|
271
|
+
/* CACHED */
|
|
272
|
+
)
|
|
273
|
+
])]),
|
|
274
|
+
_: 1
|
|
275
|
+
/* STABLE */
|
|
276
|
+
})
|
|
277
|
+
]),
|
|
278
|
+
_: 1
|
|
279
|
+
/* STABLE */
|
|
280
|
+
}, 8, ["onClick"])
|
|
281
|
+
]),
|
|
282
|
+
default: withCtx(() => {
|
|
283
|
+
var _a2;
|
|
284
|
+
return [
|
|
285
|
+
createElementVNode(
|
|
286
|
+
"div",
|
|
287
|
+
_hoisted_3,
|
|
288
|
+
toDisplayString(((_a2 = item.meta) == null ? void 0 : _a2.title) || "\u65E0\u6807\u9898"),
|
|
289
|
+
1
|
|
290
|
+
/* TEXT */
|
|
291
|
+
)
|
|
292
|
+
];
|
|
293
|
+
}),
|
|
294
|
+
_: 2
|
|
295
|
+
/* DYNAMIC */
|
|
296
|
+
},
|
|
297
|
+
1024
|
|
298
|
+
/* DYNAMIC_SLOTS */
|
|
299
|
+
)) : createCommentVNode("v-if", true),
|
|
300
|
+
unref(closeBtnStatus)(item) ? (openBlock(), createElementBlock("div", _hoisted_4, [
|
|
192
301
|
createElementVNode("div", {
|
|
193
302
|
class: normalizeClass(["close-btn", unref(closeBtnStyle)]),
|
|
194
303
|
onClick: ($event) => unref(onClose)($event, item.fullPath)
|
|
195
304
|
}, [
|
|
196
305
|
createVNode(unref(CloseOutlined))
|
|
197
|
-
], 10,
|
|
306
|
+
], 10, _hoisted_5)
|
|
198
307
|
])) : createCommentVNode("v-if", true)
|
|
199
308
|
];
|
|
200
309
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tab.vue2.mjs","sources":["../../../../src/components/tab/Tab.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed, type ComputedRef, watch } from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { theme } from \"ant-design-vue\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport Search from \"./Search\";\r\nimport {\r\n CloseOutlined,\r\n ReloadOutlined\r\n} from \"@ant-design/icons-vue\";\r\nimport {\r\n type NavTabsState,\r\n useNavTabStore\r\n} from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\n\r\nconst { tabsNavStyle, tabHoverBgStyle, closeBtnStyle } =\r\n useStyle();\r\n\r\nconst {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n} = useTab();\r\n\r\nfunction useStyle(): {\r\n tabsNavStyle: ComputedRef<string>;\r\n tabHoverBgStyle: ComputedRef<string>;\r\n closeBtnStyle: ComputedRef<string>;\r\n} {\r\n const { useToken } = theme;\r\n const { token }: { token: ComputedRef<GlobalToken> } =\r\n useToken();\r\n\r\n const activeTabColor = computed(\r\n () => token.value.colorBgLayout\r\n );\r\n const splitColor = computed(\r\n () => token.value.colorBorderSecondary\r\n );\r\n\r\n const tabsNavStyle = computed(() => {\r\n return css`\r\n --active-tab-color: ${activeTabColor.value};\r\n --splitColor: ${splitColor.value};\r\n padding-top: 10px;\r\n display: flex;\r\n `;\r\n });\r\n\r\n const tabHoverBgStyle = computed(() => {\r\n return css`\r\n &:before {\r\n background: ${token.value.colorPrimaryBgHover};\r\n }\r\n `;\r\n });\r\n\r\n const closeBtnStyle = computed(() => {\r\n return css`\r\n &:hover {\r\n background: ${token.value.colorPrimaryBorderHover};\r\n border-radius: 50%;\r\n }\r\n `;\r\n });\r\n\r\n return {\r\n tabsNavStyle,\r\n tabHoverBgStyle,\r\n closeBtnStyle\r\n };\r\n}\r\n\r\nfunction useTab() {\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n const store = useNavTabStore();\r\n const { list, activeKey } = storeToRefs(store);\r\n const { save, deleteTabs } = store;\r\n\r\n watch(\r\n () => route.fullPath,\r\n val => {\r\n save(route);\r\n activeKey.value = val;\r\n },\r\n {\r\n immediate: true\r\n }\r\n );\r\n\r\n const onChange = (key: string) => {\r\n if (key !== route.path) {\r\n // 匹配打开的标签路由数据\r\n const rs = list.value.filter(\r\n item => item.fullPath === key\r\n )[0];\r\n router.push(rs);\r\n }\r\n };\r\n\r\n const onClose = (\r\n $event: Event,\r\n key: string | undefined\r\n ) => {\r\n if (!key) return;\r\n //阻止冒泡\r\n $event.stopPropagation();\r\n // 删除标签\r\n deleteTabs(key);\r\n // 重新push已打开的路由\r\n const backRoute = list.value[list.value.length - 1];\r\n if (backRoute.fullPath) {\r\n router.push(backRoute.fullPath);\r\n }\r\n };\r\n\r\n const closeBtnStatus = (item: NavTabsState) => {\r\n // 如果meta有设置keepOpen则隐藏关闭按钮\r\n if (item.meta?.keepOpen) {\r\n return false;\r\n } else {\r\n // 如果只有一个标签,则隐藏关闭按钮\r\n return list.value.length !== 1;\r\n }\r\n };\r\n\r\n return {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n };\r\n}\r\n</script>\r\n<template>\r\n <div class=\"tabs-nav-wrapper\" :class=\"tabsNavStyle\">\r\n <Search />\r\n <div class=\"d-tabs-nav\">\r\n <a-tabs\r\n size=\"small\"\r\n v-model:activeKey=\"activeKey\"\r\n type=\"card\"\r\n hide-add\r\n @change=\"onChange\"\r\n >\r\n <a-tab-pane\r\n :key=\"item.fullPath\"\r\n :closable=\"false\"\r\n v-for=\"item in list\"\r\n :class=\"{ active: activeKey === item.fullPath }\"\r\n >\r\n <template #tab>\r\n <div\r\n class=\"tab-hover-bg\"\r\n :class=\"tabHoverBgStyle\"\r\n ></div>\r\n <div class=\"tab-dividers\"></div>\r\n <!-- <a-dropdown :trigger=\"['contextmenu']\">-->\r\n <div class=\"tab-item\">\r\n {{ item.meta?.title || \"无标题\" }}\r\n </div>\r\n <!-- <template #overlay>-->\r\n <!-- <a-menu>-->\r\n <!-- <a-menu-item key=\"1\">-->\r\n <!-- <ReloadOutlined />-->\r\n <!-- 重新加载-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"2\">-->\r\n <!-- <CloseOutlined />-->\r\n <!-- 关闭其他-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"3\"-->\r\n <!-- >关闭右侧标签-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"3\"-->\r\n <!-- >关闭左侧标签-->\r\n <!-- </a-menu-item>-->\r\n <!-- </a-menu>-->\r\n <!-- </template>-->\r\n <!-- </a-dropdown>-->\r\n\r\n <div\r\n class=\"tab-close\"\r\n v-if=\"closeBtnStatus(item)\"\r\n >\r\n <div\r\n class=\"close-btn\"\r\n :class=\"closeBtnStyle\"\r\n @click=\"onClose($event, item.fullPath)\"\r\n >\r\n <CloseOutlined />\r\n </div>\r\n </div>\r\n </template>\r\n </a-tab-pane>\r\n </a-tabs>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style lang=\"scss\"></style>\r\n"],"names":["tabsNavStyle","tabHoverBgStyle","closeBtnStyle","list","activeKey","onChange","onClose","closeBtnStatus","_createElementBlock","_normalizeClass","_unref","_createVNode","_createElementVNode","_Fragment","_renderList","_createBlock","_createCommentVNode","_toDisplayString","_openBlock"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tab.vue2.mjs","sources":["../../../../src/components/tab/Tab.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport {\r\n computed,\r\n type ComputedRef,\r\n inject,\r\n watch\r\n} from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { theme } from \"ant-design-vue\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport {\r\n AppContext,\r\n AppContextKey\r\n} from \"../layout/AppContext\";\r\nimport Search from \"./Search\";\r\nimport {\r\n CloseOutlined,\r\n ReloadOutlined\r\n} from \"@ant-design/icons-vue\";\r\nimport {\r\n type NavTabsState,\r\n useNavTabStore\r\n} from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\n\r\nconst { tabsNavStyle, tabHoverBgStyle, closeBtnStyle } =\r\n useStyle();\r\n\r\nconst {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n} = useTab();\r\n\r\nconst { enableTabContextMenu, onContextMenuClick } =\r\n useTabsContextMenu();\r\n\r\nfunction useStyle(): {\r\n tabsNavStyle: ComputedRef<string>;\r\n tabHoverBgStyle: ComputedRef<string>;\r\n closeBtnStyle: ComputedRef<string>;\r\n} {\r\n const { useToken } = theme;\r\n const { token }: { token: ComputedRef<GlobalToken> } =\r\n useToken();\r\n\r\n const activeTabColor = computed(\r\n () => token.value.colorBgLayout\r\n );\r\n const splitColor = computed(\r\n () => token.value.colorBorderSecondary\r\n );\r\n\r\n const tabsNavStyle = computed(() => {\r\n return css`\r\n --active-tab-color: ${activeTabColor.value};\r\n --splitColor: ${splitColor.value};\r\n padding-top: 10px;\r\n display: flex;\r\n `;\r\n });\r\n\r\n const tabHoverBgStyle = computed(() => {\r\n return css`\r\n &:before {\r\n background: ${token.value.colorPrimaryBgHover};\r\n }\r\n `;\r\n });\r\n\r\n const closeBtnStyle = computed(() => {\r\n return css`\r\n &:hover {\r\n background: ${token.value.colorPrimaryBorderHover};\r\n border-radius: 50%;\r\n }\r\n `;\r\n });\r\n\r\n return {\r\n tabsNavStyle,\r\n tabHoverBgStyle,\r\n closeBtnStyle\r\n };\r\n}\r\n\r\nfunction useTab() {\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n const store = useNavTabStore();\r\n const { list, activeKey } = storeToRefs(store);\r\n const { save, deleteTabs } = store;\r\n\r\n watch(\r\n () => route.fullPath,\r\n val => {\r\n save(route);\r\n activeKey.value = val;\r\n },\r\n {\r\n immediate: true\r\n }\r\n );\r\n\r\n const onChange = (key: string) => {\r\n if (key !== route.path) {\r\n // 匹配打开的标签路由数据\r\n const rs = list.value.filter(\r\n item => item.fullPath === key\r\n )[0];\r\n router.push(rs);\r\n }\r\n };\r\n\r\n const onClose = (\r\n $event: Event,\r\n key: string | undefined\r\n ) => {\r\n if (!key) return;\r\n //阻止冒泡\r\n $event.stopPropagation();\r\n // 删除标签\r\n deleteTabs(key);\r\n // 重新push已打开的路由\r\n const backRoute = list.value[list.value.length - 1];\r\n if (backRoute.fullPath) {\r\n router.push(backRoute.fullPath);\r\n }\r\n };\r\n\r\n const closeBtnStatus = (item: NavTabsState) => {\r\n // 如果meta有设置keepOpen则隐藏关闭按钮\r\n if (item.meta?.keepOpen) {\r\n return false;\r\n } else {\r\n // 如果只有一个标签,则隐藏关闭按钮\r\n return list.value.length !== 1;\r\n }\r\n };\r\n\r\n return {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n };\r\n}\r\n\r\nfunction useTabsContextMenu() {\r\n const appContext = inject<AppContext | null>(\r\n AppContextKey,\r\n null\r\n );\r\n const store = useNavTabStore();\r\n const router = useRouter();\r\n\r\n const onContextMenuClick = (\r\n { key }: { key: string },\r\n targetKey: string\r\n ) => {\r\n switch (key) {\r\n case \"reload\":\r\n // 如果点击的不是当前激活页,先跳转再刷新\r\n if (targetKey !== activeKey.value) {\r\n router\r\n .push(targetKey)\r\n .then(() => appContext?.onReloadPage?.());\r\n } else {\r\n appContext?.onReloadPage?.();\r\n }\r\n break;\r\n case \"other\":\r\n store.closeOtherTabs?.(targetKey);\r\n router.push(targetKey);\r\n break;\r\n case \"left\":\r\n store.closeLeftTabs?.(targetKey);\r\n router.push(targetKey);\r\n break;\r\n case \"right\":\r\n store.closeRightTabs?.(targetKey);\r\n router.push(targetKey);\r\n break;\r\n }\r\n };\r\n\r\n return {\r\n enableTabContextMenu:\r\n appContext?.enableTabContextMenu || false,\r\n onContextMenuClick\r\n };\r\n}\r\n</script>\r\n<template>\r\n <div class=\"tabs-nav-wrapper\" :class=\"tabsNavStyle\">\r\n <Search />\r\n <div class=\"d-tabs-nav\">\r\n <a-tabs\r\n size=\"small\"\r\n v-model:activeKey=\"activeKey\"\r\n type=\"card\"\r\n hide-add\r\n @change=\"onChange\"\r\n >\r\n <a-tab-pane\r\n :key=\"item.fullPath\"\r\n :closable=\"false\"\r\n v-for=\"item in list\"\r\n :class=\"{ active: activeKey === item.fullPath }\"\r\n >\r\n <template #tab>\r\n <div\r\n class=\"tab-hover-bg\"\r\n :class=\"tabHoverBgStyle\"\r\n ></div>\r\n <div class=\"tab-dividers\"></div>\r\n <div\r\n class=\"tab-item\"\r\n v-if=\"!enableTabContextMenu\"\r\n >\r\n {{ item.meta?.title || \"无标题\" }}\r\n </div>\r\n <a-dropdown\r\n :trigger=\"['contextmenu']\"\r\n v-if=\"enableTabContextMenu\"\r\n >\r\n <div class=\"tab-item\">\r\n {{ item.meta?.title || \"无标题\" }}\r\n </div>\r\n <template #overlay>\r\n <a-menu\r\n @click=\"\r\n e =>\r\n onContextMenuClick(e, item.fullPath)\r\n \"\r\n >\r\n <a-menu-item key=\"reload\">\r\n <ReloadOutlined />\r\n 重新加载\r\n </a-menu-item>\r\n <a-menu-item key=\"other\">\r\n <CloseOutlined />\r\n 关闭其他\r\n </a-menu-item>\r\n <a-menu-item key=\"right\"\r\n >关闭右侧标签\r\n </a-menu-item>\r\n <a-menu-item key=\"left\"\r\n >关闭左侧标签\r\n </a-menu-item>\r\n </a-menu>\r\n </template>\r\n </a-dropdown>\r\n\r\n <div\r\n class=\"tab-close\"\r\n v-if=\"closeBtnStatus(item)\"\r\n >\r\n <div\r\n class=\"close-btn\"\r\n :class=\"closeBtnStyle\"\r\n @click=\"onClose($event, item.fullPath)\"\r\n >\r\n <CloseOutlined />\r\n </div>\r\n </div>\r\n </template>\r\n </a-tab-pane>\r\n </a-tabs>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style lang=\"scss\"></style>\r\n"],"names":["tabsNavStyle","tabHoverBgStyle","closeBtnStyle","list","activeKey","onChange","onClose","closeBtnStatus","onContextMenuClick","_a","_createElementBlock","_normalizeClass","_unref","_createVNode","_createElementVNode","_Fragment","_renderList","_createBlock","_openBlock","_toDisplayString"],"mappings":"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"}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -8,6 +8,7 @@ export { default as RangePicker } from './components/date/RangePicker.vue2.mjs';
|
|
|
8
8
|
export { default as FormLayout } from './components/form/FormLayout.mjs';
|
|
9
9
|
export { default as Moon } from './components/icon/Moon.vue.mjs';
|
|
10
10
|
export { default as Sun } from './components/icon/Sun.vue.mjs';
|
|
11
|
+
export { AppContextKey } from './components/layout/AppContext.mjs';
|
|
11
12
|
export { default as AppTheme } from './components/layout/components/layout/ThemeApp.vue2.mjs';
|
|
12
13
|
export { default as HeaderLayout } from './components/layout/components/layout/HeaderLayout.vue2.mjs';
|
|
13
14
|
export { default as Menu } from './components/layout/components/menu/Menu.mjs';
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/index.ts"],"sourcesContent":["import * as components from \"./components\";\r\nimport type { App, DefineComponent, Plugin } from \"vue\";\r\n\r\n// import { version } from \"../package.json\";\r\n\r\nexport * from \"./components\";\r\n\r\n// 定义组件类型,确保每个组件都可能具有 `install` 方法\r\ntype ComponentWithInstall = DefineComponent<\r\n never,\r\n never,\r\n never\r\n> & {\r\n install?: (app: App) => void;\r\n};\r\n\r\nexport const install = (app: App) => {\r\n Object.keys(components).forEach(key => {\r\n const component = components[\r\n key as keyof typeof components\r\n ] as ComponentWithInstall;\r\n // 类型断言,告诉 TypeScript component 可能是一个插件\r\n const plugin = component as Plugin;\r\n // 如果组件有 install 方法,则按插件安装\r\n if (plugin.install) {\r\n app.use(plugin);\r\n }\r\n });\r\n};\r\n\r\nexport default {\r\n // version,\r\n install\r\n};\r\n"],"names":["components"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/index.ts"],"sourcesContent":["import * as components from \"./components\";\r\nimport type { App, DefineComponent, Plugin } from \"vue\";\r\n\r\n// import { version } from \"../package.json\";\r\n\r\nexport * from \"./components\";\r\n\r\n// 定义组件类型,确保每个组件都可能具有 `install` 方法\r\ntype ComponentWithInstall = DefineComponent<\r\n never,\r\n never,\r\n never\r\n> & {\r\n install?: (app: App) => void;\r\n};\r\n\r\nexport const install = (app: App) => {\r\n Object.keys(components).forEach(key => {\r\n const component = components[\r\n key as keyof typeof components\r\n ] as ComponentWithInstall;\r\n // 类型断言,告诉 TypeScript component 可能是一个插件\r\n const plugin = component as Plugin;\r\n // 如果组件有 install 方法,则按插件安装\r\n if (plugin.install) {\r\n app.use(plugin);\r\n }\r\n });\r\n};\r\n\r\nexport default {\r\n // version,\r\n install\r\n};\r\n"],"names":["components"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAgBO,MAAM,OAAA,GAAU,CAAC,GAAA,KAAa;AACnC,EAAA,MAAA,CAAO,IAAA,CAAKA,OAAU,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AACrC,IAAA,MAAM,SAAA,GAAYA,QAChB,GACF,CAAA;AAEA,IAAA,MAAM,MAAA,GAAS,SAAA;AAEf,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,GAAA,CAAI,IAAI,MAAM,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACH;AAEA,YAAe;AAAA;AAAA,EAEb;AACF,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppContext.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/AppContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC;AAEzC,eAAO,MAAM,aAAa,eAA2B,CAAC;AACtD,MAAM,WAAW,UAAU;IAEzB,gBAAgB,CAAC,EAAE,WAAW,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE;QACtB,IAAI,EAAE,MAAM,CAAC;KACd,KAAK,KAAK,GAAG,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"AppContext.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/AppContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC;AAEzC,eAAO,MAAM,aAAa,eAA2B,CAAC;AACtD,MAAM,WAAW,UAAU;IAEzB,gBAAgB,CAAC,EAAE,WAAW,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE;QACtB,IAAI,EAAE,MAAM,CAAC;KACd,KAAK,KAAK,GAAG,KAAK,EAAE,CAAC;IAEtB,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IAE/B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAE1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC"}
|