fix event limit type

This commit is contained in:
Timi
2026-08-11 22:54:57 +08:00
parent 200cc5fd3f
commit 9c30891f2c
3 changed files with 39 additions and 12 deletions
+24 -5
View File
@@ -310,10 +310,10 @@ const colorSwatchList = [
const limitOptions: LimitOption[] = [
{ label: "不限", value: "NONE" },
{ label: "上午和下午各一次", value: "DAILY_HALF_DAY" },
{ label: "上午和下午各自限次", value: "DAILY_HALF_DAY" },
{ label: "间隔小时内一次", value: "INTERVAL_HOUR" },
{ label: "每个自然日一次", value: "NATURAL_DAY" },
{ label: "每个自然月一次", value: "NATURAL_MONTH" },
{ label: "每个自然日限次", value: "NATURAL_DAY" },
{ label: "每个自然月限次", value: "NATURAL_MONTH" },
{ label: "事件总次数", value: "TOTAL_LIMIT" },
{ label: "单客户总次数", value: "CUSTOMER_TOTAL_LIMIT" }
];
@@ -347,9 +347,18 @@ const defaultEndAtText = computed(() => {
return Time.formatDateTime(date);
});
const limitValuePlaceholder = computed(() => {
if (formModel.limitType === "DAILY_HALF_DAY") {
return "请输入上午和下午各自次数上限";
}
if (formModel.limitType === "INTERVAL_HOUR") {
return "请输入间隔小时数";
}
if (formModel.limitType === "NATURAL_DAY") {
return "请输入每天次数上限";
}
if (formModel.limitType === "NATURAL_MONTH") {
return "请输入每月次数上限";
}
if (formModel.limitType === "CUSTOMER_TOTAL_LIMIT") {
return "请输入单客户总次数上限";
}
@@ -402,6 +411,9 @@ function confirmLimitPicker(value: Array<string | number>): void {
const limitType = value[0];
if (typeof limitType === "string") {
formModel.limitType = limitType as EventLimitType;
if (isValueLimitType(formModel.limitType) && !formModel.limitValueText) {
formModel.limitValueText = "1";
}
}
limitPickerVisible.value = false;
}
@@ -422,7 +434,7 @@ function confirmStatusPicker(value: Array<string | number>): void {
}
function isValueLimitType(value: EventLimitType): boolean {
return value === "INTERVAL_HOUR" || value === "TOTAL_LIMIT" || value === "CUSTOMER_TOTAL_LIMIT";
return value !== "NONE";
}
function resolveLimitValue(): number | undefined {
@@ -434,6 +446,13 @@ function resolveLimitValue(): number | undefined {
return 0 < value ? Math.floor(value) : undefined;
}
function resolveLimitValueText(value?: number): string {
if (value !== undefined && Number.isFinite(value) && 0 < value) {
return String(Math.floor(value));
}
return isValueLimitType(formModel.limitType) ? "1" : "";
}
// ---------- 表单转换 ----------
function resolveTimestamp(valueText: string): number | undefined {
@@ -613,11 +632,11 @@ async function fillForm(): Promise<void> {
status: current.status === "DRAFT" ? "DRAFT" : current.status === "INACTIVE" ? "INACTIVE" : "ACTIVE",
requirePhoto: current.requirePhoto ?? false,
limitType: current.limitType || "NONE",
limitValueText: current.limitValue ? String(current.limitValue) : "",
beginAtText: current.beginAt ? Time.toDateTime(current.beginAt) : "",
endAtText: current.endAt ? Time.toDateTime(current.endAt) : "",
roleCodeList: [...(current.roleCodeList || [])]
});
formModel.limitValueText = resolveLimitValueText(current.limitValue);
colorDraft.value = formModel.color;
}
+14 -6
View File
@@ -186,18 +186,26 @@ function getStatusTag(item: EventItem): StatusTag {
}
function getLimitText(item: EventItem): string {
const limitValue = resolveLimitValue(item.limitValue);
const limitTextMap: Record<EventLimitType, string> = {
NONE: "不限次数",
DAILY_HALF_DAY: "上午/下午各一次",
INTERVAL_HOUR: `每隔 ${item.limitValue || 0} 小时`,
NATURAL_DAY: "每个自然日一次",
NATURAL_MONTH: "每个自然月一次",
TOTAL_LIMIT: `事件总上限 ${item.limitValue || 0} 次`,
CUSTOMER_TOTAL_LIMIT: `单客户总上限 ${item.limitValue || 0} 次`
DAILY_HALF_DAY: `上午/下午各 ${limitValue} 次`,
INTERVAL_HOUR: `每隔 ${limitValue} 小时`,
NATURAL_DAY: `每个自然日 ${limitValue} 次`,
NATURAL_MONTH: `每个自然月 ${limitValue} 次`,
TOTAL_LIMIT: `事件总上限 ${limitValue} 次`,
CUSTOMER_TOTAL_LIMIT: `单客户总上限 ${limitValue} 次`
};
return limitTextMap[item.limitType || "NONE"];
}
function resolveLimitValue(value?: number): number {
if (value !== undefined && Number.isFinite(value) && 0 < value) {
return Math.floor(value);
}
return 1;
}
function getRoleName(code: string): string {
const role = roleOptions.value.find(item => item.code === code);
return role?.name || code;