|
@@ -0,0 +1,237 @@
|
|
|
|
|
+// 通用工具类,定义通用函数及常用接口
|
|
|
|
|
+import { mapValues } from "lodash";
|
|
|
|
|
+import { encryptByAes } from "@/utils/encrypt";
|
|
|
|
|
+// import { preview } from '@/business/platform/form/utils/custom/preview'
|
|
|
|
|
+import request from "./joinCURD";
|
|
|
|
|
+import pinyin4js from "pinyin4js";
|
|
|
|
|
+import { snapshoot } from "@/api/platform/file/attachment";
|
|
|
|
|
+import { getNextIdByAlias } from "@/api/platform/system/identity";
|
|
|
|
|
+import { save as sendMsg } from "@/api/platform/message/innerMessage";
|
|
|
|
|
+import { save as saveNews } from "@/api/platform/system/news";
|
|
|
|
|
+import { bpmTaskSave } from "@/api/platform/bpmn/bpmTask";
|
|
|
|
|
+// import { onlyOfficeToPdf } from '@/api/platform/form/seal'
|
|
|
|
|
+import { downloadFile as download } from "@/business/platform/file/utils";
|
|
|
|
|
+// import { removeFormData } from '@/api/platform/data/dataTemplate'
|
|
|
|
|
+// 引入工具类
|
|
|
|
|
+import Utils from "@/utils/util";
|
|
|
|
|
+import ActionUtils from "@/utils/action";
|
|
|
|
|
+
|
|
|
|
|
+// base64解码
|
|
|
|
|
+const decode = str =>
|
|
|
|
|
+ decodeURIComponent(
|
|
|
|
|
+ window
|
|
|
|
|
+ .atob(str)
|
|
|
|
|
+ .split("")
|
|
|
|
|
+ .map(c => `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`)
|
|
|
|
|
+ .join("")
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+// 下载
|
|
|
|
|
+export const downloadByBlob = (o, name) => {
|
|
|
|
|
+ if (!(o instanceof Blob)) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (window.navigator.msSaveBlob) {
|
|
|
|
|
+ window.navigator.msSaveBlob(o, name);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ const URL = window.URL || window.webkitURL || window;
|
|
|
|
|
+ const e = document.createElementNS("http://www.w3.org/1999/xhtml", "a");
|
|
|
|
|
+ e.href = URL.createObjectURL(o);
|
|
|
|
|
+ e.download = name;
|
|
|
|
|
+
|
|
|
|
|
+ if (document.all) {
|
|
|
|
|
+ e.click();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ const ev = document.createEvent("MouseEvents");
|
|
|
|
|
+ ev.initMouseEvent(
|
|
|
|
|
+ "click",
|
|
|
|
|
+ true,
|
|
|
|
|
+ false,
|
|
|
|
|
+ window,
|
|
|
|
|
+ 0,
|
|
|
|
|
+ 0,
|
|
|
|
|
+ 0,
|
|
|
|
|
+ 0,
|
|
|
|
|
+ false,
|
|
|
|
|
+ false,
|
|
|
|
|
+ false,
|
|
|
|
|
+ false,
|
|
|
|
|
+ 0,
|
|
|
|
|
+ null
|
|
|
|
|
+ );
|
|
|
|
|
+ e.dispatchEvent(ev);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+// 获取当前时间
|
|
|
|
|
+export const getDateNow = (length = 10, formatType) => {
|
|
|
|
|
+ if (formatType === "string") {
|
|
|
|
|
+ return new Date(new Date().getTime() + 28800000)
|
|
|
|
|
+ .toJSON()
|
|
|
|
|
+ .slice(0, length)
|
|
|
|
|
+ .replace(/[-:T]/g, "");
|
|
|
|
|
+ }
|
|
|
|
|
+ return new Date(new Date().getTime() + 28800000)
|
|
|
|
|
+ .toJSON()
|
|
|
|
|
+ .slice(0, length)
|
|
|
|
|
+ .replace("T", " ");
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+// 获取指定值后的日期
|
|
|
|
|
+export const getDate = (type, value, date) => {
|
|
|
|
|
+ const d = date || getDateNow(19);
|
|
|
|
|
+ if (
|
|
|
|
|
+ typeof type !== "string" ||
|
|
|
|
|
+ !Number.isInteger(value) ||
|
|
|
|
|
+ typeof d !== "string"
|
|
|
|
|
+ ) {
|
|
|
|
|
+ console.log("参数类型错误");
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+ const now = new Date(d);
|
|
|
|
|
+ const D = {
|
|
|
|
|
+ day: value * 24 * 60 * 60 * 1000,
|
|
|
|
|
+ hour: value * 60 * 60 * 1000,
|
|
|
|
|
+ minute: value * 60 * 1000,
|
|
|
|
|
+ second: value * 1000
|
|
|
|
|
+ };
|
|
|
|
|
+ const year = now.getFullYear();
|
|
|
|
|
+ const month = now.getMonth();
|
|
|
|
|
+ const day = now.getDate();
|
|
|
|
|
+ const hour = now.getHours();
|
|
|
|
|
+ const minute = now.getMinutes();
|
|
|
|
|
+ const second = now.getSeconds();
|
|
|
|
|
+
|
|
|
|
|
+ switch (type) {
|
|
|
|
|
+ case "year": {
|
|
|
|
|
+ const isLeapYear = new Date(year + value, 1, 29).getDate() === 29;
|
|
|
|
|
+ return new Date(
|
|
|
|
|
+ year + value,
|
|
|
|
|
+ isLeapYear && month === 1 && day === 29 ? 1 : month,
|
|
|
|
|
+ isLeapYear && month === 1 && day === 29 ? 29 : day,
|
|
|
|
|
+ hour,
|
|
|
|
|
+ minute,
|
|
|
|
|
+ second
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+ case "month": {
|
|
|
|
|
+ let newYear = year;
|
|
|
|
|
+ let newMonth = month + value;
|
|
|
|
|
+ if (newMonth < 0) {
|
|
|
|
|
+ newYear -= Math.ceil(Math.abs(newMonth) / 12);
|
|
|
|
|
+ newMonth = 12 - (Math.abs(newMonth) % 12);
|
|
|
|
|
+ } else if (newMonth > 11) {
|
|
|
|
|
+ newYear += Math.floor(newMonth / 12);
|
|
|
|
|
+ newMonth = newMonth % 12;
|
|
|
|
|
+ }
|
|
|
|
|
+ const isLeapMonth = new Date(newYear, newMonth + 1, 0).getDate() === 29;
|
|
|
|
|
+ return new Date(
|
|
|
|
|
+ newYear,
|
|
|
|
|
+ isLeapMonth && month === 1 && day === 29 ? 1 : newMonth,
|
|
|
|
|
+ isLeapMonth && month === 1 && day === 29 ? 29 : day,
|
|
|
|
|
+ hour,
|
|
|
|
|
+ minute,
|
|
|
|
|
+ second
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+ case "day":
|
|
|
|
|
+ case "hour":
|
|
|
|
|
+ case "minute":
|
|
|
|
|
+ case "second":
|
|
|
|
|
+ return new Date(now.getTime() + D[type]);
|
|
|
|
|
+ default:
|
|
|
|
|
+ console.log("无效的日期类型");
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+// 时间格式化
|
|
|
|
|
+export const getFormatDate = (type, length, date = new Date()) => {
|
|
|
|
|
+ const now = new Date(new Date(date).getTime());
|
|
|
|
|
+ // eslint-disable-next-line
|
|
|
|
|
+ if (now == "Invalid Date") {
|
|
|
|
|
+ console.log("非法日期,无法格式化");
|
|
|
|
|
+ return date;
|
|
|
|
|
+ }
|
|
|
|
|
+ const year = now.getFullYear();
|
|
|
|
|
+ const month = now.getMonth() + 1;
|
|
|
|
|
+ const day = now.getDate();
|
|
|
|
|
+ const hours = now.getHours();
|
|
|
|
|
+ const minutes = now.getMinutes();
|
|
|
|
|
+ const seconds = now.getSeconds();
|
|
|
|
|
+ // 补零
|
|
|
|
|
+ const padZero = num => {
|
|
|
|
|
+ return num.toString().padStart(2, "0");
|
|
|
|
|
+ };
|
|
|
|
|
+ // 默认返回String类型
|
|
|
|
|
+ let result = `${year}-${padZero(month)}-${padZero(day)} ${padZero(
|
|
|
|
|
+ hours
|
|
|
|
|
+ )}:${padZero(minutes)}:${padZero(seconds)}`;
|
|
|
|
|
+ switch (type) {
|
|
|
|
|
+ case "string":
|
|
|
|
|
+ result = `${year}-${padZero(month)}-${padZero(day)} ${padZero(
|
|
|
|
|
+ hours
|
|
|
|
|
+ )}:${padZero(minutes)}:${padZero(seconds)}`;
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "cn":
|
|
|
|
|
+ result = `${year}年${padZero(month)}月${padZero(day)}日 ${padZero(
|
|
|
|
|
+ hours
|
|
|
|
|
+ )}时${padZero(minutes)}分${padZero(seconds)}秒`;
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "number":
|
|
|
|
|
+ result = `${year}${padZero(month)}${padZero(day)}${padZero(
|
|
|
|
|
+ hours
|
|
|
|
|
+ )}${padZero(minutes)}${padZero(seconds)}`;
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ return result.slice(0, length || result.length);
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 替换对象中的null为空字符串
|
|
|
|
|
+ * @param {Object} obj 目标对象
|
|
|
|
|
+ */
|
|
|
|
|
+export const replaceNullWithEmpty = obj => {
|
|
|
|
|
+ function replaceValue(value) {
|
|
|
|
|
+ if (value === null) {
|
|
|
|
|
+ return "";
|
|
|
|
|
+ } else if (typeof value === "object") {
|
|
|
|
|
+ if (Array.isArray(value)) {
|
|
|
|
|
+ return value.map(item => replaceValue(item));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return mapValues(value, v => replaceValue(v));
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return value;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return replaceValue(obj);
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+export default {
|
|
|
|
|
+ // preview,
|
|
|
|
|
+ request,
|
|
|
|
|
+ pinyin4js,
|
|
|
|
|
+ snapshoot,
|
|
|
|
|
+ getNextIdByAlias,
|
|
|
|
|
+ decode,
|
|
|
|
|
+ encryptByAes,
|
|
|
|
|
+ downloadByBlob,
|
|
|
|
|
+ sendMsg,
|
|
|
|
|
+ saveNews,
|
|
|
|
|
+ bpmTaskSave,
|
|
|
|
|
+ getDate,
|
|
|
|
|
+ getDateNow,
|
|
|
|
|
+ getFormatDate,
|
|
|
|
|
+ // onlyOfficeToPdf,
|
|
|
|
|
+ generateUUID: Utils.guid,
|
|
|
|
|
+ download,
|
|
|
|
|
+ // removeFormData,
|
|
|
|
|
+ replaceNullWithEmpty,
|
|
|
|
|
+ Utils,
|
|
|
|
|
+ ActionUtils
|
|
|
|
|
+};
|