优化订单交接和结账界面
This commit is contained in:
@@ -48,9 +48,9 @@ export interface UseOrderActionsOptions {
|
||||
notifyError: (message: string) => void
|
||||
/** 警告提示,用于表单校验未通过等非致命场景。 */
|
||||
notifyWarning: (message: string) => void
|
||||
/** 二次确认。返回 true 表示用户确认继续,false 表示取消。PC 注入直接 resolve(true),Mobile 注入 showDialog。 */
|
||||
/** 二次确认。返回 true 表示用户确认继续,false 表示取消。 */
|
||||
confirm: (opts: { title: string; message: string }) => Promise<boolean>
|
||||
/** 需要走二次确认的 handler 名集合。Mobile 传 ['cancel','confirmCheckout','acceptCheckout','cancelDispute'],PC 传 []。 */
|
||||
/** 需要走二次确认的 handler 名集合。 */
|
||||
actionsNeedingConfirm: readonly string[]
|
||||
/** 支付前选择支付方式。返回 null 表示用户取消支付。 */
|
||||
selectPayWay: () => Promise<PaymentPayWay | null>
|
||||
@@ -78,6 +78,7 @@ export const CONFIRMABLE_ACTIONS = [
|
||||
'confirmCheckout',
|
||||
'acceptCheckout',
|
||||
'cancelDispute',
|
||||
'submitCheckout',
|
||||
] as const
|
||||
|
||||
export interface CheckoutFormState {
|
||||
@@ -152,6 +153,7 @@ export function useOrderActions(options: UseOrderActionsOptions) {
|
||||
const disputeType = ref('cannot_login')
|
||||
const disputeDescription = ref('')
|
||||
const disputeEvidenceText = ref('')
|
||||
let checkoutDefaultsHydratedOrderID: number | null = null
|
||||
|
||||
// 结账快照能力(资源金额、内容摘要、资源使用量规范化)
|
||||
const {
|
||||
@@ -217,12 +219,28 @@ export function useOrderActions(options: UseOrderActionsOptions) {
|
||||
counterForm.value = hydrateCounterFormFromCheckout(order.value.checkout)
|
||||
}
|
||||
|
||||
function hydrateCheckoutDefaults() {
|
||||
if (!order.value || !isRenter.value || !['renting', 'overdue'].includes(order.value.status)) {
|
||||
return
|
||||
}
|
||||
if (checkoutDefaultsHydratedOrderID === order.value.id) return
|
||||
const defaultCoinConsumedM = snapshotHafCoinM.value
|
||||
if (defaultCoinConsumedM > 0 && Number(checkoutForm.value.coin_consumed_m || 0) <= 0) {
|
||||
checkoutForm.value = {
|
||||
...checkoutForm.value,
|
||||
coin_consumed_m: defaultCoinConsumedM,
|
||||
}
|
||||
}
|
||||
checkoutDefaultsHydratedOrderID = order.value.id
|
||||
}
|
||||
|
||||
async function loadOrder() {
|
||||
loading.value = true
|
||||
try {
|
||||
order.value = await fetchOrder(String(route.params.id))
|
||||
handoffRecords.value = await fetchHandoffRecords(String(route.params.id))
|
||||
hydrateResourceUsage()
|
||||
hydrateCheckoutDefaults()
|
||||
hydrateCounterForm()
|
||||
if (
|
||||
!autoPayHandled &&
|
||||
@@ -317,6 +335,14 @@ export function useOrderActions(options: UseOrderActionsOptions) {
|
||||
|
||||
async function handleSubmitCheckout() {
|
||||
if (!order.value) return
|
||||
if (needsConfirm('submitCheckout')) {
|
||||
const ok = await options.confirm({
|
||||
title: '确认提交结账',
|
||||
message:
|
||||
'结账数据会影响租金、押金赔付和双方结算金额。请确认哈夫币消耗、额外消耗品、押金赔付和证据链接已认真核对,提交后将发送给号主确认。',
|
||||
})
|
||||
if (!ok) return
|
||||
}
|
||||
returning.value = true
|
||||
try {
|
||||
const consumableAmount = resourceChargeAmount.value
|
||||
|
||||
Reference in New Issue
Block a user