useFilters.ts 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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 => {
  36. if (value == '***') {
  37. return '***';
  38. }
  39. if (isNaN(Number(value))) {
  40. return '0';
  41. }
  42. let value1 = value.toString();
  43. if (value1.indexOf('-') > -1) {
  44. value1 = value1.split('-')[1];
  45. let num = value1.split('.');
  46. let interCount = num[0].length;
  47. if (interCount < 3) {
  48. return String(value);
  49. }
  50. let index = 0;
  51. let inter = '';
  52. for (let i = interCount - 3; i >= 0; i -= 3) {
  53. inter = num[0].substr(i, 3) + (inter == '' ? '' : ',') + inter;
  54. index = i;
  55. }
  56. if (index > 0) {
  57. inter = num[0].substr(0, index) + (inter == '' ? '' : ',') + inter;
  58. }
  59. return toArray ? ['-' + inter,num[1]] : '-' + inter + (num.length == 1 ? '' : '.' + num[1]);
  60. } else {
  61. let num = value1.split('.');
  62. let interCount = num[0].length;
  63. if (interCount < 3) {
  64. return String(value);
  65. }
  66. let index = 0;
  67. let inter = '';
  68. for (let i = interCount - 3; i >= 0; i -= 3) {
  69. inter = num[0].substr(i, 3) + (inter == '' ? '' : ',') + inter;
  70. index = i;
  71. }
  72. if (index > 0) {
  73. inter = num[0].substr(0, index) + (inter == '' ? '' : ',') + inter;
  74. }
  75. return toArray ? [inter,num[1]] : inter + (num.length == 1 ? '' : '.' + num[1]);
  76. }
  77. };
  78. /**
  79. * 数字千分位格式化(简单版)
  80. */
  81. const numberFormat1 = (value: number | string): string => {
  82. if (value == '--') {
  83. return '--';
  84. }
  85. if (isNaN(Number(value))) {
  86. return '0';
  87. }
  88. let num = value.toString().split('.');
  89. let interCount = num[0].length;
  90. if (interCount < 3) {
  91. return String(value);
  92. }
  93. let index = 0;
  94. let inter = '';
  95. for (let i = interCount - 3; i >= 0; i -= 3) {
  96. inter = num[0].substr(i, 3) + (inter == '' ? '' : ',') + inter;
  97. index = i;
  98. }
  99. if (index > 0) {
  100. inter = num[0].substr(0, index) + (inter == '' ? '' : ',') + inter;
  101. }
  102. return inter + (num.length == 1 ? '' : '.' + num[1]);
  103. };
  104. /**
  105. * 密码格式化
  106. */
  107. const pwdFormat = (value: string | number | null | undefined): string => {
  108. if (value == null || value == undefined) {
  109. return 'Null';
  110. } else {
  111. let len = value.toString().length;
  112. let val = '';
  113. for (let i = 0; i < len; i++) {
  114. val = val + '*';
  115. }
  116. return val;
  117. }
  118. };
  119. /**
  120. * 数字保留两位小数
  121. */
  122. const numberDecimal = (value: number | string): string => {
  123. let realVal = '';
  124. if (!isNaN(Number(value)) && value !== '') {
  125. realVal = parseFloat(String(value)).toFixed(2);
  126. } else {
  127. realVal = '0.00';
  128. }
  129. return realVal;
  130. };
  131. /**
  132. * 数字脱敏(手机号格式)
  133. */
  134. const numberDesensitization = (value: number | string): string => {
  135. let realVal = '';
  136. if (!isNaN(Number(value)) && value !== '') {
  137. const str = value.toString();
  138. realVal = str.substr(0, 2) + '****' + str.substr(-2);
  139. } else {
  140. realVal = '--';
  141. }
  142. return realVal;
  143. };
  144. /**
  145. * 数字脱敏1(简单格式)
  146. */
  147. const numberDesensitization1 = (value: number | string): string => {
  148. const str = value.toString();
  149. return str.substr(0, 1) + '***' + str.substr(-2);
  150. };
  151. return {
  152. percentFormat,
  153. numberFormat,
  154. numberFormat1,
  155. pwdFormat,
  156. numberDecimal,
  157. numberDesensitization,
  158. numberDesensitization1
  159. };
  160. }