📎 附件管理

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
✅ 页面加载时自动触发(并发)

Querylimit=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

刷新:调用 doFetchAttachments()(保留当前筛选)
导出 CSV:纯前端实现,包含字段:文件名、类型、关联资源、上传者、大小、上传时间。

文件大小格式化

  • < 1KB → {n} B
  • < 1MB → {n} KB
  • ≥ 1MB → {n} MB

文件图标映射

  • 图片类型(image/*)→ 🖼️
  • PDF(application/pdf)→ 📄
  • CSV/Excel(csv/excel/spreadsheet)→ 📊
  • 其他 → 📎(Paperclip 图标)