useFilters.ts 5.0 KB

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