Skip to content

Commit b2c0223

Browse files
jevin98sleeprite
authored andcommitted
!497 feat(datePicker): default-time在非range模式下生效
* feat(datePicker): default-time在非range模式下生效
1 parent 1700805 commit b2c0223

File tree

8 files changed

+90
-48
lines changed

8 files changed

+90
-48
lines changed

docs/src/document/zh-CN/components/datePicker.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@ const value13 = ref()
636636
| format | 输出格式化 | `string` | [查看映射](https://gitee.com/layui-vue/layui-vue/tree/master/packages/component/component/datePicker/hook/useDatePicker.ts#L56) | 参考[dayjs format](https://day.js.org/docs/en/display/format#list-of-all-available-formats) | - |
637637
| input-format | 输入框格式化 | `string` | [查看映射](https://gitee.com/layui-vue/layui-vue/tree/master/packages/component/component/datePicker/hook/useDatePicker.ts#L56) | 参考[dayjs format](https://day.js.org/docs/en/display/format#list-of-all-available-formats) | `2.19.0` |
638638
| default-value | `首次未点击` 时,下拉弹窗打开时默认显示的时间,传空为组件首次 `渲染时间` | `DatePickerModelValueSingleType` `Array<DatePickerModelValueSingleType>` | -- | -- | `2.19.0` |
639-
| default-time | 范围日期 `type=datetime` 时分秒默认时间 | `string` `Array<string>` | -- | 例如`12:30:00` | `2.17.2` |
639+
| default-time | `type=datetime` 时分秒默认时间 | `string` `Array<string>` | -- | 例如`12:30:00` | `2.17.2` |
640640
| content-style | 内容自定义样式 | `StyleValue` | -- | -- | -- |
641641
| content-class | 内容自定义 Class | `string` `Array<string \| object>` `object` | -- | -- | -- |
642642
| year-page | 年份选择器每页年份的个数 | `number` | `15` | --| `2.19.0` |

packages/component/component/datePicker/__tests__/datePicker.test.tsx

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,4 +339,36 @@ describe("LayDatePicker date type", () => {
339339
expect(wrapper.find(".custom-footer").text()).toBe("自定义底部");
340340
});
341341

342+
test("default-time", async () => {
343+
const wrapper = mount(LayDatePicker, {
344+
props: {
345+
type: 'datetime',
346+
modelValue: "",
347+
defaultTime: '12:30:00',
348+
static: true
349+
},
350+
});
351+
await nextTick();
352+
353+
const checkTimeDom = wrapper.find(".layui-laydate-footer > .layui-btn")
354+
expect(checkTimeDom.exists()).toBeTruthy();
355+
356+
await checkTimeDom.trigger('click')
357+
358+
359+
const timeDom = wrapper.find(".laydate-time-show")
360+
expect(timeDom.exists()).toBeTruthy();
361+
362+
const currentHH = timeDom.find(".num-list[data-type='hh'] .layui-this")
363+
const currentMM = timeDom.find(".num-list[data-type='mm'] .layui-this")
364+
const currentSS = timeDom.find(".num-list[data-type='ss'] .layui-this")
365+
366+
expect(currentHH.exists()).toBeTruthy();
367+
expect(currentMM.exists()).toBeTruthy();
368+
expect(currentSS.exists()).toBeTruthy();
369+
370+
expect(currentHH.text()).toBe('12');
371+
expect(currentMM.text()).toBe('30');
372+
expect(currentSS.text()).toBe('00');
373+
});
342374
});

packages/component/component/datePicker/component/DatePicker.vue

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import type {
55
Shortcuts as ShortcutsType,
66
} from "../interface";
77
import type { UniquePickerProps } from "./interface";
8+
import LayButton from "@layui/component/component/button/index.vue";
9+
import { useI18n } from "@layui/component/language";
10+
11+
import { isFunction } from "@layui/component/utils";
812
import dayjs from "dayjs";
913
import { computed, ref, watch } from "vue";
1014
11-
import { useI18n } from "../../../language";
12-
import { isFunction } from "../../../utils";
13-
14-
import LayButton from "../../button/index.vue";
15-
1615
import { useBaseDatePicker } from "../hook/useBaseDatePicker";
16+
import { setHMS } from "../util";
1717
import Date from "./common/Date.vue";
1818
import DatePickerRender from "./common/DatePickerRender.vue";
1919
import Footer from "./common/Footer.vue";
@@ -30,14 +30,20 @@ const currentData = ref<UniquePickerProps["modelValue"]>();
3030
const showDate = ref<Dayjs>(dayjs());
3131
const currentType = ref();
3232
33-
const { getDefaultValue } = useBaseDatePicker(props);
33+
const { defaultTimeValue, getDefaultValue } = useBaseDatePicker(props);
3434
const { t } = useI18n();
3535
3636
watch(
3737
() => props.modelValue,
3838
() => {
3939
currentData.value = props.modelValue;
40-
showDate.value = props.modelValue || getDefaultValue();
40+
let _defaultValue = getDefaultValue();
41+
42+
_defaultValue = defaultTimeValue.value[0]
43+
? setHMS(_defaultValue, defaultTimeValue.value[0])
44+
: _defaultValue;
45+
46+
showDate.value = props.modelValue || _defaultValue;
4147
},
4248
{ immediate: true },
4349
);

packages/component/component/datePicker/component/DateRange.vue

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@ import type {
99
import LayDropdown from "@layui/component/component/dropdown";
1010
import LayIcon from "@layui/component/component/icon";
1111
import { useI18n } from "@layui/component/language";
12-
import { isArray } from "@layui/component/utils";
1312
import dayjs from "dayjs";
1413
1514
import { computed, ref, watch } from "vue";
1615
import { useBaseDatePicker } from "../hook/useBaseDatePicker";
1716
import { useShortcutsRange } from "../hook/useShortcutsRange";
18-
import { normalizeDayjsValue, setDateList } from "../util";
17+
import { setDateList, setHMS } from "../util";
1918
import DateContent from "./common/DateContent.vue";
2019
import DatePickerRender from "./common/DatePickerRender.vue";
2120
import Footer from "./common/Footer.vue";
@@ -28,7 +27,10 @@ const props = withDefaults(defineProps<RangePickerProps>(), {});
2827
const emits = defineEmits(["pick"]);
2928
3029
const { t } = useI18n();
31-
const { getDefaultValue } = useBaseDatePicker(props);
30+
const {
31+
defaultTimeValue,
32+
getDefaultValue,
33+
} = useBaseDatePicker(props);
3234
const hookChangeShortcut = useShortcutsRange();
3335
3436
const startDate = ref<DatePickerValueNotArray>();
@@ -66,24 +68,6 @@ const MONTH_NAME = computed(() => [
6668
t("datePicker.december"),
6769
]);
6870
69-
const _defaultTime = computed(() => {
70-
if (props.type !== "datetime")
71-
return [];
72-
73-
const times = isArray(props.defaultTime)
74-
? props.defaultTime
75-
: [props.defaultTime, props.defaultTime];
76-
77-
return times.map(t => normalizeDayjsValue(t, "HH:mm:ss"));
78-
});
79-
80-
function setHMS(date: Dayjs, referDate: Dayjs) {
81-
return date
82-
.hour(referDate.hour())
83-
.minute(referDate.minute())
84-
.second(referDate.second());
85-
}
86-
8771
watch(
8872
() => props.modelValue,
8973
() => {
@@ -92,12 +76,12 @@ watch(
9276
endDate.value = end;
9377
9478
const _defaultDate = getDefaultValue();
95-
const _leftDate = _defaultTime.value[0]
96-
? setHMS(_defaultDate, _defaultTime.value[0])
79+
const _leftDate = defaultTimeValue.value[0]
80+
? setHMS(_defaultDate, defaultTimeValue.value[0])
9781
: _defaultDate;
9882
99-
const _rightDate = _defaultTime.value[1]
100-
? setHMS(_defaultDate.add(1, "month"), _defaultTime.value[1])
83+
const _rightDate = defaultTimeValue.value[1]
84+
? setHMS(_defaultDate.add(1, "month"), defaultTimeValue.value[1])
10185
: _defaultDate.add(1, "month");
10286
10387
leftDate.value = start || _leftDate;

packages/component/component/datePicker/component/MonthRange.vue

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<script setup lang="ts">
22
import type { Dayjs } from "dayjs";
33
import type {
4-
DatePickerModelValueSingleType,
54
DatePickerValueNotArray,
65
Shortcuts as ShortcutsType,
76
} from "../interface";
@@ -12,6 +11,7 @@ import { useI18n } from "@layui/component/language";
1211
import dayjs from "dayjs";
1312
import { computed, ref, watch } from "vue";
1413
14+
import { useBaseDatePicker } from "../hook/useBaseDatePicker";
1515
import { useShortcutsRange } from "../hook/useShortcutsRange";
1616
import DatePickerRender from "./common/DatePickerRender.vue";
1717
import Footer from "./common/Footer.vue";
@@ -23,6 +23,9 @@ const props = withDefaults(defineProps<RangePickerProps>(), {});
2323
const emits = defineEmits(["pick"]);
2424
2525
const { t } = useI18n();
26+
const {
27+
getDefaultValue,
28+
} = useBaseDatePicker(props);
2629
const hookChangeShortcut = useShortcutsRange();
2730
2831
const startDate = ref<DatePickerValueNotArray>();
@@ -35,14 +38,6 @@ const yearRightRef = ref<InstanceType<typeof LayDropdown>>();
3538
3639
const hoverMonth = ref<Dayjs | undefined>();
3740
38-
function getDefaultValue() {
39-
const _defaultValue = dayjs(
40-
props.defaultValue as DatePickerModelValueSingleType,
41-
);
42-
43-
return _defaultValue.isValid() ? _defaultValue : dayjs().startOf("day");
44-
}
45-
4641
watch(
4742
() => props.modelValue,
4843
() => {

packages/component/component/datePicker/component/common/Time.vue

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -156,12 +156,14 @@ function scrollTo() {
156156
}
157157
158158
watch(
159-
() => props.modelValue,
160-
(modelValue) => {
159+
() => [props.modelValue, props.showDate],
160+
([modelValue, showDate]) => {
161+
const dateValue = modelValue || showDate;
162+
161163
hms.value = {
162-
hh: modelValue ? modelValue.hour() : null,
163-
mm: modelValue ? modelValue.minute() : null,
164-
ss: modelValue ? modelValue.second() : null,
164+
hh: dateValue ? dateValue.hour() : null,
165+
mm: dateValue ? dateValue.minute() : null,
166+
ss: dateValue ? dateValue.second() : null,
165167
};
166168
167169
scrollTo();

packages/component/component/datePicker/hook/useBaseDatePicker.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ import type {
33
DatePickerRenderComponentProps,
44
} from "../interface";
55

6+
import { isArray } from "@layui/component/utils";
67
import dayjs from "dayjs";
8+
import { computed } from "vue";
9+
import { normalizeDayjsValue } from "../util";
710

811
export function useBaseDatePicker(props: DatePickerRenderComponentProps) {
912
const getDefaultValue = () => {
@@ -16,5 +19,18 @@ export function useBaseDatePicker(props: DatePickerRenderComponentProps) {
1619
: dayjs().startOf("day");
1720
};
1821

19-
return { getDefaultValue };
22+
const defaultTimeValue = computed(() => {
23+
if (props.type !== "datetime")
24+
return [];
25+
26+
const times = isArray(props.defaultTime)
27+
? props.defaultTime
28+
: [props.defaultTime, props.defaultTime];
29+
30+
return times.map(t => normalizeDayjsValue(t, "HH:mm:ss"));
31+
});
32+
33+
return { defaultTimeValue, getDefaultValue };
2034
}
35+
36+
export type UseBaseDatePicker = ReturnType<typeof useBaseDatePicker>;

packages/component/component/datePicker/util.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,3 +141,10 @@ export function setDateList(year: number, month: number): Array<DateContentSingl
141141
}
142142
return list;
143143
}
144+
145+
export function setHMS(date: Dayjs, referDate: Dayjs) {
146+
return date
147+
.hour(referDate.hour())
148+
.minute(referDate.minute())
149+
.second(referDate.second());
150+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy