From 7fca315ff40c775f5d6d4e4df607f493a7e6b812 Mon Sep 17 00:00:00 2001 From: duxingchen Date: Tue, 15 Sep 2026 15:51:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9B=BE=E7=89=87=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E6=8A=BD=E7=A6=BB=E5=85=AC=E5=85=B1=E6=A8=A1=E5=9D=97=EF=BC=8C?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E6=88=90=E5=8A=9F=E8=A7=92=E6=A0=87=E5=B9=B6?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AE=B0=E5=BD=95=E6=8B=8D=E7=85=A7=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 上传模块 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(): 原先按引用赋值,删图会直接改动底层记录对象,此时点「取消」被删的图 在本地列表里也已经没了 --- track-uniapp/src/pages/scan/detail.vue | 131 ++++++++++++++++++++---- track-uniapp/src/pages/scan/records.vue | 45 +++++--- track-uniapp/src/utils/upload.js | 101 ++++++++++++++++++ 3 files changed, 241 insertions(+), 36 deletions(-) create mode 100644 track-uniapp/src/utils/upload.js diff --git a/track-uniapp/src/pages/scan/detail.vue b/track-uniapp/src/pages/scan/detail.vue index 21c6f87..744a712 100644 --- a/track-uniapp/src/pages/scan/detail.vue +++ b/track-uniapp/src/pages/scan/detail.vue @@ -110,7 +110,7 @@ {{ recordPopup.task && recordPopup.task.task_name }}