ERPTurbo_Client/packages/app-client/src/utils/format.ts
shenyifei a62ca1fb95 refactor(purchase): 重构采购订单计算逻辑
- 引入 PurchaseOrderCalculator 类统一管理采购订单相关计算
- 替换原有分散的计算函数调用为计算器实例方法
- 更新成本差异、税费补贴、计提税金等计算逻辑
- 优化市场报价和平均单价的计算方式
- 调整成本汇总表格列定义及数据处理
- 修改页面中价格和金额的格式化显示逻辑
- 更新代理配置路径重写规则以适配新接口路径
- 调整标题文案从"寻鸿门店管理系统"到"西瓜运输管理系统"
2025-11-13 16:24:25 +08:00

77 lines
2.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import dayjs from "dayjs";
export function formatDistance(distance: number) {
if (distance < 0) {
return "0m";
}
if (distance < 1000) {
return Math.round(distance) + "m";
} else {
// 保留1位小数并去除可能的 .0
const km = (distance / 1000).toFixed(1);
return km.endsWith(".0") ? Math.round(distance / 1000) + "km" : km + "km";
}
}
export function formatHumanReadableDate(date: string) {
const d = dayjs(date);
const today = dayjs().startOf("day");
const targetDate = d.startOf("day");
if (targetDate.isSame(today, "day")) {
return "今天";
} else if (targetDate.isSame(today.add(1, "day"), "day")) {
return "明天";
} else if (targetDate.isSame(today.subtract(1, "day"), "day")) {
return "昨天";
} else {
return d.format("MM-DD");
}
}
export function convertSeconds(seconds, outputUnit) {
if (seconds < 0) {
return 0;
}
const secondsInt = Math.floor(seconds);
if (outputUnit === "时" || outputUnit === "小时" || outputUnit === "h") {
// 转换为小时(总小时数)
return Math.floor(secondsInt / 3600);
} else if (
outputUnit === "分" ||
outputUnit === "分钟" ||
outputUnit === "m"
) {
// 转换为分钟取模60后的分钟部分
return Math.floor((secondsInt % 3600) / 60);
} else {
throw new Error('不支持的输出单位,请使用"时"或"分"');
}
}
// 格式化金额显示
export const formatCurrency = (value: number) => {
return Number(value || 0)?.toLocaleString();
};
// 格式化金额显示
export const formatUnitPrice = (value: number) => {
return value.toFixed(2);
};
export const validatePrice = (value: string) => {
const regex = /^\d*\.?\d{0,2}$/;
console.log("validatePrice", value, regex.test(value))
if (value === "" || regex.test(value)) {
// 如果值以小数点结尾,则暂不转换为数字
if (value.endsWith(".") || value.endsWith(".0") || value.endsWith(".00")) {
return value;
} else {
return value ? parseFloat(value) : "";
}
}
};