UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

494 lines (493 loc) 29.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MoveUploadimg = exports.MoveUpload = void 0; var tslib_1 = require("tslib"); var antd_1 = require("antd"); var react_1 = tslib_1.__importStar(require("react")); var react_pdf_1 = require("react-pdf"); var viewerjs_1 = (0, tslib_1.__importDefault)(require("viewerjs")); var utils_1 = require("../../renderers/Lion/utils/utils"); var shell_1 = require("../../utils/shell"); var tools_1 = require("../../utils/shell/tools"); var icons_1 = require("../icons"); var PopUp_1 = (0, tslib_1.__importDefault)(require("../PopUp")); require("viewerjs/dist/viewer.css"); var hasShell = function (env, file, files, index) { var _a, _b; var baseUrl = ((_b = (_a = env === null || env === void 0 ? void 0 : env.axiosInstance) === null || _a === void 0 ? void 0 : _a.defaults) === null || _b === void 0 ? void 0 : _b.baseURL) || (env === null || env === void 0 ? void 0 : env.ajaxApi) || ""; if (tools_1.tools.isAndroid) { if (files) { shell_1.Shell.previewFile({ urls: files.map(function (val) { return val.preview; }) }); } else { var fileName = file.name; if ((0, utils_1.isImg)(fileName)) { shell_1.Shell.previewFile({ urls: [file.preview], current: index }); } else shell_1.Shell.previewPdf({ url: file.preview, name: fileName }); } } else { if (files) { var urls = files.map(function (attachment) { var url = new URL(encodeURI(attachment.preview)); var search = url.search == '' ? "?fileName=" + attachment.preview_name : url.search + "&fileName=" + attachment.preview_name; url.search = search; return url.href; }); shell_1.Shell.previewFile({ urls: urls, current: index }); } else { var url = new URL(encodeURI(file.preview)); var search = url.search == '' ? "?fileName=" + file.preview_name : url.search + "&fileName=" + file.preview_name; url.search = search; shell_1.Shell.previewFile({ urls: [url.href], current: index }); } } }; var MoveUpload = function (_a) { var _b, _c; var props = _a.props, maxTagCount = _a.maxTagCount, files = _a.files, minTagCount = _a.minTagCount, file = _a.file, errImg = _a.errImg, index = _a.index, onClick = _a.onClick, readonly = _a.readonly, isImage = _a.isImage, dropzone = _a.dropzone, onImgError = _a.onImgError; var handleImgDom = function (index, url, dropzone) { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () { var container, viewer; return (0, tslib_1.__generator)(this, function (_a) { container = dropzone.current; viewer = new viewerjs_1.default(container, { url: url, navbar: true, toolbar: false, initialViewIndex: index, inline: false, zIndex: 9999, button: true, zoomable: true, title: true, tooltip: true, minZoomRatio: 0.1, maxZoomRatio: 100, movable: true, interval: 2000, hide: function (env) { viewer.destroy(); } }); return [2 /*return*/, viewer]; }); }); }; var cx = props.classnames, env = props.env, tabSample = props.tabSample; var handleImageError = function (e) { // if (e.target) { // e.target.style.display = 'none'; // } onImgError(e); }; var length = files.length - maxTagCount > 99 ? 99 : files.length - maxTagCount; if (maxTagCount !== undefined && maxTagCount <= index && maxTagCount > 1) { return react_1.default.createElement("div", { className: cx('ImageControl-img-wrapper ddd'), style: { display: 'none' } }, react_1.default.createElement("img", { src: (file.thumbnailAddr || file.preview) || errImg, alt: "", "data-original1": file.preview || errImg, onError: function (e) { return handleImageError(e); } })); } return (react_1.default.createElement(react_1.default.Fragment, null, (file === null || file === void 0 ? void 0 : file.err) ? null : (react_1.default.createElement("div", { className: cx('ImageControl-img-wrapper'), onClick: function (e) { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () { var urls, viewer; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: if (!(readonly && !(length > 0 && minTagCount == maxTagCount && maxTagCount == index + 1))) return [3 /*break*/, 5]; e.stopPropagation(); e.preventDefault(); if (!(isImage || !files.some(function (item) { return !(0, utils_1.isImg)(item.name.toLowerCase()); }))) return [3 /*break*/, 5]; if (!shell_1.Shell.hasShell()) return [3 /*break*/, 1]; hasShell(env, file, files, index); return [3 /*break*/, 4]; case 1: if (!(dropzone !== undefined)) return [3 /*break*/, 4]; if (!env.previewImagesMb) return [3 /*break*/, 2]; urls = files.map(function (val) { return val.preview; }); env.previewImagesMb(urls, index); return [3 /*break*/, 4]; case 2: return [4 /*yield*/, handleImgDom(index, 'data-original1', dropzone)]; case 3: viewer = _a.sent(); viewer.show(); _a.label = 4; case 4: return [2 /*return*/]; case 5: onClick(); return [2 /*return*/]; } }); }); } }, length > 0 && minTagCount == maxTagCount && maxTagCount == index + 1 && react_1.default.createElement("div", { className: cx('ImageControl-img-overlay') }, react_1.default.createElement("span", null, "+", length)), Array.isArray(file.thumbnailAddr) ? (react_1.default.createElement(icons_1.Icon, { icon: (_b = file.thumbnailAddr) === null || _b === void 0 ? void 0 : _b[0], color: (_c = file.thumbnailAddr) === null || _c === void 0 ? void 0 : _c[1], symbol: true })) : (react_1.default.createElement("img", { src: (file.thumbnailAddr || file.preview) || errImg, alt: "", "data-original1": file.preview || errImg, onError: function (e) { return handleImageError(e); } })), !tabSample && (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement("span", null, file.name), react_1.default.createElement(icons_1.Icon, { onClick: function (e) { e.stopPropagation(); (0, utils_1.downloadFile)(file.downloadSrc, file.name); }, icon: '#icon-tooltool_download', className: "icon", symbol: true }))))))); }; exports.MoveUpload = MoveUpload; var MoveUploadimg = function (_a) { var _b, _c, _d, _e; var props = _a.props, files = _a.files, file = _a.file, errImg = _a.errImg, index = _a.index, readonly = _a.readonly, disabled = _a.disabled, isImage = _a.isImage, formatFileSize = _a.formatFileSize, removeFile = _a.removeFile, downloadFile = _a.downloadFile; var cx = props.classnames, popOverContainer = props.popOverContainer, multiple = props.multiple, env = props.env; var baseURL = ((_c = (_b = env === null || env === void 0 ? void 0 : env.axiosInstance) === null || _b === void 0 ? void 0 : _b.defaults) === null || _c === void 0 ? void 0 : _c.baseURL) || (env === null || env === void 0 ? void 0 : env.ajaxApi) || ''; var _f = (0, react_1.useState)(false), isOpened = _f[0], setIsOpened = _f[1]; // 第几个图片 var _g = (0, react_1.useState)(0), isOpenedIndex = _g[0], setIsOpenedIndex = _g[1]; // 确认删除 var _h = (0, react_1.useState)(false), open = _h[0], setOpen = _h[1]; // pdf有几页 var _j = (0, react_1.useState)(0), numPages = _j[0], setNumPages = _j[1]; // 查看pdf var _k = (0, react_1.useState)(false), showPdf = _k[0], setShowPdf = _k[1]; // pdfdom var pdfContainerRef = (0, react_1.useRef)(null); // pdf的宽度 var _l = (0, react_1.useState)(0), pdfWidth = _l[0], setPdfWidth = _l[1]; // 加载几页 var _m = (0, react_1.useState)(5), loadedPages = _m[0], setLoadedPages = _m[1]; // 初始加载5页 // 是否可加载 var _o = (0, react_1.useState)(false), loadedDisabled = _o[0], setLoadedDisabled = _o[1]; var featLength = files.filter(function (item) { return (0, utils_1.isImg)(item.name); }); (0, react_1.useEffect)(function () { if (!pdfContainerRef.current) return; var pdfBody = pdfContainerRef.current; var pdfContainerWidth = pdfBody.clientWidth; setPdfWidth(pdfContainerWidth - 50); }, [pdfContainerRef.current]); var getOrigin = function (first, second) { return { x: (first.x + second.x) / 2, y: (first.y + second.y) / 2 }; }; var getCanvasOffset = function (first, second, initial) { return { x: (first.x - second.x + initial.x), y: (first.y - second.y + initial.y) }; }; var getDistance = function (start, stop) { return Math.sqrt(Math.pow((stop.x - start.x), 2) + Math.pow((stop.y - start.y), 2)); }; (0, react_1.useEffect)(function () { var _a; if (!pdfContainerRef.current) return; var pdfContent = pdfContainerRef.current; var pdfbody = (_a = pdfContent === null || pdfContent === void 0 ? void 0 : pdfContent.childNodes) === null || _a === void 0 ? void 0 : _a[0]; if (!pdfbody) return; // const mc = new Hammer(pdfContent); var clientWidth = pdfbody.clientWidth; var clientHeight = pdfbody.clientHeight; var initialScale = 1; var distance = {}; // 单只拖动 var initialCanvasOffset = { x: 0, y: 0 }; var lastTapTime = 0; var Offset = { x: 0, y: 0 }; // 现在的位置 var canvasOff = { x: 0, y: 0 }; var origin = { x: 0, y: 0 }; pdfbody.addEventListener('touchstart', function (e) { e.stopPropagation(); if (e.touches.length === 1) { var currentTime = new Date().getTime(); var tapDelay = currentTime - lastTapTime; lastTapTime = currentTime; if (tapDelay < 300) { if (initialScale > 1.5) { pdfbody.style.position = 'relative'; pdfbody.style.top = canvasOff.y + 'px'; pdfbody.style.left = canvasOff.x + 'px'; pdfbody.style.transform = "scale(" + 1 + ")"; initialScale = 1; } else { pdfbody.style.position = 'relative'; pdfbody.style.top = canvasOff.y + 'px'; pdfbody.style.left = canvasOff.x + 'px'; pdfbody.style.transform = "scale(" + 2 + ")"; initialScale = 2; } return; } initialCanvasOffset = { x: e.touches[0].clientX, y: e.touches[0].clientY }; } else if (e.touches.length > 1) { distance.start = getDistance({ x: e.touches[0].screenX, y: e.touches[0].screenY }, { x: e.touches[1].screenX, y: e.touches[1].screenY }); initialCanvasOffset = getOrigin({ x: e.touches[0].screenX, y: e.touches[0].screenY }, { x: e.touches[1].screenX, y: e.touches[1].screenY }); } }); pdfbody.addEventListener('touchmove', function (e) { e.stopPropagation(); if (e.touches.length === 2) { origin = getOrigin({ x: e.touches[0].pageX, y: e.touches[0].pageY }, { x: e.touches[1].pageX, y: e.touches[1].pageY }); distance.stop = getDistance({ x: e.touches[0].screenX, y: e.touches[0].screenY }, { x: e.touches[1].screenX, y: e.touches[1].screenY }); canvasOff = getCanvasOffset(origin, initialCanvasOffset, Offset); initialScale = distance.stop / distance.start; if (canvasOff.x < (-clientWidth - 100)) { canvasOff.x = -clientWidth - 100; } else if (canvasOff.x > (clientWidth - 100)) { canvasOff.x = clientWidth - 100; } if (canvasOff.y < (-clientHeight - 100)) { canvasOff.y = (-clientHeight - 100); } else if (canvasOff.y > (clientHeight - 100)) { canvasOff.y = clientHeight - 100; } pdfbody.style.position = 'relative'; pdfbody.style.top = canvasOff.y + 'px'; pdfbody.style.left = canvasOff.x + 'px'; pdfbody.style.transform = "scale(" + initialScale + ")"; } else if (e.touches.length === 1) { canvasOff = getCanvasOffset({ x: e.touches[0].clientX, y: e.touches[0].clientY }, initialCanvasOffset, Offset); pdfbody.style.position = 'relative'; if (canvasOff.x < 0 && canvasOff.x <= (-clientWidth + 100)) { canvasOff.x = (-clientWidth + 100); } else if (canvasOff.x > 0 && canvasOff.x >= (clientWidth - 100)) { canvasOff.x = clientWidth - 100; } // if (canvasOff.y > 0) { // canvasOff.y = 0 // } else if (canvasOff.y < 0 && canvasOff.y <= (clientHeight + 100)) { // canvasOff.y = clientHeight - 100 // } pdfbody.style.top = canvasOff.y + 'px'; pdfbody.style.left = canvasOff.x + 'px'; pdfbody.style.transform = "scale(" + initialScale + ")"; } }); pdfbody.addEventListener('touchend', function (e) { e.stopPropagation(); Offset = canvasOff; }); return function () { pdfbody.removeEventListener('touchstart', function () { }); pdfbody.removeEventListener('touchmove', function () { }); pdfbody.removeEventListener('touchend', function () { }); }; }, [pdfContainerRef.current]); var handleShowPdf = function () { setShowPdf(true); }; var onDocumentLoadSuccess = function (_a) { var numPages = _a.numPages; setNumPages(numPages); if (numPages < 5) { setLoadedPages(numPages); setLoadedDisabled(true); } }; (0, react_1.useEffect)(function () { // 在组件挂载时加载首次5页 loadMorePages(); }, []); // 空数组表示只在组件挂载时运行 var loadMorePages = function () { if (loadedPages < numPages) { // 如果还有更多页面要加载,加载5页或剩余不足5页的页面 var newLoadedPages = Math.min(loadedPages + 5, numPages); setLoadedPages(newLoadedPages); if (newLoadedPages == numPages) { setLoadedDisabled(true); } } }; var handleClosePdf = function () { setShowPdf(false); }; var handleImgDom = function (index) { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () { var container, viewer; return (0, tslib_1.__generator)(this, function (_a) { container = document.getElementById('containerss'); viewer = new viewerjs_1.default(container, { url: "data-original", navbar: true, toolbar: false, initialViewIndex: index, inline: false, zIndex: 9999, button: true, zoomable: true, title: true, tooltip: true, minZoomRatio: 0.1, maxZoomRatio: 100, movable: true, interval: 2000, hide: function (env) { viewer.destroy(); }, view: function (env) { setIsOpenedIndex(isOpenedIndex); } }); return [2 /*return*/, viewer]; }); }); }; var onClickShell = function () { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () { var urls, idx, viewer; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: if (!readonly) return [3 /*break*/, 4]; if (!shell_1.Shell.hasShell()) return [3 /*break*/, 1]; if (isImage || !files.some(function (item) { return !(0, utils_1.isImg)(item.name.toLowerCase()); })) { hasShell(env, file, files, index); } else { hasShell(env, file); } return [2 /*return*/]; case 1: if (!(0, utils_1.isImg)(file.name)) { if (env.previewPdfMb) { env.previewPdfMb(file.name, file.preview); } else handleShowPdf(); return [2 /*return*/]; } else if ((0, utils_1.isImg)(file.name) && env.previewImagesMb) { urls = [file.preview]; idx = 0; if (!files.some(function (item) { return !(0, utils_1.isImg)(item.name.toLowerCase()); })) { urls = files.map(function (val) { return val.preview; }); idx = index; } env.previewImagesMb(urls, idx); return [2 /*return*/]; } return [4 /*yield*/, handleImgDom(featLength === null || featLength === void 0 ? void 0 : featLength.findIndex(function (item) { return item.preview == file.preview; }))]; case 2: viewer = _a.sent(); viewer.show(true); _a.label = 3; case 3: return [2 /*return*/]; case 4: setIsOpened(true); setIsOpenedIndex(featLength === null || featLength === void 0 ? void 0 : featLength.findIndex(function (item) { return item.preview == file.preview; })); return [2 /*return*/]; } }); }); }; return (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement("li", { className: cx('ImageControl-upload-li', !(0, utils_1.isImg)(file.name) && 'ImageControl-upload-li-pdf'), key: index, onClick: onClickShell }, Array.isArray(file.thumbnailAddr) ? (react_1.default.createElement(icons_1.Icon, { icon: file.thumbnailAddr[0], color: file.thumbnailAddr[1], symbol: true })) : (react_1.default.createElement("img", { src: (file.thumbnailAddr || file.preview) || errImg, alt: "" })), (0, utils_1.isImg)(file.name) && react_1.default.createElement("div", { style: { display: 'none' } }, react_1.default.createElement("img", { src: (file.thumbnailAddr || file.preview) || errImg, alt: "", "data-original": file.preview || errImg })), !(0, utils_1.isImg)(file.name) && react_1.default.createElement("span", { className: 'upload-li-pdf-name' }, file.name)), react_1.default.createElement(antd_1.Drawer, { visible: showPdf, placement: "right", height: "100%", className: "process_drawer", closable: false, width: '100%', destroyOnClose: true, zIndex: 3000, getContainer: env.getModalContainer, footer: react_1.default.createElement("div", { style: { textAlign: 'right' } }, react_1.default.createElement(antd_1.Button, { type: "primary", style: { borderRadius: 5, margin: '0 4px' }, onClick: handleClosePdf }, "\u5173\u95ED\u9884\u89C8"), react_1.default.createElement(antd_1.Button, { type: "primary", style: { borderRadius: 5 }, onClick: loadMorePages, disabled: loadedDisabled }, "\u52A0\u8F7D\u66F4\u591A", "(" + (loadedPages + "/" + numPages) + ")")), bodyStyle: { padding: 0 } }, react_1.default.createElement("div", { className: "flow-drawer-header ImageControl-flow-drawer-header" }, react_1.default.createElement("div", { className: 'left-text', onClick: handleClosePdf }, react_1.default.createElement(icons_1.Icon, { icon: "title-left", style: { width: '16px', height: '16px' } })), react_1.default.createElement("div", { className: "flow-drawer-header-title" }, react_1.default.createElement("div", { className: "flow-drawer-title" }, file.name)), react_1.default.createElement("div", { className: "flow-drawer-extra", style: { width: 36 } }, react_1.default.createElement("span", { className: "right-text" }))), react_1.default.createElement("div", { ref: pdfContainerRef, className: 'ImageControl-body' }, react_1.default.createElement(react_pdf_1.Document, { className: 'ImageControl-Document', file: file.preview, onLoadSuccess: onDocumentLoadSuccess, error: function () { setLoadedDisabled(true); setLoadedPages(0); return react_1.default.createElement(react_1.default.Fragment, null, " \u52A0\u8F7D\u9884\u89C8\u6587\u4EF6\u5931\u8D25"); }, loading: '\u52A0\u8F7D\u4E2D\uFF0C\u8BF7\u7A0D\u5019...' }, Array.from({ length: loadedPages }).map(function (_, index) { return (react_1.default.createElement(react_pdf_1.Page, { className: 'mb24', key: index, pageNumber: index + 1, scale: 1, width: pdfWidth, onRenderError: function () { setLoadedDisabled(true); setLoadedPages(0); } })); })))), react_1.default.createElement(PopUp_1.default, { isShow: isOpened, container: (_d = popOverContainer !== null && popOverContainer !== void 0 ? popOverContainer : env === null || env === void 0 ? void 0 : env.getModalContainer) !== null && _d !== void 0 ? _d : document.getElementById('amis-modal-container'), className: 'popOverClassName ImgButton', onHide: function () { return setIsOpened(false); }, header: react_1.default.createElement("div", { className: cx('TransferDropDown-header') }, react_1.default.createElement("div", { className: cx('PopUp-content-title') }, react_1.default.createElement("span", { className: cx('PopUp-content-name') }, file.name), react_1.default.createElement("span", { className: cx('PopUp-content-size') }, "(" + formatFileSize(file.size) + ")"))), footer: react_1.default.createElement("div", { className: cx('PopUp-content-Button') }, react_1.default.createElement(antd_1.Button, { type: "text", onClick: function () { setIsOpened(false); } }, "\u53D6\u6D88")), multiple: multiple, showClose: true, popOverHeatClassName: 'PopUp-popOverHeat' }, react_1.default.createElement("div", { className: cx('PopUp-content-BT') }, !readonly && !disabled && react_1.default.createElement("div", { className: cx('PopUp-content-Button') }, react_1.default.createElement(antd_1.Button, { type: "text", onClick: function () { setOpen(true); }, danger: true }, "\u5220\u9664")), react_1.default.createElement("div", { className: cx('PopUp-content-Button') }, react_1.default.createElement(antd_1.Button, { type: "text", onClick: function () { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () { var urls, viewer; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: if (shell_1.Shell.hasShell()) { if ((isImage || !files.some(function (item) { return !(0, utils_1.isImg)(item.name.toLowerCase()); }))) { hasShell(env, file, files, index); } else { hasShell(env, file); } setIsOpened(false); return [2 /*return*/]; } if (!(0, utils_1.isImg)(file.name)) { if (env.previewPdfMb) { env.previewPdfMb(file.name, file.preview); } else handleShowPdf(); return [2 /*return*/]; } else if ((0, utils_1.isImg)(file.name) && env.previewImagesMb) { urls = [file.preview]; env.previewImagesMb(urls); setIsOpened(false); return [2 /*return*/]; } return [4 /*yield*/, handleImgDom(isOpenedIndex)]; case 1: viewer = _a.sent(); setIsOpened(false); viewer.show(true); return [2 /*return*/]; } }); }); } }, "\u9884\u89C8")), !readonly && !disabled && react_1.default.createElement("div", { className: cx('PopUp-content-Button') }, react_1.default.createElement(antd_1.Button, { type: "text", onClick: function () { downloadFile(file.downloadSrc, file.name); } }, "\u4E0B\u8F7D")))), react_1.default.createElement(PopUp_1.default, { isShow: open, className: 'popOverClassName ImgButtonremove', onHide: function () { return setOpen(false); }, footer: react_1.default.createElement("div", { className: cx('PopUp-content-Button') }, react_1.default.createElement(antd_1.Button, { type: "text", onClick: function () { setOpen(false); } }, "\u53D6\u6D88")), multiple: true, container: (_e = popOverContainer !== null && popOverContainer !== void 0 ? popOverContainer : env === null || env === void 0 ? void 0 : env.getModalContainer) !== null && _e !== void 0 ? _e : document.getElementById('amis-modal-container'), popOverHeatClassName: 'PopUp-popOverHeat' }, react_1.default.createElement("div", { className: cx('PopUp-content-BT') }, react_1.default.createElement("div", { className: cx('PopUp-content-Button') }, react_1.default.createElement(antd_1.Button, { type: "text", onClick: function () { removeFile(); setOpen(false); setIsOpened(false); }, danger: true }, "\u786E\u8BA4\u5220\u9664")))))); }; exports.MoveUploadimg = MoveUploadimg; //# sourceMappingURL=./components/Lion/MoveUpload.js.map