vue3-element-plus-app-chu 0.0.33 → 0.0.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/package.json +1 -1
- package/src/view/dcps/README.md +3 -3
- package/src/view/dcps/estimation/index.vue +51 -42
- package/src/view/dcps/estimation/typs.ts +2 -2
- package/src/view/dcps/flow-query/index.vue +2 -2
- package/src/view/dcps/flow-query/typs.ts +1 -1
- package/src/view/dcps/forecast/index.vue +55 -22
- package/src/view/dcps/forecast/typs.ts +16 -16
- package/src/view/dcps/write-off/api.ts +3 -23
- package/src/view/dcps/write-off/index.vue +4 -4
- package/src/view/dcps/write-off/typs.ts +2 -2
package/README.md
CHANGED
|
@@ -38,7 +38,7 @@ pnpm dev:backend # 只启动 verce-vue-test/backend 后端
|
|
|
38
38
|
|
|
39
39
|
页面通过公共请求层读取 TAM 的 `head/body`,统一响应的解包与兼容处理由 `src/utils/request.ts` 负责。指定后端用于替代前端 mock;数字人民币核销、修改和撤销核销按顺序直接更新数据库,单机 MongoDB 即可使用。`head.consumerSeqNo` 可选,传入时支持相同请求重试;原金额和状态快照校验仍保留。注资发起只保存 `PENDING` / `NOT_SENT` 待处理记录,不调整账户余额;预报导入当前返回 `501`。业务校验、数据保存和导入导出均以指定后端的实时文档及实现为准。
|
|
40
40
|
|
|
41
|
-
数字人民币页面的业务类型使用 `201/202/203` 字典,新增预报不提交 `predName
|
|
41
|
+
数字人民币页面的业务类型使用 `201/202/203` 字典,新增预报不提交 `predName`;项目内预报收支方向统一使用 `1` 收入、`2` 支出,流水统一使用 `I` 收入、`O` 支出,查询、请求和结果展示均按各自编码处理。核销预报待核销查询包含状态 `1/3`,展示交易对手账号;流水可按业务类型筛选并读取 `tranStatus`;注资明细支持起止交易日期;授权页展示业务类型中文名称。匡算明细展示部分核销状态。字段及页面接口映射见 [数字人民币接口摘录](docs/digital-rmb-apis.md),当前接口约束以实时文档为准。
|
|
42
42
|
|
|
43
43
|
独立页面 `/flow-query` 的普通查询、初次加载、分页和刷新与核销页面的流水信息共用 `/TAM/0001/140502002`,参数保持一致:交易日期 `tranDate` 必填且默认取共用业务日期,可按业务类型、我方机构、付款人、收款人、收支方向、金额范围和核销状态筛选,未填写的可选条件不提交。列表读取 `resultList` 和字符串类型的 `totalCount`,字段沿用核销流水模型。「查询」「实时查询流水」与「重置」按钮并排放在查询条件区末尾。「实时查询流水」单独调用 `/TAM/0001/140504002`,只携带公共分页参数 `pageIndex: 1`、`pageSize: 1`,业务请求体为空;成功提示“操作成功”,失败仅记录控制台,不更新列表。
|
|
44
44
|
|
package/package.json
CHANGED
package/src/view/dcps/README.md
CHANGED
|
@@ -20,11 +20,11 @@
|
|
|
20
20
|
|
|
21
21
|
接口统一使用 `/Users/bombingpig/WebstormProjects/verce-vue-test/backend`,以 [Scalar 文档](http://localhost:3011/oms/docs) 和 [OpenAPI JSON](http://localhost:3011/oms/openapi.json) 为准。服务前缀为 `/oms`,前端开发代理将 `/TAM`、`/api`、`/nacos` 转发到 `http://localhost:3011/oms`。本项目已移除原 `backend/`;仓库内 `docs/digital-rmb.openapi.json` 为字段摘录。
|
|
22
22
|
|
|
23
|
-
预报新增必填 `busiType`、`predAmt`、`tranDate`、`payDirec`,业务类型字典为 `201` 兑回、`202` 兑出、`203` 付现;新增和修改不提交 `predName`、`billNo`、`billDate`。客户和机构等字段选填,`payChannel` 缺省为 `8`,`predDate`
|
|
23
|
+
预报新增必填 `busiType`、`predAmt`、`tranDate`、`payDirec`,业务类型字典为 `201` 兑回、`202` 兑出、`203` 付现;新增和修改不提交 `predName`、`billNo`、`billDate`。客户和机构等字段选填,`payChannel` 缺省为 `8`,`predDate` 缺省为后端当天日期。项目内预报收支方向统一为 `1` 收入、`2` 支出,流水统一为 `I` 收入、`O` 支出;预报管理、核销预报和匡算预报明细按 `1/2` 处理,流水查询、核销流水和匡算流水明细按 `I/O` 处理。核销预报待核销传 `verifyStatusList: ['1', '3']`,已核销传 `['2']`。核销页流水查询使用 `busiType`,读取 `tranStatus`(`S/P/F`),展示核销状态 `3` 部分核销。注资明细提供 `txnDtStart`、`txnDtEnd` 筛选。字段摘录及页面接口映射见 `docs/digital-rmb-apis.md`,业务校验与保存行为由指定后端负责。
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
核销预报 API 按 `1/2` 原值提交并读取方向,流水 API 按 `I/O` 原值提交并读取方向;核销写操作提交公共 `consumerSeqNo`、原状态和原金额快照。后端作为替代前端 mock 的本地测试服务,核销、修改和撤销核销按顺序直接更新数据库,各种 MongoDB 部署模式均不启动事务。`consumerSeqNo` 可选,缺省时后端生成,传入时支持相同请求重试;快照校验和关联撤回逻辑仍保留。注资明细使用服务端分页;发起注资只保存 `PENDING` / `NOT_SENT` 记录,不改变余额。参数接口当前由 `swaggerStub` 返回静态兼容数据,不持久化参数增删改。
|
|
26
26
|
|
|
27
|
-
独立流水查询页面 `/flow-query` 的普通查询、初次加载、分页和刷新复用核销页的 `queryFlowApi`(`140502002`)与流水模型,读取 `resultList` 和字符串类型的 `totalCount`。查询参数与核销页流水信息保持一致:`tranDate` 必填,默认取 `dcpsRuntime.date`;可选条件为 `busiType`、`orgName`、`payerName`、`payeeName`、`payDirec
|
|
27
|
+
独立流水查询页面 `/flow-query` 的普通查询、初次加载、分页和刷新复用核销页的 `queryFlowApi`(`140502002`)与流水模型,读取 `resultList` 和字符串类型的 `totalCount`。查询参数与核销页流水信息保持一致:`tranDate` 必填,默认取 `dcpsRuntime.date`;可选条件为 `busiType`、`orgName`、`payerName`、`payeeName`、`payDirec`(`I` 收入、`O` 支出)、`startTransAmt`、`endTransAmt` 和 `verifyStatus`(1/2),空条件不发送;分页放在公共请求头。「查询」「实时查询流水」与「重置」按钮并排放在查询条件区末尾。「实时查询流水」通过独立的 `queryRealtimeFlowApi` 调用 `140504002`,只传公共分页 `pageIndex: 1`、`pageSize: 1`,业务请求体为空;成功提示“操作成功”,失败仅记录控制台,不改变表格和分页。
|
|
28
28
|
|
|
29
29
|
## 命名约定
|
|
30
30
|
|
|
@@ -21,11 +21,11 @@ const tableSize = 'small'
|
|
|
21
21
|
// 单击可查看明细的金额单元格按位置编码查询详情(140503003)。
|
|
22
22
|
|
|
23
23
|
// 金额字段编码与图中报表位置的对应关系:
|
|
24
|
-
// C3
|
|
24
|
+
// C3 数字人民币账户昨日余额;C6/D6 报备金额;C7/D7 未核销金额;
|
|
25
25
|
// C8/D8 未核销业务流水;C9 日初可用资金(前端计算:C3 + C6 - D6 + C8 - D8);
|
|
26
26
|
// C11/D11 今日预计调拨金额(查询条件输入框,不查详情);
|
|
27
|
-
// C12
|
|
28
|
-
// B15 当日实时余额。C3、C9、C12、B15
|
|
27
|
+
// C12 数字人民币账户预留金额(前端计算:C9 + C11 - D11);
|
|
28
|
+
// B15 当日实时余额。C3、C9、C12、B15 仅展示金额,不提供明细查看。
|
|
29
29
|
// 轧差列由前端按「收入减支出」计算:结果行随查询结果更新,
|
|
30
30
|
// 调拨行随输入实时更新;两条空行按原型占位留空。
|
|
31
31
|
|
|
@@ -112,8 +112,10 @@ const calcTotalAmount = (terms: Array<[string, 1 | -1]>): string => {
|
|
|
112
112
|
const calcGapAmount = (inAmt: string, outAmt: string): string =>
|
|
113
113
|
calcTotalAmount([[inAmt, 1], [outAmt, -1]])
|
|
114
114
|
|
|
115
|
-
/**
|
|
116
|
-
const
|
|
115
|
+
/** 预报收支方向:1 收入、2 支出。 */
|
|
116
|
+
const forecastPayDirecLabels: Record<string, string> = { '1': '收入', '2': '支出' }
|
|
117
|
+
/** 流水收支方向:I 收入、O 支出。 */
|
|
118
|
+
const flowPayDirecLabels: Record<string, string> = { I: '收入', O: '支出' }
|
|
117
119
|
/** 支付渠道:预报与流水的数字人民币分别为 8、5;其余渠道保留原文。 */
|
|
118
120
|
const payChannelLabels: Record<string, string> = { '5': '数字人民币', '8': '数字人民币' }
|
|
119
121
|
/** 与核销页面统一展示核销状态;部分核销记录仍可能出现在匡算明细中。 */
|
|
@@ -145,7 +147,7 @@ const amountText = (position: string): string => {
|
|
|
145
147
|
return value ? formatAmount(value) : ''
|
|
146
148
|
}
|
|
147
149
|
|
|
148
|
-
/**
|
|
150
|
+
/** 组装单元格对象供详情页使用:位置编码、展示名称与当前金额一起带入。 */
|
|
149
151
|
const cellOf = (position: string): EstimationCell => ({
|
|
150
152
|
position,
|
|
151
153
|
label: cellLabels[position] ?? position,
|
|
@@ -195,7 +197,7 @@ const gapText = (inPosition: string, outPosition: string): string => {
|
|
|
195
197
|
const inputGapText = computed(() =>
|
|
196
198
|
calcGapAmount(queryForm.predictAllotInAmt, queryForm.predictAllotOutAmt))
|
|
197
199
|
|
|
198
|
-
/**
|
|
200
|
+
/** 数字人民币账户预留金额 C12 = C3 + C6 - D6 + C8 - D8 + (C11 - D11),随调拨输入实时更新。 */
|
|
199
201
|
const reservedBalanceText = computed(() =>
|
|
200
202
|
calcTotalAmount([[openingBalanceText.value, 1], [inputGapText.value, 1]]))
|
|
201
203
|
|
|
@@ -291,9 +293,9 @@ const submitExport = () => {
|
|
|
291
293
|
console.log('[导出数字人民币头寸匡算参数]', params)
|
|
292
294
|
}
|
|
293
295
|
|
|
294
|
-
// ----------
|
|
296
|
+
// ---------- 单元格明细页 ----------
|
|
295
297
|
|
|
296
|
-
//
|
|
298
|
+
// 在当前组件内切换报表与明细视图,保留报表查询条件和结果,不新增路由。
|
|
297
299
|
const detailVisible = ref(false)
|
|
298
300
|
const detailCell = ref<EstimationCell | null>(null)
|
|
299
301
|
// 报备金额、未核销金额仅展示预报;未核销业务流水仅展示流水。
|
|
@@ -332,21 +334,23 @@ const loadDetailInfo = async () => {
|
|
|
332
334
|
}
|
|
333
335
|
}
|
|
334
336
|
|
|
335
|
-
/**
|
|
337
|
+
/** 返回匡算报表:重置明细并让未完成的请求失效。 */
|
|
336
338
|
const closeDetail = () => {
|
|
337
339
|
detailVisible.value = false
|
|
338
340
|
detailRequestId += 1
|
|
341
|
+
detailCell.value = null
|
|
339
342
|
detailPredList.value = []
|
|
340
343
|
detailTranList.value = []
|
|
341
344
|
detailTotalCount.value = ''
|
|
342
345
|
detailLoading.value = false
|
|
343
346
|
}
|
|
344
347
|
|
|
345
|
-
/**
|
|
348
|
+
/** 打开单元格明细页并查询;结果未就绪时不切换视图或发起请求。 */
|
|
346
349
|
const openDetail = (cell?: EstimationCell) => {
|
|
347
350
|
if (!cell || !resultReady.value) return
|
|
348
351
|
detailCell.value = cell
|
|
349
352
|
detailVisible.value = true
|
|
353
|
+
void loadDetailInfo()
|
|
350
354
|
}
|
|
351
355
|
|
|
352
356
|
/** 明细总条数优先使用接口 totalCount,缺失时仅统计当前展示的列表。 */
|
|
@@ -371,7 +375,7 @@ onBeforeUnmount(() => {
|
|
|
371
375
|
<ElConfigProvider :size="tableSize">
|
|
372
376
|
<main class="dcps-page">
|
|
373
377
|
<!-- 顶部操作区:交易日期选择与导出、查询入口(收支金额在下方表格内填写)。 -->
|
|
374
|
-
<el-card class="estimation-header" shadow="never" :body-style="{ padding: '10px 14px' }">
|
|
378
|
+
<el-card v-show="!detailVisible" class="estimation-header" shadow="never" :body-style="{ padding: '10px 14px' }">
|
|
375
379
|
<div class="estimation-heading">
|
|
376
380
|
<div class="filter-field">
|
|
377
381
|
<label>交易日期</label>
|
|
@@ -390,7 +394,7 @@ onBeforeUnmount(() => {
|
|
|
390
394
|
</el-card>
|
|
391
395
|
|
|
392
396
|
<!-- 匡算报表:合并单元格的头寸匡算表,与业务原型一致;表格常显,结果就绪前金额显示占位。 -->
|
|
393
|
-
<el-card class="estimation-report" shadow="never" :body-style="{ padding: '12px 14px' }">
|
|
397
|
+
<el-card v-show="!detailVisible" class="estimation-report" shadow="never" :body-style="{ padding: '12px 14px' }">
|
|
394
398
|
<div class="report-scroll">
|
|
395
399
|
<table class="report-table" :class="{ 'is-ready': resultReady }">
|
|
396
400
|
<!-- 列:两个左侧标签列、收入、支付、轧差。 -->
|
|
@@ -404,7 +408,7 @@ onBeforeUnmount(() => {
|
|
|
404
408
|
</tr>
|
|
405
409
|
<!-- 前一日余额:C3 横跨收入、支付两列,右侧标注单位。 -->
|
|
406
410
|
<tr>
|
|
407
|
-
<td colspan="2" class="report-label"
|
|
411
|
+
<td colspan="2" class="report-label">数字人民币账户昨日余额</td>
|
|
408
412
|
<td colspan="2" class="report-data">
|
|
409
413
|
<div class="report-value report-value--static">
|
|
410
414
|
<span class="report-amount">{{ amountText('C3') }}</span>
|
|
@@ -510,9 +514,9 @@ onBeforeUnmount(() => {
|
|
|
510
514
|
</td>
|
|
511
515
|
<td class="report-gap" title="轧差 = 收入 − 支出(前端计算)">{{ inputGapText }}</td>
|
|
512
516
|
</tr>
|
|
513
|
-
<!--
|
|
517
|
+
<!-- 数字人民币账户预留金额:C12 = C9 + C11 - D11,横跨收入、支付、轧差三列。 -->
|
|
514
518
|
<tr>
|
|
515
|
-
<td colspan="2" class="report-label"
|
|
519
|
+
<td colspan="2" class="report-label">数字人民币账户预留金额</td>
|
|
516
520
|
<td colspan="3" class="report-data">
|
|
517
521
|
<div class="report-value report-value--static">
|
|
518
522
|
<span class="report-amount">{{ reservedBalanceText }}</span>
|
|
@@ -543,17 +547,20 @@ onBeforeUnmount(() => {
|
|
|
543
547
|
</div>
|
|
544
548
|
</el-card>
|
|
545
549
|
|
|
546
|
-
<!--
|
|
547
|
-
<
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
550
|
+
<!-- 单元格明细页:顶部返回报表,内容区展示对应的预报或流水列表。 -->
|
|
551
|
+
<template v-if="detailVisible">
|
|
552
|
+
<el-card class="estimation-header" shadow="never" :body-style="{ padding: '10px 14px' }">
|
|
553
|
+
<div class="detail-heading">
|
|
554
|
+
<el-button @click="closeDetail">
|
|
555
|
+
<svg class="detail-back-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
556
|
+
<path d="M14 5l-7 7 7 7" />
|
|
557
|
+
</svg>
|
|
558
|
+
返回匡算
|
|
559
|
+
</el-button>
|
|
560
|
+
<h1 class="detail-title">{{ detailCell ? `匡算明细 - ${detailCell.label}` : '匡算明细' }}</h1>
|
|
561
|
+
</div>
|
|
562
|
+
</el-card>
|
|
563
|
+
<el-card class="detail-card" shadow="never" :body-style="{ padding: '12px 14px', height: '100%', boxSizing: 'border-box' }">
|
|
557
564
|
<el-scrollbar class="detail-scrollbar">
|
|
558
565
|
<div class="detail-content">
|
|
559
566
|
<!-- 上下文摘要:被点击单元格的位置、金额与详情查询的交易日期。 -->
|
|
@@ -578,8 +585,8 @@ onBeforeUnmount(() => {
|
|
|
578
585
|
|
|
579
586
|
<div v-loading="detailLoading" class="detail-tables">
|
|
580
587
|
<!-- C6/C7/D6/D7 仅展示预报信息;列表为空时展示统一空态。 -->
|
|
581
|
-
<div v-if="showPredDetail" class="
|
|
582
|
-
<el-table v-if="showPredDetail" :data="detailPredList" :size="tableSize" border
|
|
588
|
+
<div v-if="showPredDetail" class="detail-section-title">预报信息</div>
|
|
589
|
+
<el-table v-if="showPredDetail" :data="detailPredList" :size="tableSize" border empty-text="暂无预报信息">
|
|
583
590
|
<el-table-column label="预报流水号" min-width="150" show-overflow-tooltip>
|
|
584
591
|
<template #default="{ row }">{{ displayText(row.predRefNo) }}</template>
|
|
585
592
|
</el-table-column>
|
|
@@ -593,7 +600,7 @@ onBeforeUnmount(() => {
|
|
|
593
600
|
<template #default="{ row }">{{ displayText(row.competName) }}</template>
|
|
594
601
|
</el-table-column>
|
|
595
602
|
<el-table-column label="收支方向" width="80" align="center">
|
|
596
|
-
<template #default="{ row }">{{ dictLabel(
|
|
603
|
+
<template #default="{ row }">{{ dictLabel(forecastPayDirecLabels, row.payDirec) }}</template>
|
|
597
604
|
</el-table-column>
|
|
598
605
|
<el-table-column label="支付渠道" width="110" align="center">
|
|
599
606
|
<template #default="{ row }">{{ dictLabel(payChannelLabels, row.payChannel) }}</template>
|
|
@@ -615,9 +622,9 @@ onBeforeUnmount(() => {
|
|
|
615
622
|
</el-table-column>
|
|
616
623
|
</el-table>
|
|
617
624
|
|
|
618
|
-
<!-- C8/D8
|
|
619
|
-
<div v-if="showTranDetail" class="
|
|
620
|
-
<el-table v-if="showTranDetail" :data="detailTranList" :size="tableSize" border
|
|
625
|
+
<!-- C8/D8 仅展示流水信息;失败的详情可返回后重新打开重试。 -->
|
|
626
|
+
<div v-if="showTranDetail" class="detail-section-title">流水信息</div>
|
|
627
|
+
<el-table v-if="showTranDetail" :data="detailTranList" :size="tableSize" border empty-text="暂无流水信息">
|
|
621
628
|
<el-table-column label="交易参考号" min-width="150" show-overflow-tooltip>
|
|
622
629
|
<template #default="{ row }">{{ displayText(row.refNo) }}</template>
|
|
623
630
|
</el-table-column>
|
|
@@ -631,7 +638,7 @@ onBeforeUnmount(() => {
|
|
|
631
638
|
<template #default="{ row }">{{ displayText(row.payeeName) }}</template>
|
|
632
639
|
</el-table-column>
|
|
633
640
|
<el-table-column label="收支方向" width="80" align="center">
|
|
634
|
-
<template #default="{ row }">{{ dictLabel(
|
|
641
|
+
<template #default="{ row }">{{ dictLabel(flowPayDirecLabels, row.payDirec) }}</template>
|
|
635
642
|
</el-table-column>
|
|
636
643
|
<el-table-column label="支付渠道" width="110" align="center">
|
|
637
644
|
<template #default="{ row }">{{ dictLabel(payChannelLabels, row.payChannel) }}</template>
|
|
@@ -653,10 +660,8 @@ onBeforeUnmount(() => {
|
|
|
653
660
|
</div>
|
|
654
661
|
</div>
|
|
655
662
|
</el-scrollbar>
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
</template>
|
|
659
|
-
</el-dialog>
|
|
663
|
+
</el-card>
|
|
664
|
+
</template>
|
|
660
665
|
</main>
|
|
661
666
|
</ElConfigProvider>
|
|
662
667
|
</template>
|
|
@@ -789,8 +794,12 @@ td.report-data--input { padding: 5px 8px; }
|
|
|
789
794
|
letter-spacing: 0.02em;
|
|
790
795
|
}
|
|
791
796
|
|
|
792
|
-
/* ----------
|
|
793
|
-
.detail-
|
|
797
|
+
/* ---------- 单元格明细页 ---------- */
|
|
798
|
+
.detail-heading { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 12px; }
|
|
799
|
+
.detail-back-icon { width: 15px; height: 15px; margin-right: 4px; }
|
|
800
|
+
.detail-title { margin: 0; color: var(--el-text-color-primary); font-size: 16px; font-weight: 600; line-height: 22px; }
|
|
801
|
+
.detail-card { flex: 1; min-height: 0; min-width: 0; overflow: hidden; }
|
|
802
|
+
.detail-scrollbar { height: 100%; }
|
|
794
803
|
.detail-content { padding: 2px 4px 4px; }
|
|
795
804
|
|
|
796
805
|
/* 摘要区:位置编码、金额、日期放在一行,便于确认明细上下文。 */
|
|
@@ -810,10 +819,10 @@ td.report-data--input { padding: 5px 8px; }
|
|
|
810
819
|
.detail-reference { margin-left: auto; }
|
|
811
820
|
.detail-reference strong { font-weight: 600; }
|
|
812
821
|
|
|
813
|
-
.
|
|
822
|
+
.detail-section-title { margin: 12px 0 6px; color: var(--el-text-color-regular); font-size: 13px; font-weight: 600; }
|
|
814
823
|
.detail-tables .el-table + .el-table { margin-top: 2px; }
|
|
815
824
|
.detail-tables { min-height: 160px; }
|
|
816
|
-
.detail-tables .
|
|
825
|
+
.detail-tables .detail-section-title:first-child { margin-top: 0; }
|
|
817
826
|
.amount-cell { color: var(--el-text-color-primary); font-variant-numeric: tabular-nums; }
|
|
818
827
|
.detail-retry { margin-top: 10px; color: var(--el-color-danger); font-size: 12px; text-align: center; }
|
|
819
828
|
</style>
|
|
@@ -83,7 +83,7 @@ export interface Tam140503003OutBodyPredList {
|
|
|
83
83
|
groundBranch?: string
|
|
84
84
|
/** 支付渠道 */
|
|
85
85
|
payChannel?: string
|
|
86
|
-
/**
|
|
86
|
+
/** 预报收支方向:1 收入、2 支出。 */
|
|
87
87
|
payDirec?: string
|
|
88
88
|
/** 预报金额 */
|
|
89
89
|
predAmt?: string
|
|
@@ -107,7 +107,7 @@ export interface Tam140503003OutBodyTranList {
|
|
|
107
107
|
groundBranch?: string
|
|
108
108
|
/** 支付渠道 */
|
|
109
109
|
payChannel?: string
|
|
110
|
-
/**
|
|
110
|
+
/** 流水收支方向:I 收入、O 支出。 */
|
|
111
111
|
payDirec?: string
|
|
112
112
|
/** 收款人名称 */
|
|
113
113
|
payeeName?: string
|
|
@@ -98,8 +98,8 @@ const validAmount = (value: string) => {
|
|
|
98
98
|
|
|
99
99
|
/** 业务类型字典:201 兑回、202 兑出、203 付现。 */
|
|
100
100
|
const busiTypeLabels: Record<string, string> = { '201': '兑回', '202': '兑出', '203': '付现' }
|
|
101
|
-
/**
|
|
102
|
-
const payDirecLabels: Record<string, string> = { I: '
|
|
101
|
+
/** 流水收支方向字典:I 收入、O 支出。 */
|
|
102
|
+
const payDirecLabels: Record<string, string> = { I: '收入', O: '支出' }
|
|
103
103
|
/** 流水查询筛选只提供未核销和已核销,部分核销仅在结果中展示。 */
|
|
104
104
|
const verifyStatusLabels: Record<string, string> = { '1': '未核销', '2': '已核销', '3': '部分核销' }
|
|
105
105
|
|
|
@@ -159,6 +159,7 @@ const validateForm = (values: ForecastFormValues, mode: 'create' | 'edit' = 'cre
|
|
|
159
159
|
}
|
|
160
160
|
if (values.busiType && !Object.hasOwn(busiTypeLabels, values.busiType)) return '请选择有效的业务类型'
|
|
161
161
|
if (values.payDirec && !Object.hasOwn(payDirecLabels, values.payDirec)) return '请选择有效的收支方向'
|
|
162
|
+
if (values.payChannel && !Object.hasOwn(payChannelLabels, values.payChannel)) return '请选择有效的支付渠道'
|
|
162
163
|
for (const [key, label] of [['tranDate', '交易日期'], ['predDate', '预报日期']] as const) {
|
|
163
164
|
const date = values[key].trim()
|
|
164
165
|
if ((date || (mode === 'create' && key === 'tranDate')) && !isValidDate(date)) return `${label}须为有效日期,格式为 YYYYMMDD`
|
|
@@ -203,20 +204,39 @@ const createFilters = (): ForecastFilters => ({
|
|
|
203
204
|
})
|
|
204
205
|
const listFilters = ref(createFilters())
|
|
205
206
|
let listAppliedQuery: ForecastFilters = { ...listFilters.value }
|
|
206
|
-
// 重复输入项共用一份配置,依次为字段、名称;输入框较窄,占位文案统一使用简短提示。
|
|
207
|
-
const listTextFilters = [
|
|
208
|
-
['clientName', '客户名称'],
|
|
209
|
-
['competName', '交易对手名称'],
|
|
210
|
-
['payChannel', '支付渠道'],
|
|
211
|
-
['groundBranch', '落地机构'],
|
|
212
|
-
['predStatus', '预报状态'],
|
|
213
|
-
['verifyStatus', '核销状态'],
|
|
214
|
-
] as const
|
|
215
207
|
/** 新接口明确给出的业务类型;未登记代码保留接口原值。 */
|
|
216
208
|
const busiTypeLabels: Record<string, string> = { '201': '兑回', '202': '兑出', '203': '付现' }
|
|
217
209
|
const busiTypeOptions = Object.entries(busiTypeLabels).map(([value, label]) => ({ value, label }))
|
|
218
|
-
|
|
210
|
+
/** 预报页面按业务字典展示中文,查询和编辑提交对应的字符串代码。 */
|
|
211
|
+
const payDirecLabels: Record<string, string> = { '1': '收入', '2': '支出' }
|
|
219
212
|
const payDirecOptions = Object.entries(payDirecLabels).map(([value, label]) => ({ value, label }))
|
|
213
|
+
const payChannelLabels: Record<string, string> = { '8': '数字人民币' }
|
|
214
|
+
const payChannelOptions = Object.entries(payChannelLabels).map(([value, label]) => ({ value, label }))
|
|
215
|
+
const predStatusLabels: Record<string, string> = {
|
|
216
|
+
'1': '正常预报',
|
|
217
|
+
'2': '延迟预报',
|
|
218
|
+
'3': '正常预报正常删除',
|
|
219
|
+
'4': '正常预报延迟删除',
|
|
220
|
+
'5': '延迟预报延时删除',
|
|
221
|
+
'7': '正常预报新增超时',
|
|
222
|
+
'8': '延迟预报新增超时',
|
|
223
|
+
}
|
|
224
|
+
const predStatusOptions = Object.entries(predStatusLabels).map(([value, label]) => ({ value, label }))
|
|
225
|
+
const verifyStatusLabels: Record<string, string> = { '1': '未核销', '2': '已核销', '3': '部分核销' }
|
|
226
|
+
const verifyStatusOptions = Object.entries(verifyStatusLabels).map(([value, label]) => ({ value, label }))
|
|
227
|
+
// 已提供字典的筛选项使用下拉框,其余字段保留文本输入。
|
|
228
|
+
const listAdditionalFilters: {
|
|
229
|
+
key: 'clientName' | 'competName' | 'payChannel' | 'groundBranch' | 'predStatus' | 'verifyStatus'
|
|
230
|
+
label: string
|
|
231
|
+
options?: { value: string; label: string }[]
|
|
232
|
+
}[] = [
|
|
233
|
+
{ key: 'clientName', label: '客户名称' },
|
|
234
|
+
{ key: 'competName', label: '交易对手名称' },
|
|
235
|
+
{ key: 'payChannel', label: '支付渠道', options: payChannelOptions },
|
|
236
|
+
{ key: 'groundBranch', label: '落地机构' },
|
|
237
|
+
{ key: 'predStatus', label: '预报状态', options: predStatusOptions },
|
|
238
|
+
{ key: 'verifyStatus', label: '核销状态', options: verifyStatusOptions },
|
|
239
|
+
]
|
|
220
240
|
const sortRuleOptions = [
|
|
221
241
|
{ value: '1', label: '预报日期降序' },
|
|
222
242
|
{ value: '2', label: '预报日期升序' },
|
|
@@ -247,7 +267,7 @@ const isDetail = computed(() => detailDialogVisible.value)
|
|
|
247
267
|
|
|
248
268
|
const listHasReference = (row: ForecastRow) => Boolean(row.predRefNo?.trim())
|
|
249
269
|
const canChangeRecord = (row: ForecastRow) => listHasReference(row)
|
|
250
|
-
&& row.predStatus
|
|
270
|
+
&& !['3', '4', '5'].includes(row.predStatus ?? '') && row.verifyStatus === '1'
|
|
251
271
|
&& !!normalizeAmount(row.verifyAmt ?? '') && compareAmounts(row.verifyAmt ?? '', '0') === 0
|
|
252
272
|
const listTextColumn = (prop: keyof ForecastRow, label: string, width: number, visible = true): ColumnOption<ForecastRow> => ({
|
|
253
273
|
prop, label, width, visible, showOverflowTooltip: true,
|
|
@@ -261,13 +281,13 @@ const listColumns: ColumnOption<ForecastRow>[] = [
|
|
|
261
281
|
listTextColumn('clientName', '客户名称', 180),
|
|
262
282
|
{ ...listTextColumn('payDirec', '收支方向', 95), formatter: (row) => payDirecLabels[row.payDirec ?? ''] ?? row.payDirec ?? '—' },
|
|
263
283
|
{ ...listTextColumn('busiType', '业务类型', 110), formatter: (row) => busiTypeLabels[row.busiType ?? ''] ?? row.busiType ?? '—' },
|
|
264
|
-
listTextColumn('payChannel', '支付渠道', 110),
|
|
284
|
+
{ ...listTextColumn('payChannel', '支付渠道', 110), formatter: (row) => payChannelLabels[row.payChannel ?? ''] ?? row.payChannel ?? '—' },
|
|
265
285
|
{ prop: 'predAmt', label: '预报金额(元)', width: 180, align: 'right', useSlot: true, slotName: 'amount', ...localSort('predAmt', 'amount') },
|
|
266
286
|
{ prop: 'verifyAmt', label: '已核销金额(元)', width: 180, align: 'right', useSlot: true, slotName: 'verifiedAmount', ...localSort('verifyAmt', 'amount') },
|
|
267
287
|
listTextColumn('competName', '交易对手名称', 180),
|
|
268
288
|
listTextColumn('groundBranch', '落地机构', 160),
|
|
269
|
-
listTextColumn('predStatus', '预报状态',
|
|
270
|
-
listTextColumn('verifyStatus', '核销状态', 100),
|
|
289
|
+
{ ...listTextColumn('predStatus', '预报状态', 180), formatter: (row) => predStatusLabels[row.predStatus ?? ''] ?? row.predStatus ?? '—' },
|
|
290
|
+
{ ...listTextColumn('verifyStatus', '核销状态', 100), formatter: (row) => verifyStatusLabels[row.verifyStatus ?? ''] ?? row.verifyStatus ?? '—' },
|
|
271
291
|
listTextColumn('competAcct', '交易对手账号', 190, false),
|
|
272
292
|
listTextColumn('clientType', '客户类型', 100, false),
|
|
273
293
|
listTextColumn('groundBranchCode', '落地机构代码', 150, false),
|
|
@@ -433,7 +453,7 @@ type FieldKey = keyof ForecastFormValues
|
|
|
433
453
|
type EditorField = {
|
|
434
454
|
key: FieldKey
|
|
435
455
|
label: string
|
|
436
|
-
kind?: 'date' | 'amount' | 'textarea' | 'businessType' | 'direction'
|
|
456
|
+
kind?: 'date' | 'amount' | 'textarea' | 'businessType' | 'direction' | 'paymentChannel'
|
|
437
457
|
placeholder?: string
|
|
438
458
|
createOnly?: boolean
|
|
439
459
|
}
|
|
@@ -457,7 +477,7 @@ const fieldGroups: { title: string; fields: EditorField[] }[] = [
|
|
|
457
477
|
{ key: 'predAmt', label: '预报金额(元)', kind: 'amount', placeholder: '请输入金额,最多两位小数' },
|
|
458
478
|
{ key: 'payDirec', label: '收支方向', kind: 'direction' },
|
|
459
479
|
{ key: 'busiType', label: '业务类型', kind: 'businessType' },
|
|
460
|
-
{ key: 'payChannel', label: '
|
|
480
|
+
{ key: 'payChannel', label: '支付渠道', kind: 'paymentChannel' },
|
|
461
481
|
{ key: 'clientName', label: '客户名称' },
|
|
462
482
|
{ key: 'clientType', label: '客户类型代码', placeholder: '请输入客户类型代码' },
|
|
463
483
|
],
|
|
@@ -665,8 +685,8 @@ const detailGroups: { title: string; fields: DetailField[] }[] = [
|
|
|
665
685
|
{ key: 'tranDate', label: '交易日期', kind: 'date' },
|
|
666
686
|
{ key: 'predAmt', label: '预报金额(元)', kind: 'amount' },
|
|
667
687
|
{ key: 'standardName', label: '标准名称' },
|
|
668
|
-
{ key: 'predStatus', label: '
|
|
669
|
-
{ key: 'verifyStatus', label: '
|
|
688
|
+
{ key: 'predStatus', label: '预报状态', kind: 'status' },
|
|
689
|
+
{ key: 'verifyStatus', label: '核销状态', kind: 'status' },
|
|
670
690
|
{ key: 'verifyAmt', label: '已核销金额(元)', kind: 'amount' },
|
|
671
691
|
{ key: 'edusFlag', label: '释放状态代码', kind: 'status' },
|
|
672
692
|
],
|
|
@@ -676,7 +696,7 @@ const detailGroups: { title: string; fields: DetailField[] }[] = [
|
|
|
676
696
|
fields: [
|
|
677
697
|
{ key: 'busiType', label: '业务类型代码' },
|
|
678
698
|
{ key: 'payDirec', label: '收支方向' },
|
|
679
|
-
{ key: 'payChannel', label: '
|
|
699
|
+
{ key: 'payChannel', label: '支付渠道' },
|
|
680
700
|
{ key: 'clientName', label: '客户名称' },
|
|
681
701
|
{ key: 'competName', label: '交易对手名称' },
|
|
682
702
|
{ key: 'competAcct', label: '交易对手账号' },
|
|
@@ -712,6 +732,9 @@ const displayValue = (field: DetailField) => {
|
|
|
712
732
|
if (field.kind === 'date') return formatDate(value)
|
|
713
733
|
if (field.key === 'busiType') return busiTypeLabels[value] ?? value
|
|
714
734
|
if (field.key === 'payDirec') return payDirecLabels[value] ?? value
|
|
735
|
+
if (field.key === 'payChannel') return payChannelLabels[value] ?? value
|
|
736
|
+
if (field.key === 'predStatus') return predStatusLabels[value] ?? value
|
|
737
|
+
if (field.key === 'verifyStatus') return verifyStatusLabels[value] ?? value
|
|
715
738
|
return String(value)
|
|
716
739
|
}
|
|
717
740
|
|
|
@@ -805,6 +828,14 @@ watch([detailDialogVisible, detailDialogPredRefNo], ([visible]) => {
|
|
|
805
828
|
>
|
|
806
829
|
<el-option v-for="option in payDirecOptions" :key="option.value" :label="option.label" :value="option.value" />
|
|
807
830
|
</el-select>
|
|
831
|
+
<el-select
|
|
832
|
+
v-else-if="field.kind === 'paymentChannel'"
|
|
833
|
+
v-model="form.payChannel"
|
|
834
|
+
placeholder="请选择支付渠道"
|
|
835
|
+
clearable
|
|
836
|
+
>
|
|
837
|
+
<el-option v-for="option in payChannelOptions" :key="option.value" :label="option.label" :value="option.value" />
|
|
838
|
+
</el-select>
|
|
808
839
|
<el-input
|
|
809
840
|
v-else-if="field.kind === 'textarea'"
|
|
810
841
|
v-model="form[field.key]"
|
|
@@ -896,9 +927,11 @@ watch([detailDialogVisible, detailDialogPredRefNo], ([visible]) => {
|
|
|
896
927
|
<el-option v-for="option in payDirecOptions" :key="option.value" :label="option.label" :value="option.value" />
|
|
897
928
|
</el-select>
|
|
898
929
|
</el-form-item>
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
930
|
+
<el-form-item v-for="filter in listAdditionalFilters" :key="filter.key" :label="filter.label">
|
|
931
|
+
<el-select v-if="filter.options" v-model="listFilters[filter.key]" placeholder="全部" clearable>
|
|
932
|
+
<el-option v-for="option in filter.options" :key="option.value" :label="option.label" :value="option.value" />
|
|
933
|
+
</el-select>
|
|
934
|
+
<el-input v-else v-model="listFilters[filter.key]" placeholder="请输入" :maxlength="200" clearable />
|
|
902
935
|
</el-form-item>
|
|
903
936
|
<el-form-item label="排序规则">
|
|
904
937
|
<el-select v-model="listFilters.sortRule" clearable placeholder="默认排序">
|
|
@@ -23,9 +23,9 @@ export interface Tam120501001InBody {
|
|
|
23
23
|
groundBranchName?: string
|
|
24
24
|
/** 联系人 */
|
|
25
25
|
linkMan?: string
|
|
26
|
-
/**
|
|
26
|
+
/** 支付渠道:8 数字人民币。 */
|
|
27
27
|
payChannel?: string
|
|
28
|
-
/**
|
|
28
|
+
/** 收支方向:1 收入、2 支出。 */
|
|
29
29
|
payDirec: string
|
|
30
30
|
/** 联系电话 */
|
|
31
31
|
phoneNo?: string
|
|
@@ -63,9 +63,9 @@ export interface Tam120501002InBody {
|
|
|
63
63
|
groundBranchName?: string
|
|
64
64
|
/** 联系人 */
|
|
65
65
|
linkMan?: string
|
|
66
|
-
/**
|
|
66
|
+
/** 支付渠道:8 数字人民币。 */
|
|
67
67
|
payChannel?: string
|
|
68
|
-
/**
|
|
68
|
+
/** 收支方向:1 收入、2 支出。 */
|
|
69
69
|
payDirec?: string
|
|
70
70
|
/** 联系电话 */
|
|
71
71
|
phoneNo?: string
|
|
@@ -101,11 +101,11 @@ export interface Tam140501001InBody {
|
|
|
101
101
|
endTransAmt?: string
|
|
102
102
|
/** 落地机构 */
|
|
103
103
|
groundBranch?: string
|
|
104
|
-
/**
|
|
104
|
+
/** 支付渠道:8 数字人民币。 */
|
|
105
105
|
payChannel?: string
|
|
106
|
-
/**
|
|
106
|
+
/** 收支方向:1 收入、2 支出。 */
|
|
107
107
|
payDirec?: string
|
|
108
|
-
/**
|
|
108
|
+
/** 预报状态:1 正常预报、2 延迟预报、3 正常预报正常删除、4 正常预报延迟删除、5 延迟预报延时删除、7 正常预报新增超时、8 延迟预报新增超时。 */
|
|
109
109
|
predStatus?: string
|
|
110
110
|
/** 排序 */
|
|
111
111
|
sortRule?: string
|
|
@@ -113,7 +113,7 @@ export interface Tam140501001InBody {
|
|
|
113
113
|
startTransAmt?: string
|
|
114
114
|
/** 交易时间 */
|
|
115
115
|
tranDate: string
|
|
116
|
-
/**
|
|
116
|
+
/** 核销状态:1 未核销、2 已核销、3 部分核销。 */
|
|
117
117
|
verifyStatus?: string
|
|
118
118
|
}
|
|
119
119
|
|
|
@@ -145,9 +145,9 @@ export interface Tam140501001OutBodyResultList {
|
|
|
145
145
|
groundBranch?: string
|
|
146
146
|
/** 机构代码 */
|
|
147
147
|
groundBranchCode?: string
|
|
148
|
-
/**
|
|
148
|
+
/** 支付渠道:8 数字人民币。 */
|
|
149
149
|
payChannel?: string
|
|
150
|
-
/**
|
|
150
|
+
/** 收支方向:1 收入、2 支出。 */
|
|
151
151
|
payDirec?: string
|
|
152
152
|
/** 预报金额 */
|
|
153
153
|
predAmt?: string
|
|
@@ -157,7 +157,7 @@ export interface Tam140501001OutBodyResultList {
|
|
|
157
157
|
predDate?: string
|
|
158
158
|
/** 预报流水号 */
|
|
159
159
|
predRefNo?: string
|
|
160
|
-
/**
|
|
160
|
+
/** 预报状态:1 正常预报、2 延迟预报、3 正常预报正常删除、4 正常预报延迟删除、5 延迟预报延时删除、7 正常预报新增超时、8 延迟预报新增超时。 */
|
|
161
161
|
predStatus?: string
|
|
162
162
|
/** 标准名称 */
|
|
163
163
|
standardName?: string
|
|
@@ -165,7 +165,7 @@ export interface Tam140501001OutBodyResultList {
|
|
|
165
165
|
tranDate?: string
|
|
166
166
|
/** 已核销金额 */
|
|
167
167
|
verifyAmt?: string
|
|
168
|
-
/**
|
|
168
|
+
/** 核销状态:1 未核销、2 已核销、3 部分核销。 */
|
|
169
169
|
verifyStatus?: string
|
|
170
170
|
}
|
|
171
171
|
|
|
@@ -189,15 +189,15 @@ export interface Tam140501002OutBody {
|
|
|
189
189
|
edusFlag?: string
|
|
190
190
|
/** 落地机构名称 */
|
|
191
191
|
groundBranchName?: string
|
|
192
|
-
/**
|
|
192
|
+
/** 支付渠道:8 数字人民币。 */
|
|
193
193
|
payChannel?: string
|
|
194
|
-
/**
|
|
194
|
+
/** 收支方向:1 收入、2 支出。 */
|
|
195
195
|
payDirec?: string
|
|
196
196
|
/** 预报金额 */
|
|
197
197
|
predAmt?: string
|
|
198
198
|
/** 预报流水号 */
|
|
199
199
|
predRefNo?: string
|
|
200
|
-
/**
|
|
200
|
+
/** 预报状态:1 正常预报、2 延迟预报、3 正常预报正常删除、4 正常预报延迟删除、5 延迟预报延时删除、7 正常预报新增超时、8 延迟预报新增超时。 */
|
|
201
201
|
predStatus?: string
|
|
202
202
|
/** 标准名称 */
|
|
203
203
|
standardName?: string
|
|
@@ -205,7 +205,7 @@ export interface Tam140501002OutBody {
|
|
|
205
205
|
tranDate?: string
|
|
206
206
|
/** 已核销金额 */
|
|
207
207
|
verifyAmt?: string
|
|
208
|
-
/**
|
|
208
|
+
/** 核销状态:1 未核销、2 已核销、3 部分核销。 */
|
|
209
209
|
verifyStatus?: string
|
|
210
210
|
}
|
|
211
211
|
|
|
@@ -4,7 +4,6 @@ import type {
|
|
|
4
4
|
ForecastQueryParams,
|
|
5
5
|
Tam120502002InBody,
|
|
6
6
|
Tam120502003InBody,
|
|
7
|
-
Tam140502001OutBody,
|
|
8
7
|
} from './typs'
|
|
9
8
|
|
|
10
9
|
// 同一操作的相同请求失败后复用流水号,避免响应丢失后重试导致重复记账。
|
|
@@ -51,33 +50,14 @@ export default {
|
|
|
51
50
|
* clientName 为客户名称,competName 为交易对手名称,payDirec 为收支方向(1 收入、2 支出),
|
|
52
51
|
* startTransAmt、endTransAmt 为金额范围,verifyStatusList 待核销传 [1,3]、已核销传 [2]。
|
|
53
52
|
*/
|
|
54
|
-
queryForecastApi:
|
|
55
|
-
|
|
56
|
-
const requestDirections: Record<string, string> = { '1': 'I', '2': 'O' }
|
|
57
|
-
const responseDirections: Record<string, string> = { I: '1', O: '2' }
|
|
58
|
-
const response = await baseHttpClient.post<any>('/TAM/0001/140502001', {
|
|
59
|
-
...params,
|
|
60
|
-
payDirec: params.payDirec ? requestDirections[params.payDirec] ?? params.payDirec : undefined,
|
|
61
|
-
})
|
|
62
|
-
const body: Tam140502001OutBody | null = response.body
|
|
63
|
-
if (!body || !Array.isArray(body.resultList)) return response
|
|
64
|
-
return {
|
|
65
|
-
...response,
|
|
66
|
-
body: {
|
|
67
|
-
...body,
|
|
68
|
-
resultList: body.resultList.map((row) => ({
|
|
69
|
-
...row,
|
|
70
|
-
payDirec: row.payDirec ? responseDirections[row.payDirec] ?? row.payDirec : row.payDirec,
|
|
71
|
-
})),
|
|
72
|
-
},
|
|
73
|
-
}
|
|
74
|
-
},
|
|
53
|
+
queryForecastApi: (params: ForecastQueryParams) =>
|
|
54
|
+
baseHttpClient.post<any>('/TAM/0001/140502001', params),
|
|
75
55
|
/**
|
|
76
56
|
* 分页查询核销流水信息。
|
|
77
57
|
* @param params 查询参数:tranDate 为交易日期(必填,YYYYMMDD);pageIndex、pageSize 为页码和每页条数。
|
|
78
58
|
* 业务筛选:busiType 为业务类型(201 兑回、202 兑出、203 付现),orgName 为我方机构,
|
|
79
59
|
* payerName、payeeName 为付款人和收款人名称,
|
|
80
|
-
* payDirec
|
|
60
|
+
* payDirec 为收支方向(I 收入、O 支出),startTransAmt、endTransAmt 为金额范围,verifyStatus 为核销状态。
|
|
81
61
|
*/
|
|
82
62
|
queryFlowApi: (params: unknown) => baseHttpClient.post<any>("/TAM/0001/140502002", params)
|
|
83
63
|
}
|
|
@@ -118,9 +118,9 @@ const compareAmounts = (left: string, right: string): number => {
|
|
|
118
118
|
|
|
119
119
|
/** 业务类型字典:201 兑回、202 兑出、203 付现;超出字典的值保留原文。 */
|
|
120
120
|
const busiTypeLabels: Record<string, string> = { '201': '兑回', '202': '兑出', '203': '付现' }
|
|
121
|
-
/**
|
|
121
|
+
/** 预报使用 1 收入、2 支出;流水使用 I 收入、O 支出,查询按各自编码提交。 */
|
|
122
122
|
const forecastPayDirecLabels: Record<string, string> = { '1': '收入', '2': '支出' }
|
|
123
|
-
const flowPayDirecLabels: Record<string, string> = { I: '
|
|
123
|
+
const flowPayDirecLabels: Record<string, string> = { I: '收入', O: '支出' }
|
|
124
124
|
/** 支付渠道:核销预报为 8、流水为 5,均表示数字人民币;其余渠道保留原文。 */
|
|
125
125
|
const payChannelLabels: Record<string, string> = { '5': '数字人民币', '8': '数字人民币' }
|
|
126
126
|
/** 响应核销状态字典;流水筛选仍按请求协议仅提供 1、2。 */
|
|
@@ -607,7 +607,7 @@ type FlowAppliedQuery = {
|
|
|
607
607
|
busiType?: string // 业务类型:201 兑回、202 兑出、203 付现。
|
|
608
608
|
payerName?: string // 付款人名称。
|
|
609
609
|
payeeName?: string // 收款人名称。
|
|
610
|
-
payDirec?: string // 收支方向:I
|
|
610
|
+
payDirec?: string // 收支方向:I 收入、O 支出。
|
|
611
611
|
startTransAmt?: string // 起始金额,查询提交时已由万元转换为元。
|
|
612
612
|
endTransAmt?: string // 截止金额,查询提交时已由万元转换为元。
|
|
613
613
|
verifyStatus?: string // 核销状态:1 未核销、2 已核销。
|
|
@@ -637,7 +637,7 @@ const flowTextFilters = [
|
|
|
637
637
|
|
|
638
638
|
// 列表、分页与请求状态;请求序号防止旧响应覆盖新结果。
|
|
639
639
|
const flowRows = ref<FlowRow[]>([])
|
|
640
|
-
/**
|
|
640
|
+
/** 只计算勾选流水的轧差:收入减去支出,未勾选时为 0.00。 */
|
|
641
641
|
const selectedFlowNetAmount = computed(() => formatCents(flowSelection.value.reduce((total, row) => {
|
|
642
642
|
const direction = row.payDirec?.trim()
|
|
643
643
|
if (direction === 'I') return total + amountToCents(row.tranAmt)
|
|
@@ -152,7 +152,7 @@ export interface Tam140502002InBody {
|
|
|
152
152
|
endTransAmt?: string
|
|
153
153
|
/** 我方机构 */
|
|
154
154
|
orgName?: string
|
|
155
|
-
/**
|
|
155
|
+
/** 收支方向:I 收入、O 支出。 */
|
|
156
156
|
payDirec?: string
|
|
157
157
|
/** 收款人名称 */
|
|
158
158
|
payeeName?: string
|
|
@@ -198,7 +198,7 @@ export interface Tam140502002OutBodyResultList {
|
|
|
198
198
|
payBankNo?: string
|
|
199
199
|
/** 支付渠道,5:数字人民币 */
|
|
200
200
|
payChannel?: string
|
|
201
|
-
/**
|
|
201
|
+
/** 收支方向:I 收入、O 支出。 */
|
|
202
202
|
payDirec?: string
|
|
203
203
|
/** 付款钱包ID */
|
|
204
204
|
payWltId?: string
|