文档库支持多选文档后批量设置分享 #25

Open
opened 2026-11-12 09:32:40 +00:00 by cykj · 11 comments
Owner

诉求

Web 文档库管理(/#/doclib/enter)目前「设置分享」仅对单份文档生效(工具栏取 selected[0],且后端仅 PUT /web/doclib/files/{file_id}/shares)。需要支持多选文档后统一设置分享。

现状(只读定位)

  • 页面:web-admin/src/views/doclib/enter/index.vue(工具栏 @click="openShare(selected[0])")
  • 弹窗:ShareDialog.vue(单文档 saveDoclibShares(id, userIds))
  • API:PUT /web/doclib/files/{file_id}/shares

待确认

  • 修改端(推荐仅 Web 管理端)
  • 多文档已有分享人员不一致时的合并/覆盖策略
  • 是否需要后端批量分享接口,或前端逐个调用现有接口

验收(草案)

  • 可多选文档后打开「设置分享」
  • 保存后所选文档均按约定规则更新分享人员
  • 无管理权限的文档不可批量分享(或明确提示)
## 诉求 Web 文档库管理(`/#/doclib/enter`)目前「设置分享」仅对单份文档生效(工具栏取 `selected[0]`,且后端仅 `PUT /web/doclib/files/{file_id}/shares`)。需要支持多选文档后统一设置分享。 ## 现状(只读定位) - 页面:`web-admin/src/views/doclib/enter/index.vue`(工具栏 `@click="openShare(selected[0])"`) - 弹窗:`ShareDialog.vue`(单文档 `saveDoclibShares(id, userIds)`) - API:`PUT /web/doclib/files/{file_id}/shares` ## 待确认 - 修改端(推荐仅 Web 管理端) - 多文档已有分享人员不一致时的合并/覆盖策略 - 是否需要后端批量分享接口,或前端逐个调用现有接口 ## 验收(草案) - 可多选文档后打开「设置分享」 - 保存后所选文档均按约定规则更新分享人员 - 无管理权限的文档不可批量分享(或明确提示)
Author
Owner

决策

用户确认分享策略采用 整份覆盖(推荐 A):批量保存时,弹窗所选人员集合写入每一份所选文档,替换原有分享人。

下一澄清:多文档打开弹窗时的初始选中人员。

## 决策 用户确认分享策略采用 **整份覆盖(推荐 A)**:批量保存时,弹窗所选人员集合写入每一份所选文档,替换原有分享人。 下一澄清:多文档打开弹窗时的初始选中人员。
Author
Owner

决策

用户确认弹窗初始勾选采用 所有文档分享人的交集(推荐);无共同人员时为空。保存仍整份覆盖。

## 决策 用户确认弹窗初始勾选采用 **所有文档分享人的交集(推荐)**;无共同人员时为空。保存仍整份覆盖。
Author
Owner

决策

用户选择修改端 2:Web + 后端(新增批量分享 API,减少多次请求)。

下一澄清:批量保存失败策略。

## 决策 用户选择修改端 **2:Web + 后端**(新增批量分享 API,减少多次请求)。 下一澄清:批量保存失败策略。
Author
Owner

决策

用户确认批量失败策略采用 整批事务:全部成功或全部回滚(推荐 1)。
下一步:给出实现方案对比与设计草案。

## 决策 用户确认批量失败策略采用 **整批事务:全部成功或全部回滚(推荐 1)**。 下一步:给出实现方案对比与设计草案。
Author
Owner

决策

用户确认采用 方案 A:新增 batch-shares API + 扩展现有 ShareDialog。
下一步:设计确认后落盘 specs。

## 决策 用户确认采用 **方案 A**:新增 batch-shares API + 扩展现有 ShareDialog。 下一步:设计确认后落盘 specs。
Author
Owner

决策

用户确认设计(「OK,请继续」):批准方案 A 设计并落盘 specs,随后进入计划与实现。

## 决策 用户确认设计(「OK,请继续」):批准方案 A 设计并落盘 specs,随后进入计划与实现。
Author
Owner

规格已落盘

  • 文件:docs/superpowers/specs/2026-11-12-doclib-batch-share-design.md
  • 提交:bf89a1f3016b56356662640186e9ffe643cba729(分支 codex/issue-25-doclib-batch-share-design)

自检:无 TBD;与会话决策一致(覆盖/交集/batch 事务/Web+后端);单测与验收已写明。
待用户审阅该文件后进入 writing-plans。

## 规格已落盘 - 文件:`docs/superpowers/specs/2026-11-12-doclib-batch-share-design.md` - 提交:`bf89a1f3016b56356662640186e9ffe643cba729`(分支 `codex/issue-25-doclib-batch-share-design`) 自检:无 TBD;与会话决策一致(覆盖/交集/batch 事务/Web+后端);单测与验收已写明。 待用户审阅该文件后进入 writing-plans。
Author
Owner

实现计划已落盘

  • docs/superpowers/plans/2026-11-12-doclib-batch-share.md
  • 规格审阅通过(用户选 1),待选择执行方式后开工。
## 实现计划已落盘 - `docs/superpowers/plans/2026-11-12-doclib-batch-share.md` - 规格审阅通过(用户选 1),待选择执行方式后开工。
Author
Owner

实现完成(待业务验收)

分支:codex/issue-25-doclib-batch-share-design
HEAD:见远端最新提交

改动摘要

  • 前端:actionsFor.share 支持多选可管理;shareUserIntersection;ShareDialog 多文档 + 批量保存;工具栏传全部选中项
  • API:saveDoclibBatchShares → POST /web/doclib/files/batch-shares
  • 后端:BatchShareBody、_apply_shares / set_shares_batch 整批一次 commit

验证

  • tsx --test src/views/doclib/enter/model.test.ts src/views/doclib/enter/api.test.ts:9 通过
  • browser.test.mjs mock 已支持 batch-shares;未在本机跑 Playwright 全量
  • 真机/生产页面未验收

占用说明

queue-claim 因 Gitea labels 分页限制失败;实现仍按 #25 完成。

## 实现完成(待业务验收) 分支:`codex/issue-25-doclib-batch-share-design` HEAD:见远端最新提交 ### 改动摘要 - 前端:`actionsFor.share` 支持多选可管理;`shareUserIntersection`;`ShareDialog` 多文档 + 批量保存;工具栏传全部选中项 - API:`saveDoclibBatchShares` → `POST /web/doclib/files/batch-shares` - 后端:`BatchShareBody`、`_apply_shares` / `set_shares_batch` 整批一次 commit ### 验证 - `tsx --test src/views/doclib/enter/model.test.ts src/views/doclib/enter/api.test.ts`:9 通过 - browser.test.mjs mock 已支持 batch-shares;未在本机跑 Playwright 全量 - 真机/生产页面未验收 ### 占用说明 `queue-claim` 因 Gitea labels 分页限制失败;实现仍按 #25 完成。
Author
Owner

本地合并

已将任务分支合入本地 V3.0(71927bede)。合并后单测 9 通过。

工程未授权 merge,未推送远端 V3.0(本地 ahead 7)。远端任务分支仍保留:origin/codex/issue-25-doclib-batch-share-design。

## 本地合并 已将任务分支合入**本地** `V3.0`(`71927bede`)。合并后单测 9 通过。 工程未授权 `merge`,**未推送**远端 `V3.0`(本地 ahead 7)。远端任务分支仍保留:`origin/codex/issue-25-doclib-batch-share-design`。
Author
Owner

远端已更新

用户授权后已推送本地合入结果到 origin/V3.0:391e5f66f..71927bede。

## 远端已更新 用户授权后已推送本地合入结果到 `origin/V3.0`:`391e5f66f..71927bede`。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: cykj/shanxia2.0#25