useFilters.ts 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. interface Filters {
  2. percentFormat: (value: number | string | null | undefined) => string;
  3. numberFormat: (value: number | string) => string;
  4. numberFormat1: (value: number | string) => string;
  5. pwdFormat: (value: string | number | null | undefined) => string;
  6. numberDecimal: (value: number | string) => string;
  7. numberDesensitization: (value: number | string) => string;
  8. numberDesensitization1: (value: number | string) => string;
  9. }
  10. /**
  11. * 格式化工具组合式函数
  12. * @returns {Filters} 包含所有格式化方法的对象
  13. */
  14. export function useFilters(): Filters {
  15. /**
  16. * 百分比格式化
  17. */
  18. const percentFormat = (value: number | string | null | undefined): string => {
  19. if (value == null || value == undefined) {
  20. return '+0%';
  21. } else if (Number(value) < 0) {
  22. return value + '%';
  23. } else if (value == '+∞' || value == '-∞') {
  24. return String(value);
  25. } else {
  26. return '+' + value + '%';
  27. }
  28. };
  29. /**
  30. * 数字千分位格式化(支持负数)
  31. * @param {number | string} value - 要格式化的数字或字符串
  32. * @param {boolean} toArray - 是否转化为数组,默认值为false
  33. * @returns {string} 格式化后的字符串
  34. */
  35. const numberFormat = (value: number | string,toArray:boolean = false): string[] | string => {
  36. if (value == '***') {
  37. return '***';
  38. }
  39. if (isNaN(Number(value))) {
  40. return '0';
  41. }
  42. // let value1 = Number(value).toFixed(2)
  43. let value1 = value.toString();
  44. if (value1.indexOf('-') > -1) {
  45. value1 = value1.split('-')[1];
  46. let num = value1.split('.');
  47. let interCount = num[0].length;
  48. if (interCount < 3) {
  49. return String(value);
  50. }
  51. let index = 0;
  52. let inter = '';
  53. for (let i = interCount - 3; i >= 0; i -= 3) {
  54. inter = num[0].substr(i, 3) + (inter == '' ? '' : ',') + inter;
  55. index = i;
  56. }
  57. if (index > 0) {
  58. inter = num[0].substr(0, index) + (inter == '' ? '' : ',') + inter;
  59. }
  60. // return toArray ? ['-' + inter,num[1]] : '-' + inter + (num.length == 1 ? '' : '.' + num[1]);
  61. return '-' + inter + (num.length == 1 ? '' : '.' + num[1]);
  62. } else {
  63. let num = value1.split('.');
  64. let interCount = num[0].length;
  65. if (interCount < 3) {
  66. return String(value);
  67. }
  68. let index = 0;
  69. let inter = '';
  70. for (let i = interCount - 3; i >= 0; i -= 3) {
  71. inter = num[0].substr(i, 3) + (inter == '' ? '' : ',') + inter;
  72. index = i;
  73. }
  74. if (index > 0) {
  75. inter = num[0].substr(0, index) + (inter == '' ? '' : ',') + inter;
  76. }
  77. // return toArray ? [inter,num[1]] : inter + (num.length == 1 ? '' : '.' + num[1]);
  78. return inter + (num.length == 1 ? '' : '.' + num[1]);
  79. }
  80. };
  81. /**
  82. * 数字千分位格式化(简单版)
  83. */
  84. const numberFormat1 = (value: number | string): string => {
  85. if (value == '--') {
  86. return '--';
  87. }
  88. if (isNaN(Number(value))) {
  89. return '0';
  90. }
  91. let num = value.toString().split('.');
  92. let interCount = num[0].length;
  93. if (interCount < 3) {
  94. return String(value);
  95. }
  96. let index = 0;
  97. let inter = '';
  98. for (let i = interCount - 3; i >= 0; i -= 3) {
  99. inter = num[0].substr(i, 3) + (inter == '' ? '' : ',') + inter;
  100. index = i;
  101. }
  102. if (index > 0) {
  103. inter = num[0].substr(0, index) + (inter == '' ? '' : ',') + inter;
  104. }
  105. return inter + (num.length == 1 ? '' : '.' + num[1]);
  106. };
  107. /**
  108. * 密码格式化
  109. */
  110. const pwdFormat = (value: string | number | null | undefined): string => {
  111. if (value == null || value == undefined) {
  112. return 'Null';
  113. } else {
  114. let len = value.toString().length;
  115. let val = '';
  116. for (let i = 0; i < len; i++) {
  117. val = val + '*';
  118. }
  119. return val;
  120. }
  121. };
  122. /**
  123. * 数字保留两位小数
  124. */
  125. const numberDecimal = (value: number | string): string => {
  126. let realVal = '';
  127. if (!isNaN(Number(value)) && value !== '') {
  128. realVal = parseFloat(String(value)).toFixed(2);
  129. } else {
  130. realVal = '0.00';
  131. }
  132. return realVal;
  133. };
  134. /**
  135. * 数字脱敏(手机号格式)
  136. */
  137. const numberDesensitization = (value: number | string): string => {
  138. let realVal = '';
  139. if (!isNaN(Number(value)) && value !== '') {
  140. const str = value.toString();
  141. realVal = str.substr(0, 2) + '****' + str.substr(-2);
  142. } else {
  143. realVal = '--';
  144. }
  145. return realVal;
  146. };
  147. /**
  148. * 数字脱敏1(简单格式)
  149. */
  150. const numberDesensitization1 = (value: number | string): string => {
  151. const str = value.toString();
  152. return str.substr(0, 1) + '***' + str.substr(-2);
  153. };
  154. return {
  155. percentFormat,
  156. numberFormat,
  157. numberFormat1,
  158. pwdFormat,
  159. numberDecimal,
  160. numberDesensitization,
  161. numberDesensitization1
  162. };
  163. }