UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

964 lines (963 loc) 86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LionUploadRenderer = void 0; var tslib_1 = require("tslib"); var react_1 = tslib_1.__importStar(require("react")); var Item_1 = require("../../../Form/Item"); // import 'cropperjs/dist/cropper.css'; var Cropper = react_1.default.lazy(function () { return Promise.resolve().then(function () { return new Promise(function(resolve){require(['react-cropper'], function(ret) {resolve(tslib_1.__importStar(ret));})}); }); }); var react_dropzone_1 = (0, tslib_1.__importDefault)(require("react-dropzone")); require("blueimp-canvastoblob"); var find_1 = (0, tslib_1.__importDefault)(require("lodash/find")); var helper_1 = require("../../../../utils/helper"); var icons_1 = require("../../../../components/icons"); var Button_1 = (0, tslib_1.__importDefault)(require("../../../../components/Button")); var attr_accept_1 = (0, tslib_1.__importDefault)(require("attr-accept")); var InputFile_1 = require("../../../Form/InputFile"); var Image_1 = (0, tslib_1.__importDefault)(require("../../../Image")); var tpl_builtin_1 = require("../../../../utils/tpl-builtin"); var tpl_1 = require("../../../../utils/tpl"); var isPlainObject_1 = (0, tslib_1.__importDefault)(require("lodash/isPlainObject")); var merge_1 = (0, tslib_1.__importDefault)(require("lodash/merge")); var utils_1 = require("../../utils/utils"); var spark_md5_1 = (0, tslib_1.__importDefault)(require("spark-md5")); var axios_1 = (0, tslib_1.__importDefault)(require("axios")); var image_conversion_1 = require("image-conversion"); var Tooltip_1 = (0, tslib_1.__importDefault)(require("antd/lib/Tooltip")); var style_1 = require("../../Table/LionCellFile/style"); var icons_2 = require("@ant-design/icons"); var popover_1 = (0, tslib_1.__importDefault)(require("antd/lib/popover")); var CellPopover_1 = (0, tslib_1.__importDefault)(require("../../Table/LionCellImg/CellPopover")); var Modal_1 = (0, tslib_1.__importDefault)(require("antd/lib/modal/Modal")); var LodopFuncs_1 = require("../../../../utils/print/LodopFuncs"); var LabelPrint_1 = require("../../LabelPrint"); var shell_1 = require("../../../../utils/shell"); var antd_1 = require("antd"); var preventEvent = function (e) { return e.stopPropagation(); }; var LionUpload = /** @class */ (function (_super) { (0, tslib_1.__extends)(LionUpload, _super); function LionUpload(props) { var _a, _b, _c, _d; var _this_1 = _super.call(this, props) || this; _this_1.state = { uploading: false, locked: false, files: [], // visible: false, // uploading: false, // params: '', // init: false, // formItemName: '', // removeIcon: true, // loading: false, // preUploading: false, //预处理 chunksSize: 0, // currentChunks: 0, // 当前上传的队列个数 当前还剩下多少个分片没上传 // uploadPercent: -1, // 上传率 // preUploadPercent: -1, // 预处理率 // uploadRequest: false, // 上传请求,即进行第一个过程中 // uploaded: false, // 表示文件是否上传成功 uploadParams: {}, arrayBufferData: [], upload_cmd: 'check_exist', upload_name: '', // upload_field: '', file_type: '', // fileSize: 0, }; _this_1.baseURL = ''; _this_1.files = []; _this_1.fileUploadCancelExecutors = []; _this_1.dropzone = react_1.default.createRef(); _this_1.frameImageRef = react_1.default.createRef(); _this_1.current = null; _this_1.unmounted = false; // 自lion-input-file迁徙而来的上传方法2 _this_1.handleFile = function (config) { return new Promise(function (resolve, reject) { var fileSize = config === null || config === void 0 ? void 0 : config.size; var file = config; var blobSlice = File.prototype.slice; // 切片使用 var _this = _this_1; var chunkSize = 1024 * 1024 * 2; // 切片每次2M var chunks = Math.ceil(file.size / chunkSize); // 切片数 var currentChunk = 0; // 当前上传的chunk索引 var file_type = config === null || config === void 0 ? void 0 : config.type; var file_name = config === null || config === void 0 ? void 0 : config.name; var spark = new spark_md5_1.default.ArrayBuffer(); // 对arrayBuffer数据进行md5加密,产生一个md5字符串 var chunkFileReader = new FileReader(); // 用于计算出每个chunkMd5 var totalFileReader = new FileReader(); // 用于计算出总文件的fileMd5 var params = { chunks: [], file: {} }; // 用于上传所有分片的md5信息 var arrayBufferData = []; // 用于存储每个chunk的arrayBuffer对象,用于分片上传使用 params.file.fileName = file.name || _this_1.state.cropFileName; params.file.fileSize = file.size; totalFileReader.readAsArrayBuffer(file); totalFileReader.onload = function (e) { // 对整个totalFile生成md5 spark.append(e.target.result); params.file.fileMd5 = spark.end(); // 计算整个文件的fileMd5 }; chunkFileReader.onload = function (e) { // 对每一片分片进行md5加密 spark.append(e.target.result); // 每一个分片需要包含的信息 var obj = { chunk: currentChunk + 1, start: currentChunk * chunkSize, end: ((currentChunk * chunkSize + chunkSize) >= file.size) ? file.size : currentChunk * chunkSize + chunkSize, chunkMd5: spark.end(), chunks: chunks }; // 每一次分片onload,currentChunk都需要增加,以便来计算分片的次数 currentChunk++; params.chunks.push(obj); // 将每一块分片的arrayBuffer存储起来,用来partUpload var tmp = { chunk: obj.chunk, currentBuffer: e.target.result }; arrayBufferData.push(tmp); if (currentChunk < chunks) { // 当前切片总数没有达到总数时 loadNext(); } else { //记录所有chunks的长度 params.file.fileChunks = params.chunks.length; // 表示预处理结束,将上传的参数,arrayBuffer的数据存储起来 _this.setState({ // preUploading: false, uploadParams: params, arrayBufferData: arrayBufferData, chunksSize: chunks, // preUploadPercent: 100, file_type: file_type, upload_name: params.file.fileName, fileSize: fileSize }, function () { resolve(); }); } }; chunkFileReader.onerror = function () { console.warn('oops, something went wrong.'); }; function loadNext() { var start = currentChunk * chunkSize, end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize; chunkFileReader.readAsArrayBuffer(blobSlice.call(file, start, end)); } loadNext(); }); }; // 自lion-input-file迁徙而来的上传方法3 _this_1.handlePartUpload = function (originalFile, cb) { var _a = _this_1.state, upload_cmd = _a.upload_cmd, upload_name = _a.upload_name, chunksSize = _a.chunksSize, file_type = _a.file_type, uploadParams = _a.uploadParams; var uploadList = uploadParams.chunks, file = uploadParams.file; var fileMd5 = file.fileMd5; var _b = _this_1.props, url = _b.url, receiver = _b.receiver, env = _b.env, name = _b.name; // 遍历uploadList try { // @ts-ignore Promise.allSettled(uploadList.map(function (_uploadItem) { return new Promise(function (resolve, reject) { var chunkMd5 = _uploadItem.chunkMd5, chunk = _uploadItem.chunk, start = _uploadItem.start, end = _uploadItem.end; var formData = new FormData(), //新建一个Blob对象,将对应分片的arrayBuffer加入Blob中 blob = new Blob([_this_1.state.arrayBufferData[chunk - 1].currentBuffer], { type: 'application/octet-stream' }); // 上传的参数 var params = "fileMd5=" + fileMd5 + "&chunkMd5=" + chunkMd5 + "&chunk=" + chunk + "&start=" + start + "&end=" + end + "&chunks=" + _this_1.state.arrayBufferData.length; // 通过formData将上传参数传入 formData.append('upload_cmd', upload_cmd); formData.append('upload_field', String(name)); formData.append('file_name', upload_name); formData.append('file_md5', fileMd5); formData.append('chunk_index', chunk); formData.append('chunk_total', String(chunksSize)); formData.append('chunk_size', String(end - start)); formData.append('type', file_type); formData.append('chunk_file', blob); env.fetcher({ url: url || receiver, data: formData, method: 'post' }).then(function (res) { if (res.status === 0) { resolve(res === null || res === void 0 ? void 0 : res.data); } else { reject({ _err: res === null || res === void 0 ? void 0 : res.msg, _data: formData }); } }).catch(function (e) { return reject(e); }); }); })).then(function (_res) { var _chunk_success_count = 0; var _chunk_error_arr = []; _res.map(function (_upload_res) { if ((_upload_res === null || _upload_res === void 0 ? void 0 : _upload_res.status) === 'fulfilled') { _chunk_success_count++; } else { _chunk_error_arr.push(_upload_res.reason._data); } }); if (_chunk_success_count === chunksSize) { var formData = new FormData(); // 通过formData将上传参数传入,发起文件分片合并通知 formData.append('upload_cmd', 'chunk_merge'); formData.append('upload_field', String(name)); formData.append('file_name', upload_name); formData.append('file_md5', fileMd5); env.fetcher({ url: url || receiver, data: formData, method: 'post' }).then(function (_merge_res) { if ((_merge_res === null || _merge_res === void 0 ? void 0 : _merge_res.status) === 0) { var obj = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, _merge_res === null || _merge_res === void 0 ? void 0 : _merge_res.data), { state: 'uploaded' }); obj.value = obj.value || obj.url; cb(null, originalFile, obj); } else { cb(_merge_res === null || _merge_res === void 0 ? void 0 : _merge_res.msg, originalFile); } }).catch(function (_file_merge_res) { cb('上传失败', originalFile); return; }); } else { _chunk_error_arr.map(function (_chunk_error_item) { env.fetcher({ url: url, data: _chunk_error_item, method: 'post' }).then(function (_error_res) { }); }); throw new Error('chunk file upload error!'); } }).catch(function (_err) { cb(_err, originalFile); return; }); } catch (error) { cb(error, originalFile); return; } }; // 打印 _this_1.handleLabelPrint = function (item) { var list = item; _this_1.setState({ ctx: (0, tslib_1.__assign)((0, tslib_1.__assign)({}, _this_1.state.ctx), { items: [list], rows: [list], selectedItems: [list], unSelectedItems: [] }) }, function () { var LODOP = (0, LodopFuncs_1.getLodop)(); if (LODOP) { _this_1.setState({ _print_visible: true }); } }); }; // 判断是否是pdf,图片,视频 _this_1.handlementCategory = function (item) { if ((0, utils_1.isImg)(item.name) || (0, utils_1.isPdf)(item.name)) { return true; } else { return false; } }; // 进度条 _this_1.handprogress = function (name) { var _a = _this_1.state.content[name], percent = _a.percent, size = _a.size; var speed = _this_1.state.content; var value = Number(((percent / size) * 100).toFixed(0)); speed[name] = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, _this_1.state.content[name]), { percent: ++percent, pent: value !== Infinity ? value : 0 }); _this_1.setState({ content: speed }, function () { if (Number(((percent / size) * 100).toFixed(0)) == 100) { speed[name] = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, _this_1.state.content[name]), { percent: 0, pent: 0 }); _this_1.setState({ content: speed }); } }); }; // 获取文件大小判断是否分流还有分流多大 _this_1.chunks = function (url, chunkSize, name) { if (chunkSize === void 0) { chunkSize = 524288; } return (0, tslib_1.__awaiter)(_this_1, void 0, void 0, function () { var staging, chunk, datacontent, contentSize_1, previewvalue, speed_1; var _this_1 = this; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: staging = url.split("?").pop(); chunk = staging.split("=").pop(); if (!(chunk === "1")) return [3 /*break*/, 2]; return [4 /*yield*/, fetch(url, { method: "HEAD" })]; case 1: datacontent = (_a.sent()).headers.get("Content-Length"); contentSize_1 = parseInt(datacontent); previewvalue = this.state.content; speed_1 = this.state.content; previewvalue[name] = { "size": 0, "percent": 0, "pent": 0 }; this.setState({ content: previewvalue }, function () { speed_1[name] = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, _this_1.state.content[name]), { size: Number((contentSize_1 / chunkSize).toFixed(0)) }); _this_1.setState({ content: speed_1 }); }); return [2 /*return*/, contentSize_1]; case 2: return [2 /*return*/, false]; } }); }); }; _this_1.baseURL = ((_c = (_b = (_a = props.env) === null || _a === void 0 ? void 0 : _a.axiosInstance) === null || _b === void 0 ? void 0 : _b.defaults) === null || _c === void 0 ? void 0 : _c.baseURL) || ((_d = props.env) === null || _d === void 0 ? void 0 : _d.ajaxApi) || ''; // this.baseURL = 'https://sasdev.sanfu.com/saas_dev' // this.baseURL = 'https://bwt.sanfu.com/saas' _this_1.state = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, _this_1.state), { crop: _this_1.buildCrop(props), frameImageWidth: 0, selectList: [], setvideo: false, structure: {}, content: {} }); _this_1.errImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAADDCAYAAADQvc6UAAABRWlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSSwoyGFhYGDIzSspCnJ3UoiIjFJgf8LAwSDCIMogwMCcmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsis7PPOq3QdDFcvjV3jOD1boQVTPQrgSkktTgbSf4A4LbmgqISBgTEFyFYuLykAsTuAbJEioKOA7DkgdjqEvQHEToKwj4DVhAQ5A9k3gGyB5IxEoBmML4BsnSQk8XQkNtReEOBxcfXxUQg1Mjc0dyHgXNJBSWpFCYh2zi+oLMpMzyhRcASGUqqCZ16yno6CkYGRAQMDKMwhqj/fAIcloxgHQqxAjIHBEugw5sUIsSQpBobtQPdLciLEVJYzMPBHMDBsayhILEqEO4DxG0txmrERhM29nYGBddr//5/DGRjYNRkY/l7////39v///y4Dmn+LgeHANwDrkl1AuO+pmgAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAwqADAAQAAAABAAAAwwAAAAD9b/HnAAAHlklEQVR4Ae3dP3PTWBSGcbGzM6GCKqlIBRV0dHRJFarQ0eUT8LH4BnRU0NHR0UEFVdIlFRV7TzRksomPY8uykTk/zewQfKw/9znv4yvJynLv4uLiV2dBoDiBf4qP3/ARuCRABEFAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghgg0Aj8i0JO4OzsrPv69Wv+hi2qPHr0qNvf39+iI97soRIh4f3z58/u7du3SXX7Xt7Z2enevHmzfQe+oSN2apSAPj09TSrb+XKI/f379+08+A0cNRE2ANkupk+ACNPvkSPcAAEibACyXUyfABGm3yNHuAECRNgAZLuYPgEirKlHu7u7XdyytGwHAd8jjNyng4OD7vnz51dbPT8/7z58+NB9+/bt6jU/TI+AGWHEnrx48eJ/EsSmHzx40L18+fLyzxF3ZVMjEyDCiEDjMYZZS5wiPXnyZFbJaxMhQIQRGzHvWR7XCyOCXsOmiDAi1HmPMMQjDpbpEiDCiL358eNHurW/5SnWdIBbXiDCiA38/Pnzrce2YyZ4//59F3ePLNMl4PbpiL2J0L979+7yDtHDhw8vtzzvdGnEXdvUigSIsCLAWavHp/+qM0BcXMd/q25n1vF57TYBp0a3mUzilePj4+7k5KSLb6gt6ydAhPUzXnoPR0dHl79WGTNCfBnn1uvSCJdegQhLI1vvCk+fPu2ePXt2tZOYEV6/fn31dz+shwAR1sP1cqvLntbEN9MxA9xcYjsxS1jWR4AIa2Ibzx0tc44fYX/16lV6NDFLXH+YL32jwiACRBiEbf5KcXoTIsQSpzXx4N28Ja4BQoK7rgXiydbHjx/P25TaQAJEGAguWy0+2Q8PD6/Ki4R8EVl+bzBOnZY95fq9rj9zAkTI2SxdidBHqG9+skdw43borCXO/ZcJdraPWdv22uIEiLA4q7nvvCug8WTqzQveOH26fodo7g6uFe/a17W3+nFBAkRYENRdb1vkkz1CH9cPsVy/jrhr27PqMYvENYNlHAIesRiBYwRy0V+8iXP8+/fvX11Mr7L7ECueb/r48eMqm7FuI2BGWDEG8cm+7G3NEOfmdcTQw4h9/55lhm7DekRYKQPZF2ArbXTAyu4kDYB2YxUzwg0gi/41ztHnfQG26HbGel/crVrm7tNY+/1btkOEAZ2M05r4FB7r9GbAIdxaZYrHdOsgJ/wCEQY0J74TmOKnbxxT9n3FgGGWWsVdowHtjt9Nnvf7yQM2aZU/TIAIAxrw6dOnAWtZZcoEnBpNuTuObWMEiLAx1HY0ZQJEmHJ3HNvGCBBhY6jtaMoEiJB0Z29vL6ls58vxPcO8/zfrdo5qvKO+d3Fx8Wu8zf1dW4p/cPzLly/dtv9Ts/EbcvGAHhHyfBIhZ6NSiIBTo0LNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiEC/wGgKKC4YMA4TAAAAABJRU5ErkJggg=='; _this_1.sendFile = _this_1.sendFile.bind(_this_1); _this_1.removeFile = _this_1.removeFile.bind(_this_1); _this_1.handleDrop = _this_1.handleDrop.bind(_this_1); _this_1.handleClick = _this_1.handleClick.bind(_this_1); _this_1.handleClick = _this_1.handleClick.bind(_this_1); _this_1.handleCrop = _this_1.handleCrop.bind(_this_1); _this_1.handleDropRejected = _this_1.handleDropRejected.bind(_this_1); _this_1.cancelCrop = _this_1.cancelCrop.bind(_this_1); _this_1.rotatableCrop = _this_1.rotatableCrop.bind(_this_1); _this_1.handleFrameImageLoaded = _this_1.handleFrameImageLoaded.bind(_this_1); _this_1.startUpload = _this_1.startUpload.bind(_this_1); _this_1.stopUpload = _this_1.stopUpload.bind(_this_1); _this_1.toggleUpload = _this_1.toggleUpload.bind(_this_1); _this_1.tick = _this_1.tick.bind(_this_1); _this_1.onChange = _this_1.onChange.bind(_this_1); _this_1.addFiles = _this_1.addFiles.bind(_this_1); _this_1.handleSelect = _this_1.handleSelect.bind(_this_1); _this_1.handlePaste = _this_1.handlePaste.bind(_this_1); _this_1.syncAutoFill = _this_1.syncAutoFill.bind(_this_1); _this_1.initFiles = _this_1.initFiles.bind(_this_1); _this_1.formatfileAddr = _this_1.formatfileAddr.bind(_this_1); _this_1.updateFiles = _this_1.updateFiles.bind(_this_1); _this_1.previewImage = _this_1.previewImage.bind(_this_1); _this_1.handprogress.bind = _this_1.handprogress.bind(_this_1); _this_1.chunks.bind = _this_1.chunks.bind(_this_1); return _this_1; } LionUpload.formatFileSize = function (size, units) { if (units === void 0) { units = [' B', ' KB', ' M', ' G']; } size = parseInt(size, 10) || 0; while (size > 1024 && units.length > 1) { size /= 1024; units.shift(); } return size.toFixed(2) + units[0]; }; LionUpload.sizeInfo = function (width, height, __) { if (!width) { return __('Image.height', { height: height }); } else if (!height) { return __('Image.width', { width: width }); } return __('Image.size', { width: width, height: height }); }; LionUpload.prototype.componentDidMount = function () { // this.syncAutoFill(); this.updateFiles(); }; LionUpload.prototype.updateFiles = function () { var _this_1 = this; this.initFiles().then(function (files) { _this_1.setState({ files: (_this_1.files = files) }, _this_1.syncAutoFill); }); }; LionUpload.prototype.componentDidUpdate = function (prevProps) { var props = this.props; if (prevProps.value !== props.value && this.emitValue !== props.value) { this.updateFiles(); } if (prevProps.crop !== props.crop) { this.setState({ crop: this.buildCrop(props) }); } }; LionUpload.prototype.componentWillUnmount = function () { this.unmounted = true; }; LionUpload.prototype.getBatchAddrInfo = function (files) { var requests = files.map(function (item) { return (0, axios_1.default)(item.thumbnailAddr); }); return Promise.allSettled(requests); }; LionUpload.prototype.analyzingAddrInfo = function (files, allResponse) { var list = files.concat(); allResponse.map(function (item, index) { if (item.status === 'fulfilled') { var result = item === null || item === void 0 ? void 0 : item.value; if (result.status === 200) { list[index].notNull = true; if (result.data.status) { list[index].errorMsg = result.data.msg; list[index].state = 'error'; } else { // list[index].thumbnailAddr = result.data } } } }); return list.filter(function (item) { return item.notNull; }); }; LionUpload.prototype.initFiles = function () { var _this_1 = this; var _a = this.props, value = _a.value, preAjax = _a.preAjax; var files = []; if (value) { var fileValue = value.value, fileInfo = value.info; if (fileValue && Array.isArray(fileInfo) && fileInfo.length) { var fileValueArr_1 = fileValue.split(','); files = fileInfo.map(function (item, index) { return _this_1.formatfileAddr(Object.assign({ state: 'init', value: fileValueArr_1[index] }, item)); }); } } // files = testdata return new Promise(function (resolve) { if (preAjax && files.length) { _this_1.getBatchAddrInfo(files).then(function (allResponse) { var list = _this_1.analyzingAddrInfo(files, allResponse); resolve(list); }); } else { resolve(files); } }); }; LionUpload.prototype.buildCrop = function (props) { var crop = props.crop; var __ = this.props.translate; if (crop && props.multiple) { props.env && props.env.alert && props.env.alert(__('Image.configError')); return null; } if (crop === true) { crop = {}; } if (crop) { crop = (0, tslib_1.__assign)({ aspectRatio: undefined, guides: true, dragMode: 'move', viewMode: 1, rotatable: true, scalable: true }, crop); } return crop; }; LionUpload.prototype.handleDropRejected = function (rejectedFiles, evt) { if (evt.type !== 'change' && evt.type !== 'drop') { return; } var _a = this.props, multiple = _a.multiple, env = _a.env, accept = _a.accept, __ = _a.translate; var files = rejectedFiles.map(function (fileRejection) { return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, fileRejection.file), { state: 'invalid', id: (0, helper_1.guid)(), name: fileRejection.file.name })); }); env.alert(__('File.invalidType', { files: files.map(function (file) { return "\u300C" + file.name + "\u300D"; }).join(' '), accept: accept })); }; // 开始上传 LionUpload.prototype.startUpload = function (retry) { if (retry === void 0) { retry = false; } if (this.state.uploading) { return; } this.setState({ uploading: true, locked: true, files: (this.files = this.files.map(function (file) { if (retry && file.state === 'error') { file.state = 'pending'; file.progress = 0; } return file; })) }, this.tick); }; LionUpload.prototype.toggleUpload = function () { return this.state.uploading ? this.stopUpload() : this.startUpload(); }; LionUpload.prototype.stopUpload = function () { if (!this.state.uploading) { return; } this.setState({ uploading: false }); }; // 统一处理下,省的后续的组件重复去拼地址 LionUpload.prototype.formatfileAddr = function (fileData) { if (!fileData) return; var obj = JSON.parse(JSON.stringify(fileData)); if (obj.preview) { obj.preview = this.baseURL + obj.preview; } // 非图片格式去本地拿图标 if ((0, utils_1.isImg)(obj.name)) { obj.thumbnailAddr = this.baseURL + (obj.thumbnailAddr || (obj === null || obj === void 0 ? void 0 : obj.url) || (obj === null || obj === void 0 ? void 0 : obj.addr)); // 给个标识,留给样式调整空间,以及调用不同的预览组件 obj.isNotImg = false; } else { obj.thumbnailAddr = (0, utils_1.getMediaIcon)(obj.name); obj.isNotImg = true; } obj.downloadSrc = this.baseURL + ((obj === null || obj === void 0 ? void 0 : obj.url) || (obj === null || obj === void 0 ? void 0 : obj.addr)); return obj; }; LionUpload.prototype.tick = function () { var _this_1 = this; if (this.current || !this.state.uploading) { return; } var env = this.props.env; var __ = this.props.translate; var file = (0, find_1.default)(this.files, function (item) { return item.state === 'pending'; }); if (file) { this.current = file; file.state = 'uploading'; this.setState({ files: (this.files = this.files.concat()) }, function () { return _this_1.sendFile(file, function (error, file, obj) { var files = _this_1.files.concat(); var idx = files.indexOf(file); if (!~idx) { return; } var newFile = file; if (error) { newFile.state = file.state !== 'uploading' ? file.state : 'error'; newFile.error = error; if (!_this_1.props.multiple && newFile.state === 'invalid') { files.splice(idx, 1); _this_1.current = null; return _this_1.setState({ files: (_this_1.files = files), error: error }, _this_1.tick); } env.notify('error', error || __('File.errorRetry')); } else { newFile = _this_1.formatfileAddr((0, tslib_1.__assign)({ name: file.name || _this_1.state.cropFileName, size: file.size }, obj)); } files.splice(idx, 1, newFile); _this_1.current = null; _this_1.setState({ files: (_this_1.files = files) }, _this_1.tick); }, function (progress) { var files = _this_1.files.concat(); var idx = files.indexOf(file); if (!~idx) { return; } // file 是个非 File 对象,先不copy了直接改。 file.progress = progress; _this_1.setState({ files: (_this_1.files = files) }); }); }); } else { this.setState({ uploading: false, locked: false }, function () { _this_1.onChange(!!_this_1.resolve); if (_this_1.resolve) { _this_1.resolve(_this_1.files.some(function (file) { return file.state === 'error'; }) ? __('File.errorRetry') : null); _this_1.resolve = undefined; } }); } }; LionUpload.prototype.removeFile = function (file, index) { var files = this.files.concat(); this.removeFileCanelExecutor(file, true); files.splice(index, 1); var isUploading = this.current === file; if (isUploading) { this.current = null; } this.setState({ files: (this.files = files) }, isUploading ? this.tick : this.onChange); }; LionUpload.prototype.previewImage = function (file, index, e) { var _this_1 = this; e.preventDefault(); if ((0, utils_1.isCon)(file.name)) { shell_1.Shell.hasShell() ? shell_1.Shell.handleExternalUrl({ "externalUrl": file.downloadSrc, "fileName": file.name, "handleType": "open" }) : this.setState({ setvideo: true, structure: { "type": "video", "src": file.downloadSrc, "poster": file.thumbnailAddr, "aspectRatio": "16:9" } }); } else { var onImageEnlarge = this.props.onImageEnlarge; if (onImageEnlarge) { var files = this.files; onImageEnlarge({ // 预览地址 src: file.thumbnailAddr, originalSrc: file.preview || this.errImg, index: index, list: files.map(function (file) { return ({ src: file.thumbnailAddr, originalSrc: file.preview || _this_1.errImg, title: file.name || (0, InputFile_1.getNameFromUrl)(file.value || file.url), isNotImg: file.isNotImg, }); }) }); } } }; LionUpload.prototype.editImage = function (index) { var files = this.files; this.setState({ cropFile: { preview: files[index].preview || files[index].url, name: files[index].name, state: 'init' }, cropFileName: files[index].name }); }; LionUpload.prototype.onChange = function (changeImmediately) { var onChange = this.props.onChange; var newValue = this.files.reduce(function (t, c) { if (c.state == 'uploaded' || c.state == 'init') { t.value += ((t.value ? ',' : '') + c.value); t.info.push({ size: c.size, name: c.name }); } return t; }, { value: "", info: [] }); onChange((this.emitValue = newValue), undefined, changeImmediately); this.syncAutoFill(); }; LionUpload.prototype.syncAutoFill = function () { var _a = this.props, autoFill = _a.autoFill, multiple = _a.multiple, onBulkChange = _a.onBulkChange, data = _a.data; if (!(0, helper_1.isEmpty)(autoFill) && onBulkChange) { var files = this.state.files.filter(function (file) { return ~['uploaded', 'init', 'ready'].indexOf(file.state); }); var toSync_1 = (0, tpl_builtin_1.dataMapping)(autoFill, multiple ? { items: files } : files[0]); Object.keys(toSync_1).forEach(function (key) { if ((0, isPlainObject_1.default)(toSync_1[key]) && (0, isPlainObject_1.default)(data[key])) { toSync_1[key] = (0, merge_1.default)({}, data[key], toSync_1[key]); } }); onBulkChange(toSync_1); } }; LionUpload.prototype.handleSelect = function () { this.dropzone.current && this.dropzone.current.open(); }; LionUpload.prototype.handleRetry = function (index) { var files = this.files.concat(); var file = files[index]; if (file.state !== 'invalid' && file.state !== 'error') { return; } file.state = 'pending'; file.progress = 0; this.setState({ files: files }, this.startUpload); }; LionUpload.prototype.handleDrop = function (files) { var _a = this.props, multiple = _a.multiple, crop = _a.crop; if (crop && !multiple) { var file = files[0]; if (!file.preview || !file.url) { file.preview = window.URL.createObjectURL(file); } return this.setState({ cropFile: file, cropFileName: file.name }); } this.addFiles(files); }; LionUpload.prototype.handlePaste = function (e) { var event = e.nativeEvent; var files = []; var items = event.clipboardData.items; var accept = this.props.accept || '*'; [].slice.call(items).forEach(function (item) { var blob; if (item.kind !== 'file' || !(blob = item.getAsFile()) || !(0, attr_accept_1.default)(blob, accept)) { return; } blob.id = (0, helper_1.guid)(); files.push(blob); }); this.handleDrop(files); }; // 裁剪 LionUpload.prototype.handleCrop = function () { var _this_1 = this; var _a = this.props, cropFormat = _a.cropFormat, cropQuality = _a.cropQuality; this.cropper.getCroppedCanvas().toBlob(function (file) { _this_1.addFiles([file]); _this_1.setState({ cropFile: undefined, locked: false, lockedReason: '' }); }, cropFormat || 'image/png', cropQuality || 1); }; LionUpload.prototype.cancelCrop = function () { this.setState({ cropFile: undefined, cropFileName: undefined, locked: false, lockedReason: '' }, this.onChange); }; LionUpload.prototype.rotatableCrop = function () { this.cropper.rotate(45); }; LionUpload.prototype.addFiles = function (files) { var e_1, _a; return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var _b, pressWidth, _c, multiple, maxLength, maxSize, accept, __, currentFiles, allowed, inputFiles, list, list_1, list_1_1, file, img_1, e_1_1; var _this_1 = this; return (0, tslib_1.__generator)(this, function (_d) { switch (_d.label) { case 0: _b = this.props.pressWidth, pressWidth = _b === void 0 ? 640 : _b; if (!files.length) { return [2 /*return*/]; } _c = this.props, multiple = _c.multiple, maxLength = _c.maxLength, maxSize = _c.maxSize, accept = _c.accept, __ = _c.translate; currentFiles = this.files; if (!multiple && currentFiles.length) { currentFiles = []; } allowed = (multiple ? maxLength ? maxLength : files.length + currentFiles.length : 1) - currentFiles.length; inputFiles = []; list = [].slice.call(files, 0, allowed); _d.label = 1; case 1: _d.trys.push([1, 6, 7, 12]); list_1 = (0, tslib_1.__asyncValues)(list); _d.label = 2; case 2: return [4 /*yield*/, list_1.next()]; case 3: if (!(list_1_1 = _d.sent(), !list_1_1.done)) return [3 /*break*/, 5]; file = list_1_1.value; if (maxSize && file.size > maxSize) { this.props.env.alert(__('File.maxSize', { filename: file.name, actualSize: LionUpload.formatFileSize(file.size), maxSize: LionUpload.formatFileSize(maxSize) })); return [2 /*return*/]; } if (pressWidth && this.props.isImage) { img_1 = new Image(); img_1.src = URL.createObjectURL(file); img_1.onload = function () { return (0, tslib_1.__awaiter)(_this_1, void 0, void 0, function () { var width, upFilez, res; var _this_1 = this; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: width = img_1.width; upFilez = file; if (!(width > pressWidth)) return [3 /*break*/, 2]; return [4 /*yield*/, (0, image_conversion_1.compress)(file, { width: pressWidth, quality: 1 })]; case 1: res = _a.sent(); upFilez = new window.File([res], file.name, { type: file.type }); upFilez.state = 'pending'; upFilez.path = file.path; upFilez.id = (0, helper_1.guid)(); if (!upFilez.preview || !upFilez.url) { upFilez.preview = URL.createObjectURL(upFilez); } inputFiles.push(upFilez); return [3 /*break*/, 3]; case 2: file.state = 'pending'; file.id = (0, helper_1.guid)(); if (!file.preview || !file.url) { file.preview = URL.createObjectURL(file); } inputFiles.push(file); _a.label = 3; case 3: this.setState({ error: undefined, files: (this.files = currentFiles.concat(inputFiles)), locked: true }, function () { var autoUpload = _this_1.props.autoUpload; if (autoUpload) { _this_1.startUpload(); } }); return [2 /*return*/]; } }); }); }; } else { file.state = 'pending'; file.id = (0, helper_1.guid)(); if (!file.preview || !file.url) { file.preview = URL.createObjectURL(file); } inputFiles.push(file); } _d.label = 4; case 4: return [3 /*break*/, 2]; case 5: return [3 /*break*/, 12]; case 6: e_1_1 = _d.sent(); e_1 = { error: e_1_1 }; return [3 /*break*/, 12]; case 7: _d.trys.push([7, , 10, 11]); if (!(list_1_1 && !list_1_1.done && (_a = list_1.return))) return [3 /*break*/, 9]; return [4 /*yield*/, _a.call(list_1)]; case 8: _d.sent(); _d.label = 9; case 9: return [3 /*break*/, 11]; case 10: if (e_1) throw e_1.error; return [7 /*endfinally*/]; case 11: return [7 /*endfinally*/]; case 12: if (!inputFiles.length) { return [2 /*return*/]; } this.setState({ error: undefined, files: (this.files = currentFiles.concat(inputFiles)), locked: true }, function () { var autoUpload = _this_1.props.autoUpload; if (autoUpload) { _this_1.startUpload(); } }); return [2 /*return*/]; } }); }); }; LionUpload.prototype.sendFile = function (file, cb, onProgress) { var _this_1 = this; var _a = this.props, limit = _a.limit, __ = _a.translate; if (!limit) { return this._upload(file, cb, onProgress); } var image = new Image(); image.onload = function () { var width = image.width; var height = image.height; var error = ''; if ((limit.width && limit.width != width) || (limit.height && limit.height != height)) { error = __('Image.sizeNotEqual', { info: LionUpload.sizeInfo(limit.width, limit.height, __) }); } else if ((limit.maxWidth && limit.maxWidth < width) || (limit.maxHeight && limit.maxHeight < height)) { error = __('Image.limitMax', { info: LionUpload.sizeInfo(limit.maxWidth, limit.maxHeight, __) }); } else if ((limit.minWidth && limit.minWidth > width) || (limit.minHeight && limit.minHeight > height)) { error = __('Image.limitMin', { info: LionUpload.sizeInfo(limit.minWidth, limit.minHeight, __) }); } else if (limit.aspectRatio && Math.abs(width / height - limit.aspectRatio) > 0.01) { error = __(limit.aspectRatioLabel || 'Image.limitRatio', { ratio: (+limit.aspectRatio).toFixed(2) }); } if (error) { file.state = 'invalid'; cb(error, file); } else { _this_1._upload(file, cb, onProgress); } }; image.src = (file.preview || file.url); }; // 自lion-input-file迁徙而来的上传方法1 LionUpload.prototype._upload = function (file, cb, onProgress) { var _this_1 = this; var _a = this.props, url = _a.url, receiver = _a.receiver, env = _a.env, name = _a.name, __ = _a.translate; var formData = new FormData(); this.handleFile(file).then(function () { var uploadParams = _this_1.state.uploadParams; formData.append('upload_cmd', 'check_exist'); formData.append('upload_field', String(name)); formData.append('file_name', uploadParams === null || uploadParams === void 0 ? void 0 : uploadParams.file.fileName); formData.append('file_md5', uploadParams === null || uploadParams === void 0 ? void 0 : uploadParams.file.fileMd5); env.fetcher({ url: url || receiver, data: formData, method: 'post', dataType: 'form-data' }).then(function (res) { if ((res === null || res === void 0 ? void 0 : res.status) === 0 && (res === null || res === void 0 ? void 0 : res.data)) { var exist = (res === null || res === void 0 ? void 0 : res.data).exist; switch (exist) { case true: var obj = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, res.data), { state: 'uploaded' }); obj.value = obj.value || obj.url; cb(null, file, obj); break; case false: