From 68aec74c80542de068ec09ea31e239f3216a3039 Mon Sep 17 00:00:00 2001 From: Frost-ZX Date: Fri, 6 Sep 2024 20:45:13 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=B7=A5=E5=85=B7=E7=AE=B1):=20=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E9=80=BB=E8=BE=91=EF=BC=8C=E5=8A=A8=E6=80=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=E8=B7=AF=E7=94=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/js/toolbox-data.js | 49 ++++++++++++++- src/router/index.js | 6 ++ .../Calculation/CalcDownloadTime.vue | 9 +++ .../ToolboxView/Calculation/CalcRatio.vue | 9 +++ .../Conversion/ConvertHtmlEntities.vue | 9 +++ .../Conversion/ConvertTextStructure.vue | 9 +++ .../Conversion/ConvertTimestamp.vue | 9 +++ .../Conversion/UrlEncodeDecode.vue | 9 +++ src/views/ToolboxView/Edit/CsvEditor.vue | 9 +++ .../Generator/GenerateRandomString.vue | 9 +++ .../ToolboxView/Generator/GenerateUrls.vue | 9 +++ .../Minecraft/CalcChunkLocation.vue | 9 +++ .../Minecraft/GenerateDynmapRenderdata.vue | 9 +++ .../ToolboxView/Minecraft/UuidConverter.vue | 9 +++ .../ToolboxView/Network/WebSocketTestTool.vue | 9 +++ src/views/ToolboxView/Other/OpenNewWindow.vue | 9 +++ src/views/ToolboxView/Other/RunJavaScript.vue | 9 +++ src/views/ToolboxView/ToolboxView.vue | 60 +++++++++++++++++-- 18 files changed, 243 insertions(+), 7 deletions(-) create mode 100644 src/views/ToolboxView/Calculation/CalcDownloadTime.vue create mode 100644 src/views/ToolboxView/Calculation/CalcRatio.vue create mode 100644 src/views/ToolboxView/Conversion/ConvertHtmlEntities.vue create mode 100644 src/views/ToolboxView/Conversion/ConvertTextStructure.vue create mode 100644 src/views/ToolboxView/Conversion/ConvertTimestamp.vue create mode 100644 src/views/ToolboxView/Conversion/UrlEncodeDecode.vue create mode 100644 src/views/ToolboxView/Edit/CsvEditor.vue create mode 100644 src/views/ToolboxView/Generator/GenerateRandomString.vue create mode 100644 src/views/ToolboxView/Generator/GenerateUrls.vue create mode 100644 src/views/ToolboxView/Minecraft/CalcChunkLocation.vue create mode 100644 src/views/ToolboxView/Minecraft/GenerateDynmapRenderdata.vue create mode 100644 src/views/ToolboxView/Minecraft/UuidConverter.vue create mode 100644 src/views/ToolboxView/Network/WebSocketTestTool.vue create mode 100644 src/views/ToolboxView/Other/OpenNewWindow.vue create mode 100644 src/views/ToolboxView/Other/RunJavaScript.vue diff --git a/src/assets/js/toolbox-data.js b/src/assets/js/toolbox-data.js index 02995b0..0a0329e 100644 --- a/src/assets/js/toolbox-data.js +++ b/src/assets/js/toolbox-data.js @@ -1,8 +1,7 @@ // 工具箱 -// import { -// defineAsyncComponent, -// } from 'vue'; +const META_URL = import.meta.url; +const MODULES = import.meta.glob('@/views/ToolboxView/**/*.vue'); /** * @desc 工具列表 @@ -217,3 +216,47 @@ export const toolList = [ ], }, ]; + +/** + * @description 获取动态组件 + * @param {string} path 工具页面相对路径 + */ +function getDynamicComponent(path) { + + let key = new URL(`../../views/ToolboxView/${path}.vue`, META_URL).pathname; + let component = MODULES[key]; + + return component; + +} + +/** 生成工具箱页面路由 */ +export function getToolboxRoutes() { + + /** @type {VueRouteRecordRaw[]} */ + let routes = []; + + toolList.forEach((categoryItem) => { + categoryItem.items.forEach((toolItem) => { + + // 跳过未启用的工具 + if (!toolItem.enabled) { + return; + } + + routes.push({ + path: `/toolbox-view/${toolItem.id}`, + name: `Toolbox/${toolItem.component}`, + component: getDynamicComponent(toolItem.component), + meta: { + isToolDetail: true, + title: toolItem.title, + }, + }); + + }); + }); + + return routes; + +} diff --git a/src/router/index.js b/src/router/index.js index f937e32..513a475 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -3,6 +3,10 @@ import { createWebHashHistory, } from 'vue-router'; +import { + getToolboxRoutes, +} from '@/assets/js/toolbox-data'; + import { updateAppTitle, } from '@/assets/js/utils'; @@ -62,9 +66,11 @@ export const router = createRouter({ component: () => import('@/views/ToolboxView/ToolboxView.vue'), meta: { iconClass: 'mdi mdi-tools', + isToolDetail: false, showInAside: TOOLBOX_MODULE_ENABLED, title: TOOLBOX_MODULE_TITLE, }, + children: getToolboxRoutes(), }, { path: '/minecraft-ctrl-view', diff --git a/src/views/ToolboxView/Calculation/CalcDownloadTime.vue b/src/views/ToolboxView/Calculation/CalcDownloadTime.vue new file mode 100644 index 0000000..714cdbc --- /dev/null +++ b/src/views/ToolboxView/Calculation/CalcDownloadTime.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/views/ToolboxView/Calculation/CalcRatio.vue b/src/views/ToolboxView/Calculation/CalcRatio.vue new file mode 100644 index 0000000..714cdbc --- /dev/null +++ b/src/views/ToolboxView/Calculation/CalcRatio.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/views/ToolboxView/Conversion/ConvertHtmlEntities.vue b/src/views/ToolboxView/Conversion/ConvertHtmlEntities.vue new file mode 100644 index 0000000..714cdbc --- /dev/null +++ b/src/views/ToolboxView/Conversion/ConvertHtmlEntities.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/views/ToolboxView/Conversion/ConvertTextStructure.vue b/src/views/ToolboxView/Conversion/ConvertTextStructure.vue new file mode 100644 index 0000000..714cdbc --- /dev/null +++ b/src/views/ToolboxView/Conversion/ConvertTextStructure.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/views/ToolboxView/Conversion/ConvertTimestamp.vue b/src/views/ToolboxView/Conversion/ConvertTimestamp.vue new file mode 100644 index 0000000..714cdbc --- /dev/null +++ b/src/views/ToolboxView/Conversion/ConvertTimestamp.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/views/ToolboxView/Conversion/UrlEncodeDecode.vue b/src/views/ToolboxView/Conversion/UrlEncodeDecode.vue new file mode 100644 index 0000000..714cdbc --- /dev/null +++ b/src/views/ToolboxView/Conversion/UrlEncodeDecode.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/views/ToolboxView/Edit/CsvEditor.vue b/src/views/ToolboxView/Edit/CsvEditor.vue new file mode 100644 index 0000000..714cdbc --- /dev/null +++ b/src/views/ToolboxView/Edit/CsvEditor.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/views/ToolboxView/Generator/GenerateRandomString.vue b/src/views/ToolboxView/Generator/GenerateRandomString.vue new file mode 100644 index 0000000..714cdbc --- /dev/null +++ b/src/views/ToolboxView/Generator/GenerateRandomString.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/views/ToolboxView/Generator/GenerateUrls.vue b/src/views/ToolboxView/Generator/GenerateUrls.vue new file mode 100644 index 0000000..714cdbc --- /dev/null +++ b/src/views/ToolboxView/Generator/GenerateUrls.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/views/ToolboxView/Minecraft/CalcChunkLocation.vue b/src/views/ToolboxView/Minecraft/CalcChunkLocation.vue new file mode 100644 index 0000000..714cdbc --- /dev/null +++ b/src/views/ToolboxView/Minecraft/CalcChunkLocation.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/views/ToolboxView/Minecraft/GenerateDynmapRenderdata.vue b/src/views/ToolboxView/Minecraft/GenerateDynmapRenderdata.vue new file mode 100644 index 0000000..714cdbc --- /dev/null +++ b/src/views/ToolboxView/Minecraft/GenerateDynmapRenderdata.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/views/ToolboxView/Minecraft/UuidConverter.vue b/src/views/ToolboxView/Minecraft/UuidConverter.vue new file mode 100644 index 0000000..714cdbc --- /dev/null +++ b/src/views/ToolboxView/Minecraft/UuidConverter.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/views/ToolboxView/Network/WebSocketTestTool.vue b/src/views/ToolboxView/Network/WebSocketTestTool.vue new file mode 100644 index 0000000..714cdbc --- /dev/null +++ b/src/views/ToolboxView/Network/WebSocketTestTool.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/views/ToolboxView/Other/OpenNewWindow.vue b/src/views/ToolboxView/Other/OpenNewWindow.vue new file mode 100644 index 0000000..714cdbc --- /dev/null +++ b/src/views/ToolboxView/Other/OpenNewWindow.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/views/ToolboxView/Other/RunJavaScript.vue b/src/views/ToolboxView/Other/RunJavaScript.vue new file mode 100644 index 0000000..714cdbc --- /dev/null +++ b/src/views/ToolboxView/Other/RunJavaScript.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/views/ToolboxView/ToolboxView.vue b/src/views/ToolboxView/ToolboxView.vue index d884163..0fac7e0 100644 --- a/src/views/ToolboxView/ToolboxView.vue +++ b/src/views/ToolboxView/ToolboxView.vue @@ -1,9 +1,11 @@ @@ -49,13 +62,43 @@ import { NCollapse, NCollapseItem, NEllipsis, } from 'naive-ui'; +import { + computed, +} from 'vue'; + +import { + useRoute, useRouter, +} from 'vue-router'; + import { toolList, } from '@/assets/js/toolbox-data'; -import { - TOOLBOX_MODULE_TITLE, -} from '@/config/modules'; +/** 是否为工具页面 */ +const isToolDetail = computed(() => { + return route.meta.isToolDetail; +}); + +/** 路由 */ +const route = useRoute(); + +/** 路由 */ +const router = useRouter(); + +/** 页面标题 */ +const routeTitle = computed(() => { + return route.meta.title; +}); + +/** + * @description 打开工具 + * @param {ToolboxItem} data + */ +function handleOpenTool(data) { + router.push({ + name: `Toolbox/${data.component}`, + }); +}