vue2-client 1.16.81 → 1.16.82

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 (32) 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/HFormGroup/index.js +3 -3
  11. package/src/base-client/components/common/HIS/HFormTable/HFormTable.vue +394 -379
  12. package/src/base-client/components/common/HIS/HTab/HTab.vue +418 -418
  13. package/src/base-client/components/common/XCollapse/XCollapse.vue +833 -833
  14. package/src/base-client/components/common/XInput/XInput.vue +194 -194
  15. package/src/base-client/components/common/XReport/XReportHospitalizationDemo.vue +45 -0
  16. package/src/base-client/components/common/XTable/XTable.vue +1610 -1610
  17. package/src/base-client/components/common/XTimeline/XTimeline.vue +454 -454
  18. package/src/base-client/components/his/XCheckbox/XCheckbox.vue +31 -2
  19. package/src/base-client/components/his/XHDescriptions/XHDescriptions.vue +1031 -1022
  20. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +705 -705
  21. package/src/base-client/components/his/XIcon/XIcon.vue +73 -73
  22. package/src/base-client/components/his/XIcon/index.js +3 -3
  23. package/src/base-client/components/his/XIcon/index.md +177 -177
  24. package/src/base-client/components/his/XList/XList.vue +829 -829
  25. package/src/base-client/components/his/XRadio/XRadio.vue +1 -1
  26. package/src/base-client/components/his/XSimpleTable/XSimpleTable.vue +159 -159
  27. package/src/base-client/components/his/XTitle/XTitle.vue +255 -255
  28. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +341 -341
  29. package/src/base-client/components/his/threeTestOrders/editor.vue +113 -113
  30. package/src/pages/userInfoDetailManage/ExceptionRecordQuery/index.vue +45 -45
  31. package/src-base-client/components/his/XCharge/XCharge.vue +0 -0
  32. /package/src-base-client/components/{common/XCollapse/XCollapse.vue → his/XCharge/README.md} +0 -0
@@ -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>