UNPKG

betanet-mini-ui

Version:
225 lines (193 loc) 8.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _classnames = _interopRequireDefault(require("classnames")); var _react = _interopRequireDefault(require("react")); var _components = require("@tarojs/components"); var _taro = _interopRequireDefault(require("@tarojs/taro")); var _index = _interopRequireDefault(require("../../index")); var _tool = require("../../utils/tool"); // 生成 jsx 二维矩阵 var generateMatrix = function generateMatrix(files, col, showAddBtn) { var matrix = []; var length = showAddBtn ? files.length + 1 : files.length; var row = Math.ceil(length / col); for (var i = 0; i < row; i++) { if (i === row - 1) { // 最后一行数据加上添加按钮 var lastArr = files.slice(i * col); if (lastArr.length < col) { if (showAddBtn) { lastArr.push({ type: 'btn', uuid: (0, _tool.uuid)() }); } // 填补剩下的空列 for (var j = lastArr.length; j < col; j++) { lastArr.push({ type: 'blank', uuid: (0, _tool.uuid)() }); } } matrix.push(lastArr); } else { matrix.push(files.slice(i * col, (i + 1) * col)); } } return matrix; }; var PicturePicker = function PicturePicker(props) { var _props$className = props.className, className = _props$className === void 0 ? '' : _props$className, _props$customStyle = props.customStyle, customStyle = _props$customStyle === void 0 ? '' : _props$customStyle, _props$value = props.value, value = _props$value === void 0 ? [] : _props$value, _props$max = props.max, max = _props$max === void 0 ? 99 : _props$max, _props$mode = props.mode, mode = _props$mode === void 0 ? 'aspectFill' : _props$mode, _props$length = props.length, length = _props$length === void 0 ? 4 : _props$length, _props$showAddBtn = props.showAddBtn, showAddBtn = _props$showAddBtn === void 0 ? true : _props$showAddBtn, _props$onChange = props.onChange, onChange = _props$onChange === void 0 ? function () {} : _props$onChange, _props$onImageClick = props.onImageClick, onImageClick = _props$onImageClick === void 0 ? function () {} : _props$onImageClick, _props$onFail = props.onFail, onFail = _props$onFail === void 0 ? function () {} : _props$onFail, _props$editable = props.editable, editable = _props$editable === void 0 ? true : _props$editable; var handleRemoveImg = function handleRemoveImg(idx, event) { event.stopPropagation(); event.preventDefault(); if (_index.default.ENV === _taro.default.ENV_TYPE.WEB) { window.URL.revokeObjectURL(value[idx].url); } var rFiles = []; var dFiles = []; value.forEach(function (v, i) { if (i !== idx) { rFiles.push(v); } else { dFiles.push(v); } }); onChange(rFiles, 'remove', dFiles, idx); }; var handleImageClick = function handleImageClick(idx, item) { _index.default.previewImage({ current: item.url, urls: value.map(function (item) { return item.url; }) }); onImageClick && onImageClick(idx, value[idx]); }; var analysisFiles = function analysisFiles(flle) { switch (_index.default.ENV) { case 'dd': return { path: flle === null || flle === void 0 ? void 0 : flle.path, size: flle === null || flle === void 0 ? void 0 : flle.size, type: flle === null || flle === void 0 ? void 0 : flle.fileType, name: _index.default.uuid() + '.' + (flle === null || flle === void 0 ? void 0 : flle.fileType) }; default: var path = (flle === null || flle === void 0 ? void 0 : flle.path) || ''; var suffix = path === null || path === void 0 ? void 0 : path.slice(path === null || path === void 0 ? void 0 : path.lastIndexOf('.')); var filename = _index.default.uuid() + suffix; return { path: path, size: flle === null || flle === void 0 ? void 0 : flle.size, type: suffix.slice(1), name: filename }; } }; var chooseFile = function chooseFile() { var multiple = props.multiple, sizeType = props.sizeType, sourceType = props.sourceType; var filePathName = _index.default.ENV === 'dd' ? 'files' : 'tempFiles'; var params = {}; if (multiple) { params.count = max ? max - (value === null || value === void 0 ? void 0 : value.length) : 99; } else { params.count = 1; } if (sizeType) { params.sizeType = sizeType; } if (sourceType) { params.sourceType = sourceType; } _index.default.chooseImage(params).then(function (res) { var targetFiles = res.tempFilePaths.map(function (path, i) { return { url: path, file: analysisFiles(res[filePathName][i]) }; }); var newFiles = value.concat(targetFiles); onChange(newFiles, 'add', targetFiles); }).catch(onFail); }; var rowLength = length <= 0 ? 1 : length; // 行数 var matrix = generateMatrix(value, rowLength, showAddBtn); var rootCls = (0, _classnames.default)('bm-image-picker', className); return /*#__PURE__*/_react.default.createElement(_components.View, { className: rootCls, style: customStyle }, matrix.map(function (row, i) { return /*#__PURE__*/_react.default.createElement(_components.View, { className: "bm-image-picker__flex-box", key: i + 1 }, row.map(function (item, j) { var _item$file, _item$file2, _item$file3; var errorCls = ((_item$file = item.file) === null || _item$file === void 0 ? void 0 : _item$file.status) === 'error' ? 'bm-image-picker__item-error' : ''; return item.url ? /*#__PURE__*/_react.default.createElement(_components.View, { className: "bm-image-picker__flex-item", key: i * length + j }, /*#__PURE__*/_react.default.createElement(_components.View, { className: (0, _classnames.default)('bm-image-picker__item', errorCls) }, editable && /*#__PURE__*/_react.default.createElement(_components.View, { className: "bm-image-picker__remove-btn", onClick: function onClick(e) { return handleRemoveImg(i * length + j, e); } }), /*#__PURE__*/_react.default.createElement(_components.Image, { className: "bm-image-picker__preview-img", mode: mode, src: ((_item$file2 = item.file) === null || _item$file2 === void 0 ? void 0 : _item$file2.path) || item.url, onClick: function onClick(e) { return handleImageClick(i * length + j, item); } })), ((_item$file3 = item.file) === null || _item$file3 === void 0 ? void 0 : _item$file3.status) === 'uploading' && /*#__PURE__*/_react.default.createElement(_components.View, { className: "loading-con" }, /*#__PURE__*/_react.default.createElement(_components.View, { className: "loading-mask" }), /*#__PURE__*/_react.default.createElement(_components.Image, { className: "loading-animation", src: require('../../assets/images/loading.svg') }))) : /*#__PURE__*/_react.default.createElement(_components.View, { className: "bm-image-picker__flex-item", key: 'empty_' + i * length + j }, editable && item.type === 'btn' && max > (value === null || value === void 0 ? void 0 : value.length) && /*#__PURE__*/_react.default.createElement(_components.View, { className: "bm-image-picker__item bm-image-picker__choose-btn", onClick: chooseFile }, /*#__PURE__*/_react.default.createElement(_components.View, { className: "add-bar" }), /*#__PURE__*/_react.default.createElement(_components.View, { className: "add-bar" }))); })); })); }; var _default = PicturePicker; exports.default = _default;