From 3c6f8714d221635114c032cda42b06d5dd8093dc Mon Sep 17 00:00:00 2001 From: moecinnamo Date: Sun, 23 Nov 2025 22:59:31 +0800 Subject: [PATCH] New API-driven architecture --- api/cn.yaohud.api.go | 1 + api/cn.yuafeng.api-v2.go | 1 + api/cn.yuafeng.api.go | 1 + config.example.json | 3 ++- internal/handler/web/css/style.css | 14 ++++++++++++++ .../handler/web/img/26-Tahoe-Light-1024.webp | Bin 0 -> 18318 bytes internal/handler/web/install.html | 1 + internal/handler/web/js/install.js | 9 +++++++++ internal/service/struct.go | 1 + 9 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 api/cn.yaohud.api.go create mode 100644 api/cn.yuafeng.api-v2.go create mode 100644 api/cn.yuafeng.api.go create mode 100644 internal/handler/web/img/26-Tahoe-Light-1024.webp create mode 100644 internal/handler/web/js/install.js diff --git a/api/cn.yaohud.api.go b/api/cn.yaohud.api.go new file mode 100644 index 0000000..778f64e --- /dev/null +++ b/api/cn.yaohud.api.go @@ -0,0 +1 @@ +package api diff --git a/api/cn.yuafeng.api-v2.go b/api/cn.yuafeng.api-v2.go new file mode 100644 index 0000000..778f64e --- /dev/null +++ b/api/cn.yuafeng.api-v2.go @@ -0,0 +1 @@ +package api diff --git a/api/cn.yuafeng.api.go b/api/cn.yuafeng.api.go new file mode 100644 index 0000000..778f64e --- /dev/null +++ b/api/cn.yuafeng.api.go @@ -0,0 +1 @@ +package api diff --git a/config.example.json b/config.example.json index e9de6ab..8634437 100644 --- a/config.example.json +++ b/config.example.json @@ -28,6 +28,7 @@ "username": "root", "password": "password", "database": "meowbox", - "prefix": "box_" + "prefix": "box_", + "file_path": "" } } \ No newline at end of file diff --git a/internal/handler/web/css/style.css b/internal/handler/web/css/style.css index e69de29..4628a21 100644 --- a/internal/handler/web/css/style.css +++ b/internal/handler/web/css/style.css @@ -0,0 +1,14 @@ +/* Global styles */ +html, +body { + margin: 0; + padding: 0; + overflow: hidden; +} + +/* Main styles */ +.container { + height: 100vh; + background: url('/img/background.webp') no-repeat center center fixed; + background-size: cover; +} \ No newline at end of file diff --git a/internal/handler/web/img/26-Tahoe-Light-1024.webp b/internal/handler/web/img/26-Tahoe-Light-1024.webp new file mode 100644 index 0000000000000000000000000000000000000000..62f0ec4c767765ea8b19e5b3bca46875fd31f6c7 GIT binary patch literal 18318 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 literal 0 HcmV?d00001 diff --git a/internal/handler/web/install.html b/internal/handler/web/install.html index ead1a40..096b584 100644 --- a/internal/handler/web/install.html +++ b/internal/handler/web/install.html @@ -6,6 +6,7 @@ + diff --git a/internal/handler/web/js/install.js b/internal/handler/web/js/install.js new file mode 100644 index 0000000..18d01bc --- /dev/null +++ b/internal/handler/web/js/install.js @@ -0,0 +1,9 @@ +function install() { + document.title = "安装程序 - MeowBox"; + const container = document.createElement('div'); + container.classList.add('container'); + document.body.appendChild(container); +} +document.addEventListener('DOMContentLoaded', () => { + install(); +}); \ No newline at end of file diff --git a/internal/service/struct.go b/internal/service/struct.go index 1331da9..6bde49e 100644 --- a/internal/service/struct.go +++ b/internal/service/struct.go @@ -32,6 +32,7 @@ type Config struct { Password string `json:"password"` Database string `json:"database"` Prefix string `json:"prefix"` + FilePath string `json:"file_path"` } `json:"database"` }