vue2-client 1.22.2 → 1.22.3

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