说明
面向 AI 会话“输入框上方”承载待发送文件的附件条组件,纯展示、不依赖任何浏览器 API(真实取文件由宿主用
常见能力:
- 按 Type / 文件名后缀自动映射类型图标(图片/PDF/文档/表格/演示/压缩包/代码/音视频),Icon 可覆盖、Thumb 显缩略图
- Size 自动格式化为 B / KB / MB / GB,无需调用方拼接
- Status 三态:done 就绪、uploading 进度条(Percent 驱动 + “上传中”标签)、error 红态(显示 Error)
- ListType card / pill 两种形态,Closable 控制移除按钮,点附件 OnPreview、点移除 OnRemove 回传
- Uploadable 内置“添加附件”入口触发 OnUpload,EmptyText 空态
- 移除按钮 aria-label 走“删除”,“上传中 / 添加附件”走词条;文件名等视为业务数据不本地化
- 纯展示、无 JS 互操作、受控数据,明暗主题随 CSS 令牌自动适配
用法
<Attachments Items="@_files" ListType="card" Closable="true"
Uploadable="true" UploadText="添加附件"
OnUpload="OpenPicker" OnRemove="Remove" OnPreview="Preview" />
@code {
List<Attachment> _files = new()
{
new("需求说明书.pdf", 2_400_000, "application/pdf"),
new("数据模型草稿.docx", 51_200) { Status = "uploading", Percent = 42 },
new("历史导出.zip", 8_900_000, "zip") { Status = "error", Error = "超过 5MB 限制" },
};
void OpenPicker() { /* 宿主在此打开 InputFile 选择器 */ }
void Remove(Attachment a) => _files.Remove(a);
void Preview(Attachment a) => _ = a.Url; // 打开预览
}
API 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
Closable |
bool |
true |
是否显示每个附件的移除按钮。默认 true。 |
EmptyText |
string |
null |
空态文本(作为翻译键)。留空则不显示空态提示。 |
Items |
List<Attachment> |
null |
附件数据集合。文件名等视为业务内容、直接展示不本地化。 |
ListType |
string |
"card" |
展示形态:card(卡片,默认)/ pill(胶囊)。作为 CSS 修饰、不本地化。 |
OnPreview |
EventCallback<Attachment> |
— | 事件 点击某个附件本体(预览)的回调。 |
OnRemove |
EventCallback<Attachment> |
— | 事件 点击某个附件移除按钮的回调。 |
OnUpload |
EventCallback |
— | 事件 点击“添加附件”的回调。 |
Uploadable |
bool |
true |
是否显示“添加附件”上传入口。默认 true。 |
UploadIcon |
string |
"paperclip" |
上传入口图标名(Icon Type,不本地化)。 |
UploadText |
string |
"添加附件" |
上传入口文本(作为翻译键)。 |
Visible |
bool |
true |
取得或设置组件是否可见,默认为false。 |
VisibleChanged |
EventCallback<bool> |
— | 事件 取得或设置组件可见性变化时的回调事件。 |
Class |
string |
null |
取得或设置组件的CSS类名,用于自定义样式。 |
Disabled |
bool |
false |
取得或设置组件是否禁用,默认为false。 |
Style |
string |
null |
取得或设置组件的内联样式,用于自定义样式。 |
所有组件均继承
BaseComponent,除上表参数外还支持Class、Style、Disabled、Visible。
扫码关注公众号
扫码加入 QQ 群