vue2server7 7.0.27 → 7.0.28

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.
@@ -1,36 +1,38 @@
1
1
  <template>
2
2
  <div class="date-range" :class="{ 'is-disabled': disabled }">
3
- <el-date-picker
4
- v-model="startVal"
5
- class="date-range__picker"
6
- :class="{ 'is-error': showError }"
7
- :type="pickerType"
8
- :placeholder="startPlaceholder"
9
- :disabled="disabled"
10
- :disabled-date="disabledStartDate"
11
- :value-format="valueFormat"
12
- :format="displayFormat"
13
- clearable
14
- @change="onStartChange"
15
- @focus="onStartFocus"
16
- @blur="onStartBlur"
17
- />
18
- <span class="date-range__separator">{{ separator }}</span>
19
- <el-date-picker
20
- v-model="endVal"
21
- class="date-range__picker"
22
- :class="{ 'is-error': showError }"
23
- :type="pickerType"
24
- :placeholder="endPlaceholder"
25
- :disabled="disabled"
26
- :disabled-date="disabledEndDate"
27
- :value-format="valueFormat"
28
- :format="displayFormat"
29
- clearable
30
- @change="onEndChange"
31
- @focus="onEndFocus"
32
- @blur="onEndBlur"
33
- />
3
+ <div class="date-range__row">
4
+ <el-date-picker
5
+ v-model="startVal"
6
+ class="date-range__picker"
7
+ :class="{ 'is-error': showError }"
8
+ :type="pickerType"
9
+ :placeholder="startPlaceholder"
10
+ :disabled="disabled"
11
+ :disabled-date="disabledStartDate"
12
+ :value-format="valueFormat"
13
+ :format="displayFormat"
14
+ clearable
15
+ @change="onStartChange"
16
+ @focus="onStartFocus"
17
+ @blur="onStartBlur"
18
+ />
19
+ <span class="date-range__separator">{{ separator }}</span>
20
+ <el-date-picker
21
+ v-model="endVal"
22
+ class="date-range__picker"
23
+ :class="{ 'is-error': showError }"
24
+ :type="pickerType"
25
+ :placeholder="endPlaceholder"
26
+ :disabled="disabled"
27
+ :disabled-date="disabledEndDate"
28
+ :value-format="valueFormat"
29
+ :format="displayFormat"
30
+ clearable
31
+ @change="onEndChange"
32
+ @focus="onEndFocus"
33
+ @blur="onEndBlur"
34
+ />
35
+ </div>
34
36
  <span v-if="showError" class="date-range__error">{{ activeErrorMessage }}</span>
35
37
  </div>
36
38
  </template>
@@ -283,20 +285,42 @@ watch(
283
285
  <style scoped>
284
286
  .date-range {
285
287
  display: flex;
288
+ flex-direction: column;
289
+ width: 100%;
290
+ min-width: 0;
291
+ box-sizing: border-box;
292
+ }
293
+
294
+ .date-range__row {
295
+ display: flex;
296
+ flex-direction: row;
297
+ flex-wrap: nowrap;
286
298
  align-items: center;
287
299
  gap: 8px;
288
- flex-wrap: wrap;
300
+ width: 100%;
301
+ min-width: 0;
289
302
  }
290
303
 
291
304
  .date-range__picker {
292
- flex: 1;
305
+ flex: 1 1 0;
293
306
  min-width: 0;
294
307
  }
295
308
 
309
+ /* class 往往挂在 .el-date-editor 根上,用行容器做 :deep 更稳 */
310
+ .date-range__row :deep(.el-date-editor) {
311
+ width: 100%;
312
+ max-width: 100%;
313
+ }
314
+
315
+ .date-range__row :deep(.el-date-editor .el-input__wrapper) {
316
+ width: 100%;
317
+ }
318
+
296
319
  .date-range__separator {
297
320
  color: var(--el-text-color-primary);
298
321
  font-size: 14px;
299
322
  flex-shrink: 0;
323
+ white-space: nowrap;
300
324
  }
301
325
 
302
326
  .date-range.is-disabled .date-range__separator {
@@ -308,10 +332,12 @@ watch(
308
332
  }
309
333
 
310
334
  .date-range__error {
335
+ display: block;
311
336
  width: 100%;
337
+ min-width: 0;
312
338
  color: var(--el-color-danger);
313
339
  font-size: 12px;
314
- line-height: 1;
340
+ line-height: 1.4;
315
341
  padding-top: 4px;
316
342
  }
317
343
  </style>
@@ -1,71 +1,80 @@
1
1
  <template>
2
2
  <section class="page position-report-page">
3
- <h1 class="title">头寸报备信息</h1>
3
+ <header class="page-header">
4
+ <h1 class="title">头寸报备信息</h1>
5
+ <span class="header-badge" aria-hidden="true" />
6
+ </header>
4
7
 
5
8
  <el-form
6
9
  ref="formRef"
7
10
  :model="form"
8
11
  :rules="rules"
9
- label-width="140px"
12
+ label-width="168px"
10
13
  label-suffix=":"
11
14
  class="report-form"
12
15
  >
13
- <!-- 第一行 -->
14
- <el-row :gutter="24">
16
+ <!-- 按截图三列对齐 -->
17
+ <el-row :gutter="20">
15
18
  <el-col :span="8">
16
- <el-form-item label="头寸报备编号" prop="reportNo">
17
- <el-input v-model="form.reportNo" placeholder="系统自动生成" disabled />
19
+ <el-form-item label="头寸报备编号" prop="id">
20
+ <el-input v-model="form.id" placeholder="" clearable />
18
21
  </el-form-item>
19
22
  </el-col>
20
23
  <el-col :span="8">
21
- <el-form-item label="业务类型" prop="bizType">
22
- <el-input v-model="form.bizType" disabled />
24
+ <el-form-item label="业务类型" prop="forecastType">
25
+ <el-select v-model="form.forecastType" placeholder="请选择" style="width: 100%">
26
+ <el-option
27
+ v-for="o in forecastTypeOptions"
28
+ :key="o.value"
29
+ :label="o.label"
30
+ :value="o.value"
31
+ />
32
+ </el-select>
23
33
  </el-form-item>
24
34
  </el-col>
25
35
  <el-col :span="8">
26
- <el-form-item label="客户分类" prop="customerType">
27
- <el-select v-model="form.customerType" placeholder="请选择" style="width: 100%">
28
- <el-option label="对公" value="对公" />
29
- <el-option label="对私" value="对私" />
30
- </el-select>
36
+ <el-form-item label="客户分类" prop="clientType">
37
+ <el-input v-model="clientTypeLabel" disabled />
31
38
  </el-form-item>
32
39
  </el-col>
33
40
  </el-row>
34
41
 
35
- <!-- 第二行 -->
36
- <el-row :gutter="24">
42
+ <el-row :gutter="20">
37
43
  <el-col :span="8">
38
- <el-form-item label="是否集团" prop="isGroup">
39
- <el-select v-model="form.isGroup" placeholder="请选择" style="width: 100%">
40
- <el-option label="是" value="是" />
41
- <el-option label="否" value="否" />
44
+ <el-form-item label="证件类型" prop="priIdCardType">
45
+ <el-select v-model="form.priIdCardType" placeholder="请选择" style="width: 100%">
46
+ <el-option
47
+ v-for="o in priIdCardTypeOptions"
48
+ :key="o.value"
49
+ :label="o.label"
50
+ :value="o.value"
51
+ />
42
52
  </el-select>
43
53
  </el-form-item>
44
54
  </el-col>
45
55
  <el-col :span="8">
46
- <el-form-item label="对公组织架构代码" prop="orgCode">
47
- <el-input v-model="form.orgCode" placeholder="请输入" />
56
+ <el-form-item label="对公组织机构代码" prop="pubOrgCode">
57
+ <el-input v-model="form.pubOrgCode" clearable />
48
58
  </el-form-item>
49
59
  </el-col>
50
60
  <el-col :span="8">
51
- <el-form-item label="客户名称" prop="customerName">
52
- <el-input v-model="form.customerName" placeholder="请输入" />
61
+ <el-form-item label="客户名称" prop="custName">
62
+ <el-input v-model="form.custName" disabled />
53
63
  </el-form-item>
54
64
  </el-col>
55
65
  </el-row>
56
66
 
57
- <!-- 第三行 -->
58
- <el-row :gutter="24">
67
+ <el-row :gutter="20">
59
68
  <el-col :span="8">
60
- <el-form-item label="投付款币种金额" prop="currency">
61
- <div style="display: flex; gap: 8px; width: 100%">
62
- <el-select v-model="form.currency" placeholder="币种" style="width: 140px; flex-shrink: 0">
69
+ <el-form-item label="拟付款币种/金额" prop="currency">
70
+ <div class="currency-amt">
71
+ <el-select v-model="form.currency" placeholder="币种" class="currency-amt__cur">
63
72
  <el-option label="CNY - 人民币" value="CNY" />
64
73
  <el-option label="USD - 美元" value="USD" />
65
74
  <el-option label="EUR - 欧元" value="EUR" />
66
75
  <el-option label="HKD - 港币" value="HKD" />
67
76
  </el-select>
68
- <el-input v-model="form.amount" placeholder="金额" />
77
+ <el-input v-model="form.forecastAmt" class="currency-amt__amt" clearable />
69
78
  </div>
70
79
  </el-form-item>
71
80
  </el-col>
@@ -81,17 +90,14 @@
81
90
  />
82
91
  </el-form-item>
83
92
  </el-col>
84
- <el-col :span="8">
85
- <el-form-item label="账户名称" prop="accountName">
86
- <el-input v-model="form.accountName" placeholder="请输入" />
87
- </el-form-item>
93
+ <el-col :span="8" class="form-col--spacer">
94
+ <div class="form-col-placeholder" aria-hidden="true" />
88
95
  </el-col>
89
96
  </el-row>
90
97
 
91
- <!-- 第四行 -->
92
- <el-row :gutter="24">
98
+ <el-row :gutter="20">
93
99
  <el-col :span="8">
94
- <el-form-item label="计划汇/收日期" prop="planDate">
100
+ <el-form-item label="计划汇款日期" prop="planDate">
95
101
  <el-date-picker
96
102
  v-model="form.planDate"
97
103
  type="date"
@@ -103,9 +109,9 @@
103
109
  </el-form-item>
104
110
  </el-col>
105
111
  <el-col :span="8">
106
- <el-form-item label="预备日期" prop="prepareDate">
112
+ <el-form-item label="报备日期" prop="bigForDate">
107
113
  <el-date-picker
108
- v-model="form.prepareDate"
114
+ v-model="form.bigForDate"
109
115
  type="date"
110
116
  placeholder="请选择日期"
111
117
  format="YYYY-MM-DD"
@@ -115,150 +121,244 @@
115
121
  </el-form-item>
116
122
  </el-col>
117
123
  <el-col :span="8">
118
- <el-form-item label="报备创号" prop="createNo">
119
- <el-input v-model="form.createNo" placeholder="请输入" />
124
+ <el-form-item label="报备时间" prop="bigForTime">
125
+ <el-input v-model="form.bigForTime" placeholder="HHmmss" clearable />
120
126
  </el-form-item>
121
127
  </el-col>
122
128
  </el-row>
123
129
 
124
- <!-- 第五行 -->
125
- <el-row :gutter="24">
130
+ <el-row :gutter="20">
126
131
  <el-col :span="8">
127
- <el-form-item label="是否议叙" prop="isNegotiate">
128
- <el-select v-model="form.isNegotiate" placeholder="请选择" style="width: 100%">
129
- <el-option label="" value="" />
130
- <el-option label="" value="" />
132
+ <el-form-item label="是否退汇" prop="rtnFlag">
133
+ <el-select v-model="form.rtnFlag" placeholder="请选择" style="width: 100%">
134
+ <el-option label="" value="01" />
135
+ <el-option label="" value="02" />
131
136
  </el-select>
132
137
  </el-form-item>
133
138
  </el-col>
134
139
  <el-col :span="8">
135
- <el-form-item label="原银行业务编号" prop="origBizNo">
136
- <el-input v-model="form.origBizNo" placeholder="请输入" />
140
+ <el-form-item label="原银行业务编号" prop="oriInnerRefNo">
141
+ <el-input
142
+ v-model="form.oriInnerRefNo"
143
+ maxlength="16"
144
+ show-word-limit
145
+ placeholder="退汇为「是」时必填,16 位"
146
+ clearable
147
+ />
137
148
  </el-form-item>
138
149
  </el-col>
139
150
  <el-col :span="8">
140
- <el-form-item label="联户行" prop="linkedBank">
141
- <el-select v-model="form.linkedBank" placeholder="请选择" filterable style="width: 100%">
142
- <el-option label="CIPSCNSHXXX" value="CIPSCNSHXXX" />
143
- <el-option label="BKCHCNBJXXX" value="BKCHCNBJXXX" />
144
- </el-select>
151
+ <el-form-item label="账户行" prop="nostro">
152
+ <el-input v-model="form.nostro" clearable />
145
153
  </el-form-item>
146
154
  </el-col>
147
155
  </el-row>
148
156
 
149
- <!-- 第六行 -->
150
- <el-row :gutter="24">
157
+ <el-row :gutter="20">
151
158
  <el-col :span="8">
152
- <el-form-item label="收款银行" prop="receivingBank">
153
- <el-input v-model="form.receivingBank" placeholder="请输入" />
159
+ <el-form-item label="收款银行" prop="swiftCode">
160
+ <el-input v-model="form.swiftCode" placeholder="最终收款行 SWIFT" clearable />
154
161
  </el-form-item>
155
162
  </el-col>
156
163
  <el-col :span="8">
157
- <el-form-item label="收款银行开户行" prop="receivingBankCode">
158
- <el-input v-model="form.receivingBankCode" placeholder="请输入" />
164
+ <el-form-item label="收款银行开户行" prop="pyeAcctBicSCode">
165
+ <el-input v-model="form.pyeAcctBicSCode" clearable />
159
166
  </el-form-item>
160
167
  </el-col>
161
168
  <el-col :span="8">
162
- <el-form-item label="收款银行开户行名" prop="receivingBankName">
163
- <el-input v-model="form.receivingBankName" placeholder="请输入" />
169
+ <el-form-item label="收款银行开户行名称" prop="pyeAcctBicName">
170
+ <el-input v-model="form.pyeAcctBicName" disabled />
164
171
  </el-form-item>
165
172
  </el-col>
166
173
  </el-row>
167
174
 
168
- <!-- 第七行 -->
169
- <el-row :gutter="24">
175
+ <el-row :gutter="20">
170
176
  <el-col :span="8">
171
- <el-form-item label="邮件通知覆盖产品" prop="emailProduct">
172
- <el-select v-model="form.emailProduct" placeholder="请选择" style="width: 100%">
173
- <el-option label="产品A" value="A" />
174
- <el-option label="产品B" value="B" />
177
+ <el-form-item label="邮件通知服务产品" prop="mailFlag">
178
+ <el-select v-model="form.mailFlag" placeholder="请选择" style="width: 100%">
179
+ <el-option label="" value="0" />
180
+ <el-option label="" value="1" />
175
181
  </el-select>
176
182
  </el-form-item>
177
183
  </el-col>
178
184
  <el-col :span="8">
179
- <el-form-item label="多币种汇款产品" prop="multiCurrencyProduct">
180
- <el-select v-model="form.multiCurrencyProduct" placeholder="请选择" style="width: 100%">
181
- <el-option label="产品A" value="A" />
182
- <el-option label="产品B" value="B" />
185
+ <el-form-item label="多币种汇款产品" prop="mulCurFlag">
186
+ <el-select v-model="form.mulCurFlag" placeholder="请选择" style="width: 100%">
187
+ <el-option label="" value="0" />
188
+ <el-option label="" value="1" />
183
189
  </el-select>
184
190
  </el-form-item>
185
191
  </el-col>
186
192
  <el-col :span="8">
187
193
  <el-form-item label="自贸区标识" prop="ftzFlag">
188
- <el-checkbox v-model="form.ftzFlag" />
194
+ <el-select v-model="form.ftzFlag" placeholder="请选择" style="width: 100%">
195
+ <el-option label="否" value="0" />
196
+ <el-option label="是" value="1" />
197
+ </el-select>
189
198
  </el-form-item>
190
199
  </el-col>
191
200
  </el-row>
192
201
 
193
- <!-- 第八行 -->
194
- <el-row :gutter="24">
202
+ <el-row :gutter="20">
195
203
  <el-col :span="8">
196
- <el-form-item label="报备人" prop="reporter">
197
- <el-input v-model="form.reporter" placeholder="请输入" />
204
+ <el-form-item label="报备人" prop="linkMan">
205
+ <el-input v-model="form.linkMan" clearable />
198
206
  </el-form-item>
199
207
  </el-col>
200
208
  <el-col :span="8">
201
- <el-form-item label="联系电话" prop="phone">
202
- <el-input v-model="form.phone" placeholder="请输入" />
209
+ <el-form-item label="联系电话" prop="linkWay">
210
+ <el-input v-model="form.linkWay" clearable />
203
211
  </el-form-item>
204
212
  </el-col>
205
213
  <el-col :span="8">
206
- <el-form-item label="报备部门" prop="department">
207
- <el-input v-model="form.department" placeholder="请输入" />
214
+ <el-form-item label="报备机构" prop="orgId">
215
+ <el-select
216
+ v-model="form.orgId"
217
+ filterable
218
+ allow-create
219
+ default-first-option
220
+ placeholder="请选择或输入"
221
+ style="width: 100%"
222
+ >
223
+ <el-option label="00301-和平里支行营业部" value="00301" />
224
+ </el-select>
208
225
  </el-form-item>
209
226
  </el-col>
210
227
  </el-row>
211
228
 
212
- <!-- 第九行 -->
213
- <el-row :gutter="24">
214
- <el-col :span="16">
229
+ <el-row :gutter="20">
230
+ <el-col :span="8">
215
231
  <el-form-item label="报备说明" prop="remark">
216
- <el-input v-model="form.remark" type="textarea" :rows="2" placeholder="请输入" />
232
+ <el-input v-model="form.remark" type="textarea" :rows="2" placeholder="" />
217
233
  </el-form-item>
218
234
  </el-col>
235
+ <el-col :span="8" class="form-col--spacer">
236
+ <div class="form-col-placeholder" aria-hidden="true" />
237
+ </el-col>
219
238
  <el-col :span="8">
220
- <el-form-item label="登记" prop="register">
221
- <el-input v-model="form.register" placeholder="请输入" />
239
+ <el-form-item label="备注(拒绝原因)" prop="rejectRemark">
240
+ <el-input v-model="form.rejectRemark" clearable />
222
241
  </el-form-item>
223
242
  </el-col>
224
243
  </el-row>
225
244
 
226
- <!-- 第十行 -->
227
- <el-row :gutter="24">
245
+ <el-row :gutter="20">
228
246
  <el-col :span="8">
229
- <el-form-item label="使用状态" prop="useStatus">
230
- <el-select v-model="form.useStatus" placeholder="请选择" style="width: 100%">
231
- <el-option label="未使用" value="未使用" />
232
- <el-option label="已使用" value="已使用" />
247
+ <el-form-item label="使用状态" prop="isUsedFlg">
248
+ <el-select v-model="form.isUsedFlg" placeholder="请选择" style="width: 100%">
249
+ <el-option label="未使用" value="0" />
250
+ <el-option label="已使用" value="1" />
233
251
  </el-select>
234
252
  </el-form-item>
235
253
  </el-col>
236
254
  <el-col :span="8">
237
- <el-form-item label="当前状态" prop="currentStatus">
238
- <el-input v-model="form.currentStatus" placeholder="请输入" disabled />
255
+ <el-form-item label="当前队列" prop="forecastStatus">
256
+ <el-select v-model="form.forecastStatus" placeholder="请选择" style="width: 100%">
257
+ <el-option
258
+ v-for="o in forecastStatusOptions"
259
+ :key="o.value"
260
+ :label="o.label"
261
+ :value="o.value"
262
+ />
263
+ </el-select>
264
+ </el-form-item>
265
+ </el-col>
266
+ <el-col :span="8">
267
+ <el-form-item label="业务渠道" prop="businessChannel">
268
+ <el-input v-model="form.businessChannel" disabled />
269
+ </el-form-item>
270
+ </el-col>
271
+ </el-row>
272
+
273
+ <el-divider content-position="left">授权 / 复核及其他</el-divider>
274
+
275
+ <el-row :gutter="20">
276
+ <el-col :span="8">
277
+ <el-form-item label="授权人" prop="author">
278
+ <el-input v-model="form.author" clearable />
279
+ </el-form-item>
280
+ </el-col>
281
+ <el-col :span="8">
282
+ <el-form-item label="授权日期" prop="authorDate">
283
+ <el-input v-model="form.authorDate" placeholder="YYYY-MM-DD" clearable />
284
+ </el-form-item>
285
+ </el-col>
286
+ <el-col :span="8">
287
+ <el-form-item label="授权时间" prop="authorTime">
288
+ <el-input v-model="form.authorTime" placeholder="HHmmss" clearable />
289
+ </el-form-item>
290
+ </el-col>
291
+ </el-row>
292
+
293
+ <el-row :gutter="20">
294
+ <el-col :span="8">
295
+ <el-form-item label="复核人" prop="supervisor">
296
+ <el-input v-model="form.supervisor" clearable />
297
+ </el-form-item>
298
+ </el-col>
299
+ <el-col :span="8">
300
+ <el-form-item label="复核日期" prop="checkDate">
301
+ <el-input v-model="form.checkDate" placeholder="YYYY-MM-DD" clearable />
302
+ </el-form-item>
303
+ </el-col>
304
+ <el-col :span="8">
305
+ <el-form-item label="复核时间" prop="checkTime">
306
+ <el-input v-model="form.checkTime" placeholder="HHmmss" clearable />
307
+ </el-form-item>
308
+ </el-col>
309
+ </el-row>
310
+
311
+ <el-row :gutter="20">
312
+ <el-col :span="8">
313
+ <el-form-item label="大额授权码" prop="posForecastNo">
314
+ <el-input v-model="form.posForecastNo" clearable />
315
+ </el-form-item>
316
+ </el-col>
317
+ <el-col :span="8">
318
+ <el-form-item label="中间行 SWIFT" prop="interBk">
319
+ <el-input v-model="form.interBk" clearable />
239
320
  </el-form-item>
240
321
  </el-col>
241
322
  <el-col :span="8">
242
- <el-form-item label="业务大区" prop="bizRegion">
243
- <el-input v-model="form.bizRegion" placeholder="请输入" />
323
+ <el-form-item label="收款人名称" prop="pyeName">
324
+ <el-input v-model="form.pyeName" clearable />
244
325
  </el-form-item>
245
326
  </el-col>
246
327
  </el-row>
328
+
329
+ <el-row :gutter="20">
330
+ <el-col :span="8">
331
+ <el-form-item label="实际付款金额" prop="usedAmt">
332
+ <el-input v-model="form.usedAmt" clearable />
333
+ </el-form-item>
334
+ </el-col>
335
+ <el-col :span="8">
336
+ <el-form-item label="可操作标志" prop="isOperateFlag">
337
+ <el-select v-model="form.isOperateFlag" placeholder="请选择" style="width: 100%">
338
+ <el-option label="不可操作" value="0" />
339
+ <el-option label="可以操作" value="1" />
340
+ </el-select>
341
+ </el-form-item>
342
+ </el-col>
343
+ <el-col :span="8" class="form-col--spacer">
344
+ <div class="form-col-placeholder" aria-hidden="true" />
345
+ </el-col>
346
+ </el-row>
247
347
  </el-form>
248
348
 
249
349
  <div class="footer">
250
- <el-button type="danger" @click="onFlowLog">操作流水</el-button>
350
+ <el-button type="danger" plain @click="onFlowLog">操作流水</el-button>
251
351
  <div class="footer-right">
252
- <el-button type="danger" @click="onSubmit">提交</el-button>
253
- <el-button type="danger" @click="onSave">保存</el-button>
254
- <el-button type="danger" @click="onClose">关闭</el-button>
352
+ <el-button type="danger" @click="onPass">通过</el-button>
353
+ <el-button type="danger" plain @click="onReject">驳回</el-button>
354
+ <el-button type="danger" plain @click="onBack">返回</el-button>
255
355
  </div>
256
356
  </div>
257
357
  </section>
258
358
  </template>
259
359
 
260
360
  <script setup lang="ts">
261
- import { reactive, ref } from 'vue'
361
+ import { computed, reactive, ref } from 'vue'
262
362
  import { useRouter } from 'vue-router'
263
363
  import { ElMessage } from 'element-plus'
264
364
  import type { FormInstance, FormRules } from 'element-plus'
@@ -266,135 +366,232 @@ import type { FormInstance, FormRules } from 'element-plus'
266
366
  const router = useRouter()
267
367
  const formRef = ref<FormInstance>()
268
368
 
269
- interface ReportForm {
270
- reportNo: string
271
- bizType: string
272
- customerType: string
273
- isGroup: string
274
- orgCode: string
275
- customerName: string
369
+ /** 与接口字典一致的表单模型(均为 string,便于直接提交 JSON) */
370
+ interface PositionForecastForm {
371
+ id: string
372
+ author: string
373
+ authorDate: string
374
+ authorTime: string
375
+ bigForDate: string
376
+ bigForTime: string
377
+ checkDate: string
378
+ checkTime: string
379
+ clientType: string
276
380
  currency: string
277
- amount: string
278
- valueDate: string
279
- accountName: string
280
- planDate: string
281
- prepareDate: string
282
- createNo: string
283
- isNegotiate: string
284
- origBizNo: string
285
- linkedBank: string
286
- receivingBank: string
287
- receivingBankCode: string
288
- receivingBankName: string
289
- emailProduct: string
290
- multiCurrencyProduct: string
291
- ftzFlag: boolean
292
- reporter: string
293
- phone: string
294
- department: string
381
+ custName: string
295
382
  remark: string
296
- register: string
297
- useStatus: string
298
- currentStatus: string
299
- bizRegion: string
383
+ forecastAmt: string
384
+ forecastStatus: string
385
+ forecastType: string
386
+ interBk: string
387
+ isOperateFlag: string
388
+ isUsedFlg: string
389
+ linkMan: string
390
+ linkWay: string
391
+ mailFlag: string
392
+ mulCurFlag: string
393
+ nostro: string
394
+ orgId: string
395
+ oriInnerRefNo: string
396
+ planDate: string
397
+ posForecastNo: string
398
+ priIdCardType: string
399
+ pubOrgCode: string
400
+ pyeAcctBicName: string
401
+ pyeAcctBicSCode: string
402
+ pyeName: string
403
+ rtnFlag: string
404
+ supervisor: string
405
+ swiftCode: string
406
+ usedAmt: string
407
+ valueDate: string
408
+ /** 界面专用:驳回说明(若后端与 remark 共用,可在提交时合并) */
409
+ rejectRemark: string
410
+ /** 界面专用:自贸区,字典未给码表时 0/1 */
411
+ ftzFlag: string
412
+ businessChannel: string
300
413
  }
301
414
 
302
- const form = reactive<ReportForm>({
303
- reportNo: '',
304
- bizType: '跨境人民币业务(进口)',
305
- customerType: '对公',
306
- isGroup: '',
307
- orgCode: '5903887-5',
308
- customerName: '长期应收长期预收客户(5927)',
415
+ const priIdCardTypeOptions = [
416
+ { value: '0', label: '无证件' },
417
+ { value: '1', label: '居民身份证' },
418
+ { value: '2', label: '户口簿' },
419
+ { value: '3', label: '护照/永久居留证' },
420
+ { value: '4', label: '军人证' },
421
+ { value: '5', label: '港澳台通行证' },
422
+ { value: '6', label: '武警身份证' },
423
+ { value: '7', label: '边民出入境通行证' }
424
+ ]
425
+
426
+ const forecastTypeOptions = [
427
+ { value: '10', label: '跨境人民币直参(客户)' },
428
+ { value: '11', label: '跨境人民币直参(同业)' }
429
+ ]
430
+
431
+ const forecastStatusOptions = [
432
+ { value: '00', label: '已授权' },
433
+ { value: '01', label: '待修改' },
434
+ { value: '02', label: '待授权' },
435
+ { value: '05', label: '已核销' },
436
+ { value: '06', label: '待复核' },
437
+ { value: '07', label: '总行授权' },
438
+ { value: '98', label: '已失效' },
439
+ { value: '99', label: '已删除' }
440
+ ]
441
+
442
+ const clientTypeLabels: Record<string, string> = {
443
+ '01': '对公',
444
+ '02': '对私居民',
445
+ '03': '对私非居民'
446
+ }
447
+
448
+ const form = reactive<PositionForecastForm>({
449
+ id: '',
450
+ author: '',
451
+ authorDate: '',
452
+ authorTime: '',
453
+ bigForDate: '2026-03-23',
454
+ bigForTime: '100053',
455
+ checkDate: '',
456
+ checkTime: '',
457
+ clientType: '01',
309
458
  currency: 'CNY',
310
- amount: '100,000,000.00',
311
- valueDate: '',
312
- accountName: '',
313
- planDate: '2026-03-23',
314
- prepareDate: '2026-03-23',
315
- createNo: '183423',
316
- isNegotiate: '否',
317
- origBizNo: '',
318
- linkedBank: 'CIPSCNSHXXX',
319
- receivingBank: '',
320
- receivingBankCode: 'BKCHCNBJXXX',
321
- receivingBankName: '中国银行国际金融有限公司',
322
- emailProduct: '',
323
- multiCurrencyProduct: '',
324
- ftzFlag: false,
325
- reporter: '0601bx',
326
- phone: '13051636/66',
327
- department: 'HGS1:利率及外汇业务处',
459
+ custName: '北京广联顺和科技有限公司SFD(脱敏)',
328
460
  remark: '',
329
- register: '登记(后端周四)',
330
- useStatus: '未使用',
331
- currentStatus: '自行撤区',
332
- bizRegion: '报关系统'
461
+ forecastAmt: '200,000,000.00',
462
+ forecastStatus: '07',
463
+ forecastType: '10',
464
+ interBk: '',
465
+ isOperateFlag: '1',
466
+ isUsedFlg: '0',
467
+ linkMan: '0001tx',
468
+ linkWay: '15631312',
469
+ mailFlag: '',
470
+ mulCurFlag: '',
471
+ nostro: 'CIPSCNSHXXX',
472
+ orgId: '00301',
473
+ oriInnerRefNo: '',
474
+ planDate: '2026-03-23',
475
+ posForecastNo: '',
476
+ priIdCardType: '',
477
+ pubOrgCode: '20489952-1',
478
+ pyeAcctBicName: '中国银行股份有限公司',
479
+ pyeAcctBicSCode: 'BKCHCNBJXXX',
480
+ pyeName: '',
481
+ rtnFlag: '01',
482
+ supervisor: '',
483
+ swiftCode: '',
484
+ usedAmt: '',
485
+ valueDate: '',
486
+ rejectRemark: '',
487
+ ftzFlag: '0',
488
+ businessChannel: '柜面系统'
333
489
  })
334
490
 
335
- const rules: FormRules<ReportForm> = {
336
- customerType: [{ required: true, message: '请选择客户分类', trigger: 'change' }],
337
- orgCode: [{ required: true, message: '请输入对公组织架构代码', trigger: 'blur' }],
338
- customerName: [{ required: true, message: '请输入客户名称', trigger: 'blur' }],
339
- currency: [{ required: true, message: '请选择币种', trigger: 'change' }],
340
- planDate: [{ required: true, message: '请选择计划日期', trigger: 'change' }],
341
- reporter: [{ required: true, message: '请输入报备人', trigger: 'blur' }],
342
- phone: [{ required: true, message: '请输入联系电话', trigger: 'blur' }]
491
+ const clientTypeLabel = computed(() => clientTypeLabels[form.clientType] ?? form.clientType)
492
+
493
+ const rules: FormRules<PositionForecastForm> = {
494
+ valueDate: [{ required: true, message: '起息日不能为空', trigger: 'change' }]
343
495
  }
344
496
 
345
497
  function onFlowLog() {
346
- ElMessage.info('查看操作流水')
498
+ ElMessage.info('操作流水(可对接流水查询)')
347
499
  }
348
500
 
349
- function onSubmit() {
501
+ function onPass() {
350
502
  formRef.value?.validate((valid) => {
351
503
  if (!valid) return
352
- ElMessage.success('提交成功')
504
+ ElMessage.success('通过')
353
505
  })
354
506
  }
355
507
 
356
- function onSave() {
357
- ElMessage.success('保存成功')
508
+ function onReject() {
509
+ ElMessage.warning('驳回:可将「备注(拒绝原因)」写入接口后提交')
358
510
  }
359
511
 
360
- function onClose() {
512
+ function onBack() {
361
513
  router.back()
362
514
  }
363
515
  </script>
364
516
 
365
517
  <style scoped>
366
518
  .position-report-page {
367
- padding: 20px;
519
+ padding: 20px 24px 32px;
520
+ background: #fff;
521
+ }
522
+
523
+ .page-header {
524
+ display: flex;
525
+ align-items: center;
526
+ justify-content: space-between;
527
+ margin-bottom: 8px;
528
+ padding-bottom: 12px;
529
+ border-bottom: 1px solid #e4e7ed;
368
530
  }
369
531
 
370
532
  .title {
533
+ margin: 0;
371
534
  font-size: 18px;
372
- margin-bottom: 20px;
373
- padding-bottom: 12px;
374
- border-bottom: 1px solid #ebeef5;
535
+ font-weight: 600;
536
+ color: #303133;
537
+ }
538
+
539
+ .header-badge {
540
+ width: 12px;
541
+ height: 12px;
542
+ border-radius: 50%;
543
+ background: #c00;
544
+ flex-shrink: 0;
375
545
  }
376
546
 
377
547
  .report-form {
378
- max-width: 1400px;
548
+ max-width: 1440px;
549
+ margin-top: 8px;
379
550
  }
380
551
 
381
552
  .report-form :deep(.el-form-item__label) {
382
553
  font-weight: normal;
383
- white-space: nowrap;
554
+ color: #606266;
555
+ }
556
+
557
+ .currency-amt {
558
+ display: flex;
559
+ gap: 8px;
560
+ width: 100%;
561
+ }
562
+
563
+ .currency-amt__cur {
564
+ width: 150px;
565
+ flex-shrink: 0;
566
+ }
567
+
568
+ .currency-amt__amt {
569
+ flex: 1;
570
+ min-width: 0;
571
+ }
572
+
573
+ /* 第三行第三列:空白占位,撑开与同行表单项相近高度 */
574
+ .form-col--spacer {
575
+ min-height: 51px;
576
+ }
577
+
578
+ .form-col-placeholder {
579
+ width: 100%;
580
+ min-height: 32px;
384
581
  }
385
582
 
386
583
  .footer {
387
584
  display: flex;
388
585
  justify-content: space-between;
389
586
  align-items: center;
390
- margin-top: 24px;
587
+ margin-top: 28px;
391
588
  padding-top: 16px;
392
- border-top: 1px solid #ebeef5;
393
- max-width: 1400px;
589
+ border-top: 1px solid #e4e7ed;
590
+ max-width: 1440px;
394
591
  }
395
592
 
396
593
  .footer-right {
397
594
  display: flex;
398
- gap: 8px;
595
+ gap: 10px;
399
596
  }
400
597
  </style>
@@ -51,7 +51,7 @@ export const routes = [
51
51
  name: 'PositionReport',
52
52
  component: PositionReportPage,
53
53
  meta: {
54
- title: '头寸报备',
54
+ title: '头寸报备信息',
55
55
  showInMenu: true
56
56
  }
57
57
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vue2server7",
3
- "version": "7.0.27",
3
+ "version": "7.0.28",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "dev": "nodemon --watch src --ext ts --exec \"ts-node src/app.ts\"",