@ditari/bsui 5.0.3 → 5.0.5
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/_virtual/_commonjsHelpers.cjs +47 -0
- package/dist/cjs/_virtual/_commonjsHelpers.cjs.map +1 -0
- package/dist/cjs/_virtual/_plugin-vue_export-helper.cjs +14 -0
- package/dist/cjs/_virtual/_plugin-vue_export-helper.cjs.map +1 -0
- package/dist/cjs/_virtual/dayjs.min.cjs +12 -0
- package/dist/cjs/_virtual/dayjs.min.cjs.map +1 -0
- package/dist/cjs/_virtual/dayjs.min2.cjs +6 -0
- package/dist/cjs/_virtual/dayjs.min2.cjs.map +1 -0
- package/dist/cjs/components/date/RangePicker.vue.cjs +10 -0
- package/dist/cjs/components/date/RangePicker.vue.cjs.map +1 -0
- package/dist/cjs/components/date/RangePicker.vue2.cjs +89 -0
- package/dist/cjs/components/date/RangePicker.vue2.cjs.map +1 -0
- package/dist/cjs/components/date/index.cjs +13 -0
- package/dist/cjs/components/date/index.cjs.map +1 -0
- package/dist/cjs/components/form/FormLayout.cjs +202 -0
- package/dist/cjs/components/form/FormLayout.cjs.map +1 -0
- package/dist/cjs/components/form/index.cjs +12 -0
- package/dist/cjs/components/form/index.cjs.map +1 -0
- package/dist/cjs/components/icon/Moon.vue.cjs +33 -0
- package/dist/cjs/components/icon/Moon.vue.cjs.map +1 -0
- package/dist/cjs/components/icon/Sun.vue.cjs +45 -0
- package/dist/cjs/components/icon/Sun.vue.cjs.map +1 -0
- package/dist/cjs/components/icon/index.cjs +16 -0
- package/dist/cjs/components/icon/index.cjs.map +1 -0
- package/dist/cjs/components/index.cjs +11 -0
- package/dist/cjs/components/index.cjs.map +1 -1
- package/dist/cjs/components/layout/Layout.vue2.cjs +68 -28
- package/dist/cjs/components/layout/Layout.vue2.cjs.map +1 -1
- package/dist/cjs/components/layout/List.cjs +102 -31
- package/dist/cjs/components/layout/List.cjs.map +1 -1
- package/dist/cjs/components/layout/Show.cjs +0 -4
- package/dist/cjs/components/layout/Show.cjs.map +1 -1
- package/dist/cjs/components/layout/components/layout/HeaderLayout.vue2.cjs +3 -2
- package/dist/cjs/components/layout/components/layout/HeaderLayout.vue2.cjs.map +1 -1
- package/dist/cjs/components/layout/components/layout/ThemeApp.vue.cjs +10 -0
- package/dist/cjs/components/layout/components/layout/ThemeApp.vue.cjs.map +1 -0
- package/dist/cjs/components/layout/components/layout/ThemeApp.vue2.cjs +56 -0
- package/dist/cjs/components/layout/components/layout/ThemeApp.vue2.cjs.map +1 -0
- package/dist/cjs/components/layout/components/menu/Menu.cjs +63 -12
- package/dist/cjs/components/layout/components/menu/Menu.cjs.map +1 -1
- package/dist/cjs/components/layout/components/settings/BlockCheckbox.vue.cjs +10 -0
- package/dist/cjs/components/layout/components/settings/BlockCheckbox.vue.cjs.map +1 -0
- package/dist/cjs/components/layout/components/settings/BlockCheckbox.vue2.cjs +59 -0
- package/dist/cjs/components/layout/components/settings/BlockCheckbox.vue2.cjs.map +1 -0
- package/dist/cjs/components/layout/components/settings/SettingDrawer.cjs +109 -0
- package/dist/cjs/components/layout/components/settings/SettingDrawer.cjs.map +1 -0
- package/dist/cjs/components/tab/Search.cjs +241 -0
- package/dist/cjs/components/tab/Search.cjs.map +1 -0
- package/dist/cjs/components/tab/Tab.vue2.cjs +18 -57
- package/dist/cjs/components/tab/Tab.vue2.cjs.map +1 -1
- package/dist/cjs/components/table/Table.cjs +5 -6
- package/dist/cjs/components/table/Table.cjs.map +1 -1
- package/dist/cjs/index.cjs +8 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.cjs +20 -0
- package/dist/cjs/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.cjs.map +1 -0
- package/dist/css/components/layout/components/settings/style/index.css +1 -0
- package/dist/css/components/tab/style/index.css +1 -1
- package/dist/css/index.css +1 -1
- package/dist/esm/_virtual/_commonjsHelpers.mjs +41 -0
- package/dist/esm/_virtual/_commonjsHelpers.mjs.map +1 -0
- package/dist/esm/_virtual/_plugin-vue_export-helper.mjs +10 -0
- package/dist/esm/_virtual/_plugin-vue_export-helper.mjs.map +1 -0
- package/dist/esm/_virtual/dayjs.min.mjs +8 -0
- package/dist/esm/_virtual/dayjs.min.mjs.map +1 -0
- package/dist/esm/_virtual/dayjs.min2.mjs +4 -0
- package/dist/esm/_virtual/dayjs.min2.mjs.map +1 -0
- package/dist/esm/components/date/RangePicker.vue.mjs +6 -0
- package/dist/esm/components/date/RangePicker.vue.mjs.map +1 -0
- package/dist/esm/components/date/RangePicker.vue2.mjs +85 -0
- package/dist/esm/components/date/RangePicker.vue2.mjs.map +1 -0
- package/dist/esm/components/date/index.mjs +11 -0
- package/dist/esm/components/date/index.mjs.map +1 -0
- package/dist/esm/components/form/FormLayout.mjs +198 -0
- package/dist/esm/components/form/FormLayout.mjs.map +1 -0
- package/dist/esm/components/form/index.mjs +10 -0
- package/dist/esm/components/form/index.mjs.map +1 -0
- package/dist/esm/components/icon/Moon.vue.mjs +29 -0
- package/dist/esm/components/icon/Moon.vue.mjs.map +1 -0
- package/dist/esm/components/icon/Sun.vue.mjs +41 -0
- package/dist/esm/components/icon/Sun.vue.mjs.map +1 -0
- package/dist/esm/components/icon/index.mjs +13 -0
- package/dist/esm/components/icon/index.mjs.map +1 -0
- package/dist/esm/components/index.mjs +7 -0
- package/dist/esm/components/index.mjs.map +1 -1
- package/dist/esm/components/layout/Layout.vue2.mjs +71 -31
- package/dist/esm/components/layout/Layout.vue2.mjs.map +1 -1
- package/dist/esm/components/layout/List.mjs +104 -33
- package/dist/esm/components/layout/List.mjs.map +1 -1
- package/dist/esm/components/layout/Show.mjs +0 -4
- package/dist/esm/components/layout/Show.mjs.map +1 -1
- package/dist/esm/components/layout/components/layout/HeaderLayout.vue2.mjs +4 -3
- package/dist/esm/components/layout/components/layout/HeaderLayout.vue2.mjs.map +1 -1
- package/dist/esm/components/layout/components/layout/ThemeApp.vue.mjs +6 -0
- package/dist/esm/components/layout/components/layout/ThemeApp.vue.mjs.map +1 -0
- package/dist/esm/components/layout/components/layout/ThemeApp.vue2.mjs +52 -0
- package/dist/esm/components/layout/components/layout/ThemeApp.vue2.mjs.map +1 -0
- package/dist/esm/components/layout/components/menu/Menu.mjs +64 -13
- package/dist/esm/components/layout/components/menu/Menu.mjs.map +1 -1
- package/dist/esm/components/layout/components/settings/BlockCheckbox.vue.mjs +6 -0
- package/dist/esm/components/layout/components/settings/BlockCheckbox.vue.mjs.map +1 -0
- package/dist/esm/components/layout/components/settings/BlockCheckbox.vue2.mjs +55 -0
- package/dist/esm/components/layout/components/settings/BlockCheckbox.vue2.mjs.map +1 -0
- package/dist/esm/components/layout/components/settings/SettingDrawer.mjs +105 -0
- package/dist/esm/components/layout/components/settings/SettingDrawer.mjs.map +1 -0
- package/dist/esm/components/tab/Search.mjs +237 -0
- package/dist/esm/components/tab/Search.mjs.map +1 -0
- package/dist/esm/components/tab/Tab.vue2.mjs +20 -59
- package/dist/esm/components/tab/Tab.vue2.mjs.map +1 -1
- package/dist/esm/components/table/Table.mjs +5 -6
- package/dist/esm/components/table/Table.mjs.map +1 -1
- package/dist/esm/index.mjs +4 -0
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.mjs +18 -0
- package/dist/esm/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.mjs.map +1 -0
- package/dist/style/index.scss +8 -1
- package/dist/style/layout/components/settings/style/index.scss +177 -0
- package/dist/style/tab/style/index.scss +15 -3
- package/dist/types/components/date/RangePicker.vue.d.ts +293 -0
- package/dist/types/components/date/RangePicker.vue.d.ts.map +1 -0
- package/dist/types/components/date/index.d.ts +3 -0
- package/dist/types/components/date/index.d.ts.map +1 -0
- package/dist/types/components/form/FormLayout.d.ts +49 -0
- package/dist/types/components/form/FormLayout.d.ts.map +1 -0
- package/dist/types/components/form/index.d.ts +3 -0
- package/dist/types/components/form/index.d.ts.map +1 -0
- package/dist/types/components/icon/index.d.ts +4 -0
- package/dist/types/components/icon/index.d.ts.map +1 -0
- package/dist/types/components/index.d.ts +3 -0
- package/dist/types/components/index.d.ts.map +1 -1
- package/dist/types/components/layout/Layout.vue.d.ts +100 -2
- package/dist/types/components/layout/Layout.vue.d.ts.map +1 -1
- package/dist/types/components/layout/List.d.ts +2 -2
- package/dist/types/components/layout/List.d.ts.map +1 -1
- package/dist/types/components/layout/Show.d.ts +2 -5
- package/dist/types/components/layout/Show.d.ts.map +1 -1
- package/dist/types/components/layout/components/layout/HeaderLayout.vue.d.ts +22 -0
- package/dist/types/components/layout/components/layout/HeaderLayout.vue.d.ts.map +1 -1
- package/dist/types/components/layout/components/layout/ThemeApp.vue.d.ts +9 -0
- package/dist/types/components/layout/components/layout/ThemeApp.vue.d.ts.map +1 -0
- package/dist/types/components/layout/components/menu/Menu.d.ts.map +1 -1
- package/dist/types/components/layout/components/settings/BlockCheckbox.vue.d.ts +47 -0
- package/dist/types/components/layout/components/settings/BlockCheckbox.vue.d.ts.map +1 -0
- package/dist/types/components/layout/components/settings/SettingDrawer.d.ts +50 -0
- package/dist/types/components/layout/components/settings/SettingDrawer.d.ts.map +1 -0
- package/dist/types/components/tab/Search.d.ts +3 -0
- package/dist/types/components/tab/Search.d.ts.map +1 -0
- package/dist/types/components/tab/Tab.vue.d.ts +2 -6
- package/dist/types/components/tab/Tab.vue.d.ts.map +1 -1
- package/dist/types/components/table/Table.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -1,10 +1,30 @@
|
|
|
1
1
|
import { defineComponent, computed, watch, createVNode, resolveComponent } from 'vue';
|
|
2
2
|
import { useRoute, useRouter } from 'vue-router';
|
|
3
3
|
import { storeToRefs } from 'pinia';
|
|
4
|
-
import { useMenuStore } from '@ditari/store';
|
|
4
|
+
import { useAppStore, useMenuStore } from '@ditari/store';
|
|
5
5
|
import { css } from '@emotion/css';
|
|
6
6
|
|
|
7
7
|
"use strict";
|
|
8
|
+
var __async = (__this, __arguments, generator) => {
|
|
9
|
+
return new Promise((resolve, reject) => {
|
|
10
|
+
var fulfilled = (value) => {
|
|
11
|
+
try {
|
|
12
|
+
step(generator.next(value));
|
|
13
|
+
} catch (e) {
|
|
14
|
+
reject(e);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var rejected = (value) => {
|
|
18
|
+
try {
|
|
19
|
+
step(generator.throw(value));
|
|
20
|
+
} catch (e) {
|
|
21
|
+
reject(e);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
25
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
26
|
+
});
|
|
27
|
+
};
|
|
8
28
|
var DMenu = /* @__PURE__ */ defineComponent({
|
|
9
29
|
name: "DMenu",
|
|
10
30
|
setup() {
|
|
@@ -40,6 +60,9 @@ var DMenu = /* @__PURE__ */ defineComponent({
|
|
|
40
60
|
};
|
|
41
61
|
}
|
|
42
62
|
function useMenu() {
|
|
63
|
+
const {
|
|
64
|
+
layout
|
|
65
|
+
} = storeToRefs(useAppStore());
|
|
43
66
|
const {
|
|
44
67
|
openKeys: openKeys2,
|
|
45
68
|
selectedKeys: selectedKeys2,
|
|
@@ -47,32 +70,59 @@ var DMenu = /* @__PURE__ */ defineComponent({
|
|
|
47
70
|
} = storeToRefs(useMenuStore());
|
|
48
71
|
const route = useRoute();
|
|
49
72
|
const router = useRouter();
|
|
50
|
-
watch(() => route.fullPath, (
|
|
51
|
-
const flag = selectedKeys2.value.some((item) => item ===
|
|
73
|
+
watch(() => route.fullPath, (path) => __async(this, null, function* () {
|
|
74
|
+
const flag = selectedKeys2.value.some((item) => item === path);
|
|
52
75
|
if (!flag) {
|
|
53
|
-
const rs = _findMatchedMenuKey(
|
|
54
|
-
|
|
55
|
-
|
|
76
|
+
const rs = _findMatchedMenuKey(path, data2.value);
|
|
77
|
+
if (rs) {
|
|
78
|
+
if (!layout.value.collapsed) {
|
|
79
|
+
if (rs == null ? void 0 : rs.parentKey) {
|
|
80
|
+
openKeys2.value = [rs.parentKey];
|
|
81
|
+
} else {
|
|
82
|
+
openKeys2.value = [rs.matchedKey];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
selectedKeys2.value = [rs.matchedKey];
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}));
|
|
89
|
+
watch(() => layout.value.collapsed, (val) => {
|
|
90
|
+
const path = selectedKeys2.value[0];
|
|
91
|
+
const rs = _findMatchedMenuKey(path, data2.value);
|
|
92
|
+
if (val) {
|
|
93
|
+
openKeys2.value = [];
|
|
94
|
+
} else {
|
|
95
|
+
if (rs == null ? void 0 : rs.parentKey) {
|
|
96
|
+
openKeys2.value = [rs.parentKey];
|
|
97
|
+
} else {
|
|
98
|
+
openKeys2.value = [rs.matchedKey];
|
|
99
|
+
}
|
|
56
100
|
}
|
|
57
101
|
});
|
|
58
|
-
const _findMatchedMenuKey = (path, menuItems) => {
|
|
102
|
+
const _findMatchedMenuKey = (path, menuItems, parentKey = "") => {
|
|
59
103
|
for (const item of menuItems) {
|
|
60
104
|
if (item.key === path) {
|
|
61
|
-
return
|
|
105
|
+
return {
|
|
106
|
+
matchedKey: item.key,
|
|
107
|
+
parentKey
|
|
108
|
+
};
|
|
62
109
|
}
|
|
63
110
|
if (item.children && item.children.length > 0) {
|
|
64
|
-
const
|
|
65
|
-
if (
|
|
66
|
-
return
|
|
111
|
+
const result = _findMatchedMenuKey(path, item.children, item.key);
|
|
112
|
+
if (result) {
|
|
113
|
+
return result;
|
|
67
114
|
}
|
|
68
115
|
}
|
|
69
116
|
const match = path.match(/^\/[^/]+/);
|
|
70
117
|
const basePath = match ? match[0] : "";
|
|
71
118
|
if (item.key.startsWith(basePath)) {
|
|
72
|
-
return
|
|
119
|
+
return {
|
|
120
|
+
matchedKey: item.key,
|
|
121
|
+
parentKey
|
|
122
|
+
};
|
|
73
123
|
}
|
|
74
124
|
}
|
|
75
|
-
return
|
|
125
|
+
return null;
|
|
76
126
|
};
|
|
77
127
|
const onClick2 = ({
|
|
78
128
|
key,
|
|
@@ -104,6 +154,7 @@ var DMenu = /* @__PURE__ */ defineComponent({
|
|
|
104
154
|
"onUpdate:selected-keys": ($event) => selectedKeys.value = $event,
|
|
105
155
|
"items": data.value,
|
|
106
156
|
"mode": "inline",
|
|
157
|
+
"triggerSubMenuAction": "hover",
|
|
107
158
|
"onClick": onClick
|
|
108
159
|
}, null)]);
|
|
109
160
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.mjs","sources":["../../../../../../src/components/layout/components/menu/Menu.tsx"],"sourcesContent":["import { computed, defineComponent, watch } from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport { useMenuStore } from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\n\r\nexport default defineComponent({\r\n name: \"DMenu\",\r\n setup() {\r\n const { menuWrapperStyle } = useStyle();\r\n const { openKeys, selectedKeys, data, 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 /* Webkit 浏览器 */\r\n\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 { openKeys, selectedKeys, data } = storeToRefs(useMenuStore());\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n /**\r\n * 在标签切换的时候,路由会变化,需要动态关联左侧菜单的选中状态\r\n */\r\n watch(\r\n () => route.fullPath,\r\n
|
|
1
|
+
{"version":3,"file":"Menu.mjs","sources":["../../../../../../src/components/layout/components/menu/Menu.tsx"],"sourcesContent":["import { computed, defineComponent, nextTick, watch } from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport { useAppStore, useMenuStore } from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\n\r\nexport default defineComponent({\r\n name: \"DMenu\",\r\n setup() {\r\n const { menuWrapperStyle } = useStyle();\r\n const { openKeys, selectedKeys, data, 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 /* Webkit 浏览器 */\r\n\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 { layout } = storeToRefs(useAppStore());\r\n const { openKeys, selectedKeys, data } = storeToRefs(useMenuStore());\r\n const route = useRoute();\r\n const router = useRouter();\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((item: string) => item === path);\r\n if (!flag) {\r\n const rs = _findMatchedMenuKey(path, data.value as never);\r\n if (rs) {\r\n if (!layout.value.collapsed) {\r\n if (rs?.parentKey) {\r\n openKeys.value = [rs.parentKey];\r\n } else {\r\n openKeys.value = [rs!.matchedKey];\r\n }\r\n }\r\n selectedKeys.value = [rs!.matchedKey];\r\n }\r\n }\r\n }\r\n );\r\n\r\n watch(\r\n () => layout.value.collapsed,\r\n val => {\r\n const path = selectedKeys.value[0];\r\n const rs = _findMatchedMenuKey(path, data.value as never);\r\n if (val) {\r\n openKeys.value = [];\r\n } else {\r\n if (rs?.parentKey) {\r\n openKeys.value = [rs.parentKey];\r\n } else {\r\n openKeys.value = [rs!.matchedKey];\r\n }\r\n }\r\n }\r\n );\r\n\r\n // 匹配菜单项的函数(支持嵌套 children)\r\n const _findMatchedMenuKey = (\r\n path: string,\r\n menuItems: { key: string; children: [] }[],\r\n parentKey: string = \"\"\r\n ): { matchedKey: string; parentKey: string } | null => {\r\n // 遍历菜单项\r\n for (const item of menuItems) {\r\n // 完全匹配\r\n if (item.key === path) {\r\n return { matchedKey: item.key, parentKey };\r\n }\r\n\r\n // 如果当前菜单项有 children,递归查找\r\n if (item.children && item.children.length > 0) {\r\n const result = _findMatchedMenuKey(path, item.children, item.key);\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n\r\n // 匹配以 basePath 开头的菜单项\r\n const match = path.match(/^\\/[^/]+/); // 匹配以 / 开头,后面不包含 / 的部分\r\n const basePath = match ? match[0] : \"\"; // 提取基础路径,如 /user\r\n if (item.key.startsWith(basePath)) {\r\n return { matchedKey: item.key, parentKey };\r\n }\r\n }\r\n\r\n // 如果没有找到匹配的菜单项,返回 null\r\n return null;\r\n };\r\n\r\n const onClick = ({\r\n key,\r\n keyPath\r\n }: {\r\n item: string;\r\n key: string;\r\n keyPath: string[];\r\n }) => {\r\n openKeys.value = keyPath;\r\n selectedKeys.value = [key];\r\n\r\n // 判断目标路由和当前路由是否相等;\r\n // 不相等的时候再跳转\r\n if (route.path !== key) {\r\n router.push(key).then(r => {\r\n if (r) {\r\n console.warn(r);\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={data.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","setup","menuWrapperStyle","useStyle","openKeys","selectedKeys","data","onClick","useMenu","computed","css","layout","storeToRefs","useAppStore","useMenuStore","route","useRoute","router","useRouter","watch","fullPath","path","flag","value","some","item","rs","_findMatchedMenuKey","collapsed","parentKey","matchedKey","val","menuItems","key","children","length","result","match","basePath","startsWith","keyPath","push","then","r","console","warn","_createVNode","_resolveComponent","$event"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,4BAA+B,eAAA,CAAA;AAAA,EAC7BA,IAAM,EAAA,OAAA;AAAA,EACNC,KAAQ,GAAA;AACN,IAAM,MAAA;AAAA,MAAEC;AAAAA,QAAqBC,QAAS,EAAA;AACtC,IAAM,MAAA;AAAA,MAAEC,QAAAA;AAAAA,MAAUC,YAAAA;AAAAA,MAAcC,IAAAA;AAAAA,MAAMC;AAAAA,QAAYC,OAAQ,EAAA;AAE1D,IAAA,SAASL,QAAW,GAAA;AAClB,MAAMD,MAAAA,iBAAAA,GAAmBO,SACvB,MAAMC,GAAAA;AAAAA;AAAAA;;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;;AAAAA;;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,QAiBR,CAAA,CAAA;AACA,MAAO,OAAA;AAAA,QACLR,gBAAAA,EAAAA;AAAAA,OACF;AAAA;AAGF,IAAA,SAASM,OAAU,GAAA;AACjB,MAAM,MAAA;AAAA,QAAEG;AAAAA,OAAO,GAAIC,WAAYC,CAAAA,WAAAA,EAAa,CAAA;AAC5C,MAAM,MAAA;AAAA,QAAET,QAAAA,EAAAA,SAAAA;AAAAA,QAAUC,YAAAA,EAAAA,aAAAA;AAAAA,QAAcC,IAAAA,EAAAA;AAAAA,OAAK,GAAIM,WAAYE,CAAAA,YAAAA,EAAc,CAAA;AACnE,MAAA,MAAMC,QAAQC,QAAS,EAAA;AACvB,MAAA,MAAMC,SAASC,SAAU,EAAA;AAKzBC,MAAAA,KAAAA,CACE,MAAMJ,KAAAA,CAAMK,QACZ,EAAA,CAAMC,IAAQ,KAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACZ,QAAA,MAAMC,OAAOjB,aAAakB,CAAAA,KAAAA,CAAMC,IAAMC,CAAAA,CAAAA,IAAAA,KAAiBA,SAASJ,IAAI,CAAA;AACpE,QAAA,IAAI,CAACC,IAAM,EAAA;AACT,UAAA,MAAMI,EAAKC,GAAAA,mBAAAA,CAAoBN,IAAMf,EAAAA,KAAAA,CAAKiB,KAAc,CAAA;AACxD,UAAA,IAAIG,EAAI,EAAA;AACN,YAAI,IAAA,CAACf,MAAOY,CAAAA,KAAAA,CAAMK,SAAW,EAAA;AAC3B,cAAA,IAAIF,yBAAIG,SAAW,EAAA;AACjBzB,gBAAAA,SAASmB,CAAAA,KAAAA,GAAQ,CAACG,EAAAA,CAAGG,SAAS,CAAA;AAAA,eACzB,MAAA;AACLzB,gBAAAA,SAASmB,CAAAA,KAAAA,GAAQ,CAACG,EAAAA,CAAII,UAAU,CAAA;AAAA;AAClC;AAEFzB,YAAAA,aAAakB,CAAAA,KAAAA,GAAQ,CAACG,EAAAA,CAAII,UAAU,CAAA;AAAA;AACtC;AACF,OAEJ,CAAA,CAAA;AAEAX,MAAAA,KAAAA,CACE,MAAMR,MAAAA,CAAOY,KAAMK,CAAAA,SAAAA,EACnBG,CAAO,GAAA,KAAA;AACL,QAAMV,MAAAA,IAAAA,GAAOhB,aAAakB,CAAAA,KAAAA,CAAM,CAAC,CAAA;AACjC,QAAA,MAAMG,EAAKC,GAAAA,mBAAAA,CAAoBN,IAAMf,EAAAA,KAAAA,CAAKiB,KAAc,CAAA;AACxD,QAAA,IAAIQ,GAAK,EAAA;AACP3B,UAAAA,SAAAA,CAASmB,QAAQ,EAAE;AAAA,SACd,MAAA;AACL,UAAA,IAAIG,yBAAIG,SAAW,EAAA;AACjBzB,YAAAA,SAASmB,CAAAA,KAAAA,GAAQ,CAACG,EAAAA,CAAGG,SAAS,CAAA;AAAA,WACzB,MAAA;AACLzB,YAAAA,SAASmB,CAAAA,KAAAA,GAAQ,CAACG,EAAAA,CAAII,UAAU,CAAA;AAAA;AAClC;AACF,OAEJ,CAAA;AAGA,MAAA,MAAMH,mBAAsBA,GAAAA,CAC1BN,IACAW,EAAAA,SAAAA,EACAH,YAAoB,EACiC,KAAA;AAErD,QAAA,KAAA,MAAWJ,QAAQO,SAAW,EAAA;AAE5B,UAAIP,IAAAA,IAAAA,CAAKQ,QAAQZ,IAAM,EAAA;AACrB,YAAO,OAAA;AAAA,cAAES,YAAYL,IAAKQ,CAAAA,GAAAA;AAAAA,cAAKJ;AAAAA,aAAU;AAAA;AAI3C,UAAA,IAAIJ,IAAKS,CAAAA,QAAAA,IAAYT,IAAKS,CAAAA,QAAAA,CAASC,SAAS,CAAG,EAAA;AAC7C,YAAA,MAAMC,SAAST,mBAAoBN,CAAAA,IAAAA,EAAMI,IAAKS,CAAAA,QAAAA,EAAUT,KAAKQ,GAAG,CAAA;AAChE,YAAA,IAAIG,MAAQ,EAAA;AACV,cAAOA,OAAAA,MAAAA;AAAAA;AACT;AAIF,UAAMC,MAAAA,KAAAA,GAAQhB,IAAKgB,CAAAA,KAAAA,CAAM,UAAU,CAAA;AACnC,UAAA,MAAMC,QAAWD,GAAAA,KAAAA,GAAQA,KAAM,CAAA,CAAC,CAAI,GAAA,EAAA;AACpC,UAAA,IAAIZ,IAAKQ,CAAAA,GAAAA,CAAIM,UAAWD,CAAAA,QAAQ,CAAG,EAAA;AACjC,YAAO,OAAA;AAAA,cAAER,YAAYL,IAAKQ,CAAAA,GAAAA;AAAAA,cAAKJ;AAAAA,aAAU;AAAA;AAC3C;AAIF,QAAO,OAAA,IAAA;AAAA,OACT;AAEA,MAAA,MAAMtB,WAAUA,CAAC;AAAA,QACf0B,GAAAA;AAAAA,QACAO;AAAAA,OAKI,KAAA;AACJpC,QAAAA,UAASmB,KAAQiB,GAAAA,OAAAA;AACjBnC,QAAAA,aAAAA,CAAakB,KAAQ,GAAA,CAACU,GAAG,CAAA;AAIzB,QAAIlB,IAAAA,KAAAA,CAAMM,SAASY,GAAK,EAAA;AACtBhB,UAAAA,MAAAA,CAAOwB,IAAKR,CAAAA,GAAG,CAAES,CAAAA,IAAAA,CAAKC,CAAK,CAAA,KAAA;AACzB,YAAA,IAAIA,CAAG,EAAA;AACLC,cAAAA,OAAAA,CAAQC,KAAKF,CAAC,CAAA;AAAA;AAChB,WACD,CAAA;AAAA;AACH,OACF;AAEA,MAAO,OAAA;AAAA,QACLvC,QAAAA,EAAAA,SAAAA;AAAAA,QACAC,YAAAA,EAAAA,aAAAA;AAAAA,QACAC,IAAAA,EAAAA,KAAAA;AAAAA,QACAC,OAAAA,EAAAA;AAAAA,OACF;AAAA;AAGF,IAAO,OAAA,MAAAuC,YAAA,KAAA,EAAA;AAAA,MAAA,SACO5C,gBAAiBqB,CAAAA;AAAAA,KAAKuB,EAAAA,CAAAA,WAAAC,CAAAA,gBAAAA,CAAA,QAAA,CAAA,EAAA;AAAA,MAAA,aAEX3C,QAASmB,CAAAA,KAAAA;AAAAA,MAAK,oBAAA,EAAAyB,CAAd5C,MAAAA,KAAAA,QAAAA,CAASmB,KAAKyB,GAAAA,MAAAA;AAAAA,MAAA,iBACV3C,YAAakB,CAAAA,KAAAA;AAAAA,MAAK,wBAAA,EAAAyB,CAAlB3C,MAAAA,KAAAA,YAAAA,CAAakB,KAAKyB,GAAAA,MAAAA;AAAAA,MAAA,SAClC1C,IAAKiB,CAAAA,KAAAA;AAAAA,MAAK,MAAA,EAAA,QAAA;AAAA,MAAA,sBAEK,EAAA,OAAA;AAAA,MAAO,SACpBhB,EAAAA;AAAAA,KAAO,EAGrB,IAAA,CAAA,CAAA,CAAA;AAAA;AAEL,CAAC,CAAA;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlockCheckbox.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { defineComponent, shallowRef, computed, resolveComponent, createBlock, openBlock, withCtx, createElementVNode, normalizeClass, withDirectives, createVNode, unref, vShow, createCommentVNode } from 'vue';
|
|
2
|
+
import { CheckOutlined } from '@ant-design/icons-vue';
|
|
3
|
+
|
|
4
|
+
"use strict";
|
|
5
|
+
var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
6
|
+
__name: "BlockCheckbox",
|
|
7
|
+
props: {
|
|
8
|
+
themes: { type: String, required: false },
|
|
9
|
+
isDark: { type: Boolean, required: false },
|
|
10
|
+
checked: { type: Boolean, required: false },
|
|
11
|
+
t: { type: Function, required: false }
|
|
12
|
+
},
|
|
13
|
+
setup(__props) {
|
|
14
|
+
const props = __props;
|
|
15
|
+
const prefixCls = shallowRef("ant-pro-drawer-setting-block-checkbox");
|
|
16
|
+
const cls = computed(() => {
|
|
17
|
+
return {
|
|
18
|
+
[`${prefixCls.value}-item`]: true,
|
|
19
|
+
[`${prefixCls.value}-theme-item`]: props.isDark,
|
|
20
|
+
// [`${prefixCls.value}-item-${props.theme}`]: !!props.theme,
|
|
21
|
+
[`${prefixCls.value}-theme-item-${props.themes}`]: props.isDark
|
|
22
|
+
};
|
|
23
|
+
});
|
|
24
|
+
return (_ctx, _cache) => {
|
|
25
|
+
const _component_a_tooltip = resolveComponent("a-tooltip");
|
|
26
|
+
return openBlock(), createBlock(_component_a_tooltip, null, {
|
|
27
|
+
title: withCtx(() => [
|
|
28
|
+
createCommentVNode(' {{ t?.(`app.setting.pagestyle.${theme}` ?? "") }}')
|
|
29
|
+
]),
|
|
30
|
+
default: withCtx(() => [
|
|
31
|
+
createElementVNode(
|
|
32
|
+
"div",
|
|
33
|
+
{
|
|
34
|
+
class: normalizeClass(cls.value)
|
|
35
|
+
},
|
|
36
|
+
[
|
|
37
|
+
withDirectives(createVNode(unref(CheckOutlined), {
|
|
38
|
+
class: normalizeClass(`${prefixCls.value}-selectIcon`)
|
|
39
|
+
}, null, 8, ["class"]), [
|
|
40
|
+
[vShow, __props.checked]
|
|
41
|
+
])
|
|
42
|
+
],
|
|
43
|
+
2
|
|
44
|
+
/* CLASS */
|
|
45
|
+
)
|
|
46
|
+
]),
|
|
47
|
+
_: 1
|
|
48
|
+
/* STABLE */
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
export { _sfc_main as default };
|
|
55
|
+
//# sourceMappingURL=BlockCheckbox.vue2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlockCheckbox.vue2.mjs","sources":["../../../../../../src/components/layout/components/settings/BlockCheckbox.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, shallowRef } from \"vue\";\n\nimport { CheckOutlined } from \"@ant-design/icons-vue\";\n\nconst props = defineProps({\n themes: { type: String, required: false },\n isDark: { type: Boolean, required: false },\n checked: { type: Boolean, required: false },\n t: { type: Function, required: false }\n});\nconst prefixCls = shallowRef(\"ant-pro-drawer-setting-block-checkbox\");\n\nconst cls = computed(() => {\n return {\n [`${prefixCls.value}-item`]: true,\n [`${prefixCls.value}-theme-item`]: props.isDark,\n // [`${prefixCls.value}-item-${props.theme}`]: !!props.theme,\n [`${prefixCls.value}-theme-item-${props.themes}`]: props.isDark\n };\n});\n</script>\n\n<template>\n <a-tooltip>\n <template #title>\n <!-- {{ t?.(`app.setting.pagestyle.${theme}` ?? \"\") }}-->\n </template>\n <div :class=\"cls\">\n <CheckOutlined v-show=\"checked\" :class=\"`${prefixCls}-selectIcon`\" />\n </div>\n </a-tooltip>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;AAKA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAMd,IAAM,MAAA,SAAA,GAAY,WAAW,uCAAuC,CAAA;AAEpE,IAAM,MAAA,GAAA,GAAM,SAAS,MAAM;AACzB,MAAO,OAAA;AAAA,QACL,CAAC,CAAA,EAAG,SAAU,CAAA,KAAK,OAAO,GAAG,IAAA;AAAA,QAC7B,CAAC,CAAG,EAAA,SAAA,CAAU,KAAK,CAAA,WAAA,CAAa,GAAG,KAAM,CAAA,MAAA;AAAA;AAAA,QAEzC,CAAC,GAAG,SAAU,CAAA,KAAK,eAAe,KAAM,CAAA,MAAM,CAAE,CAAA,GAAG,KAAM,CAAA;AAAA,OAC3D;AAAA,KACD,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { isVNode, defineComponent, ref, computed, createVNode, resolveComponent } from 'vue';
|
|
2
|
+
import { theme } from 'ant-design-vue';
|
|
3
|
+
import { storeToRefs } from 'pinia';
|
|
4
|
+
import { SettingOutlined, CloseOutlined } from '@ant-design/icons-vue';
|
|
5
|
+
import { useAppStore } from '@ditari/store';
|
|
6
|
+
import { css } from '@emotion/css';
|
|
7
|
+
import './BlockCheckbox.vue.mjs';
|
|
8
|
+
import _sfc_main from './BlockCheckbox.vue2.mjs';
|
|
9
|
+
|
|
10
|
+
"use strict";
|
|
11
|
+
function _isSlot(s) {
|
|
12
|
+
return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
|
|
13
|
+
}
|
|
14
|
+
var SettingDrawer = /* @__PURE__ */ defineComponent({
|
|
15
|
+
components: {
|
|
16
|
+
BlockCheckbox: _sfc_main
|
|
17
|
+
},
|
|
18
|
+
setup() {
|
|
19
|
+
const open = ref(false);
|
|
20
|
+
const {
|
|
21
|
+
useToken
|
|
22
|
+
} = theme;
|
|
23
|
+
const {
|
|
24
|
+
token
|
|
25
|
+
} = useToken();
|
|
26
|
+
const store = useAppStore();
|
|
27
|
+
const {
|
|
28
|
+
modeConfig
|
|
29
|
+
} = storeToRefs(store);
|
|
30
|
+
const {
|
|
31
|
+
btnStyle,
|
|
32
|
+
closeBtnStyle,
|
|
33
|
+
dividerStyle,
|
|
34
|
+
settingDrawerStyle
|
|
35
|
+
} = useStyle();
|
|
36
|
+
function useStyle() {
|
|
37
|
+
const settingDrawerStyle2 = computed(() => css``);
|
|
38
|
+
const btnStyle2 = computed(() => css`
|
|
39
|
+
background-color: ${token.value.colorPrimary};
|
|
40
|
+
border-end-start-radius: ${token == null ? void 0 : token.value.borderRadius}px;
|
|
41
|
+
border-start-start-radius: ${token == null ? void 0 : token.value.borderRadius}px;
|
|
42
|
+
`);
|
|
43
|
+
const closeBtnStyle2 = computed(() => css`
|
|
44
|
+
${btnStyle2.value};
|
|
45
|
+
position: absolute;
|
|
46
|
+
top: 240px;
|
|
47
|
+
right: 378px;
|
|
48
|
+
`);
|
|
49
|
+
const dividerStyle2 = computed(() => `
|
|
50
|
+
border-color: #7cb305;
|
|
51
|
+
`);
|
|
52
|
+
return {
|
|
53
|
+
btnStyle: btnStyle2,
|
|
54
|
+
closeBtnStyle: closeBtnStyle2,
|
|
55
|
+
dividerStyle: dividerStyle2,
|
|
56
|
+
settingDrawerStyle: settingDrawerStyle2
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return () => {
|
|
60
|
+
let _slot;
|
|
61
|
+
return createVNode("div", {
|
|
62
|
+
"class": settingDrawerStyle.value
|
|
63
|
+
}, [createVNode("div", {
|
|
64
|
+
"class": `ant-pro-drawer-setting-handle ${btnStyle.value}`,
|
|
65
|
+
"onClick": () => open.value = true
|
|
66
|
+
}, [createVNode(SettingOutlined, {
|
|
67
|
+
"class": "icon"
|
|
68
|
+
}, null)]), createVNode(resolveComponent("a-drawer"), {
|
|
69
|
+
"open": open.value,
|
|
70
|
+
"onUpdate:open": ($event) => open.value = $event,
|
|
71
|
+
"bodyStyle": {
|
|
72
|
+
padding: 0
|
|
73
|
+
}
|
|
74
|
+
}, {
|
|
75
|
+
default: () => [createVNode("div", {
|
|
76
|
+
"class": `ant-pro-drawer-setting-handle ${closeBtnStyle.value}`,
|
|
77
|
+
"onClick": () => open.value = false
|
|
78
|
+
}, [createVNode(CloseOutlined, {
|
|
79
|
+
"class": "icon"
|
|
80
|
+
}, null)]), createVNode(resolveComponent("a-form"), null, {
|
|
81
|
+
default: () => [createVNode(resolveComponent("a-form-item"), {
|
|
82
|
+
"label": "\u6A21\u5F0F"
|
|
83
|
+
}, {
|
|
84
|
+
default: () => [createVNode(resolveComponent("a-radio-group"), {
|
|
85
|
+
"value": modeConfig.value.mode,
|
|
86
|
+
"onUpdate:value": ($event) => modeConfig.value.mode = $event,
|
|
87
|
+
"button-style": "solid"
|
|
88
|
+
}, _isSlot(_slot = modeConfig.value.list.map((item) => createVNode(resolveComponent("a-radio-button"), {
|
|
89
|
+
"value": item.value
|
|
90
|
+
}, {
|
|
91
|
+
default: () => [item.label]
|
|
92
|
+
}))) ? _slot : {
|
|
93
|
+
default: () => [_slot]
|
|
94
|
+
})]
|
|
95
|
+
}), createVNode(resolveComponent("a-form-item"), {
|
|
96
|
+
"label": "\u6A21\u5F0F"
|
|
97
|
+
}, null)]
|
|
98
|
+
})]
|
|
99
|
+
})]);
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
export { SettingDrawer as default };
|
|
105
|
+
//# sourceMappingURL=SettingDrawer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingDrawer.mjs","sources":["../../../../../../src/components/layout/components/settings/SettingDrawer.tsx"],"sourcesContent":["import { computed, type ComputedRef, defineComponent, ref } from \"vue\";\r\nimport { theme } from \"ant-design-vue\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport { CloseOutlined, SettingOutlined } from \"@ant-design/icons-vue\";\r\nimport { useAppStore } from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\n\r\nimport BlockCheckbox from \"./BlockCheckbox.vue\";\r\n\r\nexport default defineComponent({\r\n components: {\r\n BlockCheckbox\r\n },\r\n setup() {\r\n const open = ref(false);\r\n const { useToken } = theme;\r\n const { token }: { token: ComputedRef<GlobalToken> } = useToken();\r\n const store = useAppStore();\r\n const { modeConfig } = storeToRefs(store);\r\n\r\n const { btnStyle, closeBtnStyle, dividerStyle, settingDrawerStyle } =\r\n useStyle();\r\n\r\n function useStyle(): {\r\n btnStyle: ComputedRef<string>;\r\n closeBtnStyle: ComputedRef<string>;\r\n dividerStyle: ComputedRef<string>;\r\n settingDrawerStyle: ComputedRef<string>;\r\n } {\r\n const settingDrawerStyle = computed(() => css``);\r\n const btnStyle = computed(\r\n () => css`\r\n background-color: ${token.value.colorPrimary};\r\n border-end-start-radius: ${token?.value.borderRadius}px;\r\n border-start-start-radius: ${token?.value.borderRadius}px;\r\n `\r\n );\r\n\r\n const closeBtnStyle = computed(\r\n () => css`\r\n ${btnStyle.value};\r\n position: absolute;\r\n top: 240px;\r\n right: 378px;\r\n `\r\n );\r\n\r\n const dividerStyle = computed(\r\n () => `\r\n border-color: #7cb305;\r\n `\r\n );\r\n\r\n return {\r\n btnStyle,\r\n closeBtnStyle,\r\n dividerStyle,\r\n settingDrawerStyle\r\n };\r\n }\r\n\r\n return () => (\r\n <div class={settingDrawerStyle.value}>\r\n <div\r\n class={`ant-pro-drawer-setting-handle ${btnStyle.value}`}\r\n onClick={() => (open.value = true)}\r\n >\r\n <SettingOutlined class={\"icon\"} />\r\n </div>\r\n <a-drawer v-model:open={open.value} bodyStyle={{ padding: 0 }}>\r\n <div\r\n class={`ant-pro-drawer-setting-handle ${closeBtnStyle.value}`}\r\n onClick={() => (open.value = false)}\r\n >\r\n <CloseOutlined class={\"icon\"} />\r\n </div>\r\n\r\n <a-form>\r\n <a-form-item label={\"模式\"}>\r\n <a-radio-group\r\n v-model:value={modeConfig.value.mode}\r\n button-style=\"solid\"\r\n >\r\n {modeConfig.value.list.map(item => (\r\n <a-radio-button value={item.value}>\r\n {item.label}\r\n </a-radio-button>\r\n ))}\r\n </a-radio-group>\r\n </a-form-item>\r\n <a-form-item label={\"模式\"}></a-form-item>\r\n </a-form>\r\n </a-drawer>\r\n </div>\r\n );\r\n }\r\n});\r\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","components","BlockCheckbox","setup","open","ref","useToken","theme","token","store","useAppStore","modeConfig","storeToRefs","btnStyle","closeBtnStyle","dividerStyle","settingDrawerStyle","useStyle","computed","css","value","colorPrimary","borderRadius","_slot","_createVNode","onClick","SettingOutlined","_resolveComponent","$event","padding","default","CloseOutlined","mode","list","map","item","label"],"mappings":";;;;;;;;;;AASgD,SAAAA,QAAAC,CAAA,EAAA;AAAA,EAAA,OAAA,OAAAA,CAAAA,KAAA,UAAAC,IAAAA,MAAAA,CAAAC,SAAAC,CAAAA,QAAAA,CAAAC,IAAAJ,CAAAA,CAAA,CAAAK,KAAAA,iBAAAA,IAAAA,CAAAA,OAAAA,CAAAL,CAAA,CAAA;AAAA;AAEhD,oCAA+B,eAAA,CAAA;AAAA,EAC7BM,UAAY,EAAA;AAAA,mBACVC;AAAAA,GACF;AAAA,EACAC,KAAQ,GAAA;AACN,IAAMC,MAAAA,IAAAA,GAAOC,IAAI,KAAK,CAAA;AACtB,IAAM,MAAA;AAAA,MAAEC;AAAAA,KAAaC,GAAAA,KAAAA;AACrB,IAAM,MAAA;AAAA,MAAEC;AAAAA,QAA+CF,QAAS,EAAA;AAChE,IAAA,MAAMG,QAAQC,WAAY,EAAA;AAC1B,IAAM,MAAA;AAAA,MAAEC;AAAAA,KAAW,GAAIC,YAAYH,KAAK,CAAA;AAExC,IAAM,MAAA;AAAA,MAAEI,QAAAA;AAAAA,MAAUC,aAAAA;AAAAA,MAAeC,YAAAA;AAAAA,MAAcC;AAAAA,QAC7CC,QAAS,EAAA;AAEX,IAAA,SAASA,QAKP,GAAA;AACA,MAAMD,MAAAA,mBAAAA,GAAqBE,QAAS,CAAA,MAAMC,GAAK,CAAA,CAAA,CAAA;AAC/C,MAAMN,MAAAA,SAAAA,GAAWK,SACf,MAAMC,GAAAA;AAAAA,4BACgBX,EAAAA,KAAAA,CAAMY,MAAMC,YAAY,CAAA;AAAA,mCACjBb,EAAAA,KAAAA,IAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAOY,MAAME,YAAY,CAAA;AAAA,qCACvBd,EAAAA,KAAAA,IAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAOY,MAAME,YAAY,CAAA;AAAA,QAE1D,CAAA,CAAA;AAEA,MAAMR,MAAAA,cAAAA,GAAgBI,SACpB,MAAMC,GAAAA;AAAAA,UAAAA,EACFN,UAASO,KAAK,CAAA;AAAA;AAAA;AAAA;AAAA,QAKpB,CAAA,CAAA;AAEA,MAAML,MAAAA,aAAAA,GAAeG,SACnB,MAAM;AAAA;AAAA,MAGR,CAAA,CAAA;AAEA,MAAO,OAAA;AAAA,QACLL,QAAAA,EAAAA,SAAAA;AAAAA,QACAC,aAAAA,EAAAA,cAAAA;AAAAA,QACAC,YAAAA,EAAAA,aAAAA;AAAAA,QACAC,kBAAAA,EAAAA;AAAAA,OACF;AAAA;AAGF,IAAA,OAAO,MAAA;AAAA,MAAAO,IAAAA,KAAAA;AAAA,MAAA,OAAAC,YAAA,KAAA,EAAA;AAAA,QAAA,SACOR,kBAAmBI,CAAAA;AAAAA,OAAK,EAAA,CAAAI,WAAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAEzB,CAAiCX,8BAAAA,EAAAA,QAAAA,CAASO,KAAK,CAAA,CAAA;AAAA,QAAE,SAAA,EAC/CK,MAAOrB,IAAAA,CAAKgB,KAAQ,GAAA;AAAA,OAAK,EAAAI,CAAAA,WAAAA,CAAAE,eAAA,EAAA;AAAA,QAAA,OAEV,EAAA;AAAA,OAAM,EAAAF,IAAAA,CAAAA,CAAAA,GAAAA,WAAAG,CAAAA,gBAAAA,CAAA,UAAA,CAAA,EAAA;AAAA,QAAA,QAERvB,IAAKgB,CAAAA,KAAAA;AAAAA,QAAK,eAAA,EAAAQ,CAAVxB,MAAAA,KAAAA,IAAAA,CAAKgB,KAAKQ,GAAAA,MAAAA;AAAAA,QAAA,WAAa,EAAA;AAAA,UAAEC,OAAS,EAAA;AAAA;AAAE,OAAC,EAAA;AAAA,QAAAC,OAAAA,EAAAA,MAAA,CAAAN,WAAAA,CAAA,KAAA,EAAA;AAAA,UAAA,OAAA,EAElD,CAAkCV,+BAAAA,EAAAA,aAAAA,CAAcM,KAAK,CAAA,CAAA;AAAA,UAAE,SAAA,EACrDK,MAAOrB,IAAAA,CAAKgB,KAAQ,GAAA;AAAA,SAAM,EAAAI,CAAAA,WAAAA,CAAAO,aAAA,EAAA;AAAA,UAAA,OAEb,EAAA;AAAA,SAAM,EAAAP,IAAAA,CAAAA,CAAAA,GAAAA,WAAAG,CAAAA,gBAAAA,CAAA,QAAA,CAAA,EAAA,IAAA,EAAA;AAAA,UAAAG,SAAAA,MAAAN,CAAAA,WAAAG,CAAAA,gBAAAA,CAAA,aAAA,CAAA,EAAA;AAAA,YAAA,OAIR,EAAA;AAAA,WAAI,EAAA;AAAA,YAAAG,SAAAA,MAAAN,CAAAA,WAAAG,CAAAA,gBAAAA,CAAA,eAAA,CAAA,EAAA;AAAA,cAAA,OAAA,EAELhB,WAAWS,KAAMY,CAAAA,IAAAA;AAAAA,cAAI,gBAAAJ,EAAAA,CAAAA,MAAAA,KAArBjB,UAAWS,CAAAA,KAAAA,CAAMY,IAAIJ,GAAAA,MAAAA;AAAAA,cAAA,cAAA,EAAA;AAAA,aAAA,EAAAlC,OAAA6B,CAAAA,KAAAA,GAGnCZ,UAAWS,CAAAA,KAAAA,CAAMa,IAAKC,CAAAA,GAAAA,CAAIC,CAAIX,IAAAA,KAAAA,WAAAA,CAAAG,gBAAA,CAAA,gBAAA,CAAA,EAAA;AAAA,cAAA,SACNQ,IAAKf,CAAAA;AAAAA,aAAK,EAAA;AAAA,cAAAU,OAAAA,EAAAA,MAC9BK,CAAAA,IAAAA,CAAKC,KAAK;AAAA,aAEd,CAAA,CAAC,CAAA,GAAAb,KAAA,GAAA;AAAA,cAAAO,OAAAA,EAAAA,MAAA,CAAAP,KAAA;AAAA,aAAA,CAAA;AAAA,WAAAC,CAAAA,EAAAA,WAAAG,CAAAA,gBAAAA,CAAA,aAAA,CAAA,EAAA;AAAA,YAAA,OAGc,EAAA;AAAA,WAAI,EAAA,IAAA,CAAA;AAAA,SAAA,CAAA;AAAA,OAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA;AAMpC,CAAC,CAAA;;;;"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { defineComponent, ref, computed, watch, createVNode, resolveComponent, Fragment, createTextVNode, h } from 'vue';
|
|
2
|
+
import { theme } from 'ant-design-vue';
|
|
3
|
+
import { useMagicKeys, useWindowScroll } from '@vueuse/core';
|
|
4
|
+
import { SearchOutlined, UnorderedListOutlined, CloseOutlined, DownOutlined } from '@ant-design/icons-vue';
|
|
5
|
+
import { useNavTabStore } from '@ditari/store';
|
|
6
|
+
import { css } from '@emotion/css';
|
|
7
|
+
import dayjs from '../../_virtual/dayjs.min.mjs';
|
|
8
|
+
|
|
9
|
+
"use strict";
|
|
10
|
+
var Search = /* @__PURE__ */ defineComponent({
|
|
11
|
+
name: "Search",
|
|
12
|
+
setup() {
|
|
13
|
+
const {
|
|
14
|
+
useToken
|
|
15
|
+
} = theme;
|
|
16
|
+
const {
|
|
17
|
+
token
|
|
18
|
+
} = useToken();
|
|
19
|
+
const {
|
|
20
|
+
getList,
|
|
21
|
+
deleteTabs
|
|
22
|
+
} = useNavTabStore();
|
|
23
|
+
const keys = useMagicKeys();
|
|
24
|
+
const shiftCtrlA = keys["Shift+Ctrl+S"];
|
|
25
|
+
const open = ref(false);
|
|
26
|
+
const {
|
|
27
|
+
y
|
|
28
|
+
} = useWindowScroll();
|
|
29
|
+
const navTabList = computed(() => {
|
|
30
|
+
return getList.sort((a, b) => (b.openTime || 0) - (a.openTime || 0));
|
|
31
|
+
});
|
|
32
|
+
watch(shiftCtrlA, (v) => {
|
|
33
|
+
if (v) {
|
|
34
|
+
open.value = !open.value;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
watch(() => y.value, (val) => {
|
|
38
|
+
if (val > 0) {
|
|
39
|
+
open.value = false;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
const buttonToken = {
|
|
43
|
+
borderRadius: "12px"
|
|
44
|
+
};
|
|
45
|
+
const onCloseTab = (path) => {
|
|
46
|
+
deleteTabs(path);
|
|
47
|
+
};
|
|
48
|
+
const searchStyle = computed(() => css`
|
|
49
|
+
padding: 10px;
|
|
50
|
+
border-bottom: 1px solid ${token.value.colorBorder};
|
|
51
|
+
`);
|
|
52
|
+
const searchListStyle = computed(() => css`
|
|
53
|
+
position: relative;
|
|
54
|
+
display: flex;
|
|
55
|
+
flex-direction: column;
|
|
56
|
+
max-height: 400px;
|
|
57
|
+
overflow-y: overlay;
|
|
58
|
+
|
|
59
|
+
/* 整个滚动条 */
|
|
60
|
+
|
|
61
|
+
::-webkit-scrollbar {
|
|
62
|
+
width: 4px; /* 垂直滚动条的宽度 */
|
|
63
|
+
height: 4px; /* 水平滚动条的高度 */
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* 滚动条轨道 */
|
|
67
|
+
|
|
68
|
+
::-webkit-scrollbar-track {
|
|
69
|
+
background: transparent; /* 轨道背景色 */
|
|
70
|
+
border-radius: 0; /* 轨道圆角 */
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* 滚动条滑块 */
|
|
74
|
+
|
|
75
|
+
::-webkit-scrollbar-thumb {
|
|
76
|
+
//background: #888; /* 滑块背景色 */
|
|
77
|
+
// border-radius: 6px; /* 滑块圆角 */
|
|
78
|
+
border: 3px solid ${token.value.colorPrimaryBorder}; /* 滑块边框 */
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* 滚动条滑块悬停效果 */
|
|
82
|
+
|
|
83
|
+
::-webkit-scrollbar-thumb:hover {
|
|
84
|
+
background: red; /* 滑块悬停背景色 */
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.search-title {
|
|
88
|
+
position: sticky;
|
|
89
|
+
top: 0;
|
|
90
|
+
padding: 10px;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
ul {
|
|
94
|
+
margin: 0;
|
|
95
|
+
padding: 0;
|
|
96
|
+
list-style: none;
|
|
97
|
+
|
|
98
|
+
li {
|
|
99
|
+
display: flex;
|
|
100
|
+
align-items: center;
|
|
101
|
+
padding: 4px 10px;
|
|
102
|
+
width: 400px;
|
|
103
|
+
|
|
104
|
+
&:hover {
|
|
105
|
+
background-color: red;
|
|
106
|
+
|
|
107
|
+
.close-wrapper {
|
|
108
|
+
display: block;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.icon {
|
|
113
|
+
width: 42px;
|
|
114
|
+
height: 42px;
|
|
115
|
+
border-radius: 10px;
|
|
116
|
+
background-color: ${token.value.colorPrimary};
|
|
117
|
+
display: flex;
|
|
118
|
+
justify-content: center;
|
|
119
|
+
align-items: center;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.content {
|
|
123
|
+
padding-left: 10px;
|
|
124
|
+
|
|
125
|
+
.time-ago {
|
|
126
|
+
display: flex;
|
|
127
|
+
align-items: center;
|
|
128
|
+
font-size: 12px;
|
|
129
|
+
|
|
130
|
+
.hostname {
|
|
131
|
+
max-width: 180px;
|
|
132
|
+
overflow: hidden;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.split {
|
|
136
|
+
width: 4px;
|
|
137
|
+
height: 4px;
|
|
138
|
+
display: inline-block;
|
|
139
|
+
background-color: ${token.value.colorPrimary};
|
|
140
|
+
border-radius: 10px;
|
|
141
|
+
margin: 0 6px;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.close-wrapper {
|
|
147
|
+
display: none;
|
|
148
|
+
flex: 1;
|
|
149
|
+
text-align: right;
|
|
150
|
+
|
|
151
|
+
.close-btn {
|
|
152
|
+
display: inline-block;
|
|
153
|
+
width: 22px;
|
|
154
|
+
height: 22px;
|
|
155
|
+
border-radius: 50%;
|
|
156
|
+
text-align: center;
|
|
157
|
+
|
|
158
|
+
&:hover {
|
|
159
|
+
background-color: blue;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
`);
|
|
166
|
+
function timeAgo(providedTime) {
|
|
167
|
+
const now = dayjs();
|
|
168
|
+
const diffInSeconds = now.diff(providedTime, "second");
|
|
169
|
+
const diffInMinutes = now.diff(providedTime, "minute");
|
|
170
|
+
const diffInHours = now.diff(providedTime, "hour");
|
|
171
|
+
if (diffInMinutes < 1) {
|
|
172
|
+
return `${diffInSeconds} \u79D2\u524D`;
|
|
173
|
+
} else if (diffInHours < 1) {
|
|
174
|
+
return `${diffInMinutes} \u5206\u949F\u524D`;
|
|
175
|
+
} else {
|
|
176
|
+
return `${diffInHours} \u5C0F\u65F6\u524D`;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return () => createVNode("div", null, [createVNode(resolveComponent("a-popover"), {
|
|
180
|
+
"open": open.value,
|
|
181
|
+
"onUpdate:open": ($event) => open.value = $event,
|
|
182
|
+
"placement": "bottomRight",
|
|
183
|
+
"trigger": "click",
|
|
184
|
+
"overlayClassName": "search-popover-wrapper"
|
|
185
|
+
}, {
|
|
186
|
+
default: () => createVNode("div", null, [createVNode(resolveComponent("a-button"), {
|
|
187
|
+
"style": {
|
|
188
|
+
borderRadius: "10px"
|
|
189
|
+
},
|
|
190
|
+
"icon": h(DownOutlined),
|
|
191
|
+
"title": "\u641C\u7D22\u6807\u7B7E\u9875"
|
|
192
|
+
}, null)]),
|
|
193
|
+
content: () => createVNode(Fragment, null, [createVNode("div", {
|
|
194
|
+
"class": searchStyle.value
|
|
195
|
+
}, [createVNode(resolveComponent("a-input"), {
|
|
196
|
+
"placeholder": "\u641C\u7D22\u6807\u7B7E\u9875",
|
|
197
|
+
"bordered": false
|
|
198
|
+
}, {
|
|
199
|
+
prefix: () => createVNode(SearchOutlined, null, null),
|
|
200
|
+
suffix: () => createVNode("span", {
|
|
201
|
+
"style": {
|
|
202
|
+
color: "rgba(0, 0, 0, 0.45)"
|
|
203
|
+
}
|
|
204
|
+
}, [createTextVNode("Ctrl+Shift+S")])
|
|
205
|
+
})]), createVNode("div", {
|
|
206
|
+
"class": searchListStyle.value
|
|
207
|
+
}, [createVNode("span", {
|
|
208
|
+
"class": "search-title"
|
|
209
|
+
}, [createTextVNode("\u6253\u5F00\u7684\u6807\u7B7E\u9875")]), createVNode("ul", null, [navTabList.value.map((item) => {
|
|
210
|
+
var _a, _b;
|
|
211
|
+
return createVNode("li", null, [createVNode("div", {
|
|
212
|
+
"class": "icon"
|
|
213
|
+
}, [createVNode(UnorderedListOutlined, null, null)]), createVNode("div", {
|
|
214
|
+
"class": "content"
|
|
215
|
+
}, [createVNode("div", {
|
|
216
|
+
"class": "title"
|
|
217
|
+
}, [(_a = item.meta) == null ? void 0 : _a.title]), createVNode("div", {
|
|
218
|
+
"class": "time-ago"
|
|
219
|
+
}, [createVNode("span", {
|
|
220
|
+
"class": "hostname"
|
|
221
|
+
}, [window.location.hostname + "" + item.path]), createVNode("span", {
|
|
222
|
+
"class": "split"
|
|
223
|
+
}, null), createVNode("span", {
|
|
224
|
+
"class": "time"
|
|
225
|
+
}, [timeAgo((_b = item.openTime) != null ? _b : 0)])])]), createVNode("div", {
|
|
226
|
+
"class": "close-wrapper"
|
|
227
|
+
}, [createVNode("span", {
|
|
228
|
+
"class": "close-btn",
|
|
229
|
+
"onClick": () => onCloseTab(item.fullPath || "")
|
|
230
|
+
}, [createVNode(CloseOutlined, null, null)])])]);
|
|
231
|
+
})])])])
|
|
232
|
+
})]);
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
export { Search as default };
|
|
237
|
+
//# sourceMappingURL=Search.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Search.mjs","sources":["../../../../src/components/tab/Search.tsx"],"sourcesContent":["import { computed, ComputedRef, defineComponent, h, ref, watch } from \"vue\";\r\nimport { theme } from \"ant-design-vue\";\r\nimport { useMagicKeys, useWindowScroll } from \"@vueuse/core\";\r\n\r\nimport {\r\n CloseOutlined,\r\n DownOutlined,\r\n SearchOutlined,\r\n UnorderedListOutlined\r\n} from \"@ant-design/icons-vue\";\r\nimport { useNavTabStore } from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\nimport dayjs from \"dayjs\";\r\n\r\nexport default defineComponent({\r\n name: \"Search\",\r\n setup() {\r\n const { useToken } = theme;\r\n const { token }: { token: ComputedRef<GlobalToken> } = useToken();\r\n\r\n const { getList, deleteTabs } = useNavTabStore();\r\n // 用来监听 Ctrl + Shift + S\r\n const keys = useMagicKeys();\r\n const shiftCtrlA = keys[\"Shift+Ctrl+S\"];\r\n const open = ref(false);\r\n const { y } = useWindowScroll();\r\n\r\n const navTabList = computed(() => {\r\n return getList!.sort((a, b) => (b.openTime || 0) - (a.openTime || 0));\r\n });\r\n\r\n watch(shiftCtrlA, v => {\r\n if (v) {\r\n open.value = !open.value;\r\n }\r\n });\r\n watch(\r\n () => y.value,\r\n val => {\r\n if (val > 0) {\r\n open.value = false;\r\n }\r\n }\r\n );\r\n\r\n const buttonToken = {\r\n borderRadius: \"12px\"\r\n };\r\n\r\n const onCloseTab = (path: string) => {\r\n deleteTabs(path);\r\n };\r\n\r\n const searchStyle = computed(\r\n () => css`\r\n padding: 10px;\r\n border-bottom: 1px solid ${token.value.colorBorder};\r\n `\r\n );\r\n\r\n const searchListStyle = computed(\r\n () => css`\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n max-height: 400px;\r\n overflow-y: overlay;\r\n\r\n /* 整个滚动条 */\r\n\r\n ::-webkit-scrollbar {\r\n width: 4px; /* 垂直滚动条的宽度 */\r\n height: 4px; /* 水平滚动条的高度 */\r\n }\r\n\r\n /* 滚动条轨道 */\r\n\r\n ::-webkit-scrollbar-track {\r\n background: transparent; /* 轨道背景色 */\r\n border-radius: 0; /* 轨道圆角 */\r\n }\r\n\r\n /* 滚动条滑块 */\r\n\r\n ::-webkit-scrollbar-thumb {\r\n //background: #888; /* 滑块背景色 */\r\n // border-radius: 6px; /* 滑块圆角 */\r\n border: 3px solid ${token.value.colorPrimaryBorder}; /* 滑块边框 */\r\n }\r\n\r\n /* 滚动条滑块悬停效果 */\r\n\r\n ::-webkit-scrollbar-thumb:hover {\r\n background: red; /* 滑块悬停背景色 */\r\n }\r\n\r\n .search-title {\r\n position: sticky;\r\n top: 0;\r\n padding: 10px;\r\n }\r\n\r\n ul {\r\n margin: 0;\r\n padding: 0;\r\n list-style: none;\r\n\r\n li {\r\n display: flex;\r\n align-items: center;\r\n padding: 4px 10px;\r\n width: 400px;\r\n\r\n &:hover {\r\n background-color: red;\r\n\r\n .close-wrapper {\r\n display: block;\r\n }\r\n }\r\n\r\n .icon {\r\n width: 42px;\r\n height: 42px;\r\n border-radius: 10px;\r\n background-color: ${token.value.colorPrimary};\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n }\r\n\r\n .content {\r\n padding-left: 10px;\r\n\r\n .time-ago {\r\n display: flex;\r\n align-items: center;\r\n font-size: 12px;\r\n\r\n .hostname {\r\n max-width: 180px;\r\n overflow: hidden;\r\n }\r\n\r\n .split {\r\n width: 4px;\r\n height: 4px;\r\n display: inline-block;\r\n background-color: ${token.value.colorPrimary};\r\n border-radius: 10px;\r\n margin: 0 6px;\r\n }\r\n }\r\n }\r\n\r\n .close-wrapper {\r\n display: none;\r\n flex: 1;\r\n text-align: right;\r\n\r\n .close-btn {\r\n display: inline-block;\r\n width: 22px;\r\n height: 22px;\r\n border-radius: 50%;\r\n text-align: center;\r\n\r\n &:hover {\r\n background-color: blue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n `\r\n );\r\n\r\n function timeAgo(providedTime: number) {\r\n const now = dayjs();\r\n const diffInSeconds = now.diff(providedTime, \"second\"); // 计算时间差(秒)\r\n const diffInMinutes = now.diff(providedTime, \"minute\"); // 计算时间差(分钟)\r\n const diffInHours = now.diff(providedTime, \"hour\"); // 计算时间差(小时)\r\n\r\n if (diffInMinutes < 1) {\r\n return `${diffInSeconds} 秒前`;\r\n } else if (diffInHours < 1) {\r\n return `${diffInMinutes} 分钟前`;\r\n } else {\r\n return `${diffInHours} 小时前`;\r\n }\r\n }\r\n\r\n return () => (\r\n <div>\r\n <a-popover\r\n v-model:open={open.value}\r\n placement={\"bottomRight\"}\r\n trigger={\"click\"}\r\n overlayClassName={\"search-popover-wrapper\"}\r\n >\r\n {{\r\n default: () => (\r\n <div>\r\n <a-button\r\n style={{ borderRadius: \"10px\" }}\r\n icon={h(DownOutlined)}\r\n title={\"搜索标签页\"}\r\n />\r\n </div>\r\n ),\r\n content: () => (\r\n <>\r\n <div class={searchStyle.value}>\r\n <a-input placeholder={\"搜索标签页\"} bordered={false}>\r\n {{\r\n prefix: () => <SearchOutlined />,\r\n suffix: () => (\r\n <span style={{ color: \"rgba(0, 0, 0, 0.45)\" }}>\r\n Ctrl+Shift+S\r\n </span>\r\n )\r\n }}\r\n </a-input>\r\n </div>\r\n <div class={searchListStyle.value}>\r\n <span class={\"search-title\"}>打开的标签页</span>\r\n <ul>\r\n {navTabList.value.map(item => (\r\n <li>\r\n <div class={\"icon\"}>\r\n <UnorderedListOutlined />\r\n </div>\r\n <div class={\"content\"}>\r\n <div class={\"title\"}>{item.meta?.title}</div>\r\n <div class={\"time-ago\"}>\r\n <span class={\"hostname\"}>\r\n {window.location.hostname + \"\" + item.path}\r\n </span>\r\n <span class={\"split\"}></span>\r\n <span class={\"time\"}>\r\n {timeAgo(item.openTime ?? 0)}\r\n </span>\r\n </div>\r\n </div>\r\n <div class={\"close-wrapper\"}>\r\n <span\r\n class={\"close-btn\"}\r\n onClick={() => onCloseTab(item.fullPath || \"\")}\r\n >\r\n <CloseOutlined />\r\n </span>\r\n </div>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n </>\r\n )\r\n }}\r\n </a-popover>\r\n </div>\r\n );\r\n }\r\n});\r\n"],"names":["name","setup","useToken","theme","token","getList","deleteTabs","useNavTabStore","keys","useMagicKeys","shiftCtrlA","open","ref","y","useWindowScroll","navTabList","computed","sort","a","b","openTime","watch","v","value","val","buttonToken","borderRadius","onCloseTab","path","searchStyle","css","colorBorder","searchListStyle","colorPrimaryBorder","colorPrimary","timeAgo","providedTime","now","dayjs","diffInSeconds","diff","diffInMinutes","diffInHours","_createVNode","_resolveComponent","$event","default","h","DownOutlined","content","_Fragment","prefix","SearchOutlined","suffix","color","_createTextVNode","map","item","UnorderedListOutlined","meta","title","window","location","hostname","onClick","fullPath","CloseOutlined"],"mappings":"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"}
|