vue2-client 1.16.86 → 1.16.88

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vue2-client",
3
- "version": "1.16.86",
3
+ "version": "1.16.88",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint",
@@ -21,7 +21,11 @@ const wrapperClassObject = computed(() => {
21
21
 
22
22
  // 通用布尔样式开关(以存在/空字符串/'true' 为真)
23
23
  const booleanStyleKeys = [
24
- 'max-width200', 'width173', 'button_refresh'
24
+ 'max-width200',
25
+ 'width173',
26
+ 'button_refresh',
27
+ 'border', 'no-style',
28
+ 'one-button-style' // 一个按钮样式,占满整个宽度
25
29
  ]
26
30
  for (const key of booleanStyleKeys) {
27
31
  const val = a[key]
@@ -377,5 +381,64 @@ defineExpose({
377
381
  width: 173px !important;
378
382
  }
379
383
  }
384
+ // 按钮无边框+无图标+无阴影
385
+ &.h-button-no-style{
386
+ :deep(.ant-btn) {
387
+ border: 0px;
388
+ .anticon{
389
+ display: none;
390
+ }
391
+ }
392
+ :deep(.ant-btn-primary){
393
+ text-shadow: none;
394
+ box-shadow: none;
395
+ }
396
+ }
397
+ // 按钮组边距
398
+ &.h-button-border{
399
+ border: 1px solid #E5E9F0;
400
+ border-radius: 6px;
401
+ }
402
+ // 按钮撑开整个容器
403
+ &.h-buttons-fill-container{
404
+ :deep(.x-buttons) {
405
+ width: 100%;
406
+ .ant-btn-group{
407
+ width: 100%;
408
+ .ant-btn{
409
+ width: 100%;
410
+ margin-right: 0px;
411
+ }
412
+ }
413
+ }
414
+ }
415
+ &.h-buttons-one-button-style {
416
+ margin: 0 !important;
417
+ padding: 0 !important;
418
+ :deep(.x-buttons) {
419
+ margin: 0 !important;
420
+ padding: 0 !important;
421
+ .ant-btn-group {
422
+ width: 100%;
423
+ height: 32px;
424
+ justify-content: space-between;
425
+ display: flex;
426
+ flex-wrap: nowrap;
427
+ .ant-btn {
428
+ width: 100%;
429
+ margin-right: 0px !important;
430
+ min-width: 100% !important;
431
+ border-radius: 6px; /* 边框圆角 */
432
+ font-size: 18px; /* 字体大小 */
433
+ line-height: 26px;
434
+ font-weight: bold;
435
+ letter-spacing: 0.5px; /* 增加字母间距 */
436
+ height: 32px; /* 高度 */
437
+ color: #FFFFFF; /* 字体颜色 */
438
+ background: #0057FE;/* 背景颜色 */
439
+ }
440
+ }
441
+ }
442
+ }
380
443
  }
381
444
  </style>
@@ -5,6 +5,18 @@ import { ref, computed, useAttrs } from 'vue'
5
5
  const xAddNativeFormRef = ref()
6
6
 
7
7
  const attrs = useAttrs()
8
+ const props = defineProps({
9
+ // 是否启用 horizontal 模式的自定义配置
10
+ enableHorizontalCustom: {
11
+ type: Boolean,
12
+ default: false
13
+ }
14
+ })
15
+ // 启动时间选择框弹出到body
16
+ const enablePopupToBody = computed(() => {
17
+ const a = attrs
18
+ return a.enablePopupToBody === 'true' || a.enablePopupToBody === true
19
+ })
8
20
  const wrapperClassObject = computed(() => {
9
21
  const a = attrs
10
22
  const classes = {}
@@ -15,9 +27,7 @@ const wrapperClassObject = computed(() => {
15
27
  'padding-50',
16
28
  'label-text-horizontal',
17
29
  'label-text-justify',
18
- 'left-form',
19
- 'charge-form',
20
- 'aligned-form'
30
+ 'charge-form'
21
31
  ]
22
32
  for (const key of booleanStyleKeys) {
23
33
  const val = a[key]
@@ -47,6 +57,8 @@ defineExpose({
47
57
  <x-add-native-form
48
58
  ref="xAddNativeFormRef"
49
59
  v-bind="$attrs"
60
+ :enable-popup-to-body="enablePopupToBody"
61
+ :enable-horizontal-custom="props.enableHorizontalCustom"
50
62
  v-on="$listeners"
51
63
  >
52
64
  <template v-for="(_, name) in $slots" #[name]="slotData">
@@ -345,148 +357,5 @@ defineExpose({
345
357
  }
346
358
  }
347
359
  }
348
-
349
- // aligned-form 样式 - 实现标签左对齐、输入框垂直对齐的整齐布局
350
- &.h-form-aligned-form {
351
- :deep(.ant-form-item) {
352
- margin-bottom: 16px;
353
- display: flex;
354
- align-items: center;
355
- width: 100%;
356
-
357
- .ant-form-item-label {
358
- text-align: left;
359
- margin-right: 12px;
360
- flex-shrink: 0;
361
- min-width: 80px; // 确保标签有最小宽度,保持对齐
362
- max-width: 120px; // 限制最大宽度,避免过宽
363
-
364
- label {
365
- margin: 0;
366
- padding: 0;
367
- white-space: nowrap;
368
- display: block;
369
- text-align: left;
370
- line-height: 32px;
371
- height: 32px;
372
- color: rgba(0, 0, 0, 0.85);
373
- font-size: 14px;
374
-
375
- // 移除默认冒号
376
- &::after {
377
- content: '';
378
- }
379
- }
380
- }
381
-
382
- .ant-form-item-control-wrapper {
383
- flex: 1;
384
- min-width: 0;
385
- display: flex;
386
- align-items: center;
387
-
388
- .ant-form-item-control {
389
- width: 100%;
390
- margin: 0;
391
- padding: 0;
392
-
393
- // 统一输入框样式
394
- .ant-input,
395
- .ant-input-affix-wrapper,
396
- .ant-select,
397
- .ant-input-number,
398
- .ant-picker,
399
- .ant-radio-group,
400
- .ant-checkbox-group {
401
- width: 100%;
402
- height: 32px;
403
- line-height: 32px;
404
- vertical-align: top;
405
- margin: 0;
406
- text-align: left;
407
- }
408
-
409
- // 选择器样式
410
- .ant-select {
411
- .ant-select-selector {
412
- height: 32px;
413
- line-height: 32px;
414
-
415
- .ant-select-selection-item,
416
- .ant-select-selection-placeholder {
417
- line-height: 32px;
418
- height: 32px;
419
- }
420
- }
421
- }
422
-
423
- // 日期选择器样式
424
- .ant-picker {
425
- height: 32px;
426
-
427
- .ant-picker-input {
428
- height: 32px;
429
- line-height: 32px;
430
-
431
- input {
432
- height: 32px;
433
- line-height: 32px;
434
- }
435
- }
436
- }
437
-
438
- // 数字输入框样式
439
- .ant-input-number {
440
- height: 32px;
441
-
442
- .ant-input-number-input {
443
- height: 32px;
444
- line-height: 32px;
445
- }
446
- }
447
-
448
- // 单选框组和复选框组样式
449
- .ant-radio-group,
450
- .ant-checkbox-group {
451
- height: 32px;
452
- line-height: 32px;
453
- display: flex;
454
- align-items: center;
455
-
456
- .ant-radio-wrapper,
457
- .ant-checkbox-wrapper {
458
- height: 32px;
459
- line-height: 32px;
460
- margin-right: 16px;
461
- }
462
- }
463
- }
464
- }
465
- }
466
-
467
- // 确保行容器样式
468
- :deep(.ant-row) {
469
- margin: 0;
470
- padding: 0;
471
-
472
- .ant-col {
473
- margin: 0;
474
- padding: 0 8px; // 列与列之间的间距
475
- display: flex;
476
- flex-direction: column;
477
- }
478
- }
479
-
480
- // 重置可能的容器边距
481
- :deep(.ant-form-item) {
482
- margin: 0 0 16px 0 !important;
483
-
484
- .ant-form-item-control-input,
485
- .ant-form-item-control-input-content {
486
- margin: 0 !important;
487
- padding: 0 !important;
488
- }
489
- }
490
- }
491
360
  }
492
361
  </style>
@@ -164,6 +164,10 @@ const isCustomPagination = computed(() => {
164
164
  const paginationAttr = (a && a.paginationStyle) || ''
165
165
  return props.tableStyle === 'custom-pagination' || paginationAttr === 'custom-pagination'
166
166
  })
167
+ // 是否隐藏顶部功能区
168
+ const isHiddenFunctionalArea = computed(() => {
169
+ return attrs.hiddenFunctionalArea === 'true' || attrs.hiddenFunctionalArea === true
170
+ })
167
171
  </script>
168
172
 
169
173
  <template>
@@ -178,6 +182,7 @@ const isCustomPagination = computed(() => {
178
182
  ref="xFormTableRef"
179
183
  v-bind="$attrs"
180
184
  :customPagination="isCustomPagination"
185
+ :hiddenFunctionalArea="isHiddenFunctionalArea"
181
186
  @expand="onExpandLog"
182
187
  v-on="$listeners"
183
188
  >
@@ -51,6 +51,7 @@
51
51
  :rules="rules[`${item.formItem.name}${item.formItem.model}`]"
52
52
  :get-data-params="getDataParams"
53
53
  :env="env"
54
+ :enablePopupToBody="enablePopupToBody"
54
55
  @x-form-item-emit-func="emitFunc"
55
56
  @rowChoose="rowChoose"
56
57
  :setForm="setForm"
@@ -94,6 +95,7 @@
94
95
  :style="layout === 'inline' ? { marginTop:'5px' } : undefined"
95
96
  :form="form"
96
97
  :images="images"
98
+ :enablePopupToBody="enablePopupToBody"
97
99
  :service-name="serviceName"
98
100
  mode="新增/修改"
99
101
  :layout="layout"
@@ -147,6 +149,7 @@
147
149
  :disabled="itemDisabled(formItem)"
148
150
  :readonly="readonly(formItem)"
149
151
  :files="files"
152
+ :enablePopupToBody="enablePopupToBody"
150
153
  v-bind="formItemLayoutGen"
151
154
  :style="layout ==='inline'?{marginTop:'5px'}:undefined"
152
155
  :form="form[groupItem.model]"
@@ -223,6 +226,11 @@ export default {
223
226
  enableHorizontalCustom: {
224
227
  type: Boolean,
225
228
  default: false
229
+ },
230
+ // 是否启用时间弹出到最外层
231
+ enablePopupToBody: {
232
+ type: Boolean,
233
+ default: false
226
234
  }
227
235
  },
228
236
  data () {
@@ -40,6 +40,11 @@ export default {
40
40
  type: Boolean,
41
41
  default: false,
42
42
  },
43
+ // 是否启用时间弹出到最外层
44
+ enablePopupToBody: {
45
+ type: Boolean,
46
+ default: false
47
+ },
43
48
  },
44
49
  model: {
45
50
  prop: 'value',
@@ -183,6 +188,9 @@ export default {
183
188
  moment(value[1]).format(this.formatType),
184
189
  ]
185
190
  },
191
+ getBodyContainer (triggerNode) {
192
+ return document.body
193
+ }
186
194
  },
187
195
  }
188
196
  </script>
@@ -195,7 +203,8 @@ export default {
195
203
  (attr?.queryType !== 'BETWEEN' || mode !== '查询')) ||
196
204
  (['rangePicker'].includes(attr.type) && mode !== '查询')
197
205
  "
198
- :getCalendarContainer="(triggerNode) => triggerNode.parentNode"
206
+ :getCalendarContainer="enablePopupToBody? undefined :(triggerNode) => triggerNode.parentNode"
207
+ :getPopupContainer="enablePopupToBody? getBodyContainer : undefined"
199
208
  v-model="localValue"
200
209
  :disabled="disabled || readOnly"
201
210
  style="width: 100%"
@@ -211,7 +220,8 @@ export default {
211
220
  attr.type === 'monthPicker' ||
212
221
  (attr.type === 'monthRangePicker' && mode !== '查询')
213
222
  "
214
- :getCalendarContainer="(triggerNode) => triggerNode.parentNode"
223
+ :getCalendarContainer="enablePopupToBody? undefined :(triggerNode) => triggerNode.parentNode"
224
+ :getPopupContainer="enablePopupToBody? getBodyContainer : undefined"
215
225
  v-model="localValue"
216
226
  :disabled="disabled || readOnly"
217
227
  :show-time="true"
@@ -225,7 +235,8 @@ export default {
225
235
  attr.type === 'yearPicker' ||
226
236
  (attr.type === 'yearRangePicker' && mode !== '查询')
227
237
  "
228
- :getCalendarContainer="(triggerNode) => triggerNode.parentNode"
238
+ :getCalendarContainer="enablePopupToBody? undefined :(triggerNode) => triggerNode.parentNode"
239
+ :getPopupContainer="enablePopupToBody? getBodyContainer : undefined"
229
240
  v-model="localValue"
230
241
  :disabled="disabled || readOnly"
231
242
  format="YYYY"
@@ -250,7 +261,8 @@ export default {
250
261
  (attr.type === 'rangePicker' && mode === '查询') ||
251
262
  ['yearRangePicker', 'monthRangePicker'].includes(attr.type)
252
263
  "
253
- :getCalendarContainer="(triggerNode) => triggerNode.parentNode"
264
+ :getCalendarContainer="enablePopupToBody? undefined :(triggerNode) => triggerNode.parentNode"
265
+ :getPopupContainer="enablePopupToBody? getBodyContainer : undefined"
254
266
  v-model="localValue"
255
267
  :disabled="disabled"
256
268
  :placeholder="placeholder"
@@ -381,6 +381,7 @@
381
381
  <XFormDatePicker
382
382
  :attr="attr"
383
383
  :mode="mode"
384
+ :enablePopupToBody="enablePopupToBody"
384
385
  :disabled="disabled"
385
386
  :readOnly="readOnly"
386
387
  :showLabel="showLabel"
@@ -815,6 +816,11 @@ export default {
815
816
  return []
816
817
  }
817
818
  },
819
+ // 是否启用时间弹出到最外层
820
+ enablePopupToBody: {
821
+ type: Boolean,
822
+ default: false
823
+ },
818
824
  serviceName: {
819
825
  type: String,
820
826
  default:
@@ -67,6 +67,7 @@
67
67
  :pageMaxSize="realQueryConfig.queryPagesSize"
68
68
  :externalSelectedRowKeys="externalSelectedRowKeys"
69
69
  :customPagination="customPagination"
70
+ :hiddenFunctionalArea="hiddenFunctionalArea"
70
71
  @add="add"
71
72
  @move="move"
72
73
  @edit="edit"
@@ -409,6 +410,11 @@ export default {
409
410
  customPagination: {
410
411
  type: Boolean,
411
412
  default: false
413
+ },
414
+ // 是否隐藏顶部功能区域
415
+ hiddenFunctionalArea: {
416
+ type: Boolean,
417
+ default: false
412
418
  }
413
419
  },
414
420
  watch: {
@@ -56,7 +56,8 @@ export default {
56
56
  const classes = {}
57
57
  const booleanStyleKeys = [
58
58
  'medical-history',
59
- 'yizhu-input'
59
+ 'yizhu-input',
60
+ 'custom-placeholder'
60
61
  ]
61
62
  booleanStyleKeys.forEach(key => {
62
63
  const val = attrs[key]
@@ -161,7 +162,6 @@ export default {
161
162
  font-weight: normal;
162
163
  line-height: normal;
163
164
  letter-spacing: 0em;
164
- font-variation-settings: "opsz" auto;
165
165
  font-feature-settings: "kern" on;
166
166
  color: #A7A7A7;
167
167
  }
@@ -172,7 +172,6 @@ export default {
172
172
  background: #FFFFFF;
173
173
  box-sizing: border-box;
174
174
  border: 1px solid #E5E9F0;
175
-
176
175
  margin: 2px 0px;
177
176
  :deep(.ant-input) {
178
177
  border-radius: 6px;
@@ -184,7 +183,19 @@ export default {
184
183
  font-size: 14px;
185
184
  padding: 5px 76px 3px 8px;
186
185
  font-weight: normal;
187
- line-height: 24px;
186
+ line-height: normal;
187
+ letter-spacing: 0em;
188
+ color: #A7A7A7;
189
+ }
190
+ }
191
+ &.xinput-custom-placeholder {
192
+ :deep(.ant-input::placeholder) {
193
+ height: 23px;
194
+ opacity: 1;
195
+ font-family: Source Han Sans;
196
+ font-size: 16px;
197
+ font-weight: normal;
198
+ line-height: normal;
188
199
  letter-spacing: 0em;
189
200
  color: #A7A7A7;
190
201
  }