Skip to content

Commit f652cf4

Browse files
fix(DatePicker): 优化日期选择器列生成逻辑,确保列精度正确过滤
1 parent 222386c commit f652cf4

File tree

2 files changed

+31
-20
lines changed

2 files changed

+31
-20
lines changed

src/components/date-picker/date-picker-date-utils.ts

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,13 @@ export function generateDatePickerColumns(
8282
if (rank >= precisionRankRecord.second) defaultColumns.push(SECOND_COLUMN)
8383

8484
const finalColumns = columns?.length ? columns : defaultColumns
85+
const renderedColumns = finalColumns.filter(columnType => {
86+
const columnPrecision = columnToPrecisionMap[columnType]
87+
return rank >= precisionRankRecord[columnPrecision]
88+
})
8589
function getValue(type: DateColumnType): number | null {
86-
const index = finalColumns.indexOf(type)
87-
if (index !== undefined && index >= 0 && index < selected.length) {
90+
const index = renderedColumns.indexOf(type)
91+
if (index >= 0 && index < selected.length) {
8892
const val = parseInt(selected[index], 10)
8993
return isNaN(val) ? null : val
9094
}
@@ -136,14 +140,9 @@ export function generateDatePickerColumns(
136140
return column
137141
}
138142

139-
const validColumns = finalColumns.filter(columnType => {
140-
const columnPrecision = columnToPrecisionMap[columnType]
141-
return rank >= precisionRankRecord[columnPrecision]
142-
})
143-
144-
validColumns.forEach(columnType => {
143+
renderedColumns.forEach(columnType => {
145144
switch (columnType) {
146-
case YEAR_COLUMN:
145+
case YEAR_COLUMN: {
147146
const lower = minYear
148147
const upper = maxYear
149148
const years = generateColumn(lower, upper, 'year')
@@ -154,8 +153,8 @@ export function generateDatePickerColumns(
154153
}))
155154
)
156155
break
157-
158-
case MONTH_COLUMN:
156+
}
157+
case MONTH_COLUMN: {
159158
const lowerMonth = isInMinYear ? minMonth : 1
160159
const upperMonth = isInMaxYear ? maxMonth : 12
161160
const months = generateColumn(lowerMonth, upperMonth, 'month')
@@ -166,8 +165,8 @@ export function generateDatePickerColumns(
166165
}))
167166
)
168167
break
169-
170-
case DAY_COLUMN:
168+
}
169+
case DAY_COLUMN: {
171170
const lowerDay = isInMinMonth ? minDay : 1
172171
const upperDay = isInMaxMonth
173172
? maxDay
@@ -180,8 +179,8 @@ export function generateDatePickerColumns(
180179
}))
181180
)
182181
break
183-
184-
case HOUR_COLUMN:
182+
}
183+
case HOUR_COLUMN: {
185184
const lowerHour = isInMinDay ? minHour : 0
186185
const upperHour = isInMaxDay ? maxHour : 23
187186
const hours = generateColumn(lowerHour, upperHour, 'hour')
@@ -192,8 +191,8 @@ export function generateDatePickerColumns(
192191
}))
193192
)
194193
break
195-
196-
case MINUTE_COLUMN:
194+
}
195+
case MINUTE_COLUMN: {
197196
const lowerMinute = isInMinHour ? minMinute : 0
198197
const upperMinute = isInMaxHour ? maxMinute : 59
199198
const minutes = generateColumn(lowerMinute, upperMinute, 'minute')
@@ -204,8 +203,8 @@ export function generateDatePickerColumns(
204203
}))
205204
)
206205
break
207-
208-
case SECOND_COLUMN:
206+
}
207+
case SECOND_COLUMN: {
209208
const lowerSecond = isInMinMinute ? minSecond : 0
210209
const upperSecond = isInMaxMinute ? maxSecond : 59
211210
const seconds = generateColumn(lowerSecond, upperSecond, 'second')
@@ -216,6 +215,7 @@ export function generateDatePickerColumns(
216215
}))
217216
)
218217
break
218+
}
219219
}
220220
})
221221

src/components/date-picker/date-picker-utils.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,18 @@ export const convertDateToStringArray = (
6464
[MINUTE_COLUMN]: standard[4],
6565
[SECOND_COLUMN]: standard[5],
6666
}
67-
return columns.map(col => map[col])
67+
const order: DateColumnType[] = [
68+
YEAR_COLUMN,
69+
MONTH_COLUMN,
70+
DAY_COLUMN,
71+
HOUR_COLUMN,
72+
MINUTE_COLUMN,
73+
SECOND_COLUMN,
74+
]
75+
const max = precisionLengthRecord[datePrecision]
76+
return columns
77+
.filter(col => order.indexOf(col) > -1 && order.indexOf(col) < max)
78+
.map(col => map[col])
6879
}
6980

7081
export const convertStringArrayToDate = <

0 commit comments

Comments
 (0)