duxingchen
7fca315ff4
feat: 图片上传抽离公共模块,统一成功角标并修复记录拍照无法删除
上传模块 utils/upload.js(新增)
此前 detail.vue 与 records.vue 各写一份 uni.uploadFile 封装,超时与并发策略
容易漂移,且都是串行上传 —— 9 张图排队一张张传完,弱网下工人要干等半分钟。
- uploadImage:单张上传,UPLOAD_TIMEOUT 防弱网永久挂起;非 2xx 时后端返回的
是 {detail:...} 而非 {url},必须当失败处理,否则图片被静默丢弃
- uploadImages:有界并发池(并发 3),onEachDone 对每张图恰好回调一次,
成功与失败都精确回收一个 ⏳ 占位符
- isUploadedUrl:判定「是否已真正上传成功」。成功 resolve 的是后端 URL
(/api/v1/upload/files/… 或 http(s)://),未完成的拿到的是本地临时地址
(blob: / file:// / _doc/ / wxfile://)
上传成功绿勾角标
- 应用到 detail.vue(记录表单 + 驳回表单)与 records.vue(编辑记录弹窗)
- 角标仅在 isUploadedUrl 判定为真时渲染;⏳ 占位与失败项结构上不可能出现
角标,因为角标只存在于「已上传」的那个循环里
- 圆角与裁剪改由 .success-badge-wrapper 负责,图片只负责填满
修复:记录/拍照里已选图片无法删除
删除按钮原为 v-if="canDeleteImage",而该项在「任务已定稿
(COMPLETED/REJECTED/ARCHIVED/CANCELED)」或「非本人任务」时返回 false。
但 handleTaskAction 里 type === "record" 是无条件打开弹窗的,工人完全可能
在已完成任务上打开「记录/拍照」,于是刚选、尚未提交的图也被一并锁死 ——
那些图只存在于内存里,删掉不产生任何服务端影响。
- 新增 recordForm.savedCount(打开弹窗时已落库的张数),
新增 canDeleteRecordImage(i) = canDeleteImage || i >= savedCount:
本次新选的图永远可删,已落库的才受「任务已定稿」约束
- 未落库的图免去 5 秒倒计时 —— 该机制本是为不可逆的服务器删除设计的,
刚选错的图重拍一张即可,没必要卡 5 秒
- openEditRecord 由 images: record.images || [] 改为 saved.slice():
原先按引用赋值,删图会直接改动底层记录对象,此时点「取消」被删的图
在本地列表里也已经没了
2026-09-15 15:51:44 +08:00
..
2026-08-05 15:01:46 +08:00
2026-09-15 15:51:44 +08:00
2026-08-07 11:53:40 +08:00
2026-08-05 15:01:46 +08:00
2026-08-05 15:01:46 +08:00
2026-08-05 15:01:46 +08:00
2026-09-15 15:51:24 +08:00
2026-08-05 15:01:46 +08:00