vue2-client 1.22.7 → 1.22.9

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 (88) hide show
  1. package/.env.his +19 -19
  2. package/.idea/CopilotChatHistory.xml +39 -0
  3. package/.idea/MarsCodeWorkspaceAppSettings.xml +8 -0
  4. package/.idea/af-vue2-client.iml +7 -4
  5. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  6. package/.idea/migrateChatHistory.xml +10 -0
  7. package/package.json +1 -1
  8. package/src/base-client/components/common/HIS/HForm/HForm.vue +1186 -1186
  9. package/src/base-client/components/common/XFormTable/demo.vue +134 -53
  10. package/src/base-client/components/common/XInspectionDetailDrawer/components/InspectionSummary.vue +8 -0
  11. package/src/base-client/components/common/XInspectionDetailDrawer/services/inspectionService.js +6 -1
  12. package/src/base-client/components/common/XMarkdownViewer/demo.vue +102 -102
  13. package/src/base-client/components/his/XTransfer/index.md +327 -327
  14. package/src/pages/WorkflowDetail/WorkFlowDemo4.vue +127 -0
  15. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +417 -417
  16. package/.history/.eslintrc_20260521171150.js +0 -74
  17. package/.history/.eslintrc_20260521171213.js +0 -74
  18. package/.history/src/base-client/components/common/HIS/HAddNativeForm/HAddNativeForm_20260601154443.vue +0 -726
  19. package/.history/src/base-client/components/common/HIS/HAddNativeForm/HAddNativeForm_20260601154700.vue +0 -478
  20. package/.history/src/base-client/components/common/HIS/HButtons/HButtons_20260512175435.vue +0 -706
  21. package/.history/src/base-client/components/common/HIS/HButtons/HButtons_20260512175450.vue +0 -694
  22. package/.history/src/base-client/components/common/HIS/HButtons/HButtons_20260611152602.vue +0 -755
  23. package/.history/src/base-client/components/common/HIS/HForm/HForm_20260513145941.vue +0 -524
  24. package/.history/src/base-client/components/common/HIS/HForm/HForm_20260513153133.vue +0 -731
  25. package/.history/src/base-client/components/common/HIS/HForm/HForm_20260513160316.vue +0 -525
  26. package/.history/src/base-client/components/common/HIS/HForm/HForm_20260601144150.vue +0 -1046
  27. package/.history/src/base-client/components/common/HIS/HFormTable/HFormTable_20260310142713.vue +0 -512
  28. package/.history/src/base-client/components/common/HIS/HFormTable/HFormTable_20260310145118.vue +0 -511
  29. package/.history/src/base-client/components/common/HIS/HFormTable/HFormTable_20260311094834.vue +0 -696
  30. package/.history/src/base-client/components/common/HIS/HFormTable/HFormTable_20260320143028.vue +0 -693
  31. package/.history/src/base-client/components/common/HIS/HFormTable/HFormTable_20260409101450.vue +0 -677
  32. package/.history/src/base-client/components/common/HIS/HTab/HTab_20260508164645.vue +0 -758
  33. package/.history/src/base-client/components/common/HIS/HTab/HTab_20260508164714.vue +0 -693
  34. package/.history/src/base-client/components/common/HIS/HTab/HTab_20260508171651.vue +0 -716
  35. package/.history/src/base-client/components/common/HIS/HTab/HTab_20260509133717.vue +0 -695
  36. package/.history/src/base-client/components/common/HIS/HTab/HTab_20260509171115.vue +0 -664
  37. package/.history/src/base-client/components/common/XAddNativeForm/XAddNativeForm_20260513140637.vue +0 -1455
  38. package/.history/src/base-client/components/common/XAddNativeForm/XAddNativeForm_20260513140935.vue +0 -1441
  39. package/.history/src/base-client/components/common/XAddNativeForm/XAddNativeForm_20260513150818.vue +0 -1441
  40. package/.history/src/base-client/components/common/XAddNativeForm/XAddNativeForm_20260513153119.vue +0 -1442
  41. package/.history/src/base-client/components/common/XAddNativeForm/XAddNativeForm_20260513153126.vue +0 -1486
  42. package/.history/src/base-client/components/common/XForm/XFormItem_20260513140854.vue +0 -1607
  43. package/.history/src/base-client/components/common/XMarkdownViewer/XMarkdownViewer_20260519140403.vue +0 -643
  44. package/.history/src/base-client/components/common/XMarkdownViewer/XMarkdownViewer_20260519140829.vue +0 -628
  45. package/.history/src/base-client/components/common/XMarkdownViewer/demo_20260519142824.vue +0 -104
  46. package/.history/src/base-client/components/common/XMarkdownViewer/demo_20260519143155.vue +0 -102
  47. package/.history/src/base-client/components/common/XReportGrid/XReport_20260309171231.vue +0 -1241
  48. package/.history/src/base-client/components/common/XReportGrid/XReport_20260309171441.vue +0 -1223
  49. package/.history/src/base-client/components/his/HAi/HAi_20260612174826.vue +0 -472
  50. package/.history/src/base-client/components/his/HAi/HAi_20260612175839.vue +0 -538
  51. package/.history/src/base-client/components/his/HAi/HAi_20260615103331.vue +0 -650
  52. package/.history/src/base-client/components/his/XHDescriptions/XHDescriptions_20260424134504.vue +0 -1469
  53. package/.history/src/base-client/components/his/XSidebar/XSidebar_20260610171133.vue +0 -788
  54. package/.history/src/base-client/components/his/XSidebar/XSidebar_20260610171151.vue +0 -780
  55. package/.history/src/base-client/components/his/XTransfer/XTransfer_20260511170841.vue +0 -585
  56. package/.history/src/base-client/components/his/XTransfer/XTransfer_20260511171138.vue +0 -787
  57. package/.history/src/base-client/components/his/XTransfer/XTransfer_20260512141830.vue +0 -739
  58. package/.history/src/components/STable/index_20260409155138.js +0 -806
  59. package/.history/src/components/STable/index_20260409155218.js +0 -814
  60. package/.history/src/expression/core/Expression_20260305164427.js +0 -1371
  61. package/.history/src/expression/core/Expression_20260305170258.js +0 -1358
  62. package/.history/src/expression/core/Program_20260305111830.js +0 -944
  63. package/.history/src/expression/core/Program_20260305112041.js +0 -931
  64. package/.history/src/logic/LogicRunner_20260304154306.js +0 -170
  65. package/.history/src/logic/LogicRunner_20260304155553.js +0 -112
  66. package/.history/src/logic/LogicRunner_20260305105834.js +0 -112
  67. package/.history/src/logic/LogicRunner_20260305112718.js +0 -129
  68. package/.history/src/logic/LogicRunner_20260305182436.js +0 -133
  69. package/.history/src/logic/LogicRunner_20260306151301.js +0 -213
  70. package/.history/src/logic/LogicRunner_20260306152419.js +0 -213
  71. package/.history/src/logic/plugins/common/DateTools_20260305154159.js +0 -61
  72. package/.history/src/logic/plugins/common/DateTools_20260305154217.js +0 -44
  73. package/.history/src/logic/plugins/common/DateTools_20260305161014.js +0 -44
  74. package/.history/src/logic/plugins/common/HttpTools_20260305164352.js +0 -80
  75. package/.history/src/logic/plugins/common/HttpTools_20260305170258.js +0 -75
  76. package/.history/src/logic/plugins/common/HttpTools_20260305171634.js +0 -75
  77. package/.history/src/logic/plugins/common/HttpTools_20260306152419.js +0 -72
  78. package/.history/src/services/api/restTools_20260427142149.js +0 -245
  79. package/.history/src/services/api/restTools_20260427142853.js +0 -230
  80. package/.history/src/services/api/restTools_20260519135558.js +0 -230
  81. package/.history/src/services/api/restTools_20260519140825.js +0 -230
  82. package/.history/src/services/api/restTools_20260519151223.js +0 -230
  83. package/.history/src/utils/indexedDB_20260306150918.js +0 -593
  84. package/.history/src/utils/indexedDB_20260306151301.js +0 -586
  85. package/.idea/codeStyles/Project.xml +0 -62
  86. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  87. package/.idea/misc.xml +0 -6
  88. package/preview-input-box.html +0 -180
@@ -1,758 +0,0 @@
1
- <script setup>
2
- import XTab from '@vue2-client/base-client/components/common/XTab/XTab.vue'
3
- import { ref, computed, useAttrs, useSlots, watch, onMounted } from 'vue'
4
- import { getConfigByName } from '@vue2-client/services/api/common'
5
-
6
- const props = defineProps({
7
- // 标签栏右侧附加区域的配置名(可选)。提供时将自动加载配置并渲染到 tabBar 右侧。
8
- tabBarExtraConfig: {
9
- type: String,
10
- default: undefined
11
- },
12
- // 控制标签间距,覆盖内部 XTab 的默认 10px;默认置 0 清除外边距
13
- tabBarGutter: {
14
- type: Number,
15
- default: 0
16
- }
17
- })
18
-
19
- // 兼容多种样式配置
20
- const attrs = useAttrs()
21
-
22
- // 是否启用 expand-full 功能
23
- const isExpandFull = computed(() => {
24
- const val = attrs['expand-full']
25
- return val === true || val === '' || val === 'true'
26
- })
27
-
28
- // expand-full 元素的 ref
29
- const wrapperRef = ref(null)
30
-
31
- // expand-full 功能:在 onMounted 时直接设置内容区域的宽度
32
- onMounted(() => {
33
- if (!isExpandFull.value || !wrapperRef.value) return
34
-
35
- // 获取组件挂载后的 DOM 元素
36
- const wrapper = wrapperRef.value
37
- const tabContent = wrapper.querySelector('.ant-tabs-content')
38
-
39
- if (tabContent) {
40
- // 获取当前容器的宽度
41
- const wrapperWidth = wrapper.offsetWidth
42
- // 向右扩展的宽度(使用 CSS 变量或默认值)
43
- const expandWidthStr = attrs['--tab-expand-width'] || '100px'
44
-
45
- // 解析扩展宽度
46
- let expandWidth = 100 // 默认 100px
47
- if (expandWidthStr.endsWith('px')) {
48
- expandWidth = parseFloat(expandWidthStr)
49
- } else if (expandWidthStr.endsWith('%')) {
50
- expandWidth = (parseFloat(expandWidthStr) / 100) * wrapperWidth
51
- } else if (expandWidthStr.includes('calc')) {
52
- // 处理 calc 表达式
53
- expandWidth = wrapperWidth * (3 / 21) // 默认按 3/21 比例
54
- }
55
-
56
- // 设置内容区域宽度
57
- tabContent.style.width = `calc(100% + ${expandWidth}px)`
58
- tabContent.style.position = 'relative'
59
- tabContent.style.left = '0'
60
- }
61
- })
62
-
63
- const wrapperClassObject = computed(() => {
64
- const a = attrs
65
- const classes = {}
66
-
67
- // 通用布尔样式开关(以存在/空字符串/'true' 为真)
68
- const booleanStyleKeys = [
69
- 'hasTopMargin', 'useStyle7', 'useCycle', 'useStyle8', 'out-tab', 'no-underline', 'useStyle9', 'useStyle10',
70
- 'expand-full'
71
- ]
72
- for (const key of booleanStyleKeys) {
73
- const val = a[key]
74
- const truthy = val === true || val === '' || val === 'true'
75
- if (truthy) classes[`h-tab-${key}`] = true
76
- }
77
- return classes
78
- })
79
-
80
- // 创建对XTab组件的引用
81
- const xTabRef = ref()
82
-
83
- // 获取插槽(避免模板中直接使用 $slots 触发类型检查错误)
84
- const slots = useSlots()
85
- const slotNames = computed(() => {
86
- try {
87
- return Object.keys(slots || {})
88
- } catch (e) {
89
- return []
90
- }
91
- })
92
-
93
- // 右侧附加区域的动态配置
94
- const extraConfig = ref(null)
95
- const extraItems = computed(() => {
96
- const cfg = extraConfig.value
97
- return cfg && cfg.value ? cfg.value : []
98
- })
99
-
100
- // 本地异步组件映射(未全局注册时生效)
101
- const localMap = {
102
- 'x-input': () => import('@vue2-client/base-client/components/common/XInput/XInput.vue'),
103
- 'x-select': () => import('@vue2-client/base-client/components/his/XSelect/XSelect.vue'),
104
- 'x-radio': () => import('@vue2-client/base-client/components/his/XRadio/XRadio.vue'),
105
- 'x-buttons': () => import('@vue2-client/base-client/components/common/XButtons/XButtons.vue'),
106
- 'x-time-select': () => import('@vue2-client/base-client/components/his/XTimeSelect/XTimeSelect.vue'),
107
- 'h-buttons': () => import('@vue2-client/base-client/components/common/HIS/HButtons/HButtons.vue')
108
- }
109
-
110
- // 从 attrs 中读取 serverName 与 env(保持向后兼容)
111
- const serverName = computed(() => (attrs && attrs.serverName))
112
- const env = computed(() => (attrs && attrs.env) || 'prod')
113
-
114
- const loadExtraConfig = (configName) => {
115
- if (!configName) {
116
- extraConfig.value = null
117
- return
118
- }
119
- getConfigByName(configName, serverName.value, (res) => {
120
- extraConfig.value = res
121
- }, env.value === 'dev')
122
- }
123
-
124
- onMounted(() => {
125
- // 加载 tabBar 额外配置
126
- loadExtraConfig(props.tabBarExtraConfig)
127
-
128
- // expand-full 功能:在 onMounted 时直接设置内容区域的宽度
129
- if (!isExpandFull.value || !wrapperRef.value) return
130
-
131
- // 获取组件挂载后的 DOM 元素
132
- const wrapper = wrapperRef.value
133
- const tabContent = wrapper.querySelector('.ant-tabs-content')
134
-
135
- if (tabContent) {
136
- // 获取当前容器的宽度
137
- const wrapperWidth = wrapper.offsetWidth
138
- // 向右扩展的宽度(使用 CSS 变量或默认值)
139
- const expandWidthStr = attrs['--tab-expand-width'] || '100px'
140
-
141
- // 解析扩展宽度
142
- let expandWidth = 100 // 默认 100px
143
- if (expandWidthStr.endsWith('px')) {
144
- expandWidth = parseFloat(expandWidthStr)
145
- } else if (expandWidthStr.endsWith('%')) {
146
- expandWidth = (parseFloat(expandWidthStr) / 100) * wrapperWidth
147
- } else if (expandWidthStr.includes('calc')) {
148
- // 处理 calc 表达式
149
- expandWidth = wrapperWidth * (3 / 21) // 默认按 3/21 比例
150
- }
151
-
152
- // 设置内容区域宽度
153
- tabContent.style.width = `calc(100% + ${expandWidth}px)`
154
- tabContent.style.position = 'relative'
155
- tabContent.style.left = '0'
156
- }
157
- })
158
- watch(() => props.tabBarExtraConfig, loadExtraConfig)
159
-
160
- // 暴露方法给父组件使用
161
- defineExpose({
162
- // 为了兼容性,保留getXTabInstance方法
163
- getXTabInstance: () => xTabRef.value,
164
- })
165
- </script>
166
-
167
- <template>
168
- <div
169
- ref="wrapperRef"
170
- class="h-tab-wrapper"
171
- :class="[wrapperClassObject, extraItems.length > 1 ? 'h-tab-extra-wrapper-multiple' : '']"
172
- >
173
- <x-tab
174
- ref="xTabRef"
175
- :tabBarGutter="props.tabBarGutter"
176
- v-bind="$attrs"
177
- v-on="$listeners"
178
- >
179
- <template v-if="extraItems.length" #tabBarExtraContent>
180
- <!-- 父级可接管渲染;未提供则按配置兜底渲染 -->
181
- <slot name="tabBarExtraContent" :config="extraConfig" :items="extraItems">
182
- <div class="h-tab-extra-wrapper">
183
- <component
184
- v-for="(item, idx) in extraItems"
185
- :is="localMap[item.slotType] || item.slotType"
186
- :key="idx"
187
- :ref="item.slotRef || `extra_${idx}`"
188
- :serviceName="item.serviceName || serverName"
189
- :serverName="item.serviceName || serverName"
190
- :queryParamsName="item.slotConfig"
191
- :env="env"
192
- v-on="$listeners"
193
- v-bind="item.attrs"
194
- />
195
- </div>
196
- </slot>
197
- </template>
198
- <template v-for="name in slotNames" #[name]="slotData">
199
- <slot :name="name" v-bind="slotData" />
200
- </template>
201
- </x-tab>
202
- </div>
203
- </template>
204
-
205
- <style scoped lang="less">
206
- .h-tab-wrapper {
207
- width: 100%;
208
- overflow: visible !important;
209
-
210
- // 基础样式
211
- :deep(.ant-tabs-tab-next) {
212
- display: none;
213
- }
214
- :deep(.ant-tabs-nav-wrap) {
215
- margin-top: 18px;
216
- margin-bottom: 0;
217
- }
218
- :deep(.ant-tabs-nav) {
219
- // 去除导航容器默认左右内边距,避免收缩时左侧多出一截
220
- .ant-tabs-nav-container,
221
- .ant-tabs-nav-scroll {
222
- margin: 0px;
223
- }
224
-
225
- // 移除左右切换箭头带来的占位
226
- .ant-tabs-tab-prev,
227
- .ant-tabs-tab-next {
228
- display: none !important;
229
- width: 0 !important;
230
- }
231
- .ant-tabs-tab-next-icon {
232
- display: none;
233
- }
234
- .ant-tabs-tab {
235
- background-color: transparent;
236
- border-radius: 6px 6px 0 0;
237
- color: #5D5C5C;
238
- font-weight: bold;
239
- min-width: 134px;
240
- width: auto;
241
- font-size: 18px;
242
- line-height: 26px;
243
- font-family: "Source Han Sans";
244
- transition: all 0.3s;
245
- height: 32px;
246
- text-align: center;
247
- margin: 0 !important;
248
- padding: 0 12px !important;
249
- }
250
- .ant-tabs-tab-active {
251
- background-color: #0057FE;
252
- color: #ffffff;
253
- min-width: 134px;
254
- width: auto;
255
- line-height: 26px;
256
- height: 32px;
257
- text-align: center;
258
- margin: 0 !important;
259
- padding: 0 12px !important;
260
- }
261
- }
262
-
263
- :deep(.ant-tabs-bar) {
264
- border-bottom: 2px solid #0057FE;
265
- margin: 0px 0px;
266
- width: 100%;
267
- height: 50px;
268
- }
269
-
270
- // 滚动状态下的容器左右内边距清零,避免左侧多出一截
271
- :deep(.ant-tabs-nav-container-scrolling) {
272
- padding-left: 0 !important;
273
- padding-right: 0 !important;
274
- }
275
-
276
- :deep(.ant-tabs-tab-arrow-show) {
277
- display: none;
278
- }
279
-
280
- :deep(.ant-tabs-ink-bar) {
281
- background-color: transparent;
282
- bottom: 0px;
283
- display: none;
284
- height: 0;
285
- }
286
-
287
- :deep(.ant-tabs-tab-prev-icon-target) {
288
- display: none;
289
- }
290
-
291
- // 带顶部边距的样式
292
- &.h-tab-hasTopMargin {
293
- :deep(.ant-tabs-nav) {
294
- margin-top: 6px;
295
- }
296
-
297
- :deep(.ant-tabs-bar) {
298
- margin: 0 6px;
299
- }
300
-
301
- :deep(.ant-card-body) {
302
- padding: 6px 0;
303
-
304
- .ant-card-body {
305
- padding: 6px;
306
- }
307
- }
308
- }
309
-
310
- // 通用样式7:细下划线、透明背景、可配置宽度
311
- &.h-tab-useStyle7 {
312
- :deep(.ant-tabs-tab-next),
313
- :deep(.ant-tabs-tab-prev-icon-target),
314
- :deep(.ant-tabs-tab-next-icon) { display: none; }
315
-
316
- :deep(.ant-tabs-bar) { border-bottom: 2px solid transparent; }
317
-
318
- :deep(.ant-tabs-ink-bar) {
319
- display: block !important;
320
- background-color: #0057FE !important;
321
- bottom: 3px !important;
322
- height: 2px !important;
323
- /* 让 antd 自身计算宽度,与页签宽度匹配 */
324
- margin-left: 0 !important;
325
- }
326
-
327
- :deep(.ant-tabs-nav-wrap) {
328
- margin-top: 0;
329
- padding-left: 0 !important; // 消除整个Tab的左间距
330
- padding-right: 0 !important; // 消除整个Tab的右间距
331
- }
332
-
333
- :deep(.ant-tabs-nav-container) {
334
- padding-left: 0 !important; // 确保容器也没有左右间距
335
- padding-right: 0 !important;
336
- }
337
-
338
- :deep(.ant-tabs-nav) {
339
- display: flex;
340
- flex-wrap: wrap;
341
- gap: 8px;
342
- .ant-tabs-tab {
343
- background-color: transparent;
344
- border-radius: 0;
345
- color: #333333;
346
- font-weight: 500;
347
- /* 自适应宽度,允许通过变量覆盖最小宽度 */
348
- min-width: var(--tab-min-width, 96px);
349
- width: auto;
350
- padding: 0 12px 6px;
351
- font-size: 16px;
352
- line-height: 10px;
353
- font-family: "Source Han Sans";
354
- transition: all 0.3s;
355
- height: 40px;
356
- text-align: center;
357
- margin-right: 0 !important;
358
- }
359
- .ant-tabs-tab-active {
360
- background-color: transparent;
361
- color: #0057FE;
362
- font-weight: 600;
363
- width: auto;
364
- padding: 0 12px 6px;
365
- line-height: 10px;
366
- height: 40px;
367
- text-align: center;
368
- }
369
- }
370
-
371
- // 可选:标签左侧圆点
372
- &.h-tab-useCycle {
373
- :deep(.ant-tabs-tab) {
374
- position: relative;
375
- padding-left: 18px !important;
376
- margin-right: 20px !important;
377
- display: inline-flex !important; // 使用inline-flex保持水平布局
378
- align-items: center !important; // 确保内容垂直居中
379
- line-height: normal !important; // 重置line-height避免冲突
380
- vertical-align: top !important; // 确保垂直对齐
381
- }
382
- :deep(.ant-tabs-tab::before) {
383
- content: "" !important;
384
- position: absolute !important;
385
- left: 0 !important;
386
- top: 50% !important;
387
- transform: translateY(-50%) !important;
388
- width: 12px !important;
389
- height: 12px !important;
390
- background: #0057FE !important;
391
- border-radius: 50% !important;
392
- display: block !important;
393
- z-index: 1 !important; // 确保圆点在最上层
394
- }
395
- :deep(.ant-tabs-nav) {
396
- display: flex !important;
397
- flex-direction: row !important; // 明确指定水平方向
398
- flex-wrap: nowrap !important;
399
- align-items: center !important; // 确保导航栏垂直居中
400
- }
401
- }
402
- }
403
- // 用户词条使用样式
404
- &.h-tab-useStyle8 {
405
- :deep(.ant-tabs-tab-next),
406
- :deep(.ant-tabs-tab-prev-icon-target),
407
- :deep(.ant-tabs-tab-next-icon) { display: none; }
408
-
409
- // Make the main Ant Design tabs container a flex column to arrange tab bar and content vertically
410
- :deep(.ant-tabs) {
411
- display: flex !important;
412
- flex-direction: column !important; // 确保选项卡栏在顶部,内容区域在下方
413
- height: auto !important; // 高度自适应
414
- }
415
-
416
- :deep(.ant-tabs-bar) {
417
- border-bottom: 1px solid #d9d9d9; // 底部边框
418
- border-right: none; // 移除右侧边框
419
- margin-right: 0 !important; // 移除重叠修复
420
- flex-shrink: 1 !important; // 允许收缩
421
- height: auto !important; // 高度自适应
422
- margin-bottom: 0px !important;
423
- }
424
-
425
- :deep(.ant-tabs-content) {
426
- flex: none !important; // 移除 flex: 1,允许内容区域自然流淌
427
- }
428
-
429
- :deep(.ant-tabs-nav) {
430
- .ant-tabs-nav-container,
431
- .ant-tabs-nav-wrap,
432
- .ant-tabs-nav-scroll,
433
- & > div:first-child {
434
- display: flex !important;
435
- flex-direction: row !important;
436
- flex-wrap: nowrap !important; // 确保不换行
437
- width: 100% !important; // 占据全部宽度
438
- height: auto !important;
439
- }
440
-
441
- height: auto !important; // 高度自适应内容
442
- width: 100% !important; // 确保容器占据全部宽度
443
-
444
- .ant-tabs-tab {
445
- flex: 1 !important; // 宽度等分布局
446
- margin-right: 0 !important;
447
- margin-bottom: 0 !important; // 移除底部间距
448
- border-top: 1px solid #d9d9d9;
449
- border-left: 1px solid #d9d9d9;
450
- border-bottom: 1px solid #d9d9d9; // 所有选项卡都有底部边框
451
- border-right: none; // 默认没有右边框
452
- &:last-child {
453
- border-right: 1px solid #d9d9d9; // 最后一个选项卡有右边框
454
- }
455
- border-radius: 0; // 默认无圆角,避免中间相邻处出现圆角
456
- background-color: #f5f5f5;
457
- color: #333333;
458
- font-weight: 500;
459
- font-size: 16px;
460
- height: 40px; // 固定高度
461
- width: auto !important; // 移除固定宽度,以便等分
462
- display: flex;
463
- justify-content: center;
464
- align-items: center;
465
- padding: 0;
466
- }
467
- // 首项:仅左侧圆角
468
- .ant-tabs-tab:first-child {
469
- border-top-left-radius: 10px;
470
- border-bottom-left-radius: 10px;
471
- }
472
- // 末项:仅右侧圆角
473
- .ant-tabs-tab:last-child {
474
- border-top-right-radius: 10px;
475
- border-bottom-right-radius: 10px;
476
- }
477
- .ant-tabs-tab-active {
478
- border-bottom: 1px solid transparent; // 激活时隐藏底部边框,与 ant-tabs-bar 的边框衔接
479
- background-color: #0057FE;
480
- color: #ffffff;
481
- font-weight: 600;
482
- }
483
- }
484
- :deep(.ant-tabs-ink-bar) {
485
- display: none; // 隐藏下划线
486
- }
487
- }
488
- &.h-tab-extra-wrapper-multiple {
489
- :deep(.h-tab-extra-wrapper){
490
- display: flex;
491
- justify-content: end;
492
- gap: 8px;
493
- }
494
- :deep(.x-radio-group){
495
- height: 32px;
496
- }
497
- :deep(.x-radio-item){
498
- height: 32px;
499
- display: flex;
500
- align-items: center;
501
- margin-bottom: 0px;
502
- }
503
- :deep(.ant-tabs-tab){
504
- height: 34px;
505
- }
506
- :deep(.ant-tabs-nav-container){
507
- padding-top: 2px;
508
- }
509
- :deep(.ant-tabs-extra-content){
510
- line-height: 0px !important;
511
- }
512
- }
513
-
514
- &.h-tab-out-tab {
515
- :deep(.ant-tabs-nav-wrap) {
516
- margin-top: 0px !important;
517
- margin-bottom: 0px !important;
518
- }
519
- :deep(.ant-tabs-nav) {
520
- margin-bottom: 0px !important;
521
- }
522
- :deep(.ant-tabs-nav-container) {
523
- padding-top: 0px !important;
524
- padding-bottom: 0px !important;
525
- }
526
-
527
- :deep(.ant-tabs-bar) {
528
- margin-top: 0px !important;
529
- margin-bottom: 0px !important;
530
- height: auto !important;
531
- min-height: 0px !important;
532
- }
533
-
534
- :deep(.ant-tabs-content) {
535
- margin-top: 0px !important;
536
- }
537
- }
538
-
539
- // 无下划线样式:隐藏底部指示器线条和边框
540
- &.h-tab-no-underline {
541
- :deep(.ant-tabs-bar) {
542
- border-bottom: none !important;
543
- }
544
- :deep(.ant-tabs-ink-bar) {
545
- display: none !important;
546
- }
547
- }
548
-
549
- // 样式9:圆角卡片式标签(带边框、居中文字、字体切换)
550
- &.h-tab-useStyle9 {
551
- :deep(.ant-tabs-tab-next),
552
- :deep(.ant-tabs-tab-prev-icon-target),
553
- :deep(.ant-tabs-tab-next-icon) { display: none; }
554
-
555
- // 保持 ant-tabs 为 column 布局
556
- :deep(.ant-tabs) {
557
- display: flex !important;
558
- flex-direction: column !important;
559
- height: auto !important;
560
- width: 100% !important;
561
- }
562
-
563
- // 移除 a-card 的默认样式影响
564
- :deep(.ant-card) {
565
- overflow: visible !important;
566
- width: 100% !important;
567
- }
568
- :deep(.ant-card-body) {
569
- padding: 0 !important;
570
- overflow: visible !important;
571
- }
572
-
573
- :deep(.ant-tabs-bar) {
574
- border-bottom: none !important;
575
- flex-shrink: 0 !important;
576
- height: auto !important;
577
- margin-bottom: 0 !important;
578
- width: 100% !important;
579
- overflow: visible !important;
580
- }
581
-
582
- :deep(.ant-tabs-content) {
583
- flex: 1 !important;
584
- height: auto !important;
585
- overflow: visible !important;
586
- }
587
-
588
- :deep(.ant-tabs-tabpane) {
589
- overflow: visible !important;
590
- display: block !important;
591
- }
592
-
593
- :deep(.ant-tabs-tabpane-active) {
594
- overflow: visible !important;
595
- }
596
-
597
- // 禁用切换动画,避免抖动
598
- :deep(.ant-tabs) {
599
- transition: none !important;
600
- }
601
- :deep(.ant-tabs-tabpane) {
602
- transition: none !important;
603
- }
604
-
605
- :deep(.ant-tabs-nav-wrap) {
606
- margin: 0 !important;
607
- padding: 0 !important;
608
- overflow: visible !important;
609
- position: relative !important;
610
- display: block !important;
611
- }
612
-
613
- :deep(.ant-tabs-nav-container) {
614
- padding: 0 !important;
615
- overflow: visible !important;
616
- display: block !important;
617
- }
618
-
619
- :deep(.ant-tabs-nav) {
620
- display: flex !important;
621
- flex-direction: row !important;
622
- flex-wrap: nowrap !important;
623
- width: auto !important;
624
- max-width: 100% !important;
625
- height: auto !important;
626
- margin: 0 !important;
627
- overflow: visible !important;
628
-
629
- .ant-tabs-tab {
630
- flex: none;
631
- width: auto;
632
- min-width: 100px;
633
- box-sizing: border-box;
634
- border: 1px solid #E5E9F0;
635
- border-radius: 6px;
636
- background: #FFFFFF;
637
- color: #333333;
638
- font-family: "Source Han Sans";
639
- font-size: 18px;
640
- font-weight: bold;
641
- line-height: 32px;
642
- height: 32px;
643
- text-align: center;
644
- margin: 0 !important;
645
- padding: 0 16px !important;
646
- overflow: hidden !important;
647
- }
648
- .ant-tabs-tab-active {
649
- background-color: #0057FE;
650
- color: #ffffff;
651
- font-weight: bold;
652
- border: 1px solid #0057FE;
653
- }
654
- }
655
-
656
- :deep(.ant-tabs-ink-bar) {
657
- display: none;
658
- }
659
- }
660
-
661
- // 扩展到全宽:内容区域向右扩展到整个栅格宽度
662
- &.h-tab-expand-full {
663
- // 使用更高优先级的选择器
664
- &:not([style]) .ant-tabs-content,
665
- .ant-tabs-content {
666
- width: calc(100% + var(--tab-expand-width, 0px)) !important;
667
- }
668
- :deep(.ant-card-body) {
669
- padding: 0 !important;
670
- }
671
- :deep(.ant-tabs-tabpane),
672
- :deep(.ant-tabs-tabpane-active) {
673
- width: 100% !important;
674
- }
675
- }
676
-
677
- // 样式10:无下划线、左侧绿色圆点、字体样式切换
678
- &.h-tab-useStyle10 {
679
- :deep(.ant-tabs-tab-next),
680
- :deep(.ant-tabs-tab-prev-icon-target),
681
- :deep(.ant-tabs-tab-next-icon) { display: none; }
682
-
683
- :deep(.ant-tabs-bar) {
684
- border-bottom: none !important;
685
- }
686
-
687
- :deep(.ant-tabs-ink-bar) {
688
- display: none !important;
689
- }
690
-
691
- :deep(.ant-tabs-nav-wrap) {
692
- margin-top: 0;
693
- padding-left: 0 !important;
694
- padding-right: 0 !important;
695
- }
696
-
697
- :deep(.ant-tabs-nav-container) {
698
- padding-left: 0 !important;
699
- padding-right: 0 !important;
700
- }
701
-
702
- :deep(.ant-tabs-nav) {
703
- display: flex;
704
- flex-wrap: wrap;
705
- gap: 8px;
706
- .ant-tabs-tab {
707
- position: relative;
708
- background-color: transparent;
709
- border-radius: 0;
710
- color: #313131;
711
- font-family: "Source Han Sans";
712
- font-size: 16px;
713
- font-weight: bold;
714
- line-height: normal;
715
- letter-spacing: 0em;
716
- font-feature-settings: "kern" on;
717
- font-variation-settings: "opsz" auto;
718
- width: auto;
719
- padding: 0 12px 6px;
720
- padding-left: 18px !important;
721
- transition: all 0.3s;
722
- height: 40px;
723
- text-align: center;
724
- margin-right: 0px !important;
725
- display: inline-flex !important;
726
- align-items: center;
727
- vertical-align: top;
728
- }
729
- .ant-tabs-tab::before {
730
- content: "" !important;
731
- position: absolute !important;
732
- left: 0 !important;
733
- top: 50% !important;
734
- transform: translateY(-50%) !important;
735
- width: 8px !important;
736
- height: 8px !important;
737
- background: #3362DA !important;
738
- border-radius: 50% !important;
739
- display: block !important;
740
- z-index: 1 !important;
741
- }
742
- .ant-tabs-tab-active {
743
- background-color: transparent;
744
- color: #0057FE;
745
- font-weight: bold;
746
- width: auto;
747
- padding: 0 12px 6px;
748
- padding-left: 18px !important;
749
- height: 40px;
750
- text-align: center;
751
- }
752
- .ant-tabs-tab-active::before {
753
- background: #0057FE !important;
754
- }
755
- }
756
- }
757
- }
758
- </style>