vue_zhongyou 1.0.12 → 1.0.14

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.12",
3
+ "version": "1.0.14",
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 || []"
@@ -198,6 +211,7 @@
198
211
  <van-area
199
212
  :area-list="areaList"
200
213
  :columns-placeholder="addressPopup.columnsPlaceholder || ['请选择', '请选择', '请选择']"
214
+ v-model="addressPopup.value"
201
215
  @confirm="onAddressConfirm"
202
216
  @cancel="closeAddressPicker"
203
217
  />
@@ -280,7 +294,8 @@ const addressPopup = ref({
280
294
  visible: false,
281
295
  field: null,
282
296
  areaList: null,
283
- columnsPlaceholder: null
297
+ columnsPlaceholder: null,
298
+ value: ''
284
299
  })
285
300
 
286
301
  // 存储各个datetime字段的选择时间
@@ -309,7 +324,7 @@ const getDefaultValue = (type) => {
309
324
  if (type === 'dateRange') return ['', '']
310
325
  if (type === 'datetimeRange') return ['', '']
311
326
  if (type === 'datetime') return ''
312
- if (type === 'address') return { province: '', city: '', county: '', code: '' }
327
+ if (type === 'address') return ''
313
328
  return ''
314
329
  }
315
330
 
@@ -344,21 +359,31 @@ watch(
344
359
 
345
360
  const updateFieldValue = (field, value) => {
346
361
  formData[field] = value
347
- emit('update:modelValue', snapshot())
348
362
  emit('change', { field, value, values: snapshot() })
349
363
  }
350
364
 
351
365
  const handleSubmit = () => {
366
+ emit('update:modelValue', snapshot())
352
367
  emit('submit', snapshot())
353
368
  }
354
369
 
355
370
  const handleReset = () => {
371
+ // 清空表单数据
372
+ Object.keys(formData).forEach(key => {
373
+ delete formData[key]
374
+ })
375
+
356
376
  // 清除保存的datetime值
357
377
  Object.keys(dateTimeValues.value).forEach(key => {
358
378
  delete dateTimeValues.value[key]
359
379
  })
360
380
 
361
- initializeFormData()
381
+ // 重新初始化表单数据为空值
382
+ normalizedSchema.value.forEach((field) => {
383
+ const key = field.field
384
+ formData[key] = getDefaultValue(field.type)
385
+ })
386
+
362
387
  emit('update:modelValue', snapshot())
363
388
  emit('reset', snapshot())
364
389
  }
@@ -383,6 +408,9 @@ const onSelectConfirm = ({ selectedOptions }) => {
383
408
  const option = selectedOptions?.[0]
384
409
  if (option && selectPopup.value.field) {
385
410
  updateFieldValue(selectPopup.value.field.field, option.value)
411
+
412
+ // 触发modelValue更新
413
+ emit('update:modelValue', snapshot())
386
414
  }
387
415
  closeSelect()
388
416
  }
@@ -481,6 +509,9 @@ const confirmDateTimeRange = () => {
481
509
  // 更新表单数据
482
510
  if (dateTimeRangePopup.value.field) {
483
511
  updateFieldValue(dateTimeRangePopup.value.field.field, [startDateStr, endDateStr])
512
+
513
+ // 触发modelValue更新
514
+ emit('update:modelValue', snapshot())
484
515
  }
485
516
  // 关闭弹窗
486
517
  closeDateTimeRange()
@@ -556,6 +587,10 @@ const onDateRangeConfirm = (values) => {
556
587
  }
557
588
  const [start, end] = values
558
589
  updateFieldValue(dateRangePopup.value.field.field, [formatDate(start), formatDate(end)])
590
+
591
+ // 触发modelValue更新
592
+ emit('update:modelValue', snapshot())
593
+
559
594
  closeDateRange()
560
595
  }
561
596
 
@@ -580,16 +615,48 @@ const getDateTimeRangeText = (field) => {
580
615
 
581
616
  // Address
582
617
  const openAddressPicker = (field) => {
583
- addressPopup.value = {
618
+ const config = {
584
619
  visible: true,
585
620
  field,
586
621
  areaList: areaList,
587
622
  columnsPlaceholder: field.columnsPlaceholder
588
623
  }
624
+
625
+ // 如果表单数据中已有code值,则设置默认选中项
626
+ const fieldValue = formData[field.field]
627
+ let code = ''
628
+
629
+ // 如果fieldValue是一个对象且包含code属性
630
+ if (fieldValue && typeof fieldValue === 'object' && fieldValue.code) {
631
+ code = fieldValue.code
632
+ }
633
+ // 如果fieldValue是一个字符串(直接是code值)
634
+ else if (fieldValue && typeof fieldValue === 'string') {
635
+ code = fieldValue
636
+ }
637
+
638
+ if (code) {
639
+ config.value = getCodeToAreaValue(code)
640
+ }
641
+
642
+ addressPopup.value = config
643
+ }
644
+
645
+ // 根据code获取地址选择器的默认值
646
+ const getCodeToAreaValue = (code) => {
647
+ if (!code) return ''
648
+
649
+ // 确保code是字符串且长度为6
650
+ const codeStr = String(code).padEnd(6, '0')
651
+
652
+ // 返回完整的6位code作为value
653
+ return codeStr
589
654
  }
590
655
 
591
656
  const closeAddressPicker = () => {
592
657
  addressPopup.value.visible = false
658
+ // 清除value值,以免影响下次打开
659
+ addressPopup.value.value = ''
593
660
  }
594
661
 
595
662
  const onAddressConfirm = ({ selectedOptions }) => {
@@ -599,20 +666,58 @@ const onAddressConfirm = ({ selectedOptions }) => {
599
666
  }
600
667
  console.log(selectedOptions);
601
668
 
602
- const [province, city, county] = selectedOptions
603
- updateFieldValue(addressPopup.value.field.field, {
604
- province: province?.text || '',
605
- city: city?.text || '',
606
- county: county?.text || '',
607
- code: county?.value || city?.value || province?.value || ''
608
- })
669
+ // 从数组中找出最后一项value值不为000000的值作为当前的code值返回
670
+ let code = '';
671
+ for (let i = selectedOptions.length - 1; i >= 0; i--) {
672
+ const option = selectedOptions[i];
673
+ if (option && option.value && option.value !== '000000') {
674
+ code = option.value;
675
+ break;
676
+ }
677
+ }
678
+
679
+ updateFieldValue(addressPopup.value.field.field, code)
680
+
681
+ // 触发modelValue更新
682
+ emit('update:modelValue', snapshot())
683
+
609
684
  closeAddressPicker()
610
685
  }
611
686
 
612
687
  const getAddressText = (field) => {
613
688
  const value = formData[field.field]
614
- if (!value) return ''
615
- const parts = [value.province, value.city, value.county].filter(Boolean)
689
+ // 如果value是一个对象且包含code属性
690
+ if (value && typeof value === 'object' && value.code) {
691
+ return getCodeToAddressText(value.code)
692
+ }
693
+
694
+ // 如果value是一个字符串(直接是code值)
695
+ if (value && typeof value === 'string') {
696
+ return getCodeToAddressText(value)
697
+ }
698
+
699
+ return ''
700
+ }
701
+
702
+ // 根据code获取地址文本
703
+ const getCodeToAddressText = (code) => {
704
+ if (!code) return ''
705
+
706
+ // 确保code是字符串且长度为6
707
+ const codeStr = String(code).padEnd(6, '0')
708
+
709
+ // 提取省、市、区县的code
710
+ const provinceCode = codeStr.substring(0, 2) + '0000'
711
+ const cityCode = codeStr.substring(0, 4) + '00'
712
+ const countyCode = codeStr
713
+
714
+ // 获取对应的文本
715
+ const province = areaList.province_list[provinceCode] || ''
716
+ const city = areaList.city_list[cityCode] || ''
717
+ const county = areaList.county_list[countyCode] || ''
718
+
719
+ // 过滤掉空值并拼接
720
+ const parts = [province, city, county].filter(Boolean)
616
721
  return parts.join('')
617
722
  }
618
723
 
@@ -624,16 +729,24 @@ const openDateTime = (field) => {
624
729
  // 检查是否已有该字段的保存值
625
730
  const savedTime = dateTimeValues.value[field.field]
626
731
 
627
- // 如果已经有保存的时间,则使用保存的时间,否则设置默认时间为当天8:30
732
+ // 检查表单数据中是否有该字段的值
733
+ const formValue = formData[field.field]
734
+
628
735
  if (savedTime) {
736
+ // 如果已经有保存的时间,则使用保存的时间
629
737
  dateTimePopup.value.selectedTime = new Date(savedTime)
738
+ } else if (formValue) {
739
+ // 如果表单数据中有该字段的值,则使用表单数据中的值
740
+ dateTimePopup.value.selectedTime = typeof formValue === 'string' ? reverseFormatDateTime(formValue) : new Date(formValue)
741
+ } else if (field.defaultValue) {
742
+ // 如果字段有默认值,则使用字段的默认值
743
+ dateTimePopup.value.selectedTime = typeof field.defaultValue === 'string' ? reverseFormatDateTime(field.defaultValue) : new Date(field.defaultValue)
630
744
  } else {
745
+ // 否则设置默认时间为当天8:30
631
746
  const today = new Date()
632
747
  const defaultTime = new Date(today)
633
748
  defaultTime.setHours(8, 30, 0, 0)
634
-
635
- // 将field的时间转换为日期时间格式
636
- dateTimePopup.value.selectedTime = typeof field.defaultValue === 'string' ? reverseFormatDateTime(field.defaultValue) : defaultTime
749
+ dateTimePopup.value.selectedTime = defaultTime
637
750
  }
638
751
 
639
752
  // 更新当前小时值
@@ -659,6 +772,9 @@ const confirmDateTime = () => {
659
772
 
660
773
  // 更新表单数据
661
774
  updateFieldValue(dateTimePopup.value.field.field, dateTimeStr)
775
+
776
+ // 触发modelValue更新
777
+ emit('update:modelValue', snapshot())
662
778
  }
663
779
 
664
780
  // 关闭弹窗