📎 附件管理
Admin 管理员查看所有上传的附件文件。页面展示附件列表(文件名、类型、资源关联、上传者、大小),支持按类型/账单/日期范围筛选、关键词搜索、CSV导出。
路由:/attachments
页面初始化触发
1. 进入页面 → 并发请求 2 个
触发条件:组件首次挂载
GET
/admin/attachments
✅ 页面加载时自动触发
请求头:Authorization: Bearer {token}
Query 参数(可选):resource_type, bill_id, start_date, end_date
响应:[{id, file_name, file_type, file_size, resource_type, resource_id, uploaded_by_nickname, created_at}]
GET
/admin/bills
✅ 页面加载时自动触发(并发)
Query:limit=1000
用途:填充"所属账单"下拉筛选器
筛选操作触发
2. 切换文件类型 → GET /admin/attachments(resource_type)
触发条件:选择类型下拉框 →
handleTypeChange(val) → 更新 ref → doFetchAttachments()3. 切换账单 → GET /admin/attachments(bill_id)
触发条件:选择账单下拉框 →
handleBillChange(val)4. 修改日期范围 → GET /admin/attachments(start_date + end_date)
触发条件:修改起始或截止日期 →
handleDateChange(setter, ref, val)- 截止日期搜索时自动补上
+ ' 23:59:59'(包含当天整天)
5. 清空筛选 → 重置所有筛选状态 → 重新请求
触发条件:点击"清空"按钮(typeFilter || billFilter || startDate || endDate 时显示)
搜索与操作
6. 搜索文件名/上传者 → 本地筛选(非请求)
触发条件:搜索框输入 → 400ms 防抖 → 本地过滤(匹配 file_name、uploaded_by_nickname)
7. 刷新 / 导出 CSV
刷新:调用
导出 CSV:纯前端实现,包含字段:文件名、类型、关联资源、上传者、大小、上传时间。
doFetchAttachments()(保留当前筛选)导出 CSV:纯前端实现,包含字段:文件名、类型、关联资源、上传者、大小、上传时间。
文件大小格式化
- < 1KB →
{n} B - < 1MB →
{n} KB - ≥ 1MB →
{n} MB
文件图标映射
- 图片类型(image/*)→ 🖼️
- PDF(application/pdf)→ 📄
- CSV/Excel(csv/excel/spreadsheet)→ 📊
- 其他 → 📎(Paperclip 图标)