fastlion-amis
Version:
一种MIS页面生成工具
351 lines (350 loc) • 13.3 kB
JavaScript
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
;