- 新增 tsconfig.json 配置 - 新增 types/ 目录(7个类型定义文件,与后端 DTO 对齐) - 迁移 vite.config.js → vite.config.ts - 迁移 main.js → main.ts - 迁移 utils/api.js → utils/api.ts(泛型化请求封装) - 迁移 utils/currency.js → utils/currency.ts - 迁移 6 个 Vue 页面组件(添加 lang="ts" 和类型注解) - 新增 TYPESCRIPT_MIGRATION.md 迁移计划文档 - 更新 todo.md 进度 收益:完整类型提示、编译时错误检查、重构安全性提升
69 lines
1.7 KiB
TypeScript
69 lines
1.7 KiB
TypeScript
/**
|
|
* 货币工具函数
|
|
*/
|
|
|
|
import type { CurrencyCode } from '@/types/portfolio';
|
|
|
|
const CURRENCY_SYMBOLS: Record<string, string> = {
|
|
'CNY': '¥',
|
|
'USD': '$',
|
|
'HKD': 'HK$',
|
|
'EUR': '€',
|
|
'GBP': '£',
|
|
'JPY': '¥',
|
|
'SGD': 'S$',
|
|
'AUD': 'A$'
|
|
};
|
|
|
|
/**
|
|
* 获取货币符号
|
|
* @param currency - 货币代码 (CNY, USD, HKD 等)
|
|
* @returns 货币符号
|
|
*/
|
|
export function getCurrencySymbol(currency?: string): string {
|
|
return CURRENCY_SYMBOLS[currency?.toUpperCase() ?? 'CNY'] || '¥';
|
|
}
|
|
|
|
/**
|
|
* 格式化金额
|
|
* @param amount - 金额
|
|
* @param currency - 货币代码
|
|
* @param decimals - 小数位数
|
|
* @returns 格式化后的金额字符串
|
|
*/
|
|
export function formatAmount(
|
|
amount: number,
|
|
currency: CurrencyCode | string = 'CNY',
|
|
decimals: number = 2
|
|
): string {
|
|
const symbol = getCurrencySymbol(currency);
|
|
const formatted = Math.abs(amount || 0).toLocaleString('zh-CN', {
|
|
minimumFractionDigits: decimals,
|
|
maximumFractionDigits: decimals
|
|
});
|
|
const sign = amount >= 0 ? '' : '-';
|
|
return `${sign}${symbol}${formatted}`;
|
|
}
|
|
|
|
/**
|
|
* 格式化金额(带正负号)
|
|
* @param amount - 金额
|
|
* @param currency - 货币代码
|
|
* @param decimals - 小数位数
|
|
* @returns 格式化后的金额字符串
|
|
*/
|
|
export function formatAmountWithSign(
|
|
amount: number,
|
|
currency: CurrencyCode | string = 'CNY',
|
|
decimals: number = 2
|
|
): string {
|
|
const symbol = getCurrencySymbol(currency);
|
|
const formatted = Math.abs(amount || 0).toLocaleString('zh-CN', {
|
|
minimumFractionDigits: decimals,
|
|
maximumFractionDigits: decimals
|
|
});
|
|
if (amount > 0) return `+${symbol}${formatted}`;
|
|
if (amount < 0) return `-${symbol}${formatted}`;
|
|
return `${symbol}${formatted}`;
|
|
}
|