diff --git a/src/pages/customer/CustomerList.vue b/src/pages/customer/CustomerList.vue index e231a64..b00c8a1 100644 --- a/src/pages/customer/CustomerList.vue +++ b/src/pages/customer/CustomerList.vue @@ -168,6 +168,7 @@ import { useSettingStore } from "@/store/settingStore"; import type { Customer } from "@/types/Customer"; import type { NavBarAction } from "@/types/NavBarAction"; import type { Tag } from "@/types/Tag"; +import { buildPresetDateRange, parseDateTime } from "@/utils/date"; import { corePermissionCodes, gaoRoleCodes, permissionCodes } from "@/utils/permission"; defineOptions({ @@ -206,7 +207,7 @@ const dateOptions: Array<{ label: string; value: DateFilterType }> = [ { label: "自定义范围", value: "custom" } ]; const dateFilterType = ref("all"); -const dateRange = ref<[string, string]>(buildPresetRange("all")); +const dateRange = ref<[string, string]>(buildPresetDateRange("all")); const startDraft = ref(""); const endDraft = ref(""); const startVisible = ref(false); @@ -279,7 +280,7 @@ async function selectDateFilter(value: DropdownValue): Promise { dateFilterType.value = String(value) as DateFilterType; if (dateFilterType.value !== "custom") { - dateRange.value = buildPresetRange(dateFilterType.value); + dateRange.value = buildPresetDateRange(dateFilterType.value); await refresh(); } } @@ -499,53 +500,6 @@ function buildCreatedAtRange(): [number | undefined, number | undefined] { ]; } -function buildPresetRange(type: Exclude): [string, string] { - if (type === "all") { - return ["", ""]; - } - if (type === "lastWeek") { - const current = new Date(); - current.setHours(0, 0, 0, 0); - const day = current.getDay() || 7; - const thisWeekMonday = new Date(current); - thisWeekMonday.setDate(current.getDate() - day + 1); - const lastWeekMonday = new Date(thisWeekMonday); - lastWeekMonday.setDate(thisWeekMonday.getDate() - 7); - const lastWeekSunday = new Date(thisWeekMonday); - lastWeekSunday.setDate(thisWeekMonday.getDate() - 1); - return [`${Time.formatDate(lastWeekMonday)} 00:00`, `${Time.formatDate(lastWeekSunday)} 23:59`]; - } - if (type === "thisMonth") { - const current = new Date(); - const begin = new Date(current.getFullYear(), current.getMonth(), 1); - return [`${Time.formatDate(begin)} 00:00`, `${Time.formatDate(current)} 23:59`]; - } - if (type === "lastMonth") { - const current = new Date(); - const begin = new Date(current.getFullYear(), current.getMonth() - 1, 1); - const end = new Date(current.getFullYear(), current.getMonth(), 0); - return [`${Time.formatDate(begin)} 00:00`, `${Time.formatDate(end)} 23:59`]; - } - - const offsetMap: Record, number> = { - today: 0, - yesterday: 1 - }; - const date = new Date(); - date.setHours(0, 0, 0, 0); - date.setDate(date.getDate() - offsetMap[type]); - return [`${Time.formatDate(date)} 00:00`, `${Time.formatDate(date)} 23:59`]; -} - -function parseDateTime(value: string, isEnd: boolean): Date { - if (!value) { - return isEnd ? new Date() : new Date(0); - } - const [dateText, timeText = isEnd ? "23:59" : "00:00"] = value.split(" "); - const [year, month, day] = dateText.split("-").map(Number); - const [hour, minute] = timeText.split(":").map(Number); - return new Date(year, month - 1, day, hour || 0, minute || 0, isEnd ? 59 : 0, 0); -}