|
|
@@ -205,12 +205,37 @@ export function validateDateRange(
|
|
|
rangeErrorMessage: string = "开始时间必须早于结束时间",
|
|
|
checkToday: boolean = true
|
|
|
) {
|
|
|
- return (rule: any, value: any, callback: any, isStartDate: boolean = true) => {
|
|
|
+ return (rule: any, value: any, callback: any) => {
|
|
|
if (!value) {
|
|
|
callback();
|
|
|
return;
|
|
|
}
|
|
|
const selectedDate = new Date(value);
|
|
|
+ selectedDate.setHours(0, 0, 0, 0);
|
|
|
+
|
|
|
+ // 自动判断是开始日期还是结束日期
|
|
|
+ // 优先通过值比较判断(最可靠),其次通过字段名判断
|
|
|
+ const startDateValue = getStartDate();
|
|
|
+ const endDateValue = getEndDate ? getEndDate() : null;
|
|
|
+ const fieldName = rule?.field || "";
|
|
|
+
|
|
|
+ let isStartDate = false;
|
|
|
+
|
|
|
+ // 优先通过值比较判断
|
|
|
+ if (value === startDateValue) {
|
|
|
+ isStartDate = true;
|
|
|
+ } else if (endDateValue && value === endDateValue) {
|
|
|
+ isStartDate = false;
|
|
|
+ } else if (fieldName) {
|
|
|
+ // 如果值比较无法判断,则通过字段名判断
|
|
|
+ // 如果字段名包含 "begin"、"start"、"开始" 等关键词,认为是开始日期
|
|
|
+ const lowerFieldName = fieldName.toLowerCase();
|
|
|
+ isStartDate = lowerFieldName.includes("begin") || lowerFieldName.includes("start") || lowerFieldName.includes("开始");
|
|
|
+ // 如果字段名包含 "end"、"结束" 等关键词,明确认为是结束日期
|
|
|
+ if (lowerFieldName.includes("end") || lowerFieldName.includes("结束")) {
|
|
|
+ isStartDate = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
// 验证不能早于今天
|
|
|
if (checkToday) {
|
|
|
@@ -224,18 +249,22 @@ export function validateDateRange(
|
|
|
|
|
|
// 验证日期范围
|
|
|
if (isStartDate && getEndDate) {
|
|
|
+ // 验证开始日期:开始日期必须早于结束日期
|
|
|
const endDate = getEndDate();
|
|
|
if (endDate) {
|
|
|
const end = new Date(endDate);
|
|
|
+ end.setHours(0, 0, 0, 0);
|
|
|
if (selectedDate >= end) {
|
|
|
callback(new Error(rangeErrorMessage));
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
} else if (!isStartDate && getStartDate) {
|
|
|
+ // 验证结束日期:结束日期必须晚于开始日期
|
|
|
const startDate = getStartDate();
|
|
|
if (startDate) {
|
|
|
const start = new Date(startDate);
|
|
|
+ start.setHours(0, 0, 0, 0);
|
|
|
if (selectedDate <= start) {
|
|
|
callback(new Error(rangeErrorMessage));
|
|
|
return;
|