vxe-table 3.4.10 → 3.4.12-beta.2

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.
@@ -812,11 +812,14 @@ export default {
812
812
  }
813
813
  return ''
814
814
  },
815
+ firstDayOfWeek () {
816
+ const { startDay, startWeek } = this
817
+ return XEUtils.toNumber(XEUtils.isNumber(startDay) || XEUtils.isString(startDay) ? startDay : startWeek)
818
+ },
815
819
  weekDatas () {
816
820
  const weeks = []
817
821
  if (this.isDatePickerType) {
818
- const { startDay, startWeek } = this
819
- let sWeek = XEUtils.toNumber(XEUtils.isNumber(startDay) || XEUtils.isString(startDay) ? startDay : startWeek)
822
+ let { firstDayOfWeek: sWeek } = this
820
823
  weeks.push(sWeek)
821
824
  for (let index = 0; index < 6; index++) {
822
825
  if (sWeek >= 6) {
@@ -957,7 +960,8 @@ export default {
957
960
  return XEUtils.chunk(this.dayList, 7)
958
961
  },
959
962
  weekDates () {
960
- return this.dayDatas.map(list => {
963
+ const { dayDatas, firstDayOfWeek } = this
964
+ return dayDatas.map(list => {
961
965
  const firstItem = list[0]
962
966
  const item = {
963
967
  date: firstItem.date,
@@ -966,7 +970,7 @@ export default {
966
970
  isCurrent: false,
967
971
  isNow: false,
968
972
  isNext: false,
969
- label: XEUtils.getYearWeek(firstItem.date)
973
+ label: XEUtils.getYearWeek(firstItem.date, firstDayOfWeek)
970
974
  }
971
975
  return [item].concat(list)
972
976
  })
@@ -1045,8 +1049,10 @@ export default {
1045
1049
  this.initValue()
1046
1050
  },
1047
1051
  dateLabelFormat () {
1048
- this.dateParseValue(this.datePanelValue)
1049
- this.inputValue = this.datePanelLabel
1052
+ if (this.isDatePickerType) {
1053
+ this.dateParseValue(this.datePanelValue)
1054
+ this.inputValue = this.datePanelLabel
1055
+ }
1050
1056
  }
1051
1057
  },
1052
1058
  created () {
@@ -1292,7 +1298,7 @@ export default {
1292
1298
  }
1293
1299
  },
1294
1300
  afterCheckValue () {
1295
- const { type, exponential, inpReadonly, inputValue, isDatePickerType, isNumType, datetimePanelValue, dateLabelFormat, min, max } = this
1301
+ const { type, exponential, inpReadonly, inputValue, isDatePickerType, isNumType, datetimePanelValue, dateLabelFormat, min, max, firstDayOfWeek } = this
1296
1302
  if (!inpReadonly) {
1297
1303
  if (isNumType) {
1298
1304
  if (inputValue) {
@@ -1340,7 +1346,7 @@ export default {
1340
1346
  } else {
1341
1347
  isChange = true
1342
1348
  }
1343
- this.inputValue = XEUtils.toDateString(inpDateVal, dateLabelFormat)
1349
+ this.inputValue = XEUtils.toDateString(inpDateVal, dateLabelFormat, { firstDay: firstDayOfWeek })
1344
1350
  if (isChange) {
1345
1351
  this.dateChange(inpDateVal)
1346
1352
  }
@@ -1650,7 +1656,7 @@ export default {
1650
1656
  }
1651
1657
  },
1652
1658
  dateParseValue (date) {
1653
- const { type, dateLabelFormat, valueFormat } = this
1659
+ const { type, dateLabelFormat, valueFormat, firstDayOfWeek } = this
1654
1660
  let dValue = null
1655
1661
  let dLabel = ''
1656
1662
  if (date) {
@@ -1661,7 +1667,20 @@ export default {
1661
1667
  }
1662
1668
  }
1663
1669
  if (XEUtils.isValidDate(dValue)) {
1664
- dLabel = XEUtils.toDateString(dValue, dateLabelFormat)
1670
+ dLabel = XEUtils.toDateString(dValue, dateLabelFormat, { firstDay: firstDayOfWeek })
1671
+ // 由于年份和第几周是冲突的行为,所以需要特殊处理,判断是否跨年
1672
+ if (dateLabelFormat && type === 'week') {
1673
+ const firstWeekDate = XEUtils.getWhatWeek(dValue, 0, firstDayOfWeek, firstDayOfWeek)
1674
+ if (firstWeekDate.getFullYear() < dValue.getFullYear()) {
1675
+ const yyIndex = dateLabelFormat.indexOf('yyyy')
1676
+ if (yyIndex > -1) {
1677
+ const yyNum = Number(dLabel.substring(yyIndex, yyIndex + 4))
1678
+ if (yyNum && !isNaN(yyNum)) {
1679
+ dLabel = dLabel.replace(`${yyNum}`, `${yyNum - 1}`)
1680
+ }
1681
+ }
1682
+ }
1683
+ }
1665
1684
  } else {
1666
1685
  dValue = null
1667
1686
  }
@@ -1669,7 +1688,7 @@ export default {
1669
1688
  this.datePanelLabel = dLabel
1670
1689
  },
1671
1690
  dateOffsetEvent (evnt) {
1672
- const { isActivated, datePanelValue, datePanelType } = this
1691
+ const { isActivated, datePanelValue, datePanelType, firstDayOfWeek } = this
1673
1692
  if (isActivated) {
1674
1693
  evnt.preventDefault()
1675
1694
  const keyCode = evnt.keyCode
@@ -1718,11 +1737,11 @@ export default {
1718
1737
  if (isLeftArrow) {
1719
1738
  offsetDay = XEUtils.getWhatDay(offsetDay, -1)
1720
1739
  } else if (isUpArrow) {
1721
- offsetDay = XEUtils.getWhatWeek(offsetDay, -1)
1740
+ offsetDay = XEUtils.getWhatWeek(offsetDay, -1, firstDayOfWeek)
1722
1741
  } else if (isRightArrow) {
1723
1742
  offsetDay = XEUtils.getWhatDay(offsetDay, 1)
1724
1743
  } else if (isDwArrow) {
1725
- offsetDay = XEUtils.getWhatWeek(offsetDay, 1)
1744
+ offsetDay = XEUtils.getWhatWeek(offsetDay, 1, firstDayOfWeek)
1726
1745
  }
1727
1746
  this.dateMoveDay(offsetDay)
1728
1747
  }
@@ -1741,16 +1760,16 @@ export default {
1741
1760
  }
1742
1761
  },
1743
1762
  dateChange (date) {
1744
- const { value, datetimePanelValue, dateValueFormat } = this
1763
+ const { value, datetimePanelValue, dateValueFormat, firstDayOfWeek } = this
1745
1764
  if (this.type === 'week') {
1746
1765
  const sWeek = XEUtils.toNumber(this.selectDay)
1747
- date = XEUtils.getWhatWeek(date, 0, sWeek)
1766
+ date = XEUtils.getWhatWeek(date, 0, sWeek, firstDayOfWeek)
1748
1767
  } else if (this.hasTime) {
1749
1768
  date.setHours(datetimePanelValue.getHours())
1750
1769
  date.setMinutes(datetimePanelValue.getMinutes())
1751
1770
  date.setSeconds(datetimePanelValue.getSeconds())
1752
1771
  }
1753
- const inpVal = XEUtils.toDateString(date, dateValueFormat)
1772
+ const inpVal = XEUtils.toDateString(date, dateValueFormat, { firstDay: firstDayOfWeek })
1754
1773
  this.dateCheckMonth(date)
1755
1774
  if (!XEUtils.isEqual(value, inpVal)) {
1756
1775
  this.emitModel(inpVal, { type: 'update' })
@@ -9,7 +9,8 @@ export default {
9
9
  title: [String, Number],
10
10
  content: [String, Number],
11
11
  disabled: Boolean,
12
- size: { type: String, default: () => GlobalConfig.radio.size || GlobalConfig.size }
12
+ strict: { type: Boolean, default: () => GlobalConfig.radioButton.strict },
13
+ size: { type: String, default: () => GlobalConfig.radioButton.size || GlobalConfig.size }
13
14
  },
14
15
  inject: {
15
16
  $xeradiogroup: {
@@ -23,6 +24,10 @@ export default {
23
24
  isDisabled () {
24
25
  const { $xeradiogroup } = this
25
26
  return this.disabled || ($xeradiogroup && $xeradiogroup.disabled)
27
+ },
28
+ isStrict () {
29
+ const { $xeradiogroup } = this
30
+ return $xeradiogroup ? $xeradiogroup.strict : this.strict
26
31
  }
27
32
  },
28
33
  render (h) {
@@ -49,7 +54,8 @@ export default {
49
54
  checked: $xeradiogroup ? $xeradiogroup.value === label : value === label
50
55
  },
51
56
  on: {
52
- change: this.changeEvent
57
+ change: this.changeEvent,
58
+ click: this.clickEvent
53
59
  }
54
60
  }),
55
61
  h('span', {
@@ -58,15 +64,27 @@ export default {
58
64
  ])
59
65
  },
60
66
  methods: {
67
+ handleValue (label, evnt) {
68
+ const { $xeradiogroup } = this
69
+ const params = { label, $event: evnt }
70
+ if ($xeradiogroup) {
71
+ $xeradiogroup.handleChecked(params)
72
+ } else {
73
+ this.$emit('input', label)
74
+ this.$emit('change', params)
75
+ }
76
+ },
61
77
  changeEvent (evnt) {
62
- const { $xeradiogroup, isDisabled, label } = this
78
+ const { isDisabled } = this
63
79
  if (!isDisabled) {
64
- const params = { label, $event: evnt }
65
- if ($xeradiogroup) {
66
- $xeradiogroup.handleChecked(params)
67
- } else {
68
- this.$emit('input', label)
69
- this.$emit('change', params)
80
+ this.handleValue(this.label, evnt)
81
+ }
82
+ },
83
+ clickEvent (evnt) {
84
+ const { $xeradiogroup, isDisabled, isStrict } = this
85
+ if (!isDisabled && !isStrict) {
86
+ if (this.label === ($xeradiogroup ? $xeradiogroup.value : this.value)) {
87
+ this.handleValue(null, evnt)
70
88
  }
71
89
  }
72
90
  }
@@ -6,7 +6,8 @@ export default {
6
6
  props: {
7
7
  value: [String, Number, Boolean],
8
8
  disabled: Boolean,
9
- size: { type: String, default: () => GlobalConfig.radio.size || GlobalConfig.size }
9
+ strict: { type: Boolean, default: () => GlobalConfig.radioGroup.strict },
10
+ size: { type: String, default: () => GlobalConfig.radioGroup.size || GlobalConfig.size }
10
11
  },
11
12
  provide () {
12
13
  return {
@@ -12,6 +12,7 @@ export default {
12
12
  content: [String, Number],
13
13
  disabled: Boolean,
14
14
  name: String,
15
+ strict: { type: Boolean, default: () => GlobalConfig.radio.strict },
15
16
  size: { type: String, default: () => GlobalConfig.radio.size || GlobalConfig.size }
16
17
  },
17
18
  inject: {
@@ -23,6 +24,10 @@ export default {
23
24
  isDisabled () {
24
25
  const { $xeradiogroup } = this
25
26
  return this.disabled || ($xeradiogroup && $xeradiogroup.disabled)
27
+ },
28
+ isStrict () {
29
+ const { $xeradiogroup } = this
30
+ return $xeradiogroup ? $xeradiogroup.strict : this.strict
26
31
  }
27
32
  },
28
33
  render (h) {
@@ -49,17 +54,8 @@ export default {
49
54
  checked: $xeradiogroup ? $xeradiogroup.value === label : value === label
50
55
  },
51
56
  on: {
52
- change: evnt => {
53
- if (!isDisabled) {
54
- const params = { label, $event: evnt }
55
- if ($xeradiogroup) {
56
- $xeradiogroup.handleChecked(params)
57
- } else {
58
- this.$emit('input', label)
59
- this.$emit('change', params)
60
- }
61
- }
62
- }
57
+ change: this.changeEvent,
58
+ click: this.clickEvent
63
59
  }
64
60
  }),
65
61
  h('span', {
@@ -71,15 +67,27 @@ export default {
71
67
  ])
72
68
  },
73
69
  methods: {
70
+ handleValue (label, evnt) {
71
+ const { $xeradiogroup } = this
72
+ const params = { label, $event: evnt }
73
+ if ($xeradiogroup) {
74
+ $xeradiogroup.handleChecked(params)
75
+ } else {
76
+ this.$emit('input', label)
77
+ this.$emit('change', params)
78
+ }
79
+ },
74
80
  changeEvent (evnt) {
75
- const { $xeradiogroup, isDisabled, label } = this
81
+ const { isDisabled } = this
76
82
  if (!isDisabled) {
77
- const params = { label, $event: evnt }
78
- if ($xeradiogroup) {
79
- $xeradiogroup.handleChecked(params)
80
- } else {
81
- this.$emit('input', label)
82
- this.$emit('change', params)
83
+ this.handleValue(this.label, evnt)
84
+ }
85
+ },
86
+ clickEvent (evnt) {
87
+ const { $xeradiogroup, isDisabled, isStrict } = this
88
+ if (!isDisabled && !isStrict) {
89
+ if (this.label === ($xeradiogroup ? $xeradiogroup.value : this.value)) {
90
+ this.handleValue(null, evnt)
83
91
  }
84
92
  }
85
93
  }
@@ -606,7 +606,7 @@ const Methods = {
606
606
  }
607
607
  XEUtils.eachTree(rows, (childRow, index, items, path, parent, nodes) => {
608
608
  const rowid = getRowid(this, childRow)
609
- const rest = { row: childRow, rowid, seq: -1, index: -1, _index: -1, $index: -1, items, parent, level: parentLevel + nodes.length }
609
+ const rest = { row: childRow, rowid, seq: -1, index, _index: -1, $index: -1, items, parent, level: parentLevel + nodes.length }
610
610
  fullDataRowIdData[rowid] = rest
611
611
  fullDataRowMap.set(childRow, rest)
612
612
  fullAllDataRowIdData[rowid] = rest
@@ -616,6 +616,7 @@ const Methods = {
616
616
  if (transform) {
617
617
  row[mapChildren] = rows
618
618
  }
619
+ this.updateAfterDataIndex()
619
620
  return rows
620
621
  })
621
622
  },
@@ -1250,7 +1251,7 @@ const Methods = {
1250
1251
  fullAllDataRowIdData[rowid] = rest
1251
1252
  fullDataRowIdData[rowid] = rest
1252
1253
  }
1253
- }, { children: treeOpts.mapChildren })
1254
+ }, { children: treeOpts.transform ? treeOpts.mapChildren : treeOpts.children })
1254
1255
  } else {
1255
1256
  afterFullData.forEach((row, index) => {
1256
1257
  const rowid = getRowid(this, row)
@@ -1267,6 +1268,24 @@ const Methods = {
1267
1268
  })
1268
1269
  }
1269
1270
  },
1271
+ /**
1272
+ * 只对 tree-config 有效,获取行的父级
1273
+ */
1274
+ getParentRow (rowOrRowid) {
1275
+ const { treeConfig, fullDataRowIdData } = this
1276
+ if (rowOrRowid && treeConfig) {
1277
+ let rowid
1278
+ if (XEUtils.isString(rowOrRowid)) {
1279
+ rowid = rowOrRowid
1280
+ } else {
1281
+ rowid = getRowid(this, rowOrRowid)
1282
+ }
1283
+ if (rowid) {
1284
+ return fullDataRowIdData[rowid] ? fullDataRowIdData[rowid].parent : null
1285
+ }
1286
+ }
1287
+ return null
1288
+ },
1270
1289
  /**
1271
1290
  * 根据行的唯一主键获取行
1272
1291
  * @param {String/Number} rowid 行主键
@@ -292,7 +292,16 @@ export default {
292
292
  // transfer: false
293
293
  },
294
294
  radio: {
295
- // size: null
295
+ // size: null,
296
+ strict: true
297
+ },
298
+ radioButton: {
299
+ // size: null,
300
+ strict: true
301
+ },
302
+ radioGroup: {
303
+ // size: null,
304
+ strict: true
296
305
  },
297
306
  checkbox: {
298
307
  // size: null