| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- interface Filters {
- percentFormat: (value: number | string | null | undefined) => string;
- numberFormat: (value: number | string) => string;
- numberFormat1: (value: number | string) => string;
- pwdFormat: (value: string | number | null | undefined) => string;
- numberDecimal: (value: number | string, decimalPlaces?: number) => string;
- numberDesensitization: (value: number | string) => string;
- numberDesensitization1: (value: number | string) => string;
- }
- /**
- * 格式化工具组合式函数
- * @returns {Filters} 包含所有格式化方法的对象
- */
- export function useFilters(): Filters {
- /**
- * 百分比格式化
- */
- const percentFormat = (value: number | string | null | undefined): string => {
- if (value == null || value == undefined) {
- return '+0%';
- } else if (Number(value) < 0) {
- return value + '%';
- } else if (value == '+∞' || value == '-∞') {
- return String(value);
- } else {
- return '+' + value + '%';
- }
- };
- /**
- * 数字千分位格式化(支持负数)
- * @param {number | string} value - 要格式化的数字或字符串
- * @param decimalPlaces 保留的小数位数,默认为2
- * @returns {string} 格式化后的字符串
- */
- const numberFormat = (value: number | string,decimalPlaces:number = 2): string[] | string => {
- if (value == '***') {
- return '***';
- }
- if (isNaN(Number(value))||!value ) {
- return '0.00';
- }
- // let value1 = Number(value).toFixed(2)
- let value1 = numberDecimal(value,decimalPlaces);
- console.log(value1)
- if (value1.indexOf('-') > -1) {
- value1 = value1.split('-')[1];
- let num = value1.split('.');
- let interCount = num[0].length;
-
- if (interCount < 3) {
- return numberDecimal(value,decimalPlaces);
- }
-
- let index = 0;
- let inter = '';
- for (let i = interCount - 3; i >= 0; i -= 3) {
- inter = num[0].substr(i, 3) + (inter == '' ? '' : ',') + inter;
- index = i;
- }
- if (index > 0) {
- inter = num[0].substr(0, index) + (inter == '' ? '' : ',') + inter;
- }
- // return toArray ? ['-' + inter,num[1]] : '-' + inter + (num.length == 1 ? '' : '.' + num[1]);
- return '-' + inter + (num.length == 1 ? '' : '.' + num[1]);
- } else {
- let num = value1.split('.');
- let interCount = num[0].length;
-
- if (interCount < 3) {
- return numberDecimal(value,decimalPlaces);
- }
-
- let index = 0;
- let inter = '';
- for (let i = interCount - 3; i >= 0; i -= 3) {
- inter = num[0].substr(i, 3) + (inter == '' ? '' : ',') + inter;
- index = i;
- }
- if (index > 0) {
- inter = num[0].substr(0, index) + (inter == '' ? '' : ',') + inter;
- }
- // return toArray ? [inter,num[1]] : inter + (num.length == 1 ? '' : '.' + num[1]);
- return inter + (num.length == 1 ? '' : '.' + num[1]);
- }
- };
- /**
- * 数字千分位格式化(简单版)
- */
- const numberFormat1 = (value: number | string): string => {
- if (value == '--') {
- return '--';
- }
- if (isNaN(Number(value))) {
- return '0';
- }
-
- let num = value.toString().split('.');
- let interCount = num[0].length;
-
- if (interCount < 3) {
- return String(value);
- }
-
- let index = 0;
- let inter = '';
- for (let i = interCount - 3; i >= 0; i -= 3) {
- inter = num[0].substr(i, 3) + (inter == '' ? '' : ',') + inter;
- index = i;
- }
- if (index > 0) {
- inter = num[0].substr(0, index) + (inter == '' ? '' : ',') + inter;
- }
- return inter + (num.length == 1 ? '' : '.' + num[1]);
- };
- /**
- * 密码格式化
- */
- const pwdFormat = (value: string | number | null | undefined): string => {
- if (value == null || value == undefined) {
- return 'Null';
- } else {
- let len = value.toString().length;
- let val = '';
- for (let i = 0; i < len; i++) {
- val = val + '*';
- }
- return val;
- }
- };
- /**
- * 数字保留指定位数小数(不四舍五入)
- * @param value 要格式化的数字或字符串
- * @param decimalPlaces 保留的小数位数,默认为2
- */
- const numberDecimal = (value: number | string, decimalPlaces: number = 2): string => {
- if (isNaN(Number(value)) || value === ''||value == null) {
- return '0.' + '0'.repeat(decimalPlaces);
- }
- const strValue = String(value);
- const [integerPart, decimalPart = ''] = strValue.split('.');
- if (!decimalPart) {
- return `${integerPart}.` + '0'.repeat(decimalPlaces);
- }
- const truncatedDecimalPart = decimalPart.slice(0, decimalPlaces);
- const paddedDecimalPart = truncatedDecimalPart.padEnd(decimalPlaces, '0');
- return `${integerPart}.${paddedDecimalPart}`;
- };
- /**
- * 数字脱敏(手机号格式)
- */
- const numberDesensitization = (value: number | string): string => {
- let realVal = '';
- if (!isNaN(Number(value)) && value !== '') {
- const str = value.toString();
- realVal = str.substr(0, 2) + '****' + str.substr(-2);
- } else {
- realVal = '--';
- }
- return realVal;
- };
- /**
- * 数字脱敏1(简单格式)
- */
- const numberDesensitization1 = (value: number | string): string => {
- const str = value.toString();
- return str.substr(0, 1) + '***' + str.substr(-2);
- };
- return {
- percentFormat,
- numberFormat,
- numberFormat1,
- pwdFormat,
- numberDecimal,
- numberDesensitization,
- numberDesensitization1
- };
- }
|