|
|
|
@@ -64,6 +64,9 @@
|
|
|
|
|
<template #col-creditArrearsStatus="{ row }">
|
|
|
|
|
<el-tag size="small" :type="creditArrearsTagType(row.creditArrearsStatus)">{{ creditArrearsLabel(row.creditArrearsStatus) }}</el-tag>
|
|
|
|
|
</template>
|
|
|
|
|
<template #col-refundStatus="{ row }">
|
|
|
|
|
<el-tag size="small" :type="refundTagType(row.refundStatus)">{{ refundLabel(row.refundStatus) }}</el-tag>
|
|
|
|
|
</template>
|
|
|
|
|
<template #col-incomeTotal="{ row }">
|
|
|
|
|
<span class="payable">{{ formatMoney(row.incomeTotal) }}</span>
|
|
|
|
|
</template>
|
|
|
|
@@ -83,6 +86,15 @@
|
|
|
|
|
</template>
|
|
|
|
|
<template #col-action="{ row }">
|
|
|
|
|
<el-button link type="primary" icon="View" @click="handleView(row)">查看</el-button>
|
|
|
|
|
<el-button
|
|
|
|
|
link
|
|
|
|
|
type="danger"
|
|
|
|
|
icon="RefreshLeft"
|
|
|
|
|
:loading="refundingKey === row.billId"
|
|
|
|
|
:disabled="row.refundStatus === 'REFUNDED'"
|
|
|
|
|
v-hasPermi="['price:billing:refund']"
|
|
|
|
|
@click="handleRefund(row)"
|
|
|
|
|
>退费</el-button>
|
|
|
|
|
</template>
|
|
|
|
|
</basic-table>
|
|
|
|
|
|
|
|
|
@@ -98,7 +110,7 @@
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script setup name="BillingBill">
|
|
|
|
|
import { listBill, getBill, listOrderNoOptions, listTrackingNoOptions, listTransferNoOptions, updateCreditArrears } from '@/api/price/billing'
|
|
|
|
|
import { listBill, getBill, refundBill, listOrderNoOptions, listTrackingNoOptions, listTransferNoOptions, updateCreditArrears } from '@/api/price/billing'
|
|
|
|
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
|
|
|
|
import { useProducts } from '@/components/ProductSelect/useProducts'
|
|
|
|
|
import BillDetail from './components/BillDetail.vue'
|
|
|
|
@@ -136,6 +148,7 @@ const detail = ref(null)
|
|
|
|
|
const batchFeeOpen = ref(false)
|
|
|
|
|
const batchFeeListQuery = ref({})
|
|
|
|
|
const batchFeeSelectedIds = ref([])
|
|
|
|
|
const refundingKey = ref(null)
|
|
|
|
|
|
|
|
|
|
const columns = [
|
|
|
|
|
{ label: '订单号', prop: 'orderNo', minWidth: 140, showOverflowTooltip: true },
|
|
|
|
@@ -152,18 +165,23 @@ const columns = [
|
|
|
|
|
{ label: '计价来源', prop: 'matchSource', align: 'center', width: 130, slot: 'matchSource' },
|
|
|
|
|
{ label: '客户状态', prop: 'customerActiveStatus', align: 'center', width: 100, slot: 'customerActiveStatus' },
|
|
|
|
|
{ label: '额度欠费', prop: 'creditArrearsStatus', align: 'center', width: 100, slot: 'creditArrearsStatus' },
|
|
|
|
|
{ label: '退费状态', prop: 'refundStatus', align: 'center', width: 100, slot: 'refundStatus' },
|
|
|
|
|
{ label: '计费时间', prop: 'bizDate', align: 'center', width: 170, parseTime: true },
|
|
|
|
|
{ label: '下单时间', prop: 'orderTime', align: 'center', width: 170, parseTime: true },
|
|
|
|
|
{ label: '销售员', prop: 'belongSaler', minWidth: 100, showOverflowTooltip: true },
|
|
|
|
|
{ label: '结算员', prop: 'settlementMan', minWidth: 100, showOverflowTooltip: true },
|
|
|
|
|
// { label: '客服员', prop: 'serviceMan', minWidth: 100, showOverflowTooltip: true },
|
|
|
|
|
{ label: '操作', prop: 'action', align: 'center', width: 90, fixed: 'right', slot: 'action', showInToolbar: false }
|
|
|
|
|
{ label: '操作', prop: 'action', align: 'center', width: 160, fixed: 'right', slot: 'action', showInToolbar: false }
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
const arrearsStatusOptions = [
|
|
|
|
|
{ label: '正常', value: 'NORMAL' },
|
|
|
|
|
{ label: '欠费', value: 'ARREARS' }
|
|
|
|
|
]
|
|
|
|
|
const refundStatusOptions = [
|
|
|
|
|
{ label: '未退费', value: 'NONE' },
|
|
|
|
|
{ label: '已退费', value: 'REFUNDED' }
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
const searchColumns = [
|
|
|
|
|
{ label: '订单号', prop: 'orderNos', placeholder: '订单号' },
|
|
|
|
@@ -179,6 +197,14 @@ const searchColumns = [
|
|
|
|
|
placeholder: '请选择',
|
|
|
|
|
props: { clearable: true }
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
label: '退费状态',
|
|
|
|
|
prop: 'refundStatus',
|
|
|
|
|
component: 'select',
|
|
|
|
|
options: refundStatusOptions,
|
|
|
|
|
placeholder: '请选择',
|
|
|
|
|
props: { clearable: true }
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
label: '计费时间',
|
|
|
|
|
prop: 'bizDateRange',
|
|
|
|
@@ -227,6 +253,27 @@ function handleUpdateArrears(ids, selection) {
|
|
|
|
|
}).catch(() => {})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function handleRefund(row) {
|
|
|
|
|
if (!row || !row.billId) return
|
|
|
|
|
if (row.refundStatus === 'REFUNDED') {
|
|
|
|
|
ElMessage.warning('该订单已退费')
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
ElMessageBox.confirm(
|
|
|
|
|
'确认对订单 ' + (row.orderNo || '') + ' 发起退费?',
|
|
|
|
|
'退费确认',
|
|
|
|
|
{ type: 'warning' }
|
|
|
|
|
).then(() => {
|
|
|
|
|
refundingKey.value = row.billId
|
|
|
|
|
return refundBill(row.billId)
|
|
|
|
|
}).then(() => {
|
|
|
|
|
ElMessage.success('退费成功')
|
|
|
|
|
tableRef.value?.refresh?.()
|
|
|
|
|
}).catch(() => {}).finally(() => {
|
|
|
|
|
refundingKey.value = null
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function handleView(row) {
|
|
|
|
|
title.value = '计费详情'
|
|
|
|
|
open.value = true
|
|
|
|
@@ -330,6 +377,16 @@ function creditArrearsTagType(status) {
|
|
|
|
|
if (status === 'ARREARS') return 'danger'
|
|
|
|
|
return 'info'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function refundLabel(status) {
|
|
|
|
|
const map = { NONE: '未退费', REFUNDED: '已退费' }
|
|
|
|
|
return map[status] || status || '未退费'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function refundTagType(status) {
|
|
|
|
|
if (status === 'REFUNDED') return 'danger'
|
|
|
|
|
return 'success'
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style scoped>
|
|
|
|
|