feat: 增加打手工单备注

This commit is contained in:
yml2213
2026-08-15 14:22:13 +08:00
parent af323af48e
commit 112a3272d2
9 changed files with 221 additions and 2 deletions
@@ -416,6 +416,7 @@ export function mapWorkOrderForWorker(
workOrder: WorkOrderRow,
permissions: { depositFreeAmount: number },
myShare?: WorkOrderShareRow | null,
workerNote = '',
) {
const mapped = mapWorkOrderAdmin(workOrder)
const {
@@ -429,6 +430,7 @@ export function mapWorkOrderForWorker(
return {
...visibleOrder,
freezeDepositAmount: resolveFreezeDepositAmount(workOrder, permissions),
workerNote,
myShare: myShare ? mapWorkOrderShare(myShare) : null,
}
}
@@ -48,6 +48,7 @@ import {
listWorkerFinanceRequests,
listWorkerSharesByWorker,
listWorkerWalletLedgers,
listWorkerWorkOrderNotes,
listWorkCategories,
listWorkOrders,
listWorkProductRules,
@@ -67,6 +68,7 @@ import {
updateWorkOrderDraftAcceptance,
updateWorkOrderShareAcceptanceRecord,
updateWorkOrderShareDraftAcceptance,
upsertWorkerWorkOrderNote,
updateWorkerPassword,
updateWorkerUser,
upsertWorkCategory,
@@ -981,14 +983,69 @@ export async function listWorkerMyOrders(query: JsonObject = {}, session: Worker
const myShareByOrderId = new Map(
myShares.map((share) => [Number(share.work_order_id), share]),
)
const notes = await listWorkerWorkOrderNotes(
worker.id,
items.map((item) => Number(item.id)),
)
const noteByOrderId = new Map(
notes.map((item) => [Number(item.work_order_id), String(item.note || '')]),
)
return {
items: items.map((item) =>
mapWorkOrderForWorker(item, permissions, myShareByOrderId.get(Number(item.id))),
mapWorkOrderForWorker(
item,
permissions,
myShareByOrderId.get(Number(item.id)),
noteByOrderId.get(Number(item.id)) || '',
),
),
pagination: { page, pageSize, total },
}
}
export async function saveWorkerOrderNote(
workOrderId: number | string,
payload: JsonObject = {},
session: WorkerSession,
) {
requireActiveWorkerSession(session)
const workOrder = await getRequiredWorkOrder(workOrderId)
const workerId = Number(session.workerId)
const note = String(payload.note || '').trim()
if (note.length > 100) {
throw createHttpError('备注不能超过 100 个字符', {
statusCode: 400,
errorCode: 'work_order_note_too_long',
})
}
const worker = await getRequiredWorker(workerId)
const sharingShare = await getWorkOrderShare(workOrder.id, workerId)
const isOrderOwner =
Number(workOrder.assigned_worker_id || 0) === workerId ||
Number(workOrder.last_assigned_worker_id || 0) === workerId
if (!sharingShare && !isOrderOwner) {
throw createHttpError('只能修改自己的订单备注', {
statusCode: 403,
errorCode: 'work_order_note_owner_required',
})
}
const savedNote = await upsertWorkerWorkOrderNote({
workOrderId: Number(workOrder.id),
workerId,
note,
now: nowIso(),
})
return {
order: mapWorkOrderForWorker(
workOrder,
resolveWorkerPermissions(worker),
sharingShare,
savedNote,
),
}
}
export async function joinWorkerSharingOrder(
workOrderId: number | string,
payload: JsonObject = {},