fix event limit type
This commit is contained in:
@@ -310,10 +310,10 @@ const colorSwatchList = [
|
|||||||
|
|
||||||
const limitOptions: LimitOption[] = [
|
const limitOptions: LimitOption[] = [
|
||||||
{ label: "不限", value: "NONE" },
|
{ label: "不限", value: "NONE" },
|
||||||
{ label: "上午和下午各一次", value: "DAILY_HALF_DAY" },
|
{ label: "上午和下午各自限次", value: "DAILY_HALF_DAY" },
|
||||||
{ label: "间隔小时内一次", value: "INTERVAL_HOUR" },
|
{ label: "间隔小时内一次", value: "INTERVAL_HOUR" },
|
||||||
{ label: "每个自然日一次", value: "NATURAL_DAY" },
|
{ label: "每个自然日限次", value: "NATURAL_DAY" },
|
||||||
{ label: "每个自然月一次", value: "NATURAL_MONTH" },
|
{ label: "每个自然月限次", value: "NATURAL_MONTH" },
|
||||||
{ label: "事件总次数", value: "TOTAL_LIMIT" },
|
{ label: "事件总次数", value: "TOTAL_LIMIT" },
|
||||||
{ label: "单客户总次数", value: "CUSTOMER_TOTAL_LIMIT" }
|
{ label: "单客户总次数", value: "CUSTOMER_TOTAL_LIMIT" }
|
||||||
];
|
];
|
||||||
@@ -347,9 +347,18 @@ const defaultEndAtText = computed(() => {
|
|||||||
return Time.formatDateTime(date);
|
return Time.formatDateTime(date);
|
||||||
});
|
});
|
||||||
const limitValuePlaceholder = computed(() => {
|
const limitValuePlaceholder = computed(() => {
|
||||||
|
if (formModel.limitType === "DAILY_HALF_DAY") {
|
||||||
|
return "请输入上午和下午各自次数上限";
|
||||||
|
}
|
||||||
if (formModel.limitType === "INTERVAL_HOUR") {
|
if (formModel.limitType === "INTERVAL_HOUR") {
|
||||||
return "请输入间隔小时数";
|
return "请输入间隔小时数";
|
||||||
}
|
}
|
||||||
|
if (formModel.limitType === "NATURAL_DAY") {
|
||||||
|
return "请输入每天次数上限";
|
||||||
|
}
|
||||||
|
if (formModel.limitType === "NATURAL_MONTH") {
|
||||||
|
return "请输入每月次数上限";
|
||||||
|
}
|
||||||
if (formModel.limitType === "CUSTOMER_TOTAL_LIMIT") {
|
if (formModel.limitType === "CUSTOMER_TOTAL_LIMIT") {
|
||||||
return "请输入单客户总次数上限";
|
return "请输入单客户总次数上限";
|
||||||
}
|
}
|
||||||
@@ -402,6 +411,9 @@ function confirmLimitPicker(value: Array<string | number>): void {
|
|||||||
const limitType = value[0];
|
const limitType = value[0];
|
||||||
if (typeof limitType === "string") {
|
if (typeof limitType === "string") {
|
||||||
formModel.limitType = limitType as EventLimitType;
|
formModel.limitType = limitType as EventLimitType;
|
||||||
|
if (isValueLimitType(formModel.limitType) && !formModel.limitValueText) {
|
||||||
|
formModel.limitValueText = "1";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
limitPickerVisible.value = false;
|
limitPickerVisible.value = false;
|
||||||
}
|
}
|
||||||
@@ -422,7 +434,7 @@ function confirmStatusPicker(value: Array<string | number>): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function isValueLimitType(value: EventLimitType): boolean {
|
function isValueLimitType(value: EventLimitType): boolean {
|
||||||
return value === "INTERVAL_HOUR" || value === "TOTAL_LIMIT" || value === "CUSTOMER_TOTAL_LIMIT";
|
return value !== "NONE";
|
||||||
}
|
}
|
||||||
|
|
||||||
function resolveLimitValue(): number | undefined {
|
function resolveLimitValue(): number | undefined {
|
||||||
@@ -434,6 +446,13 @@ function resolveLimitValue(): number | undefined {
|
|||||||
return 0 < value ? Math.floor(value) : 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 {
|
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",
|
status: current.status === "DRAFT" ? "DRAFT" : current.status === "INACTIVE" ? "INACTIVE" : "ACTIVE",
|
||||||
requirePhoto: current.requirePhoto ?? false,
|
requirePhoto: current.requirePhoto ?? false,
|
||||||
limitType: current.limitType || "NONE",
|
limitType: current.limitType || "NONE",
|
||||||
limitValueText: current.limitValue ? String(current.limitValue) : "",
|
|
||||||
beginAtText: current.beginAt ? Time.toDateTime(current.beginAt) : "",
|
beginAtText: current.beginAt ? Time.toDateTime(current.beginAt) : "",
|
||||||
endAtText: current.endAt ? Time.toDateTime(current.endAt) : "",
|
endAtText: current.endAt ? Time.toDateTime(current.endAt) : "",
|
||||||
roleCodeList: [...(current.roleCodeList || [])]
|
roleCodeList: [...(current.roleCodeList || [])]
|
||||||
});
|
});
|
||||||
|
formModel.limitValueText = resolveLimitValueText(current.limitValue);
|
||||||
colorDraft.value = formModel.color;
|
colorDraft.value = formModel.color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -186,18 +186,26 @@ function getStatusTag(item: EventItem): StatusTag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getLimitText(item: EventItem): string {
|
function getLimitText(item: EventItem): string {
|
||||||
|
const limitValue = resolveLimitValue(item.limitValue);
|
||||||
const limitTextMap: Record<EventLimitType, string> = {
|
const limitTextMap: Record<EventLimitType, string> = {
|
||||||
NONE: "不限次数",
|
NONE: "不限次数",
|
||||||
DAILY_HALF_DAY: "上午/下午各一次",
|
DAILY_HALF_DAY: `上午/下午各 ${limitValue} 次`,
|
||||||
INTERVAL_HOUR: `每隔 ${item.limitValue || 0} 小时`,
|
INTERVAL_HOUR: `每隔 ${limitValue} 小时`,
|
||||||
NATURAL_DAY: "每个自然日一次",
|
NATURAL_DAY: `每个自然日 ${limitValue} 次`,
|
||||||
NATURAL_MONTH: "每个自然月一次",
|
NATURAL_MONTH: `每个自然月 ${limitValue} 次`,
|
||||||
TOTAL_LIMIT: `事件总上限 ${item.limitValue || 0} 次`,
|
TOTAL_LIMIT: `事件总上限 ${limitValue} 次`,
|
||||||
CUSTOMER_TOTAL_LIMIT: `单客户总上限 ${item.limitValue || 0} 次`
|
CUSTOMER_TOTAL_LIMIT: `单客户总上限 ${limitValue} 次`
|
||||||
};
|
};
|
||||||
return limitTextMap[item.limitType || "NONE"];
|
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 {
|
function getRoleName(code: string): string {
|
||||||
const role = roleOptions.value.find(item => item.code === code);
|
const role = roleOptions.value.find(item => item.code === code);
|
||||||
return role?.name || code;
|
return role?.name || code;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div v-can="pageAccess" class="point-rule-edit">
|
<div v-can="pageAccess" class="point-rule-edit">
|
||||||
<t-form class="form" label-align="left">
|
<t-form class="form" label-align="left" label-width="6rem">
|
||||||
<t-form-item v-if="isGlobalManager" label="门店" required-mark :arrow="isCreateMode" @click="openStorePicker">
|
<t-form-item v-if="isGlobalManager" label="门店" required-mark :arrow="isCreateMode" @click="openStorePicker">
|
||||||
<span class="picker-text" v-text="selectedStoreName" />
|
<span class="picker-text" v-text="selectedStoreName" />
|
||||||
</t-form-item>
|
</t-form-item>
|
||||||
|
|||||||
Reference in New Issue
Block a user