fix(receivables): unwrap response envelope once + align card/column field names

- Receivables.vue: const d = r (was r.data || r) -> cards/table no longer blank

- cards: pending_balance(待收余额) / overdue / completed_amount / completed_count

- columns: counterparty(+description fallback) / owner(未分配) / settled_amount / plan_date / aging_bucket

- cash.py: summary.completed_count + _plan_dict.settled_amount (existing keys untouched)

- api/index.ts untouched (global interceptor)

(cherry picked from commit d60557622441b971970fb9dc86ef7491c3a9d72b)
This commit is contained in:
Hermes CI Fix
2026-10-02 21:12:20 +08:00
parent ac4bbc6891
commit 29dc5c0bdc
2 changed files with 18 additions and 10 deletions
+14 -10
View File
@@ -17,9 +17,9 @@
<!-- 汇总卡片 -->
<el-row :gutter="16">
<el-col :span="6"><el-card shadow="never" class="stat-card red"><div class="stat-val">¥{{ (summary.total_balance || 0).toFixed(2) }}万</div><div class="stat-label">应收总额</div></el-card></el-col>
<el-col :span="6"><el-card shadow="never" class="stat-card red"><div class="stat-val">¥{{ (summary.pending_balance || 0).toFixed(2) }}万</div><div class="stat-label">待收余额</div></el-card></el-col>
<el-col :span="6"><el-card shadow="never" class="stat-card orange"><div class="stat-val">¥{{ (summary.overdue_amount || 0).toFixed(2) }}万</div><div class="stat-label">逾期金额 ({{ summary.overdue_count || 0 }}笔)</div></el-card></el-col>
<el-col :span="6"><el-card shadow="never" class="stat-card green"><div class="stat-val">¥{{ (summary.total_paid || 0).toFixed(2) }}万</div><div class="stat-label">已回款</div></el-card></el-col>
<el-col :span="6"><el-card shadow="never" class="stat-card green"><div class="stat-val">¥{{ (summary.completed_amount || 0).toFixed(2) }}万</div><div class="stat-label">已回款</div></el-card></el-col>
<el-col :span="6"><el-card shadow="never" class="stat-card blue"><div class="stat-val">{{ summary.completed_count || 0 }}</div><div class="stat-label">已完成笔数</div></el-card></el-col>
</el-row>
@@ -39,17 +39,21 @@
<el-card shadow="never">
<template #header>应收明细</template>
<el-table :data="items" size="small" v-loading="loading">
<el-table-column prop="name" label="客户/单位" min-width="140" />
<el-table-column prop="owner" label="负责人" width="90" />
<el-table-column label="客户/单位" min-width="140">
<template #default="{ row }">{{ row.counterparty || (row.description || '').slice(0, 20) || '—' }}</template>
</el-table-column>
<el-table-column label="负责人" width="90">
<template #default="{ row }">{{ row.owner || '未分配' }}</template>
</el-table-column>
<el-table-column prop="amount" label="金额(万)" width="90">
<template #default="{ row }"><span style="font-weight:600">¥{{ row.amount }}</span></template>
</el-table-column>
<el-table-column prop="paid_amount" label="已回款(万)" width="100" />
<el-table-column prop="due_date" label="到期日" width="100" />
<el-table-column prop="aging_label" label="账龄" width="100">
<el-table-column prop="settled_amount" label="已回款(万)" width="100" />
<el-table-column prop="plan_date" label="到期日" width="100" />
<el-table-column prop="aging_bucket" label="账龄" width="100">
<template #default="{ row }">
<el-tag :type="row.overdue ? 'danger' : (row.aging_label === '未到期' ? 'success' : 'warning')" size="small">
{{ row.aging_label }}
<el-tag :type="row.overdue ? 'danger' : (row.aging_bucket === '未到期' ? 'success' : 'warning')" size="small">
{{ row.aging_bucket }}
</el-tag>
</template>
</el-table-column>
@@ -119,7 +123,7 @@ async function loadData() {
if (owner.value) params.owner = owner.value
if (status.value) params.status = status.value
const r: any = await api.get('/cash/receivables', { params })
const d = r.data || r || {}
const d = r || {}
summary.value = d.summary || {}
owners.value = d.owners || []
const rawItems = d.data || d.items || d.receivables || []