Skip to content

Commit 5256a9e

Browse files
RSS1102github-actions[bot]uyarntdesign-bot
authored
fix(DatePicker): add defaultTime into value calculation (#6140)
* fix(DatePicker): 允许在不使用时间面板的情况设置 `defaultTime` * test(DatePicker): 增加对 defaultTime 和 valueType 的测试用例 * fix(DatePicker): update format handling and improve example usage * feat(DatePicker): 支持 defaultTime 属性,允许设置默认时间值 * feat(DatePicker): 使用 computed 属性处理 defaultTime,支持数组形式 feat(DateRangePicker): 更新 defaultTime 处理逻辑,支持数组形式 test(DatePicker): 增加 format 属性测试用例 * test(DatePicker): 增加对 enableTimePicker 的测试,优化时间选择测试用例 * chore: update common * chore: update common * fix(DatePicker): update defaultTime prop type to string only * chore: revert incorrect change * chore: revert incorrect change * chore: update common * chore: revert incorrect change * chore: revert incorrect change * chore: revert incorrect change * chore: stash changelog [ci skip] --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Uyarn <[email protected]> Co-authored-by: tdesign-bot <[email protected]>
1 parent 131c16f commit 5256a9e

File tree

10 files changed

+713
-33
lines changed

10 files changed

+713
-33
lines changed

packages/common

packages/components/date-picker/DatePicker.tsx

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,16 @@ export default defineComponent({
7070
formatDate(inputValue.value, {
7171
format: formatRef.value.format,
7272
targetFormat: formatRef.value.valueType,
73+
defaultTime: props.defaultTime,
7374
}) as DateValue,
7475
{
75-
dayjsValue: parseToDayjs(inputValue.value as string, formatRef.value.format),
76+
dayjsValue: parseToDayjs(
77+
inputValue.value as string,
78+
formatRef.value.format,
79+
undefined,
80+
undefined,
81+
props.defaultTime,
82+
),
7683
trigger: 'confirm',
7784
},
7885
);
@@ -143,9 +150,9 @@ export default defineComponent({
143150
});
144151
} else {
145152
if (props.multiple) {
146-
const newDate = processDate(date);
153+
const newDate = processDate(date, props.defaultTime);
147154
onChange(newDate, {
148-
dayjsValue: parseToDayjs(date, formatRef.value.format),
155+
dayjsValue: parseToDayjs(date, formatRef.value.format, undefined, undefined, props.defaultTime),
149156
trigger: 'pick',
150157
});
151158
return;
@@ -155,9 +162,10 @@ export default defineComponent({
155162
formatDate(date, {
156163
format: formatRef.value.format,
157164
targetFormat: formatRef.value.valueType,
165+
defaultTime: props.defaultTime,
158166
}) as DateValue,
159167
{
160-
dayjsValue: parseToDayjs(date, formatRef.value.format),
168+
dayjsValue: parseToDayjs(date, formatRef.value.format, undefined, undefined, props.defaultTime),
161169
trigger: 'pick',
162170
},
163171
);
@@ -167,7 +175,7 @@ export default defineComponent({
167175
props.onPick?.(date);
168176
}
169177

170-
function processDate(date: Date) {
178+
function processDate(date: Date, defaultTime?: string | string[]) {
171179
let isSameDate: boolean;
172180
const currentValue = (value.value || []) as DateMultipleValue;
173181
const { dayjsLocale } = globalConfig.value;
@@ -183,13 +191,25 @@ export default defineComponent({
183191

184192
if (!isSameDate) {
185193
currentDate = currentValue.concat(
186-
formatDate(date, { format: formatRef.value.format, targetFormat: formatRef.value.valueType }),
194+
formatDate(date, {
195+
format: formatRef.value.format,
196+
targetFormat: formatRef.value.valueType,
197+
defaultTime,
198+
}),
187199
);
188200
} else {
189201
currentDate = currentValue.filter(
190202
(val) =>
191-
formatDate(val, { format: formatRef.value.format, targetFormat: formatRef.value.valueType }) !==
192-
formatDate(date, { format: formatRef.value.format, targetFormat: formatRef.value.valueType }),
203+
formatDate(val, {
204+
format: formatRef.value.format,
205+
targetFormat: formatRef.value.valueType,
206+
defaultTime,
207+
}) !==
208+
formatDate(date, {
209+
format: formatRef.value.format,
210+
targetFormat: formatRef.value.valueType,
211+
defaultTime,
212+
}),
193213
);
194214
}
195215
return currentDate;
@@ -202,9 +222,9 @@ export default defineComponent({
202222
}
203223

204224
const removeDate = dayjs(ctx.item).toDate();
205-
const newDate = processDate(removeDate);
225+
const newDate = processDate(removeDate, props.defaultTime);
206226
onChange?.(newDate, {
207-
dayjsValue: parseToDayjs(removeDate, formatRef.value.format),
227+
dayjsValue: parseToDayjs(removeDate, formatRef.value.format, undefined, undefined, props.defaultTime),
208228
trigger: 'tag-remove',
209229
});
210230
}
@@ -273,9 +293,16 @@ export default defineComponent({
273293
formatDate(inputValue.value, {
274294
format: formatRef.value.format,
275295
targetFormat: formatRef.value.valueType,
296+
defaultTime: props.defaultTime,
276297
}) as DateValue,
277298
{
278-
dayjsValue: parseToDayjs(inputValue.value as string, formatRef.value.format),
299+
dayjsValue: parseToDayjs(
300+
inputValue.value as string,
301+
formatRef.value.format,
302+
undefined,
303+
undefined,
304+
props.defaultTime,
305+
),
279306
trigger: 'confirm',
280307
},
281308
);
@@ -296,7 +323,7 @@ export default defineComponent({
296323
targetFormat: formatRef.value.valueType,
297324
}) as DateValue,
298325
{
299-
dayjsValue: parseToDayjs(presetVal, formatRef.value.format),
326+
dayjsValue: parseToDayjs(presetVal, formatRef.value.format, undefined, undefined, props.defaultTime),
300327
trigger: 'preset',
301328
},
302329
);

packages/components/date-picker/DatePickerPanel.tsx

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ export default defineComponent({
5757
if (props.enableTimePicker) {
5858
cacheValue.value = formatDate(date, { format: formatRef.value.format });
5959
} else {
60-
onChange?.(formatDate(date, { format: formatRef.value.format }) as DateValue, {
61-
dayjsValue: parseToDayjs(date, formatRef.value.format),
60+
onChange?.(formatDate(date, { format: formatRef.value.format, defaultTime: props.defaultTime }) as DateValue, {
61+
dayjsValue: parseToDayjs(date, formatRef.value.format, undefined, undefined, props.defaultTime),
6262
trigger: 'pick',
6363
});
6464
}
@@ -134,9 +134,16 @@ export default defineComponent({
134134
onChange?.(
135135
formatDate(cacheValue.value, {
136136
format: formatRef.value.format,
137+
defaultTime: props.defaultTime,
137138
}) as DateValue,
138139
{
139-
dayjsValue: parseToDayjs(cacheValue.value as string, formatRef.value.format),
140+
dayjsValue: parseToDayjs(
141+
cacheValue.value as string,
142+
formatRef.value.format,
143+
undefined,
144+
undefined,
145+
props.defaultTime,
146+
),
140147
trigger: 'confirm',
141148
},
142149
);
@@ -146,10 +153,13 @@ export default defineComponent({
146153
// 预设
147154
function onPresetClick(preset: any, context: any) {
148155
const presetVal = isFunction(preset) ? preset() : preset;
149-
onChange?.(formatDate(presetVal, { format: formatRef.value.format }) as DateValue, {
150-
dayjsValue: parseToDayjs(presetVal, formatRef.value.format),
151-
trigger: 'preset',
152-
});
156+
onChange?.(
157+
formatDate(presetVal, { format: formatRef.value.format, defaultTime: props.defaultTime }) as DateValue,
158+
{
159+
dayjsValue: parseToDayjs(presetVal, formatRef.value.format, undefined, undefined, props.defaultTime),
160+
trigger: 'preset',
161+
},
162+
);
153163
props.onPresetClick?.(context);
154164
}
155165

packages/components/date-picker/DateRangePicker.tsx

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,9 +169,12 @@ export default defineComponent({
169169
format: formatRef.value.format,
170170
targetFormat: formatRef.value.valueType,
171171
autoSwap: true,
172+
defaultTime: props.defaultTime,
172173
}) as DateValue[],
173174
{
174-
dayjsValue: nextValue.map((v) => parseToDayjs(v, formatRef.value.format)),
175+
dayjsValue: nextValue.map((v, i) =>
176+
parseToDayjs(v, formatRef.value.format, undefined, undefined, props.defaultTime?.[i]),
177+
),
175178
trigger: 'pick',
176179
},
177180
);
@@ -276,9 +279,12 @@ export default defineComponent({
276279
format: formatRef.value.format,
277280
targetFormat: formatRef.value.valueType,
278281
autoSwap: true,
282+
defaultTime: props.defaultTime,
279283
}) as DateValue[],
280284
{
281-
dayjsValue: nextValue.map((v) => parseToDayjs(v, formatRef.value.format)),
285+
dayjsValue: nextValue.map((v, i) =>
286+
parseToDayjs(v, formatRef.value.format, undefined, undefined, props.defaultTime?.[i]),
287+
),
282288
trigger: 'confirm',
283289
},
284290
);
@@ -318,9 +324,12 @@ export default defineComponent({
318324
format: formatRef.value.format,
319325
targetFormat: formatRef.value.valueType,
320326
autoSwap: true,
327+
defaultTime: props.defaultTime,
321328
}) as DateValue[],
322329
{
323-
dayjsValue: presetValue.map((p) => parseToDayjs(p, formatRef.value.format)),
330+
dayjsValue: presetValue.map((p, i) =>
331+
parseToDayjs(p, formatRef.value.format, undefined, undefined, props.defaultTime?.[i]),
332+
),
324333
trigger: 'preset',
325334
},
326335
);

packages/components/date-picker/DateRangePickerPanel.tsx

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,12 @@ export default defineComponent({
111111
formatDate(nextValue, {
112112
format: formatRef.value.format,
113113
autoSwap: true,
114+
defaultTime: props.defaultTime,
114115
}) as DateValue[],
115116
{
116-
dayjsValue: nextValue.map((v) => parseToDayjs(v, formatRef.value.format)),
117+
dayjsValue: nextValue.map((v, i) =>
118+
parseToDayjs(v, formatRef.value.format, undefined, undefined, props.defaultTime?.[i]),
119+
),
117120
trigger: 'pick',
118121
},
119122
);
@@ -225,9 +228,12 @@ export default defineComponent({
225228
formatDate(nextValue, {
226229
format: formatRef.value.format,
227230
autoSwap: true,
231+
defaultTime: props.defaultTime,
228232
}) as DateValue[],
229233
{
230-
dayjsValue: nextValue.map((v) => parseToDayjs(v, formatRef.value.format)),
234+
dayjsValue: nextValue.map((v, i) =>
235+
parseToDayjs(v, formatRef.value.format, undefined, undefined, props.defaultTime?.[i]),
236+
),
231237
trigger: 'confirm',
232238
},
233239
);
@@ -254,9 +260,12 @@ export default defineComponent({
254260
formatDate(presetValue, {
255261
format: formatRef.value.format,
256262
autoSwap: true,
263+
defaultTime: props.defaultTime,
257264
}) as DateValue[],
258265
{
259-
dayjsValue: presetValue.map((p) => parseToDayjs(p, formatRef.value.format)),
266+
dayjsValue: presetValue.map((p, i) =>
267+
parseToDayjs(p, formatRef.value.format, undefined, undefined, props.defaultTime?.[i]),
268+
),
260269
trigger: 'preset',
261270
},
262271
);

0 commit comments

Comments
 (0)