fix point rule unit

This commit is contained in:
Timi
2026-08-19 15:46:03 +08:00
parent ff156926f5
commit 84bc6d137d
5 changed files with 150 additions and 103 deletions
+22 -5
View File
@@ -1,4 +1,6 @@
import type { EventValueUnit } from "@/types/EventItem";
import type { PointRuleTierForm } from "@/types/Point";
import { formatCentValue, resolveCentValue } from "@/utils/eventValue";
export function resolveNonNegativeInteger(value: string): number | undefined {
if (!value.trim()) {
@@ -8,20 +10,35 @@ export function resolveNonNegativeInteger(value: string): number | undefined {
return Number.isSafeInteger(numberValue) && !(numberValue < 0) ? numberValue : undefined;
}
export function getTierMinValue(tierList: PointRuleTierForm[], index: number): number | undefined {
/**
* 按来源事件的存储单位解析分档边界。
* CENT 的表单值使用元,解析结果使用分;COUNT 直接使用整数次数。
*/
export function resolveTierBoundaryValue(value: string, valueUnit?: EventValueUnit | null): number | undefined {
return valueUnit === "CENT" ? resolveCentValue(value.trim()) : resolveNonNegativeInteger(value);
}
/**
* 按来源事件的展示单位格式化分档边界。
*/
export function formatTierBoundaryValue(value: number, valueUnit?: EventValueUnit | null): string {
return valueUnit === "CENT" ? formatCentValue(value) : String(value);
}
export function getTierMinValue(tierList: PointRuleTierForm[], index: number, valueUnit?: EventValueUnit | null): number | undefined {
if (index === 0) {
return 0;
}
const previousMax = resolveNonNegativeInteger(tierList[index - 1]?.maxText || "");
const previousMax = resolveTierBoundaryValue(tierList[index - 1]?.maxText || "", valueUnit);
if (previousMax === undefined || !Number.isSafeInteger(previousMax + 1)) {
return undefined;
}
return previousMax + 1;
}
export function getTierMinText(tierList: PointRuleTierForm[], index: number): string {
const min = getTierMinValue(tierList, index);
return min === undefined ? "待填写" : String(min);
export function getTierMinText(tierList: PointRuleTierForm[], index: number, valueUnit?: EventValueUnit | null): string {
const min = getTierMinValue(tierList, index, valueUnit);
return min === undefined ? "待填写" : formatTierBoundaryValue(min, valueUnit);
}
export function isLastTier(tierList: PointRuleTierForm[], index: number): boolean {