oak-general-business/lib/components/extraFile/gallery/index.js

524 lines
25 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var assert_1 = tslib_1.__importDefault(require("assert"));
var types_1 = require("oak-domain/lib/types");
var mockId_1 = require("oak-frontend-base/lib/utils/mockId");
var index_1 = tslib_1.__importDefault(require("../../../utils/dialog/index"));
var extraFile_1 = require("../../../utils/extraFile");
exports.default = OakComponent({
entity: 'extraFile',
isList: true,
formData: function (_a) {
var _b, _c;
var originalFiles = _a.data, features = _a.features;
return tslib_1.__awaiter(this, void 0, void 0, function () {
var application, number2, files;
var _this = this;
return tslib_1.__generator(this, function (_d) {
switch (_d.label) {
case 0: return [4 /*yield*/, features.application.getApplication()];
case 1:
application = _d.sent();
number2 = this.props.maxNumber;
files = originalFiles;
if (this.props.tag1) {
files = files === null || files === void 0 ? void 0 : files.filter(function (ele) { return (ele === null || ele === void 0 ? void 0 : ele.tag1) === _this.props.tag1; });
}
if (this.props.tag2) {
files = files === null || files === void 0 ? void 0 : files.filter(function (ele) { return (ele === null || ele === void 0 ? void 0 : ele.tag2) === _this.props.tag2; });
}
if (typeof number2 === 'number' &&
(number2 === 0 || (files === null || files === void 0 ? void 0 : files.length) >= number2)) {
return [2 /*return*/, {
files: files,
disableInsert: true,
systemConfig: (_b = application === null || application === void 0 ? void 0 : application.system) === null || _b === void 0 ? void 0 : _b.config,
originalFiles: originalFiles,
}];
}
return [2 /*return*/, {
files: files,
disableInsert: false,
systemConfig: (_c = application === null || application === void 0 ? void 0 : application.system) === null || _c === void 0 ? void 0 : _c.config,
originalFiles: originalFiles,
}];
}
});
});
},
data: {
selected: -1,
// 根据 size 不同,计算的图片显示大小不同
itemSizePercentage: '',
newUploadFiles: [],
},
externalClasses: ['l-class', 'l-item-class'],
properties: {
oakFullpath: String,
oakParent: String,
oakPath: String,
autoUpload: {
type: Boolean,
value: false,
},
maxNumber: {
type: Number,
value: 20,
},
selectCount: {
//小程序独有 文件一次选择几个
type: Number,
value: 1,
},
sourceType: {
type: Array,
value: ['album', 'camera'],
},
mediaType: {
//小程序独有 文件上传类型
type: Array,
value: ['image'],
},
accept: {
// web独有 文件上传类型
type: String,
value: 'image/*',
},
// 图片显示模式
mode: {
type: String,
value: 'aspectFit',
},
// 图片是否可预览
preview: {
type: Boolean,
value: true,
},
// 每行可显示的个数
size: {
type: Number,
value: 3,
},
// 图片是否可删除
disableDelete: {
type: Boolean,
value: false,
},
type: String,
origin: String,
tag1: String,
tag2: String,
entity: String,
entityId: String,
},
methods: {
/**
* 获取组件内部节点位置信息(单个)
* @param component 组件实例
* @param selector {String} css选择器
* @returns boundingClientRect() 回调函数的值
*/
getNodeRectFromComponent: function (component, selector) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, new Promise(function (resolve) {
component
.createSelectorQuery()
.select(selector)
.boundingClientRect(function (res) {
resolve(res);
})
.exec();
})];
case 1: return [2 /*return*/, _a.sent()];
}
});
});
},
/**
// * px 转 rpx
// * @param px 像素值
// */
px2rpx: function (px) {
var windowWidth = wx.getSystemInfoSync().windowWidth;
return (750 / windowWidth) * px;
},
onPick: function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a, selectCount, mediaType, sourceType, _b, errMsg, tempFiles, err_1;
var _this = this;
return tslib_1.__generator(this, function (_c) {
switch (_c.label) {
case 0:
_a = this.props, selectCount = _a.selectCount, mediaType = _a.mediaType, sourceType = _a.sourceType;
_c.label = 1;
case 1:
_c.trys.push([1, 6, , 7]);
return [4 /*yield*/, wx.chooseMedia({
count: selectCount,
mediaType: mediaType,
sourceType: sourceType,
})];
case 2:
_b = _c.sent(), errMsg = _b.errMsg, tempFiles = _b.tempFiles;
if (!(errMsg !== 'chooseMedia:ok')) return [3 /*break*/, 3];
this.triggerEvent('error', {
level: 'warning',
msg: errMsg,
});
return [3 /*break*/, 5];
case 3: return [4 /*yield*/, Promise.all(tempFiles.map(function (tempExtraFile) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var tempFilePath, thumbTempFilePath, fileType, size, filePath, fileFullName;
return tslib_1.__generator(this, function (_a) {
tempFilePath = tempExtraFile.tempFilePath, thumbTempFilePath = tempExtraFile.thumbTempFilePath, fileType = tempExtraFile.fileType, size = tempExtraFile.size;
filePath = tempFilePath || thumbTempFilePath;
fileFullName = filePath.match(/[^/]+(?!.*\/)/g)[0];
this.pushExtraFile({
name: fileFullName,
fileType: fileType,
size: size,
extra1: filePath,
});
return [2 /*return*/];
});
}); }))];
case 4:
_c.sent();
_c.label = 5;
case 5: return [3 /*break*/, 7];
case 6:
err_1 = _c.sent();
console.error(err_1);
if (err_1.errMsg !== 'chooseMedia:fail cancel') {
this.triggerEvent('error', {
level: 'error',
msg: err_1.errMsg,
});
}
return [3 /*break*/, 7];
case 7: return [2 /*return*/];
}
});
});
},
onWebPick: function (uploadFiles, callback) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, Promise.all(uploadFiles.map(function (uploadFile) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var name, fileType, size, raw;
return tslib_1.__generator(this, function (_a) {
name = uploadFile.name, fileType = uploadFile.type, size = uploadFile.size, raw = uploadFile.raw;
this.pushExtraFile({
name: name,
fileType: fileType,
size: size,
extra1: raw,
}, callback);
return [2 /*return*/];
});
}); }))];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
},
pushExtraFile: function (options, callback) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a, type, origin, tag1, tag2, entity, entityId, autoUpload, name, extra1, fileType, size, extension, filename, updateData, bucket, _b, _c, _d, ele, error_1, err_2, ele;
var _e, _f;
var _this = this;
return tslib_1.__generator(this, function (_g) {
switch (_g.label) {
case 0:
_a = this.props, type = _a.type, origin = _a.origin, tag1 = _a.tag1, tag2 = _a.tag2, entity = _a.entity, entityId = _a.entityId, autoUpload = _a.autoUpload;
name = options.name, extra1 = options.extra1, fileType = options.fileType, size = options.size;
extension = name.substring(name.lastIndexOf('.') + 1);
filename = name.substring(0, name.lastIndexOf('.'));
(0, assert_1.default)(entity, '必须传入entity');
(0, assert_1.default)(origin === 'qiniu', '目前只支持七牛上传'); // 目前只支持七牛上传
_e = {
extra1: extra1,
origin: origin,
type: type || 'file',
tag1: tag1,
tag2: tag2
};
return [4 /*yield*/, generateNewId()];
case 1:
updateData = (_e.objectId = _g.sent(),
_e.entity = entity,
_e.filename = filename,
_e.size = size,
_e.extension = extension,
_e.fileType = fileType,
_e);
if (!autoUpload) return [3 /*break*/, 11];
_g.label = 2;
case 2:
_g.trys.push([2, 9, , 10]);
if (callback) {
callback(updateData, 'uploading');
}
return [4 /*yield*/, this.features.extraFile.upload(updateData)];
case 3:
bucket = (_g.sent()).bucket;
_g.label = 4;
case 4:
_g.trys.push([4, 7, , 8]);
_c = (_b = Object).assign;
_d = [updateData];
_f = {
bucket: bucket,
extra1: null
};
return [4 /*yield*/, generateNewId()];
case 5:
_c.apply(_b, _d.concat([(_f.id = _g.sent(),
_f.entityId = entityId,
_f)]));
return [4 /*yield*/, this.addExtraFile(updateData)];
case 6:
_g.sent();
if (callback) {
callback(updateData, 'success');
}
ele = {
updateData: updateData,
};
this.pushNode(undefined, ele);
return [3 /*break*/, 8];
case 7:
error_1 = _g.sent();
if (callback) {
callback(updateData, 'failed');
}
return [3 /*break*/, 8];
case 8: return [3 /*break*/, 10];
case 9:
err_2 = _g.sent();
if (callback) {
callback(updateData, 'failed');
}
return [3 /*break*/, 10];
case 10: return [3 /*break*/, 12];
case 11:
ele = {
updateData: updateData,
beforeExecute: function (updateData) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var bucket;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.features.extraFile.upload(updateData)];
case 1:
bucket = (_a.sent()).bucket;
Object.assign(updateData, {
bucket: bucket,
extra1: null,
});
return [2 /*return*/];
}
});
}); },
};
this.pushNode(undefined, ele);
_g.label = 12;
case 12: return [2 /*return*/];
}
});
});
},
onItemTapped: function (event) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a, files, systemConfig, index, imageUrl, urls, detail, result;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = this.state, files = _a.files, systemConfig = _a.systemConfig;
index = event.currentTarget.dataset.index;
imageUrl = (0, extraFile_1.composeFileUrl)(files[index], systemConfig);
urls = files === null || files === void 0 ? void 0 : files.filter(function (ele) { return !!ele; }).map(function (ele) { return (0, extraFile_1.composeFileUrl)(ele, systemConfig); });
detail = {
all: files,
index: index,
urls: urls,
current: imageUrl,
};
this.triggerEvent('tap', detail);
if (!this.props.preview) return [3 /*break*/, 2];
return [4 /*yield*/, wx.previewImage({
urls: urls,
current: imageUrl,
})];
case 1:
result = _b.sent();
this.triggerEvent('preview', detail);
_b.label = 2;
case 2: return [2 /*return*/];
}
});
});
},
onDelete: function (event) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var originalFiles, _a, value, index, id, findIndex, result, confirm_1;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
originalFiles = this.state.originalFiles;
_a = event.currentTarget.dataset, value = _a.value, index = _a.index;
id = value.id;
findIndex = originalFiles === null || originalFiles === void 0 ? void 0 : originalFiles.findIndex(function (ele) { return (ele === null || ele === void 0 ? void 0 : ele.id) === id; });
if (!(0, mockId_1.isMockId)(id)) return [3 /*break*/, 1];
this.removeNode('', "".concat(findIndex));
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, wx.showModal({
title: '确认删除吗',
content: '删除现有文件',
})];
case 2:
result = _b.sent();
confirm_1 = result.confirm;
if (confirm_1) {
this.removeNode('', "".concat(findIndex));
}
_b.label = 3;
case 3: return [2 /*return*/];
}
});
});
},
onWebDelete: function (value) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var originalFiles, id, findIndex, confirm_2;
var _this = this;
return tslib_1.__generator(this, function (_a) {
originalFiles = this.state.originalFiles;
id = value.id;
findIndex = originalFiles === null || originalFiles === void 0 ? void 0 : originalFiles.findIndex(function (ele) { return (ele === null || ele === void 0 ? void 0 : ele.id) === id; });
if ((0, mockId_1.isMockId)(id)) {
this.removeNode('', "".concat(findIndex));
}
else {
confirm_2 = index_1.default.confirm({
header: '确认删除当前文件?',
body: '删除后,文件不可恢复',
title: '确认删除当前文件?',
content: '删除后,文件不可恢复',
cancelBtn: '取消',
confirmBtn: '确定',
onConfirm: function () {
_this.removeNode('', "".concat(findIndex));
confirm_2.hide();
},
onCancel: function () {
confirm_2.hide();
},
onClose: function () {
confirm_2.hide();
},
});
}
return [2 /*return*/];
});
});
},
addExtraFile: function (extraFile) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var result, _a, _b, _c, error_2;
var _d;
return tslib_1.__generator(this, function (_e) {
switch (_e.label) {
case 0:
_e.trys.push([0, 3, , 4]);
_b = (_a = this.features.cache).operate;
_c = ['extraFile'];
_d = {
action: 'create',
data: extraFile
};
return [4 /*yield*/, generateNewId()];
case 1: return [4 /*yield*/, _b.apply(_a, _c.concat([(_d.id = _e.sent(),
_d)]))];
case 2:
result = _e.sent();
return [2 /*return*/, result];
case 3:
error_2 = _e.sent();
if (error_2.constructor.name ===
types_1.OakUnloggedInException.name) {
this.navigateTo({
url: '/login',
}, undefined);
return [2 /*return*/];
}
throw error_2;
case 4: return [2 /*return*/];
}
});
});
},
setNewUploadFiles: function (file, status) {
var filename = file.filename, size = file.size, id = file.id;
var newUploadFiles = this.state.newUploadFiles;
var file2 = newUploadFiles.find(function (ele) { return (ele.filename = filename && ele.size === size); });
Object.assign(file2, {
status: status,
id: id,
});
this.setState({
newUploadFiles: newUploadFiles,
});
},
customDelete: function (index) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var newUploadFiles, arr;
return tslib_1.__generator(this, function (_a) {
newUploadFiles = this.state.newUploadFiles;
arr = tslib_1.__spreadArray([], tslib_1.__read(newUploadFiles), false);
arr.splice(index, 1);
this.setState({
newUploadFiles: arr,
});
return [2 /*return*/];
});
});
},
},
observers: {
maxNumber: function () {
this.reRender();
},
/**
* size 属性变化时,重新调整图片大小
* @param size 新值
*/
size: function (size) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var res, widthRpx, itemSizePercentage;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!size) {
this.setState({ itemSizePercentage: '' });
return [2 /*return*/];
}
return [4 /*yield*/, this.getNodeRectFromComponent(this, '.file-list__container')];
case 1:
res = _a.sent();
widthRpx = this.px2rpx(res.right - res.left);
itemSizePercentage = (10 / size) * 10 - (20 / widthRpx) * 100 + '%;';
this.setState({ itemSizePercentage: itemSizePercentage });
return [2 /*return*/];
}
});
});
},
},
});