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

2.9 KiB
Raw Blame History

@g3soft/ui
@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。