Files
SKYMirror 84df9996cb
CI 测试 / go vet + go test (push) Successful in 49s
26.9:版本号统一 + CI 精简 + 前端产物重建
- 全项目版本号统一:v3.x 迭代号(26.9/26.9/26.9/26.9 及裸 v2/v3)→ 26.9,
  覆盖 Go 注释 / 文档 / openapi.yaml / README×4 / 前端源码(80+ 处)
- v31_test.go 更名 custom_code_test.go;TestV2AccessorDefaults → TestKVAccessorDefaults
- docs/api/00-overview.md 更新日志合并为单条 26.9 条目(修复错位拼接)
- .goreleaser.yaml 头部注释与实际一致(Pro 2.18.1 / GITEA_TOKEN / semver tag 要求)
- CI:release-image.yml → ci.yml,仅保留 vet+test 门禁;
  镜像发布移交 GoReleaser Pro(原 build-push 的 tag 校验与 26.9 版本方案冲突,历史 9 次失败)
- 前端重建:server/web/dist 与 web-embed 同步(docs 文案嵌入更新)
2026-09-08 03:16:51 +08:00

83 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 文件快传 前端(web/
Vue 3 + Vite + TypeScript 单页应用:分享 / 取件 / 管理后台(文件管理、审计日志、系统设置)/ 站内文档。
26.9(任务 t3):液态玻璃主题(亮/暗/跟随系统)、中英双语(vue-i18n)、本地 Logo/favicon 打包资源、
背景图 / 页脚自定义 / 系统通知(读 `GET /api/v1/config` 下发的 26.9 字段)、上传页策略动态渲染、
管理设置页全量策略表单(PATCH `/admin/config/update`)。
26.9 起在管理设置「上传频率限制」卡底部新增**上下行带宽限速**字段(MB/s,0=不限速,
提交后换算为字节/秒写入 `upload_rate`/`download_rate` KV)。
## 页面
| 路由 | 说明 |
|---|---|
| `/` | 首页:文本/文件分享 Tab + 快速取件(有效期选项/大小/类型过滤按 config 动态渲染) |
| `/s/:code` | 取件页:文本展示 / 文件下载(带进度) |
| `/admin/login` | 管理员登录 |
| `/admin/files` | 文件管理:列表/搜索/编辑/删除/批量删除 |
| `/admin/audit` | 审计日志:动作/结果/IP/时间范围过滤 |
| `/admin/settings` | 系统设置:站点名称、Logo/favicon、背景图、页脚、通知、保存/存储策略、上传频率、管理员密码 |
| `/docs` | 站内 API 文档(渲染 `docs/api/*.md`,构建时内嵌 + 运行时回退) |
| `/openapi` | Swagger UI(渲染 `docs/openapi.yaml` |
## 主题与语言
- 主题三态(导航栏切换 + `localStorage``fcb_theme_mode`):浅色 / 深色 / 跟随系统(默认,`prefers-color-scheme`)。
实际主题写入 `<html data-theme>`Naive UI 组件接收 `darkTheme``index.html` 内联脚本做首帧防闪烁。
- 语言(导航栏切换 + `localStorage``fcb_locale`):默认 `navigator.language`(zh 开头 → zh-CN,其余 → en-US)。
文案在 `src/locales/`,新增文案先加 zh-CN 再同步 en-US。
## 26.9 配置字段(消费 `GET /api/v1/config`,管理端经 `PATCH /admin/config/update` 写回)
`background_url``footer_text``footer_beian``notify_enabled/notify_title/notify_content`
`max_file_size``max_save_seconds``max_save_count``allowedFileTypes``expireStyle`
`uploadSize``uploadCount/uploadMinute``site_name/logo_url/favicon_url`
策略最终由服务端强制(403/400 中文错误);前端只做体验层提示与动态选项渲染。
## 命令
```bash
npm ci # 安装依赖
npm run dev # 开发服务器(默认代理 /api /share /chunk /presign /admin 到 http://127.0.0.1:8466
npm run build # 类型检查 + 产出 dist/(后端 embed 用)
npm run preview # 预览构建产物
```
## 环境变量(.env.local
| 变量 | 说明 |
|---|---|
| `VITE_API_BASE` | 后端 API 根地址;默认空 = 同源(embed 部署)。如 `http://127.0.0.1:8466` |
| `VITE_MOCK` | 置 `1` 启用内置 mock(无需后端) |
| `VITE_ROUTER_MODE` | `history`(默认,后端 NoRoute 已做 SPA 回退)/ `hash`(后端无回退时) |
## API 契约(最终版,经队长终审裁定)
**业务 API 挂根路径;公共端点 `/api/v1/health`、`/api/v1/config` 例外。** 权威依据:`docs/api/*.md`tech-writer 13 篇,概述 00-overview.md)与 `docs/openapi.yaml`,本节与其 100% 对齐;变更须同步文档并知会 go-api + tech-writer。
- 统一响应 `{"code":200,"msg":"ok","data":...}`HTTP 状态 = code401 未登录(连续失败 423)、423 限流、428 未初始化。
- 取件:`GET /share/metadata?code=` 不消耗次数;`GET /share/select?code=` 会**消耗**取件次数(文本 text/plain,文件流 200/206 支持 Range),文件名读 Content-Disposition。前端只在真正取件时调用 select。
- 分片:`POST /chunk/upload/init`JSON)→ `POST /chunk/upload/{uploadID}/{chunkIndex}`multipart 仅 chunk 字段)→ `GET /chunk/upload/status/{uploadID}``POST /chunk/upload/complete/{uploadID}`;取消 `DELETE /chunk/upload/{uploadID}`
- 管理端:`POST /admin/login``GET /admin/verify``DELETE /admin/file/delete``POST /admin/file/batch-delete``PATCH /admin/file/update``PATCH|POST /admin/config/update``GET /admin/audit/list`(参数 page/size/action/result/ip/start_time/end_timeISO 8601)、`PATCH /admin/settings/password`
## 嵌入约定(go:embed
- 构建产物输出到 `web/dist/`(入口 `web/dist/index.html`)。**注意**`web/` 在 Go moduleserver/)之外,go:embed 无法直接引用 —— go-api 需在构建脚本中拷贝(如 `cp -a web/dist server/web/dist`)或以 `os.DirFS` 方式挂载;`base: '/'` + history 路由配合其 NoRoute SPA 回退(静态资源优先、GET+text/html 回 index.html、/api/* JSON 404)。
- 如需改输出目录,调整 `vite.config.ts``build.outDir`
## Logo 自定义(26.9:本地资源兜底)
- 默认导航 Logo`src/assets/brand/logo.svg`(构建内嵌;`DEFAULT_LOGO_URL`
- 默认 favicon`src/assets/brand/favicon.png``index.html` + `DEFAULT_FAVICON_URL`
- 运行时优先读取公共配置 `logo_url` / `favicon_url` / `site_name`(管理端「系统设置」保存后立即全站生效),空值回退本地默认;不再依赖远程 URL。
## API 客户端
统一封装见 `src/api/paths.ts`(全部路径一处可改)与 `src/api/http.ts``{code,msg,data}` 解包、Bearer 认证、超时、401/428 处理)。
## 文档页约定(与 tech-writer
- `docs/api/*.md`:每个文件一个章节,**一级标题(`# 标题`)即侧边栏章节名**;文件名(去掉 .md)作为路由 slug。构建时通过 `import.meta.glob` 内嵌原文,后端如挂载 `/docs/api/index.json``[{slug,title}]`)可补充远端章节。
- `docs/openapi.yaml`:构建时内嵌给 Swagger UI;后端也可直接静态托管 `/docs/openapi.yaml`