优化仲裁
This commit is contained in:
@@ -15,7 +15,7 @@ import {
|
||||
} from '@/shared/utils/statusLabels'
|
||||
import { formatDateTime } from '@/shared/utils/time'
|
||||
import { formatListingNo } from '@/shared/utils/listingDisplay'
|
||||
import { yuanToCent } from '@/shared/utils/money'
|
||||
import { centToYuan, yuanToCent } from '@/shared/utils/money'
|
||||
import AdminTablePagination from '../components/AdminTablePagination.vue'
|
||||
|
||||
const loading = ref(false)
|
||||
@@ -27,6 +27,7 @@ const result = ref('release_deposit')
|
||||
const remark = ref('')
|
||||
const amount = ref<number | undefined>()
|
||||
const actualCoinConsumedM = ref<number | undefined>()
|
||||
const actualConsumableAmountYuan = ref<number | undefined>()
|
||||
const currentPage = ref(1)
|
||||
const currentPageSize = ref(20)
|
||||
const total = ref(0)
|
||||
@@ -43,6 +44,12 @@ const hasValidActualCoinConsumedM = computed(
|
||||
Number.isFinite(actualCoinConsumedM.value) &&
|
||||
actualCoinConsumedM.value >= 0
|
||||
)
|
||||
const hasValidActualConsumableAmount = computed(
|
||||
() =>
|
||||
typeof actualConsumableAmountYuan.value === 'number' &&
|
||||
Number.isFinite(actualConsumableAmountYuan.value) &&
|
||||
actualConsumableAmountYuan.value >= 0
|
||||
)
|
||||
const pendingCount = computed(
|
||||
() => disputes.value.filter(item => ['open', 'processing'].includes(item.status)).length
|
||||
)
|
||||
@@ -62,6 +69,7 @@ const canSubmitArbitration = computed(() => {
|
||||
!hasValidActualCoinConsumedM.value
|
||||
)
|
||||
return false
|
||||
if (isCompletedResult.value && !hasValidActualConsumableAmount.value) return false
|
||||
return true
|
||||
})
|
||||
function canArbitrate(row: Dispute) {
|
||||
@@ -163,6 +171,9 @@ function openArbitration(row: Dispute) {
|
||||
remark.value = row.arbitration_remark || ''
|
||||
amount.value = undefined
|
||||
actualCoinConsumedM.value = row.checkout_coin_consumed_m ?? undefined
|
||||
actualConsumableAmountYuan.value = centToYuan(
|
||||
row.checkout_consumable_amount_cent ?? row.extra_item_original_amount_cent ?? 0
|
||||
)
|
||||
}
|
||||
|
||||
function resetFilters() {
|
||||
@@ -301,6 +312,10 @@ async function handleArbitrate() {
|
||||
ElMessage.warning('请填写最终实际哈夫币消耗 M')
|
||||
return
|
||||
}
|
||||
if (isCompletedResult.value && !hasValidActualConsumableAmount.value) {
|
||||
ElMessage.warning('请填写最终实际额外物品消耗金额')
|
||||
return
|
||||
}
|
||||
submitting.value = true
|
||||
try {
|
||||
await arbitrateDispute(activeDispute.value.id, {
|
||||
@@ -308,11 +323,15 @@ async function handleArbitrate() {
|
||||
remark: remark.value.trim(),
|
||||
amount_cent: amount.value ? yuanToCent(amount.value) : undefined,
|
||||
actual_coin_consumed_m: isCompletedResult.value ? actualCoinConsumedM.value : undefined,
|
||||
actual_consumable_amount_cent: isCompletedResult.value
|
||||
? yuanToCent(actualConsumableAmountYuan.value)
|
||||
: undefined,
|
||||
})
|
||||
ElMessage.success('仲裁结果已保存,双方已收到通知')
|
||||
activeDispute.value = null
|
||||
remark.value = ''
|
||||
actualCoinConsumedM.value = undefined
|
||||
actualConsumableAmountYuan.value = undefined
|
||||
await loadDisputes()
|
||||
} catch (error) {
|
||||
ElMessage.error(readError(error, '仲裁失败'))
|
||||
@@ -527,6 +546,18 @@ async function handleArbitrate() {
|
||||
placeholder="实际消耗 M"
|
||||
/>
|
||||
</div>
|
||||
<div v-if="isCompletedResult" class="arbitration-field">
|
||||
<span>最终实际额外消耗品(元)</span>
|
||||
<el-input-number
|
||||
v-model="actualConsumableAmountYuan"
|
||||
class="full-control"
|
||||
:min="0"
|
||||
:max="1000000000"
|
||||
:precision="2"
|
||||
:step="1"
|
||||
placeholder="实际额外消耗品金额"
|
||||
/>
|
||||
</div>
|
||||
<el-input
|
||||
v-model="remark"
|
||||
class="panel-action"
|
||||
|
||||
@@ -10,6 +10,7 @@ export interface Dispute {
|
||||
order_status: string
|
||||
handoff_status: string
|
||||
settlement_status: string
|
||||
extra_item_original_amount_cent?: number
|
||||
listing_no: string
|
||||
title: string
|
||||
owner_id: number
|
||||
@@ -29,6 +30,7 @@ export interface Dispute {
|
||||
previous_settlement_status?: string
|
||||
checkout_id?: number
|
||||
checkout_coin_consumed_m?: number
|
||||
checkout_consumable_amount_cent?: number
|
||||
previous_checkout_status?: string
|
||||
arbitration_result: string
|
||||
arbitration_remark: string
|
||||
@@ -99,6 +101,7 @@ export async function arbitrateDispute(
|
||||
remark: string
|
||||
amount_cent?: number
|
||||
actual_coin_consumed_m?: number
|
||||
actual_consumable_amount_cent?: number
|
||||
}
|
||||
) {
|
||||
const { data } = await apiClient.post<ApiResponse<Dispute>>(
|
||||
|
||||
@@ -37,6 +37,7 @@ export interface Order {
|
||||
actual_coin_consumed_m?: number
|
||||
actual_pure_coin_amount_cent?: number
|
||||
actual_pure_coin_discount_cent?: number
|
||||
actual_extra_item_amount_cent?: number
|
||||
renter_growth_level?: string
|
||||
renter_growth_level_name?: string
|
||||
renter_discount_bps?: number
|
||||
|
||||
Reference in New Issue
Block a user