func.service.ts 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. import {formatCurrency} from '@angular/common';
  2. import {environment} from "../../../environments/environment";
  3. /***************
  4. * 公用函数处理
  5. */
  6. export class FuncService {
  7. /********************
  8. * 格式化中文货币
  9. */
  10. public static formatCurrency(v) {
  11. return formatCurrency(v, 'zh', '¥');
  12. }
  13. /********************
  14. * 将转字符串转化为日期 yyyy-MM-dd -> Date
  15. */
  16. public static shortStringToDate(date?) {
  17. if (date === undefined)
  18. date = new Date();
  19. if (date instanceof Date) {
  20. return date;
  21. }
  22. return new Date(Date.parse(FuncService.dateToShortString(date).replace(/-/g, '/')));
  23. }
  24. public static longStringToDate(date) {
  25. if (date instanceof Date) {
  26. return date;
  27. }
  28. if (date === undefined || date.length !== 19) {
  29. return undefined;
  30. }
  31. return new Date(Date.parse(FuncService.dateToLongString(date).replace(/-/g, '/')));
  32. }
  33. /***********************
  34. * 将日期变量进行格式化
  35. * @param date 日期变量
  36. * @param fmt 字符串格式
  37. */
  38. public static dateToString(date, fmt) {
  39. const o = {
  40. 'M+': date.getMonth() + 1,
  41. 'd+': date.getDate(),
  42. 'h+': date.getHours(),
  43. 'm+': date.getMinutes(),
  44. 's+': date.getSeconds(),
  45. 'q+': Math.floor((date.getMonth() + 3) / 3),
  46. 'S': date.getMilliseconds()
  47. };
  48. if (/(y+)/.test(fmt)) {
  49. fmt = fmt.replace(RegExp.$1, (date.getFullYear() + ``).substr(4 - RegExp.$1.length));
  50. }
  51. for (let k in o) {
  52. if (new RegExp(`(` + k + `)`).test(fmt)) {
  53. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : ((`00` + o[k]).substr((`` + o[k]).length)));
  54. }
  55. }
  56. return fmt;
  57. }
  58. /*********************
  59. * 日期转换成长格式字符串 Date -> yyyy-MM-dd HH:mm:ss
  60. */
  61. public static dateToLongString(date?) {
  62. if (date === undefined)
  63. date = new Date();
  64. if (date instanceof Date) {
  65. return FuncService.dateToString(date, 'yyyy-MM-dd hh:mm:ss');
  66. }
  67. return '';
  68. }
  69. /*********************
  70. * 日期转换成段字符串 Date -> yyyy-MM-dd
  71. */
  72. public static dateToShortString(date?) {
  73. if (date === undefined) {
  74. date = new Date();
  75. }
  76. if (date instanceof Date) {
  77. date = FuncService.dateToLongString(date);
  78. }
  79. if (date.length > 10)
  80. return date.substr(0, 10);
  81. return date;
  82. }
  83. /***************************
  84. * 日期转换成 具体时间格式 Date -> HH:mm:ss
  85. */
  86. public static dateToTimeString(date?) {
  87. if (date === undefined) {
  88. date = new Date();
  89. }
  90. if (date instanceof Date) {
  91. date = FuncService.dateToLongString(date);
  92. }
  93. if (date.length > 10) {
  94. return date.substr(11);
  95. }
  96. return date;
  97. }
  98. /***************************
  99. * 日期转换成 小时分格式 Date -> HH:mm
  100. */
  101. public static dateToMinuteString(date?) {
  102. if (date === undefined) {
  103. date = new Date();
  104. }
  105. if (date instanceof Date) {
  106. date = FuncService.dateToLongString(date);
  107. }
  108. if (date.length > 10 && date.length >= 15) {
  109. return date.substr(11, 5);
  110. }
  111. return date;
  112. }
  113. /*************************
  114. * 两个日期 Date,Date -> HH:mm - HH:mm
  115. */
  116. public static dateToBetweenMinutes(start, end) {
  117. return FuncService.dateToMinuteString(start) + ' - ' + FuncService.dateToMinuteString(end);
  118. }
  119. /*********************
  120. * 数组排序
  121. * @param array 需要排序的数组
  122. * @param attr_name 用来排序的字段
  123. */
  124. public static sortArray(array, attr_name, order_attr?: any) {
  125. for (let i = 0; i < array.length - 1; i++) {
  126. for (let j = 0; j < array.length - 1 - i; j++) {
  127. if (array[j][attr_name] > array[j + 1][attr_name]) {
  128. const temp = array[j];
  129. array[j] = array[j + 1];
  130. array[j + 1] = temp;
  131. }
  132. }
  133. if (order_attr !== undefined) {
  134. array[order_attr] = i + 1;
  135. }
  136. }
  137. }
  138. /***********************
  139. * 文件下载 iframe方式,不需要考虑弹窗,但长时间等待可能会导致用户不知道下载线程正在处理
  140. */
  141. public static fileDownload(url: string, param?: any) {
  142. let html = '';
  143. for (const name in param) {
  144. if (typeof (param[name]) !== 'function' && name !== '$$hashKey') {
  145. const value = param[name];
  146. if (value !== null && value !== undefined) {
  147. html = html + (html === '' ? '?' : '&') + `${name}=${value}`;
  148. }
  149. }
  150. }
  151. const elemIF = document.createElement('iframe');
  152. elemIF.src = environment.uploadRoot + url + html;
  153. elemIF.style.display = 'none';
  154. document.body.appendChild(elemIF);
  155. setTimeout(() => {
  156. document.body.removeChild(elemIF);
  157. }, 1000);
  158. }
  159. /*********************
  160. * 弹窗方式,用户可知道线程正在运行,但会受到浏览器拦截,需要手动设置
  161. */
  162. public static ajaxDownload(url: string, param?: any) {
  163. let html = '<form action="' + environment.uploadRoot + url + '" method="post" target="_blank">';
  164. for (const name in param) {
  165. if (typeof (param[name]) !== 'function' && name !== '$$hashKey') {
  166. const value = param[name];
  167. if (value !== null && value !== undefined) {
  168. html = html + '<input type="hidden" name="' + name + '" value="' + value + '"/>';
  169. }
  170. }
  171. }
  172. html = html + '</form>';
  173. $(html).appendTo('body').submit().remove();
  174. }
  175. }