Files
geg-gas-web/src/utils/dataFormat.ts

146 lines
3.5 KiB
TypeScript
Raw Normal View History

2026-01-29 18:39:46 +08:00
import TypeTools, { TYPES } from './type-tools';
const FormatType = {
DATE: 'date',
TIME: 'time',
DATETIME: 'datetime',
QTY: 'qty',
AMT: 'amt',
}
const DATE_FORMAT = {
DEFAULT: 'yyyy-MM-dd HH:mm:ss',
FULL_DATE: 'yyyy-MM-dd HH:mm:ss.S',
DATE: 'yyyy-MM-dd',
YEAR_MONTH: 'yyyy-MM',
TIME: 'HH:mm:ss'
}
const DataFormat = {
/**
*
* @param date
* @param formatString
* @returns
*/
2026-02-02 10:38:58 +08:00
format: (data: any, options:FormatOption[]) => {
for (let i = 0; i < options.length; i++) {
const option = options[i];
data = option.format(data);
}
return data;
},
test: () => {
let data: any[] = [
{
id: 1,
name: 'John',
age: 30,
total: 100548931,
amt: 12121.256,
createDate: new Date()
},
{
id: 2,
name: 'John-1',
age: 30,
total: 8564355.78832,
amt: 12121.256,
createDate: "2025-06-26 10:25:06.125"
}
];
DataFormat.format(data, [
new FormatOption('total', FormatType.QTY,"###,###,###,###,###,###,###.00"),
new FormatOption('amt', FormatType.AMT, 2),
new FormatOption('createDate', FormatType.DATE, DATE_FORMAT.DATE)
]);
console.log(data);
2026-01-29 18:39:46 +08:00
},
};
2026-02-02 10:38:58 +08:00
class FormatOption {
2026-01-29 18:39:46 +08:00
key:string;
type: string;
formatString: string|number;
constructor(key:string,type: string, formatString: string|number) {
this.key = key;
this.type = type;
this.formatString = formatString;
}
static createDate(key:string,type: string, formatString: string){
return new FormatOption(key,type,formatString);
}
static createQty(key:string,decimal?:number){
2026-02-02 10:38:58 +08:00
return new FormatOption(key,FormatType.QTY,decimal!=undefined?decimal:3);
2026-01-29 18:39:46 +08:00
}
static createAmt(key:string){
return new FormatOption(key,FormatType.AMT,2);
}
format(data:any):any{
var keys = this.key.split(".");
let valueKey = keys[keys.length-1];
2026-02-02 10:38:58 +08:00
let valueData:any = undefined;
2026-01-29 18:39:46 +08:00
if(keys.length<=1){
valueData = data;
}else{
valueData = TypeTools.getNestedValue(data,keys.splice(0,keys.length-1));
}
if(valueData!=undefined && TypeTools.isArray(valueData)){
for (let i = 0; i < valueData.length; i++) {
let item = valueData[i];
let val = item[valueKey];
2026-02-02 10:38:58 +08:00
item[valueKey] = this.formatValue(val);
2026-01-29 18:39:46 +08:00
}
}else{
2026-02-02 10:38:58 +08:00
let val = valueData[valueKey];
valueData[valueKey] = this.formatValue(val);
2026-01-29 18:39:46 +08:00
}
return data;
}
formatValue(value:any):any{
if(value==undefined || value==null) return value;
try {
if(this.type==FormatType.DATE || this.type==FormatType.TIME || this.type==FormatType.DATETIME){
2026-02-02 10:38:58 +08:00
let fmt = this.formatString as string;
return Date.valueOf(value).format(fmt);
}else if(this.type==FormatType.QTY || this.type==FormatType.AMT){
let numFmt = undefined;
if(Number.is(this.formatString)){
numFmt = this.createNumberFmt(this.formatString as number);
}else{
numFmt = this.formatString as string;
}
return Number.format(Number.parse(value),numFmt) ;
2026-01-29 18:39:46 +08:00
}
} catch (error) {
return value;
}
}
2026-02-02 10:38:58 +08:00
createNumberFmt(num:number){
let numFmt = "###,###,###,###,###,###";
if(num>0){
numFmt += ".";
for (let i = 0; i < num; i++) {
numFmt += "0";
}
}
return numFmt;
}
2026-01-29 18:39:46 +08:00
}
2026-02-02 10:38:58 +08:00
export {DataFormat,FormatOption,DATE_FORMAT,FormatType};
2026-01-29 18:39:46 +08:00