chore: finalize amount migration fixes

This commit is contained in:
yml
2026-06-09 17:45:29 +08:00
parent 38c0ba69dc
commit 87673288ef
16 changed files with 214 additions and 2327 deletions
@@ -92,12 +92,14 @@ export function useSettlement(order: Ref<Order | null>) {
if (!order.value) return false
countering.value = true
try {
const reasonText = counterForm.value.reason.trim()
await counterCheckout(order.value.id, {
content: reasonText,
consumable_amount: counterForm.value.consumable_amount,
coin_consumed_m: counterForm.value.coin_consumed_m,
other_amount: counterForm.value.other_amount,
deposit_deduct_amount: counterForm.value.deposit_deduct_amount,
reason: counterForm.value.reason.trim(),
reason: reasonText,
evidence_urls: linesToList(counterForm.value.evidenceText),
})
onSuccess?.()
@@ -114,12 +116,14 @@ export function useSettlement(order: Ref<Order | null>) {
if (!order.value) return false
rejectingCheckout.value = true
try {
const reasonText = reason.trim()
await counterCheckout(order.value.id, {
content: reasonText,
consumable_amount: 0,
coin_consumed_m: 0,
other_amount: 0,
deposit_deduct_amount: 0,
reason: reason.trim(),
reason: reasonText,
evidence_urls: [],
})
onSuccess?.()
@@ -280,12 +280,14 @@ async function handleCounterCheckout() {
if (!order.value) return
countering.value = true
try {
const reasonText = counterForm.value.reason.trim()
await counterCheckout(order.value.id, {
content: reasonText,
consumable_amount: counterForm.value.consumable_amount,
coin_consumed_m: counterForm.value.coin_consumed_m,
other_amount: counterForm.value.other_amount,
deposit_deduct_amount: counterForm.value.deposit_deduct_amount,
reason: counterForm.value.reason,
reason: reasonText,
evidence_urls: linesToList(counterForm.value.evidenceText),
})
showToast({ message: '结账修正已提交,等待租客确认', icon: 'passed' })
@@ -980,7 +982,10 @@ async function copyListingCode() {
<van-cell
title="押金赔付扣除"
:value="`¥${money(
amountYuan(order.checkout.deposit_deduct_amount_cent, order.checkout.deposit_deduct_amount)
amountYuan(
order.checkout.deposit_deduct_amount_cent,
order.checkout.deposit_deduct_amount
)
)}`"
value-class="red-text"
/>
@@ -364,12 +364,14 @@ async function handleCounterCheckout() {
if (!order.value) return
countering.value = true
try {
const reasonText = counterForm.value.reason.trim()
await counterCheckout(order.value.id, {
content: reasonText,
consumable_amount: counterForm.value.consumable_amount,
coin_consumed_m: counterForm.value.coin_consumed_m,
other_amount: counterForm.value.other_amount,
deposit_deduct_amount: counterForm.value.deposit_deduct_amount,
reason: counterForm.value.reason,
reason: reasonText,
evidence_urls: linesToList(counterForm.value.evidenceText),
})
ElMessage.success('结账修正已提交,等待租客确认')
@@ -558,14 +560,18 @@ function checkoutContentWithSummary() {
`额外消耗品:${usedResources
.map(
item =>
`${item.label} ${readResourceUsage(item.key)}/${item.quantity}${isChargedResource(item) ? `,金额¥${money(resourceLineAmount(item))}` : ',赠送不扣款'}`
`${item.label} ${readResourceUsage(item.key)}/${item.quantity}${
isChargedResource(item) ? `,金额¥${money(resourceLineAmount(item))}` : ',赠送不扣款'
}`
)
.join('')}`
)
}
if (Number(checkoutForm.value.coin_consumed_m || 0) > 0) {
lines.push(
`哈夫币消耗:${quantity(Number(checkoutForm.value.coin_consumed_m))}M,预计剩余${quantity(remainingHafCoinM.value)}M`
`哈夫币消耗:${quantity(Number(checkoutForm.value.coin_consumed_m))}M,预计剩余${quantity(
remainingHafCoinM.value
)}M`
)
}
if (lines.length === 0) {
@@ -617,7 +623,9 @@ function ownerActualIncome(item: Order) {
if (item.owner_id !== session.userId) return null
const value = item.checkout?.owner_income_amount_cent
if (typeof value === 'number') return centToYuan(value)
return typeof item.checkout?.owner_income_amount === 'number' ? item.checkout.owner_income_amount : null
return typeof item.checkout?.owner_income_amount === 'number'
? item.checkout.owner_income_amount
: null
}
function quantity(value: unknown) {
@@ -637,10 +645,16 @@ function isRecord(value: unknown): value is Record<string, unknown> {
function hydrateCounterForm() {
if (!order.value?.checkout) return
const checkout = order.value.checkout
counterForm.value.consumable_amount = amountYuan(checkout.consumable_amount_cent, checkout.consumable_amount)
counterForm.value.consumable_amount = amountYuan(
checkout.consumable_amount_cent,
checkout.consumable_amount
)
counterForm.value.coin_consumed_m = checkout.coin_consumed_m
counterForm.value.other_amount = amountYuan(checkout.other_amount_cent, checkout.other_amount)
counterForm.value.deposit_deduct_amount = amountYuan(checkout.deposit_deduct_amount_cent, checkout.deposit_deduct_amount)
counterForm.value.deposit_deduct_amount = amountYuan(
checkout.deposit_deduct_amount_cent,
checkout.deposit_deduct_amount
)
}
function linesToList(value: string) {
@@ -774,9 +788,15 @@ async function copyListingCode() {
</div>
<div class="metric-card">
<span class="metric-label">押金</span>
<strong class="metric-value">¥{{ money(amountYuan(order.deposit_amount_cent, order.deposit_amount)) }}</strong>
<span v-if="amountYuan(order.deposit_waived_amount_cent, order.deposit_waived_amount) > 0" class="metric-note"
>已免押 ¥{{ money(amountYuan(order.deposit_waived_amount_cent, order.deposit_waived_amount)) }}</span
<strong class="metric-value"
>¥{{ money(amountYuan(order.deposit_amount_cent, order.deposit_amount)) }}</strong
>
<span
v-if="amountYuan(order.deposit_waived_amount_cent, order.deposit_waived_amount) > 0"
class="metric-note"
>已免押 ¥{{
money(amountYuan(order.deposit_waived_amount_cent, order.deposit_waived_amount))
}}</span
>
</div>
</div>
@@ -958,32 +978,83 @@ async function copyListingCode() {
<div class="checkout-summary-card">
<div class="summary-row">
<span>实际结算租金</span>
<strong>¥{{ money(amountYuan(order.checkout.display_amount_cent, order.checkout.display_amount)) }}</strong>
<strong
>¥{{
money(
amountYuan(order.checkout.display_amount_cent, order.checkout.display_amount)
)
}}</strong
>
</div>
<div class="summary-row">
<span>预收押金</span>
<strong>
¥{{ money(amountYuan(order.checkout.deposit_amount_cent, order.checkout.deposit_amount)) }}
<em v-if="amountYuan(order.deposit_waived_amount_cent, order.deposit_waived_amount) > 0"
>已免押 ¥{{ money(amountYuan(order.deposit_waived_amount_cent, order.deposit_waived_amount)) }}</em
¥{{
money(
amountYuan(order.checkout.deposit_amount_cent, order.checkout.deposit_amount)
)
}}
<em
v-if="
amountYuan(order.deposit_waived_amount_cent, order.deposit_waived_amount) > 0
"
>已免押 ¥{{
money(amountYuan(order.deposit_waived_amount_cent, order.deposit_waived_amount))
}}</em
>
</strong>
</div>
<div class="summary-row">
<span>额外消耗品已用</span>
<strong class="warning">¥{{ money(amountYuan(order.checkout.consumable_amount_cent, order.checkout.consumable_amount)) }}</strong>
<strong class="warning"
>¥{{
money(
amountYuan(
order.checkout.consumable_amount_cent,
order.checkout.consumable_amount
)
)
}}</strong
>
</div>
<div class="summary-row">
<span>押金赔付扣除</span>
<strong class="warning">¥{{ money(amountYuan(order.checkout.deposit_deduct_amount_cent, order.checkout.deposit_deduct_amount)) }}</strong>
<strong class="warning"
>¥{{
money(
amountYuan(
order.checkout.deposit_deduct_amount_cent,
order.checkout.deposit_deduct_amount
)
)
}}</strong
>
</div>
<div v-if="isRenter" class="summary-row highlight">
<span>退还租客(未使用租金 + 剩余押金)</span>
<strong class="amount">¥{{ money(amountYuan(order.checkout.renter_refund_amount_cent, order.checkout.renter_refund_amount)) }}</strong>
<strong class="amount"
>¥{{
money(
amountYuan(
order.checkout.renter_refund_amount_cent,
order.checkout.renter_refund_amount
)
)
}}</strong
>
</div>
<div v-if="isOwner" class="summary-row highlight">
<span>号主最终收入(租金 + 押金赔付)</span>
<strong class="amount">¥{{ money(amountYuan(order.checkout.owner_income_amount_cent, order.checkout.owner_income_amount)) }}</strong>
<strong class="amount"
>¥{{
money(
amountYuan(
order.checkout.owner_income_amount_cent,
order.checkout.owner_income_amount
)
)
}}</strong
>
</div>
<div v-if="order.checkout.content" class="summary-note">
<label>说明:</label>