vue2-client 1.16.37 → 1.16.39
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/package.json +112 -112
- package/src/assets/img/paymentMethod/icon1.png +0 -0
- package/src/assets/img/paymentMethod/icon2.png +0 -0
- package/src/assets/img/paymentMethod/icon3.png +0 -0
- package/src/assets/img/paymentMethod/icon4.png +0 -0
- package/src/assets/img/paymentMethod/icon5.png +0 -0
- package/src/assets/img/paymentMethod/icon6.png +0 -0
- package/src/base-client/components/common/HIS/HButtons/HButtons.vue +364 -366
- package/src/base-client/components/common/HIS/HForm/HForm.vue +1 -1
- package/src/base-client/components/common/HIS/HFormGroup/HFormGroup.vue +120 -120
- package/src/base-client/components/common/HIS/HFormGroup/index.js +3 -3
- package/src/base-client/components/common/HIS/demo.vue +61 -61
- package/src/base-client/components/common/XReport/XReport.vue +18 -9
- package/src/base-client/components/common/XReport/XReportHospitalizationDemo.vue +45 -0
- package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +824 -824
- package/src/base-client/components/common/XTable/XTable.vue +4 -0
- package/src/base-client/components/his/XCharge/testConfig.js +149 -0
- package/src/base-client/components/his/XHDescriptions/XHDescriptions.vue +61 -19
- package/src/base-client/components/his/XHisEditor/XHisEditor.vue +705 -705
- package/src/base-client/components/his/XList/XList.vue +117 -5
- package/src/base-client/components/his/threeTestOrders/editor.vue +113 -113
- package/src/pages/userInfoDetailManage/ExceptionRecordQuery/index.vue +45 -45
- package/src/router/async/router.map.js +132 -129
- package/src/services/api/common.js +1 -0
@@ -865,6 +865,10 @@ export default {
|
|
865
865
|
if (item.slotType === 'action') {
|
866
866
|
item.fixed = 'right'
|
867
867
|
item.width = 70
|
868
|
+
} else if (item.slotType === 'index') {
|
869
|
+
item.fixed = 'left'
|
870
|
+
} else if (item.slotType === 'fixed') {
|
871
|
+
item.fixed = item.fixedType
|
868
872
|
}
|
869
873
|
// 设置表格宽度
|
870
874
|
if (item.width) {
|
@@ -0,0 +1,149 @@
|
|
1
|
+
// 测试配置 - 用于演示混合支付功能
|
2
|
+
export const testChargeConfig = {
|
3
|
+
"amountFields": [
|
4
|
+
{
|
5
|
+
"field": 'f_amount',
|
6
|
+
"disabled": false,
|
7
|
+
"label": '费用总额'
|
8
|
+
},
|
9
|
+
{
|
10
|
+
"field": 'f_insurance_amount',
|
11
|
+
"disabled": true,
|
12
|
+
"label": '医保支付'
|
13
|
+
},
|
14
|
+
{
|
15
|
+
"field": 'f_self_amount',
|
16
|
+
"disabled": true,
|
17
|
+
"label": '自费金额'
|
18
|
+
},
|
19
|
+
{
|
20
|
+
"field": 'out_of_pocket_amount',
|
21
|
+
"disabled": true,
|
22
|
+
"label": '自付金额'
|
23
|
+
},
|
24
|
+
{
|
25
|
+
"field": 'biscount_amount',
|
26
|
+
"disabled": true,
|
27
|
+
"label": '折扣金额'
|
28
|
+
},
|
29
|
+
{
|
30
|
+
"field": 'billing_amount',
|
31
|
+
"disabled": true,
|
32
|
+
"label": '记账金额'
|
33
|
+
}
|
34
|
+
],
|
35
|
+
"paymentMethods": [
|
36
|
+
{
|
37
|
+
"key": '医保卡',
|
38
|
+
"label": '医保卡'
|
39
|
+
},
|
40
|
+
{
|
41
|
+
"key": '微信/支付宝',
|
42
|
+
"label": '微信/支付宝'
|
43
|
+
},
|
44
|
+
{
|
45
|
+
"key": '银行卡',
|
46
|
+
"label": '银行卡'
|
47
|
+
},
|
48
|
+
{
|
49
|
+
"key": '现金',
|
50
|
+
"label": '现金'
|
51
|
+
}
|
52
|
+
],
|
53
|
+
"bottomFields": [
|
54
|
+
{
|
55
|
+
"field": 'f_balance',
|
56
|
+
"label": '账户余额',
|
57
|
+
"disabled": false
|
58
|
+
},
|
59
|
+
{
|
60
|
+
"field": 'received',
|
61
|
+
"label": '实收',
|
62
|
+
"disabled": false
|
63
|
+
},
|
64
|
+
{
|
65
|
+
"field": 'change',
|
66
|
+
"label": '找零',
|
67
|
+
"disabled": false
|
68
|
+
}
|
69
|
+
],
|
70
|
+
"actionButtons": [
|
71
|
+
{
|
72
|
+
"key": 'charge',
|
73
|
+
"label": '收费',
|
74
|
+
"icon": 'check'
|
75
|
+
},
|
76
|
+
{
|
77
|
+
"key": 'refund',
|
78
|
+
"label": '退费',
|
79
|
+
"icon": 'undo'
|
80
|
+
},
|
81
|
+
{
|
82
|
+
"key": 'print',
|
83
|
+
"label": '打印',
|
84
|
+
"icon": 'printer'
|
85
|
+
}
|
86
|
+
],
|
87
|
+
"enableMixedPayment": true, // 启用混合支付
|
88
|
+
// 可配置事件名,参考 fronImport 风格
|
89
|
+
"eventNames": {
|
90
|
+
"method": 'method',
|
91
|
+
"methods": 'methods',
|
92
|
+
"totalPaymentAmount": 'totalPaymentAmount',
|
93
|
+
"action": 'action'
|
94
|
+
},
|
95
|
+
"dataSourceConfig": 'testChargeLogic'
|
96
|
+
}
|
97
|
+
|
98
|
+
// 单选模式测试配置
|
99
|
+
export const testSingleChargeConfig = {
|
100
|
+
"amountFields": [
|
101
|
+
{
|
102
|
+
"field": 'f_amount',
|
103
|
+
"disabled": false,
|
104
|
+
"label": '费用总额'
|
105
|
+
},
|
106
|
+
{
|
107
|
+
"field": 'f_insurance_amount',
|
108
|
+
"disabled": true,
|
109
|
+
"label": '医保支付'
|
110
|
+
}
|
111
|
+
],
|
112
|
+
"paymentMethods": [
|
113
|
+
{
|
114
|
+
"key": '医保卡',
|
115
|
+
"label": '医保卡'
|
116
|
+
},
|
117
|
+
{
|
118
|
+
"key": '现金',
|
119
|
+
"label": '现金'
|
120
|
+
}
|
121
|
+
],
|
122
|
+
"bottomFields": [
|
123
|
+
{
|
124
|
+
"field": 'received',
|
125
|
+
"label": '实收',
|
126
|
+
"disabled": false
|
127
|
+
},
|
128
|
+
{
|
129
|
+
"field": 'change',
|
130
|
+
"label": '找零',
|
131
|
+
"disabled": false
|
132
|
+
}
|
133
|
+
],
|
134
|
+
"actionButtons": [
|
135
|
+
{
|
136
|
+
"key": 'charge',
|
137
|
+
"label": '收费',
|
138
|
+
"icon": 'check'
|
139
|
+
}
|
140
|
+
],
|
141
|
+
"enableMixedPayment": false, // 禁用混合支付(单选模式)
|
142
|
+
"eventNames": {
|
143
|
+
"method": 'method',
|
144
|
+
"methods": 'methods',
|
145
|
+
"totalPaymentAmount": 'totalPaymentAmount',
|
146
|
+
"action": 'action'
|
147
|
+
},
|
148
|
+
"dataSourceConfig": 'testChargeLogic'
|
149
|
+
}
|
@@ -1,23 +1,23 @@
|
|
1
1
|
<template>
|
2
|
-
<div class="patient-info-descriptions">
|
2
|
+
<div class="patient-info-descriptions" :class="wrapperClassObject">
|
3
3
|
<div class="descriptions-container">
|
4
4
|
<!-- 详情/收起按钮 -->
|
5
5
|
<div v-if="hasMoreItems" class="detail-button-wrapper">
|
6
6
|
<a-button
|
7
|
-
:type="config
|
7
|
+
:type="(config && config.detailsConfig && config.detailsConfig.buttonType) || 'link'"
|
8
8
|
@click="toggleDetails"
|
9
9
|
>
|
10
10
|
<a-icon :type="showAllItems ? 'up' : 'down'" />
|
11
|
-
{{ showAllItems ? '收起' : (config
|
11
|
+
{{ showAllItems ? '收起' : ((config && config.detailsConfig && config.detailsConfig.buttonText) || '详情') }}
|
12
12
|
</a-button>
|
13
13
|
</div>
|
14
14
|
|
15
15
|
<!-- 当有 layout 配置时使用 a-descriptions -->
|
16
|
-
<template v-if="config
|
16
|
+
<template v-if="config && config.layout">
|
17
17
|
<a-descriptions
|
18
18
|
:column="config.layout"
|
19
|
-
:size="config
|
20
|
-
:bordered="config
|
19
|
+
:size="(config && config.style && config.style.size)"
|
20
|
+
:bordered="(config && config.style && config.style.bordered)"
|
21
21
|
layout="horizontal">
|
22
22
|
<template v-if="data">
|
23
23
|
<!-- 显示前N个标签 -->
|
@@ -151,14 +151,34 @@ export default {
|
|
151
151
|
}
|
152
152
|
},
|
153
153
|
computed: {
|
154
|
+
// 动态样式开关(与 HForm 思路一致):布尔开关 + size 派生类
|
155
|
+
wrapperClassObject () {
|
156
|
+
const attrs = this.$attrs || {}
|
157
|
+
const classes = {}
|
158
|
+
|
159
|
+
const booleanStyleKeys = [
|
160
|
+
'query-conditions',
|
161
|
+
'padding-50',
|
162
|
+
'label-text-horizontal',
|
163
|
+
'description'
|
164
|
+
]
|
165
|
+
booleanStyleKeys.forEach(key => {
|
166
|
+
const val = attrs[key]
|
167
|
+
const truthy = val === true || val === '' || val === 'true'
|
168
|
+
if (truthy) classes[`xhdesc-${key}`] = true
|
169
|
+
})
|
170
|
+
const size = attrs.size
|
171
|
+
if (size && typeof size === 'string') classes[`xhdesc-size-${size}`] = true
|
172
|
+
return classes
|
173
|
+
},
|
154
174
|
// 获取详情按钮应该显示在第几个标签后
|
155
175
|
detailsAfterIndex () {
|
156
|
-
return this.config
|
176
|
+
return (this.config && this.config.detailsConfig && this.config.detailsConfig.showAfterIndex) || 999
|
157
177
|
},
|
158
178
|
// 判断是否有更多标签需要显示
|
159
179
|
hasMoreItems () {
|
160
|
-
if (!this.config
|
161
|
-
if (!this.data || !this.config
|
180
|
+
if (!(this.config && this.config.detailsConfig)) return false
|
181
|
+
if (!this.data || !(this.config && this.config.items) || !Array.isArray(this.config.items)) return false
|
162
182
|
const hiddenStartIndex = this.detailsAfterIndex || 0
|
163
183
|
if (hiddenStartIndex >= this.config.items.length) return false
|
164
184
|
for (let i = hiddenStartIndex; i < this.config.items.length; i++) {
|
@@ -171,15 +191,15 @@ export default {
|
|
171
191
|
},
|
172
192
|
// 获取应该显示的标签
|
173
193
|
visibleItems () {
|
174
|
-
if (!this.config
|
175
|
-
if (!this.config
|
194
|
+
if (!(this.config && this.config.items)) return []
|
195
|
+
if (!(this.config && this.config.detailsConfig)) return this.config.items
|
176
196
|
if (this.showAllItems) return this.config.items.slice(0, this.detailsAfterIndex)
|
177
197
|
return this.config.items.slice(0, this.detailsAfterIndex)
|
178
198
|
},
|
179
199
|
// 获取隐藏的标签(保持原有逻辑)
|
180
200
|
hiddenItems () {
|
181
|
-
if (!this.config
|
182
|
-
if (!this.config
|
201
|
+
if (!(this.config && this.config.items)) return []
|
202
|
+
if (!(this.config && this.config.detailsConfig)) return []
|
183
203
|
return this.config.items.slice(this.detailsAfterIndex)
|
184
204
|
}
|
185
205
|
},
|
@@ -192,7 +212,7 @@ export default {
|
|
192
212
|
this.showAllItems = false
|
193
213
|
getConfigByName(data, 'af-his', res => {
|
194
214
|
this.config = res
|
195
|
-
const hiddenConfig = this.config
|
215
|
+
const hiddenConfig = (this.config && this.config.hiddenConfig) || (0 === 1)
|
196
216
|
const parameter = { ...res.parameter, ...this.parameter, ...parameterData }
|
197
217
|
runLogic(res.logicName, parameter, 'af-his').then(result => {
|
198
218
|
if (hiddenConfig) {
|
@@ -272,7 +292,7 @@ export default {
|
|
272
292
|
align-items: center;
|
273
293
|
gap: 8px;
|
274
294
|
color: rgba(0, 0, 0, 0.65);
|
275
|
-
font-size: v-bind('config
|
295
|
+
font-size: v-bind('(config && config.style && config.style.fontSize) || "14px"');
|
276
296
|
white-space: nowrap;
|
277
297
|
}
|
278
298
|
|
@@ -288,7 +308,7 @@ export default {
|
|
288
308
|
display: inline-flex;
|
289
309
|
align-items: center;
|
290
310
|
margin-left: 4px;
|
291
|
-
font-size: v-bind('config
|
311
|
+
font-size: v-bind('(config && config.style && config.style.fontSize) || "14px"');
|
292
312
|
color: rgba(0, 0, 0, 0.85);
|
293
313
|
max-width: 300px;
|
294
314
|
overflow: hidden;
|
@@ -336,17 +356,17 @@ export default {
|
|
336
356
|
color: rgba(0, 0, 0, 0.65);
|
337
357
|
padding: 0 !important;
|
338
358
|
margin: 0 !important;
|
339
|
-
font-size: v-bind('config
|
359
|
+
font-size: v-bind('(config && config.style && config.style.fontSize) || "14px"');
|
340
360
|
display: inline-flex !important;
|
341
361
|
align-items: center !important;
|
342
362
|
white-space: nowrap !important;
|
343
|
-
min-width: v-bind('config
|
363
|
+
min-width: v-bind('(config && config.style && config.style.labelWidth) || "80px"');
|
344
364
|
justify-content: flex-start;
|
345
365
|
padding-right: 2px !important;
|
346
366
|
}
|
347
367
|
|
348
368
|
:deep(.ant-descriptions-item-content) {
|
349
|
-
font-size: v-bind('config
|
369
|
+
font-size: v-bind('(config && config.style && config.style.fontSize) || "14px"');
|
350
370
|
display: inline-flex !important;
|
351
371
|
align-items: center !important;
|
352
372
|
padding: 0 !important;
|
@@ -426,4 +446,26 @@ export default {
|
|
426
446
|
height: 0;
|
427
447
|
border-bottom: 1px dashed rgba(0, 0, 0, 0.15);
|
428
448
|
}
|
449
|
+
/* 加边框 */
|
450
|
+
.xhdesc-description {
|
451
|
+
padding: 4px 4px 4px 4px;
|
452
|
+
|
453
|
+
/* 作用域内 *patient-info-descriptions */
|
454
|
+
&.patient-info-descriptions,
|
455
|
+
.patient-info-descriptions {
|
456
|
+
border: 1px solid #E5E9F0;
|
457
|
+
border-radius: 6px;
|
458
|
+
padding: 6.5px 12px;
|
459
|
+
|
460
|
+
/* *ant-btn-link */
|
461
|
+
:deep(.ant-btn-link) {
|
462
|
+
border: none;
|
463
|
+
}
|
464
|
+
|
465
|
+
/* *ant-descriptions-item-content */
|
466
|
+
:deep(.ant-descriptions-item-content) {
|
467
|
+
font-weight: bold;
|
468
|
+
}
|
469
|
+
}
|
470
|
+
}
|
429
471
|
</style>
|