captain-ui
Version:
有赞vue wap业务组件库
158 lines (143 loc) • 4.13 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
require("vant/es/icon/style");
var _icon = _interopRequireDefault(require("vant/es/icon"));
require("vant/es/uploader/style");
var _uploader = _interopRequireDefault(require("vant/es/uploader"));
var _default = {
render: function render() {
var _vm = this;
var _h = _vm.$createElement;
var _c = _vm._self._c || _h;
return _c('div', {
staticClass: "cap-img-uploader"
}, [_vm.$slots.header ? [_c('div', {
staticClass: "cap-img-uploader__header"
}, [_c('van-uploader', {
attrs: {
"disabled": !_vm.canUpload,
"before-read": _vm.beforeReadFile,
"after-read": _vm.afterReadFile
}
}, [_vm._t("header")], 2)], 1)] : _vm._e(), _vm.paddingImg || _vm.imgList.length > 0 || _vm.$slots.default ? _c('div', {
staticClass: "cap-img-uploader__imglist"
}, [_vm._l(_vm.imgList, function (imgObj, index) {
return [_c('span', {
key: index,
staticClass: "cap-img-uploader__img-container"
}, [_c('span', {
staticClass: "cap-img-uploader__delete-picture",
on: {
"click": function click($event) {
_vm.deleteImg(index);
}
}
}, [_c('van-icon', {
attrs: {
"name": "clear"
}
})], 1), _c('img', {
attrs: {
"src": imgObj.thumbURL || imgObj.imgURL
}
})])];
}), _vm.paddingImg ? [_c('span', {
staticClass: "cap-img-uploader__img-container cap-img-uploader__img-container--uploading"
}, [_c('img', {
attrs: {
"src": _vm.paddingImg
}
})])] : _vm._e(), _vm.$slots.default ? [_c('van-uploader', {
attrs: {
"disabled": !_vm.canUpload,
"before-read": _vm.beforeReadFile,
"after-read": _vm.afterReadFile
}
}, [_c('span', {
staticClass: "cap-img-uploader__img-container cap-img-uploader__img-container--uploader"
}, [_vm._t("default")], 2)])] : _vm._e()], 2) : _vm._e()], 2);
},
name: 'cap-img-uploader',
components: {
'van-uploader': _uploader.default,
'van-icon': _icon.default
},
props: {
value: [Array, Object],
upload: {
type: Function,
required: true
},
maxLength: {
type: Number,
default: 500 * 1024
},
maxSize: {
type: Number,
default: 6
}
},
data: function data() {
return {
// 正在上传的图片base 64
paddingImg: ''
};
},
computed: {
imgList: function imgList() {
if (this.isMultiple) {
return this.value;
}
return this.value && !this.paddingImg ? [this.value] : [];
},
isMultiple: function isMultiple() {
// 只当当value是一个数组的时候,认为多图
return this.value instanceof Array;
},
canUpload: function canUpload() {
// 判断当前是否允许上传图片
if (this.paddingImg) return false;
if (this.isMultiple) {
return this.imgList.length < this.maxSize;
}
return true;
}
},
methods: {
beforeReadFile: function beforeReadFile(file) {
// 拦截非图片的文件,以及大小限制
return true;
},
afterReadFile: function afterReadFile(file) {
var _this = this;
// 上传文件
this.paddingImg = file.content;
this.upload(file.file).then(function (img) {
_this.uploadedFile(img);
_this.$nextTick(function () {
_this.paddingImg = '';
});
});
},
deleteImg: function deleteImg(index) {
if (this.isMultiple) {
this.value.splice(index, 1);
this.$emit('input', this.value);
} else {
this.$emit('input', null);
}
},
uploadedFile: function uploadedFile(img) {
if (this.isMultiple) {
var copy = this.value.slice(0);
copy.push(img);
this.$emit('input', copy);
} else {
this.$emit('input', img);
}
}
}
};
exports.default = _default;