fix(worker-platform): 优化工单号精准检索与跨状态流转展示,修复状态更新后工单消失问题

1. 后端查询重构:新增 isWorkOrderNoLookupKeyword 工单号前缀与忽略大小写精准索引匹配,优化后端 work-order-query-repo 的工单号检索路径;
2. 前端单号智能穿透:管理员输入 WO... 等精准单号查询时,自动放宽细粒度排他状态/阶段过滤,避免加好友/验收等状态流转后工单因旧状态筛选脱靶消失;
3. 搜索栏交互升级:输入框清空即时重置关键词与页码,支持回车/按钮/清除全方位无缝触发;
4. 详情抽屉与多面板联动:增加 ordersQuery 数据更新对 detailOrder 的自动同步,并将 refreshAll 广播范围覆盖至寄售仓库与统计指标。
This commit is contained in:
yml2213
2026-09-18 19:36:17 +08:00
parent 68cd309bdd
commit d6523635ea
12 changed files with 526 additions and 93 deletions
@@ -1,7 +1,10 @@
import assert from 'node:assert/strict'
import test from 'node:test'
import { isPlatformOrderIdLookupKeyword } from './platform-order-id.js'
import {
isPlatformOrderIdLookupKeyword,
isWorkOrderNoLookupKeyword,
} from './platform-order-id.js'
test('识别纯数字平台订单号', () => {
assert.equal(isPlatformOrderIdLookupKeyword('20247230034021572'), true)
@@ -14,9 +17,19 @@ test('识别拼多多带连字符的 order_sn', () => {
assert.equal(isPlatformOrderIdLookupKeyword('260912-123456789012345'), true)
})
test('识别统一内部工单号 (WO...)', () => {
assert.equal(isWorkOrderNoLookupKeyword('WOb320ee0b39b9'), true)
assert.equal(isWorkOrderNoLookupKeyword('wob320ee0b39b9'), true)
assert.equal(isWorkOrderNoLookupKeyword('WO26091216358821'), true)
assert.equal(isWorkOrderNoLookupKeyword('WO12'), false)
assert.equal(isWorkOrderNoLookupKeyword('20247230034021572'), false)
})
test('拒绝普通关键词', () => {
assert.equal(isPlatformOrderIdLookupKeyword('皮肤店'), false)
assert.equal(isPlatformOrderIdLookupKeyword('安卓怒嚎3钻'), false)
assert.equal(isPlatformOrderIdLookupKeyword('DT881aa66294cc'), false)
assert.equal(isPlatformOrderIdLookupKeyword(''), false)
assert.equal(isWorkOrderNoLookupKeyword('皮肤店'), false)
})
@@ -6,3 +6,12 @@ export function isPlatformOrderIdLookupKeyword(value: unknown): boolean {
const trimmed = String(value || '').trim()
return /^\d{6,}(-\d{6,})?$/.test(trimmed)
}
/**
* 识别内部统一工单号 (以 WO 开头且至少 4 位字符,如 WOb320ee0b39b9、WO26091216358821)。
*/
export function isWorkOrderNoLookupKeyword(value: unknown): boolean {
const trimmed = String(value || '').trim()
return /^WO[0-9a-zA-Z]{4,}$/i.test(trimmed)
}