vue2-client 1.16.86 → 1.16.87

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 (40) 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/assets/svg/female.svg +1 -1
  9. package/src/assets/svg/male.svg +1 -1
  10. package/src/base-client/components/common/HIS/HButtons/HButtons.vue +412 -381
  11. package/src/base-client/components/common/HIS/HForm/HForm.vue +506 -492
  12. package/src/base-client/components/common/HIS/HFormGroup/index.js +3 -3
  13. package/src/base-client/components/common/HIS/HFormTable/HFormTable.vue +5 -0
  14. package/src/base-client/components/common/HIS/HTab/HTab.vue +443 -443
  15. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +8 -0
  16. package/src/base-client/components/common/XCollapse/XCollapse.vue +833 -833
  17. package/src/base-client/components/common/XDatePicker/index.vue +16 -4
  18. package/src/base-client/components/common/XForm/XFormItem.vue +6 -0
  19. package/src/base-client/components/common/XFormTable/XFormTable.vue +6 -0
  20. package/src/base-client/components/common/XInput/XInput.vue +194 -194
  21. package/src/base-client/components/common/XReport/XReportHospitalizationDemo.vue +45 -0
  22. package/src/base-client/components/common/XTable/XTable.vue +1618 -1610
  23. package/src/base-client/components/common/XTimeline/XTimeline.vue +478 -478
  24. package/src/base-client/components/his/XCheckbox/XCheckbox.vue +194 -181
  25. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +705 -705
  26. package/src/base-client/components/his/XIcon/XIcon.vue +73 -73
  27. package/src/base-client/components/his/XIcon/index.js +3 -3
  28. package/src/base-client/components/his/XIcon/index.md +177 -177
  29. package/src/base-client/components/his/XImportExcelButton/XImportExcelButton.vue +46 -2
  30. package/src/base-client/components/his/XList/XList.vue +829 -829
  31. package/src/base-client/components/his/XRadio/XRadio.vue +389 -389
  32. package/src/base-client/components/his/XSimpleTable/XSimpleTable.vue +159 -159
  33. package/src/base-client/components/his/XTimeSelect/XTimeSelect.vue +306 -306
  34. package/src/base-client/components/his/XTitle/XTitle.vue +274 -274
  35. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +341 -341
  36. package/src/base-client/components/his/threeTestOrders/editor.vue +113 -113
  37. package/src/pages/userInfoDetailManage/ExceptionRecordQuery/index.vue +45 -45
  38. package/src-base-client/components/his/XCharge/XCharge.vue +0 -0
  39. package/src-base-client/components/common/HIS/HForm/HForm.vue +0 -347
  40. /package/src-base-client/components/{common/XCollapse/XCollapse.vue → his/XCharge/README.md} +0 -0
@@ -40,6 +40,11 @@ export default {
40
40
  type: Boolean,
41
41
  default: false,
42
42
  },
43
+ // 是否启用时间弹出到最外层
44
+ enablePopupToBody: {
45
+ type: Boolean,
46
+ default: false
47
+ },
43
48
  },
44
49
  model: {
45
50
  prop: 'value',
@@ -183,6 +188,9 @@ export default {
183
188
  moment(value[1]).format(this.formatType),
184
189
  ]
185
190
  },
191
+ getBodyContainer (triggerNode) {
192
+ return document.body
193
+ }
186
194
  },
187
195
  }
188
196
  </script>
@@ -195,7 +203,8 @@ export default {
195
203
  (attr?.queryType !== 'BETWEEN' || mode !== '查询')) ||
196
204
  (['rangePicker'].includes(attr.type) && mode !== '查询')
197
205
  "
198
- :getCalendarContainer="(triggerNode) => triggerNode.parentNode"
206
+ :getCalendarContainer="enablePopupToBody? undefined :(triggerNode) => triggerNode.parentNode"
207
+ :getPopupContainer="enablePopupToBody? getBodyContainer : undefined"
199
208
  v-model="localValue"
200
209
  :disabled="disabled || readOnly"
201
210
  style="width: 100%"
@@ -211,7 +220,8 @@ export default {
211
220
  attr.type === 'monthPicker' ||
212
221
  (attr.type === 'monthRangePicker' && mode !== '查询')
213
222
  "
214
- :getCalendarContainer="(triggerNode) => triggerNode.parentNode"
223
+ :getCalendarContainer="enablePopupToBody? undefined :(triggerNode) => triggerNode.parentNode"
224
+ :getPopupContainer="enablePopupToBody? getBodyContainer : undefined"
215
225
  v-model="localValue"
216
226
  :disabled="disabled || readOnly"
217
227
  :show-time="true"
@@ -225,7 +235,8 @@ export default {
225
235
  attr.type === 'yearPicker' ||
226
236
  (attr.type === 'yearRangePicker' && mode !== '查询')
227
237
  "
228
- :getCalendarContainer="(triggerNode) => triggerNode.parentNode"
238
+ :getCalendarContainer="enablePopupToBody? undefined :(triggerNode) => triggerNode.parentNode"
239
+ :getPopupContainer="enablePopupToBody? getBodyContainer : undefined"
229
240
  v-model="localValue"
230
241
  :disabled="disabled || readOnly"
231
242
  format="YYYY"
@@ -250,7 +261,8 @@ export default {
250
261
  (attr.type === 'rangePicker' && mode === '查询') ||
251
262
  ['yearRangePicker', 'monthRangePicker'].includes(attr.type)
252
263
  "
253
- :getCalendarContainer="(triggerNode) => triggerNode.parentNode"
264
+ :getCalendarContainer="enablePopupToBody? undefined :(triggerNode) => triggerNode.parentNode"
265
+ :getPopupContainer="enablePopupToBody? getBodyContainer : undefined"
254
266
  v-model="localValue"
255
267
  :disabled="disabled"
256
268
  :placeholder="placeholder"
@@ -381,6 +381,7 @@
381
381
  <XFormDatePicker
382
382
  :attr="attr"
383
383
  :mode="mode"
384
+ :enablePopupToBody="enablePopupToBody"
384
385
  :disabled="disabled"
385
386
  :readOnly="readOnly"
386
387
  :showLabel="showLabel"
@@ -815,6 +816,11 @@ export default {
815
816
  return []
816
817
  }
817
818
  },
819
+ // 是否启用时间弹出到最外层
820
+ enablePopupToBody: {
821
+ type: Boolean,
822
+ default: false
823
+ },
818
824
  serviceName: {
819
825
  type: String,
820
826
  default:
@@ -67,6 +67,7 @@
67
67
  :pageMaxSize="realQueryConfig.queryPagesSize"
68
68
  :externalSelectedRowKeys="externalSelectedRowKeys"
69
69
  :customPagination="customPagination"
70
+ :hiddenFunctionalArea="hiddenFunctionalArea"
70
71
  @add="add"
71
72
  @move="move"
72
73
  @edit="edit"
@@ -409,6 +410,11 @@ export default {
409
410
  customPagination: {
410
411
  type: Boolean,
411
412
  default: false
413
+ },
414
+ // 是否隐藏顶部功能区域
415
+ hiddenFunctionalArea: {
416
+ type: Boolean,
417
+ default: false
412
418
  }
413
419
  },
414
420
  watch: {
@@ -1,194 +1,194 @@
1
- <template>
2
- <div class="x-input-wrapper" :class="wrapperClassObject">
3
- <div class="input-container">
4
- <span v-if="config?.label" class="input-label">{{ config.label }}</span>
5
- <div class="input-wrapper">
6
- <a-input
7
- v-model="innerValue"
8
- v-bind="$attrs"
9
- :placeholder="config?.placeholder"
10
- :size="config?.size"
11
- :maxLength="config?.maxLength"
12
- :disabled="config?.disabled"
13
- :allowClear="config?.allowClear"
14
- @change="handleInput"
15
- @pressEnter="handleSearch"
16
- >
17
- <template v-if="config?.prefix" #prefix>
18
- <a-icon :type="config.prefix" @click="handleSearch" class="clickable-icon" />
19
- </template>
20
- <template v-if="config?.suffix" #suffix>
21
- <a-icon :type="config.suffix" @click="handleSearch" class="clickable-icon" />
22
- </template>
23
- </a-input>
24
- </div>
25
- <span v-if="config?.tail" class="input-tail">{{ config.tail }}</span>
26
- </div>
27
- </div>
28
- </template>
29
-
30
- <script>
31
- import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
32
-
33
- export default {
34
- name: 'XInput',
35
- inheritAttrs: false,
36
- props: {
37
- value: {
38
- type: [String, Number],
39
- default: ''
40
- },
41
- queryParamsName: {
42
- type: String,
43
- default: ''
44
- }
45
- },
46
- data () {
47
- return {
48
- innerValue: this.value || '',
49
- config: null
50
- }
51
- },
52
- computed: {
53
- // 动态样式开关:布尔开关 + size 派生类
54
- wrapperClassObject () {
55
- const attrs = this.$attrs || {}
56
- const classes = {}
57
- const booleanStyleKeys = [
58
- 'medical-history',
59
- 'yizhu-input'
60
- ]
61
- booleanStyleKeys.forEach(key => {
62
- const val = attrs[key]
63
- const truthy = val === true || val === '' || val === 'true'
64
- if (truthy) classes[`xinput-${key}`] = true
65
- })
66
- const size = attrs.size
67
- if (size && typeof size === 'string') classes[`xinput-size-${size}`] = true
68
- return classes
69
- }
70
- },
71
- created () {
72
- this.getData(this.queryParamsName)
73
- },
74
- emits: ['search'],
75
- methods: {
76
- runLogic,
77
- async getData (data) {
78
- getConfigByName(data, 'af-his', res => {
79
- this.config = res
80
- if (res.defaultValue !== undefined) {
81
- this.innerValue = res.defaultValue
82
- }
83
- })
84
- },
85
- handleInput (e) {
86
- const value = e.target.value
87
- this.innerValue = value
88
- this.$emit('search', value)
89
- },
90
- handleSearch () {
91
- // 统一的搜索事件:将当前输入值发送给父组件
92
- this.$emit('search', this.innerValue)
93
- }
94
- },
95
- watch: {
96
- value: {
97
- handler (newValue) {
98
- this.innerValue = newValue
99
- },
100
- immediate: true
101
- },
102
- queryParamsName: {
103
- handler (newValue) {
104
- this.getData(newValue)
105
- },
106
- deep: true
107
- }
108
- }
109
- }
110
- </script>
111
-
112
- <style scoped lang="less">
113
- .x-input-wrapper {
114
- position: relative;
115
- display: inline-block;
116
- width: 100%;
117
- }
118
-
119
- .input-container {
120
- display: flex;
121
- align-items: center;
122
- }
123
-
124
- .input-label {
125
- white-space: nowrap;
126
- color: rgba(0, 0, 0, 0.85);
127
- padding-right: 8px; /* 标签右侧固定间距 */
128
- }
129
-
130
- .input-label {
131
- white-space: nowrap;
132
- color: rgba(0, 0, 0, 0.85);
133
- padding-left: 4px; /* 标签左侧固定间距 */
134
- }
135
-
136
- .input-wrapper {
137
- flex: 1; /* 输入框占据剩余空间 */
138
- }
139
-
140
- :deep(.clickable-icon) {
141
- cursor: pointer;
142
- }
143
-
144
- :deep(.clickable-icon:hover) {
145
- color: #1890ff;
146
- }
147
-
148
- .x-input-wrapper{
149
- &.xinput-medical-history {
150
- width: 192px;
151
- height: 32px;
152
- border-radius: 6px;
153
- opacity: 1;
154
- background: #FFFFFF;
155
- box-sizing: border-box;
156
- border: 1px solid #D8D8D8;
157
-
158
- :deep(.ant-input::placeholder) {
159
- font-family: Source Han Sans;
160
- font-size: 16px;
161
- font-weight: normal;
162
- line-height: normal;
163
- letter-spacing: 0em;
164
- font-variation-settings: "opsz" auto;
165
- font-feature-settings: "kern" on;
166
- color: #A7A7A7;
167
- }
168
- }
169
- &.xinput-yizhu-input {
170
- border-radius: 6px;
171
- opacity: 1;
172
- background: #FFFFFF;
173
- box-sizing: border-box;
174
- border: 1px solid #E5E9F0;
175
-
176
- margin: 2px 0px;
177
- :deep(.ant-input) {
178
- border-radius: 6px;
179
- opacity: 1;
180
- background: #FFFFFF;
181
- box-sizing: border-box;
182
- border: 1px solid #E5E9F0;
183
- font-family: Source Han Sans;
184
- font-size: 14px;
185
- padding: 5px 76px 3px 8px;
186
- font-weight: normal;
187
- line-height: 24px;
188
- letter-spacing: 0em;
189
- color: #A7A7A7;
190
- }
191
- }
192
- }
193
-
194
- </style>
1
+ <template>
2
+ <div class="x-input-wrapper" :class="wrapperClassObject">
3
+ <div class="input-container">
4
+ <span v-if="config?.label" class="input-label">{{ config.label }}</span>
5
+ <div class="input-wrapper">
6
+ <a-input
7
+ v-model="innerValue"
8
+ v-bind="$attrs"
9
+ :placeholder="config?.placeholder"
10
+ :size="config?.size"
11
+ :maxLength="config?.maxLength"
12
+ :disabled="config?.disabled"
13
+ :allowClear="config?.allowClear"
14
+ @change="handleInput"
15
+ @pressEnter="handleSearch"
16
+ >
17
+ <template v-if="config?.prefix" #prefix>
18
+ <a-icon :type="config.prefix" @click="handleSearch" class="clickable-icon" />
19
+ </template>
20
+ <template v-if="config?.suffix" #suffix>
21
+ <a-icon :type="config.suffix" @click="handleSearch" class="clickable-icon" />
22
+ </template>
23
+ </a-input>
24
+ </div>
25
+ <span v-if="config?.tail" class="input-tail">{{ config.tail }}</span>
26
+ </div>
27
+ </div>
28
+ </template>
29
+
30
+ <script>
31
+ import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
32
+
33
+ export default {
34
+ name: 'XInput',
35
+ inheritAttrs: false,
36
+ props: {
37
+ value: {
38
+ type: [String, Number],
39
+ default: ''
40
+ },
41
+ queryParamsName: {
42
+ type: String,
43
+ default: ''
44
+ }
45
+ },
46
+ data () {
47
+ return {
48
+ innerValue: this.value || '',
49
+ config: null
50
+ }
51
+ },
52
+ computed: {
53
+ // 动态样式开关:布尔开关 + size 派生类
54
+ wrapperClassObject () {
55
+ const attrs = this.$attrs || {}
56
+ const classes = {}
57
+ const booleanStyleKeys = [
58
+ 'medical-history',
59
+ 'yizhu-input'
60
+ ]
61
+ booleanStyleKeys.forEach(key => {
62
+ const val = attrs[key]
63
+ const truthy = val === true || val === '' || val === 'true'
64
+ if (truthy) classes[`xinput-${key}`] = true
65
+ })
66
+ const size = attrs.size
67
+ if (size && typeof size === 'string') classes[`xinput-size-${size}`] = true
68
+ return classes
69
+ }
70
+ },
71
+ created () {
72
+ this.getData(this.queryParamsName)
73
+ },
74
+ emits: ['search'],
75
+ methods: {
76
+ runLogic,
77
+ async getData (data) {
78
+ getConfigByName(data, 'af-his', res => {
79
+ this.config = res
80
+ if (res.defaultValue !== undefined) {
81
+ this.innerValue = res.defaultValue
82
+ }
83
+ })
84
+ },
85
+ handleInput (e) {
86
+ const value = e.target.value
87
+ this.innerValue = value
88
+ this.$emit('search', value)
89
+ },
90
+ handleSearch () {
91
+ // 统一的搜索事件:将当前输入值发送给父组件
92
+ this.$emit('search', this.innerValue)
93
+ }
94
+ },
95
+ watch: {
96
+ value: {
97
+ handler (newValue) {
98
+ this.innerValue = newValue
99
+ },
100
+ immediate: true
101
+ },
102
+ queryParamsName: {
103
+ handler (newValue) {
104
+ this.getData(newValue)
105
+ },
106
+ deep: true
107
+ }
108
+ }
109
+ }
110
+ </script>
111
+
112
+ <style scoped lang="less">
113
+ .x-input-wrapper {
114
+ position: relative;
115
+ display: inline-block;
116
+ width: 100%;
117
+ }
118
+
119
+ .input-container {
120
+ display: flex;
121
+ align-items: center;
122
+ }
123
+
124
+ .input-label {
125
+ white-space: nowrap;
126
+ color: rgba(0, 0, 0, 0.85);
127
+ padding-right: 8px; /* 标签右侧固定间距 */
128
+ }
129
+
130
+ .input-label {
131
+ white-space: nowrap;
132
+ color: rgba(0, 0, 0, 0.85);
133
+ padding-left: 4px; /* 标签左侧固定间距 */
134
+ }
135
+
136
+ .input-wrapper {
137
+ flex: 1; /* 输入框占据剩余空间 */
138
+ }
139
+
140
+ :deep(.clickable-icon) {
141
+ cursor: pointer;
142
+ }
143
+
144
+ :deep(.clickable-icon:hover) {
145
+ color: #1890ff;
146
+ }
147
+
148
+ .x-input-wrapper{
149
+ &.xinput-medical-history {
150
+ width: 192px;
151
+ height: 32px;
152
+ border-radius: 6px;
153
+ opacity: 1;
154
+ background: #FFFFFF;
155
+ box-sizing: border-box;
156
+ border: 1px solid #D8D8D8;
157
+
158
+ :deep(.ant-input::placeholder) {
159
+ font-family: Source Han Sans;
160
+ font-size: 16px;
161
+ font-weight: normal;
162
+ line-height: normal;
163
+ letter-spacing: 0em;
164
+ font-variation-settings: "opsz" auto;
165
+ font-feature-settings: "kern" on;
166
+ color: #A7A7A7;
167
+ }
168
+ }
169
+ &.xinput-yizhu-input {
170
+ border-radius: 6px;
171
+ opacity: 1;
172
+ background: #FFFFFF;
173
+ box-sizing: border-box;
174
+ border: 1px solid #E5E9F0;
175
+
176
+ margin: 2px 0px;
177
+ :deep(.ant-input) {
178
+ border-radius: 6px;
179
+ opacity: 1;
180
+ background: #FFFFFF;
181
+ box-sizing: border-box;
182
+ border: 1px solid #E5E9F0;
183
+ font-family: Source Han Sans;
184
+ font-size: 14px;
185
+ padding: 5px 76px 3px 8px;
186
+ font-weight: normal;
187
+ line-height: 24px;
188
+ letter-spacing: 0em;
189
+ color: #A7A7A7;
190
+ }
191
+ }
192
+ }
193
+
194
+ </style>
@@ -0,0 +1,45 @@
1
+ <template>
2
+ <div id="xreport-hosp-demo">
3
+ <a-space style="margin-bottom: 12px;">
4
+ <a-button type="primary" @click="doInit">手动初始化</a-button>
5
+ </a-space>
6
+ <XReport
7
+ ref="reportRef"
8
+ :edit-mode="true"
9
+ :show-save-button="true"
10
+ :show-img-in-cell="false"
11
+ :use-oss-for-img="false"
12
+ server-name="af-his"
13
+ @updateImg="onUpdateImg"/>
14
+ </div>
15
+ </template>
16
+
17
+ <script setup>
18
+ import { ref } from 'vue'
19
+ import XReport from '@vue2-client/base-client/components/common/XReport'
20
+
21
+ const reportRef = ref(null)
22
+
23
+ const payload = {
24
+ arr: [
25
+ { BQ: '病房区', RY: 0, CY: 0, CW: 0, SW: 0, SS: 0, ZC: 0, ZR: 0, ZY: 0 },
26
+ { BQ: '感染科', RY: 0, CY: 0, CW: 0, SW: 0, SS: 0, ZC: 0, ZR: 0, ZY: 0 },
27
+ { BQ: '骨科病区', RY: 0, CY: 0, CW: 0, SW: 0, SS: 0, ZC: 0, ZR: 0, ZY: 0 },
28
+ { BQ: '呼吸科病区', RY: 0, CY: 0, CW: 0, SW: 0, SS: 0, ZC: 0, ZR: 0, ZY: 0 },
29
+ { BQ: '急症科病区', RY: 0, CY: 0, CW: 0, SW: 0, SS: 0, ZC: 0, ZR: 0, ZY: 0 },
30
+ { BQ: '内科二病区', RY: 0, CY: 0, CW: 0, SW: 0, SS: 0, ZC: 0, ZR: 0, ZY: 0 }
31
+ ]
32
+ }
33
+
34
+ const doInit = async () => {
35
+ if (!reportRef.value || !reportRef.value.init) return
36
+ await reportRef.value.init({
37
+ configName: 'hospitalizationStatsReport',
38
+ configData: payload
39
+ })
40
+ }
41
+
42
+ const onUpdateImg = data => {
43
+ console.warn('updateImg:', data)
44
+ }
45
+ </script>