From cfd30ec5ba7f67aee8fd2fd6fc9413f8a66b55ca Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期五, 18 九月 2026 12:56:25 +0800
Subject: [PATCH] fix(settlement): 结算记录页下发查询条件,切标签不再被过期响应覆盖
---
talent-card-admin/src/api/admin.ts | 4 ++--
talent-card-admin/src/views/MerchantSettlementView.vue | 35 +++++++++++++++++++++++++++++------
2 files changed, 31 insertions(+), 8 deletions(-)
diff --git a/talent-card-admin/src/api/admin.ts b/talent-card-admin/src/api/admin.ts
index ee1d938..8cf9759 100644
--- a/talent-card-admin/src/api/admin.ts
+++ b/talent-card-admin/src/api/admin.ts
@@ -111,8 +111,8 @@
endDate?: string
}
export function getMerchantSettlement(kind: 'onboardings' | 'bank-cards', params: MerchantSettlementQuery = {}) { return http.get<PageResult<any>, PageResult<any>>(`/api/admin/management/merchant-settlement/${kind}`, { params }) }
-/** 结算记录直接来自斗拱:按日期区间返回真实结算流水,用于监控每天自动结算了多少到银行卡。 */
-export function getMerchantSettlements(params: { beginDate?: string; endDate?: string; size?: number } = {}) {
+/** 结算记录直接来自斗拱:按结算日期区间返回真实结算流水,用于监控每天自动结算了多少到银行卡。 */
+export function getMerchantSettlements(params: { beginDate?: string; endDate?: string; size?: number; merchantName?: string; contactMobile?: string; merchantType?: string; status?: string } = {}) {
return http.get<{ records: Record<string, any>[]; total: number; failures: string[] }, { records: Record<string, any>[]; total: number; failures: string[] }>('/api/admin/management/merchant-settlement/settlements', { params })
}
export function getMerchantOnboardingDetail(id: number | string) { return http.get<Record<string, any>, Record<string, any>>(`/api/admin/management/merchant-settlement/onboardings/${id}`) }
diff --git a/talent-card-admin/src/views/MerchantSettlementView.vue b/talent-card-admin/src/views/MerchantSettlementView.vue
index 1d545c8..dfb98d3 100644
--- a/talent-card-admin/src/views/MerchantSettlementView.vue
+++ b/talent-card-admin/src/views/MerchantSettlementView.vue
@@ -32,9 +32,13 @@
]
const merchantTypes = ['餐饮服务', '住宿服务', '购房服务', '购车服务', '体检服务', '金融服务', '行政审批', '景区服务']
-// 结算记录直接来自斗拱,没有本地状态可选;进件与银行卡才按审核状态筛选。
+// 结算记录没有本地审核状态:它的「状态」是通道流水的结算状态(S/F/P),与表格那一列同一套取值。
const statusOptions = computed(() => kind.value === 'settlements'
- ? []
+ ? [
+ { value: 'S', label: '已结算' },
+ { value: 'F', label: '结算失败' },
+ { value: 'P', label: '处理中' },
+ ]
: [
{ value: 'pending', label: '待审核' },
{ value: 'approved', label: '已通过' },
@@ -81,17 +85,33 @@
return String(value).replace('T', ' ').replace(/\.\d+$/, '')
}
+/**
+ * 每次查询的序号。切 tab、改条件、翻页都会自增,只有最新那一次的结果允许写回表格。
+ *
+ * 结算记录要逐商户去问斗拱,是最慢的一次请求;先切到别的 tab 的话,它的响应会最后落地。
+ * 少了这道闸,它就会把已经切过去的那个 tab 的表格覆盖成结算流水——表头是进件/银行卡的列,
+ * 内容却是结算记录(连带分页总数也变成结算的条数)。
+ */
+let latestRequest = 0
+
async function load() {
+ const request = ++latestRequest
loading.value = true
try {
if (kind.value === 'settlements') {
- // 结算记录来自斗拱,按日期区间查询,没有分页与审核状态筛选。
- // 条数上限 50 是通道的硬限制:传更大的值通道会判基础参数校验失败,整页查不出流水。
+ // 结算记录来自斗拱,逐商户查询后合并;条数上限 50 是通道的硬限制,传更大的值通道会判
+ // 基础参数校验失败、整页查不出流水。商家、联系电话、商家类型送后端去筛商户(顺带少查几家),
+ // 状态是通道流水的结算状态,只能由后端在拿到流水后筛。
const result = await getMerchantSettlements({
beginDate: normalizeDate(filters.dateRange[0]),
endDate: normalizeDate(filters.dateRange[1]),
size: 50,
+ merchantName: filters.merchantName.trim() || undefined,
+ contactMobile: filters.contactMobile.trim() || undefined,
+ merchantType: filters.merchantType || undefined,
+ status: filters.status || undefined,
})
+ if (request !== latestRequest) return
rows.value = result.records || []
total.value = Number(result.total || 0)
failures.value = result.failures || []
@@ -107,11 +127,13 @@
startDate: filters.dateRange[0],
endDate: filters.dateRange[1],
})
+ if (request !== latestRequest) return
rows.value = result.records || []
total.value = Number(result.total || 0)
failures.value = []
} finally {
- loading.value = false
+ // 转圈只归最新那次请求管:过期的响应早早关掉它,会让仍在加载的那一页看起来已经加载完了。
+ if (request === latestRequest) loading.value = false
}
}
@@ -190,7 +212,8 @@
<el-form-item label="联系电话">
<el-input v-model="filters.contactMobile" clearable placeholder="请输入商家联系电话" />
</el-form-item>
- <el-form-item label="申请时间">
+ <!-- 同一个日期区间在两个 tab 里筛的是不同东西:进件/银行卡按申请时间,结算记录按结算日期。 -->
+ <el-form-item :label="kind === 'settlements' ? '结算日期' : '申请时间'">
<el-date-picker
v-model="filters.dateRange"
type="daterange"
--
Gitblit v1.7.1