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.
Files changed (24) hide show
  1. package/package.json +112 -112
  2. package/src/assets/img/paymentMethod/icon1.png +0 -0
  3. package/src/assets/img/paymentMethod/icon2.png +0 -0
  4. package/src/assets/img/paymentMethod/icon3.png +0 -0
  5. package/src/assets/img/paymentMethod/icon4.png +0 -0
  6. package/src/assets/img/paymentMethod/icon5.png +0 -0
  7. package/src/assets/img/paymentMethod/icon6.png +0 -0
  8. package/src/base-client/components/common/HIS/HButtons/HButtons.vue +364 -366
  9. package/src/base-client/components/common/HIS/HForm/HForm.vue +1 -1
  10. package/src/base-client/components/common/HIS/HFormGroup/HFormGroup.vue +120 -120
  11. package/src/base-client/components/common/HIS/HFormGroup/index.js +3 -3
  12. package/src/base-client/components/common/HIS/demo.vue +61 -61
  13. package/src/base-client/components/common/XReport/XReport.vue +18 -9
  14. package/src/base-client/components/common/XReport/XReportHospitalizationDemo.vue +45 -0
  15. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +824 -824
  16. package/src/base-client/components/common/XTable/XTable.vue +4 -0
  17. package/src/base-client/components/his/XCharge/testConfig.js +149 -0
  18. package/src/base-client/components/his/XHDescriptions/XHDescriptions.vue +61 -19
  19. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +705 -705
  20. package/src/base-client/components/his/XList/XList.vue +117 -5
  21. package/src/base-client/components/his/threeTestOrders/editor.vue +113 -113
  22. package/src/pages/userInfoDetailManage/ExceptionRecordQuery/index.vue +45 -45
  23. package/src/router/async/router.map.js +132 -129
  24. 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?.detailsConfig?.buttonType || 'link'"
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?.detailsConfig?.buttonText || '详情') }}
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?.layout">
16
+ <template v-if="config && config.layout">
17
17
  <a-descriptions
18
18
  :column="config.layout"
19
- :size="config?.style?.size"
20
- :bordered="config?.style?.bordered"
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?.detailsConfig?.showAfterIndex || 999
176
+ return (this.config && this.config.detailsConfig && this.config.detailsConfig.showAfterIndex) || 999
157
177
  },
158
178
  // 判断是否有更多标签需要显示
159
179
  hasMoreItems () {
160
- if (!this.config?.detailsConfig) return false
161
- if (!this.data || !this.config?.items || !Array.isArray(this.config.items)) return false
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?.items) return []
175
- if (!this.config?.detailsConfig) return this.config.items
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?.items) return []
182
- if (!this.config?.detailsConfig) return []
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?.hiddenConfig ?? 0 === 1
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?.style?.fontSize');
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?.style?.fontSize');
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?.style?.fontSize || "14px"');
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?.style?.labelWidth || "80px"');
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?.style?.fontSize || "14px"');
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>