vue2-client 1.20.83 → 1.20.85

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.
@@ -1,7 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="JAVA_MODULE" version="4">
3
- <component name="NewModuleRootManager" inherit-compiler-output="true">
4
- <exclude-output />
2
+ <module type="WEB_MODULE" version="4">
3
+ <component name="NewModuleRootManager">
5
4
  <content url="file://$MODULE_DIR$" />
6
5
  <orderEntry type="inheritedJdk" />
7
6
  <orderEntry type="sourceFolder" forTests="false" />
@@ -2,5 +2,22 @@
2
2
  <profile version="1.0">
3
3
  <option name="myName" value="Project Default" />
4
4
  <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
5
+ <inspection_tool class="HtmlUnknownTag" enabled="true" level="WARNING" enabled_by_default="true">
6
+ <option name="myValues">
7
+ <value>
8
+ <list size="7">
9
+ <item index="0" class="java.lang.String" itemvalue="nobr" />
10
+ <item index="1" class="java.lang.String" itemvalue="noembed" />
11
+ <item index="2" class="java.lang.String" itemvalue="comment" />
12
+ <item index="3" class="java.lang.String" itemvalue="noscript" />
13
+ <item index="4" class="java.lang.String" itemvalue="embed" />
14
+ <item index="5" class="java.lang.String" itemvalue="script" />
15
+ <item index="6" class="java.lang.String" itemvalue="a-descriptions-item" />
16
+ </list>
17
+ </value>
18
+ </option>
19
+ <option name="myCustomValuesEnabled" value="true" />
20
+ </inspection_tool>
21
+ <inspection_tool class="UsePropertyAccessSyntax" enabled="true" level="WEAK WARNING" enabled_by_default="true" />
5
22
  </profile>
6
23
  </component>
@@ -0,0 +1,12 @@
1
+ 2026-03-18 10:11:17 - afgit.config - INFO - 开始推送配置
2
+ 2026-03-18 10:11:17 - afgit.config - INFO - 开始推送配置文件(含新增与修改),目录: ./config_files
3
+ 2026-03-18 10:11:17 - afgit.config - DEBUG - 开始认证,URL: http://192.168.50.67:31467/api/af-auth/login, 用户名: 1
4
+ 2026-03-18 10:11:18 - afgit.config - ERROR - 解析认证响应失败: {"code":400,"data":null,"error":true,"msg":"用户不存在/密码错误","success":false}, 用户名: 1, 密码: Class123!@!
5
+ 2026-03-18 10:11:18 - afgit.config - ERROR - 认证失败,推送终止
6
+ 2026-03-18 10:11:18 - afgit.config - ERROR - 推送配置失败
7
+ 2026-03-18 10:11:24 - afgit.config - INFO - 开始拉取最新配置
8
+ 2026-03-18 10:11:24 - afgit.config - INFO - 开始下载配置文件到: ./config_files
9
+ 2026-03-18 10:11:24 - afgit.config - DEBUG - 开始认证,URL: http://192.168.50.67:31467/api/af-auth/login, 用户名: 1
10
+ 2026-03-18 10:11:25 - afgit.config - ERROR - 解析认证响应失败: {"code":400,"data":null,"error":true,"msg":"用户不存在/密码错误","success":false}, 用户名: 1, 密码: Class123!@!
11
+ 2026-03-18 10:11:25 - afgit.config - ERROR - 认证失败,下载终止
12
+ 2026-03-18 10:11:25 - afgit.config - ERROR - 拉取配置失败
@@ -0,0 +1,7 @@
1
+ 2026-02-27 09:24:44 - afgit.config - INFO - 开始拉取最新配置
2
+ 2026-02-27 09:24:44 - afgit.config - INFO - 创建本地目录: ./config_files
3
+ 2026-02-27 09:24:44 - afgit.config - INFO - 开始下载配置文件到: ./config_files
4
+ 2026-02-27 09:24:44 - afgit.config - DEBUG - 开始认证,URL: http://192.168.50.67:31467/api/af-auth/login, 用户名: 1
5
+ 2026-02-27 09:24:44 - afgit.config - ERROR - 解析认证响应失败: {"code":400,"data":null,"error":true,"msg":"用户不存在/密码错误","success":false}, 用户名: 1, 密码: Class123!@!
6
+ 2026-02-27 09:24:44 - afgit.config - ERROR - 认证失败,下载终止
7
+ 2026-02-27 09:24:44 - afgit.config - ERROR - 拉取配置失败
@@ -0,0 +1,6 @@
1
+ 2026-03-18 10:11:18 - afgit.config - ERROR - 解析认证响应失败: {"code":400,"data":null,"error":true,"msg":"用户不存在/密码错误","success":false}, 用户名: 1, 密码: Class123!@!
2
+ 2026-03-18 10:11:18 - afgit.config - ERROR - 认证失败,推送终止
3
+ 2026-03-18 10:11:18 - afgit.config - ERROR - 推送配置失败
4
+ 2026-03-18 10:11:25 - afgit.config - ERROR - 解析认证响应失败: {"code":400,"data":null,"error":true,"msg":"用户不存在/密码错误","success":false}, 用户名: 1, 密码: Class123!@!
5
+ 2026-03-18 10:11:25 - afgit.config - ERROR - 认证失败,下载终止
6
+ 2026-03-18 10:11:25 - afgit.config - ERROR - 拉取配置失败
@@ -0,0 +1,3 @@
1
+ 2026-02-27 09:24:44 - afgit.config - ERROR - 解析认证响应失败: {"code":400,"data":null,"error":true,"msg":"用户不存在/密码错误","success":false}, 用户名: 1, 密码: Class123!@!
2
+ 2026-02-27 09:24:44 - afgit.config - ERROR - 认证失败,下载终止
3
+ 2026-02-27 09:24:44 - afgit.config - ERROR - 拉取配置失败
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vue2-client",
3
- "version": "1.20.83",
3
+ "version": "1.20.85",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint",
@@ -45,6 +45,7 @@ const wrapperClassObject = computed(() => {
45
45
  'label-text-horizontal',
46
46
  'label-text-justify',
47
47
  'simple-inline',
48
+ 'simple-inline-show-label',
48
49
  'label-justify',
49
50
  'charge-form',
50
51
  'mini-form',
@@ -110,6 +111,7 @@ defineExpose({
110
111
  :deep(.ant-form-item) {
111
112
  margin-bottom: 4px;
112
113
  }
114
+
113
115
  &.h-form-mini-form {
114
116
  :deep(.ant-form-inline) {
115
117
  .ant-row-flex {
@@ -119,7 +121,8 @@ defineExpose({
119
121
  }
120
122
  }
121
123
  }
122
- :deep(.ant-form-item){
124
+
125
+ :deep(.ant-form-item) {
123
126
  margin-right: 0px !important;
124
127
  }
125
128
  }
@@ -185,22 +188,25 @@ defineExpose({
185
188
  }
186
189
  }
187
190
  }
191
+
188
192
  // 单选框样式设计图中切换模式的样式
189
- &.h-form-radio-style_1{
193
+ &.h-form-radio-style_1 {
190
194
  :deep(.ant-radio-button-wrapper) {
191
195
  padding: 0 @radio-padding;
192
196
  }
193
- :deep(.ant-radio-button-wrapper-checked){
197
+
198
+ :deep(.ant-radio-button-wrapper-checked) {
194
199
  background-color: #0057FE;
195
200
  color: white;
196
201
  }
197
202
  }
198
203
 
199
204
  &.h-form-simple-inline {
200
- :deep(.ant-form-item-label){
205
+ :deep(.ant-form-item-label) {
201
206
  display: none !important;
202
207
  }
203
- :deep(.ant-form-item-control-wrapper){
208
+
209
+ :deep(.ant-form-item-control-wrapper) {
204
210
  width: 100%;
205
211
  }
206
212
  }
@@ -214,11 +220,12 @@ defineExpose({
214
220
  }
215
221
 
216
222
  // 单选框样式设计图中切换模式的样式
217
- &.h-form-radio-style_1{
223
+ &.h-form-radio-style_1 {
218
224
  :deep(.ant-radio-button-wrapper) {
219
225
  padding: 0 @radio-padding;
220
226
  }
221
- :deep(.ant-radio-button-wrapper-checked){
227
+
228
+ :deep(.ant-radio-button-wrapper-checked) {
222
229
  background-color: #0057FE;
223
230
  color: white;
224
231
  }
@@ -443,6 +450,7 @@ defineExpose({
443
450
  :deep(.ant-form-item-label) {
444
451
  padding-left: 0;
445
452
  padding-right: 8px;
453
+
446
454
  label {
447
455
  position: relative;
448
456
  display: block;
@@ -456,6 +464,7 @@ defineExpose({
456
464
  box-sizing: border-box;
457
465
  padding-right: 12px; // 给绝对定位的冒号留出空间
458
466
  }
467
+
459
468
  // 将冒号绝对定位到最右侧,避免参与两端对齐计算
460
469
  label::after {
461
470
  position: absolute;
@@ -475,6 +484,7 @@ defineExpose({
475
484
  width: 80px !important;
476
485
  min-width: 80px;
477
486
  max-width: 80px;
487
+
478
488
  label {
479
489
  position: relative;
480
490
  display: block;
@@ -497,6 +507,7 @@ defineExpose({
497
507
  line-height: 39px;
498
508
  color: #313131;
499
509
  }
510
+
500
511
  // 去掉冒号
501
512
  label::after {
502
513
  content: '';
@@ -520,5 +531,280 @@ defineExpose({
520
531
  }
521
532
  }
522
533
  }
534
+
535
+ &.h-form-simple-inline-show-label {
536
+ // ========== 公共字体样式变量 ==========
537
+ @common-font: {
538
+ font-family: Source Han Sans !important;
539
+ font-size: 16px !important;
540
+ font-weight: normal !important;
541
+ letter-spacing: 0em !important;
542
+ font-feature-settings: "kern" on !important;
543
+ };
544
+
545
+ @common-text-color: #313131;
546
+ @common-placeholder-color: #999;
547
+ @common-border-color: #E5E9F0;
548
+ @common-focus-color: #0057FE;
549
+
550
+ // ========== 表单项基础布局 ==========
551
+ :deep(.ant-form-item) {
552
+ display: flex !important;
553
+ flex-direction: row !important;
554
+ align-items: flex-start !important;
555
+ margin: 0 !important;
556
+ padding: 0 !important;
557
+ margin-bottom: 0 !important;
558
+ }
559
+
560
+ // 修复 ant-row 伪元素
561
+ :deep(.ant-row) {
562
+ &::before,
563
+ &::after {
564
+ display: table !important;
565
+ content: '' !important;
566
+ }
567
+ }
568
+
569
+ // ========== Label 样式 ==========
570
+ :deep(.ant-form-item-label) {
571
+ display: flex !important;
572
+ align-items: flex-start !important;
573
+ padding: 0 8px 0 0 !important;
574
+ width: 90px !important;
575
+ min-width: 90px !important;
576
+ max-width: 90px !important;
577
+ flex-shrink: 0 !important;
578
+ flex: none !important;
579
+
580
+ label {
581
+ position: relative !important;
582
+ display: block !important;
583
+ width: 100% !important;
584
+ height: 39px !important;
585
+ margin: 0 !important;
586
+ padding: 0 !important;
587
+ opacity: 1 !important;
588
+ @common-font();
589
+ line-height: 39px !important;
590
+ color: @common-text-color !important;
591
+ text-align: justify !important;
592
+ text-align-last: justify !important;
593
+ text-justify: inter-ideograph !important;
594
+ text-indent: 12px !important;
595
+ box-sizing: border-box !important;
596
+
597
+ &::after {
598
+ display: none !important;
599
+ content: none !important;
600
+ }
601
+
602
+ &:not(.ant-form-item-required)::before {
603
+ display: none !important;
604
+ content: none !important;
605
+ }
606
+ }
607
+ }
608
+
609
+ // 必填项星号
610
+ :deep(.ant-form-item-required) {
611
+ &::before {
612
+ display: block !important;
613
+ visibility: visible !important;
614
+ content: '*' !important;
615
+ position: absolute !important;
616
+ left: -8px !important;
617
+ top: 40% !important;
618
+ transform: translateY(-50%) !important;
619
+ color: #ff4d4f !important;
620
+ font-size: 14px !important;
621
+ font-family: SimSun, sans-serif !important;
622
+ z-index: 1 !important;
623
+ line-height: 1 !important;
624
+ }
625
+ }
626
+
627
+ // ========== 控件容器 ==========
628
+ :deep(.ant-form-item-control-wrapper) {
629
+ flex: 1 !important;
630
+ min-width: 0 !important;
631
+ width: auto !important;
632
+
633
+ .ant-form-item-control {
634
+ width: 100% !important;
635
+
636
+ .ant-form-item-children {
637
+ display: block !important;
638
+ width: 100% !important;
639
+ padding-right: 41px;
640
+ padding-left: 6px;
641
+ }
642
+ }
643
+ }
644
+
645
+ // ========== 公共输入框样式 Mixin ==========
646
+ .input-common() {
647
+ border-radius: 6px !important;
648
+ box-sizing: border-box !important;
649
+ border: 1px solid @common-border-color !important;
650
+ @common-font();
651
+ color: @common-text-color !important;
652
+
653
+ &:hover,
654
+ &:focus {
655
+ border-color: @common-focus-color !important;
656
+ box-shadow: none !important;
657
+ }
658
+
659
+ &[readonly] {
660
+ background-color: #f5f5f5;
661
+ cursor: not-allowed;
662
+ }
663
+ }
664
+
665
+ // ========== 普通输入框(不包括文本域) ==========
666
+ :deep(.ant-input:not(textarea)) {
667
+ .input-common();
668
+ height: 39px !important;
669
+ line-height: 37px !important;
670
+ padding: 0 11px !important;
671
+
672
+ &::placeholder {
673
+ line-height: 37px !important;
674
+ color: @common-placeholder-color !important;
675
+ }
676
+ }
677
+
678
+ // ========== 文本域样式 ==========
679
+ :deep(textarea.ant-input) {
680
+ .input-common();
681
+ min-height: 80px !important;
682
+ padding: 8px 11px !important;
683
+ line-height: 22px !important;
684
+ resize: vertical !important;
685
+
686
+ &::placeholder {
687
+ color: @common-placeholder-color !important;
688
+ line-height: 22px !important;
689
+ }
690
+ }
691
+
692
+ // ========== 下拉框样式 ==========
693
+ :deep(.ant-select) {
694
+ .ant-select-selection {
695
+ border-radius: 6px !important;
696
+ border: 1px solid @common-border-color !important;
697
+ height: 39px !important;
698
+
699
+ &:hover {
700
+ border-color: @common-focus-color !important;
701
+ }
702
+ }
703
+
704
+ .ant-select-selection__rendered {
705
+ height: 39px !important;
706
+ line-height: 39px !important;
707
+ margin: 0 !important;
708
+ padding: 0 11px !important;
709
+ }
710
+
711
+ .ant-select-selection__placeholder {
712
+ @common-font();
713
+ color: @common-placeholder-color !important;
714
+ line-height: 37px !important;
715
+ height: 37px !important;
716
+ top: 0 !important;
717
+ margin-top: 0 !important;
718
+ padding-left: 11px;
719
+ }
720
+
721
+ .ant-select-selection-selected-value {
722
+ @common-font();
723
+ color: @common-text-color !important;
724
+ line-height: 37px !important;
725
+ padding: 0 !important;
726
+ }
727
+
728
+ .ant-select-arrow {
729
+ right: 11px !important;
730
+ top: 50% !important;
731
+ transform: translateY(-50%) !important;
732
+
733
+ .ant-select-arrow-icon {
734
+ color: @common-placeholder-color !important;
735
+ }
736
+ }
737
+ }
738
+
739
+ :deep(.ant-select-focused) {
740
+ .ant-select-selection {
741
+ border-color: @common-focus-color !important;
742
+ box-shadow: none !important;
743
+ }
744
+ }
745
+
746
+ // ========== 单选框样式 ==========
747
+ :deep(.ant-radio-group) {
748
+ display: flex !important;
749
+ align-items: center !important;
750
+ height: 39px !important;
751
+ line-height: 39px !important;
752
+ }
753
+
754
+ :deep(.ant-radio-wrapper) {
755
+ @common-font();
756
+ line-height: 39px !important;
757
+ color: @common-text-color !important;
758
+ margin-right: 16px !important;
759
+ height: 39px !important;
760
+ display: inline-flex !important;
761
+ align-items: center !important;
762
+
763
+ // 单选框后面的文字
764
+ span:not(.ant-radio) {
765
+ @common-font();
766
+ line-height: 39px !important;
767
+ color: @common-text-color !important;
768
+ padding: 0 !important;
769
+ }
770
+ }
771
+
772
+ // 单选框圆圈
773
+ :deep(.ant-radio) {
774
+ margin-right: 4px !important;
775
+
776
+ .ant-radio-inner {
777
+ width: 16px !important;
778
+ height: 16px !important;
779
+ background: #FFFFFF !important;
780
+ border: 1px solid #CDCFD4 !important;
781
+ border-radius: 50% !important;
782
+ position: relative !important;
783
+
784
+ &::after {
785
+ width: 10px !important;
786
+ height: 10px !important;
787
+ background: @common-focus-color !important;
788
+ border-radius: 50% !important;
789
+ position: absolute !important;
790
+ top: 50% !important;
791
+ left: 50% !important;
792
+ transform: translate(-50%, -50%) !important;
793
+ margin: 0 !important;
794
+ }
795
+ }
796
+
797
+ // 选中状态
798
+ &.ant-radio-checked .ant-radio-inner {
799
+ border-color: @common-focus-color !important;
800
+ background: #FFFFFF !important;
801
+ }
802
+
803
+ // hover 状态
804
+ &:hover .ant-radio-inner {
805
+ border-color: @common-focus-color !important;
806
+ }
807
+ }
808
+ }
523
809
  }
524
810
  </style>
@@ -25,6 +25,8 @@
25
25
  <a-col v-for="(item, itemIndex) in row.items" :key="'simple-item-' + itemIndex" :span="item.span">
26
26
  <x-form-item
27
27
  class="simple-inline-item"
28
+ :class="{ 'show-label': simpleInline?.showSimpleInlineLabel }"
29
+ v-bind="formItemLayoutGen"
28
30
  :attr="item.formItem"
29
31
  :disabled="itemDisabled(item.formItem)"
30
32
  :read-only="readonly(item.formItem)"
@@ -35,6 +37,7 @@
35
37
  :service-name="serviceName"
36
38
  mode="新增/修改"
37
39
  layout="simple-inline"
40
+ :show-label="simpleInline?.showSimpleInlineLabel === true"
38
41
  :rules="rules[`${item.formItem.name}${item.formItem.model}`]"
39
42
  :get-data-params="getDataParams"
40
43
  :env="env"
@@ -106,63 +109,63 @@
106
109
  <template v-if="!isSimpleInlineMode">
107
110
  <a-row :gutter="16" v-for="(groupItem, groupIndex) in groupJsonData" :key="groupIndex">
108
111
  <a-card v-if="groupItem.groupItems.length > 0" :title="groupItem.name" :bordered="false" size="small">
109
- <x-form-item
110
- v-for="(item, index) in groupItem.groupItems"
111
- :key="index"
112
- :attr="item"
113
- :disabled="itemDisabled(item)"
114
- :readonly="readonly(item)"
115
- :files="files"
116
- :signs="signs"
117
- v-bind="formItemLayoutGen"
118
- :style="layout === 'inline' ? { marginTop: '5px' } : undefined"
119
- :form="form[groupItem.model]"
120
- :images="images"
121
- :service-name="serviceName"
122
- mode="新增/修改"
123
- :rules="rules[`${item.name}${item.model}`]"
124
- :get-data-params="getDataParams"
125
- :env="env"
126
- :setForm="setForm"
127
- @rowChoose="rowChoose"
128
- />
129
- </a-card>
130
- <template v-else>
131
- <slot
132
- name="groupFormItems"
133
- :form="form"
134
- :model="groupItem.model"
135
- :rules="rules"
136
- :modifyModelData="modifyModelData"
137
- ></slot>
138
- </template>
112
+ <x-form-item
113
+ v-for="(item, index) in groupItem.groupItems"
114
+ :key="index"
115
+ :attr="item"
116
+ :disabled="itemDisabled(item)"
117
+ :readonly="readonly(item)"
118
+ :files="files"
119
+ :signs="signs"
120
+ v-bind="formItemLayoutGen"
121
+ :style="layout === 'inline' ? { marginTop: '5px' } : undefined"
122
+ :form="form[groupItem.model]"
123
+ :images="images"
124
+ :service-name="serviceName"
125
+ mode="新增/修改"
126
+ :rules="rules[`${item.name}${item.model}`]"
127
+ :get-data-params="getDataParams"
128
+ :env="env"
129
+ :setForm="setForm"
130
+ @rowChoose="rowChoose"
131
+ />
132
+ </a-card>
133
+ <template v-else>
134
+ <slot
135
+ name="groupFormItems"
136
+ :form="form"
137
+ :model="groupItem.model"
138
+ :rules="rules"
139
+ :modifyModelData="modifyModelData"
140
+ ></slot>
141
+ </template>
139
142
  </a-row>
140
143
  </template>
141
144
  <template v-if="!isSimpleInlineMode">
142
145
  <a-row :gutter="16" v-for="(item, key) in simpleFormJsonData" :key="'row' + key">
143
146
  <a-card v-if="item.value.length > 0" :title="item.name" :bordered="false" size="small">
144
- <x-form-item
145
- v-for="(formItem, formItemIndex) in item.value"
146
- :key="key + formItemIndex"
147
- :attr="formItem"
148
- :disabled="itemDisabled(formItem)"
149
- :readonly="readonly(formItem)"
150
- :files="files"
151
- :signs="signs"
152
- :enablePopupToBody="enablePopupToBody"
153
- v-bind="formItemLayoutGen"
154
- :style="layout === 'inline' ? { marginTop: '5px' } : undefined"
155
- :form="form[groupItem.model]"
156
- :images="images"
157
- :service-name="serviceName"
158
- mode="新增/修改"
159
- :rules="rules[`${item.name}${item.model}`]"
160
- :get-data-params="getDataParams"
161
- :env="env"
162
- :setForm="setForm"
163
- @rowChoose="rowChoose"
164
- />
165
- </a-card>
147
+ <x-form-item
148
+ v-for="(formItem, formItemIndex) in item.value"
149
+ :key="key + formItemIndex"
150
+ :attr="formItem"
151
+ :disabled="itemDisabled(formItem)"
152
+ :readonly="readonly(formItem)"
153
+ :files="files"
154
+ :signs="signs"
155
+ :enablePopupToBody="enablePopupToBody"
156
+ v-bind="formItemLayoutGen"
157
+ :style="layout === 'inline' ? { marginTop: '5px' } : undefined"
158
+ :form="form[groupItem.model]"
159
+ :images="images"
160
+ :service-name="serviceName"
161
+ mode="新增/修改"
162
+ :rules="rules[`${item.name}${item.model}`]"
163
+ :get-data-params="getDataParams"
164
+ :env="env"
165
+ :setForm="setForm"
166
+ @rowChoose="rowChoose"
167
+ />
168
+ </a-card>
166
169
  </a-row>
167
170
  </template>
168
171
  <template v-for="(item, key) in childTableData">
@@ -400,9 +403,10 @@ export default {
400
403
  },
401
404
  formItemLayoutGen() {
402
405
  if (this.layout === 'simple-inline') {
406
+ const showLabel = this.simpleInline?.showSimpleInlineLabel === true
403
407
  return {
404
- labelCol: { span: 0 },
405
- wrapperCol: { span: 24 }
408
+ labelCol: { span: showLabel ? 4 : 0 },
409
+ wrapperCol: { span: showLabel ? 20 : 24 }
406
410
  }
407
411
  }
408
412
  if (this.layout === 'horizontal') {
@@ -1388,21 +1392,92 @@ export default {
1388
1392
  max-width: 100% !important;
1389
1393
  }
1390
1394
 
1391
- /* simple-inline模式样式 */
1392
- :deep(.simple-inline-item .ant-form-item) {
1395
+ /* simple-inline模式样式 - 需要穿透 x-form-col 组件 */
1396
+ /* DOM结构: x-form-item.simple-inline-item > slot > x-form-col > a-col > .x-form-col-wrapper > .ant-form-item */
1397
+ :deep(.simple-inline-item > .x-form-col-wrapper .ant-form-item),
1398
+ :deep(.simple-inline-item .x-form-col-wrapper .ant-form-item) {
1393
1399
  margin: 0 !important;
1394
1400
  padding: 2px !important;
1395
1401
 
1396
- .ant-form-item-label {
1402
+ > .ant-form-item-label {
1403
+ width: 0 !important;
1404
+ min-width: 0 !important;
1405
+ max-width: 0 !important;
1406
+ padding: 0 !important;
1407
+ overflow: hidden;
1397
1408
  display: none !important;
1398
1409
  }
1399
1410
 
1400
- .ant-form-item-control-wrapper,
1401
- .ant-form-item-control {
1411
+ > .ant-form-item-control-wrapper,
1412
+ > .ant-form-item-control {
1402
1413
  width: 100% !important;
1403
1414
  }
1404
1415
  }
1405
1416
 
1417
+ /* simple-inline模式下显示label - 左右结构布局 */
1418
+ /* simple-inline模式下显示label - 左右结构布局 */
1419
+ :deep(.simple-inline-item.show-label .x-form-col-wrapper .ant-form-item) {
1420
+ display: flex !important; // 添加这一行
1421
+ flex-direction: row !important; // 确保是行布局
1422
+ align-items: flex-start !important; // 顶部对齐
1423
+
1424
+ > .ant-form-item-label {
1425
+ width: auto !important;
1426
+ min-width: 80px !important;
1427
+ max-width: 120px !important;
1428
+ padding: 0 8px 0 0 !important;
1429
+ overflow: visible;
1430
+ display: flex !important;
1431
+ align-items: center;
1432
+ flex-shrink: 0;
1433
+
1434
+ label {
1435
+ height: 39px;
1436
+ line-height: 39px;
1437
+ font-size: 16px;
1438
+ color: #313131;
1439
+ white-space: nowrap;
1440
+ margin: 0;
1441
+ }
1442
+
1443
+ label::after {
1444
+ content: '';
1445
+ }
1446
+ }
1447
+
1448
+ > .ant-form-item-control-wrapper {
1449
+ flex: 1;
1450
+ min-width: 0;
1451
+ width: auto !important; // 覆盖原有的固定宽度
1452
+ }
1453
+
1454
+ > .ant-form-item-control {
1455
+ display: flex;
1456
+ align-items: center;
1457
+ width: 100%;
1458
+
1459
+ // 各种输入框样式保持不变
1460
+ .ant-input,
1461
+ .ant-input-affix-wrapper,
1462
+ .ant-select .ant-select-selector,
1463
+ .ant-input-number .ant-input-number-input,
1464
+ .ant-picker {
1465
+ border-radius: 6px;
1466
+ border: 1px solid #E5E9F0;
1467
+ line-height: 39px;
1468
+ height: 39px;
1469
+ box-sizing: border-box;
1470
+ width: 100%;
1471
+ }
1472
+
1473
+ .ant-select .ant-select-selector {
1474
+ height: 39px !important;
1475
+ .ant-select-selection-item {
1476
+ line-height: 39px !important;
1477
+ }
1478
+ }
1479
+ }
1480
+ }
1406
1481
  /* 表单底部按钮区域样式 */
1407
1482
  .form-footer-row {
1408
1483
  margin-top: 16px;
@@ -1,48 +1,91 @@
1
1
  <template>
2
2
  <div class="x-buttons">
3
3
  <a-button-group>
4
- <a-button
5
- v-for="(button) in renderConfig"
6
- :style="buttonStyle"
7
- :key="button.key"
8
- :ref="'buttonGroup-' + button.key"
9
- :type="button.type || 'default'"
10
- :disabled="button.disabled"
11
- :data-type="button.type || ''"
12
- :class="{
13
- 'selected-button': enableSelect && selectedButtonKey === button.key,
14
- 'icon-only-button': buttonsMode === 'icon'
15
- }"
16
- @click="handleButtonClick(button)"
17
- >
18
- <!-- 水印图标(watermarkMode为true时显示) -->
19
- <div class="watermark-icon" v-if="watermarkMode && button.icon">
20
- <a-icon :type="button.icon" />
21
- </div>
22
-
23
- <!-- 普通模式 -->
24
- <template v-if="buttonsMode === 'default'">
25
- <a-icon v-if="!watermarkMode && button.icon" :type="button.icon" />
26
- {{ button.label }}
27
- </template>
28
-
29
- <!-- 图标模式(只显示图标) -->
30
- <template v-if="buttonsMode === 'icon' && button.icon">
31
- <a-icon :type="button.icon" />
32
- <span class="sr-only">{{ button.label }}</span>
33
- </template>
34
-
35
- <!-- 卡片模式 -->
36
- <template v-if="buttonsMode === 'card'">
37
- <div class="card-content">
38
- <div class="card-label">{{ button.label }}</div>
39
- <div class="card-value">
40
- <span class="number">{{ button.value || 0 }}</span>
41
- <span class="unit">{{ button.unit || '' }}</span>
4
+ <template v-for="(button) in renderConfig">
5
+ <!-- Tooltip 的按钮 -->
6
+ <a-tooltip
7
+ v-if="button.tooltip"
8
+ :key="'tooltip-' + button.key"
9
+ placement="top"
10
+ >
11
+ <template slot="title">
12
+ <span>{{ button.tooltip }}</span>
13
+ </template>
14
+ <a-button
15
+ :style="buttonStyle"
16
+ :type="button.type || 'default'"
17
+ :disabled="button.disabled"
18
+ :class="{
19
+ 'selected-button': enableSelect && selectedButtonKey === button.key,
20
+ 'icon-only-button': buttonsMode === 'icon'
21
+ }"
22
+ @click="handleButtonClick(button)"
23
+ >
24
+ <!-- 水印图标 -->
25
+ <div class="watermark-icon" v-if="watermarkMode && button.icon">
26
+ <a-icon :type="button.icon" />
42
27
  </div>
28
+ <!-- 普通模式 -->
29
+ <template v-if="buttonsMode === 'default'">
30
+ <a-icon v-if="!watermarkMode && button.icon" :type="button.icon" />
31
+ {{ button.label }}
32
+ </template>
33
+ <!-- 图标模式 -->
34
+ <template v-if="buttonsMode === 'icon' && button.icon">
35
+ <a-icon :type="button.icon" />
36
+ <span class="sr-only">{{ button.label }}</span>
37
+ </template>
38
+ <!-- 卡片模式 -->
39
+ <template v-if="buttonsMode === 'card'">
40
+ <div class="card-content">
41
+ <div class="card-label">{{ button.label }}</div>
42
+ <div class="card-value">
43
+ <span class="number">{{ button.value || 0 }}</span>
44
+ <span class="unit">{{ button.unit || '' }}</span>
45
+ </div>
46
+ </div>
47
+ </template>
48
+ </a-button>
49
+ </a-tooltip>
50
+ <!-- 不带 Tooltip 的按钮 -->
51
+ <a-button
52
+ v-else
53
+ :key="button.key"
54
+ :style="buttonStyle"
55
+ :type="button.type || 'default'"
56
+ :disabled="button.disabled"
57
+ :class="{
58
+ 'selected-button': enableSelect && selectedButtonKey === button.key,
59
+ 'icon-only-button': buttonsMode === 'icon'
60
+ }"
61
+ @click="handleButtonClick(button)"
62
+ >
63
+ <!-- 水印图标 -->
64
+ <div class="watermark-icon" v-if="watermarkMode && button.icon">
65
+ <a-icon :type="button.icon" />
43
66
  </div>
44
- </template>
45
- </a-button>
67
+ <!-- 普通模式 -->
68
+ <template v-if="buttonsMode === 'default'">
69
+ <a-icon v-if="!watermarkMode && button.icon" :type="button.icon" />
70
+ {{ button.label }}
71
+ </template>
72
+ <!-- 图标模式 -->
73
+ <template v-if="buttonsMode === 'icon' && button.icon">
74
+ <a-icon :type="button.icon" />
75
+ <span class="sr-only">{{ button.label }}</span>
76
+ </template>
77
+ <!-- 卡片模式 -->
78
+ <template v-if="buttonsMode === 'card'">
79
+ <div class="card-content">
80
+ <div class="card-label">{{ button.label }}</div>
81
+ <div class="card-value">
82
+ <span class="number">{{ button.value || 0 }}</span>
83
+ <span class="unit">{{ button.unit || '' }}</span>
84
+ </div>
85
+ </div>
86
+ </template>
87
+ </a-button>
88
+ </template>
46
89
  </a-button-group>
47
90
  </div>
48
91
  </template>
@@ -1,14 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="PublishConfigData" remoteFilesAllowedToDisappearOnAutoupload="false">
4
- <serverData>
5
- <paths name="50.4">
6
- <serverdata>
7
- <mappings>
8
- <mapping local="$PROJECT_DIR$" web="/" />
9
- </mappings>
10
- </serverdata>
11
- </paths>
12
- </serverData>
13
- </component>
14
- </project>
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="GitToolBoxBlameSettings">
4
- <option name="version" value="2" />
5
- </component>
6
- </project>
@@ -1,12 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="MaterialThemeProjectNewConfig">
4
- <option name="metadata">
5
- <MTProjectMetadataState>
6
- <option name="migrated" value="true" />
7
- <option name="pristineConfig" value="false" />
8
- <option name="userId" value="4c2a086e:19d8ecb8080:-7ff9" />
9
- </MTProjectMetadataState>
10
- </option>
11
- </component>
12
- </project>
package/.idea/misc.xml DELETED
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="graalvm-21" project-jdk-type="JavaSDK">
4
- <output url="file://$PROJECT_DIR$/out" />
5
- </component>
6
- </project>