From ff86241a10c0f3187565a7ad5df939725b962e86 Mon Sep 17 00:00:00 2001 From: eternal-pudding Date: Thu, 6 Aug 2026 01:23:49 +0800 Subject: [PATCH 1/6] =?UTF-8?q?feat(frontend):=20=E6=90=AD=E5=BB=BA=20Vue3?= =?UTF-8?q?=20+=20Naive=20UI=20=E5=89=8D=E7=AB=AF=E9=AA=A8=E6=9E=B6?= =?UTF-8?q?=E4=B8=8E=E9=A6=96=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/.gitignore | 24 +++++ frontend/README.md | 13 +++ frontend/bun.lock | 178 ++++++++++++++++++++++++++++++++++++ frontend/index.html | 13 +++ frontend/package.json | 19 ++++ frontend/public/favicon.svg | 7 ++ frontend/src/App.vue | 126 +++++++++++++++++++++++++ frontend/src/main.js | 5 + frontend/src/style.css | 135 +++++++++++++++++++++++++++ frontend/vite.config.js | 16 ++++ 10 files changed, 536 insertions(+) create mode 100644 frontend/.gitignore create mode 100644 frontend/README.md create mode 100644 frontend/bun.lock create mode 100644 frontend/index.html create mode 100644 frontend/package.json create mode 100644 frontend/public/favicon.svg create mode 100644 frontend/src/App.vue create mode 100644 frontend/src/main.js create mode 100644 frontend/src/style.css create mode 100644 frontend/vite.config.js diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..1b7f547 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,13 @@ +# frontend(docwise-web 前端) + +Vue 3 + Vite + Naive UI。技术约定:优先使用 bun。 + +## 启动 + +```bash +bun install +bun dev +``` + +开发服务器默认运行在 http://127.0.0.1:5173 ,`/api` 会代理到 +http://127.0.0.1:8000(后端)。请先启动 backend 再访问首页。 diff --git a/frontend/bun.lock b/frontend/bun.lock new file mode 100644 index 0000000..8d0a29f --- /dev/null +++ b/frontend/bun.lock @@ -0,0 +1,178 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "frontend", + "dependencies": { + "naive-ui": "^2.44.1", + "vue": "^3.5.40", + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.8", + "vite": "^8.2.0", + }, + }, + }, + "packages": { + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.29.7", "", {}, "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="], + + "@babel/parser": ["@babel/parser@7.29.8", "", { "dependencies": { "@babel/types": "^7.29.8" }, "bin": "./bin/babel-parser.js" }, "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA=="], + + "@babel/types": ["@babel/types@7.29.8", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg=="], + + "@css-render/plugin-bem": ["@css-render/plugin-bem@0.15.14", "", { "peerDependencies": { "css-render": "~0.15.14" } }, "sha512-QK513CJ7yEQxm/P3EwsI+d+ha8kSOcjGvD6SevM41neEMxdULE+18iuQK6tEChAWMOQNQPLG/Rw3Khb69r5neg=="], + + "@css-render/vue3-ssr": ["@css-render/vue3-ssr@0.15.14", "", { "peerDependencies": { "vue": "^3.0.11" } }, "sha512-//8027GSbxE9n3QlD73xFY6z4ZbHbvrOVB7AO6hsmrEzGbg+h2A09HboUyDgu+xsmj7JnvJD39Irt+2D0+iV8g=="], + + "@emotion/hash": ["@emotion/hash@0.8.0", "", {}, "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@juggle/resize-observer": ["@juggle/resize-observer@3.4.0", "", {}, "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA=="], + + "@oxc-project/types": ["@oxc-project/types@0.143.0", "", {}, "sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA=="], + + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.2.3", "", { "os": "android", "cpu": "arm64" }, "sha512-zrJtHDcaZJ1Fp7xf4hNl+7seH9Cn/N5TwLYkhgXREtBwAd/jaqW3uqeHxpDugJLVICWg4eW44kOQEGJ1r6jCGw=="], + + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.2.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ieIiibVCp0tX7TLu2cafoNPv8wJyYi01ekXpbf8q2j7F4rGAhhXb/eQh7ge9DRBY78GwmRQtvjZDux7EDbA8kA=="], + + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.2.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-Zh9tCon19eDXJoihx0rqKhMUlMYqzwj3aPsSuHmI4RWZh62dWUL+DJN4C5YQya5TcQBJU/Fe8+rY0jhXTQITqA=="], + + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.2.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-nGbJWewA1wrXXZiQhjAT5rhibGfns5ZNkDVqxsO6zJ3f3YvpoDNNmGMSbbhLuXKjNScaBJVOAboztAWVespQMg=="], + + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.2.3", "", { "os": "linux", "cpu": "arm" }, "sha512-QNniJr5Kml0kDEB98jiDOJjXNroxIIi0IXIbdYzY26Xt1pVbeP62+KnoIZLwirOymX/0jDk/2gI/bNUv7A7OIw=="], + + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.2.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-TkqEAcmmvH3I/q4114NB4RVt6241Dao48pF45uLcFGrwAaIn0iITgTAKP/dLjbN0R4buJjGb91+UHSoFmpgIWw=="], + + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.2.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-NHqjnxpsndf4MPymxteFAWHHfkTL8HjWh1KB7z23ofZ6QO2euONuxDXjat69dKZRALnGypg8k8SsK8vZJoXv1Q=="], + + "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.2.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-6tbrbwfz5GB9DQ4Jwo6hy9v+vR31xZlvzZ6n5Xut6Hhx5PvrA9q/HsK8KMaYQp063iqZGXwNvZtYNLD7EM/x0w=="], + + "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.2.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-oyuXxXmoZHjXC917IAPFAAv4wWAa0cM9afk8nx1+9/jNNOX1uPf8yDA6p7G0RypOfw/X0PQt5IfoquY1um+zSg=="], + + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.2.3", "", { "os": "linux", "cpu": "x64" }, "sha512-TytMwF2KVGqP2tgd0I1OY0PAv78dZRAYcF5ssDzjM34SUXCED3uXvSd5+lHoC0bTD6eEdFz7LdQNCO1y0oVk9w=="], + + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.2.3", "", { "os": "linux", "cpu": "x64" }, "sha512-/E9m3qstrJFVPoULV25mVQblSNExY2+kBsYe4sy0Tn0yOOgJ8wZbZt3KnRbF/XeU2Gl1STKUQnDNTqhIE5MD4A=="], + + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.2.3", "", { "os": "none", "cpu": "arm64" }, "sha512-Kr0OcsoQI816i6HOl3vFHpd1K0eZyh76zgfj4c1nTyaTsd5r2Mj1lwM4R90y/qaCfmTn9eHy0SKwi98eitRxug=="], + + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.2.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-hOtMwTqnME+/gJcH/PCZ0wn0zPUjiWOgkHpxbSJpfGKMezHltx1S7/k1SitzVa7Ww2cqrDDaFbZEhcJZO8o+Jw=="], + + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.2.3", "", { "os": "win32", "cpu": "x64" }, "sha512-ekcqMMkI2PlhYnfzQnB/cEdYUVVJViWvoUyLrbzgDoi3Snfc1mVBwdnc306ufA5ejy8JSPjT2RlW1nQSjW7efg=="], + + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], + + "@types/lodash": ["@types/lodash@4.17.25", "", {}, "sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ=="], + + "@types/lodash-es": ["@types/lodash-es@4.17.12", "", { "dependencies": { "@types/lodash": "*" } }, "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ=="], + + "@vitejs/plugin-vue": ["@vitejs/plugin-vue@6.0.8", "", { "dependencies": { "@rolldown/pluginutils": "^1.0.1" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", "vue": "^3.2.25" } }, "sha512-0ZjgOg7oO6farnNGup7yvoM/YXZV84OZxHAwtflItNa/6zzQyVb5LNxyea3FEKEX2XlagIKzrlH7wwxkKgtiew=="], + + "@vue/compiler-core": ["@vue/compiler-core@3.5.41", "", { "dependencies": { "@babel/parser": "^7.29.8", "@vue/shared": "3.5.41", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-q0Xtv/F9w2YO/7htQhtiL+Ev2WCJbe5N2hc+XfgyKkEKqWpSxknmT8QOuGdEKNdjPq0c3F7rNpFkTo3Kfrm7pg=="], + + "@vue/compiler-dom": ["@vue/compiler-dom@3.5.41", "", { "dependencies": { "@vue/compiler-core": "3.5.41", "@vue/shared": "3.5.41" } }, "sha512-oKacVfNglLvGjnS6BXOlGL7EyG2h8X03pqXCjzotRZUaXGjbrTJUnVAQjrCqUnS+lyu31nwQjZY/d817GmCnfw=="], + + "@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.41", "", { "dependencies": { "@babel/parser": "^7.29.8", "@vue/compiler-core": "3.5.41", "@vue/compiler-dom": "3.5.41", "@vue/compiler-ssr": "3.5.41", "@vue/shared": "3.5.41", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.19", "source-map-js": "^1.2.1" } }, "sha512-XJhip7R2wy6vX3knCxdZN4KracFaZUef58s1KYewqluedHIJaPIVfXoYT7MF1F8nCvv6k8bWWxDC8opMkg1VTQ=="], + + "@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.41", "", { "dependencies": { "@vue/compiler-dom": "3.5.41", "@vue/shared": "3.5.41" } }, "sha512-U3v5OejKEGqOI0Wy0+Sz7hGuIFZHA4LSXzrNM3IMIeDyJEBBfTpX26n3SDgToRpP2bLc9FfI2j/kSgcJ8Emq5A=="], + + "@vue/reactivity": ["@vue/reactivity@3.5.41", "", { "dependencies": { "@vue/shared": "3.5.41" } }, "sha512-rznsqKM0np0x18EjzF8x88MpEhdNsffbvFbckLL5+oUKz1BxAImEmO7J1ArRYSyo6aQaVoBDp7jEkT91OOxydA=="], + + "@vue/runtime-core": ["@vue/runtime-core@3.5.41", "", { "dependencies": { "@vue/reactivity": "3.5.41", "@vue/shared": "3.5.41" } }, "sha512-Vcry58hiAKwGen9Z1jUZE0feFsNArPCMOImYI8el48A9Idf6DuQYD0U05zZIF2Iad1hGhPSvcbBbAOhNr55fhg=="], + + "@vue/runtime-dom": ["@vue/runtime-dom@3.5.41", "", { "dependencies": { "@vue/reactivity": "3.5.41", "@vue/runtime-core": "3.5.41", "@vue/shared": "3.5.41", "csstype": "^3.2.3" } }, "sha512-3vVBahVBS9+U6cmXBLyb8nE6/yYo4J/CGI9eVFs3KiMc0YHuudwKyShTD65jtJy/L9PUUxNAFu4cj4LiJ0UFbw=="], + + "@vue/server-renderer": ["@vue/server-renderer@3.5.41", "", { "dependencies": { "@vue/compiler-ssr": "3.5.41", "@vue/runtime-dom": "3.5.41", "@vue/shared": "3.5.41" } }, "sha512-n6hx/pNFfbD6SuyeuMVkvqox8bwf/ET9JlA/kAz/imw8sw++wkqKe2mHX5KutjPpbKE4Z56yTHszoOjGMI9igQ=="], + + "@vue/shared": ["@vue/shared@3.5.41", "", {}, "sha512-IOnwSCma8j+9xJT6b8H0dEYidC80NsYmNMlZxRsukYcSoGaDBohog5hDxzeUXdFeGWFA++vWvxqOmrr96VlqMA=="], + + "async-validator": ["async-validator@4.2.5", "", {}, "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="], + + "css-render": ["css-render@0.15.14", "", { "dependencies": { "@emotion/hash": "~0.8.0", "csstype": "~3.0.5" } }, "sha512-9nF4PdUle+5ta4W5SyZdLCCmFd37uVimSjg1evcTqKJCyvCEEj12WKzOSBNak6r4im4J4iYXKH1OWpUV5LBYFg=="], + + "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], + + "date-fns": ["date-fns@4.4.0", "", {}, "sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w=="], + + "date-fns-tz": ["date-fns-tz@3.2.0", "", { "peerDependencies": { "date-fns": "^3.0.0 || ^4.0.0" } }, "sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ=="], + + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + + "entities": ["entities@7.0.1", "", {}, "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="], + + "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + + "evtd": ["evtd@0.2.4", "", {}, "sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "highlight.js": ["highlight.js@11.11.1", "", {}, "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w=="], + + "lightningcss": ["lightningcss@1.33.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.33.0", "lightningcss-darwin-arm64": "1.33.0", "lightningcss-darwin-x64": "1.33.0", "lightningcss-freebsd-x64": "1.33.0", "lightningcss-linux-arm-gnueabihf": "1.33.0", "lightningcss-linux-arm64-gnu": "1.33.0", "lightningcss-linux-arm64-musl": "1.33.0", "lightningcss-linux-x64-gnu": "1.33.0", "lightningcss-linux-x64-musl": "1.33.0", "lightningcss-win32-arm64-msvc": "1.33.0", "lightningcss-win32-x64-msvc": "1.33.0" } }, "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA=="], + + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.33.0", "", { "os": "android", "cpu": "arm64" }, "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.33.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.33.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.33.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.33.0", "", { "os": "linux", "cpu": "arm" }, "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.33.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.33.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.33.0", "", { "os": "linux", "cpu": "x64" }, "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.33.0", "", { "os": "linux", "cpu": "x64" }, "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.33.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.33.0", "", { "os": "win32", "cpu": "x64" }, "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA=="], + + "lodash": ["lodash@4.18.1", "", {}, "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="], + + "lodash-es": ["lodash-es@4.18.1", "", {}, "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A=="], + + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "naive-ui": ["naive-ui@2.44.1", "", { "dependencies": { "@css-render/plugin-bem": "^0.15.14", "@css-render/vue3-ssr": "^0.15.14", "@types/lodash": "^4.17.20", "@types/lodash-es": "^4.17.12", "async-validator": "^4.2.5", "css-render": "^0.15.14", "csstype": "^3.1.3", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "evtd": "^0.2.4", "highlight.js": "^11.8.0", "lodash": "^4.17.21", "lodash-es": "^4.17.21", "seemly": "^0.3.10", "treemate": "^0.3.11", "vdirs": "^0.1.8", "vooks": "^0.2.12", "vueuc": "^0.4.65" }, "peerDependencies": { "vue": "^3.0.0" } }, "sha512-reo8Esw0p58liZwbUutC7meW24Xbn3EwNv91zReWKm2W4JPu+zfgJRn/F7aO0BFmvN+h2brA2M5lRvYqLq4kuA=="], + + "nanoid": ["nanoid@3.3.17", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.5", "", {}, "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A=="], + + "postcss": ["postcss@8.5.25", "", { "dependencies": { "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw=="], + + "rolldown": ["rolldown@1.2.3", "", { "dependencies": { "@oxc-project/types": "=0.143.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.2.3", "@rolldown/binding-darwin-arm64": "1.2.3", "@rolldown/binding-darwin-x64": "1.2.3", "@rolldown/binding-freebsd-x64": "1.2.3", "@rolldown/binding-linux-arm-gnueabihf": "1.2.3", "@rolldown/binding-linux-arm64-gnu": "1.2.3", "@rolldown/binding-linux-arm64-musl": "1.2.3", "@rolldown/binding-linux-ppc64-gnu": "1.2.3", "@rolldown/binding-linux-s390x-gnu": "1.2.3", "@rolldown/binding-linux-x64-gnu": "1.2.3", "@rolldown/binding-linux-x64-musl": "1.2.3", "@rolldown/binding-openharmony-arm64": "1.2.3", "@rolldown/binding-win32-arm64-msvc": "1.2.3", "@rolldown/binding-win32-x64-msvc": "1.2.3" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-rn9wpmxplLf7NLNyCk9FyWh3FM43DbY8jOzCdEPzH7uflhTftRbCEpqi6Ly2osgoU8OwObtmavMbWLaWy4LX7A=="], + + "seemly": ["seemly@0.3.10", "", {}, "sha512-2+SMxtG1PcsL0uyhkumlOU6Qo9TAQ/WyH7tthnPIOQB05/12jz9naq6GZ6iZ6ApVsO3rr2gsnTf3++OV63kE1Q=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], + + "treemate": ["treemate@0.3.11", "", {}, "sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg=="], + + "vdirs": ["vdirs@0.1.8", "", { "dependencies": { "evtd": "^0.2.2" }, "peerDependencies": { "vue": "^3.0.11" } }, "sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw=="], + + "vite": ["vite@8.2.0", "", { "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.5", "postcss": "^8.5.23", "rolldown": "~1.2.0", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.4.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-pn+CFpM0lwDeKwmOq1ZaBK/9sjorZcgqxki6MbY/jPEVd9vichIlmlD4HmQ5wdP5EgqQCFRaACBxMC7uEGc6lQ=="], + + "vooks": ["vooks@0.2.12", "", { "dependencies": { "evtd": "^0.2.2" }, "peerDependencies": { "vue": "^3.0.0" } }, "sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q=="], + + "vue": ["vue@3.5.41", "", { "dependencies": { "@vue/compiler-dom": "3.5.41", "@vue/compiler-sfc": "3.5.41", "@vue/runtime-dom": "3.5.41", "@vue/server-renderer": "3.5.41", "@vue/shared": "3.5.41" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-2laE0p+aK+/AOPG/XL/WepOs/GlK755LJ1XECi9kDUrz1FKNw8rb2Xzlw9JS1rqEV55nb0ttsKxVlTCcd+R5cg=="], + + "vueuc": ["vueuc@0.4.65", "", { "dependencies": { "@css-render/vue3-ssr": "^0.15.10", "@juggle/resize-observer": "^3.3.1", "css-render": "^0.15.10", "evtd": "^0.2.4", "seemly": "^0.3.6", "vdirs": "^0.1.4", "vooks": "^0.2.4" }, "peerDependencies": { "vue": "^3.0.11" } }, "sha512-lXuMl+8gsBmruudfxnMF9HW4be8rFziylXFu1VHVNbLVhRTXXV4njvpRuJapD/8q+oFEMSfQMH16E/85VoWRyQ=="], + + "css-render/csstype": ["csstype@3.0.11", "", {}, "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw=="], + } +} diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..940a4bd --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + docwise-web · 文档翻译智能体 + + +
+ + + diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..26202ef --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,19 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "naive-ui": "^2.44.1", + "vue": "^3.5.40" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.8", + "vite": "^8.2.0" + } +} diff --git a/frontend/public/favicon.svg b/frontend/public/favicon.svg new file mode 100644 index 0000000..af9ec45 --- /dev/null +++ b/frontend/public/favicon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/frontend/src/App.vue b/frontend/src/App.vue new file mode 100644 index 0000000..1e72641 --- /dev/null +++ b/frontend/src/App.vue @@ -0,0 +1,126 @@ + + + diff --git a/frontend/src/main.js b/frontend/src/main.js new file mode 100644 index 0000000..2425c0f --- /dev/null +++ b/frontend/src/main.js @@ -0,0 +1,5 @@ +import { createApp } from 'vue' +import './style.css' +import App from './App.vue' + +createApp(App).mount('#app') diff --git a/frontend/src/style.css b/frontend/src/style.css new file mode 100644 index 0000000..7950ef9 --- /dev/null +++ b/frontend/src/style.css @@ -0,0 +1,135 @@ +:root { + font-family: + system-ui, + 'Segoe UI', + Roboto, + 'PingFang SC', + 'Microsoft YaHei', + sans-serif; + color: #213547; + background-color: #f5f7fa; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +* { + box-sizing: border-box; +} + +body { + margin: 0; + min-width: 320px; +} + +.page-layout { + min-height: 100vh; +} + +.page-header-inner { + max-width: 1080px; + margin: 0 auto; + padding: 14px 24px; + display: flex; + align-items: baseline; + gap: 12px; +} + +.brand { + font-size: 20px; + font-weight: 700; +} + +.brand-sub { + color: #667085; + font-size: 14px; +} + +.page-main { + max-width: 1080px; + margin: 0 auto; + padding: 16px 24px 48px; +} + +.page-hero { + text-align: center; + padding: 56px 0 40px; +} + +.page-hero h1 { + margin: 0 0 8px; + font-size: 44px; + letter-spacing: -0.5px; +} + +.tagline { + font-size: 18px; + color: #4f6ef7; + font-weight: 600; + margin: 0 0 16px; +} + +.description { + max-width: 640px; + margin: 0 auto 24px; + color: #475467; + font-size: 16px; + line-height: 1.7; +} + +.tech-tags { + display: flex; + justify-content: center; + gap: 8px; +} + +.page-section { + margin-top: 24px; +} + +.upload-card .n-upload-dragger { + padding: 40px 24px; + text-align: center; +} + +.upload-hint { + font-size: 16px; + font-weight: 600; +} + +.upload-sub { + margin-top: 8px; + color: #98a2b3; + font-size: 13px; +} + +.feature-card { + height: 100%; +} + +.status-row { + display: flex; + align-items: center; + gap: 8px; + margin-top: 32px; + padding: 16px; + background: #fff; + border: 1px solid #e4e7ec; + border-radius: 8px; +} + +.task-count { + margin-left: 4px; +} + +.page-footer { + text-align: center; + color: #667085; + font-size: 13px; + padding: 16px; +} + +@media (max-width: 768px) { + .page-hero h1 { + font-size: 32px; + } +} diff --git a/frontend/vite.config.js b/frontend/vite.config.js new file mode 100644 index 0000000..445e3df --- /dev/null +++ b/frontend/vite.config.js @@ -0,0 +1,16 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [vue()], + server: { + port: 5173, + proxy: { + '/api': { + target: 'http://127.0.0.1:8000', + changeOrigin: true, + }, + }, + }, +}) From 6b85f09b4512b9bb9a62c99e9b225b1b708f876d Mon Sep 17 00:00:00 2001 From: eternal-pudding Date: Thu, 6 Aug 2026 01:23:49 +0800 Subject: [PATCH 2/6] =?UTF-8?q?docs(repo):=20=E8=A1=A5=E5=85=85=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E5=90=AF=E5=8A=A8=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 12e502c..385c96b 100644 --- a/README.md +++ b/README.md @@ -35,9 +35,22 @@ uv run uvicorn app.main:app --port 8000 可选配置:复制 `backend/.env.example` 为 `backend/.env`,可修改数据库路径(.env 不提交仓库)。 -## 前端启动(待前端负责人补充) +## 前端启动(约 2 分钟) -占位:Vue3 + Vite + Naive UI。启动命令与步骤由前端负责人补充到本节。 +前置:安装 [bun](https://bun.sh/)(JS/TS 包与环境管理器)。Windows 可执行 +`powershell -c "irm bun.sh/install.ps1 | iex"`,或按官网说明安装。 + +```bash +cd frontend +bun install # 首次需联网安装依赖 +bun dev # 启动开发服务器 +``` + +启动后验证: + +- 打开 http://127.0.0.1:5173 ,看到「文档翻译智能体」首页(产品介绍 + PDF 上传入口占位)。 +- 先启动后端时,首页底部显示「后端状态:已连接」及任务数量;未启动则显示未连接。 +- 前端 `/api` 由 Vite 代理到 http://127.0.0.1:8000(后端),无需额外 CORS 配置。 ## 阶段 0 验收方式 From 32255a113907a0820d1e6f62791b11238ed31693 Mon Sep 17 00:00:00 2001 From: eternal-pudding Date: Thu, 6 Aug 2026 01:59:02 +0800 Subject: [PATCH 3/6] =?UTF-8?q?fix(frontend):=20=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3=E4=B8=8D=E5=8F=AF=E7=94=A8?= =?UTF-8?q?=E6=97=B6=E9=9A=90=E8=97=8F=E4=BB=BB=E5=8A=A1=E6=95=B0=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/App.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 1e72641..986101e 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -111,8 +111,8 @@ function handlePlaceholderUpload() { {{ statusMeta[backendStatus].text }} - - 任务列表共 {{ taskCount ?? '?' }} 条 + + 任务列表共 {{ taskCount }} 条 From 52640f00738c22ce8562c8095de80efc6d473765 Mon Sep 17 00:00:00 2001 From: eternal-pudding Date: Thu, 6 Aug 2026 01:59:02 +0800 Subject: [PATCH 4/6] =?UTF-8?q?docs(repo):=20=E5=89=8D=E7=AB=AF=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E8=AF=B4=E6=98=8E=E8=A1=A5=E5=85=85=20bun=20=E8=87=AA?= =?UTF-8?q?=E5=B8=A6=E8=BF=90=E8=A1=8C=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 385c96b..9355997 100644 --- a/README.md +++ b/README.md @@ -37,8 +37,8 @@ uv run uvicorn app.main:app --port 8000 ## 前端启动(约 2 分钟) -前置:安装 [bun](https://bun.sh/)(JS/TS 包与环境管理器)。Windows 可执行 -`powershell -c "irm bun.sh/install.ps1 | iex"`,或按官网说明安装。 +前置:安装 [bun](https://bun.sh/)(JS/TS 包与环境管理器,自带运行时,无需单独安装 +Node.js)。Windows 可执行 `powershell -c "irm bun.sh/install.ps1 | iex"`,或按官网说明安装。 ```bash cd frontend From 30c1b0e29d5de5f06cdd1ca28b58d05b7a6dd57c Mon Sep 17 00:00:00 2001 From: eternal-pudding Date: Thu, 6 Aug 2026 02:00:40 +0800 Subject: [PATCH 5/6] =?UTF-8?q?chore(frontend):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E9=98=B6=E6=AE=B5=200=20=E9=A6=96=E9=A1=B5=E9=AA=8C=E6=94=B6?= =?UTF-8?q?=E6=88=AA=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/screenshots/homepage.png | Bin 0 -> 57384 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 frontend/screenshots/homepage.png diff --git a/frontend/screenshots/homepage.png b/frontend/screenshots/homepage.png new file mode 100644 index 0000000000000000000000000000000000000000..69d8c499fd55669fae1a89442a309bc3a5fbb634 GIT binary patch literal 57384 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 literal 0 HcmV?d00001 From 1a2febd4f9c70a562a7f76d2d69de28cecff6d63 Mon Sep 17 00:00:00 2001 From: eternal-pudding Date: Thu, 6 Aug 2026 02:06:24 +0800 Subject: [PATCH 6/6] =?UTF-8?q?docs(repo):=20=E5=89=8D=E7=AB=AF=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E8=AF=B4=E6=98=8E=E8=A1=A5=E5=85=85=E5=8B=BF=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E6=89=93=E5=BC=80=20index.html=20=E7=9A=84=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 9355997..3ba5c24 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,9 @@ bun install # 首次需联网安装依赖 bun dev # 启动开发服务器 ``` +> 注意:不要直接双击 `frontend/index.html` 打开(会白屏),必须通过 `bun dev` +> 启动后访问 http://localhost:5173 。 + 启动后验证: - 打开 http://127.0.0.1:5173 ,看到「文档翻译智能体」首页(产品介绍 + PDF 上传入口占位)。