UNPKG

@fe6/water-pro

Version:

An enterprise-class UI design language and Vue-based implementation

243 lines (201 loc) 8.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _vue = require("vue"); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _tslib = require("tslib"); var _iconsVue = require("@ant-design/icons-vue/lib/icons"); var _upload = require("../../upload"); var _image = _interopRequireDefault(require("../../image")); var _modal = _interopRequireDefault(require("../../modal")); var _tooltip = _interopRequireDefault(require("../../tooltip")); var _useUpload2 = require("../../_util/hooks/use-upload"); var _vueTypes = _interopRequireDefault(require("../../_util/vue-types")); var _useConfigInject2 = _interopRequireDefault(require("../../_util/hooks/useConfigInject")); var _configProvider = require("../../config-provider"); var _propsUtil = require("../../_util/props-util"); var _errorImage = require("../../config-provider/error-image"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var _default2 = (0, _vue.defineComponent)({ name: 'AUploadImage', components: { LoadingOutlined: _iconsVue.LoadingOutlined }, props: { value: _vueTypes.default.string, onFormChange: { type: Function, default: function _default() {} }, mergeOriginDatas: { type: Function, default: undefined }, action: _vueTypes.default.string, accept: _vueTypes.default.string.def(_useUpload2.acceptListString), autoUpload: _vueTypes.default.bool.def(true), headers: _vueTypes.default.object, urlKey: _vueTypes.default.string.def('url'), resultKey: _vueTypes.default.string.def('data'), nameKey: _vueTypes.default.string.def('name'), imageWidth: _vueTypes.default.number.def(100), imageHeight: _vueTypes.default.number.def(100), limitSize: _vueTypes.default.number.def(2), placeholder: _vueTypes.default.string, errorImage: _vueTypes.default.string, disabled: _vueTypes.default.bool, allowUpdate: _vueTypes.default.bool.def(false) }, emits: ['changeUpload', 'change'], setup: function setup(props, params) { var _this = this; var _useConfigInject = (0, _useConfigInject2.default)('upload-image', props), prefixClsNew = _useConfigInject.prefixCls, configProvider = _useConfigInject.configProvider; // TODO [fix] 解决使用的过程中未用 configProvider 报错 var _ref = (0, _vue.inject)('configProvider', _configProvider.defaultConfigProvider) || _configProvider.defaultConfigProvider, errorImageDef = _ref.errorImage; var _useUpload = (0, _useUpload2.useUpload)(props, params, configProvider), loading = _useUpload.loading, beforeUpload = _useUpload.beforeUpload, handleChange = _useUpload.handleChange, imageUrl = _useUpload.imageUrl; (0, _vue.watchEffect)(function () { return (0, _tslib.__awaiter)(_this, void 0, void 0, /*#__PURE__*/_regenerator.default.mark(function _callee() { return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: // NOTE 去掉为空判断,素材中心,通字段再打开图片保留问题 imageUrl.value = props.value; case 1: case "end": return _context.stop(); } } }, _callee); })); }); var beforeUploadFn = function beforeUploadFn(file) { return beforeUpload(file, props.accept.split(',')); }; return { loading: loading, beforeUploadFn: beforeUploadFn, handleChange: handleChange, imageUrl: imageUrl, prefixClsNew: prefixClsNew, errorBackImage: props.errorImage || errorImageDef || _errorImage.errorUploadImage, previewPoseterVisible: (0, _vue.ref)(false), configProvider: configProvider }; }, render: function render() { var _this2 = this; var _a, _b, _c; var imageNode = null; if (this.imageUrl) { imageNode = (0, _vue.createVNode)(_image.default, { "width": this.imageWidth, "height": this.imageHeight, "src": this.imageUrl, "bordered": false, "class": ["".concat(this.prefixClsNew, "-img"), _defineProperty({}, "".concat(this.prefixClsNew, "-img-disabled"), this.disabled)], "preview": false, "fallback": this.errorBackImage }, null); } var placeholderNode = null; if (this.placeholder) { placeholderNode = (0, _vue.createVNode)("p", { "class": "".concat(this.prefixClsNew, "-tip") }, [this.placeholder]); } var loadingNode = [(0, _vue.withDirectives)((0, _vue.createVNode)("div", null, [(0, _vue.createVNode)("p", { "class": "".concat(this.prefixClsNew, "-tip") }, [((_a = this.configProvider.locale) === null || _a === void 0 ? void 0 : _a.UploadImage.placeholder) || '上传']), placeholderNode]), [[_vue.vShow, !this.loading]])]; var placeholderSlotNode = (0, _propsUtil.getSlot)(this, 'placeholder'); if (placeholderSlotNode.length) { loadingNode = placeholderSlotNode; } var nodeHtml = null; if (this.allowUpdate && this.imageUrl) { var handlePoseterPreview = function handlePoseterPreview() { return (0, _tslib.__awaiter)(_this2, void 0, void 0, /*#__PURE__*/_regenerator.default.mark(function _callee2() { return _regenerator.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: this.previewPoseterVisible = true; case 1: case "end": return _context2.stop(); } } }, _callee2, this); })); }; var handlePoseterCancel = function handlePoseterCancel() { _this2.previewPoseterVisible = false; }; var removeOneImage = function removeOneImage() { _this2.imageUrl = ''; _this2.$emit('changeUpload', ''); }; nodeHtml = (0, _vue.createVNode)("div", { "class": "".concat(this.prefixClsNew, "-handle-box") }, [imageNode, (0, _vue.createVNode)("div", { "class": "".concat(this.prefixClsNew, "-handle") }, [(0, _vue.createVNode)(_tooltip.default, { "title": (_b = this.configProvider.locale) === null || _b === void 0 ? void 0 : _b.UploadImage.seePlaceholder }, { default: function _default() { return [(0, _vue.createVNode)(_iconsVue.EyeOutlined, { "class": "".concat(_this2.prefixClsNew, "-handle-icon"), "onClick": handlePoseterPreview }, null)]; } }), (0, _vue.createVNode)(_tooltip.default, { "title": (_c = this.configProvider.locale) === null || _c === void 0 ? void 0 : _c.UploadImage.removePlaceholder }, { default: function _default() { return [(0, _vue.createVNode)(_iconsVue.DeleteOutlined, { "onClick": removeOneImage }, null)]; } })]), (0, _vue.createVNode)(_modal.default, { "visible": this.previewPoseterVisible, "footer": null, "onCancel": handlePoseterCancel }, { default: function _default() { return [(0, _vue.createVNode)("img", { "style": "width: 100%", "src": _this2.imageUrl }, null)]; } })]); } else { nodeHtml = (0, _vue.createVNode)(_upload.Upload, { "accept": this.accept, "class": this.prefixClsNew, "show-upload-list": false, "action": this.autoUpload ? this.action : '', "headers": this.headers, "disabled": this.disabled, "before-upload": this.beforeUploadFn, "onChange": this.handleChange }, { default: function _default() { return [(0, _vue.withDirectives)((0, _vue.createVNode)("div", { "class": "".concat(_this2.prefixClsNew, "-btn") }, [(0, _vue.withDirectives)((0, _vue.createVNode)(_iconsVue.LoadingOutlined, null, null), [[_vue.vShow, _this2.loading]]), loadingNode]), [[_vue.vShow, !_this2.imageUrl]]), imageNode]; } }); } return nodeHtml; } }); exports.default = _default2;