UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

351 lines (350 loc) 13.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.byteSize = exports.createRandomValue = exports.downFile = exports.isPdf = exports.isCon = exports.copy = exports.uuid = exports.downloadFile = exports.getMediaIcon = exports.isImg = exports.singleAndDoubleClick = exports.classNames = exports.extractTemplate = void 0; var tslib_1 = require("tslib"); var file_saver_1 = (0, tslib_1.__importDefault)(require("file-saver")); // 用于生成唯一id以关联主从表 var uuid = function () { var temp_url = URL.createObjectURL(new Blob()); var uuid = temp_url.toString(); URL.revokeObjectURL(temp_url); return uuid.substr(uuid.lastIndexOf("/") + 1); }; exports.uuid = uuid; // 用于添加并合并多个className var classNames = function () { var names = []; for (var _i = 0; _i < arguments.length; _i++) { names[_i] = arguments[_i]; } var currentNames = []; names.forEach(function (name) { if (name) currentNames.push(name); }); return currentNames.join(' '); }; exports.classNames = classNames; var extractTemplate = function (str) { var regex = /\$\{([^}]+)\}/g; return Object.values(str).map(function (_str) { return _str.replace(regex, function (match, item) { return item; }); }); }; exports.extractTemplate = extractTemplate; // 单双击同时存在的情况,直接使用ondblclick会同时触发两次单击事件,延迟单击执行时间 var singleAndDoubleClick = (function () { var isClick = false, clickNum = 0; return function (obj) { var singleClick = obj.singleClick, doubleClick = obj.doubleClick, params = obj.params; if (!doubleClick) { return singleClick && singleClick(params); } clickNum++; if (isClick) return; isClick = true; setTimeout(function () { if (clickNum > 1) { doubleClick && doubleClick(params); } else { singleClick && singleClick(params); } clickNum = 0; isClick = false; }, 300); }; })(); exports.singleAndDoubleClick = singleAndDoubleClick; // 是否是图片格式 var IMG_SUFFIX = ['jpg', 'jpeg', 'png', 'bmp', 'gif', 'tif', 'heic', 'webp']; var isImg = function (fileName) { if (!fileName || !fileName.includes('.')) return true; var suffix = fileName.split('.').pop() || ''; return IMG_SUFFIX.includes(suffix.toLocaleLowerCase()); }; exports.isImg = isImg; // 是否是视频格式 var right_typ = ["wav", "mp4", "avi", "mp3"]; var isCon = function (fileName) { if (!fileName || !fileName.includes('.')) return true; var suffix = fileName.split('.').pop() || ''; return right_typ.includes(suffix.toLocaleLowerCase()); }; exports.isCon = isCon; // 是否是pdf格式 var isPdf = function (str) { return /(.jpe?)g|(.png)|(.pdf)/i.test(str); }; exports.isPdf = isPdf; // 文件格式地址 var iconMap = { annex: './public/images/icon-annex-fill.png', doc: './public/images/icon-doc-fill.png', excel: './public/images/icon-excel-fill.png', img: './public/images/icon-img-fill.png', music: './public/images/icon-music-fill.png', pdf: './public/images/icon-pdf-fill.png', ppt: './public/images/icon-ppt-fill.png', txt: './public/images/icon-txt-fill.png', video: './public/images/icon-video-fill.png', zip: './public/images/icon-zip-fill.png', }; var getMediaIcon = function (fileName) { var _a, _b; var icon = ''; var fileType = (_b = (_a = fileName === null || fileName === void 0 ? void 0 : fileName.split('.')) === null || _a === void 0 ? void 0 : _a.pop()) !== null && _b !== void 0 ? _b : ''; switch (fileType.toLocaleLowerCase()) { case 'doc': case 'docx': icon = iconMap.doc; break; case 'xls': case 'xlsx': icon = iconMap.excel; break; case 'ppt': case 'pptx': icon = iconMap.ppt; break; case 'zip': case 'rar': icon = iconMap.zip; break; case 'jpg': case 'jpeg': case 'png': case 'gif': case 'tif': case 'bmp': case 'webp': icon = iconMap.img; break; case 'txt': icon = iconMap.txt; break; case 'wav': case 'mp4': case 'avi': case 'mp3': icon = iconMap.video; break; case 'pdf': icon = iconMap.pdf; break; default: icon = iconMap.annex; break; } return icon; }; exports.getMediaIcon = getMediaIcon; // 文件夹大小,路径,文件夹名字,获取文件夹大小,导航条, var downFile = function (chunk, url, name, percent) { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () { var chunkSize; return (0, tslib_1.__generator)(this, function (_a) { chunkSize = 3145728; chunk(url, chunkSize, name).then(function (res) { if (res) { download(url, res, percent, chunkSize, name) .then(function (buffers) { var mime = "application/" + (name === null || name === void 0 ? void 0 : name.split(".").pop()); saveAs(buffers, name, mime); }); } else { downloadFile(url, name); } }); return [2 /*return*/]; }); }); }; exports.downFile = downFile; // 文件下载--自lioncellfile迁徙 var downloadFile = function (url, name) { return new Promise(function (resolve, reject) { resolve(''); }).then(function (res) { if (typeof url == 'object' && url instanceof Blob) { url = URL.createObjectURL(url); // 创建blob地址 } var aLink = document.createElement('a'); aLink.href = url; aLink.download = name || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效 var event; if (window.MouseEvent) event = new MouseEvent('click'); else { event = document.createEvent('MouseEvents'); event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); } aLink.dispatchEvent(event); }); }; exports.downloadFile = downloadFile; // // 路径,文件大小,默认下载分流的大小,最大下载次数 var download = function (url, datacontent, percent, chunkSize, name, poolLimit) { if (chunkSize === void 0) { chunkSize = 524288; } if (poolLimit === void 0) { poolLimit = 5; } return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () { var chunks, results, sortedBuffers; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: chunks = typeof chunkSize === "number" ? Math.ceil(datacontent / chunkSize) : 1; return [4 /*yield*/, asyncPool(poolLimit, chunks, function (i) { var start = i * chunkSize; var end = i + 1 == chunks ? datacontent - 1 : (i + 1) * chunkSize - 1; return getBinaryContent(url, start, end, i, name, percent); })]; case 1: results = _a.sent(); sortedBuffers = results.map(function (item) { var Buffers = item.buffer; return new Uint8Array(Buffers); }); return [2 /*return*/, concatenate(sortedBuffers)]; } }); }); }; var asyncPool = function (poolLimit, array, iteratorFn) { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () { var ret, executing, _loop_1, i; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: ret = []; executing = []; _loop_1 = function (i) { var p, e_1; return (0, tslib_1.__generator)(this, function (_b) { switch (_b.label) { case 0: p = Promise.resolve().then(function () { return iteratorFn(i); }); ret.push(p); // 保存新的异步任务 if (!(poolLimit <= array)) return [3 /*break*/, 2]; e_1 = p.then(function () { return executing.splice(executing.indexOf(e_1), 1); }); executing.push(e_1); // 保存正在执行的异步任务 if (!(executing.length >= poolLimit)) return [3 /*break*/, 2]; return [4 /*yield*/, Promise.race(executing)]; case 1: _b.sent(); // 等待较快的任务执行完成 _b.label = 2; case 2: return [2 /*return*/]; } }); }; i = 0; _a.label = 1; case 1: if (!(i < array)) return [3 /*break*/, 4]; return [5 /*yield**/, _loop_1(i)]; case 2: _a.sent(); _a.label = 3; case 3: i++; return [3 /*break*/, 1]; case 4: return [2 /*return*/, Promise.all(ret)]; } }); }); }; var getBinaryContent = function (url, start, end, i, name, percent) { return new Promise(function (resolve, reject) { try { var xhr_1 = new XMLHttpRequest(); xhr_1.open("GET", url, true); xhr_1.setRequestHeader("range", "bytes=" + start + "-" + end); // 请求头上设置范围请求信息 xhr_1.responseType = "arraybuffer"; // 设置返回的类型为arraybuffer xhr_1.onload = function () { percent(name); resolve({ index: i, buffer: xhr_1.response, // 范围请求对应的数据 }); }; xhr_1.send(); } catch (err) { reject(new Error(err)); } }); }; var concatenate = function (arrays) { if (!arrays.length) return null; var totalLength = arrays.reduce(function (acc, value) { return acc + value.length; }, 0); var result = new Uint8Array(totalLength); var length = 0; for (var _i = 0, arrays_1 = arrays; _i < arrays_1.length; _i++) { var array = arrays_1[_i]; result.set(array, length); length += array.length; } return result; }; var saveAs = function (buffers, name, mime) { if (mime === void 0) { mime = "application/octet-stream"; } var blob = new Blob([buffers], { type: mime }); // const blobUrl = URL.createObjectURL(blob); // const a = document.createElement("a"); // a.download = name || ""; // a.href = blobUrl; // a.style.display = 'none' // document.body.appendChild(a) // a.click(); // a.remove(); // URL.revokeObjectURL(blobUrl); file_saver_1.default.saveAs(blob, name); }; var copy = function (text) { var input = document.createElement("textarea"); input.style.cssText = 'position: absolute;top: -1px;height: 1px;width: 1px;'; input.value = text; document.body.appendChild(input); input.select(); document.execCommand("Copy"); document.body.removeChild(input); }; exports.copy = copy; var createRandomValue = function () { var r, v, n; n = 'yyxxxxxx-yyxx-'.replace(/[xy]/g, function (c) { (r = (Math.random() * 16) | 0), (v = c == 'x' ? r : (r & 0x3) | 0x8); return v.toString(16); }); return n + Date.now().toString(16); }; exports.createRandomValue = createRandomValue; var byteSize = function (limit) { var size = ""; if (limit < 0.1 * 1024) { size = limit.toFixed(2) + "B"; } else if (limit < 0.1 * 1024 * 1024) { size = (limit / 1024).toFixed(2) + "KB"; } else if (limit < 0.1 * 1024 * 1024 * 1024) { size = (limit / (1024 * 1024)).toFixed(2) + "MB"; } else { size = (limit / (1024 * 1024 * 1024)).toFixed(2) + "GB"; } var sizeStr = size + ""; var index = sizeStr.indexOf("."); var dou = sizeStr.substr(index + 1, 2); if (dou == "00") { return sizeStr.substring(0, index) + sizeStr.substr(index + 3, 2); } return size; }; exports.byteSize = byteSize; //# sourceMappingURL=./renderers/Lion/utils/utils.js.map