util.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. import moment from "moment";
  2. import { post, get } from "@/utils/request";
  3. import Cookies from "js-cookie";
  4. import html2canvas from "html2canvas";
  5. import JsPDF from "jspdf";
  6. import * as toEnglish from "./ACapital.js";
  7. //根据value值回显字典label值
  8. export function dictDataEcho(value, arr) {
  9. if (value && arr) {
  10. value = value + "";
  11. const current = arr.find((x) => x.dictKey === value);
  12. if (current != undefined && current.dictValue) {
  13. return current.dictValue;
  14. }
  15. return "";
  16. }
  17. return "";
  18. }
  19. //根据value值回显字典label值
  20. export function dictValueLabel(value, arr) {
  21. if ((value || value === 0) && arr) {
  22. const current = arr.filter((x) => x.value == value);
  23. if (current && current.length > 0) {
  24. return current[0].label;
  25. }
  26. return "";
  27. }
  28. return "";
  29. }
  30. export function getDict(key) {
  31. return new Promise((resolve, reject) => {
  32. let dictObj = {};
  33. let arr = {};
  34. let num = 0;
  35. if (!sessionStorage.getItem("dict")) {
  36. sessionStorage.setItem("dict", JSON.stringify(dictObj));
  37. } else {
  38. dictObj = JSON.parse(sessionStorage.getItem("dict"));
  39. }
  40. for (let i = 0; i < key.length; i++) {
  41. const element = key[i];
  42. if (dictObj[element]) {
  43. arr[element] = dictObj[element];
  44. num++;
  45. if (num === key.length) {
  46. resolve(arr);
  47. }
  48. } else {
  49. post("/dictTenantData/page", {
  50. pageNum: 1,
  51. pageSize: 999,
  52. tenantId: Cookies.get("tenantId"),
  53. dictCode: element,
  54. }).then((res) => {
  55. dictObj[element] = res.rows;
  56. arr[element] = res.rows;
  57. sessionStorage.setItem("dict", JSON.stringify(dictObj));
  58. num++;
  59. console.log(num);
  60. if (num === key.length) {
  61. resolve(arr);
  62. }
  63. });
  64. }
  65. }
  66. });
  67. }
  68. // 金额千分符
  69. export function moneyFormat(s, n) {
  70. if (s) {
  71. s = s + "";
  72. let str = s.slice(0, 1);
  73. if (str === "-") {
  74. s = s.slice(1, s.length);
  75. }
  76. n = n > 0 && n <= 20 ? n : 2;
  77. s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";
  78. var l = s.split(".")[0].split("").reverse(),
  79. r = s.split(".")[1];
  80. var t = "";
  81. for (let i = 0; i < l.length; i++) {
  82. t += l[i] + ((i + 1) % 3 == 0 && i + 1 != l.length ? "," : "");
  83. }
  84. let result = t.split("").reverse().join("") + "." + r;
  85. if (str === "-") {
  86. return "-" + result;
  87. } else {
  88. return result;
  89. }
  90. } else {
  91. return "0.00";
  92. }
  93. }
  94. // 计算该日期是星期几
  95. export function calculationWeek(val, format) {
  96. let weekArrayList = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
  97. let index = new Date(moment(val, format).format("yyyy-MM-DD")).getDay();
  98. let week = weekArrayList[index];
  99. return week;
  100. }
  101. export function getPdf(title) {
  102. // pdfDom 这个就是你vue页面中定义的ID 比如<div id="pdfDom"> 这个也要避下雷
  103. const element = document.getElementById("pdfDom");
  104. window.pageYoffset = 0;
  105. document.documentElement.scrollTop = 0;
  106. document.body.scrollTop = 0;
  107. setTimeout(() => {
  108. // const nowDate = new Date();
  109. // const date = {
  110. // year: nowDate.getFullYear(),
  111. // month: nowDate.getMonth() + 1,
  112. // date: nowDate.getDate(),
  113. // hours: nowDate.getHours(),
  114. // minutes: nowDate.getMinutes(),
  115. // seconds: nowDate.getSeconds(),
  116. // };
  117. // const newMonth = date.month > 10 ? date.month : "0" + date.month;
  118. // const newDay = date.date > 10 ? date.date : "0" + date.date;
  119. // const newMinutes = date.minutes < 10 ? "0" + date.minutes : date.minutes;
  120. // const newSeconds = date.seconds < 10 ? "0" + date.seconds : date.seconds;
  121. // const value = date.year + newMonth + newDay + date.hours + newMinutes + newSeconds;
  122. let id = "";
  123. //创建一个画布 --- 增加导出的pdf水印 !!
  124. let can = document.createElement("canvas");
  125. //设置画布的长宽
  126. can.width = 400;
  127. can.height = 500;
  128. let cans = can.getContext("2d");
  129. //旋转角度
  130. cans.rotate((-15 * Math.PI) / 180);
  131. cans.font = "18px Vedana";
  132. //设置填充绘画的颜色、渐变或者模式
  133. cans.fillStyle = "rgba(200, 200, 200, 0.40)";
  134. //设置文本内容的当前对齐方式
  135. cans.textAlign = "left";
  136. //设置在绘制文本时使用的当前文本基线
  137. cans.textBaseline = "Middle";
  138. //在画布上绘制填色的文本(输出的文本,开始绘制文本的X坐标位置,开始绘制文本的Y坐标位置)
  139. //cans.fillText(value, can.width / 8, can.height / 2)
  140. let div = document.createElement("div");
  141. div.id = id;
  142. div.style.pointerEvents = "none";
  143. div.style.top = "2000px";
  144. div.style.left = "-2000px";
  145. div.style.position = "fixed";
  146. div.style.zIndex = "100000";
  147. div.style.width = document.getElementById("pdfDom").scrollHeight + "px";
  148. div.style.height = document.getElementById("pdfDom").scrollHeight + "px";
  149. div.style.background = "url(" + can.toDataURL("image/png") + ") left top repeat";
  150. document.getElementById("pdfDom").appendChild(div); // 到页面中
  151. html2canvas(element, {
  152. allowTaint: true,
  153. useCORS: true, // 需要注意,element的 高度 宽度一定要在这里定义一下,不然会存在只下载了当前你能看到的页面 避雷避雷!!!
  154. scale: 2, // 提升画面质量,但是会增加文件大小
  155. height: document.getElementById("pdfDom").scrollHeight,
  156. windowHeight: document.getElementById("pdfDom").scrollHeight,
  157. }).then(function (canvas) {
  158. var contentWidth = canvas.width;
  159. var contentHeight = canvas.height;
  160. // 一页pdf显示html页面生成的canvas高度;
  161. var pageHeight = (contentWidth * 841.89) / 592.28;
  162. // 未生成pdf的html页面高度
  163. var leftHeight = contentHeight;
  164. // 页面偏移
  165. var position = 0;
  166. // a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
  167. var imgWidth = 595.28;
  168. var imgHeight = (592.28 / contentWidth) * contentHeight;
  169. var pageData = canvas.toDataURL("image/jpeg", 1.0);
  170. var pdf = new JsPDF("", "pt", "a4");
  171. // 有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
  172. // 当内容未超过pdf一页显示的范围,无需分页
  173. if (leftHeight < pageHeight) {
  174. pdf.addImage(pageData, "JPEG", 0, 0, imgWidth, imgHeight);
  175. } else {
  176. while (leftHeight > 0) {
  177. pdf.addImage(pageData, "JPEG", 0, position, imgWidth, imgHeight);
  178. leftHeight -= pageHeight;
  179. position -= 841.89;
  180. // 避免添加空白页
  181. if (leftHeight > 0) {
  182. pdf.addPage();
  183. }
  184. }
  185. }
  186. pdf.save(title + ".pdf");
  187. });
  188. }, 1000);
  189. }
  190. export function currencyPrefix(key) {
  191. if (["¥", "¥", "1"].includes(key)) {
  192. return "SAY RMB ";
  193. } else if (["$", "2"].includes(key)) {
  194. return "SAY US DOLLARS ";
  195. } else if (["€", "3"].includes(key)) {
  196. return "SAY EURO ";
  197. } else {
  198. return "SAY RMB ";
  199. }
  200. }
  201. export function translateIntoEnglish(money, currencyType) {
  202. let text = "";
  203. if (money) {
  204. text = currencyPrefix(currencyType);
  205. if (!/^\d+$/.test(Number(money))) {
  206. text = text + parseFloat(money).toFixed(2).toEnglish().toUpperCase();
  207. } else {
  208. text = text + parseFloat(money).toFixed(2).toEnglish().toUpperCase() + " ONLY";
  209. }
  210. }
  211. text = text.split(" POINT ZERO ZERO ").join("");
  212. return text;
  213. }