vue2-client 1.16.80 → 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 (27) hide show
  1. package/package.json +1 -1
  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/HFormTable/HFormTable.vue +16 -1
  9. package/src/base-client/components/common/HIS/HTab/HTab.vue +16 -11
  10. package/src/base-client/components/common/XCollapse/XCollapse.vue +1 -1
  11. package/src/base-client/components/common/XInput/XInput.vue +25 -1
  12. package/src/base-client/components/common/XReport/XReportHospitalizationDemo.vue +45 -0
  13. package/src/base-client/components/his/XCheckbox/XCheckbox.vue +31 -2
  14. package/src/base-client/components/his/XHDescriptions/XHDescriptions.vue +115 -28
  15. package/src/base-client/components/his/XIcon/XIcon.vue +73 -73
  16. package/src/base-client/components/his/XIcon/index.js +3 -3
  17. package/src/base-client/components/his/XIcon/index.md +177 -177
  18. package/src/base-client/components/his/XRadio/XRadio.vue +17 -1
  19. package/src/base-client/components/his/XSidebar/XSidebar.vue +15 -14
  20. package/src/base-client/components/his/XTimeSelect/XTimeSelect.vue +72 -3
  21. package/src/base-client/components/his/XTitle/XTitle.vue +24 -2
  22. package/src/router/async/router.map.js +1 -2
  23. package/src-base-client/components/his/XCharge/README.md +0 -0
  24. package/src-base-client/components/his/XCharge/XCharge.vue +0 -0
  25. package/.npmignore +0 -21
  26. package/.serena/.npmignore +0 -1
  27. package/yarn.lock +0 -11468
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vue2-client",
3
- "version": "1.16.80",
3
+ "version": "1.16.82",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint",
@@ -20,7 +20,8 @@ const wrapperClassObject = computed(() => {
20
20
  const booleanStyleKeys = [
21
21
  'button-row-0margin',
22
22
  'top-hidden',
23
- 'dialog-style'
23
+ 'dialog-style',
24
+ 'button-style'
24
25
  ]
25
26
  for (const key of booleanStyleKeys) {
26
27
  const val = a[key]
@@ -375,5 +376,19 @@ const isCustomPagination = computed(() => {
375
376
  margin: 0px;
376
377
  }
377
378
  }
379
+ // crud按钮样式
380
+ &.h-form-table-button-style {
381
+ :deep(.ant-btn){
382
+ border-radius: 6px;
383
+ background-color: #FFFFFF;
384
+ border: 1px solid #9499A0;
385
+ color: #313131;
386
+ font-weight: normal;
387
+ letter-spacing: 0em;
388
+ font-size: 16px;
389
+ font-family: "Source Han Sans";
390
+ line-height: normal;
391
+ }
392
+ }
378
393
  }
379
394
  </style>
@@ -129,13 +129,15 @@ defineExpose({
129
129
  :deep(.ant-tabs-tab-next) {
130
130
  display: none;
131
131
  }
132
-
132
+ :deep(.ant-tabs-nav-wrap) {
133
+ margin-top: 18px !important;
134
+ margin-bottom: 0 !important;
135
+ }
133
136
  :deep(.ant-tabs-nav) {
134
137
  // 去除导航容器默认左右内边距,避免收缩时左侧多出一截
135
138
  .ant-tabs-nav-container,
136
139
  .ant-tabs-nav-scroll {
137
- margin-left: 0 !important;
138
- margin-right: 0 !important;
140
+ margin: 0px;
139
141
  }
140
142
 
141
143
  // 移除左右切换箭头带来的占位
@@ -144,11 +146,9 @@ defineExpose({
144
146
  display: none !important;
145
147
  width: 0 !important;
146
148
  }
147
-
148
149
  .ant-tabs-tab-next-icon {
149
150
  display: none;
150
151
  }
151
-
152
152
  .ant-tabs-tab {
153
153
  background-color: transparent;
154
154
  border-radius: 6px 6px 0 0;
@@ -156,26 +156,31 @@ defineExpose({
156
156
  font-weight: bold;
157
157
  width: 134px;
158
158
  font-size: 18px;
159
- line-height: 10px;
159
+ line-height: 26px;
160
160
  font-family: "Source Han Sans";
161
161
  transition: all 0.3s;
162
162
  height: 32px;
163
163
  text-align: center;
164
+ margin: 0 !important;
165
+ padding: 0 !important;
164
166
  }
165
-
166
167
  .ant-tabs-tab-active {
167
168
  background-color: #0057FE;
168
169
  color: #ffffff;
169
170
  width: 134px;
170
- line-height: 10px;
171
+ line-height: 26px;
171
172
  height: 32px;
172
173
  text-align: center;
174
+ margin: 0 !important;
175
+ padding: 0 !important;
173
176
  }
174
177
  }
175
178
 
176
179
  :deep(.ant-tabs-bar) {
177
180
  border-bottom: 2px solid #0057FE;
178
- margin: 20px 10px 0 10px;
181
+ margin: 0px 0px;
182
+ width: 100%;
183
+ height: 50px;
179
184
  }
180
185
 
181
186
  // 滚动状态下的容器左右内边距清零,避免左侧多出一截
@@ -190,7 +195,7 @@ defineExpose({
190
195
 
191
196
  :deep(.ant-tabs-ink-bar) {
192
197
  background-color: transparent;
193
- bottom: -1px;
198
+ bottom: 0px;
194
199
  display: none;
195
200
  height: 0;
196
201
  }
@@ -406,7 +411,7 @@ defineExpose({
406
411
  padding-top: 2px;
407
412
  }
408
413
  :deep(.ant-tabs-extra-content){
409
- line-height: 0px !important;
414
+ line-height: 0px !important;
410
415
  }
411
416
  }
412
417
  }
@@ -688,7 +688,7 @@ export default {
688
688
  }
689
689
 
690
690
  /* 将右侧留白转移到标题与第一项之间 */
691
- .header-content { padding-right: 0; }
691
+ .header-content { padding-right: 0px; gap: 5px; }
692
692
  .header-content .info-item:first-of-type { margin-left: 24px !important; }
693
693
  .header-content .time-item:first-of-type { margin-left: 24px !important; }
694
694
 
@@ -55,7 +55,8 @@ export default {
55
55
  const attrs = this.$attrs || {}
56
56
  const classes = {}
57
57
  const booleanStyleKeys = [
58
- 'medical-history'
58
+ 'medical-history',
59
+ 'yizhu-input'
59
60
  ]
60
61
  booleanStyleKeys.forEach(key => {
61
62
  const val = attrs[key]
@@ -165,6 +166,29 @@ export default {
165
166
  color: #A7A7A7;
166
167
  }
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
+ }
168
192
  }
169
193
 
170
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>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="x-checkbox-container">
2
+ <div class="x-checkbox-container" :class="wrapperClassObject()">
3
3
  <a-checkbox-group v-model="innerValue" @change="onChange" class="x-checkbox-group">
4
4
  <div v-for="item in data" :key="item.value" class="x-checkbox-item-container">
5
5
  <a-checkbox :value="item.value" class="x-checkbox-item">
@@ -70,6 +70,19 @@ export default {
70
70
  }
71
71
  })
72
72
  },
73
+ wrapperClassObject () {
74
+ const attrs = this.$attrs || {}
75
+ const classes = {}
76
+ const booleanStyleKeys = [
77
+ 'compact'
78
+ ]
79
+ booleanStyleKeys.forEach(key => {
80
+ const val = attrs[key]
81
+ const truthy = val === true || val === '' || val === 'true'
82
+ if (truthy) classes[`x-checkbox-${key}`] = true
83
+ })
84
+ return classes
85
+ },
73
86
  onChange (checkedValues) {
74
87
  this.innerValue = checkedValues
75
88
  this.$emit('change', checkedValues)
@@ -78,7 +91,7 @@ export default {
78
91
  }
79
92
  </script>
80
93
 
81
- <style scoped>
94
+ <style scoped lang="less">
82
95
  .x-checkbox-container {
83
96
  display: flex;
84
97
  flex-direction: column;
@@ -102,4 +115,20 @@ export default {
102
115
  .x-checkbox-item {
103
116
  margin-bottom: 8px;
104
117
  }
118
+ .x-checkbox-compact {
119
+ &.x-checkbox-container,
120
+ .x-checkbox-container {
121
+ :deep(.x-checkbox-item-container){
122
+ padding: 0px !important;
123
+ flex: auto !important;
124
+ }
125
+ :deep(.x-checkbox-item){
126
+ margin: 0px;
127
+ }
128
+ :deep(.x-checkbox-item) > span:last-child {
129
+ padding-right: 2px;
130
+ padding-left: 2px;
131
+ }
132
+ }
133
+ }
105
134
  </style>
@@ -7,8 +7,8 @@
7
7
  :type="(config && config.detailsConfig && config.detailsConfig.buttonType) || 'link'"
8
8
  @click="toggleDetails"
9
9
  >
10
- <a-icon :type="showAllItems ? 'up' : 'down'" />
11
10
  {{ showAllItems ? '收起' : ((config && config.detailsConfig && config.detailsConfig.buttonText) || '详情') }}
11
+ <a-icon :type="showAllItems ? 'up' : 'down'" />
12
12
  </a-button>
13
13
  </div>
14
14
 
@@ -28,12 +28,9 @@
28
28
  :class="{ 'with-divider': item.isLine }">
29
29
  <template #label>
30
30
  <div :class="['label-wrapper', { 'with-avatar': item.showAvatar }]">
31
- <a-avatar
32
- v-if="item.showAvatar"
33
- :size="item.avatar.size"
34
- :icon="item.avatar.icon"
35
- :style="{ background: item.avatar.background }"
36
- />
31
+ <div v-if="item.showAvatar" class="gender-icon">
32
+ <img :src="maleIcon" alt="male" class="gender-img" />
33
+ </div>
37
34
  <span class="label-text">{{ item.label }}</span>
38
35
  </div>
39
36
  </template>
@@ -67,12 +64,9 @@
67
64
  :colon="item.colon !== false">
68
65
  <template #label>
69
66
  <div :class="['label-wrapper', { 'with-avatar': item.showAvatar }]">
70
- <a-avatar
71
- v-if="item.showAvatar"
72
- :size="item.avatar.size"
73
- :icon="item.avatar.icon"
74
- :style="{ background: item.avatar.background }"
75
- />
67
+ <div v-if="item.showAvatar" class="gender-icon">
68
+ <img :src="maleIcon" alt="male" class="gender-img" />
69
+ </div>
76
70
  <span class="label-text">{{ item.label }}</span>
77
71
  </div>
78
72
  </template>
@@ -161,12 +155,9 @@
161
155
  :class="['description-item', { 'with-divider': item.isLine }]"
162
156
  >
163
157
  <div :class="['label-wrapper', { 'with-avatar': item.showAvatar }]">
164
- <a-avatar
165
- v-if="item.showAvatar"
166
- :size="item.avatar.size"
167
- :icon="item.avatar.icon"
168
- :style="{ background: item.avatar.background }"
169
- />
158
+ <div v-if="item.showAvatar" class="gender-icon">
159
+ <img :src="maleIcon" alt="male" class="gender-img" />
160
+ </div>
170
161
  <span class="label-text">{{ item.label }}:</span>
171
162
  </div>
172
163
  <a-tooltip
@@ -199,12 +190,9 @@
199
190
  class="description-item"
200
191
  >
201
192
  <div :class="['label-wrapper', { 'with-avatar': item.showAvatar }]">
202
- <a-avatar
203
- v-if="item.showAvatar"
204
- :size="item.avatar.size"
205
- :icon="item.avatar.icon"
206
- :style="{ background: item.avatar.background }"
207
- />
193
+ <div v-if="item.showAvatar" class="gender-icon">
194
+ <img :src="maleIcon" alt="male" class="gender-img" />
195
+ </div>
208
196
  <span class="label-text">{{ item.label }}:</span>
209
197
  </div>
210
198
  <div
@@ -314,7 +302,8 @@ export default {
314
302
  hiddenConfig: '-1^',
315
303
  data: null,
316
304
  config: null,
317
- showAllItems: false // 控制是否显示所有标签
305
+ showAllItems: false, // 控制是否显示所有标签
306
+ maleIcon: require('@vue2-client/assets/svg/male.svg')
318
307
  }
319
308
  },
320
309
  props: {
@@ -339,9 +328,11 @@ export default {
339
328
  'description',
340
329
  'no-padding',
341
330
  'medical-history',
331
+ 'patient-style',
342
332
  'margin-top-12',
343
333
  'padding-left15',
344
- 'line-height30'
334
+ 'line-height30',
335
+ 'border1'
345
336
  ]
346
337
  booleanStyleKeys.forEach(key => {
347
338
  const val = attrs[key]
@@ -350,6 +341,8 @@ export default {
350
341
  })
351
342
  const size = attrs.size
352
343
  if (size && typeof size === 'string') classes[`xhdesc-size-${size}`] = true
344
+ // 展开态样式开关(用于 patient-style 动态高度)
345
+ if (this.showAllItems && this.config && this.config.detailsConfig) classes['xhdesc-open'] = true
353
346
  return classes
354
347
  },
355
348
  // 获取详情按钮应该显示在第几个标签后
@@ -454,7 +447,6 @@ export default {
454
447
  <style scoped lang="less">
455
448
  .patient-info-descriptions {
456
449
  background: #fff;
457
- padding: 12px;
458
450
  border-radius: 4px;
459
451
  width: 100%;
460
452
  }
@@ -716,6 +708,93 @@ export default {
716
708
  }
717
709
  }
718
710
  }
711
+ /* 病患信息样式开关:patient-style */
712
+ .xhdesc-patient-style {
713
+ height: 41px;
714
+ border-radius: 6px;
715
+ opacity: 1;
716
+ background: #FFFFFF;
717
+ box-sizing: border-box;
718
+ border: 0px solid #E5E9F0;
719
+ padding-bottom: 0px !important;
720
+ width: 100%;
721
+ &.patient-info-descriptions,
722
+ .patient-info-descriptions {
723
+ border: 0px solid #E5E9F0;
724
+ border-radius: 6px;
725
+ background: #FFFFFF;
726
+ height: 41px;
727
+ display: flex;
728
+ align-items: center;
729
+
730
+ /* 标签字体(label):统一 16px,与值一致 */
731
+ ::v-deep .label-wrapper .label-text {
732
+ font-family: "Source Han Sans";
733
+ font-size: 16px !important;
734
+ font-weight: 400 !important; /* 确保不加粗 */
735
+ line-height: 23px !important;
736
+ letter-spacing: 0em;
737
+ font-feature-settings: "kern" on;
738
+ color: #5D5C5C;
739
+ }
740
+
741
+ /* 头像与标签的间距 9px */
742
+ ::v-deep .label-wrapper.with-avatar {
743
+ gap: 9px;
744
+ }
745
+
746
+ /* 性别图标样式 */
747
+ .gender-icon {
748
+ margin-top: 2px;
749
+ }
750
+ .gender-img {
751
+ width: 20px;
752
+ height: 20px;
753
+ opacity: 1;
754
+ display: inline-block;
755
+ }
756
+
757
+ /* 详情箭头在文字右侧:颜色、间距、方向(不旋转) */
758
+ ::v-deep .detail-button-wrapper .ant-btn .anticon {
759
+ margin-left: 4px;
760
+ color: #94979E;
761
+ opacity: 1;
762
+ }
763
+
764
+ /* 详情按钮文字字体规范 */
765
+ ::v-deep .detail-button-wrapper .ant-btn,
766
+ ::v-deep .detail-button-wrapper .ant-btn span {
767
+ font-family: "Source Han Sans";
768
+ font-size: 16px;
769
+ color: #5D5C5C;
770
+ }
771
+
772
+ /* 值字体(content) */
773
+ ::v-deep .ant-descriptions-item-content,
774
+ ::v-deep .content-wrapper,
775
+ .medical-history-text {
776
+ font-family: "Source Han Sans";
777
+ font-size: 16px !important;
778
+ font-weight: 700;
779
+ line-height: 23px !important;
780
+ letter-spacing: 0em;
781
+ font-feature-settings: "kern" on;
782
+ color: #5D5C5C;
783
+ }
784
+ }
785
+ }
786
+
787
+ /* 展开态:patient-style 自适应高度与顶部对齐,防止布局错乱 */
788
+ .xhdesc-patient-style.xhdesc-open,
789
+ .xhdesc-open .patient-info-descriptions.xhdesc-patient-style,
790
+ .xhdesc-open .xhdesc-patient-style .patient-info-descriptions {
791
+ height: auto;
792
+ }
793
+ .xhdesc-patient-style.xhdesc-open .patient-info-descriptions,
794
+ .xhdesc-open .patient-info-descriptions.xhdesc-patient-style,
795
+ .xhdesc-open .xhdesc-patient-style .patient-info-descriptions {
796
+ align-items: flex-start;
797
+ }
719
798
  // 去除住院收费页面两个描述列表之间的间距
720
799
  .xhdesc-margin-top-12 {
721
800
  margin-top: -12px;
@@ -941,4 +1020,12 @@ export default {
941
1020
  text-align: right;
942
1021
  }
943
1022
  }
1023
+ /* 加边框 */
1024
+ .xhdesc-border1 {
1025
+ &.patient-info-descriptions,
1026
+ .patient-info-descriptions {
1027
+ border: 1px solid #E5E9F0;
1028
+ border-radius: 6px;
1029
+ }
1030
+ }
944
1031
  </style>
@@ -1,73 +1,73 @@
1
- <template>
2
- <svg
3
- class="x-icon anticon"
4
- xmlns="http://www.w3.org/2000/svg"
5
- width="1em"
6
- height="1em"
7
- :viewBox="viewBox"
8
- :style="iconStyle"
9
- >
10
- <path
11
- v-for="(path, index) in iconPaths"
12
- :key="index"
13
- :fill="path.fill || 'currentColor'"
14
- :d="path.d"
15
- />
16
- </svg>
17
- </template>
18
-
19
- <script setup>
20
- import { computed } from 'vue'
21
-
22
- const props = defineProps({
23
- // 图标名称
24
- name: {
25
- type: String,
26
- required: true
27
- }
28
- })
29
-
30
- // 简化的图标配置(先确保基本功能正常)
31
- const iconConfigs = {
32
- icon001: {
33
- viewBox: '0 0 13.066129684448242 14',
34
- paths: [{
35
- d: 'M0.72589612,0C0.32499826,0,0,0.34822667,0,0.77777773L0,13.222221C0,13.651789,0.32499826,14,0.72589612,14L12.340235,14C12.741146,14,13.066131,13.651789,13.066131,13.222221L13.066131,0.77777773C13.066131,0.34822667,12.741146,0,12.340235,0L0.72589612,0ZM2.9035845,4.6666665L2.9035845,3.1111109L10.162547,3.1111109L10.162547,4.6666665L2.9035845,4.6666665ZM2.9035845,7.7777777L2.9035845,6.2222219L10.162547,6.2222219L10.162547,7.7777777L2.9035845,7.7777777ZM10.162547,10.888889L2.9035845,10.888889L2.9035845,9.333333L10.162547,9.333333L10.162547,10.888889Z',
36
- fill: 'currentColor'
37
- }]
38
- }
39
- }
40
-
41
- // 计算图标配置
42
- const iconConfig = computed(() => {
43
- return iconConfigs[props.name] || {
44
- viewBox: '0 0 24 24',
45
- paths: []
46
- }
47
- })
48
-
49
- // 计算 viewBox
50
- const viewBox = computed(() => {
51
- return iconConfig.value.viewBox
52
- })
53
-
54
- // 计算图标路径
55
- const iconPaths = computed(() => {
56
- return iconConfig.value.paths
57
- })
58
-
59
- // 计算样式
60
- const iconStyle = computed(() => ({
61
- ...props.style
62
- }))
63
- </script>
64
-
65
- <style scoped>
66
- .x-icon {
67
- display: inline-flex;
68
- align-items: center;
69
- justify-content: center;
70
- vertical-align: middle;
71
- line-height: 1;
72
- }
73
- </style>
1
+ <template>
2
+ <svg
3
+ class="x-icon anticon"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="1em"
6
+ height="1em"
7
+ :viewBox="viewBox"
8
+ :style="iconStyle"
9
+ >
10
+ <path
11
+ v-for="(path, index) in iconPaths"
12
+ :key="index"
13
+ :fill="path.fill || 'currentColor'"
14
+ :d="path.d"
15
+ />
16
+ </svg>
17
+ </template>
18
+
19
+ <script setup>
20
+ import { computed } from 'vue'
21
+
22
+ const props = defineProps({
23
+ // 图标名称
24
+ name: {
25
+ type: String,
26
+ required: true
27
+ }
28
+ })
29
+
30
+ // 简化的图标配置(先确保基本功能正常)
31
+ const iconConfigs = {
32
+ icon001: {
33
+ viewBox: '0 0 13.066129684448242 14',
34
+ paths: [{
35
+ d: 'M0.72589612,0C0.32499826,0,0,0.34822667,0,0.77777773L0,13.222221C0,13.651789,0.32499826,14,0.72589612,14L12.340235,14C12.741146,14,13.066131,13.651789,13.066131,13.222221L13.066131,0.77777773C13.066131,0.34822667,12.741146,0,12.340235,0L0.72589612,0ZM2.9035845,4.6666665L2.9035845,3.1111109L10.162547,3.1111109L10.162547,4.6666665L2.9035845,4.6666665ZM2.9035845,7.7777777L2.9035845,6.2222219L10.162547,6.2222219L10.162547,7.7777777L2.9035845,7.7777777ZM10.162547,10.888889L2.9035845,10.888889L2.9035845,9.333333L10.162547,9.333333L10.162547,10.888889Z',
36
+ fill: 'currentColor'
37
+ }]
38
+ }
39
+ }
40
+
41
+ // 计算图标配置
42
+ const iconConfig = computed(() => {
43
+ return iconConfigs[props.name] || {
44
+ viewBox: '0 0 24 24',
45
+ paths: []
46
+ }
47
+ })
48
+
49
+ // 计算 viewBox
50
+ const viewBox = computed(() => {
51
+ return iconConfig.value.viewBox
52
+ })
53
+
54
+ // 计算图标路径
55
+ const iconPaths = computed(() => {
56
+ return iconConfig.value.paths
57
+ })
58
+
59
+ // 计算样式
60
+ const iconStyle = computed(() => ({
61
+ ...props.style
62
+ }))
63
+ </script>
64
+
65
+ <style scoped>
66
+ .x-icon {
67
+ display: inline-flex;
68
+ align-items: center;
69
+ justify-content: center;
70
+ vertical-align: middle;
71
+ line-height: 1;
72
+ }
73
+ </style>
@@ -1,3 +1,3 @@
1
- import XIcon from './XIcon.vue'
2
-
3
- export default XIcon
1
+ import XIcon from './XIcon.vue'
2
+
3
+ export default XIcon