| | |
| | | ] |
| | | |
| | | 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: '已通过' }, |
| | |
| | | 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 || [] |
| | |
| | | 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 |
| | | } |
| | | } |
| | | |
| | |
| | | <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" |