add:新增同一个工单同一人可以多次拼单:拼单后按钮固定显示「再拼一次」
This commit is contained in:
@@ -121,6 +121,13 @@ export function patchWorkerWorkOrderListEnvelope(
|
||||
current: unknown,
|
||||
event: WorkerListEvent,
|
||||
insert = false,
|
||||
/**
|
||||
* 就地更新时,快照里没有的「本打手私有字段」保留旧值。
|
||||
*
|
||||
* 大厅广播是发给所有打手的通用快照,天然没有 `myShare`/`myShares`(那是每个打手自己的份额)。
|
||||
* 整行替换会把「再拼一次」冲回「拼单 ¥x/份」,所以覆盖行时必须保留。
|
||||
*/
|
||||
preserveFields: readonly string[] = [],
|
||||
): unknown {
|
||||
if (!isRecord(current) || !isRecord(current.data) || !Array.isArray(current.data.items)) {
|
||||
return current
|
||||
@@ -140,7 +147,14 @@ export function patchWorkerWorkOrderListEnvelope(
|
||||
(entry) => toNumber((entry as { workOrderId?: unknown })?.workOrderId) === id,
|
||||
)
|
||||
if (index >= 0) {
|
||||
nextItems = items.map((entry, itemIndex) => (itemIndex === index ? event.data : entry))
|
||||
const existing = items[index]
|
||||
const merged: Record<string, unknown> = { ...data }
|
||||
if (isRecord(existing)) {
|
||||
for (const field of preserveFields) {
|
||||
if (!(field in merged)) merged[field] = existing[field]
|
||||
}
|
||||
}
|
||||
nextItems = items.map((entry, itemIndex) => (itemIndex === index ? merged : entry))
|
||||
} else if (insert) {
|
||||
nextItems = [event.data, ...items]
|
||||
} else {
|
||||
@@ -173,12 +187,13 @@ export function patchWorkerWorkOrderInfiniteEnvelope(
|
||||
current: unknown,
|
||||
event: WorkerListEvent,
|
||||
insert = false,
|
||||
preserveFields: readonly string[] = [],
|
||||
): unknown {
|
||||
if (!isRecord(current) || !Array.isArray(current.pages)) return current
|
||||
return {
|
||||
...current,
|
||||
pages: current.pages.map((page: unknown, index: number) =>
|
||||
patchWorkerWorkOrderListEnvelope(page, event, insert && index === 0),
|
||||
patchWorkerWorkOrderListEnvelope(page, event, insert && index === 0, preserveFields),
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user