commonFunction.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. // 通用函数
  2. import useClipboard from 'vue-clipboard3';
  3. import { ElMessage } from 'element-plus';
  4. import { formatDate } from '/@/utils/formatTime';
  5. export default function () {
  6. const { toClipboard } = useClipboard();
  7. // 百分比格式化
  8. const percentFormat = (row: EmptyArrayType, column: number, cellValue: string) => {
  9. return cellValue ? `${cellValue}%` : '-';
  10. };
  11. // 列表日期时间格式化
  12. const dateFormatYMD = (row: EmptyArrayType, column: number, cellValue: string) => {
  13. if (!cellValue) return '-';
  14. return formatDate(new Date(cellValue), 'YYYY-mm-dd');
  15. };
  16. // 列表日期时间格式化
  17. const dateFormatYMDHMS = (row: EmptyArrayType, column: number, cellValue: string) => {
  18. if (!cellValue) return '-';
  19. return formatDate(new Date(cellValue), 'YYYY-mm-dd HH:MM:SS');
  20. };
  21. // 列表日期时间格式化
  22. const dateFormatHMS = (row: EmptyArrayType, column: number, cellValue: string) => {
  23. if (!cellValue) return '-';
  24. let time = 0;
  25. if (typeof row === 'number') time = row;
  26. if (typeof cellValue === 'number') time = cellValue;
  27. return formatDate(new Date(time * 1000), 'HH:MM:SS');
  28. };
  29. // 小数格式化
  30. const scaleFormat = (value: string = '0', scale: number = 4) => {
  31. return Number.parseFloat(value).toFixed(scale);
  32. };
  33. // 小数格式化
  34. const scale2Format = (value: string = '0') => {
  35. return Number.parseFloat(value).toFixed(2);
  36. };
  37. // 千分符,默认保留两位小数
  38. const groupSeparator = (value: number, minimumFractionDigits: number = 2) => {
  39. return value.toLocaleString('en-US', {
  40. minimumFractionDigits: minimumFractionDigits,
  41. maximumFractionDigits: 2,
  42. });
  43. };
  44. /**
  45. * 删除字符串首尾指定字符
  46. * @param Str 源字符
  47. * @param char 去除的指定字符
  48. * @param type 类型,右边或左边,为空是替换首尾
  49. */
  50. const trimChar =(Str:string,char:string, type:string) =>{
  51. if (char) {
  52. if (type == 'left') {
  53. return Str.replace(new RegExp('^\\'+char+'+', 'g'), '');
  54. } else if (type == 'right') {
  55. return Str.replace(new RegExp('\\'+char+'+$', 'g'), '');
  56. }
  57. return Str.replace(new RegExp('^\\'+char+'+|\\'+char+'+$', 'g'), '');
  58. }
  59. return Str.replace(/^\s+|\s+$/g, '');
  60. }
  61. // 点击复制文本
  62. const copyText = (text: string) => {
  63. return new Promise((resolve, reject) => {
  64. try {
  65. //复制
  66. toClipboard(text);
  67. //下面可以设置复制成功的提示框等操作
  68. ElMessage.success(t('message.layout.copyTextSuccess'));
  69. resolve(text);
  70. } catch (e) {
  71. //复制失败
  72. ElMessage.error(t('message.layout.copyTextError'));
  73. reject(e);
  74. }
  75. });
  76. };
  77. // 去掉Html标签(取前面5个字符)
  78. const removeHtmlSub = (value: string) => {
  79. var str = value.replace(/<[^>]+>/g, '');
  80. if (str.length > 50) return str.substring(0, 50) + '......';
  81. else return str;
  82. };
  83. // 去掉Html标签
  84. const removeHtml = (value: string) => {
  85. return value.replace(/<[^>]+>/g, '');
  86. };
  87. // 获取枚举描述
  88. const getEnumDesc = (key: any, lstEnum: any) => {
  89. return lstEnum.find((x: any) => x.value == key)?.describe;
  90. };
  91. // 追加query参数到url
  92. const appendQueryParams = (url: string, params: { [key : string]: any }) => {
  93. if (!params || Object.keys(params).length == 0) return url;
  94. const queryString = Object.keys(params).map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`).join('&');
  95. return `${url}${url.includes('?') ? '&' : '?'}${queryString}`;
  96. };
  97. return {
  98. percentFormat,
  99. dateFormatYMD,
  100. dateFormatYMDHMS,
  101. dateFormatHMS,
  102. scaleFormat,
  103. scale2Format,
  104. groupSeparator,
  105. copyText,
  106. removeHtmlSub,
  107. removeHtml,
  108. getEnumDesc,
  109. appendQueryParams,
  110. trimChar,
  111. };
  112. }