vue_zhongyou 1.0.11 → 1.0.13

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": "vue_zhongyou",
3
- "version": "1.0.11",
3
+ "version": "1.0.13",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "keywords": [],
@@ -8,7 +8,7 @@
8
8
  v-model="formData[field.field]"
9
9
  :type="field.type === 'textarea' ? 'textarea' : 'text'"
10
10
  :label="field.label"
11
- :label-width="60"
11
+ :label-width="field.labelWidth || 60"
12
12
  :placeholder="field.placeholder || `请输入${field.label}`"
13
13
  :rules="field.rules || []"
14
14
  :maxlength="field.maxlength"
@@ -20,7 +20,12 @@
20
20
  />
21
21
 
22
22
  <!-- 单选 -->
23
- <van-field v-else-if="field.type === 'radio'" name="radio" :label="field.label" :rules="field.rules || []">
23
+ <van-field
24
+ v-else-if="field.type === 'radio'"
25
+ name="radio"
26
+ :label="field.label"
27
+ :label-width="field.labelWidth || 60"
28
+ :rules="field.rules || []">
24
29
  <template #input>
25
30
  <van-radio-group
26
31
  v-model="formData[field.field]"
@@ -41,7 +46,12 @@
41
46
 
42
47
 
43
48
  <!-- 多选 -->
44
- <van-field v-else-if="field.type === 'checkbox'" name="checkboxGroup" :label="field.label" :rules="field.rules || []">
49
+ <van-field
50
+ v-else-if="field.type === 'checkbox'"
51
+ name="checkboxGroup"
52
+ :label="field.label"
53
+ :label-width="field.labelWidth || 60"
54
+ :rules="field.rules || []">
45
55
  <template #input>
46
56
  <van-checkbox-group
47
57
  v-model="formData[field.field]"
@@ -66,6 +76,7 @@
66
76
  is-link
67
77
  readonly
68
78
  :label="field.label"
79
+ :label-width="field.labelWidth || 60"
69
80
  :placeholder="field.placeholder || `请选择${field.label}`"
70
81
  :model-value="getSelectLabel(field)"
71
82
  :rules="field.rules || []"
@@ -78,6 +89,7 @@
78
89
  is-link
79
90
  readonly
80
91
  :label="field.label"
92
+ :label-width="field.labelWidth || 60"
81
93
  :placeholder="field.placeholder || '请选择时间范围'"
82
94
  :rules="field.rules || []"
83
95
  :model-value="getDateRangeText(field)"
@@ -90,7 +102,7 @@
90
102
  is-link
91
103
  readonly
92
104
  :label="field.label"
93
- :label-width="60"
105
+ :label-width="field.labelWidth || 60"
94
106
  :placeholder="field.placeholder || '请选择日期时间范围'"
95
107
  :model-value="getDateTimeRangeText(field)"
96
108
  :rules="field.rules || []"
@@ -103,6 +115,7 @@
103
115
  is-link
104
116
  readonly
105
117
  :label="field.label"
118
+ :label-width="field.labelWidth || 60"
106
119
  :placeholder="field.placeholder || '请选择地址'"
107
120
  :rules="field.rules || []"
108
121
  :model-value="getAddressText(field)"
@@ -115,7 +128,7 @@
115
128
  is-link
116
129
  readonly
117
130
  :label="field.label"
118
- :label-width="60"
131
+ :label-width="field.labelWidth || 60"
119
132
  :placeholder="field.placeholder || '请选择日期时间'"
120
133
  :model-value="getDateTimeText(field)"
121
134
  :rules="field.rules || []"
@@ -283,6 +296,9 @@ const addressPopup = ref({
283
296
  columnsPlaceholder: null
284
297
  })
285
298
 
299
+ // 存储各个datetime字段的选择时间
300
+ const dateTimeValues = ref({})
301
+
286
302
  // 单个日期时间弹窗状态
287
303
  const dateTimePopup = ref({
288
304
  visible: false,
@@ -341,16 +357,31 @@ watch(
341
357
 
342
358
  const updateFieldValue = (field, value) => {
343
359
  formData[field] = value
344
- emit('update:modelValue', snapshot())
345
360
  emit('change', { field, value, values: snapshot() })
346
361
  }
347
362
 
348
363
  const handleSubmit = () => {
364
+ emit('update:modelValue', snapshot())
349
365
  emit('submit', snapshot())
350
366
  }
351
367
 
352
368
  const handleReset = () => {
353
- initializeFormData()
369
+ // 清空表单数据
370
+ Object.keys(formData).forEach(key => {
371
+ delete formData[key]
372
+ })
373
+
374
+ // 清除保存的datetime值
375
+ Object.keys(dateTimeValues.value).forEach(key => {
376
+ delete dateTimeValues.value[key]
377
+ })
378
+
379
+ // 重新初始化表单数据为空值
380
+ normalizedSchema.value.forEach((field) => {
381
+ const key = field.field
382
+ formData[key] = getDefaultValue(field.type)
383
+ })
384
+
354
385
  emit('update:modelValue', snapshot())
355
386
  emit('reset', snapshot())
356
387
  }
@@ -375,6 +406,9 @@ const onSelectConfirm = ({ selectedOptions }) => {
375
406
  const option = selectedOptions?.[0]
376
407
  if (option && selectPopup.value.field) {
377
408
  updateFieldValue(selectPopup.value.field.field, option.value)
409
+
410
+ // 触发modelValue更新
411
+ emit('update:modelValue', snapshot())
378
412
  }
379
413
  closeSelect()
380
414
  }
@@ -473,6 +507,9 @@ const confirmDateTimeRange = () => {
473
507
  // 更新表单数据
474
508
  if (dateTimeRangePopup.value.field) {
475
509
  updateFieldValue(dateTimeRangePopup.value.field.field, [startDateStr, endDateStr])
510
+
511
+ // 触发modelValue更新
512
+ emit('update:modelValue', snapshot())
476
513
  }
477
514
  // 关闭弹窗
478
515
  closeDateTimeRange()
@@ -548,6 +585,10 @@ const onDateRangeConfirm = (values) => {
548
585
  }
549
586
  const [start, end] = values
550
587
  updateFieldValue(dateRangePopup.value.field.field, [formatDate(start), formatDate(end)])
588
+
589
+ // 触发modelValue更新
590
+ emit('update:modelValue', snapshot())
591
+
551
592
  closeDateRange()
552
593
  }
553
594
 
@@ -598,6 +639,10 @@ const onAddressConfirm = ({ selectedOptions }) => {
598
639
  county: county?.text || '',
599
640
  code: county?.value || city?.value || province?.value || ''
600
641
  })
642
+
643
+ // 触发modelValue更新
644
+ emit('update:modelValue', snapshot())
645
+
601
646
  closeAddressPicker()
602
647
  }
603
648
 
@@ -613,16 +658,32 @@ const openDateTime = (field) => {
613
658
  dateTimePopup.value.visible = true
614
659
  dateTimePopup.value.field = field
615
660
 
616
- // 设置默认时间为当天8:30
617
- const today = new Date()
618
- const defaultTime = new Date(today)
619
- defaultTime.setHours(8, 30, 0, 0)
661
+ // 检查是否已有该字段的保存值
662
+ const savedTime = dateTimeValues.value[field.field]
663
+
664
+ // 检查表单数据中是否有该字段的值
665
+ const formValue = formData[field.field]
620
666
 
621
- // 将field的时间转换为日期时间格式
622
- dateTimePopup.value.selectedTime = typeof field.defaultValue === 'string' ? reverseFormatDateTime(field.defaultValue) : defaultTime
667
+ if (savedTime) {
668
+ // 如果已经有保存的时间,则使用保存的时间
669
+ dateTimePopup.value.selectedTime = new Date(savedTime)
670
+ } else if (formValue) {
671
+ // 如果表单数据中有该字段的值,则使用表单数据中的值
672
+ dateTimePopup.value.selectedTime = typeof formValue === 'string' ? reverseFormatDateTime(formValue) : new Date(formValue)
673
+ } else if (field.defaultValue) {
674
+ // 如果字段有默认值,则使用字段的默认值
675
+ dateTimePopup.value.selectedTime = typeof field.defaultValue === 'string' ? reverseFormatDateTime(field.defaultValue) : new Date(field.defaultValue)
676
+ } else {
677
+ // 否则设置默认时间为当天8:30
678
+ const today = new Date()
679
+ const defaultTime = new Date(today)
680
+ defaultTime.setHours(8, 30, 0, 0)
681
+ dateTimePopup.value.selectedTime = defaultTime
682
+ }
623
683
 
624
- // 初始化当前小时值
625
- dateTimePopup.value.currentHour = '8'
684
+ // 更新当前小时值
685
+ const hours = dateTimePopup.value.selectedTime.getHours()
686
+ dateTimePopup.value.currentHour = hours.toString().padStart(2, '0')
626
687
  }
627
688
 
628
689
  const closeDateTime = () => {
@@ -637,9 +698,15 @@ const confirmDateTime = () => {
637
698
  // 格式化日期时间
638
699
  const dateTimeStr = formatDateTime(dateTimePopup.value.selectedTime)
639
700
 
640
- // 更新表单数据
701
+ // 保存当前字段的时间值
641
702
  if (dateTimePopup.value.field) {
703
+ dateTimeValues.value[dateTimePopup.value.field.field] = new Date(dateTimePopup.value.selectedTime)
704
+
705
+ // 更新表单数据
642
706
  updateFieldValue(dateTimePopup.value.field.field, dateTimeStr)
707
+
708
+ // 触发modelValue更新
709
+ emit('update:modelValue', snapshot())
643
710
  }
644
711
 
645
712
  // 关闭弹窗