68 lines
5.5 KiB
Vue
68 lines
5.5 KiB
Vue
<template>
|
||
<ele-page>
|
||
<section class="page-card">
|
||
<div class="page-title"><div><h2>订单对账</h2><p>查看 ZHGH 回传的子订单对账结果,并处理异常订单。</p></div></div>
|
||
<el-form inline class="query-form" @submit.prevent>
|
||
<el-form-item label="子订单"><el-input v-model="query.orderId" placeholder="子订单 ID" clearable /></el-form-item>
|
||
<el-form-item label="对账状态"><el-select v-model="query.reconciliationStatus" clearable placeholder="全部"><el-option label="未对账" :value="0" /><el-option label="对账成功" :value="1" /><el-option label="对账异常" :value="2" /></el-select></el-form-item>
|
||
<el-form-item><el-button type="primary" :loading="loading" @click="search">查询</el-button><el-button @click="reset">重置</el-button></el-form-item>
|
||
</el-form>
|
||
<el-table :data="items" v-loading="loading" border>
|
||
<el-table-column prop="orderId" label="子订单ID" min-width="180" />
|
||
<el-table-column prop="reconciliationStatus" label="对账状态" width="110"><template #default="{ row }"><el-tag :type="statusType(row.reconciliationStatus)">{{ statusText(row.reconciliationStatus) }}</el-tag></template></el-table-column>
|
||
<el-table-column prop="diffReason" label="差异说明" min-width="220" show-overflow-tooltip />
|
||
<el-table-column label="平台金额" min-width="120"><template #default="{ row }">{{ row.platformTotalPrice || '-' }}</template></el-table-column>
|
||
<el-table-column label="供应商金额" min-width="120"><template #default="{ row }">{{ row.supplierTotalPrice || '-' }}</template></el-table-column>
|
||
<el-table-column prop="reconciliationBatchNo" label="对账批次" min-width="150" show-overflow-tooltip />
|
||
<el-table-column prop="reconciliationTime" label="对账时间" min-width="170" />
|
||
<template #empty><el-empty :image-size="80" description="暂无对账结果" /></template></el-table>
|
||
<el-pagination v-model:current-page="query.pageNumber" :page-size="query.pageSize" :total="totalCount" layout="total, prev, pager, next, jumper" @current-change="load" />
|
||
</section>
|
||
<el-dialog v-model="dialogVisible" title="处理对账结果" width="460px">
|
||
<el-form label-width="90px"><el-form-item label="子订单"><span>{{ editing?.orderId }}</span></el-form-item><el-form-item label="对账状态"><el-select v-model="form.reconciliationStatus"><el-option label="未对账" :value="0" /><el-option label="对账成功" :value="1" /><el-option label="对账异常" :value="2" /></el-select></el-form-item><el-form-item label="差异类型"><el-input-number v-model="form.diffType" :min="0" :precision="0" /></el-form-item><el-form-item label="差异说明"><el-input v-model="form.diffReason" type="textarea" :rows="3" /></el-form-item></el-form>
|
||
<template #footer><el-button @click="dialogVisible = false">取消</el-button><el-button type="primary" :loading="saving" @click="save">保存</el-button></template>
|
||
</el-dialog>
|
||
</ele-page>
|
||
</template>
|
||
|
||
<script setup lang="ts">
|
||
import { onMounted, reactive, ref } from 'vue'
|
||
import { ElMessage } from 'element-plus'
|
||
import { postAdmin } from '@/api/admin'
|
||
|
||
type ReconciliationItem = { supplierId: string; orderId: string; mainOrderId: string; reconciliationStatus: number; diffType?: number; diffReason: string; platformTotalPrice: string; supplierTotalPrice: string; reconciliationBatchNo: string; reconciliationTime: string }
|
||
const query = reactive<{ orderId: string; reconciliationStatus?: number; pageNumber: number; pageSize: number }>({ orderId: '', pageNumber: 1, pageSize: 10 })
|
||
const totalCount = ref(0)
|
||
const items = ref<ReconciliationItem[]>([])
|
||
const loading = ref(false)
|
||
const loaded = ref(false)
|
||
const dialogVisible = ref(false)
|
||
const saving = ref(false)
|
||
const editing = ref<ReconciliationItem>()
|
||
const form = reactive<{ reconciliationStatus: number; diffType?: number; diffReason: string }>({ reconciliationStatus: 0, diffReason: '' })
|
||
const statusText = (status: number) => ['未对账', '对账成功', '对账异常'][status] || '未知'
|
||
const statusType = (status: number) => status === 1 ? 'success' : status === 2 ? 'danger' : 'info'
|
||
|
||
const load = async () => {
|
||
loading.value = true
|
||
try {
|
||
const data = await postAdmin<{ reconciliationItems: ReconciliationItem[]; totalCount: number }>('merchant-reconciliation-list', query)
|
||
items.value = data.reconciliationItems || []
|
||
totalCount.value = data.totalCount || 0
|
||
loaded.value = true
|
||
} catch (error) { ElMessage.error(error instanceof Error ? error.message : '查询失败') } finally { loading.value = false }
|
||
}
|
||
const search = () => { query.pageNumber = 1; return load() }
|
||
const reset = () => { query.orderId = ''; query.reconciliationStatus = undefined; return search() }
|
||
const openEdit = (row: ReconciliationItem) => { editing.value = row; form.reconciliationStatus = row.reconciliationStatus; form.diffType = row.diffType; form.diffReason = row.diffReason || ''; dialogVisible.value = true }
|
||
const save = async () => {
|
||
if (!editing.value) return
|
||
saving.value = true
|
||
try {
|
||
await postAdmin('merchant-reconciliation-update', { supplierId: editing.value.supplierId, orderId: editing.value.orderId, reconciliationStatus: form.reconciliationStatus, diffType: form.diffType, diffReason: form.diffReason })
|
||
ElMessage.success('保存成功'); dialogVisible.value = false; await load()
|
||
} catch (error) { ElMessage.error(error instanceof Error ? error.message : '保存失败') } finally { saving.value = false }
|
||
}
|
||
onMounted(load)
|
||
</script>
|