UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

221 lines (220 loc) 12.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getMediaUrl = void 0; var tslib_1 = require("tslib"); var antd_1 = require("antd"); var react_1 = tslib_1.__importStar(require("react")); var factory_1 = require("../factory"); var shell_1 = require("../utils/shell"); var drawer_1 = tslib_1.__importDefault(require("antd/lib/drawer")); var button_1 = tslib_1.__importDefault(require("antd/lib/button")); var Upload_1 = tslib_1.__importDefault(require("./Lion/components/Upload")); var CloseCircleOutlined_1 = tslib_1.__importDefault(require("@ant-design/icons/lib/icons/CloseCircleOutlined")); ; var getMediaUrl = function (originUrl, thumbnail) { if (thumbnail === void 0) { thumbnail = false; } // media的url存在多种类型 // blob,localfile,base64可以直接显示,并且没有缩略图 // 后台资源地址需要拼接CONF.baseUrl,并且支持缩略图 if (/^data:/.test(originUrl) || // base64 /^blob:/.test(originUrl) || // blob /^localfile:/.test(originUrl) // 终端localfile ) return originUrl; return createImageUrl(originUrl, thumbnail); }; exports.getMediaUrl = getMediaUrl; var createImageUrl = function (imgUrl, thumbnail, isoffline) { if (thumbnail === void 0) { thumbnail = false; } if (isoffline === void 0) { isoffline = true; } if (isoffline && shell_1.Shell.hasShell() && imgUrl) { //离线终端的临时目录 已经有了就localfile 就不需要拼接 否则要把线上的http换成localfile var url = ''; if (imgUrl.indexOf("localfile:///") > -1) { return imgUrl; } else { url = "localfile:///"; return "".concat(url).concat(imgUrl); } } if (/^data:image/.test(imgUrl)) { return imgUrl; } return imgUrl; }; var OfflineImage = function (props) { var offlineData = props.offlineData, cx = props.classnames, multiple = props.multiple, _a = props.maxLength, maxLength = _a === void 0 ? 0 : _a, formItem = props.formItem, label = props.label, readonly = props.readonly, offline = props.offline, offlineChange = props.offlineChange, offlineDelete = props.offlineDelete, limit = props.limit, _b = props.maxSize, maxSize = _b === void 0 ? 1024 : _b; var _c = (0, react_1.useState)(offlineData), imageValue = _c[0], setImageValue = _c[1]; var _d = (0, react_1.useState)(false), previewOpen = _d[0], setPreviewOpen = _d[1]; var _e = (0, react_1.useState)(''), previewImage = _e[0], setPreviewImage = _e[1]; var _f = (0, react_1.useState)(''), previewTitle = _f[0], setPreviewTitle = _f[1]; (0, react_1.useEffect)(function () { setImageValue(offlineData); }, [offlineData]); var _g = (0, react_1.useState)(false), visible = _g[0], setVisible = _g[1]; var ImageItem = function (index, value) { if (value) { var url_1 = (0, exports.getMediaUrl)(value.name); return react_1.default.createElement("div", { className: cx('Offline-image-item') }, react_1.default.createElement("div", { className: 'img-left', style: { width: 28, height: 28, overflow: 'hidden' } }, react_1.default.createElement("img", { style: { width: '100%' }, onClick: function (e) { e.stopPropagation(); handlePreview(url_1, value.name || value.fileName || ''); }, src: url_1 })), formItem && react_1.default.createElement("div", { className: 'img-right' }, react_1.default.createElement("div", { className: 'img-name' }, value.name || value.fileName), value.size ? react_1.default.createElement("div", { className: 'img-size' }, Upload_1.default.formatFileSize(value.size)) : null), formItem && !readonly ? react_1.default.createElement("div", { className: 'img-del' }, react_1.default.createElement(CloseCircleOutlined_1.default, { onClick: function () { return handleDelete(index); } })) : null); } return null; }; //壳选择图片 var chooseImage = function () { var hasShell = shell_1.Shell.hasShell(); if (hasShell && offline.primaryValue) { setVisible(true); } else { antd_1.message.error("请先扫码再选择图片!"); } }; //0相册 1 拍照 var getImages = function (type) { var _a; var currentNum = 0; if (imageValue) { if ("info" in imageValue) { currentNum = ((_a = imageValue.info) === null || _a === void 0 ? void 0 : _a.length) || 0; } } var count = maxLength - currentNum; // maxLength大于0证明有配置,此时才需要验证 if (count <= 0 && maxLength) { antd_1.message.warning({ content: "\u4E0A\u4F20\u4E2A\u6570\u5DF2\u8FBE\u4E0A\u9650".concat(maxLength, "\u4E2A") }); return; } var config = { maxHeight: (limit === null || limit === void 0 ? void 0 : limit.maxHeight) || 0, maxWidth: (limit === null || limit === void 0 ? void 0 : limit.maxWidth) || 0, maxSize: 1024, multi: multiple, type: type, rect: null, count: count, offline: offline }; var list = []; var fail = function (res) { antd_1.message.error(res.msg); }; var info = function (res) { if ((res === null || res === void 0 ? void 0 : res.code) === -200) { antd_1.message.warning((res === null || res === void 0 ? void 0 : res.msg) || '拍照失败'); } else { list.push(res.data.dataurl); } }; var success = function (res) { list.push(res.data.dataurl); onUpload(list); }; shell_1.Shell.getAttachment(config, info, success, fail); }; //处理回调文件 var onUpload = function (md5s) { var valueList = []; var info = md5s.map(function (item) { var name = item.replace('localfile:///', ''); valueList.push(name); return { addr: item, name: name, fileName: name, path: item }; }); if (imageValue.value) { var newValue = tslib_1.__spreadArray([imageValue.value], valueList, true).join(','); var newInfo = tslib_1.__spreadArray(tslib_1.__spreadArray([], imageValue.info, true), info, true); setImageValue({ value: newValue, info: newInfo }); } else { setImageValue({ value: valueList.join(','), info: info }); } offlineChange(md5s, offline.fieldName); setVisible(false); }; //离线删除本地图片 var handleDelete = function (fileIndex) { return tslib_1.__awaiter(void 0, void 0, void 0, function () { var tableName, primaryKey, primaryValue, fieldName, valueList, info; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: tableName = offline.tableName, primaryKey = offline.primaryKey, primaryValue = offline.primaryValue, fieldName = offline.fieldName; return [4 /*yield*/, shell_1.Shell.deleteFile(tableName, primaryKey, primaryValue, fieldName, 'localfile:///' + imageValue.info[fileIndex].name)]; case 1: _a.sent(); valueList = imageValue.value.split(','); info = tslib_1.__spreadArray([], imageValue.info, true); valueList.splice(fileIndex, 1); info.splice(fileIndex, 1); setImageValue({ value: valueList.join(','), info: info }); offlineDelete(fieldName, fileIndex); return [2 /*return*/]; } }); }); }; var renderBody = function () { var _a, _b, _c; var images = multiple ? (imageValue === null || imageValue === void 0 ? void 0 : imageValue.value) ? imageValue.value.split(',').map(function (imageName, index) { var _a; return ImageItem(index, (_a = imageValue === null || imageValue === void 0 ? void 0 : imageValue.info) === null || _a === void 0 ? void 0 : _a[index]); }) : null : ImageItem(0, (_a = imageValue === null || imageValue === void 0 ? void 0 : imageValue.info) === null || _a === void 0 ? void 0 : _a[0]); return formItem ? react_1.default.createElement("div", { className: cx('Offline-form-item') }, react_1.default.createElement("label", null, label, readonly || (((_b = imageValue === null || imageValue === void 0 ? void 0 : imageValue.info) === null || _b === void 0 ? void 0 : _b.length) === maxLength && maxLength) || (!multiple && ((_c = imageValue === null || imageValue === void 0 ? void 0 : imageValue.info) === null || _c === void 0 ? void 0 : _c.length) === 1) ? null : react_1.default.createElement("span", { className: "fa fa-plus-circle", onClick: chooseImage })), react_1.default.createElement("div", { className: 'offline-form-item-wrapper' }, images)) : react_1.default.createElement("div", { className: 'offline-image-wrapper' }, images); }; var handleCancel = function () { return setPreviewOpen(false); }; var handlePreview = function (url, fileName) { return tslib_1.__awaiter(void 0, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { setPreviewImage(url); setPreviewTitle(fileName); setPreviewOpen(true); return [2 /*return*/]; }); }); }; return (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement("div", { className: cx('Offline-image') }, renderBody()), react_1.default.createElement(drawer_1.default, { title: null, placement: 'bottom', closable: false, visible: visible, onClose: function () { return setVisible(false); }, maskClosable: true, getContainer: props.env.getModalContainer, // zIndex={1000} height: 110, className: 'offline-picture-drawer' }, react_1.default.createElement("div", { className: 'offline-picture-item' }, react_1.default.createElement(button_1.default, { onClick: function () { return getImages(0); }, block: true, type: 'primary', size: 'large' }, "\u76F8\u518C")), react_1.default.createElement("div", { className: 'offline-picture-item' }, react_1.default.createElement(button_1.default, { onClick: function () { return getImages(1); }, block: true, size: 'large' }, "\u62CD\u6444"))), react_1.default.createElement(drawer_1.default, { width: '100vw', getContainer: props.env.getModalContainer, visible: previewOpen, title: react_1.default.createElement("span", { style: { paddingRight: '22px', width: '100%', display: 'inline-block', whiteSpace: 'nowrap', textOverflow: 'ellipsis', overflow: 'hidden' } }, previewTitle), footer: null, onClose: function (e) { e.stopPropagation(); handleCancel(); } }, react_1.default.createElement("img", { alt: "example", style: { width: '100%' }, src: previewImage })))); }; // 将组件注册到 amis 渲染器中 exports.default = (0, factory_1.Renderer)({ type: 'offline-image' })(OfflineImage); //# sourceMappingURL=./renderers/OfflineImage.js.map