vue2-client 1.18.20 → 1.18.22

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 (106) hide show
  1. package/.eslintrc.js +90 -90
  2. package/Components.md +60 -60
  3. package/docs/index.md +30 -30
  4. package/index.js +31 -31
  5. package/jest-transform-stub.js +8 -8
  6. package/jest.setup.js +7 -7
  7. package/package.json +1 -1
  8. package/src/assets/img/querySlotDemo.svg +15 -15
  9. package/src/assets/svg/female.svg +1 -1
  10. package/src/assets/svg/male.svg +1 -1
  11. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  12. package/src/base-client/components/common/CitySelect/index.js +3 -3
  13. package/src/base-client/components/common/CitySelect/index.md +109 -109
  14. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  15. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  16. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  17. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  18. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  19. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  20. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  21. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  22. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  23. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  24. package/src/base-client/components/common/HIS/HButtons/HButtons.vue +491 -491
  25. package/src/base-client/components/common/HIS/HFormGroup/index.js +3 -3
  26. package/src/base-client/components/common/HIS/HTab/HTab.vue +443 -443
  27. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  28. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  29. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  30. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  31. package/src/base-client/components/common/Tree/index.js +2 -2
  32. package/src/base-client/components/common/Upload/index.js +3 -3
  33. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  34. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  35. package/src/base-client/components/common/XCollapse/XCollapse.vue +830 -830
  36. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  37. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  38. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  39. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  40. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  41. package/src/base-client/components/common/XForm/index.md +178 -178
  42. package/src/base-client/components/common/XFormTable/XFormTable.vue +2 -26
  43. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  44. package/src/base-client/components/common/XStepView/index.js +3 -3
  45. package/src/base-client/components/common/XStepView/index.md +31 -31
  46. package/src/base-client/components/common/XTable/index.md +255 -255
  47. package/src/base-client/components/common/XTimeline/XTimeline.vue +477 -477
  48. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +705 -705
  49. package/src/base-client/components/his/XList/XList.vue +938 -938
  50. package/src/base-client/components/his/XTimeSelect/XTimeSelect.vue +354 -354
  51. package/src/base-client/components/his/XTitle/XTitle.vue +314 -314
  52. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +341 -341
  53. package/src/base-client/components/his/threeTestOrders/editor.vue +113 -113
  54. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  55. package/src/base-client/plugins/Config.js +19 -19
  56. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  57. package/src/components/Charts/Bar.vue +62 -62
  58. package/src/components/Charts/ChartCard.vue +134 -134
  59. package/src/components/Charts/Liquid.vue +67 -67
  60. package/src/components/Charts/MiniArea.vue +39 -39
  61. package/src/components/Charts/MiniBar.vue +39 -39
  62. package/src/components/Charts/MiniProgress.vue +75 -75
  63. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  64. package/src/components/Charts/Radar.vue +68 -68
  65. package/src/components/Charts/RankList.vue +77 -77
  66. package/src/components/Charts/TagCloud.vue +113 -113
  67. package/src/components/Charts/TransferBar.vue +64 -64
  68. package/src/components/Charts/Trend.vue +82 -82
  69. package/src/components/Charts/chart.less +12 -12
  70. package/src/components/Charts/smooth.area.less +13 -13
  71. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  72. package/src/components/NumberInfo/index.js +3 -3
  73. package/src/components/NumberInfo/index.less +54 -54
  74. package/src/components/NumberInfo/index.md +43 -43
  75. package/src/components/card/ChartCard.vue +79 -79
  76. package/src/components/chart/Bar.vue +60 -60
  77. package/src/components/chart/MiniArea.vue +67 -67
  78. package/src/components/chart/MiniBar.vue +59 -59
  79. package/src/components/chart/MiniProgress.vue +57 -57
  80. package/src/components/chart/Radar.vue +80 -80
  81. package/src/components/chart/RankingList.vue +60 -60
  82. package/src/components/chart/Trend.vue +79 -79
  83. package/src/components/chart/index.less +9 -9
  84. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  85. package/src/components/input/IInput.vue +66 -66
  86. package/src/components/menu/SideMenu.vue +75 -75
  87. package/src/components/menu/menu.js +273 -273
  88. package/src/components/tool/AStepItem.vue +60 -60
  89. package/src/layouts/CommonLayout.vue +56 -56
  90. package/src/layouts/header/HeaderNotice.vue +177 -177
  91. package/src/lib.js +1 -1
  92. package/src/mock/extend/index.js +84 -84
  93. package/src/mock/goods/index.js +108 -108
  94. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +1 -1
  95. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  96. package/src/pages/system/dictionary/index.vue +44 -44
  97. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  98. package/src/pages/system/monitor/operLog/index.vue +37 -37
  99. package/src/pages/userInfoDetailManage/ExceptionRecordQuery/index.vue +45 -45
  100. package/src/services/api/cas.js +79 -79
  101. package/src/store/modules/setting.js +119 -119
  102. package/src/utils/authority-utils.js +85 -85
  103. package/src/utils/errorCode.js +6 -6
  104. package/src-base-client/components/common/HIS/HForm/HForm.vue +347 -0
  105. package/src-base-client/components/common/XCollapse/XCollapse.vue +0 -0
  106. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
@@ -1,491 +1,491 @@
1
- <script setup lang="ts">
2
- import XButtons from '@vue2-client/base-client/components/common/XButtons/XButtons.vue'
3
- import { ref, computed, useAttrs } from 'vue'
4
-
5
- defineProps({
6
- // HButtons特有的属性
7
- buttonStyle: {
8
- type: String,
9
- default: 'button24'
10
- }
11
- })
12
-
13
- // 内部 XButtons 实例引用
14
- const xButtonsRef = ref()
15
-
16
- // 兼容多种样式配置
17
- const attrs = useAttrs()
18
- const wrapperClassObject = computed(() => {
19
- const a = attrs
20
- const classes = {}
21
-
22
- // 通用布尔样式开关(以存在/空字符串/'true' 为真)
23
- const booleanStyleKeys = [
24
- 'max-width200',
25
- 'width173',
26
- 'button_refresh',
27
- 'border', 'no-style',
28
- 'fill-container',
29
- 'no-boder-style',
30
- 'one-button-style' // 一个按钮样式,占满整个宽度
31
- ]
32
- for (const key of booleanStyleKeys) {
33
- const val = a[key]
34
- const truthy = val === true || val === '' || val === 'true'
35
- if (truthy) classes[`h-buttons-${key}`] = true
36
- }
37
- return classes
38
- })
39
-
40
- // 暴露方法:获取内部 XButtons 实例
41
- defineExpose({
42
- getXButtonsInstance: function () { return xButtonsRef.value }
43
- })
44
- </script>
45
-
46
- <template>
47
- <div
48
- class="h-buttons-wrapper"
49
- :class="[
50
- `h-buttons-${buttonStyle}`,
51
- wrapperClassObject
52
- ]"
53
- >
54
- <x-buttons
55
- ref="xButtonsRef"
56
- v-bind="$attrs"
57
- v-on="$listeners"
58
- >
59
- <template v-for="(_, name) in $slots" #[name]="slotData">
60
- <slot :name="name" v-bind="slotData" />
61
- </template>
62
- </x-buttons>
63
- </div>
64
- </template>
65
-
66
- <style scoped lang="less">
67
- .h-buttons-wrapper {
68
- // 基础样式
69
- :deep(.ant-btn-group) {
70
- .ant-btn {
71
- border-radius: 6px;
72
- background-color: #FFFFFF;
73
- border: 1px solid #9499A0;
74
- color: #313131;
75
- font-weight: normal;
76
- letter-spacing: 0em;
77
- width: 110px;
78
- font-size: 16px;
79
- font-family: "Source Han Sans";
80
- line-height: normal;
81
- margin-right: 25px;
82
- height: 32px;
83
- }
84
- }
85
- // button24样式
86
- &.h-buttons-button24 {
87
- :deep(.ant-btn-group) {
88
- .ant-btn {
89
- border: 1px solid #CDCDCD;
90
- color: #5D5C5C;
91
- // top: -100px;
92
- width: fit-content;
93
- min-width: 110px;
94
- }
95
- }
96
- }
97
- // button23样式
98
- &.h-buttons-button23 {
99
- :deep(.ant-btn-group) {
100
- .ant-btn {
101
- border: none;
102
- padding: 0 !important;
103
- color: #FFFFFF;
104
- border-radius: 50%;
105
- background-color: #1890FF;
106
- margin-left: 10px;
107
- top: -88px;
108
- width: 30px;
109
- height: 30px;
110
- }
111
- }
112
- }
113
- // +号样式(共享基础样式)
114
- &.h-buttons-table-height-button23,
115
- &.h-buttons-table-height-button23-no-transform {
116
- :deep(.ant-btn-group) {
117
- display: inline-flex;
118
- align-items: center;
119
- height: 100%;
120
-
121
- .ant-btn {
122
- display: inline-flex;
123
- align-items: center;
124
- justify-content: center;
125
- border: none;
126
- padding: 0 !important;
127
- color: #FFFFFF;
128
- border-radius: 50%;
129
- background-color: #1890FF;
130
- margin-left: 10px;
131
- width: 30px;
132
- height: 30px;
133
- }
134
- }
135
- }
136
- // 仅在有分页的场景上移
137
- &.h-buttons-table-height-button23 {
138
- :deep(.ant-btn-group) {
139
- .ant-btn { transform: translateY(-100%); }
140
- }
141
- }
142
- // 居中+悬停高亮的新样式
143
- &.h-buttons-plus-center {
144
- :deep(.ant-btn-group) {
145
- display: flex;
146
- align-items: center;
147
- justify-content: center;
148
- gap: 16px;
149
-
150
- .ant-btn {
151
- display: inline-flex;
152
- align-items: center;
153
- justify-content: center;
154
- border: 1px solid #CDCDCD;
155
- color: #5D5C5C;
156
- min-width: 110px;
157
- transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
158
-
159
- &:hover {
160
- background-color: #0057FE;
161
- border-color: #0057FE;
162
- color: #FFFFFF;
163
- }
164
- /* 支持通过 data-type 改变悬停颜色 */
165
- &[data-type='success']:hover {
166
- background-color: #34C76E;
167
- border-color: #34C76E;
168
- color: #FFFFFF;
169
- }
170
- }
171
- }
172
- }
173
- // 按钮布局样式公共部分
174
- &.h-buttons-button-left,
175
- &.h-buttons-button-center,
176
- &.h-buttons-button-right,
177
- &.h-buttons-button-space-between {
178
- :deep(.ant-btn-group) {
179
- width: 100%;
180
- display: flex;
181
- flex-wrap: nowrap;
182
- .ant-btn {
183
- border: 1px solid #CDCDCD;
184
- color: #5D5C5C;
185
- white-space: nowrap;
186
- overflow: hidden;
187
- margin-right: 0px;
188
- text-overflow: ellipsis;
189
- }
190
- }
191
- }
192
- &.h-buttons-max-width200 {
193
- :deep(.ant-btn) {
194
- max-width: 200px !important;
195
- }
196
- }
197
- // button-left样式 - 按钮从左到右排列
198
- &.h-buttons-button-left {
199
- :deep(.ant-btn-group) {
200
- justify-content: flex-start;
201
- gap: 12px;
202
- }
203
- }
204
- // button-center样式 - 按钮居中排列
205
- &.h-buttons-button-center {
206
- :deep(.ant-btn-group) {
207
- justify-content: center;
208
- gap: 12px;
209
- }
210
- }
211
- // button-right样式 - 按钮从右到左排列
212
- &.h-buttons-button-right {
213
- :deep(.ant-btn-group) {
214
- justify-content: flex-end;
215
- gap: 12px;
216
- }
217
- }
218
- // button-space-between样式 - 按钮两端对齐(两个按钮时分布在两端)
219
- &.h-buttons-button-space-between {
220
- :deep(.ant-btn-group) {
221
- justify-content: space-between;
222
- }
223
- }
224
-
225
- // button-icon-tiles样式 - 左侧彩色图标块 + 右侧文字
226
- &.h-buttons-button-icon-tiles {
227
- :deep(.ant-btn-group) {
228
- width: 100%;
229
- display: flex;
230
- flex-wrap: wrap; // 允许自动换行
231
- justify-content: flex-start; // 左对齐
232
- gap: 0; // 取消统一间距
233
-
234
- .ant-btn {
235
- position: relative;
236
- display: inline-flex;
237
- align-items: center;
238
- gap: 10px; // 控制图标与文字间距
239
- border: 1px solid #E6E8EB;
240
- font-size: 14px;
241
- height: 44px;
242
- padding: 0 10px 0 10px;
243
- border-radius: 8px;
244
- min-width: 116px;
245
- box-shadow: 0 2px 0 rgba(0,0,0,0.02);
246
- margin-right: 12px; // 用margin控制横向间距,末尾一排自然换行
247
- }
248
-
249
- .ant-btn .anticon {
250
- width: 26px;
251
- height: 26px;
252
- display: inline-flex;
253
- align-items: center;
254
- justify-content: center;
255
- border-radius: 6px;
256
- color: #fff;
257
- font-size: 14px;
258
- flex: 0 0 26px; // 固定正方形,防止随文本挤压变形
259
- box-sizing: border-box;
260
- }
261
-
262
- /* 默认蓝色,支持通过 data-type 改变色块(success/warning/error/default)*/
263
- .ant-btn .anticon { background: #3FA7FF; }
264
- .ant-btn[data-type='success'] .anticon { background: #34C76E; }
265
- .ant-btn[data-type='warning'] .anticon { background: #FFA940; }
266
- .ant-btn[data-type='error'] .anticon { background: #FF7875; }
267
- .ant-btn[disabled] .anticon { background: #BFBFBF; }
268
-
269
- /* 图标与文字间距在有图标时更自然 */
270
- .ant-btn > .anticon + span { margin-left: 10px; }
271
- }
272
- }
273
- // 水印图标与按钮容器布局调整
274
- &.h-buttons-button-watermark-icon {
275
- :deep(.watermark-icon) { transform: translate(-50%, -54%) !important; }
276
- :deep(.x-button) { display: flex !important; }
277
- :deep(.ant-btn-group) {
278
- margin: 0 auto;
279
- display: block;
280
- }
281
- }
282
- &.h-buttons-0padding-button {
283
- padding: 0px 4px;
284
- }
285
- // button25样式 用于会诊申请侧边栏按钮样式
286
- &.h-buttons-button25 {
287
- :deep(.x-buttons) {
288
- .ant-btn-group {
289
- width: 173px;
290
- justify-content: space-between;
291
-
292
- .ant-btn {
293
- width: 173px;
294
- }
295
- }
296
- }
297
- }
298
- &.h-buttons-button_refresh {
299
- margin-top: 10px;
300
- }
301
- // 居中样式 用于门诊收费左侧按钮样式(三个按钮居中样式)
302
- &.h-buttons-out-button {
303
- :deep(.x-buttons) {
304
- margin-top: 2px !important;
305
- margin-bottom: 10px !important;
306
- display: flex;
307
- justify-content: center;
308
- .ant-btn-group {
309
- display: flex;
310
- flex-wrap: nowrap;
311
- gap: 12px;
312
- .ant-btn {
313
- width: 110px;
314
- height: 32px;
315
- border-radius: 6px;
316
- opacity: 1;
317
- background: #FFFFFF;
318
- box-sizing: border-box;
319
- border: 1px solid #9499A0;
320
- margin-right: 0px;
321
- /* 允许正常文本渲染,避免省略号导致的“变成点了” */
322
- font-family: "Source Han Sans";
323
- font-size: 16px;
324
- font-weight: normal;
325
- line-height: normal;
326
- color: #313131;
327
- }
328
- /* 还原子元素默认高度,避免文字被压缩成点 */
329
- }
330
- }
331
- }
332
- // button15样式 - 垂直排列的深色按钮组
333
- &.h-buttons-button15 {
334
- :deep(.x-buttons) {
335
- margin-top: -22px;
336
- .ant-btn-group {
337
- flex-direction: column; /* 按钮垂直排列 */
338
- display: flex; /* 启用flex布局 */
339
- gap: 6px; /* 按钮间距 */
340
- .ant-btn {
341
- border: none; /* 移除边框 */
342
- color: #FFFFFF; /* 字体颜色 */
343
- background-color: #5D5C5C; /* 背景色 */
344
- box-sizing: border-box; /* 盒模型 */
345
- left: 12px; /* 左偏移 */
346
- width: 280px; /* 宽度 */
347
- }
348
- }
349
- }
350
- }
351
- // button2样式
352
- &.h-buttons-button2 {
353
- :deep(.x-buttons) {
354
- margin: -20px 6px -20px 6px;
355
- .ant-btn-group {
356
- width: 100%;
357
- justify-content: space-between;
358
- display: flex; /* 确保flex布局 */
359
- flex-wrap: nowrap; /* 防止换行 */
360
- .ant-btn {
361
- border-radius: 6px; /* 边框圆角 */
362
- border: none; /* 移除边框 */
363
- flex: 0 0 46%; /* flex-grow: 0, flex-shrink: 0, flex-basis: 46% */
364
- min-width: 0; /* 覆盖可能的默认最小宽度 */
365
- font-size: 16px; /* 字体大小 */
366
- height: 32px; /* 高度 */
367
- color: #FFFFFF; /* 字体颜色 */
368
- background-color: #1890FF; /* 背景颜色 */
369
- }
370
- }
371
- }
372
- }
373
- // 与表单项内联使用时的垂直居中对齐样式
374
- &.h-buttons-form-inline {
375
- :deep(.ant-btn-group){
376
- height: 45px;
377
- display: flex;
378
- align-items: center;
379
- }
380
- }
381
- &.h-buttons-width173 {
382
- :deep(.ant-btn) {
383
- width: 173px !important;
384
- }
385
- }
386
- // 按钮无边框+无图标+无阴影
387
- &.h-button-no-style{
388
- :deep(.ant-btn) {
389
- border: 0px;
390
- .anticon{
391
- display: none;
392
- }
393
- }
394
- :deep(.ant-btn-primary){
395
- text-shadow: none;
396
- box-shadow: none;
397
- }
398
- }
399
- // 按钮组边距
400
- &.h-button-border{
401
- border: 1px solid #E5E9F0;
402
- border-radius: 6px;
403
- }
404
- // 按钮撑开整个容器
405
- &.h-buttons-fill-container{
406
- :deep(.x-buttons) {
407
- width: 100%;
408
- .ant-btn-group{
409
- width: 100%;
410
- .ant-btn{
411
- width: 100%;
412
- margin-right: 0px;
413
- }
414
- }
415
- }
416
- }
417
- &.h-buttons-one-button-style {
418
- margin: 0 !important;
419
- padding: 0 !important;
420
- :deep(.x-buttons) {
421
- margin: 0 !important;
422
- padding: 0 !important;
423
- .ant-btn-group {
424
- width: 100%;
425
- height: 32px;
426
- justify-content: space-between;
427
- display: flex;
428
- flex-wrap: nowrap;
429
- .ant-btn {
430
- width: 100%;
431
- margin-right: 0px !important;
432
- min-width: 100% !important;
433
- border-radius: 6px; /* 边框圆角 */
434
- font-size: 18px; /* 字体大小 */
435
- line-height: 26px;
436
- font-weight: bold;
437
- letter-spacing: 14px;
438
- height: 32px; /* 高度 */
439
- color: #FFFFFF; /* 字体颜色 */
440
- background: #0057FE;/* 背景颜色 */
441
- }
442
- }
443
- }
444
- }
445
- // no-boder-style样式 - 无边框样式
446
- &.h-buttons-no-boder-style {
447
- :deep(.ant-btn-group) {
448
- margin-left: -20px;
449
- .ant-btn {
450
- border: none !important;
451
- background: transparent !important;
452
- height: 23px;
453
- opacity: 1;
454
- font-family: "Source Han Sans";
455
- font-size: 16px;
456
- font-weight: normal;
457
- line-height: normal;
458
- letter-spacing: 0em;
459
- color: #313131;
460
- padding: 0;
461
- box-shadow: none;
462
- margin-right: 0;
463
- margin-left: 0;
464
-
465
- // 图标样式
466
- .anticon {
467
- height: 16px;
468
- width: 16px;
469
- opacity: 1;
470
- background: transparent;
471
- display: inline-flex;
472
- align-items: center;
473
- justify-content: center;
474
- color: #94979E;
475
- margin-right: 4px;
476
- }
477
-
478
- &:hover {
479
- background: transparent !important;
480
- color: #313131;
481
- }
482
-
483
- &:focus {
484
- background: transparent !important;
485
- color: #313131;
486
- }
487
- }
488
- }
489
- }
490
- }
491
- </style>
1
+ <script setup lang="ts">
2
+ import XButtons from '@vue2-client/base-client/components/common/XButtons/XButtons.vue'
3
+ import { ref, computed, useAttrs } from 'vue'
4
+
5
+ defineProps({
6
+ // HButtons特有的属性
7
+ buttonStyle: {
8
+ type: String,
9
+ default: 'button24'
10
+ }
11
+ })
12
+
13
+ // 内部 XButtons 实例引用
14
+ const xButtonsRef = ref()
15
+
16
+ // 兼容多种样式配置
17
+ const attrs = useAttrs()
18
+ const wrapperClassObject = computed(() => {
19
+ const a = attrs
20
+ const classes = {}
21
+
22
+ // 通用布尔样式开关(以存在/空字符串/'true' 为真)
23
+ const booleanStyleKeys = [
24
+ 'max-width200',
25
+ 'width173',
26
+ 'button_refresh',
27
+ 'border', 'no-style',
28
+ 'fill-container',
29
+ 'no-boder-style',
30
+ 'one-button-style' // 一个按钮样式,占满整个宽度
31
+ ]
32
+ for (const key of booleanStyleKeys) {
33
+ const val = a[key]
34
+ const truthy = val === true || val === '' || val === 'true'
35
+ if (truthy) classes[`h-buttons-${key}`] = true
36
+ }
37
+ return classes
38
+ })
39
+
40
+ // 暴露方法:获取内部 XButtons 实例
41
+ defineExpose({
42
+ getXButtonsInstance: function () { return xButtonsRef.value }
43
+ })
44
+ </script>
45
+
46
+ <template>
47
+ <div
48
+ class="h-buttons-wrapper"
49
+ :class="[
50
+ `h-buttons-${buttonStyle}`,
51
+ wrapperClassObject
52
+ ]"
53
+ >
54
+ <x-buttons
55
+ ref="xButtonsRef"
56
+ v-bind="$attrs"
57
+ v-on="$listeners"
58
+ >
59
+ <template v-for="(_, name) in $slots" #[name]="slotData">
60
+ <slot :name="name" v-bind="slotData" />
61
+ </template>
62
+ </x-buttons>
63
+ </div>
64
+ </template>
65
+
66
+ <style scoped lang="less">
67
+ .h-buttons-wrapper {
68
+ // 基础样式
69
+ :deep(.ant-btn-group) {
70
+ .ant-btn {
71
+ border-radius: 6px;
72
+ background-color: #FFFFFF;
73
+ border: 1px solid #9499A0;
74
+ color: #313131;
75
+ font-weight: normal;
76
+ letter-spacing: 0em;
77
+ width: 110px;
78
+ font-size: 16px;
79
+ font-family: "Source Han Sans";
80
+ line-height: normal;
81
+ margin-right: 25px;
82
+ height: 32px;
83
+ }
84
+ }
85
+ // button24样式
86
+ &.h-buttons-button24 {
87
+ :deep(.ant-btn-group) {
88
+ .ant-btn {
89
+ border: 1px solid #CDCDCD;
90
+ color: #5D5C5C;
91
+ // top: -100px;
92
+ width: fit-content;
93
+ min-width: 110px;
94
+ }
95
+ }
96
+ }
97
+ // button23样式
98
+ &.h-buttons-button23 {
99
+ :deep(.ant-btn-group) {
100
+ .ant-btn {
101
+ border: none;
102
+ padding: 0 !important;
103
+ color: #FFFFFF;
104
+ border-radius: 50%;
105
+ background-color: #1890FF;
106
+ margin-left: 10px;
107
+ top: -88px;
108
+ width: 30px;
109
+ height: 30px;
110
+ }
111
+ }
112
+ }
113
+ // +号样式(共享基础样式)
114
+ &.h-buttons-table-height-button23,
115
+ &.h-buttons-table-height-button23-no-transform {
116
+ :deep(.ant-btn-group) {
117
+ display: inline-flex;
118
+ align-items: center;
119
+ height: 100%;
120
+
121
+ .ant-btn {
122
+ display: inline-flex;
123
+ align-items: center;
124
+ justify-content: center;
125
+ border: none;
126
+ padding: 0 !important;
127
+ color: #FFFFFF;
128
+ border-radius: 50%;
129
+ background-color: #1890FF;
130
+ margin-left: 10px;
131
+ width: 30px;
132
+ height: 30px;
133
+ }
134
+ }
135
+ }
136
+ // 仅在有分页的场景上移
137
+ &.h-buttons-table-height-button23 {
138
+ :deep(.ant-btn-group) {
139
+ .ant-btn { transform: translateY(-100%); }
140
+ }
141
+ }
142
+ // 居中+悬停高亮的新样式
143
+ &.h-buttons-plus-center {
144
+ :deep(.ant-btn-group) {
145
+ display: flex;
146
+ align-items: center;
147
+ justify-content: center;
148
+ gap: 16px;
149
+
150
+ .ant-btn {
151
+ display: inline-flex;
152
+ align-items: center;
153
+ justify-content: center;
154
+ border: 1px solid #CDCDCD;
155
+ color: #5D5C5C;
156
+ min-width: 110px;
157
+ transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
158
+
159
+ &:hover {
160
+ background-color: #0057FE;
161
+ border-color: #0057FE;
162
+ color: #FFFFFF;
163
+ }
164
+ /* 支持通过 data-type 改变悬停颜色 */
165
+ &[data-type='success']:hover {
166
+ background-color: #34C76E;
167
+ border-color: #34C76E;
168
+ color: #FFFFFF;
169
+ }
170
+ }
171
+ }
172
+ }
173
+ // 按钮布局样式公共部分
174
+ &.h-buttons-button-left,
175
+ &.h-buttons-button-center,
176
+ &.h-buttons-button-right,
177
+ &.h-buttons-button-space-between {
178
+ :deep(.ant-btn-group) {
179
+ width: 100%;
180
+ display: flex;
181
+ flex-wrap: nowrap;
182
+ .ant-btn {
183
+ border: 1px solid #CDCDCD;
184
+ color: #5D5C5C;
185
+ white-space: nowrap;
186
+ overflow: hidden;
187
+ margin-right: 0px;
188
+ text-overflow: ellipsis;
189
+ }
190
+ }
191
+ }
192
+ &.h-buttons-max-width200 {
193
+ :deep(.ant-btn) {
194
+ max-width: 200px !important;
195
+ }
196
+ }
197
+ // button-left样式 - 按钮从左到右排列
198
+ &.h-buttons-button-left {
199
+ :deep(.ant-btn-group) {
200
+ justify-content: flex-start;
201
+ gap: 12px;
202
+ }
203
+ }
204
+ // button-center样式 - 按钮居中排列
205
+ &.h-buttons-button-center {
206
+ :deep(.ant-btn-group) {
207
+ justify-content: center;
208
+ gap: 12px;
209
+ }
210
+ }
211
+ // button-right样式 - 按钮从右到左排列
212
+ &.h-buttons-button-right {
213
+ :deep(.ant-btn-group) {
214
+ justify-content: flex-end;
215
+ gap: 12px;
216
+ }
217
+ }
218
+ // button-space-between样式 - 按钮两端对齐(两个按钮时分布在两端)
219
+ &.h-buttons-button-space-between {
220
+ :deep(.ant-btn-group) {
221
+ justify-content: space-between;
222
+ }
223
+ }
224
+
225
+ // button-icon-tiles样式 - 左侧彩色图标块 + 右侧文字
226
+ &.h-buttons-button-icon-tiles {
227
+ :deep(.ant-btn-group) {
228
+ width: 100%;
229
+ display: flex;
230
+ flex-wrap: wrap; // 允许自动换行
231
+ justify-content: flex-start; // 左对齐
232
+ gap: 0; // 取消统一间距
233
+
234
+ .ant-btn {
235
+ position: relative;
236
+ display: inline-flex;
237
+ align-items: center;
238
+ gap: 10px; // 控制图标与文字间距
239
+ border: 1px solid #E6E8EB;
240
+ font-size: 14px;
241
+ height: 44px;
242
+ padding: 0 10px 0 10px;
243
+ border-radius: 8px;
244
+ min-width: 116px;
245
+ box-shadow: 0 2px 0 rgba(0,0,0,0.02);
246
+ margin-right: 12px; // 用margin控制横向间距,末尾一排自然换行
247
+ }
248
+
249
+ .ant-btn .anticon {
250
+ width: 26px;
251
+ height: 26px;
252
+ display: inline-flex;
253
+ align-items: center;
254
+ justify-content: center;
255
+ border-radius: 6px;
256
+ color: #fff;
257
+ font-size: 14px;
258
+ flex: 0 0 26px; // 固定正方形,防止随文本挤压变形
259
+ box-sizing: border-box;
260
+ }
261
+
262
+ /* 默认蓝色,支持通过 data-type 改变色块(success/warning/error/default)*/
263
+ .ant-btn .anticon { background: #3FA7FF; }
264
+ .ant-btn[data-type='success'] .anticon { background: #34C76E; }
265
+ .ant-btn[data-type='warning'] .anticon { background: #FFA940; }
266
+ .ant-btn[data-type='error'] .anticon { background: #FF7875; }
267
+ .ant-btn[disabled] .anticon { background: #BFBFBF; }
268
+
269
+ /* 图标与文字间距在有图标时更自然 */
270
+ .ant-btn > .anticon + span { margin-left: 10px; }
271
+ }
272
+ }
273
+ // 水印图标与按钮容器布局调整
274
+ &.h-buttons-button-watermark-icon {
275
+ :deep(.watermark-icon) { transform: translate(-50%, -54%) !important; }
276
+ :deep(.x-button) { display: flex !important; }
277
+ :deep(.ant-btn-group) {
278
+ margin: 0 auto;
279
+ display: block;
280
+ }
281
+ }
282
+ &.h-buttons-0padding-button {
283
+ padding: 0px 4px;
284
+ }
285
+ // button25样式 用于会诊申请侧边栏按钮样式
286
+ &.h-buttons-button25 {
287
+ :deep(.x-buttons) {
288
+ .ant-btn-group {
289
+ width: 173px;
290
+ justify-content: space-between;
291
+
292
+ .ant-btn {
293
+ width: 173px;
294
+ }
295
+ }
296
+ }
297
+ }
298
+ &.h-buttons-button_refresh {
299
+ margin-top: 10px;
300
+ }
301
+ // 居中样式 用于门诊收费左侧按钮样式(三个按钮居中样式)
302
+ &.h-buttons-out-button {
303
+ :deep(.x-buttons) {
304
+ margin-top: 2px !important;
305
+ margin-bottom: 10px !important;
306
+ display: flex;
307
+ justify-content: center;
308
+ .ant-btn-group {
309
+ display: flex;
310
+ flex-wrap: nowrap;
311
+ gap: 12px;
312
+ .ant-btn {
313
+ width: 110px;
314
+ height: 32px;
315
+ border-radius: 6px;
316
+ opacity: 1;
317
+ background: #FFFFFF;
318
+ box-sizing: border-box;
319
+ border: 1px solid #9499A0;
320
+ margin-right: 0px;
321
+ /* 允许正常文本渲染,避免省略号导致的“变成点了” */
322
+ font-family: "Source Han Sans";
323
+ font-size: 16px;
324
+ font-weight: normal;
325
+ line-height: normal;
326
+ color: #313131;
327
+ }
328
+ /* 还原子元素默认高度,避免文字被压缩成点 */
329
+ }
330
+ }
331
+ }
332
+ // button15样式 - 垂直排列的深色按钮组
333
+ &.h-buttons-button15 {
334
+ :deep(.x-buttons) {
335
+ margin-top: -22px;
336
+ .ant-btn-group {
337
+ flex-direction: column; /* 按钮垂直排列 */
338
+ display: flex; /* 启用flex布局 */
339
+ gap: 6px; /* 按钮间距 */
340
+ .ant-btn {
341
+ border: none; /* 移除边框 */
342
+ color: #FFFFFF; /* 字体颜色 */
343
+ background-color: #0057FE; /* 背景色 */
344
+ box-sizing: border-box; /* 盒模型 */
345
+ left: 12px; /* 左偏移 */
346
+ width: 280px; /* 宽度 */
347
+ }
348
+ }
349
+ }
350
+ }
351
+ // button2样式
352
+ &.h-buttons-button2 {
353
+ :deep(.x-buttons) {
354
+ margin: -20px 6px -20px 6px;
355
+ .ant-btn-group {
356
+ width: 100%;
357
+ justify-content: space-between;
358
+ display: flex; /* 确保flex布局 */
359
+ flex-wrap: nowrap; /* 防止换行 */
360
+ .ant-btn {
361
+ border-radius: 6px; /* 边框圆角 */
362
+ border: none; /* 移除边框 */
363
+ flex: 0 0 46%; /* flex-grow: 0, flex-shrink: 0, flex-basis: 46% */
364
+ min-width: 0; /* 覆盖可能的默认最小宽度 */
365
+ font-size: 16px; /* 字体大小 */
366
+ height: 32px; /* 高度 */
367
+ color: #FFFFFF; /* 字体颜色 */
368
+ background-color: #1890FF; /* 背景颜色 */
369
+ }
370
+ }
371
+ }
372
+ }
373
+ // 与表单项内联使用时的垂直居中对齐样式
374
+ &.h-buttons-form-inline {
375
+ :deep(.ant-btn-group){
376
+ height: 45px;
377
+ display: flex;
378
+ align-items: center;
379
+ }
380
+ }
381
+ &.h-buttons-width173 {
382
+ :deep(.ant-btn) {
383
+ width: 173px !important;
384
+ }
385
+ }
386
+ // 按钮无边框+无图标+无阴影
387
+ &.h-button-no-style{
388
+ :deep(.ant-btn) {
389
+ border: 0px;
390
+ .anticon{
391
+ display: none;
392
+ }
393
+ }
394
+ :deep(.ant-btn-primary){
395
+ text-shadow: none;
396
+ box-shadow: none;
397
+ }
398
+ }
399
+ // 按钮组边距
400
+ &.h-button-border{
401
+ border: 1px solid #E5E9F0;
402
+ border-radius: 6px;
403
+ }
404
+ // 按钮撑开整个容器
405
+ &.h-buttons-fill-container{
406
+ :deep(.x-buttons) {
407
+ width: 100%;
408
+ .ant-btn-group{
409
+ width: 100%;
410
+ .ant-btn{
411
+ width: 100%;
412
+ margin-right: 0px;
413
+ }
414
+ }
415
+ }
416
+ }
417
+ &.h-buttons-one-button-style {
418
+ margin: 0 !important;
419
+ padding: 0 !important;
420
+ :deep(.x-buttons) {
421
+ margin: 0 !important;
422
+ padding: 0 !important;
423
+ .ant-btn-group {
424
+ width: 100%;
425
+ height: 32px;
426
+ justify-content: space-between;
427
+ display: flex;
428
+ flex-wrap: nowrap;
429
+ .ant-btn {
430
+ width: 100%;
431
+ margin-right: 0px !important;
432
+ min-width: 100% !important;
433
+ border-radius: 6px; /* 边框圆角 */
434
+ font-size: 18px; /* 字体大小 */
435
+ line-height: 26px;
436
+ font-weight: bold;
437
+ letter-spacing: 14px;
438
+ height: 32px; /* 高度 */
439
+ color: #FFFFFF; /* 字体颜色 */
440
+ background: #0057FE;/* 背景颜色 */
441
+ }
442
+ }
443
+ }
444
+ }
445
+ // no-boder-style样式 - 无边框样式
446
+ &.h-buttons-no-boder-style {
447
+ :deep(.ant-btn-group) {
448
+ margin-left: -20px;
449
+ .ant-btn {
450
+ border: none !important;
451
+ background: transparent !important;
452
+ height: 23px;
453
+ opacity: 1;
454
+ font-family: "Source Han Sans";
455
+ font-size: 16px;
456
+ font-weight: normal;
457
+ line-height: normal;
458
+ letter-spacing: 0em;
459
+ color: #313131;
460
+ padding: 0;
461
+ box-shadow: none;
462
+ margin-right: 0;
463
+ margin-left: 0;
464
+
465
+ // 图标样式
466
+ .anticon {
467
+ height: 16px;
468
+ width: 16px;
469
+ opacity: 1;
470
+ background: transparent;
471
+ display: inline-flex;
472
+ align-items: center;
473
+ justify-content: center;
474
+ color: #94979E;
475
+ margin-right: 4px;
476
+ }
477
+
478
+ &:hover {
479
+ background: transparent !important;
480
+ color: #313131;
481
+ }
482
+
483
+ &:focus {
484
+ background: transparent !important;
485
+ color: #313131;
486
+ }
487
+ }
488
+ }
489
+ }
490
+ }
491
+ </style>