fix point rule unit
This commit is contained in:
+18
-5
@@ -54,13 +54,13 @@ export function formatEventNumberValue(event: EventItem | undefined, value?: num
|
||||
return `${value}${event?.valueUnit === "COUNT" ? " 次" : ""}`;
|
||||
}
|
||||
|
||||
const centText = String(Math.trunc(value));
|
||||
const yuanText = centText.length < 3 ? "0" : centText.slice(0, -2);
|
||||
const decimalText = centText.slice(-2).padStart(2, "0").replace(/0+$/, "");
|
||||
return `${yuanText}${decimalText ? `.${decimalText}` : ""} 元`;
|
||||
return `${formatCentValue(value)} 元`;
|
||||
}
|
||||
|
||||
function resolveCentValue(valueText: string): number | undefined {
|
||||
/**
|
||||
* 将金额字符串转换为分,最多保留两位小数。
|
||||
*/
|
||||
export function resolveCentValue(valueText: string): number | undefined {
|
||||
const match = /^(\d+)(?:\.(\d{0,2}))?$/.exec(valueText);
|
||||
if (!match) {
|
||||
return undefined;
|
||||
@@ -74,3 +74,16 @@ function resolveCentValue(valueText: string): number | undefined {
|
||||
}
|
||||
return Number(centValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将整数分格式化为不带单位的元字符串。
|
||||
*/
|
||||
export function formatCentValue(value: number): string {
|
||||
if (!Number.isSafeInteger(value) || value < 0) {
|
||||
return "";
|
||||
}
|
||||
const centText = String(value);
|
||||
const yuanText = centText.length < 3 ? "0" : centText.slice(0, -2);
|
||||
const decimalText = centText.slice(-2).padStart(2, "0").replace(/0+$/, "");
|
||||
return `${yuanText}${decimalText ? `.${decimalText}` : ""}`;
|
||||
}
|
||||
|
||||
+22
-5
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user