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

5.8 KiB
Raw Permalink Blame History

文件快传 前端(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

主题与语言

  • 主题三态(导航栏切换 + localStoragefcb_theme_mode):浅色 / 深色 / 跟随系统(默认,prefers-color-scheme)。 实际主题写入 <html data-theme>Naive UI 组件接收 darkThemeindex.html 内联脚本做首帧防闪烁。
  • 语言(导航栏切换 + localStoragefcb_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_urlfooter_textfooter_beiannotify_enabled/notify_title/notify_contentmax_file_sizemax_save_secondsmax_save_countallowedFileTypesexpireStyleuploadSizeuploadCount/uploadMinutesite_name/logo_url/favicon_url。 策略最终由服务端强制(403/400 中文错误);前端只做体验层提示与动态选项渲染。

命令

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/*.mdtech-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/initJSON)→ POST /chunk/upload/{uploadID}/{chunkIndex}multipart 仅 chunk 字段)→ GET /chunk/upload/status/{uploadID}POST /chunk/upload/complete/{uploadID};取消 DELETE /chunk/upload/{uploadID}
  • 管理端:POST /admin/loginGET /admin/verifyDELETE /admin/file/deletePOST /admin/file/batch-deletePATCH /admin/file/updatePATCH|POST /admin/config/updateGET /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.tsbuild.outDir

Logo 自定义(26.9:本地资源兜底)

  • 默认导航 Logosrc/assets/brand/logo.svg(构建内嵌;DEFAULT_LOGO_URL
  • 默认 faviconsrc/assets/brand/favicon.pngindex.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