Files
workspace/code/g3soft-libs/.changeset/attachment.md
T
2026-10-11 22:14:13 +08:00

19 lines
2.9 KiB
Markdown
Raw 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.
---
'@g3soft/ui': minor
---
新增 `G3Attachment` 附件管理器(分类 / 列表 / 预览三栏)。
**与业务解耦**:组件不发任何请求,只消费 `files` + `categories` 两份数据,用户意图全部以事件抛出;需要组件代跑请求时传 `uploadRequest` / `removeRequest`。
- 布局走 `G3Splitter`:默认「分类 200 + 列表自适应」两栏;`showPreview`(默认 `false`)打开后追加 360 的预览栏。`showCategory` / `showPreview` 为假时对应面板不渲染;预览栏关掉时 `preview` 事件照常抛出,业务可自行开弹窗。
- 分类用 `G3Tree`,在传入的 `categories` 之上合成「全部」根节点(对外用 `categoryKey === ''` 表示),`categoryChange` 会把原始分类对象一并带出。
- 上传三条入口:底栏选择、拖拽、`pasteUpload`(opt-in,默认关,避免多实例抢 `document`)。入队前按 `accept` / `maxSize` / `maxCount` 校验,被拒文件走 `invalid` 事件(`info.message` 已按语言包生成)。
- 待上传队列在列表最前面渲染(带「待上传」标记);未传 `uploadRequest` 时点上传即抛 `upload` 并清空队列(所有权移交业务),传了则托管请求、失败保留队列可重试。blob 预览地址由组件统一释放。
- 多选批量下载 / 删除;删除内建确认 `Modal`(`confirmRemove` 可关,不使用命令式 `Modal.confirm`,避免依赖全局挂载容器);下载默认按 `item.url` 内建触发(`builtinDownload` 可关)。
- 分页:未传 `total` 视为客户端分页(组件切片),传了则为服务端分页(`files` 即当前页);`page` / `pageSize` 非受控,不传时组件内部维护。
- 字段名中性(`id` / `name` / `size` / `ext` / `url` / `categoryId`),业务字段走 `item.raw` 原样回传;文件族配色映射到 `--g3-color-danger` / `success` / `warning` / `primary`,并留 `--g3-attachment-type-*` 供主题覆盖。
- 视觉与交互按当前设计语言落地:尺寸 / 间距 / 圆角 / 过渡全部走令牌;工具栏整行统一 12px 字 / 24px 控件、高度写死并用 1px 竖线分组,窄面板(容器查询)下文字收成图标,勾选前后高度恒定;操作默认藏在 hover / `:focus-within` 里(`@media (hover: none)` 常显);空态就是虚线投放区并顺带写明 `accept` / `maxSize` / `maxCount` 限制;待上传队列非空时底栏整块染主色淡底(脏状态);上传与分页合成一块,不再出现两条并排分隔线;卡片封面用 `aspect-ratio` + `object-fit: cover`,封面底边是 2px 上传进度条;面板之间的分割线常显且收成 1px。
- 语言包新增 `attachment` 分组(zh-CN / en-US):**自定义 `Locale` 对象的项目需要补上这一组**,否则类型不完整。
- 附单测(`src/attachment/Attachment.test.ts` 组件契约 + `file.test.ts` 纯函数)与文档 / 4 个示例,文档见 `docs/content/ui/data/attachment.md`。