From 1700805341e9ccab1b518fb36d935fffb012a865 Mon Sep 17 00:00:00 2001 From: Jevin Date: Sat, 5 Jul 2025 09:26:53 +0000 Subject: [PATCH 1/8] =?UTF-8?q?!498=20fix(menu):=20=E9=AB=98=E5=BA=A6?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=20*=20fix(menu):=20height=20error?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/component/component/menu/index.less | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/component/component/menu/index.less b/packages/component/component/menu/index.less index b6942dff..6e71b9b6 100644 --- a/packages/component/component/menu/index.less +++ b/packages/component/component/menu/index.less @@ -188,13 +188,13 @@ } .layui-nav-tree .layui-nav-item > a { - height: 40px; - line-height: 40px; + height: 50px; + line-height: 50px; position: relative; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; - padding: 5px 23px 5px 23px; + padding: 0 23px; } .layui-nav-tree .layui-nav-item * { From b2c0223060c0adc6c7613aa885087c949dbe0af9 Mon Sep 17 00:00:00 2001 From: Jevin Date: Sat, 5 Jul 2025 09:27:15 +0000 Subject: [PATCH 2/8] =?UTF-8?q?!497=20feat(datePicker):=20default-time?= =?UTF-8?q?=E5=9C=A8=E9=9D=9Erange=E6=A8=A1=E5=BC=8F=E4=B8=8B=E7=94=9F?= =?UTF-8?q?=E6=95=88=20*=20feat(datePicker):=20default-time=E5=9C=A8?= =?UTF-8?q?=E9=9D=9Erange=E6=A8=A1=E5=BC=8F=E4=B8=8B=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../document/zh-CN/components/datePicker.md | 2 +- .../datePicker/__tests__/datePicker.test.tsx | 32 +++++++++++++++++ .../datePicker/component/DatePicker.vue | 20 +++++++---- .../datePicker/component/DateRange.vue | 34 +++++-------------- .../datePicker/component/MonthRange.vue | 13 +++---- .../datePicker/component/common/Time.vue | 12 ++++--- .../datePicker/hook/useBaseDatePicker.ts | 18 +++++++++- .../component/component/datePicker/util.ts | 7 ++++ 8 files changed, 90 insertions(+), 48 deletions(-) diff --git a/docs/src/document/zh-CN/components/datePicker.md b/docs/src/document/zh-CN/components/datePicker.md index 2e4f1613..c60bb8e8 100644 --- a/docs/src/document/zh-CN/components/datePicker.md +++ b/docs/src/document/zh-CN/components/datePicker.md @@ -636,7 +636,7 @@ const value13 = ref() | 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) | - | | 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` | | default-value | `首次未点击` 时,下拉弹窗打开时默认显示的时间,传空为组件首次 `渲染时间` | `DatePickerModelValueSingleType` `Array` | -- | -- | `2.19.0` | -| default-time | 范围日期 `type=datetime` 时分秒默认时间 | `string` `Array` | -- | 例如`12:30:00` | `2.17.2` | +| default-time | `type=datetime` 时分秒默认时间 | `string` `Array` | -- | 例如`12:30:00` | `2.17.2` | | content-style | 内容自定义样式 | `StyleValue` | -- | -- | -- | | content-class | 内容自定义 Class | `string` `Array` `object` | -- | -- | -- | | year-page | 年份选择器每页年份的个数 | `number` | `15` | --| `2.19.0` | diff --git a/packages/component/component/datePicker/__tests__/datePicker.test.tsx b/packages/component/component/datePicker/__tests__/datePicker.test.tsx index 95abd345..64df3d08 100644 --- a/packages/component/component/datePicker/__tests__/datePicker.test.tsx +++ b/packages/component/component/datePicker/__tests__/datePicker.test.tsx @@ -339,4 +339,36 @@ describe("LayDatePicker date type", () => { expect(wrapper.find(".custom-footer").text()).toBe("自定义底部"); }); + test("default-time", async () => { + const wrapper = mount(LayDatePicker, { + props: { + type: 'datetime', + modelValue: "", + defaultTime: '12:30:00', + static: true + }, + }); + await nextTick(); + + const checkTimeDom = wrapper.find(".layui-laydate-footer > .layui-btn") + expect(checkTimeDom.exists()).toBeTruthy(); + + await checkTimeDom.trigger('click') + + + const timeDom = wrapper.find(".laydate-time-show") + expect(timeDom.exists()).toBeTruthy(); + + const currentHH = timeDom.find(".num-list[data-type='hh'] .layui-this") + const currentMM = timeDom.find(".num-list[data-type='mm'] .layui-this") + const currentSS = timeDom.find(".num-list[data-type='ss'] .layui-this") + + expect(currentHH.exists()).toBeTruthy(); + expect(currentMM.exists()).toBeTruthy(); + expect(currentSS.exists()).toBeTruthy(); + + expect(currentHH.text()).toBe('12'); + expect(currentMM.text()).toBe('30'); + expect(currentSS.text()).toBe('00'); + }); }); diff --git a/packages/component/component/datePicker/component/DatePicker.vue b/packages/component/component/datePicker/component/DatePicker.vue index c85b6913..09414782 100644 --- a/packages/component/component/datePicker/component/DatePicker.vue +++ b/packages/component/component/datePicker/component/DatePicker.vue @@ -5,15 +5,15 @@ import type { Shortcuts as ShortcutsType, } from "../interface"; import type { UniquePickerProps } from "./interface"; +import LayButton from "@layui/component/component/button/index.vue"; +import { useI18n } from "@layui/component/language"; + +import { isFunction } from "@layui/component/utils"; import dayjs from "dayjs"; import { computed, ref, watch } from "vue"; -import { useI18n } from "../../../language"; -import { isFunction } from "../../../utils"; - -import LayButton from "../../button/index.vue"; - import { useBaseDatePicker } from "../hook/useBaseDatePicker"; +import { setHMS } from "../util"; import Date from "./common/Date.vue"; import DatePickerRender from "./common/DatePickerRender.vue"; import Footer from "./common/Footer.vue"; @@ -30,14 +30,20 @@ const currentData = ref(); const showDate = ref(dayjs()); const currentType = ref(); -const { getDefaultValue } = useBaseDatePicker(props); +const { defaultTimeValue, getDefaultValue } = useBaseDatePicker(props); const { t } = useI18n(); watch( () => props.modelValue, () => { currentData.value = props.modelValue; - showDate.value = props.modelValue || getDefaultValue(); + let _defaultValue = getDefaultValue(); + + _defaultValue = defaultTimeValue.value[0] + ? setHMS(_defaultValue, defaultTimeValue.value[0]) + : _defaultValue; + + showDate.value = props.modelValue || _defaultValue; }, { immediate: true }, ); diff --git a/packages/component/component/datePicker/component/DateRange.vue b/packages/component/component/datePicker/component/DateRange.vue index 149e4a40..5833d279 100644 --- a/packages/component/component/datePicker/component/DateRange.vue +++ b/packages/component/component/datePicker/component/DateRange.vue @@ -9,13 +9,12 @@ import type { import LayDropdown from "@layui/component/component/dropdown"; import LayIcon from "@layui/component/component/icon"; import { useI18n } from "@layui/component/language"; -import { isArray } from "@layui/component/utils"; import dayjs from "dayjs"; import { computed, ref, watch } from "vue"; import { useBaseDatePicker } from "../hook/useBaseDatePicker"; import { useShortcutsRange } from "../hook/useShortcutsRange"; -import { normalizeDayjsValue, setDateList } from "../util"; +import { setDateList, setHMS } from "../util"; import DateContent from "./common/DateContent.vue"; import DatePickerRender from "./common/DatePickerRender.vue"; import Footer from "./common/Footer.vue"; @@ -28,7 +27,10 @@ const props = withDefaults(defineProps(), {}); const emits = defineEmits(["pick"]); const { t } = useI18n(); -const { getDefaultValue } = useBaseDatePicker(props); +const { + defaultTimeValue, + getDefaultValue, +} = useBaseDatePicker(props); const hookChangeShortcut = useShortcutsRange(); const startDate = ref(); @@ -66,24 +68,6 @@ const MONTH_NAME = computed(() => [ t("datePicker.december"), ]); -const _defaultTime = computed(() => { - if (props.type !== "datetime") - return []; - - const times = isArray(props.defaultTime) - ? props.defaultTime - : [props.defaultTime, props.defaultTime]; - - return times.map(t => normalizeDayjsValue(t, "HH:mm:ss")); -}); - -function setHMS(date: Dayjs, referDate: Dayjs) { - return date - .hour(referDate.hour()) - .minute(referDate.minute()) - .second(referDate.second()); -} - watch( () => props.modelValue, () => { @@ -92,12 +76,12 @@ watch( endDate.value = end; const _defaultDate = getDefaultValue(); - const _leftDate = _defaultTime.value[0] - ? setHMS(_defaultDate, _defaultTime.value[0]) + const _leftDate = defaultTimeValue.value[0] + ? setHMS(_defaultDate, defaultTimeValue.value[0]) : _defaultDate; - const _rightDate = _defaultTime.value[1] - ? setHMS(_defaultDate.add(1, "month"), _defaultTime.value[1]) + const _rightDate = defaultTimeValue.value[1] + ? setHMS(_defaultDate.add(1, "month"), defaultTimeValue.value[1]) : _defaultDate.add(1, "month"); leftDate.value = start || _leftDate; diff --git a/packages/component/component/datePicker/component/MonthRange.vue b/packages/component/component/datePicker/component/MonthRange.vue index bad08af5..16c96261 100644 --- a/packages/component/component/datePicker/component/MonthRange.vue +++ b/packages/component/component/datePicker/component/MonthRange.vue @@ -1,7 +1,6 @@