按实际纯币金额计算租客优惠与积分
This commit is contained in:
@@ -32,9 +32,16 @@ export interface Order {
|
||||
platform_fee_cent?: number
|
||||
rent_original_amount_cent?: number
|
||||
rent_discount_amount_cent?: number
|
||||
pure_coin_original_amount_cent?: number
|
||||
extra_item_original_amount_cent?: number
|
||||
actual_coin_consumed_m?: number
|
||||
actual_pure_coin_amount_cent?: number
|
||||
actual_pure_coin_discount_cent?: number
|
||||
renter_growth_level?: string
|
||||
renter_growth_level_name?: string
|
||||
renter_discount_bps?: number
|
||||
growth_points_basis_cent?: number
|
||||
growth_points_per_yuan?: number
|
||||
growth_points_awarded?: number
|
||||
growth_points_awarded_at?: string
|
||||
account_snapshot?: Record<string, unknown>
|
||||
@@ -107,6 +114,9 @@ export interface Checkout {
|
||||
owner_rent_amount_cent?: number
|
||||
platform_fee_cent?: number
|
||||
deposit_amount_cent: number
|
||||
pure_coin_amount_cent: number
|
||||
pure_coin_discount_cent: number
|
||||
pure_coin_payable_cent: number
|
||||
consumable_amount_cent: number
|
||||
coin_consumed_m: number
|
||||
other_amount_cent: number
|
||||
|
||||
@@ -25,6 +25,22 @@ const checkout = computed(() => props.order.checkout)
|
||||
title="实际结算租金"
|
||||
:value="`¥${money(amountYuan(checkout.display_amount_cent))}`"
|
||||
/>
|
||||
<van-cell
|
||||
v-if="props.isRenter"
|
||||
title="实际纯币原价"
|
||||
:value="`¥${money(amountYuan(checkout.pure_coin_amount_cent))}`"
|
||||
/>
|
||||
<van-cell
|
||||
v-if="props.isRenter && Number(checkout.pure_coin_discount_cent || 0) > 0"
|
||||
title="成长等级优惠"
|
||||
:value="`-¥${money(amountYuan(checkout.pure_coin_discount_cent))}`"
|
||||
value-class="green-text"
|
||||
/>
|
||||
<van-cell
|
||||
v-if="props.isRenter"
|
||||
title="折后纯币金额"
|
||||
:value="`¥${money(amountYuan(checkout.pure_coin_payable_cent))}`"
|
||||
/>
|
||||
<van-cell
|
||||
title="押金总额"
|
||||
:label="
|
||||
@@ -43,10 +59,7 @@ const checkout = computed(() => props.order.checkout)
|
||||
:value="`¥${money(amountYuan(checkout.deposit_deduct_amount_cent))}`"
|
||||
value-class="red-text"
|
||||
/>
|
||||
<van-cell
|
||||
title="哈夫币实际消耗"
|
||||
:value="`${checkout.coin_consumed_m}M`"
|
||||
/>
|
||||
<van-cell title="哈夫币实际消耗" :value="`${checkout.coin_consumed_m}M`" />
|
||||
<van-cell
|
||||
v-if="Number(checkout.overshoot_amount_cent || 0) > 0"
|
||||
title="打超金额(从押金)"
|
||||
@@ -77,6 +90,13 @@ const checkout = computed(() => props.order.checkout)
|
||||
:value="`¥${money(amountYuan(checkout.owner_income_amount_cent))}`"
|
||||
value-class="green-text"
|
||||
/>
|
||||
<van-cell
|
||||
v-if="props.isRenter && props.order.status === 'completed'"
|
||||
title="本单成长积分"
|
||||
:label="`积分基数 ¥${money(amountYuan(props.order.growth_points_basis_cent))}`"
|
||||
:value="`+${Number(props.order.growth_points_awarded || 0)}`"
|
||||
value-class="green-text"
|
||||
/>
|
||||
<van-cell v-if="checkout.content" title="结账备注" :label="checkout.content" />
|
||||
<van-cell
|
||||
v-if="checkout.owner_adjustment_reason"
|
||||
@@ -95,6 +115,21 @@ const checkout = computed(() => props.order.checkout)
|
||||
<span>实际结算租金</span>
|
||||
<strong>¥{{ money(amountYuan(checkout.display_amount_cent)) }}</strong>
|
||||
</div>
|
||||
<div v-if="props.isRenter" class="summary-row">
|
||||
<span>实际纯币原价</span>
|
||||
<strong>¥{{ money(amountYuan(checkout.pure_coin_amount_cent)) }}</strong>
|
||||
</div>
|
||||
<div
|
||||
v-if="props.isRenter && Number(checkout.pure_coin_discount_cent || 0) > 0"
|
||||
class="summary-row"
|
||||
>
|
||||
<span>成长等级优惠</span>
|
||||
<strong class="amount">-¥{{ money(amountYuan(checkout.pure_coin_discount_cent)) }}</strong>
|
||||
</div>
|
||||
<div v-if="props.isRenter" class="summary-row">
|
||||
<span>折后纯币金额</span>
|
||||
<strong>¥{{ money(amountYuan(checkout.pure_coin_payable_cent)) }}</strong>
|
||||
</div>
|
||||
<div class="summary-row">
|
||||
<span>预收押金</span>
|
||||
<strong>
|
||||
@@ -138,6 +173,15 @@ const checkout = computed(() => props.order.checkout)
|
||||
<span>号主最终收入(租金 + 押金赔付)</span>
|
||||
<strong class="amount">¥{{ money(amountYuan(checkout.owner_income_amount_cent)) }}</strong>
|
||||
</div>
|
||||
<div
|
||||
v-if="props.isRenter && props.order.status === 'completed'"
|
||||
class="summary-row highlight"
|
||||
>
|
||||
<span>
|
||||
本单成长积分(基数 ¥{{ money(amountYuan(props.order.growth_points_basis_cent)) }})
|
||||
</span>
|
||||
<strong class="amount">+{{ Number(props.order.growth_points_awarded || 0) }}</strong>
|
||||
</div>
|
||||
<div v-if="checkout.content" class="summary-note">
|
||||
<label>说明:</label>
|
||||
<p>{{ checkout.content }}</p>
|
||||
|
||||
@@ -174,6 +174,13 @@ export function useOrderActions(options: UseOrderActionsOptions) {
|
||||
const orderRentDisplayAmount = computed(() =>
|
||||
order.value ? orderRentAmount(order.value, session.userId) : 0
|
||||
)
|
||||
const renterDiscountDisplayCent = computed(() => {
|
||||
if (!order.value) return 0
|
||||
if (order.value.status === 'completed') {
|
||||
return Number(order.value.actual_pure_coin_discount_cent || 0)
|
||||
}
|
||||
return Number(order.value.rent_discount_amount_cent || 0)
|
||||
})
|
||||
const ownerIncomeDisplayAmount = computed(() =>
|
||||
order.value ? ownerActualIncome(order.value, session.userId) : null
|
||||
)
|
||||
@@ -206,9 +213,7 @@ export function useOrderActions(options: UseOrderActionsOptions) {
|
||||
(isRenter.value && order.value.status === 'pending_checkout_accept')
|
||||
)
|
||||
})
|
||||
const checkoutShortfallCent = computed(() =>
|
||||
Number(order.value?.checkout?.shortfall_cent || 0)
|
||||
)
|
||||
const checkoutShortfallCent = computed(() => Number(order.value?.checkout?.shortfall_cent || 0))
|
||||
const checkoutOvershootCent = computed(() =>
|
||||
Number(order.value?.checkout?.overshoot_amount_cent || 0)
|
||||
)
|
||||
@@ -410,6 +415,9 @@ export function useOrderActions(options: UseOrderActionsOptions) {
|
||||
await confirmCheckout(order.value.id)
|
||||
options.notifySuccess('结账已确认,订单完成')
|
||||
await loadOrder()
|
||||
if (isRenter.value) {
|
||||
await session.loadMe().catch(() => undefined)
|
||||
}
|
||||
} catch (error) {
|
||||
options.notifyError(readError(error, '确认结账失败'))
|
||||
} finally {
|
||||
@@ -469,6 +477,9 @@ export function useOrderActions(options: UseOrderActionsOptions) {
|
||||
await acceptCheckout(order.value.id)
|
||||
options.notifySuccess('已确认结账,订单完成')
|
||||
await loadOrder()
|
||||
if (isRenter.value) {
|
||||
await session.loadMe().catch(() => undefined)
|
||||
}
|
||||
} catch (error) {
|
||||
options.notifyError(readError(error, '确认结账失败'))
|
||||
} finally {
|
||||
@@ -676,6 +687,7 @@ export function useOrderActions(options: UseOrderActionsOptions) {
|
||||
listingCode,
|
||||
orderAmountLabel,
|
||||
orderRentDisplayAmount,
|
||||
renterDiscountDisplayCent,
|
||||
ownerIncomeDisplayAmount,
|
||||
ownerIncomeLabel,
|
||||
canOpenDispute,
|
||||
|
||||
@@ -69,6 +69,7 @@ const {
|
||||
listingCode,
|
||||
orderAmountLabel,
|
||||
orderRentDisplayAmount,
|
||||
renterDiscountDisplayCent,
|
||||
ownerIncomeDisplayAmount,
|
||||
ownerIncomeLabel,
|
||||
canOpenDispute,
|
||||
@@ -188,12 +189,9 @@ async function copyListingCode() {
|
||||
<div class="meta-item">
|
||||
<span class="meta-label">{{ orderAmountLabel }}</span>
|
||||
<strong class="meta-value accent">¥{{ money(orderRentDisplayAmount) }}</strong>
|
||||
<span
|
||||
v-if="isRenter && Number(order.rent_discount_amount_cent || 0) > 0"
|
||||
class="meta-note"
|
||||
>
|
||||
<span v-if="isRenter && renterDiscountDisplayCent > 0" class="meta-note">
|
||||
{{ order.renter_growth_level_name || '成长等级' }}优惠 ¥{{
|
||||
money(amountYuan(order.rent_discount_amount_cent))
|
||||
money(amountYuan(renterDiscountDisplayCent))
|
||||
}}
|
||||
</span>
|
||||
</div>
|
||||
@@ -212,6 +210,16 @@ async function copyListingCode() {
|
||||
<span class="meta-label">交接状态</span>
|
||||
<strong class="meta-value">{{ orderHandoffStatusLabel(order) }}</strong>
|
||||
</div>
|
||||
<div v-if="isRenter && order.status === 'completed' && !order.checkout" class="meta-item">
|
||||
<span class="meta-label">实际纯币原价</span>
|
||||
<strong class="meta-value accent"
|
||||
>¥{{ money(amountYuan(order.actual_pure_coin_amount_cent)) }}</strong
|
||||
>
|
||||
</div>
|
||||
<div v-if="isRenter && order.status === 'completed' && !order.checkout" class="meta-item">
|
||||
<span class="meta-label">本单成长积分</span>
|
||||
<strong class="meta-value income">+{{ order.growth_points_awarded || 0 }}</strong>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -366,8 +374,10 @@ async function copyListingCode() {
|
||||
>
|
||||
<h3 class="section-title">结账处理</h3>
|
||||
<p class="action-hint">
|
||||
{{ checkoutRoundLabel || '请核对消耗与扣款' }}。确认无误后同意完结;也可修改方案交对方确认(最多
|
||||
6 轮)。押金不足无法自动完结,请改方案或争议。
|
||||
{{
|
||||
checkoutRoundLabel || '请核对消耗与扣款'
|
||||
}}。确认无误后同意完结;也可修改方案交对方确认(最多 6
|
||||
轮)。押金不足无法自动完结,请改方案或争议。
|
||||
</p>
|
||||
<p v-if="checkoutShortfallCent > 0" class="action-hint" style="color: #ef4444">
|
||||
押金不足差额 ¥{{ money(amountYuan(checkoutShortfallCent)) }},无法同意完结。
|
||||
@@ -490,7 +500,9 @@ async function copyListingCode() {
|
||||
</header>
|
||||
<div class="popup-body">
|
||||
<p class="form-hint-info">
|
||||
{{ checkoutRoundLabel }}。可填实际哈夫币消耗(允许超过发布量),打超按比例从押金扣。提案将交给对方确认。
|
||||
{{
|
||||
checkoutRoundLabel
|
||||
}}。可填实际哈夫币消耗(允许超过发布量),打超按比例从押金扣。提案将交给对方确认。
|
||||
</p>
|
||||
<van-cell-group :border="false">
|
||||
<van-field label="额外消耗品已用">
|
||||
|
||||
@@ -68,6 +68,7 @@ const {
|
||||
listingCode,
|
||||
orderAmountLabel,
|
||||
orderRentDisplayAmount,
|
||||
renterDiscountDisplayCent,
|
||||
ownerIncomeDisplayAmount,
|
||||
ownerIncomeLabel,
|
||||
canOpenDispute,
|
||||
@@ -388,12 +389,9 @@ watch([() => route.query.focus, order, loading], () => {
|
||||
<div class="metric-card highlight">
|
||||
<span class="metric-label">{{ orderAmountLabel }}</span>
|
||||
<strong class="metric-value amount">¥{{ money(orderRentDisplayAmount) }}</strong>
|
||||
<span
|
||||
v-if="isRenter && Number(order.rent_discount_amount_cent || 0) > 0"
|
||||
class="metric-note"
|
||||
>
|
||||
<span v-if="isRenter && renterDiscountDisplayCent > 0" class="metric-note">
|
||||
{{ order.renter_growth_level_name || '成长等级' }}优惠 ¥{{
|
||||
money(amountYuan(order.rent_discount_amount_cent))
|
||||
money(amountYuan(renterDiscountDisplayCent))
|
||||
}}
|
||||
</span>
|
||||
</div>
|
||||
@@ -410,6 +408,22 @@ watch([() => route.query.focus, order, loading], () => {
|
||||
>已免押 ¥{{ money(amountYuan(order.deposit_waived_amount_cent)) }}</span
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
v-if="isRenter && order.status === 'completed' && !order.checkout"
|
||||
class="metric-card"
|
||||
>
|
||||
<span class="metric-label">实际纯币原价</span>
|
||||
<strong class="metric-value amount"
|
||||
>¥{{ money(amountYuan(order.actual_pure_coin_amount_cent)) }}</strong
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
v-if="isRenter && order.status === 'completed' && !order.checkout"
|
||||
class="metric-card income"
|
||||
>
|
||||
<span class="metric-label">本单成长积分</span>
|
||||
<strong class="metric-value">+{{ order.growth_points_awarded || 0 }}</strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="order" class="info-section">
|
||||
|
||||
Reference in New Issue
Block a user