vue2-client 1.16.13 → 1.16.15

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,238 +1,569 @@
1
- <template>
2
- <div class="xcharge-wrapper">
3
- <!-- 顶部金额信息区(表单行风格,宽度固定,每行4个) -->
4
- <a-row :gutter="0" class="amount-info">
5
- <a-col v-for="item in config.amountFields" :key="item.field" :span="6" class="form-row">
6
- <label class="form-label">{{ item.label }}</label>
7
- <a-input
8
- v-model="data[item.field]"
9
- :value="data[item.field]"
10
- :disabled="item.disabled"
11
- class="form-input"
12
- />
13
- </a-col>
14
- </a-row>
15
-
16
- <a-divider/>
17
-
18
- <!-- 支付方式选择区 -->
19
- <div class="payment-methods">
20
- <a-button
21
- v-for="method in config.paymentMethods"
22
- :key="method.key"
23
- :class="['payment-btn', { active: selectedMethod === method.key }]"
24
- @click="selectMethod(method.key)"
25
- >
26
- <div>
27
- <div class="pay-label">{{ method.label }}</div>
28
- </div>
29
- </a-button>
30
- </div>
31
-
32
- <a-divider/>
33
-
34
- <!-- 底部金额和操作区(表单行风格,宽度固定) -->
35
- <a-row :gutter="0" class="bottom-info">
36
- <a-col v-for="item in config.bottomFields" :key="item.field" :span="8" class="form-row">
37
- <label class="form-label">{{ item.label }}</label>
38
- <a-input
39
- v-model="data[item.field]"
40
- :disabled="item.disabled"
41
- class="form-input"
42
- @change="bottomFieldsChange($event,item)"
43
- />
44
- </a-col>
45
- </a-row>
46
- <a-row class="actions-row" justify="center">
47
- <a-button
48
- v-for="btn in config.actionButtons"
49
- :key="btn.key"
50
- @click="handleAction(btn.key)"
51
- :icon="btn.icon"
52
- style="margin: 0 8px"
53
- >
54
- {{ btn.label }}
55
- </a-button>
56
- </a-row>
57
- </div>
58
- </template>
59
-
60
- <script>
61
- import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
62
-
63
- export default {
64
- name: 'XCharge',
65
- props: {
66
- queryParamsName: {
67
- type: String,
68
- default: ''
69
- },
70
- parameter: {
71
- type: Object,
72
- default: () => ({})
73
- }
74
- },
75
- data () {
76
- return {
77
- config: {
78
- amountFields: [],
79
- paymentMethods: [],
80
- bottomFields: [],
81
- actionButtons: []
82
- },
83
- data: {},
84
- selectedMethod: '',
85
- }
86
- },
87
- created () {
88
- this.getConfig(this.queryParamsName, {})
89
- },
90
- methods: {
91
- selectMethod (value) {
92
- this.selectedMethod = value
93
- this.data.selectedMethod = value
94
- this.$emit('method', value)
95
- },
96
- getConfig (configName, param) {
97
- getConfigByName(configName, 'af-his', res => {
98
- this.config = res
99
- this.selectedMethod = res.paymentMethods?.[0]?.key || ''
100
- // 初始化数据
101
- runLogic(res.dataSourceConfig, param, 'af-his').then(resData => {
102
- this.data = { ...resData }
103
- })
104
- })
105
- },
106
- refreshList (param) {
107
- this.getConfig(this.queryParamsName, param)
108
- },
109
- handleAction (key) {
110
- console.warn('选择的的方法 ====》' + key)
111
- console.warn('页面数据 ====》' + JSON.stringify(this.data))
112
- console.warn('选择的支付方式 ====》' + this.selectedMethod)
113
- this.$emit('action', { key, data: this.data, method: this.selectedMethod })
114
- },
115
- bottomFieldsChange (e, item) {
116
- if (item.changeEventName && this.$listeners[item.changeEventName]) {
117
- this.$emit(item.changeEventName, e, item)
118
- }
119
- }
120
- },
121
- watch: {
122
- configName (val) {
123
- this.getConfig()
124
- }
125
- }
126
- }
127
- </script>
128
-
129
- <style scoped>
130
- .xcharge-wrapper {
131
- background: #fff;
132
- padding: 24px;
133
- border-radius: 8px;
134
- }
135
-
136
- .amount-info {
137
- margin-bottom: 20px;
138
- display: flex;
139
- flex-wrap: wrap;
140
- row-gap: 16px;
141
- }
142
-
143
- .form-row {
144
- display: flex;
145
- align-items: center;
146
- margin-bottom: 30px;
147
- }
148
-
149
- .form-label {
150
- width: 100px;
151
- font-size: 18px;
152
- color: #333;
153
- font-weight: bold;
154
- text-align: left;
155
- letter-spacing: 1px;
156
- flex-shrink: 0;
157
- }
158
-
159
- .form-input {
160
- width: 180px;
161
- height: 40px;
162
- font-size: 18px;
163
- border-radius: 8px;
164
- border: 1.5px solid #dcdfe6;
165
- background: #fff;
166
- color: #333;
167
- padding-left: 12px;
168
- }
169
-
170
- .form-input[disabled] {
171
- color: #999;
172
- background: #f5f5f5;
173
- }
174
-
175
- .payment-methods {
176
- display: flex;
177
- justify-content: space-around;
178
- margin: 32px 0;
179
- }
180
-
181
- .payment-btn {
182
- width: 180px;
183
- height: 120px;
184
- margin: 0 16px;
185
- display: flex;
186
- align-items: center;
187
- justify-content: center;
188
- background: #f7f8fa;
189
- border: 1.5px solid #e4e7ed;
190
- color: #333;
191
- font-weight: bold;
192
- font-size: 24px;
193
- transition: all 0.2s;
194
- box-shadow: none;
195
- border-radius: 12px;
196
- }
197
-
198
- .payment-btn.active {
199
- background: #409eff;
200
- border-color: #409eff;
201
- color: #fff;
202
- }
203
-
204
- .pay-label {
205
- font-size: 24px;
206
- font-weight: bold;
207
- }
208
-
209
- .pay-shortcut {
210
- font-size: 16px;
211
- color: #888;
212
- }
213
-
214
- .bottom-info {
215
- margin-top: 24px;
216
- display: flex;
217
- flex-wrap: wrap;
218
- row-gap: 16px;
219
- }
220
-
221
- .actions-row {
222
- margin-top: 32px;
223
- display: flex;
224
- justify-content: center;
225
- }
226
-
227
- .actions-row .ant-btn {
228
- margin: 0 8px;
229
- background: #444;
230
- color: #fff;
231
- border-radius: 6px;
232
- border: none;
233
- font-size: 16px;
234
- font-weight: 500;
235
- height: 38px;
236
- min-width: 90px;
237
- }
238
- </style>
1
+ <template>
2
+ <div class="xcharge-wrapper">
3
+ <!-- 顶部金额信息区(表单行风格,宽度固定,每行4个) -->
4
+ <a-row :gutter="0" class="amount-info">
5
+ <a-col v-for="item in config.amountFields" :key="item.field" :span="6" class="form-row">
6
+ <label class="form-label">{{ item.label }}</label>
7
+ <a-input
8
+ v-model="data[item.field]"
9
+ :value="data[item.field]"
10
+ :disabled="item.disabled"
11
+ class="form-input"
12
+ />
13
+ </a-col>
14
+ </a-row>
15
+
16
+ <a-divider/>
17
+
18
+ <!-- 支付方式选择区 -->
19
+ <div class="payment-methods">
20
+ <a-button
21
+ v-for="method in config.paymentMethods"
22
+ :key="method.key"
23
+ :class="['payment-btn', {
24
+ active: isMixedPaymentEnabled ? selectedMethods.includes(method.key) : selectedMethod === method.key
25
+ }]"
26
+ @click="isMixedPaymentEnabled ? toggleMethod(method.key) : selectMethod(method.key)"
27
+ >
28
+ <div>
29
+ <div class="pay-label">{{ method.label }}</div>
30
+ <div v-if="isMixedPaymentEnabled && selectedMethods.includes(method.key)" class="selected-indicator">✓</div>
31
+ </div>
32
+ </a-button>
33
+ </div>
34
+
35
+ <a-divider/>
36
+
37
+ <!-- 支付详情(同一行展示) -->
38
+ <div v-if="(isMixedPaymentEnabled && selectedMethods.length > 0) || (!isMixedPaymentEnabled && selectedMethod)" class="mixed-payment-section simple">
39
+ <!-- 混合支付:所有金额输入在同一行展示 -->
40
+ <div v-if="isMixedPaymentEnabled" class="payment-operation-row">
41
+ <div class="payment-inline">
42
+ <div v-for="method in selectedMethods" :key="method" class="inline-field">
43
+ <label class="form-label">{{ getAmountLabel(method) }}</label>
44
+ <a-input
45
+ v-model="paymentAmounts[method]"
46
+ type="number"
47
+ placeholder="请输入金额"
48
+ class="form-input"
49
+ @change="updatePaymentAmount(method, $event)"
50
+ />
51
+ </div>
52
+ </div>
53
+ </div>
54
+ <!-- 单一支付:同一行展示一个输入 -->
55
+ <div v-if="!isMixedPaymentEnabled && selectedMethod" class="payment-operation-row">
56
+ <div class="payment-inline">
57
+ <div class="inline-field">
58
+ <label class="form-label">{{ getAmountLabel(selectedMethod) }}</label>
59
+ <a-input
60
+ v-model="paymentAmounts[selectedMethod]"
61
+ type="number"
62
+ placeholder="请输入金额"
63
+ class="form-input"
64
+ @change="updatePaymentAmount(selectedMethod, $event)"
65
+ />
66
+ </div>
67
+ </div>
68
+ </div>
69
+ </div>
70
+
71
+ <a-divider/>
72
+
73
+ <!-- 底部金额和操作区(表单行风格,宽度固定) -->
74
+ <a-row :gutter="0" class="bottom-info">
75
+ <a-col v-for="item in config.bottomFields" :key="item.field" :span="8" class="form-row">
76
+ <label class="form-label">{{ item.label }}</label>
77
+ <a-input
78
+ v-model="data[item.field]"
79
+ :disabled="item.disabled"
80
+ class="form-input"
81
+ @change="bottomFieldsChange($event,item)"
82
+ />
83
+ </a-col>
84
+ </a-row>
85
+ <a-row class="actions-row" justify="center">
86
+ <a-button
87
+ v-for="btn in config.actionButtons"
88
+ :key="btn.key"
89
+ @click="handleAction(btn.key)"
90
+ :icon="btn.icon"
91
+ style="margin: 0 8px"
92
+ >
93
+ {{ btn.label }}
94
+ </a-button>
95
+ </a-row>
96
+ </div>
97
+ </template>
98
+
99
+ <script>
100
+ import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
101
+
102
+ export default {
103
+ name: 'XCharge',
104
+ props: {
105
+ queryParamsName: {
106
+ type: String,
107
+ default: ''
108
+ },
109
+ parameter: {
110
+ type: Object,
111
+ default: () => ({})
112
+ }
113
+ },
114
+ data () {
115
+ return {
116
+ config: {
117
+ amountFields: [],
118
+ paymentMethods: [],
119
+ bottomFields: [],
120
+ actionButtons: [],
121
+ enableMixedPayment: false // 默认关闭混合支付
122
+ },
123
+ data: {},
124
+ selectedMethod: '', // 保持向后兼容
125
+ selectedMethods: [], // 新增:支持多选支付方式
126
+ paymentAmounts: {}, // 各支付方式的金额
127
+ // 事件名配置(可通过配置覆盖)
128
+ eventNames: {
129
+ method: 'method',
130
+ methods: 'methods',
131
+ totalPaymentAmount: 'totalPaymentAmount',
132
+ action: 'action',
133
+ // 新增:单个支付方式金额变更事件
134
+ paymentAmountChange: 'paymentAmountChange'
135
+ },
136
+ hasInitialized: false
137
+ }
138
+ },
139
+ emits: ['init'],
140
+ computed: {
141
+ // 安全访问混合支付配置
142
+ isMixedPaymentEnabled () {
143
+ return this.config && this.config.enableMixedPayment === true
144
+ },
145
+ // 预计算:金额标签映射(仅基于 paymentMethods 配置)
146
+ amountLabelMap () {
147
+ const map = {}
148
+ const methods = Array.isArray(this.config.paymentMethods) ? this.config.paymentMethods : []
149
+ // 先用 methods 构建默认与自定义
150
+ methods.forEach(m => {
151
+ const key = m && m.key
152
+ const label = m && m.label
153
+ if (!key) return
154
+ map[key] = m && m.amountLabel ? m.amountLabel : `${label || key}金额`
155
+ })
156
+ return map
157
+ }
158
+ },
159
+ created () {
160
+ const hasParam = this.parameter && Object.keys(this.parameter).length > 0
161
+ // 始终加载组件配置;仅当有参数时,getConfig 内部才会拉取数据
162
+ this.getConfig(this.queryParamsName, this.parameter || {})
163
+ if (hasParam) this.hasInitialized = true
164
+ },
165
+ methods: {
166
+ selectMethod (value) {
167
+ this.selectedMethod = value
168
+ this.data.selectedMethod = value
169
+ // 单一模式下初始化对应的支付数据
170
+ if (!this.isMixedPaymentEnabled && value) {
171
+ if (!this.paymentAmounts[value]) this.initPaymentData(value)
172
+ }
173
+ this.$emit(this.eventNames.method, value)
174
+ },
175
+ // 新增:切换支付方式选择(支持多选)
176
+ toggleMethod (methodKey) {
177
+ const index = this.selectedMethods.indexOf(methodKey)
178
+ if (index > -1) {
179
+ // 如果已选中,则移除
180
+ this.selectedMethods.splice(index, 1)
181
+ this.removePaymentData(methodKey)
182
+ } else {
183
+ // 如果未选中,则添加
184
+ this.selectedMethods.push(methodKey)
185
+ this.initPaymentData(methodKey)
186
+ }
187
+
188
+ // 更新选中状态
189
+ this.selectedMethod = this.selectedMethods.length > 0 ? this.selectedMethods[0] : ''
190
+ this.data.selectedMethods = [...this.selectedMethods]
191
+
192
+ this.$emit(this.eventNames.methods, this.selectedMethods)
193
+ this.$emit(this.eventNames.method, this.selectedMethod) // 保持向后兼容
194
+ },
195
+ // 新增:移除支付方式
196
+ removeMethod (methodKey) {
197
+ const index = this.selectedMethods.indexOf(methodKey)
198
+ if (index > -1) {
199
+ this.selectedMethods.splice(index, 1)
200
+ this.removePaymentData(methodKey)
201
+ this.$emit(this.eventNames.methods, this.selectedMethods)
202
+ }
203
+ },
204
+ // 新增:初始化支付数据
205
+ initPaymentData (methodKey) {
206
+ this.$set(this.paymentAmounts, methodKey, '')
207
+ if (!this.data.paymentAmounts || typeof this.data.paymentAmounts !== 'object') this.$set(this.data, 'paymentAmounts', {})
208
+ this.$set(this.data.paymentAmounts, methodKey, '')
209
+ },
210
+ // 新增:移除支付数据
211
+ removePaymentData (methodKey) {
212
+ this.$delete(this.paymentAmounts, methodKey)
213
+ if (this.data && this.data.paymentAmounts) this.$delete(this.data.paymentAmounts, methodKey)
214
+ },
215
+ // 新增:获取支付方式标签
216
+ getMethodLabel (methodKey) {
217
+ const method = this.config.paymentMethods.find(m => m.key === methodKey)
218
+ return method ? method.label : methodKey
219
+ },
220
+ // 获取金额字段展示名(配置映射 / paymentMethods.amountLabel / 默认「{方式}金额」)
221
+ getAmountLabel (methodKey) {
222
+ return (this.amountLabelMap && this.amountLabelMap[methodKey]) || `${methodKey}金额`
223
+ },
224
+ // 新增:获取支付金额字段标签(优先配置映射,其次方法自带 amountLabel,最后回退)
225
+ getAmountLabel (methodKey) {
226
+ const mapped = (this.config.paymentAmountLabels && this.config.paymentAmountLabels[methodKey]) || ''
227
+ if (mapped) return mapped
228
+ const method = this.config.paymentMethods.find(m => m.key === methodKey)
229
+ if (method && method.amountLabel) return method.amountLabel
230
+ return `${method ? method.label : methodKey}金额`
231
+ },
232
+ // 新增:更新支付金额
233
+ updatePaymentAmount (methodKey, event) {
234
+ const amount = parseFloat(event.target.value) || 0
235
+ this.$set(this.paymentAmounts, methodKey, amount)
236
+ if (!this.data.paymentAmounts || typeof this.data.paymentAmounts !== 'object') this.$set(this.data, 'paymentAmounts', {})
237
+ this.$set(this.data.paymentAmounts, methodKey, amount)
238
+ this.calculateTotalPayment()
239
+ // 单个方式金额变更事件,向父组件上抛
240
+ this.$emit(this.eventNames.paymentAmountChange, { method: methodKey, amount })
241
+ },
242
+ // 新增:计算总支付金额
243
+ calculateTotalPayment () {
244
+ const total = Object.values(this.paymentAmounts).reduce((sum, amount) => {
245
+ return sum + (parseFloat(amount) || 0)
246
+ }, 0)
247
+ this.data.totalPaymentAmount = total
248
+ this.$emit(this.eventNames.totalPaymentAmount, total)
249
+ },
250
+ getConfig (configName, param) {
251
+ if (configName) {
252
+ console.log('configName', configName)
253
+ getConfigByName(configName, 'af-his', res => {
254
+ console.log('res', res)
255
+ // 检查是否有错误
256
+ if (res && res.ERROR) {
257
+ console.warn('配置获取失败:', res.ERROR)
258
+ return
259
+ }
260
+ this.config = {
261
+ amountFields: res.amountFields || [],
262
+ paymentMethods: res.paymentMethods || [],
263
+ bottomFields: res.bottomFields || [],
264
+ actionButtons: res.actionButtons || [],
265
+ enableMixedPayment: res.enableMixedPayment === true
266
+ }
267
+ // 事件名覆盖(fronImport风格)
268
+ if (res.eventNames && typeof res.eventNames === 'object') {
269
+ this.eventNames = { ...this.eventNames, ...res.eventNames }
270
+ }
271
+ this.selectedMethod = res.paymentMethods?.[0]?.key || ''
272
+
273
+ // 如果启用混合支付,初始化选中状态
274
+ if (this.isMixedPaymentEnabled && res.paymentMethods?.length > 0) {
275
+ this.selectedMethods = [res.paymentMethods[0].key]
276
+ this.initPaymentData(res.paymentMethods[0].key)
277
+ } else if (!this.isMixedPaymentEnabled && this.selectedMethod) {
278
+ // 单一支付初始化
279
+ this.initPaymentData(this.selectedMethod)
280
+ }
281
+
282
+ // 初始化数据:仅当传入了有效 param 时才拉取数据
283
+ const hasParam = param && Object.keys(param || {}).length > 0
284
+ if (hasParam && res.dataSourceConfig) {
285
+ runLogic(res.dataSourceConfig, param, 'af-his').then(resData => {
286
+ this.data = { ...resData }
287
+ }).catch(error => {
288
+ console.warn('数据获取失败(保持现有数据):', error)
289
+ })
290
+ }
291
+ })
292
+ }
293
+ },
294
+ refreshList (param) {
295
+ this.getConfig(this.queryParamsName, param)
296
+ },
297
+ async init (conditionData) {
298
+ if(conditionData.data){
299
+ this.data = { ...conditionData.data }
300
+ }
301
+ if(conditionData.params){
302
+ await this.getConfig(this.queryParamsName, conditionData.params)
303
+ }
304
+ this.hasInitialized = true
305
+ },
306
+ // 使用默认数据
307
+ useDefaultData () {
308
+ this.data = {
309
+ f_amount: 100,
310
+ f_insurance_amount: 0,
311
+ f_self_amount: 100,
312
+ f_balance: 100,
313
+ out_of_pocket_amount: 0,
314
+ biscount_amount: 0,
315
+ billing_amount: 0,
316
+ received: 100,
317
+ change: 0
318
+ }
319
+ },
320
+ handleAction (key) {
321
+ console.warn('选择的的方法 ====》' + key)
322
+ console.warn('页面数据 ====》' + JSON.stringify(this.data))
323
+ console.warn('选择的支付方式 ====》' + this.selectedMethod)
324
+
325
+ if (this.isMixedPaymentEnabled) {
326
+ console.warn('混合支付方式 ====》' + JSON.stringify(this.selectedMethods))
327
+ console.warn('支付详情 ====》' + JSON.stringify({ amounts: this.paymentAmounts }))
328
+ }
329
+
330
+ const actionData = {
331
+ key,
332
+ data: this.data,
333
+ method: this.selectedMethod,
334
+ // 统一返回支付详情,单一模式时 selectedMethods 仅含一个
335
+ mixedPayment: {
336
+ selectedMethods: this.isMixedPaymentEnabled ? this.selectedMethods : (this.selectedMethod ? [this.selectedMethod] : []),
337
+ paymentAmounts: this.paymentAmounts,
338
+ totalPaymentAmount: this.data.totalPaymentAmount || 0
339
+ }
340
+ }
341
+
342
+ this.$emit(this.eventNames.action, actionData)
343
+ },
344
+ bottomFieldsChange (e, item) {
345
+ if (item.changeEventName && this.$listeners[item.changeEventName]) {
346
+ this.$emit(item.changeEventName, e, item)
347
+ }
348
+ }
349
+ },
350
+ watch: {
351
+ configName (val) {
352
+ this.getConfig()
353
+ }
354
+ }
355
+ }
356
+ </script>
357
+
358
+ <style scoped>
359
+ .xcharge-wrapper {
360
+ background: #fff;
361
+ padding: 24px;
362
+ border-radius: 8px;
363
+ }
364
+
365
+ .amount-info {
366
+ margin-bottom: 20px;
367
+ display: flex;
368
+ flex-wrap: wrap;
369
+ row-gap: 16px;
370
+ }
371
+
372
+ .form-row {
373
+ display: flex;
374
+ align-items: center;
375
+ margin-bottom: 30px;
376
+ }
377
+
378
+ .form-label {
379
+ width: 100px;
380
+ font-size: 18px;
381
+ color: #333;
382
+ font-weight: bold;
383
+ text-align: left;
384
+ letter-spacing: 1px;
385
+ flex-shrink: 0;
386
+ }
387
+
388
+ .form-input {
389
+ width: 180px;
390
+ height: 40px;
391
+ font-size: 18px;
392
+ border-radius: 8px;
393
+ border: 1.5px solid #dcdfe6;
394
+ background: #fff;
395
+ color: #333;
396
+ padding-left: 12px;
397
+ }
398
+
399
+ .form-input[disabled] {
400
+ color: #999;
401
+ background: #f5f5f5;
402
+ }
403
+
404
+ .payment-methods {
405
+ display: flex;
406
+ justify-content: space-around;
407
+ margin: 32px 0;
408
+ }
409
+
410
+ .payment-btn {
411
+ width: 180px;
412
+ height: 120px;
413
+ margin: 0 16px;
414
+ display: flex;
415
+ align-items: center;
416
+ justify-content: center;
417
+ background: #f7f8fa;
418
+ border: 1.5px solid #e4e7ed;
419
+ color: #333;
420
+ font-weight: bold;
421
+ font-size: 24px;
422
+ transition: all 0.2s;
423
+ box-shadow: none;
424
+ border-radius: 12px;
425
+ }
426
+
427
+ .payment-btn.active {
428
+ background: #409eff;
429
+ border-color: #409eff;
430
+ color: #fff;
431
+ }
432
+
433
+ .pay-label {
434
+ font-size: 24px;
435
+ font-weight: bold;
436
+ }
437
+
438
+ .selected-indicator {
439
+ position: absolute;
440
+ top: 8px;
441
+ right: 8px;
442
+ background: #52c41a;
443
+ color: #fff;
444
+ border-radius: 50%;
445
+ width: 24px;
446
+ height: 24px;
447
+ display: flex;
448
+ align-items: center;
449
+ justify-content: center;
450
+ font-size: 14px;
451
+ font-weight: bold;
452
+ }
453
+
454
+ .mixed-payment-section {
455
+ margin: 24px 0;
456
+ padding: 20px;
457
+ background: #f8f9fa;
458
+ border-radius: 8px;
459
+ border: 1px solid #e9ecef;
460
+ }
461
+
462
+ .mixed-payment-section.simple {
463
+ padding: 0;
464
+ background: transparent;
465
+ border: none;
466
+ }
467
+
468
+ .mixed-payment-section.simple .payment-operation-row {
469
+ border: none;
470
+ background: transparent;
471
+ padding: 0;
472
+ margin-bottom: 12px;
473
+ }
474
+
475
+ .section-title {
476
+ margin: 0 0 20px 0;
477
+ font-size: 18px;
478
+ font-weight: bold;
479
+ color: #333;
480
+ text-align: center;
481
+ }
482
+
483
+ .payment-operation-row {
484
+ margin-bottom: 20px;
485
+ padding: 16px;
486
+ background: #fff;
487
+ border-radius: 6px;
488
+ border: 1px solid #d9d9d9;
489
+ }
490
+
491
+ .payment-method-header {
492
+ display: flex;
493
+ justify-content: space-between;
494
+ align-items: center;
495
+ margin-bottom: 16px;
496
+ padding-bottom: 8px;
497
+ border-bottom: 1px solid #f0f0f0;
498
+ }
499
+
500
+ .method-name {
501
+ font-size: 16px;
502
+ font-weight: bold;
503
+ color: #1890ff;
504
+ }
505
+
506
+ .remove-btn {
507
+ color: #ff4d4f;
508
+ padding: 0;
509
+ height: auto;
510
+ }
511
+
512
+ .remove-btn:hover {
513
+ color: #ff7875;
514
+ }
515
+
516
+ .payment-fields {
517
+ margin-top: 12px;
518
+ }
519
+
520
+ .payment-inline {
521
+ display: flex;
522
+ flex-wrap: nowrap;
523
+ align-items: center;
524
+ justify-content: center;
525
+ column-gap: 32px;
526
+ overflow-x: auto;
527
+ }
528
+
529
+ .inline-field {
530
+ display: inline-flex;
531
+ align-items: center;
532
+ column-gap: 16px;
533
+ white-space: nowrap;
534
+ }
535
+
536
+ .payment-inline .form-label {
537
+ width: auto;
538
+ }
539
+
540
+ .pay-shortcut {
541
+ font-size: 16px;
542
+ color: #888;
543
+ }
544
+
545
+ .bottom-info {
546
+ margin-top: 24px;
547
+ display: flex;
548
+ flex-wrap: wrap;
549
+ row-gap: 16px;
550
+ }
551
+
552
+ .actions-row {
553
+ margin-top: 32px;
554
+ display: flex;
555
+ justify-content: center;
556
+ }
557
+
558
+ .actions-row .ant-btn {
559
+ margin: 0 8px;
560
+ background: #444;
561
+ color: #fff;
562
+ border-radius: 6px;
563
+ border: none;
564
+ font-size: 16px;
565
+ font-weight: 500;
566
+ height: 38px;
567
+ min-width: 90px;
568
+ }
569
+ </style>