This commit is contained in:
‘huanghaiixia’
2026-02-02 10:44:13 +08:00
5 changed files with 77 additions and 134 deletions

2
.env
View File

@ -5,7 +5,7 @@ VITE_PORT = 3100
VITE_GLOB_APP_TITLE = 供应链平台
# spa shortname(英文缩写)
VITE_GLOB_APP_SHORT_NAME = 供应链平台
VITE_GLOB_APP_SHORT_NAME = GES_SCM
# 应用名称仅展示在登录页和左上角logo旁其他情况用VITE_GLOB_APP_TITLE
VITE_SYSTEM_NAME = 供应链平台

View File

@ -3,25 +3,10 @@
*/
;(function(){
Object.is = function(obj){
return Object.prototype.toString.call(obj) == "[object Object]";
}
String.is = function(obj){
return Object.prototype.toString.call(obj) == "[object String]";
}
String.prototype.getBytes = function(charset){
charset = charset||"UTF-8";
return new TextEncoder(charset).encode(this);
}
String.ofBytes = function(arr,charset){
charset = charset||"UTF-8";
var uint = arr instanceof Uint8Array?arr:new Uint8Array(arr);
return new TextDecoder(charset).decode(uint);
}
String.prototype.startWith = function(str){
if(str==undefined) return false;
if(str.length > this.length) return false;
@ -45,9 +30,6 @@
return true;
}
String.prototype.eq = function(str){
return (this+'')===str;
}
})();
/**
@ -59,12 +41,14 @@
}
Number.format = function(num,fmt){
const sign = num < 0 ? '-' : '';
const absNum = Math.abs(num);
var fmts = fmt.split(".");
var format = {
int:fmts[0].split("").reverse(),
scale:fmts[1]!=undefined?fmts[1].split(""):undefined
}
var numsp = (num+"").split(".");
var numsp = (absNum+"").split(".");
var numinfo = {
int:numsp[0].split("").reverse(),
scale:numsp[1]!=undefined?numsp[1].split(""):undefined
@ -88,6 +72,9 @@
}
}else if(item==","){
if(ni < numinfo.int.length){
if(ni==numinfo.int.length-1 && numinfo.int[ni]=="-"){
continue;
}
res.int.push(",");
}else{
continue;
@ -127,13 +114,14 @@
reStr+= ".";
reStr+= res.scale.join("");
}
return reStr.replace("-,", "-");
//return reStr.replace("-,", "-");
return sign+reStr;
}
Number.prototype.format = function(fmt){
if(fmt==undefined) throw new Error("参数格式化表达式不能为空!");
return Number.format(this,fmt);
}
// Number.prototype.format = function(fmt){
// if(fmt==undefined) throw new Error("参数格式化表达式不能为空!");
// return Number.format(this,fmt);
// }
Number.parse = function(str){
if(str==undefined) return str;
@ -283,9 +271,6 @@
if(/(y+)/.test(fmt)){
fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
}
if(/(E+)/.test(fmt)){
fmt=fmt.replace(RegExp.$1,((RegExp.$1.length>1)?(RegExp.$1.length==3?"星期":"周"):"")+this.i18n("Date.Week."+this.getDay()));
}
for(var k in o){
if(new RegExp("("+ k +")").test(fmt)){
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
@ -399,83 +384,5 @@
}
}
Date.prototype.i18n = function(fmt,args){
var str = undefined;
if($i18n){
var val = $i18n.t(fmt);
str =val==fmt?undefined:val;
}
if(str==undefined){
var obj = Date.Dictionary;
var fmts = fmt.split('.');
for (let i = 1; i < fmts.length; i++) {
const item = fmts[i];
obj = obj[item];
if(obj==undefined){
break;
}
}
str = obj;
}
if(str==undefined) return str;
if(args!=undefined){
for (var i = 0; i < args.length; i++) {
args[i] = args[i] || "";
var reg = new RegExp("({)" + i + "(})", "g");
str = str.replace(reg, args[i]);
}
}
str = str.replace(/^\{\d+\}$/g, "");
return str;
}
Date.prototype.getHolidayName = function(){
return this.i18n("Date.Holiday."+this.format("MMdd"));
}
Date.prototype.getLunarHolidayName = function(fmt){
return this.i18n("Date.LunarHoliday."+fmt);
}
Date.prototype.getTimeDistance = function(){
var date_now = new Date();
var time = this.getTime();
var distance = date_now.getTime() - time;
var days = parseInt(distance / (1000 * 60 * 60 * 24));
if (days == 1) {
return this.i18n('Date.timeDistance.yesterday');
} else if (days > 1 && days < 4) {
return this.i18n('Date.timeDistance.daysAgo',[days]);//days ago
} else if (days > 3) {
// 超过3天的返回日期如 2018-12-05
// 如果是今年的,就省去年份,返回 12-05
var year = this.getFullYear();
var month = this.getMonth() + 1;
if (month < 10) {
month = "0" + month;
}
var day = this.getDate();
if (day < 10) {
day = "0" + day;
}
if (date_now.getFullYear() == year) {
return month + "-" + day;
} else {
return year + "-" + month + "-" + day;
}
}
var hours = parseInt((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
if (hours > 0) {
return this.i18n('Date.timeDistance.hoursAgo',[hours]);
}
var minutes = parseInt((distance % (1000 * 60 * 60)) / (1000 * 60));
if (minutes > 0) {
return this.i18n('Date.timeDistance.minutesAgo',[minutes]);
};
return this.i18n('Date.timeDistance.justNow');
}
})();

View File

@ -20,7 +20,7 @@
import { computed } from 'vue';
import { getLogoInfo } from './api/system/login';
import { onBeforeUnmount } from 'vue';
import { getAppEnvConfig } from '/@/utils/env';
//import { getAppEnvConfig } from '/@/utils/env';
// support Multi-language
const { getLocale } = useLocale();

View File

@ -24,23 +24,43 @@ const DataFormat = {
* @param formatString 格式化字符串
* @returns 格式化后的日期
*/
formatDate: (date: Date | string | number, fmt: string = 'yyyy-MM-dd HH:mm:ss') => {
return Date.valueOf(date).format(fmt);
format: (data: any, options:FormatOption[]) => {
for (let i = 0; i < options.length; i++) {
const option = options[i];
data = option.format(data);
}
return data;
},
formatQty: (val: string | number, digits:number) => {
return format(new Date(date), digits);
test: () => {
let data: any[] = [
{
id: 1,
name: 'John',
age: 30,
total: 100548931,
amt: 12121.256,
createDate: new Date()
},
formatAmt: (val: string | number, formatString: number) => {
return format(new Date(date), digits);
},
parseDate: (date: string | Date, formatString: string = 'yyyy-MM-dd HH:mm:ss') => {
return new Date(date);
},
format:(data:any,option:any) => {
{
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);
},
};
export class FormatOption {
class FormatOption {
key:string;
type: string;
formatString: string|number;
@ -66,7 +86,7 @@ export class FormatOption {
format(data:any):any{
var keys = this.key.split(".");
let valueKey = keys[keys.length-1];
let valueData;
let valueData:any = undefined;
if(keys.length<=1){
valueData = data;
}else{
@ -76,13 +96,11 @@ export class FormatOption {
for (let i = 0; i < valueData.length; i++) {
let item = valueData[i];
let val = item[valueKey];
item[valueKey] = this.format(val);
item[valueKey] = this.formatValue(val);
}
}
if(this.type==FormatType.DATE){
}else{
let val = valueData[valueKey];
valueData[valueKey] = this.formatValue(val);
}
return data;
}
@ -91,18 +109,36 @@ export class FormatOption {
if(value==undefined || value==null) return value;
try {
if(this.type==FormatType.DATE || this.type==FormatType.TIME || this.type==FormatType.DATETIME){
return DataFormat.formatDate(value,this.formatString as string);
}else if(this.type==FormatType.QTY){
return DataFormat.formatQty(value,this.formatString as number);
}else if(this.type==FormatType.AMT){
return DataFormat.formatAmt(value,this.formatString as number);
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) ;
}
} catch (error) {
return value;
}
}
createNumberFmt(num:number){
let numFmt = "###,###,###,###,###,###";
if(num>0){
numFmt += ".";
for (let i = 0; i < num; i++) {
numFmt += "0";
}
}
return numFmt;
}
}
export {DataFormat,FormatOption,DATE_FORMAT,FormatType};