From f4f887c2b458381df4e0382150c041d801d463e7 Mon Sep 17 00:00:00 2001 From: yueli Date: Thu, 17 Sep 2026 10:44:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(borrow):=20=E5=85=A8=E5=B1=80=E6=8F=90?= =?UTF-8?q?=E9=86=92=E6=94=AF=E6=8C=81=E5=8F=8C=E5=90=91=20=E2=80=94?= =?UTF-8?q?=E2=80=94=20=E5=8F=91=E8=B5=B7=E6=96=B9=E4=B9=9F=E8=83=BD?= =?UTF-8?q?=E6=94=B6=E5=88=B0=E3=80=8C=E8=BD=AC=E4=BA=A4=E8=A2=AB=E6=8B=92?= =?UTF-8?q?=E7=BB=9D=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 提醒组件从单向(待我接收)扩展为双向,一次轮询同时取回两类: ① 转交被拒绝 —— 我发起、对方拒收,物品责任仍在我手上 ② 待我接收 —— 别人转给我、等我确认 弹窗(沿用中央 Modal + 遮罩,不进则已、进则打断): 标题「转交被拒绝」,列出被拒物品(物料名 + 单号 + 接收人,超过 5 笔折叠计数), 按钮【去处理】(跳借还记录) /【知道了】。 ★ 优先级:拒绝提醒优先于待接收提醒,且**一次只弹一个弹窗**。 前者是「责任已回到你手上」的状态变更,后者是「等你确认」的待办; 本次弹了拒绝就直接 return,待接收那条留给下一轮(此时拒绝已 ack), 避免两个 Modal 叠加打扰。 ★ 两条退出路径都算「已知悉」并 ack —— 否则每次登录都会再弹同一条, 从提醒退化成骚扰。ack 失败不阻断,下一轮还会再提醒(宁可多提醒一次, 也不能漏)。 防叠加沿用上一轮的模块标志 + DOM 探测,标题白名单扩为两个。 顺带:流转明细时间线为转交节点补状态标签(已拒绝/待接收),被拒的转交 不再与成功的长得一模一样。 验证(node 复刻判定链) 既有拒绝、又有 2 件待接收 → 弹[转交被拒绝];确认后 ack; 下一轮 → 弹[待办通知] count=2;再轮询 → 不弹(未变)。 拒绝优先、不叠加、ack 后待接收提醒正常补上。 --- inventory-web/src/api/transaction.ts | 23 +++- .../PendingTransferNotifier/index.vue | 104 +++++++++++++----- .../src/views/transaction/records.vue | 8 ++ 3 files changed, 105 insertions(+), 30 deletions(-) diff --git a/inventory-web/src/api/transaction.ts b/inventory-web/src/api/transaction.ts index 5abf4a3..424f352 100644 --- a/inventory-web/src/api/transaction.ts +++ b/inventory-web/src/api/transaction.ts @@ -309,9 +309,14 @@ export function rejectBorrowTransfer(transferId: number, reason?: string) { } /** - * 待我接收的转交数量 —— 全局待办强提醒用(初始化 + 轮询)。 - * 极轻量,只做一次 count。 - * @returns { count } + * 全局待办强提醒的轮询数据源(初始化 + 轮询)。 + * + * ★ 一次请求返回两类信息,避免前端多打一个请求: + * count —— 待**我接收**的转交数量 + * rejects —— **我发起、被对方拒绝、尚未告知我**的转交 + * (被拒时物品责任仍在我手上,不告知就会误以为已交接出去) + * + * @returns { count, rejects: [{ id, borrow_no, sku, material_name, to_user_name, remark, ... }] } */ export function getPendingTransferCount() { return request({ @@ -320,6 +325,18 @@ export function getPendingTransferCount() { }) } +/** + * 确认已知悉「转交被拒绝」—— 写 reject_seen_at,之后不再提醒。 + * @param ids 留空表示该用户全部待告知的拒绝 + */ +export function ackTransferRejects(ids?: number[]) { + return request({ + url: '/v1/transactions/borrow/transfer/reject-ack', + method: 'post', + data: { ids } + }) +} + /** * 整单流转时间线(**borrow_no** 维度):借出 → 转交(可多次) → 归还 → 报废 * diff --git a/inventory-web/src/components/PendingTransferNotifier/index.vue b/inventory-web/src/components/PendingTransferNotifier/index.vue index 373fbaa..2d75a4d 100644 --- a/inventory-web/src/components/PendingTransferNotifier/index.vue +++ b/inventory-web/src/components/PendingTransferNotifier/index.vue @@ -4,10 +4,14 @@