fastlion-amis
Version:
一种MIS页面生成工具
964 lines (963 loc) • 86 kB
JavaScript
"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,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';
_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: