| | |
| | | NTimePicker, |
| | | } from "naive-ui"; |
| | | import type { FormInst, FormItemRule } from "naive-ui"; |
| | | import { computed, nextTick, onBeforeUnmount, ref, watch } from "vue"; |
| | | import { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from "vue"; |
| | | import PointStatusSteps from "@/components/PointStatusSteps/custom.vue"; |
| | | import closeIcon from "@/assets/geofence/close2.png"; |
| | | import timeIcon from "@/assets/geofence/time.png"; |
| | |
| | | } |
| | | ); |
| | | |
| | | const lastTimePickerPanelUnit = ref<"hour" | "minute" | "second" | "period" | null>(null); |
| | | |
| | | function handleTimePickerPanelClick(event: Event) { |
| | | const target = event.target as HTMLElement | null; |
| | | const panelItem = target?.closest(".n-time-picker-col__item"); |
| | | if (!panelItem) { |
| | | lastTimePickerPanelUnit.value = null; |
| | | return; |
| | | } |
| | | |
| | | const columnElement = panelItem.closest(".n-time-picker-col") as HTMLElement | null; |
| | | const columnsContainer = columnElement?.parentElement; |
| | | if (!columnElement || !columnsContainer) { |
| | | lastTimePickerPanelUnit.value = null; |
| | | return; |
| | | } |
| | | |
| | | const columnElements = Array.from(columnsContainer.children).filter((element) => |
| | | (element as HTMLElement).classList.contains("n-time-picker-col") |
| | | ); |
| | | const columnIndex = columnElements.indexOf(columnElement); |
| | | const units: Array<"hour" | "minute" | "second" | "period"> = ["hour", "minute", "second", "period"]; |
| | | lastTimePickerPanelUnit.value = units[columnIndex] || null; |
| | | } |
| | | |
| | | function closeTimePicker() { |
| | | if (lastTimePickerPanelUnit.value !== "minute") return; |
| | | lastTimePickerPanelUnit.value = null; |
| | | if (document.activeElement) { |
| | | (document.activeElement as HTMLElement).blur(); |
| | | } |
| | | } |
| | | |
| | | onMounted(() => { |
| | | document.addEventListener("click", handleTimePickerPanelClick, true); |
| | | }); |
| | | |
| | | onBeforeUnmount(() => { |
| | | mainScrollRef.value?.removeEventListener("scroll", handleScroll); |
| | | document.removeEventListener("click", handleTimePickerPanelClick, true); |
| | | }); |
| | | |
| | | defineExpose({ validateForm }); |
| | |
| | | :status="getStartPickerStatus(strategy, timeItem)" |
| | | :actions="['now']" |
| | | class="custom-time-picker" |
| | | @update:value="strategy.errorMsg = ''" |
| | | @update:value=" |
| | | () => { |
| | | strategy.errorMsg = ''; |
| | | closeTimePicker(); |
| | | } |
| | | " |
| | | /> |
| | | 至 |
| | | <n-time-picker |
| | |
| | | :is-hour-disabled="(hour: number) => isEndTimeDisabledByStart(hour, undefined, timeItem)" |
| | | :is-minute-disabled="(minute: number, hour: number | null) => isEndTimeDisabledByStart(Number(hour || 0), minute, timeItem)" |
| | | class="custom-time-picker" |
| | | @update:value="strategy.errorMsg = ''" |
| | | @update:value=" |
| | | () => { |
| | | strategy.errorMsg = ''; |
| | | closeTimePicker(); |
| | | } |
| | | " |
| | | /> |
| | | <img |
| | | v-if="!isLocked" |