From fdb9d31101c18dd5e4970c70d1096b6e4ea79fe5 Mon Sep 17 00:00:00 2001 From: Frost-ZX <30585462+Frost-ZX@users.noreply.github.com> Date: Sun, 20 Mar 2022 12:41:21 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=B7=A5=E5=85=B7=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=89=93=E5=BC=80=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/js/navTools.js | 93 +++++----- src/components/FloatingBtn.vue | 8 +- src/router/index.js | 4 +- src/router/routes.js | 37 ++-- src/router/tools.js | 40 +++++ src/views/AboutView.vue | 6 - src/views/HomeView.vue | 5 - src/views/SettingsView.vue | 6 - .../Tools/CalcDownloadTime.vue | 0 src/{components => views}/Tools/CalcRatio.vue | 0 .../Tools/ConvertEncodeDecode.vue | 0 .../Tools/ConvertTextStructure.vue | 0 .../Tools/ConvertTimestamp.vue | 0 src/{components => views}/Tools/GenLinks.vue | 0 .../Tools/GenRandomStr.vue | 0 .../Tools/MinecraftDynmapRenderdataGen.vue | 0 .../Tools/MinecraftUUIDConverter.vue | 0 .../Tools/OtherEditCSV.vue | 0 .../Tools/OtherNewWindow.vue | 0 .../Tools/OtherRunJS.vue | 0 .../Tools/OtherWebSocket.vue | 0 src/views/ToolsDetail.vue | 163 +++++++++++++----- src/views/ToolsView.vue | 157 ++--------------- 23 files changed, 256 insertions(+), 263 deletions(-) create mode 100644 src/router/tools.js rename src/{components => views}/Tools/CalcDownloadTime.vue (100%) rename src/{components => views}/Tools/CalcRatio.vue (100%) rename src/{components => views}/Tools/ConvertEncodeDecode.vue (100%) rename src/{components => views}/Tools/ConvertTextStructure.vue (100%) rename src/{components => views}/Tools/ConvertTimestamp.vue (100%) rename src/{components => views}/Tools/GenLinks.vue (100%) rename src/{components => views}/Tools/GenRandomStr.vue (100%) rename src/{components => views}/Tools/MinecraftDynmapRenderdataGen.vue (100%) rename src/{components => views}/Tools/MinecraftUUIDConverter.vue (100%) rename src/{components => views}/Tools/OtherEditCSV.vue (100%) rename src/{components => views}/Tools/OtherNewWindow.vue (100%) rename src/{components => views}/Tools/OtherRunJS.vue (100%) rename src/{components => views}/Tools/OtherWebSocket.vue (100%) diff --git a/src/assets/js/navTools.js b/src/assets/js/navTools.js index accb46b..c460545 100644 --- a/src/assets/js/navTools.js +++ b/src/assets/js/navTools.js @@ -1,5 +1,6 @@ /** * @typedef {object} ToolItem + * @property {string} name 工具名称 * @property {string} title 工具标题 * @property {string} [desc] 工具简介 * @property {string} component 组件名称 @@ -11,144 +12,158 @@ /** * @typedef {object} ToolCategory * @property {string} title 分类标题 - * @property {Object.} list 工具列表 + * @property {ToolItem[]} list 工具列表 */ /** @type {Object.} */ const navTools = { calculation: { title: '计算', - list: { - 'download-time': { + list: [ + { + name: 'calc-download-time', + component: 'CalcDownloadTime', title: '下载用时计算', desc: '根据设定的文件大小和下载速度简单计算大约下载完成所需的时间。', - component: 'CalcDownloadTime', update: '2021-12-06', version: '1', enabled: true }, - 'ratio': { + { + name: 'calc-ratio', + component: 'CalcRatio', title: '比例计算', desc: '按设定的比例计算给出的数值所对应的数值。', - component: 'CalcRatio', update: '2021-11-16', version: '2', enabled: true }, - } + ] }, generator: { title: '生成', - list: { - 'links': { + list: [ + { + name: 'gen-links', + component: 'GenLinks', title: '生成批量下载链接', desc: '根据设置,生成有一定规律的用于批量下载的链接。', - component: 'GenLinks', update: '2021-11-14', version: '1', enabled: true }, - 'random-str': { + { + name: 'gen-random-str', + component: 'GenRandomStr', title: '生成随机字符串', desc: '生成随机组合的字符串,可用于密码。', - component: 'GenRandomStr', update: '2021-05-04', version: '1', enabled: true }, - } + ] }, conversion: { title: '转换', - list: { - 'encode-decode': { + list: [ + { + name: 'convert-encode-decode', + component: 'ConvertEncodeDecode', title: '编码转换', desc: 'HTML / URI 编码、解码', - component: 'ConvertEncodeDecode', update: '2021-11-10', version: '1', enabled: true }, - 'text-structure': { + { + name: 'convert-text-structure', + component: 'ConvertTextStructure', title: '文本结构转换', desc: '倒序、横竖互换等', - component: 'ConvertTextStructure', update: '2021-12-06', version: '1', enabled: true, }, - 'timestamp': { + { + name: 'convert-timestamp', + component: 'ConvertTimestamp', title: 'Unix 时间戳转换', desc: '时间戳转时间 / 时间转时间戳', - component: 'ConvertTimestamp', update: '2021-11-14', version: '1', enabled: true }, - } + ] }, minecraft: { title: 'Minecraft', - list: { - 'chunk-location-calc': { - title: 'Minecraft 区块位置计算', + list: [ + { + name: 'minecraft-chunk-location-calc', component: 'MinecraftChunkLocationCalc', + title: 'Minecraft 区块位置计算', enabled: false }, - 'dynmap-renderdata-gen': { + { + name: 'minecraft-dynmap-renderdata-gen', + component: 'MinecraftDynmapRenderdataGen', title: 'Dynmap renderdata 生成', desc: '生成用于 Minecraft Dynmap 插件或模组的 renderdata 数据。', - component: 'MinecraftDynmapRenderdataGen', update: '2021-12-06', version: '1', enabled: true, }, - 'uuid-converter': { + { + name: 'minecraft-uuid-converter', + component: 'MinecraftUUIDConverter', title: 'Minecraft UUID 转换', desc: '随机生成或转换 Minecraft 的 UUID。', - component: 'MinecraftUUIDConverter', update: '2021-12-06', version: '1', enabled: true }, - } + ] }, other: { title: '其他', - list: { - 'edit-csv': { + list: [ + { + name: 'other-edit-csv', + component: 'OtherEditCSV', title: 'CSV 编辑工具', desc: '查看或编辑 CSV 文件', - component: 'OtherEditCSV', update: '2022-03-17', version: '2', enabled: true, }, - 'new-window': { + { + name: 'other-new-window', + component: 'OtherNewWindow', title: '新窗口(小窗)中打开', desc: '从新的小窗口中打开指定的链接(仅支持 PC 端浏览器)', - component: 'OtherNewWindow', update: '2021-05-03', version: '1', enabled: true }, - 'run-js': { + { + name: 'other-run-js', + component: 'OtherRunJS', title: '执行 JavaScript', desc: '执行简单的 JavaScript 代码片段', - component: 'OtherRunJS', update: '2021-06-14', version: '2', enabled: true }, - 'websocket': { + { + name: 'other-websocket', + component: 'OtherWebSocket', title: 'WebSocket', desc: 'WebSocket 测试工具', - component: 'OtherWebSocket', update: '2021-11-19', version: '4', enabled: true }, - } + ] } }; diff --git a/src/components/FloatingBtn.vue b/src/components/FloatingBtn.vue index b2e9b65..ba3cf57 100644 --- a/src/components/FloatingBtn.vue +++ b/src/components/FloatingBtn.vue @@ -64,14 +64,10 @@ export default { * 返回主页 */ backToHome() { - var routeName = 'Home'; + const routeName = 'Home'; if (this.$route.name != routeName) { - this.$router.push({ - name: routeName - }).then(() => { - window.location.reload(); - }); + this.$router.push({ name: routeName }); } else { this.$message({ duration: 2000, diff --git a/src/router/index.js b/src/router/index.js index 1d5297e..292077c 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -2,7 +2,8 @@ import Vue from 'vue'; import VueRouter from 'vue-router'; import routes from './routes'; -import config from '../assets/js/config'; +import config from '@/assets/js/config'; +import utils from '@/assets/js/utils'; Vue.use(VueRouter); @@ -23,6 +24,7 @@ router.afterEach((to) => { if (to.meta.loadingBar) { config.loading.subPage = false; } + utils.changeTitle(to.meta.title); }); export default router; diff --git a/src/router/routes.js b/src/router/routes.js index 308a673..67422e5 100644 --- a/src/router/routes.js +++ b/src/router/routes.js @@ -1,10 +1,13 @@ +import tools from './tools'; + /** @type { import('vue-router').RouteConfig[] } */ const routes = [ { path: '/', name: 'Home', meta: { - loadingBar: true + loadingBar: true, + title: '主页', }, component: () => import( /* webpackChunkName: 'home-view' */ @@ -15,28 +18,33 @@ const routes = [ path: '/tools', name: 'Tools', meta: { - loadingBar: true + loadingBar: true, + title: '小工具', }, component: () => import( /* webpackChunkName: 'tools-view' */ '@/views/ToolsView.vue' + ) + }, + { + path: '/tool', + name: 'Tool', + meta: { + loadingBar: true, + title: '小工具', + }, + component: () => import( + /* webpackChunkName: 'tools-detail' */ + '@/views/ToolsDetail.vue' ), - children: [ - { - path: '/tools/:category/:name', - name: 'ToolsDetail', - component: () => import( - /* webpackChunkName: 'tools-detail' */ - '@/views/ToolsDetail.vue' - ) - } - ] + children: tools }, { path: '/settings', name: 'Settings', meta: { - loadingBar: true + loadingBar: true, + title: '设置', }, component: () => import( /* webpackChunkName: 'settings-view' */ @@ -47,7 +55,8 @@ const routes = [ path: '/about', name: 'About', meta: { - loadingBar: true + loadingBar: true, + title: '关于', }, component: () => import( /* webpackChunkName: 'about-view' */ diff --git a/src/router/tools.js b/src/router/tools.js new file mode 100644 index 0000000..b38f32b --- /dev/null +++ b/src/router/tools.js @@ -0,0 +1,40 @@ +import navTools from '@/assets/js/navTools'; + +/** @type { import('vue-router').RouteConfig[] } */ +const routes = []; + +// 提取工具列表信息,添加到路由 +for (let categoryName in navTools) { + + const toolList = (navTools[categoryName].list || []); + + toolList.forEach((toolItem) => { + const { + name: toolName = null, + component = null, + title = '未知', + update = '', + version = '', + } = toolItem; + + if (toolName === null || component === null) { + console.warn('部分小工具未设置工具名称或组件名称。'); + return; + } + + routes.push({ + path: `/tool/${toolName}`, + name: `Tool${component}`, + meta: { + loadingBar: true, + title, + update, + version, + }, + component: () => import(`@/views/Tools/${component}.vue`) + }); + }); + +} + +export default routes; diff --git a/src/views/AboutView.vue b/src/views/AboutView.vue index c44142a..ad1a5c2 100644 --- a/src/views/AboutView.vue +++ b/src/views/AboutView.vue @@ -43,15 +43,9 @@