UNPKG

qm-bus

Version:

千米公有云业务组件库

432 lines (363 loc) 15.1 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = undefined; var _modal = require('antd/lib/modal'); var _modal2 = _interopRequireDefault(_modal); var _upload = require('antd/lib/upload'); var _upload2 = _interopRequireDefault(_upload); var _icon = require('antd/lib/icon'); var _icon2 = _interopRequireDefault(_icon); var _QMImg2 = require('qm-ui/lib/QMImg'); var _QMImg3 = _interopRequireDefault(_QMImg2); var _button = require('antd/lib/button'); var _button2 = _interopRequireDefault(_button); var _input = require('antd/lib/input'); var _input2 = _interopRequireDefault(_input); var _QMConst2 = require('qm-ux/lib/QMConst'); var _QMConst3 = _interopRequireDefault(_QMConst2); var _message2 = require('antd/lib/message'); var _message3 = _interopRequireDefault(_message2); var _form = require('antd/lib/form'); var _form2 = _interopRequireDefault(_form); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _class, _class2, _temp; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _objectAssign = require('object-assign'); var _objectAssign2 = _interopRequireDefault(_objectAssign); var _iflux = require('iflux2'); var _webapi = require('../webapi'); var _ql = require('../ql'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var noop = function noop() { return undefined; }; var FormItem = _form2.default.Item; var Uploader = (0, _iflux.Relax)(_class = (_temp = _class2 = function (_Component) { _inherits(Uploader, _Component); function Uploader(props) { _classCallCheck(this, Uploader); var _this2 = _possibleConstructorReturn(this, (Uploader.__proto__ || Object.getPrototypeOf(Uploader)).call(this, props)); _this2._onPull = function () { var _this = _this2; _this2.setState({ loading: true }); var url = _this2.props.linkAddress; if (url) { (0, _webapi.checkUrl)(encodeURIComponent(url), _this2.props.scope).then(function (res) { setTimeout(function () { _this.setState({ loading: false }); if (res.err) { _message3.default.error(res.err.message); } else { _this.props.addNetImage(res.data); _this.props.setLinkAddress(''); } }, 500); }); } else { _this.setState({ loading: false }); _message3.default.error('请输入图片地址'); } }; _this2._onNetImageDel = function (v) { return _this2.props.removeNetImage(v); }; _this2._onImageDel = function (file) { return _this2.props.removeImage(file.hash); }; _this2._onPreview = function (file) { if (file.response) { _this2.setState({ preview: true, previewImage: file.response.data[0].url }); } else { _this2.setState({ preview: true, previewImage: file.url }); } }; _this2._onPreviewCancel = function () { _this2.setState({ preview: false }); }; _this2._onChange = function (_ref) { var file = _ref.file, fileList = _ref.fileList; if (file.response && file.response.success && file.status == 'done') { var url = file.response.data[0].url; if (fileList.filter(function (i) { return i.hash == url && i.response; }).length > 0) { _message3.default.warning('图片已经上传过了!'); fileList.splice(fileList.indexOf(file), 1); } else { file.hash = url; file.url = url + '@100w_100h'; file.thumbUrl = url + '@100w_100h'; _this2.props.addImage(file.response.data[0]); } } else if (file.response && file.status == 'done') { var _index = fileList.findIndex(function (f) { return f.uid == file.uid; }); fileList.splice(_index, 1); if (file.response.message) { _message3.default.error(file.response.message); } else { _message3.default.error('图片上传失败了!'); } } _this2.setState({ files: fileList }); }; _this2.onValidBeforeUpload = function (file, files) { var _this2$props = _this2.props, limit = _this2$props.limit, rule = _this2$props.rule; var size = rule.size, filetype = rule.filetype, pic_limit = rule.limit; limit = pic_limit || limit; var index = files.indexOf(file); var name = file.name.toLowerCase(); try { // 1.数量校验 if (_this2.state.files.length + index > limit - 1) { _this2.errorSet.add('limit'); throw new Error(limit); } // 2.文件类型校验 if (!(new RegExp(filetype.split(',').join('|')).test(name) || /^image/gi.test(file.type))) { _this2.errorSet.add('type'); throw new Error(limit); } // 3.文件大小校验 if (file.size > 1024 * 1024 * size) { _this2.errorSet.add('size'); throw new Error(limit); } return true; } catch (e) { return false; } finally { if (index === files.length - 1) { var i = 0; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = _this2.errorSet[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var s = _step.value; _message3.default.config({ top: 20 + 40 * i++, duration: 5 }); _message3.default.error(_this2.errorMsg[s]({ limit: limit, filetype: filetype, size: size })); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } _this2.errorSet.clear(); } } }; _this2._onLinkAddressChange = function (e) { return _this2.props.setLinkAddress(e.target.value); }; _this2.errorSet = new Set(); _this2.errorMsg = { limit: function limit(_ref2) { var _limit = _ref2.limit; return '\u56FE\u7247\u6587\u4EF6\u6700\u591A\u53EA\u80FD\u4E0A\u4F20 ' + _limit + '\u5F20\uFF01'; }, type: function type(_ref3) { var filetype = _ref3.filetype; return '\u56FE\u7247\u6587\u4EF6\u683C\u5F0F\u4EC5\u652F\u6301\uFF1A' + filetype + '\uFF01'; }, size: function size(_ref4) { var _size = _ref4.size; return '\u56FE\u7247\u6587\u4EF6\u5927\u5C0F\u4E0D\u5F97\u8D85\u8FC7 ' + _size + 'MB\uFF01'; } }; _this2.state = { loading: false, preview: false, previewImage: '', files: [] }; return _this2; } _createClass(Uploader, [{ key: 'componentWillReceiveProps', value: function componentWillReceiveProps(nextProps) { if (nextProps.images.size == 0) { this.setState({ files: [] }); } } // 网络图片的删除 // 图片删除 /** * 上传前校验 */ }, { key: 'render', value: function render() { var _this3 = this; var _props = this.props, formLayout = _props.formLayout, limit = _props.limit, rule = _props.rule; var msg = rule.msg, size = rule.size, filetype = rule.filetype, pic_limit = rule.limit; limit = pic_limit || limit; if (msg && typeof msg === 'function') { msg = msg({ limit: limit, filetype: filetype, size: size }); } var _QMConst$get = _QMConst3.default.get('project'), Platform = _QMConst$get.Platform, SystemId = _QMConst$get.SystemId; var headers = { Platform: Platform, systemId: SystemId }; var url = this.props.scope === 'personal' ? '/api/upload/user/image' : '/api/upload/image'; return _react2.default.createElement( _form2.default, null, _react2.default.createElement( FormItem, _extends({}, formLayout, { label: '\u7F51\u7EDC\u56FE\u7247' }), _react2.default.createElement(_input2.default, { ref: 'picture-link', type: 'text', value: this.props.linkAddress, placeholder: '\u8BF7\u8F93\u5165\u56FE\u7247\u94FE\u63A5\u5730\u5740', disabled: this.props.netImages.length >= 5, onChange: this._onLinkAddressChange }), _react2.default.createElement( _button2.default, { className: 'pushl', size: 'large', loading: !!this.state.loading, disabled: this.props.netImages.size >= 5, onClick: this._onPull }, '\u63D0\u53D6' ), _react2.default.createElement( 'div', { className: 'network-img-preview' }, _react2.default.createElement( 'div', { className: 'ant-upload-list ant-upload-list-picture-card' }, this.props.netImages.map(function (i, v) { return _react2.default.createElement( 'div', { key: v + '_' + i.url, className: 'ant-upload-list-item ant-upload-list-item-done' }, _react2.default.createElement( 'div', { className: 'ant-upload-list-item-info' }, _react2.default.createElement( 'a', { className: 'ant-upload-list-item-thumbnail', href: _QMImg3.default.src({ src: i.url }), target: '_blank' }, _react2.default.createElement('img', { src: _QMImg3.default.src({ src: i.url }), alt: i.name, title: i.name }) ), _react2.default.createElement( 'span', null, _react2.default.createElement(_icon2.default, { type: 'eye-o', onClick: _this3._onPreview.bind(_this3, i) }), _react2.default.createElement(_icon2.default, { title: 'Remove file', type: 'delete', onClick: _this3._onNetImageDel.bind(_this3, v) }) ) ) ); }) ) ) ), _react2.default.createElement( FormItem, _extends({}, formLayout, { label: '\u672C\u5730\u56FE\u7247', help: _react2.default.createElement('span', { dangerouslySetInnerHTML: { __html: msg } }) }), _react2.default.createElement( 'div', { className: 'local-img-preview clearfix' }, _react2.default.createElement( _upload2.default, { action: _QMConst3.default.HOST['v_upload_api'] + url, headers: headers, multiple: true, onPreview: this._onPreview, fileList: this.state.files.map(function (i) { return (0, _objectAssign2.default)({}, i, { url: _QMImg3.default.src({ src: i.url }) }); }), onChange: this._onChange, listType: 'picture-card', beforeUpload: this.onValidBeforeUpload, withCredentials: true, onRemove: this._onImageDel }, this.state.files.length < limit ? _react2.default.createElement( 'div', null, _react2.default.createElement(_icon2.default, { type: 'plus' }) ) : null ) ), _react2.default.createElement( _modal2.default, { visible: this.state.preview, footer: null, onCancel: this._onPreviewCancel }, _react2.default.createElement(_QMImg3.default, { alt: 'PREVIEW', style: { width: '100%' }, src: this.state.previewImage }) ) ) ); } }]); return Uploader; }(_react.Component), _class2.defaultProps = { limit: 10, rule: { limit: 10, // 图片数量限制 size: 2, // 文件大小限制 filetype: 'jpeg,jpg,gif,png', // 支持的文件类型 msg: function msg(_ref5) { var limit = _ref5.limit, size = _ref5.size, filetype = _ref5.filetype; return '\u56FE\u7247\u683C\u5F0F\u4EC5\u652F\u6301\uFF1A' + filetype + '\uFF0C\u4E14\u4E00\u6B21\u6700\u591A\u4E0A\u4F20 ' + limit + '\u5F20\uFF0C\u6BCF\u5F20\u4E0D\u80FD\u8D85\u8FC7 ' + size + 'MB\uFF01'; } }, addNetImage: noop, removeNetImage: noop, addImage: noop, removeImage: noop, netImages: _ql.netImagesQL, images: _ql.imagesQL, linkAddress: _ql.linkAddressQL, setLinkAddress: noop, scope: _ql.scopeQL }, _temp)) || _class; exports.default = Uploader;