From ce29b609ab020bc6c66e448fa4de7790b7f798f8 Mon Sep 17 00:00:00 2001 From: dawnStamp <310845922@qq.com> Date: Tue, 15 Sep 2026 20:01:19 +0800 Subject: [PATCH 1/8] =?UTF-8?q?feat(=E5=AF=84=E4=BB=B6):=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=87=AD=E7=A0=81=E5=8F=91=E9=80=81=E5=B9=B6=E5=A4=8D?= =?UTF-8?q?=E7=94=A8=E6=94=B6=E4=BB=B6=E7=AE=A1=E7=90=86=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DELIVERY.md | 44 ++ index.html | 2 + scripts/check-architecture.mjs | 7 +- src/components/common/DeleteActionButton.vue | 28 ++ src/components/common/PageFooter.vue | 24 +- src/composables/index.ts | 2 + src/composables/useAdminFiles.ts | 17 +- src/composables/useDelivery.ts | 37 ++ src/composables/useDeliveryAdmin.ts | 248 ++++++++++ src/composables/usePresignedUpload.ts | 15 +- src/composables/useSendFlow.ts | 26 +- src/composables/useSendSubmit.ts | 25 +- src/constants/index.ts | 5 + src/i18n/delivery.ts | 154 ++++++ src/i18n/locales/en-US.ts | 2 + src/i18n/locales/zh-CN.ts | 2 + src/layout/AdminLayout/AdminLayout.vue | 20 +- src/router/index.ts | 13 + src/services/client.ts | 14 + src/services/delivery.ts | 63 +++ src/services/file.ts | 128 ++--- src/services/index.ts | 7 +- src/services/presign-upload.ts | 85 ++-- src/services/upload-strategy.ts | 33 +- src/types/delivery.ts | 53 +++ src/types/file.ts | 4 + src/utils/clipboard.ts | 23 +- src/utils/download-action.ts | 5 + src/views/DeliveryView.vue | 63 +++ src/views/RetrievewFileView.vue | 1 + src/views/SendFileView.vue | 80 ++-- src/views/manage/DeliveryManageView.vue | 476 +++++++++++++++++++ src/views/manage/FileManageView.vue | 41 +- 33 files changed, 1540 insertions(+), 207 deletions(-) create mode 100644 DELIVERY.md create mode 100644 src/components/common/DeleteActionButton.vue create mode 100644 src/composables/useDelivery.ts create mode 100644 src/composables/useDeliveryAdmin.ts create mode 100644 src/i18n/delivery.ts create mode 100644 src/services/delivery.ts create mode 100644 src/types/delivery.ts create mode 100644 src/views/DeliveryView.vue create mode 100644 src/views/manage/DeliveryManageView.vue diff --git a/DELIVERY.md b/DELIVERY.md new file mode 100644 index 0000000..606f4cb --- /dev/null +++ b/DELIVERY.md @@ -0,0 +1,44 @@ +# 2024 主题寄件码功能 + +本改动基于官方 2024 前端提交 `c32466a20ae104eae9e2d8561965378e1c1b5325`,用于配合 FileCodeBox Issue #513 的寄件后端。前后端保持独立仓库,不引入个人品牌或服务器地址,便于分别向上游提交 PR。 + +## 页面与交互 + +- `/#/delivery`:访客验证寄件码、选择或拖放文件、设置过期方式,成功后显示普通取件码、复制按钮与取件链接。 +- `/#/admin/delivery`:原后台侧栏中的寄件管理,沿用原管理员会话、权限守卫、弹窗、表格与分页。 +- 原取件/发件页在共用底栏中间提供寄件入口,当前寄件页不重复显示自己的入口。 +- “查看收件”嵌入文件管理列表,按 `delivery_id` 限定关联分享,直接复用详情、下载、编辑、删除和分页;旧私有及处理中记录保留兼容区。 +- 寄件码列表使用可选中的等宽文本,行内删除按钮与文件管理共用组件。 +- 复用 PageHeader、FileUploadArea、BaseButton、BaseModal、DataTable、DataPagination 和全局语言/深色模式。 +- 新增页面提供中英文文案;现有组件的文案行为保持上游语义。 +- 管理列表新增寄件码列,新建口令可再次查看和复制;需要后端迁移 009。旧记录缺少原文时显示明确提示,持有者成功验证后由后端补存。HTTP 和剪贴板权限拒绝时尝试兼容复制,仍失败则选中对应行的寄件码文本,支持手动复制。 + +## 接口和权限边界 + +需要后端提供 `/api/delivery/verify`、支持寄件凭证的普通上传接口和 `/admin/delivery/*` 接口。旧 `/api/delivery/upload` 仅用于旧主题兼容,新页面不调用该接口。管理员通过统一请求客户端携带会话;访客验证及上传使用独立请求客户端,避免登录状态覆盖寄件凭证,寄件 401 也不会注销管理员。 + +验证寄件码后直接挂载 `SendFileView`,复用 `useSendFlow`、`useSendSubmit` 和普通上传服务,只通过独立请求客户端附加寄件授权。支持文件/文本切换、拖放与粘贴、多文件 ZIP 打包、分片续传、代理/预签名上传和发件记录;一次成功分享(包括一个 ZIP 包或一段文本)扣一次寄件次数。分片开关沿用站点配置。 + +新页面在普通分享/分片/预签名接口显式提交 expire_style/expire_value,配合后端迁移 010 生成普通取件记录,关闭游客上传仍可凭码发送。结果接入原发件记录组件,接收者使用原首页和下载接口;寄件码的上传次数与取件码的领取次数分别计算。后端每一步检查会话所属寄件码,令牌失效后重新验证同一码可继续未完成的分片会话。旧私有收件不自动转为分享。 + +## 构建与联调 + +保持与上游构建环境一致,使用 Node 20.19+ 或 22.12+,pnpm 9.15.9;不更新依赖锁定文件。 + +```powershell +# 安装上游锁定依赖并执行架构、类型检查和生产构建。 +npx --yes pnpm@9.15.9 install --frozen-lockfile +npx --yes pnpm@9.15.9 run build + +# 本地开发时通过环境变量指定后端,不将个人环境地址写进源码。 +$env:VITE_API_BASE_URL_DEV='http://127.0.0.1:12345' +npx --yes pnpm@9.15.9 run dev --host 127.0.0.1 +``` + +生产构建输出 `dist`,部署到后端 `themes/2024`。2023 主题不需要重新构建或替换。`index.html` 中的 `filecodebox-features=delivery` 功能标记使兼容后端将旧 `/delivery` 地址跳转到原生路由;未更新的主题仍使用旧页面,不会因先更新后端而变成空白页。 + +## 贡献拆分 + +前端 PR:此仓库的 Vue 页面、组合函数、服务层、国际化、原生导航、剪贴板降级和 Windows 架构检查兼容修复。 + +后端 PR:独立的寄件 API、数据库迁移、存储/配额处理,以及旧页面地址的新旧主题兼容。不要将本机虚拟环境、构建缓存、线上数据、服务器配置或部署备份加入 PR。两个仓库的 Git 提交、推送和 PR 均需单独执行,不由本地构建自动完成。 diff --git a/index.html b/index.html index fcbd449..2527867 100644 --- a/index.html +++ b/index.html @@ -1,6 +1,8 @@ + + pattern.test(relativeFile))) { continue } diff --git a/src/components/common/DeleteActionButton.vue b/src/components/common/DeleteActionButton.vue new file mode 100644 index 0000000..cf1c6ab --- /dev/null +++ b/src/components/common/DeleteActionButton.vue @@ -0,0 +1,28 @@ + + + diff --git a/src/components/common/PageFooter.vue b/src/components/common/PageFooter.vue index 7a579a9..3c3f30a 100644 --- a/src/components/common/PageFooter.vue +++ b/src/components/common/PageFooter.vue @@ -11,13 +11,27 @@ isDarkMode ? 'text-zinc-400 hover:text-zinc-100' : 'text-slate-500 hover:text-zinc-950' " > - {{ linkText }} + + + + {{ t('delivery.title') }} + + + +
@@ -84,7 +86,7 @@ + + diff --git a/src/views/RetrievewFileView.vue b/src/views/RetrievewFileView.vue index 01e10b6..06015bf 100644 --- a/src/views/RetrievewFileView.vue +++ b/src/views/RetrievewFileView.vue @@ -31,6 +31,7 @@ /> + +
+ {{ deliverySession.name }} · + {{ t('delivery.remaining', { count: deliverySession.remaining }) }} + +
@@ -83,42 +101,15 @@ -
- - - {{ t('send.needRetrieveFile') }} - - -
+ + @@ -144,9 +135,11 @@ + + + + diff --git a/src/views/manage/FileManageView.vue b/src/views/manage/FileManageView.vue index 5c44495..d9980b8 100644 --- a/src/views/manage/FileManageView.vue +++ b/src/views/manage/FileManageView.vue @@ -1,6 +1,7 @@