调整预订事项字段展示与基础信息编辑

This commit is contained in:
andy
2026-07-22 10:34:26 +07:00
parent 08c8b0165b
commit 891a4aa6cf
10 changed files with 212 additions and 65 deletions

View File

@@ -283,11 +283,12 @@ async function loadDetail(): Promise<void> {
}
function applyDetail(result: ReservationV4OrderTaskDetailResult): void {
detail.value = result
const normalizedResult = normalizeReservationV4Detail(result)
detail.value = normalizedResult
const cards = [
result.source_message_card,
result.basic_information_card,
...result.business_cards,
normalizedResult.source_message_card,
normalizedResult.basic_information_card,
...normalizedResult.business_cards,
].filter((card): card is ReservationV4TaskCardResult => Boolean(card))
cardValues.value = cards.reduce<Record<string, ReservationRecord>>((values, card) => {
values[card.card_id] = buildReservationV4InitialFieldValues(card.fields)
@@ -298,13 +299,60 @@ function applyDetail(result: ReservationV4OrderTaskDetailResult): void {
cardSuccessMessages.value = {}
reviewForms.value = cards.reduce<Record<string, { confirmed_order_id: string; reason: string }>>((forms, card) => {
forms[card.card_id] = {
confirmed_order_id: result.order_task.order_id ?? '',
confirmed_order_id: normalizedResult.order_task.order_id ?? '',
reason: '',
}
return forms
}, {})
}
function normalizeReservationV4Detail(result: ReservationV4OrderTaskDetailResult): ReservationV4OrderTaskDetailResult {
return {
...result,
basic_information_card: result.basic_information_card
? normalizeBasicInformationCard(result.basic_information_card)
: result.basic_information_card,
}
}
function normalizeBasicInformationCard(card: ReservationV4TaskCardResult): ReservationV4TaskCardResult {
return {
...card,
fields: card.fields.map((field) =>
isEditableBasicMarketSourceField(field)
? normalizeEditableBasicMarketSourceField(card, field)
: field,
),
}
}
function normalizeEditableBasicMarketSourceField(
card: ReservationV4TaskCardResult,
field: ReservationV4TaskCardResult['fields'][number],
): ReservationV4TaskCardResult['fields'][number] {
const reviewMode = card.card_status === 'REVIEW_REQUIRED'
return {
...field,
editable: true,
raw_readonly: false,
control_type: 'TEXT',
edit_scope: reviewMode ? 'REVIEW' : 'CONFIRM',
write_target: reviewMode ? 'REVIEW_RESOLUTION_FIELD_OVERRIDES' : 'CONFIRMED_PAYLOAD_JSON',
control_hint: null,
}
}
function isEditableBasicMarketSourceField(field: ReservationV4TaskCardResult['fields'][number]): boolean {
const key = normalizeV4FieldKey(field)
return key === '/basic_information/market_code' || key === '/basic_information/source_code'
}
function normalizeV4FieldKey(field: ReservationV4TaskCardResult['fields'][number]): string {
return reservationV4FieldKey(field)
.replace(/\./g, '/')
.replace(/^([^/])/, '/$1')
}
function setCardValues(card: ReservationV4TaskCardResult, values: ReservationRecord): void {
cardValues.value = {
...cardValues.value,