util.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import store from '@/store';
  2. export function formatDictText(dicts, values) {
  3. if (!(Array.isArray(dicts) && dicts.length > 0)) {
  4. return values;
  5. }
  6. if (!values) {
  7. return '';
  8. }
  9. let valueArr = values.split(',');
  10. let contentArr = [];
  11. dicts.forEach((dict) => {
  12. for (let i = 0; i < valueArr.length; i++) {
  13. if (valueArr[i] === dict.value) {
  14. contentArr.push(dict.content);
  15. break;
  16. }
  17. }
  18. });
  19. return contentArr.toString();
  20. }
  21. export function randomString(len) {
  22. len = len || 32;
  23. const $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
  24. /** **默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
  25. const maxPos = $chars.length;
  26. let pwd = '';
  27. for (let i = 0; i < len; i++) {
  28. pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
  29. }
  30. return pwd;
  31. }
  32. // 深度拷贝
  33. export function copyObj(obj) {
  34. //变量先置空
  35. let newobj = null;
  36. //判断是否需要继续进行递归
  37. if (typeof obj == 'object' && obj !== null) {
  38. newobj = obj instanceof Array ? [] : {}; //进行下一层递归克隆
  39. for (const i in obj) {
  40. newobj[i] = copyObj(obj[i]);
  41. } //如果不是对象直接赋值
  42. } else newobj = obj;
  43. return newobj;
  44. }
  45. //合计费用
  46. export function getSummaries(param, key, unit) {
  47. const { columns, data } = param;
  48. const sums = [];
  49. columns.forEach((column, index) => {
  50. if (index === 0) {
  51. sums[index] = '合计';
  52. return;
  53. }
  54. if (key.includes(column.property)) {
  55. const values = data.map((item) => Number(item[column.property]));
  56. console.log(values);
  57. if (!values.every((value) => isNaN(value))) {
  58. sums[index] = values.reduce((prev, curr) => {
  59. const value = Number(curr);
  60. if (!isNaN(value)) {
  61. return prev + curr;
  62. } else {
  63. return prev;
  64. }
  65. }, 0);
  66. sums[index] = parseFloat(sums[index])
  67. .toFixed(3)
  68. .replace(/\.?0+$/, '');
  69. sums[index] += ' ' + unit + '';
  70. } else {
  71. sums[index] = '';
  72. }
  73. } else {
  74. sums[index] = '';
  75. }
  76. });
  77. return sums;
  78. }
  79. // 数字金额转大写金额
  80. export function convertToChinese(num) {
  81. if (num === 0 || num === '0' || !num) return '零元整';
  82. if(isNaN(num)) return '';
  83. // 中文数字
  84. const cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
  85. // 单位
  86. const cnIntRadice = ['', '拾', '佰', '仟'];
  87. // 整数部分扩展单位
  88. const cnIntUnits = ['', '万', '亿', '兆'];
  89. // 小数部分单位
  90. const cnDecUnits = ['角', '分'];
  91. // 整数部分前缀
  92. const cnInteger = '整';
  93. // 零前缀
  94. const cnIntLast = '元';
  95. // 处理数字
  96. let integerNum;
  97. let decimalNum;
  98. let chineseInteger = '';
  99. let chineseDecimal = '';
  100. // 转换为字符串并分割整数和小数部分
  101. const numStr = parseFloat(num).toFixed(2);
  102. const parts = numStr.split('.');
  103. integerNum = parts[0];
  104. decimalNum = parts[1];
  105. // 处理整数部分
  106. if (parseInt(integerNum, 10) > 0) {
  107. let zeroCount = 0;
  108. for (let i = 0; i < integerNum.length; i++) {
  109. const n = parseInt(integerNum.charAt(i), 10);
  110. const p = integerNum.length - i - 1;
  111. const q = p / 4;
  112. const m = p % 4;
  113. if (n === 0) {
  114. zeroCount++;
  115. } else {
  116. if (zeroCount > 0) {
  117. chineseInteger += cnNums[0];
  118. }
  119. zeroCount = 0;
  120. chineseInteger += cnNums[n] + cnIntRadice[m];
  121. }
  122. if (m === 0 && zeroCount < 4) {
  123. chineseInteger += cnIntUnits[q];
  124. }
  125. }
  126. } else {
  127. chineseInteger += cnNums[0];
  128. }
  129. // 处理小数部分
  130. if (decimalNum !== '00') {
  131. for (let i = 0; i < decimalNum.length; i++) {
  132. const n = parseInt(decimalNum.charAt(i), 10);
  133. if (n !== 0) {
  134. chineseDecimal += cnNums[n] + cnDecUnits[i];
  135. }
  136. }
  137. }
  138. // 组合结果
  139. if (chineseDecimal === '') {
  140. return chineseInteger + cnIntLast + cnInteger;
  141. } else {
  142. return chineseInteger + cnIntLast + chineseDecimal;
  143. }
  144. }