vue2-client 1.16.69 → 1.16.71

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 (28) hide show
  1. package/package.json +112 -112
  2. package/src/assets/svg/female.svg +1 -1
  3. package/src/assets/svg/male.svg +1 -1
  4. package/src/base-client/components/common/HIS/HFormGroup/index.js +3 -3
  5. package/src/base-client/components/common/HIS/HFormTable/HFormTable.vue +379 -379
  6. package/src/base-client/components/common/HIS/HTab/HTab.vue +413 -413
  7. package/src/base-client/components/common/XCalendar/XCalendar.vue +399 -399
  8. package/src/base-client/components/common/XCollapse/XCollapse.vue +833 -833
  9. package/src/base-client/components/common/XInput/XInput.vue +170 -170
  10. package/src/base-client/components/common/XReport/print.js +186 -186
  11. package/src/base-client/components/common/XTable/XTable.vue +1610 -1610
  12. package/src/base-client/components/common/XTimeline/XTimeline.vue +454 -454
  13. package/src/base-client/components/his/XHDescriptions/XHDescriptions.vue +919 -919
  14. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +705 -705
  15. package/src/base-client/components/his/XList/XList.vue +829 -829
  16. package/src/base-client/components/his/XRadio/XRadio.vue +305 -305
  17. package/src/base-client/components/his/XSimpleTable/XSimpleTable.vue +159 -159
  18. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +341 -341
  19. package/src/base-client/components/his/threeTestOrders/editor.vue +113 -113
  20. package/src/pages/WorkflowDetail/WorkflowDetail.vue +5 -0
  21. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +3 -0
  22. package/src/pages/dashboard/index.vue +25 -0
  23. package/src/pages/userInfoDetailManage/ExceptionRecordQuery/index.vue +45 -45
  24. package/src/router/async/config.async.js +1 -0
  25. package/src/router/async/router.map.js +2 -0
  26. package/src/router/index.js +1 -1
  27. package/src/utils/map-utils.js +47 -47
  28. package/src-base-client/components/common/XCollapse/XCollapse.vue +0 -0
@@ -1,305 +1,305 @@
1
- <template>
2
- <div class="x-radio-container" :class="wrapperClassObject()">
3
- <a-radio-group v-model="innerValue" @change="onChange" :class="['x-radio-group', { 'x-radio-group-left': config.alignLeft }]">
4
- <div v-for="item in data"
5
- :key="item.value"
6
- class="x-radio-item-container"
7
- :class="{
8
- 'x-radio-item-bordered': config.showBorder,
9
- 'x-radio-item-highlight': config.highlightBorder
10
- }"
11
- :style="getHighlightBorderStyle(item)">
12
- <div class="x-radio-item-wrapper">
13
- <div
14
- v-if="config.showIndicator && item.bottomLine !== false"
15
- class="x-radio-indicator-left"
16
- :style="{
17
- width: item.indicatorWidth || '4px',
18
- backgroundColor: item.indicatorColor || config.indicatorActiveColor,
19
- height: item.indicatorHeight || '16px'
20
- }"
21
- ></div>
22
- <a-radio
23
- :value="item.value"
24
- class="x-radio-item"
25
- :class="{ 'x-radio-item-no-dot': config.highlightBorder }"
26
- >
27
- {{ item.label }}
28
- </a-radio>
29
- </div>
30
- <div
31
- v-if="config.showIndicator && item.bottomLine !== false && !config.showBorder && !config.highlightBorder"
32
- class="x-radio-indicator-bottom"
33
- :style="{
34
- width: item.indicatorWidth || '100%',
35
- backgroundColor: item.indicatorColor || config.indicatorActiveColor,
36
- height: config.indicatorHeight + 'px'
37
- }"
38
- ></div>
39
- </div>
40
- </a-radio-group>
41
- </div>
42
- </template>
43
-
44
- <script>
45
- import { getConfigByName } from '@vue2-client/services/api/common'
46
-
47
- export default {
48
- name: 'XRadio',
49
- inject: ['getComponentByName'],
50
- props: {
51
- queryParamsName: {
52
- type: Object,
53
- default: null
54
- },
55
- // eslint-disable-next-line vue/require-default-prop
56
- value: [String, Number]
57
- },
58
- data () {
59
- return {
60
- data: [],
61
- innerValue: null,
62
- config: {
63
- showIndicator: true,
64
- indicatorHeight: 3,
65
- indicatorActiveColor: '#1890ff',
66
- alignLeft: false,
67
- showBorder: false,
68
- highlightBorder: false
69
- }
70
- }
71
- },
72
- created () {
73
- this.getData(this.queryParamsName)
74
- },
75
- watch: {
76
- value (val) {
77
- this.innerValue = val
78
- }
79
- },
80
- emits: ['change', 'init'],
81
- methods: {
82
- async getData (data) {
83
- getConfigByName(data, 'af-his', res => {
84
- // 1. 先加载选项
85
- if (res.radio && Array.isArray(res.radio)) {
86
- this.data = res.radio
87
- // 2. 加载指示器配置
88
- if (res.indicator !== undefined) {
89
- // 如果indicator是布尔值,则只控制显示/隐藏
90
- if (typeof res.indicator === 'boolean') {
91
- this.config.showIndicator = res.indicator
92
- } else if (typeof res.indicator === 'object') {
93
- this.config = {
94
- ...this.config,
95
- ...res.indicator
96
- }
97
- }
98
- }
99
- // 3. 加载布局配置
100
- if (res.layout !== undefined) {
101
- if (typeof res.layout === 'object') {
102
- this.config = {
103
- ...this.config,
104
- ...res.layout
105
- }
106
- }
107
- }
108
- // 4. 初始化默认值(优先级: 配置defaultValue > 第一个选项)
109
- if (this.value !== undefined && this.value !== null) {
110
- this.innerValue = this.value // 优先使用外部传入的 value
111
- } else if (res.defaultValue !== undefined && res.defaultValue !== null) {
112
- // 使用配置中的defaultValue
113
- this.innerValue = res.defaultValue
114
- } else if (this.data.length > 0) {
115
- // 如果没有默认值但有选项,使用第一个选项
116
- this.innerValue = this.data[0].value
117
- }
118
- // 5. 触发初始化事件
119
- this.$emit('init', this.innerValue)
120
- } else {
121
- this.$message.error('配置错误,radio字段不是数组')
122
- }
123
- })
124
- },
125
- onChange (e) {
126
- this.innerValue = e.target.value
127
- this.$emit('change', e.target.value)
128
- },
129
- wrapperClassObject () {
130
- const attrs = this.$attrs || {}
131
- const classes = {}
132
- const booleanStyleKeys = [
133
- 'item-0padding'
134
- ]
135
- booleanStyleKeys.forEach(key => {
136
- const val = attrs[key]
137
- const truthy = val === true || val === '' || val === 'true'
138
- if (truthy) classes[`x-radio-${key}`] = true
139
- })
140
- return classes
141
- },
142
- getHighlightBorderStyle (item) {
143
- if (!this.config.highlightBorder) return {}
144
-
145
- // 如果当前选项被选中且有边框颜色配置,使用配置的颜色
146
- if (this.innerValue === item.value && item.borderColor) {
147
- return {
148
- borderColor: item.borderColor
149
- }
150
- }
151
-
152
- // 如果当前选项被选中且有indicatorColor配置,使用indicatorColor作为边框颜色
153
- if (this.innerValue === item.value && item.indicatorColor) {
154
- return {
155
- borderColor: item.indicatorColor
156
- }
157
- }
158
-
159
- // 默认返回空对象,使用CSS中的默认灰色边框
160
- return {}
161
- }
162
- }
163
- }
164
- </script>
165
-
166
- <style scoped lang="less">
167
- .x-radio-container {
168
- display: flex;
169
- flex-direction: column;
170
- }
171
-
172
- .x-radio-group {
173
- display: flex;
174
- justify-content: space-around;
175
-
176
- &.x-radio-group-left {
177
- justify-content: flex-start;
178
- }
179
- }
180
-
181
- .x-radio-item-container {
182
- flex: 1;
183
- display: flex;
184
- flex-direction: column;
185
- align-items: center;
186
- text-align: center;
187
- padding: 0 8px;
188
- box-sizing: border-box;
189
-
190
- .x-radio-group-left & {
191
- flex: none;
192
- align-items: flex-start;
193
- text-align: left;
194
- margin-right: 16px;
195
- padding: 0 4px;
196
-
197
- &:last-child {
198
- margin-right: 0;
199
- }
200
- }
201
-
202
- &.x-radio-item-bordered {
203
- border: 1px solid #d9d9d9;
204
- border-radius: 173px;
205
- padding: 8px 12px;
206
- margin-right: 8px;
207
- background-color: #fff;
208
- transition: all 0.3s;
209
-
210
- &:hover {
211
- border-color: #40a9ff;
212
- }
213
-
214
- &:last-child {
215
- margin-right: 0;
216
- }
217
-
218
- .x-radio-group-left & {
219
- margin-right: 8px;
220
-
221
- &:last-child {
222
- margin-right: 0;
223
- }
224
- }
225
- }
226
-
227
- &.x-radio-item-highlight {
228
- border: 2px solid #d9d9d9;
229
- border-radius: 173px;
230
- padding: 8px 12px;
231
- margin-right: 8px;
232
- background-color: #fff;
233
- transition: all 0.3s;
234
- position: relative;
235
-
236
- &:last-child {
237
- margin-right: 0;
238
- }
239
-
240
- .x-radio-group-left & {
241
- margin-right: 8px;
242
-
243
- &:last-child {
244
- margin-right: 0;
245
- }
246
- }
247
-
248
- // 动态边框颜色通过内联样式设置
249
- }
250
- }
251
-
252
- .x-radio-item-wrapper {
253
- display: flex;
254
- align-items: center;
255
- width: 100%;
256
-
257
- .x-radio-group-left & {
258
- justify-content: flex-start;
259
- }
260
- }
261
-
262
- .x-radio-item {
263
- margin-bottom: 8px;
264
-
265
- .x-radio-item-bordered & {
266
- margin-bottom: 0;
267
- }
268
-
269
- &.x-radio-item-no-dot {
270
- :deep(.ant-radio) {
271
- display: none;
272
- }
273
-
274
- :deep(.ant-radio-wrapper) {
275
- padding-left: 0;
276
- }
277
- }
278
- }
279
-
280
- .x-radio-indicator-left {
281
- width: 4px;
282
- height: 16px;
283
- margin-right: 8px;
284
- border-radius: 6px;
285
- transition: all 0.3s;
286
- }
287
-
288
- .x-radio-indicator-bottom {
289
- height: 3px;
290
- transition: all 0.3s;
291
- max-width: 100%;
292
- }
293
- .x-radio-description {
294
- padding: 4px 4px 4px 4px;
295
- }
296
-
297
- .x-radio-item-0padding {
298
- &.x-radio-container,
299
- .x-radio-container {
300
- :deep(.x-radio-item-container) {
301
- padding: 0px;
302
- }
303
- }
304
- }
305
- </style>
1
+ <template>
2
+ <div class="x-radio-container" :class="wrapperClassObject()">
3
+ <a-radio-group v-model="innerValue" @change="onChange" :class="['x-radio-group', { 'x-radio-group-left': config.alignLeft }]">
4
+ <div v-for="item in data"
5
+ :key="item.value"
6
+ class="x-radio-item-container"
7
+ :class="{
8
+ 'x-radio-item-bordered': config.showBorder,
9
+ 'x-radio-item-highlight': config.highlightBorder
10
+ }"
11
+ :style="getHighlightBorderStyle(item)">
12
+ <div class="x-radio-item-wrapper">
13
+ <div
14
+ v-if="config.showIndicator && item.bottomLine !== false"
15
+ class="x-radio-indicator-left"
16
+ :style="{
17
+ width: item.indicatorWidth || '4px',
18
+ backgroundColor: item.indicatorColor || config.indicatorActiveColor,
19
+ height: item.indicatorHeight || '16px'
20
+ }"
21
+ ></div>
22
+ <a-radio
23
+ :value="item.value"
24
+ class="x-radio-item"
25
+ :class="{ 'x-radio-item-no-dot': config.highlightBorder }"
26
+ >
27
+ {{ item.label }}
28
+ </a-radio>
29
+ </div>
30
+ <div
31
+ v-if="config.showIndicator && item.bottomLine !== false && !config.showBorder && !config.highlightBorder"
32
+ class="x-radio-indicator-bottom"
33
+ :style="{
34
+ width: item.indicatorWidth || '100%',
35
+ backgroundColor: item.indicatorColor || config.indicatorActiveColor,
36
+ height: config.indicatorHeight + 'px'
37
+ }"
38
+ ></div>
39
+ </div>
40
+ </a-radio-group>
41
+ </div>
42
+ </template>
43
+
44
+ <script>
45
+ import { getConfigByName } from '@vue2-client/services/api/common'
46
+
47
+ export default {
48
+ name: 'XRadio',
49
+ inject: ['getComponentByName'],
50
+ props: {
51
+ queryParamsName: {
52
+ type: Object,
53
+ default: null
54
+ },
55
+ // eslint-disable-next-line vue/require-default-prop
56
+ value: [String, Number]
57
+ },
58
+ data () {
59
+ return {
60
+ data: [],
61
+ innerValue: null,
62
+ config: {
63
+ showIndicator: true,
64
+ indicatorHeight: 3,
65
+ indicatorActiveColor: '#1890ff',
66
+ alignLeft: false,
67
+ showBorder: false,
68
+ highlightBorder: false
69
+ }
70
+ }
71
+ },
72
+ created () {
73
+ this.getData(this.queryParamsName)
74
+ },
75
+ watch: {
76
+ value (val) {
77
+ this.innerValue = val
78
+ }
79
+ },
80
+ emits: ['change', 'init'],
81
+ methods: {
82
+ async getData (data) {
83
+ getConfigByName(data, 'af-his', res => {
84
+ // 1. 先加载选项
85
+ if (res.radio && Array.isArray(res.radio)) {
86
+ this.data = res.radio
87
+ // 2. 加载指示器配置
88
+ if (res.indicator !== undefined) {
89
+ // 如果indicator是布尔值,则只控制显示/隐藏
90
+ if (typeof res.indicator === 'boolean') {
91
+ this.config.showIndicator = res.indicator
92
+ } else if (typeof res.indicator === 'object') {
93
+ this.config = {
94
+ ...this.config,
95
+ ...res.indicator
96
+ }
97
+ }
98
+ }
99
+ // 3. 加载布局配置
100
+ if (res.layout !== undefined) {
101
+ if (typeof res.layout === 'object') {
102
+ this.config = {
103
+ ...this.config,
104
+ ...res.layout
105
+ }
106
+ }
107
+ }
108
+ // 4. 初始化默认值(优先级: 配置defaultValue > 第一个选项)
109
+ if (this.value !== undefined && this.value !== null) {
110
+ this.innerValue = this.value // 优先使用外部传入的 value
111
+ } else if (res.defaultValue !== undefined && res.defaultValue !== null) {
112
+ // 使用配置中的defaultValue
113
+ this.innerValue = res.defaultValue
114
+ } else if (this.data.length > 0) {
115
+ // 如果没有默认值但有选项,使用第一个选项
116
+ this.innerValue = this.data[0].value
117
+ }
118
+ // 5. 触发初始化事件
119
+ this.$emit('init', this.innerValue)
120
+ } else {
121
+ this.$message.error('配置错误,radio字段不是数组')
122
+ }
123
+ })
124
+ },
125
+ onChange (e) {
126
+ this.innerValue = e.target.value
127
+ this.$emit('change', e.target.value)
128
+ },
129
+ wrapperClassObject () {
130
+ const attrs = this.$attrs || {}
131
+ const classes = {}
132
+ const booleanStyleKeys = [
133
+ 'item-0padding'
134
+ ]
135
+ booleanStyleKeys.forEach(key => {
136
+ const val = attrs[key]
137
+ const truthy = val === true || val === '' || val === 'true'
138
+ if (truthy) classes[`x-radio-${key}`] = true
139
+ })
140
+ return classes
141
+ },
142
+ getHighlightBorderStyle (item) {
143
+ if (!this.config.highlightBorder) return {}
144
+
145
+ // 如果当前选项被选中且有边框颜色配置,使用配置的颜色
146
+ if (this.innerValue === item.value && item.borderColor) {
147
+ return {
148
+ borderColor: item.borderColor
149
+ }
150
+ }
151
+
152
+ // 如果当前选项被选中且有indicatorColor配置,使用indicatorColor作为边框颜色
153
+ if (this.innerValue === item.value && item.indicatorColor) {
154
+ return {
155
+ borderColor: item.indicatorColor
156
+ }
157
+ }
158
+
159
+ // 默认返回空对象,使用CSS中的默认灰色边框
160
+ return {}
161
+ }
162
+ }
163
+ }
164
+ </script>
165
+
166
+ <style scoped lang="less">
167
+ .x-radio-container {
168
+ display: flex;
169
+ flex-direction: column;
170
+ }
171
+
172
+ .x-radio-group {
173
+ display: flex;
174
+ justify-content: space-around;
175
+
176
+ &.x-radio-group-left {
177
+ justify-content: flex-start;
178
+ }
179
+ }
180
+
181
+ .x-radio-item-container {
182
+ flex: 1;
183
+ display: flex;
184
+ flex-direction: column;
185
+ align-items: center;
186
+ text-align: center;
187
+ padding: 0 8px;
188
+ box-sizing: border-box;
189
+
190
+ .x-radio-group-left & {
191
+ flex: none;
192
+ align-items: flex-start;
193
+ text-align: left;
194
+ margin-right: 16px;
195
+ padding: 0 4px;
196
+
197
+ &:last-child {
198
+ margin-right: 0;
199
+ }
200
+ }
201
+
202
+ &.x-radio-item-bordered {
203
+ border: 1px solid #d9d9d9;
204
+ border-radius: 173px;
205
+ padding: 8px 12px;
206
+ margin-right: 8px;
207
+ background-color: #fff;
208
+ transition: all 0.3s;
209
+
210
+ &:hover {
211
+ border-color: #40a9ff;
212
+ }
213
+
214
+ &:last-child {
215
+ margin-right: 0;
216
+ }
217
+
218
+ .x-radio-group-left & {
219
+ margin-right: 8px;
220
+
221
+ &:last-child {
222
+ margin-right: 0;
223
+ }
224
+ }
225
+ }
226
+
227
+ &.x-radio-item-highlight {
228
+ border: 2px solid #d9d9d9;
229
+ border-radius: 173px;
230
+ padding: 8px 12px;
231
+ margin-right: 8px;
232
+ background-color: #fff;
233
+ transition: all 0.3s;
234
+ position: relative;
235
+
236
+ &:last-child {
237
+ margin-right: 0;
238
+ }
239
+
240
+ .x-radio-group-left & {
241
+ margin-right: 8px;
242
+
243
+ &:last-child {
244
+ margin-right: 0;
245
+ }
246
+ }
247
+
248
+ // 动态边框颜色通过内联样式设置
249
+ }
250
+ }
251
+
252
+ .x-radio-item-wrapper {
253
+ display: flex;
254
+ align-items: center;
255
+ width: 100%;
256
+
257
+ .x-radio-group-left & {
258
+ justify-content: flex-start;
259
+ }
260
+ }
261
+
262
+ .x-radio-item {
263
+ margin-bottom: 8px;
264
+
265
+ .x-radio-item-bordered & {
266
+ margin-bottom: 0;
267
+ }
268
+
269
+ &.x-radio-item-no-dot {
270
+ :deep(.ant-radio) {
271
+ display: none;
272
+ }
273
+
274
+ :deep(.ant-radio-wrapper) {
275
+ padding-left: 0;
276
+ }
277
+ }
278
+ }
279
+
280
+ .x-radio-indicator-left {
281
+ width: 4px;
282
+ height: 16px;
283
+ margin-right: 8px;
284
+ border-radius: 6px;
285
+ transition: all 0.3s;
286
+ }
287
+
288
+ .x-radio-indicator-bottom {
289
+ height: 3px;
290
+ transition: all 0.3s;
291
+ max-width: 100%;
292
+ }
293
+ .x-radio-description {
294
+ padding: 4px 4px 4px 4px;
295
+ }
296
+
297
+ .x-radio-item-0padding {
298
+ &.x-radio-container,
299
+ .x-radio-container {
300
+ :deep(.x-radio-item-container) {
301
+ padding: 0px;
302
+ }
303
+ }
304
+ }
305
+ </style>