ERPTurbo_Client/packages/app-client/src/utils/format.ts
shenyifei 0adce7ac3e feat(docs): 添加OpenSpec规范文档和智能代理配置
- 新增OpenSpec代理配置文件,包括文档自动维护专家、代码分析师、Java开发专家、React开发专家和Taro/NutUI开发专家
- 添加OpenSpec规范说明文档,定义项目规范驱动开发流程
- 配置项目级OpenSpec设置,包括技术栈和架构模式约定
- 更新.gitignore文件,排除.bmad-core和Claude相关目录
- 升级Node.js版本至22.11.0
- 优化format.ts工具函数格式化和价格验证逻辑
- 添加AGENTS.md和CLAUDE.md说明文件,集成OpenSpec指令
2025-11-21 15:00:39 +08:00

80 lines
2.1 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) => {
// 去掉 小数点后多余的0
return Number(value || 0)
?.toFixed(2)
.replace(/\.?0+$/, "");
};
// 格式化金额显示
export const formatUnitPrice = (value: number) => {
return value.toFixed(2).replace(/\.?0+$/, "");
};
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) : "";
}
}
};