From dac6928844dfa33031f6e8466bbb18b25ecf3124 Mon Sep 17 00:00:00 2001 From: minglipro Date: Tue, 1 Jul 2025 00:18:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20i18n=20=E9=87=8D=E5=86=99A?= =?UTF-8?q?PI=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- languageSchema.json | 22 ++- package.json | 3 + .../disk/config/SpringDocConfig.java | 14 +- .../disk/controller/IndexController.java | 3 +- .../mingliqiye/disk/util/LocalHostUtil.java | 78 ++++++++ vite.config.ts | 1 + web-src/App.vue | 11 +- web-src/assets/index.sass | 16 ++ web-src/assets/var.scss | 2 + web-src/components/MCode.vue | 25 +++ web-src/components/OpenApiDoc.vue | 181 ++++++++++++++++++ web-src/components/OpenApiDocMethod.vue | 83 ++++++++ web-src/components/OpenApiDocSchema.vue | 30 +++ .../components/OpenApiDocSecuritySchemes.vue | 30 +++ web-src/language/EN_US.json | 7 + web-src/language/ZH_CN.json | 7 + web-src/language/index.json | 9 +- web-src/layout/Head.vue | 66 ++++++- web-src/layout/Router.vue | 2 +- web-src/main.ts | 17 +- web-src/plugin/i18n/index.ts | 76 +++++++- web-src/plugin/i18n/type.ts | 18 ++ web-src/plugin/index.ts | 1 + web-src/plugin/stores/auth.ts | 4 +- web-src/plugin/stores/setting.ts | 13 ++ web-src/views/SwaggerView.vue | 15 +- 26 files changed, 677 insertions(+), 57 deletions(-) create mode 100644 src/main/java/com/mingliqiye/disk/util/LocalHostUtil.java create mode 100644 web-src/assets/index.sass create mode 100644 web-src/components/MCode.vue create mode 100644 web-src/components/OpenApiDoc.vue create mode 100644 web-src/components/OpenApiDocMethod.vue create mode 100644 web-src/components/OpenApiDocSchema.vue create mode 100644 web-src/components/OpenApiDocSecuritySchemes.vue create mode 100644 web-src/language/EN_US.json create mode 100644 web-src/language/ZH_CN.json create mode 100644 web-src/plugin/i18n/type.ts diff --git a/languageSchema.json b/languageSchema.json index e9fbb25..115d4e5 100644 --- a/languageSchema.json +++ b/languageSchema.json @@ -5,6 +5,12 @@ "description": "Schema for validating language configuration files", "type": "object", "properties": { + "$schema": { + "type": "string" + }, + "iconsUrl": { + "type": "string" + }, "languages": { "type": "array", "minItems": 1, @@ -13,24 +19,30 @@ "properties": { "title": { "type": "string", - "description": "Display name of the language", - "pattern": "^[\\w\\s-]+$" + "description": "显示的语言名", + "pattern": "^[\\p{L}\\p{N}\\s-]+$" }, "id": { "type": "string", - "description": "Language identifier in locale format", + "description": "语言ID", "pattern": "^[a-z]{2}-[a-z]{2}$" }, "file": { "type": "string", - "description": "Language file name", + "description": "语言文件在language文件夹的位置", "pattern": "^[A-Z]{2}_[A-Z]{2}\\.json$" + }, + "icon": { + "type": "string", + "description": "语言的图标", + "pattern": "^.*:.*$" } }, "required": [ "title", "id", - "file" + "file", + "icon" ], "additionalProperties": false } diff --git a/package.json b/package.json index 65b97bf..2faed4e 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ }, "dependencies": { "@iconify/vue": "^5.0.0", + "@intlify/vue-i18n-core": "^11.1.7", "@types/vue-router": "^2.0.0", "@vueuse/core": "^13.4.0", "naive-ui": "^2.42.0", @@ -42,10 +43,12 @@ "eslint": "^9.29.0", "eslint-plugin-oxlint": "~1.1.0", "eslint-plugin-vue": "~10.2.0", + "highlight.js": "^11.11.1", "jiti": "^2.4.2", "js-base64": "^3.7.7", "js-cookie": "^3.0.5", "npm-run-all2": "^8.0.4", + "openapi-types": "^12.1.3", "oxlint": "~1.1.0", "pinia-plugin-persistedstate": "^4.4.0", "prettier": "3.5.3", diff --git a/src/main/java/com/mingliqiye/disk/config/SpringDocConfig.java b/src/main/java/com/mingliqiye/disk/config/SpringDocConfig.java index 4a6b863..a2aedf4 100644 --- a/src/main/java/com/mingliqiye/disk/config/SpringDocConfig.java +++ b/src/main/java/com/mingliqiye/disk/config/SpringDocConfig.java @@ -11,6 +11,7 @@ import io.swagger.v3.oas.models.info.Contact; import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.info.License; import io.swagger.v3.oas.models.servers.Server; +import java.util.ArrayList; import java.util.List; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; @@ -42,16 +43,9 @@ public class SpringDocConfig { @Bean public OpenAPI openAPI() { - Server server = new Server(); - server.setUrl("/"); - server.setDescription("当前服务"); - Server server2 = new Server(); - server2.setUrl("http://localhost:" + config.getPort() + "/"); - server2.setDescription("本机服务"); - return new OpenAPI() - // 配置接口文档基本信息 - .info(this.getApiInfo()) - .servers(List.of(server, server2)); + List servers = new ArrayList<>(); + servers.add(new Server().description("当前网页").url("/")); + return new OpenAPI().info(this.getApiInfo()).servers(servers); } private Info getApiInfo() { diff --git a/src/main/java/com/mingliqiye/disk/controller/IndexController.java b/src/main/java/com/mingliqiye/disk/controller/IndexController.java index 6a1c291..74a9e6d 100644 --- a/src/main/java/com/mingliqiye/disk/controller/IndexController.java +++ b/src/main/java/com/mingliqiye/disk/controller/IndexController.java @@ -3,7 +3,6 @@ package com.mingliqiye.disk.controller; import io.swagger.v3.oas.annotations.tags.Tag; import java.io.InputStream; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; @@ -13,7 +12,7 @@ import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBo @Tag(name = "前端路由", description = "统一匹配路径指向VueRouter") public class IndexController { - @GetMapping(value = { "/", "/{path:^(?!static|apis|blob).*$}/**" }) + @RequestMapping(value = { "/", "/{path:^(?!static|apis|blob).*$}/**" }) public ResponseEntity index() { StreamingResponseBody streamingResponseBody = s -> { try (InputStream stream = this.getClass().getResourceAsStream("/html/index.html")) { diff --git a/src/main/java/com/mingliqiye/disk/util/LocalHostUtil.java b/src/main/java/com/mingliqiye/disk/util/LocalHostUtil.java new file mode 100644 index 0000000..664bcd6 --- /dev/null +++ b/src/main/java/com/mingliqiye/disk/util/LocalHostUtil.java @@ -0,0 +1,78 @@ +package com.mingliqiye.disk.util; + +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; + +/** + * 本地主机工具类 + * + * @author MingliPro + * @since 2019年11月13日09:04:36 + */ +public class LocalHostUtil { + + /** + * 获取主机名称 + * + * @return + * @throws UnknownHostException + */ + public static String getHostName() throws UnknownHostException { + return InetAddress.getLocalHost().getHostName(); + } + + /** + * 获取系统首选IP + * + * @return + * @throws UnknownHostException + */ + public static String getLocalIP() throws UnknownHostException { + return InetAddress.getLocalHost().getHostAddress(); + } + + /** + * 获取所有网卡IP,排除回文地址、虚拟地址 + * + * @return + * @throws SocketException + */ + public static String[] getLocalIPs() throws SocketException { + List list = new ArrayList<>(); + Enumeration enumeration = NetworkInterface.getNetworkInterfaces(); + while (enumeration.hasMoreElements()) { + NetworkInterface intf = enumeration.nextElement(); + if (intf.isLoopback() || intf.isVirtual()) { // + continue; + } + Enumeration inets = intf.getInetAddresses(); + while (inets.hasMoreElements()) { + InetAddress addr = inets.nextElement(); + if (addr.isLoopbackAddress() || !addr.isSiteLocalAddress() || addr.isAnyLocalAddress()) { + continue; + } + list.add(addr.getHostAddress()); + } + } + return list.toArray(new String[0]); + } + + /** + * 判断操作系统是否是Windows + * + * @return + */ + public static boolean isWindowsOS() { + boolean isWindowsOS = false; + String osName = System.getProperty("os.name"); + if (osName.toLowerCase().contains("windows")) { + isWindowsOS = true; + } + return isWindowsOS; + } +} diff --git a/vite.config.ts b/vite.config.ts index 4a575c6..2ad3df7 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -46,6 +46,7 @@ export default defineConfig({ }, server: { host: '0.0.0.0', + port: 5174, proxy: { '/apis': 'http://localhost:9963', }, diff --git a/web-src/App.vue b/web-src/App.vue index 5308a0f..543432a 100644 --- a/web-src/App.vue +++ b/web-src/App.vue @@ -1,5 +1,5 @@