element-nice-ui
Version:
A Component Library for Vue.js.
1,261 lines (1,174 loc) • 37.3 kB
JavaScript
module.exports =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "/dist/";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 184);
/******/ })
/************************************************************************/
/******/ ({
/***/ 128:
/***/ (function(module, exports) {
module.exports = require("element-nice-ui/lib/progress");
/***/ }),
/***/ 184:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);
// EXTERNAL MODULE: external "@vue/babel-helper-vue-jsx-merge-props"
var babel_helper_vue_jsx_merge_props_ = __webpack_require__(30);
var babel_helper_vue_jsx_merge_props_default = /*#__PURE__*/__webpack_require__.n(babel_helper_vue_jsx_merge_props_);
// CONCATENATED MODULE: ./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.18_css-loader@5.2.7_webpack@4.47.0__lodash@4.1_bb9a19950a80e648dc95ba33c71fa343/node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.18_css-loader@5.2.7_webpack@4.47.0__lodash@4.1_bb9a19950a80e648dc95ba33c71fa343/node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload-list.vue?vue&type=template&id=72f61f0f
var render = function render() {
var _vm = this,
_c = _vm._self._c
return _c(
"transition-group",
{
class: [
"el-upload-list",
"el-upload-list--" + _vm.listType,
{ "is-disabled": _vm.disabled },
],
attrs: { tag: "ul", name: "el-list" },
},
_vm._l(_vm.files, function (file) {
return _c(
"li",
{
key: file.uid,
class: [
"el-upload-list__item",
"is-" + file.status,
_vm.focusing ? "focusing" : "",
],
attrs: { tabindex: "0" },
on: {
keydown: function ($event) {
if (
!$event.type.indexOf("key") &&
_vm._k($event.keyCode, "delete", [8, 46], $event.key, [
"Backspace",
"Delete",
"Del",
])
)
return null
!_vm.disabled && _vm.$emit("remove", file)
},
focus: function ($event) {
_vm.focusing = true
},
blur: function ($event) {
_vm.focusing = false
},
click: function ($event) {
_vm.focusing = false
},
},
},
[
_vm._t(
"default",
function () {
return [
file.status !== "uploading" &&
["picture-card", "picture"].indexOf(_vm.listType) > -1
? _c("img", {
staticClass: "el-upload-list__item-thumbnail",
attrs: { src: file.url, alt: "" },
})
: _vm._e(),
_c(
"a",
{
staticClass: "el-upload-list__item-name",
on: {
click: function ($event) {
return _vm.handleClick(file)
},
},
},
[
_c("i", { staticClass: "el-icon-document" }),
_vm._v(_vm._s(file.name) + "\n "),
]
),
_c(
"label",
{ staticClass: "el-upload-list__item-status-label" },
[
_c("i", {
class: {
"el-icon-upload-success": true,
"el-icon-circle-check": _vm.listType === "text",
"el-icon-check":
["picture-card", "picture"].indexOf(_vm.listType) >
-1,
},
}),
]
),
!_vm.disabled
? _c("i", {
staticClass: "el-icon-close",
on: {
click: function ($event) {
return _vm.$emit("remove", file)
},
},
})
: _vm._e(),
!_vm.disabled
? _c("i", { staticClass: "el-icon-close-tip" }, [
_vm._v(_vm._s(_vm.t("el.upload.deleteTip"))),
])
: _vm._e(),
file.status === "uploading"
? _c("el-progress", {
attrs: {
type:
_vm.listType === "picture-card" ? "circle" : "line",
"stroke-width": _vm.listType === "picture-card" ? 6 : 2,
percentage: _vm.parsePercentage(file.percentage),
},
})
: _vm._e(),
_vm.listType === "picture-card"
? _c(
"span",
{ staticClass: "el-upload-list__item-actions" },
[
_vm.handlePreview && _vm.listType === "picture-card"
? _c(
"span",
{
staticClass: "el-upload-list__item-preview",
on: {
click: function ($event) {
return _vm.handlePreview(file)
},
},
},
[_c("i", { staticClass: "el-icon-zoom-in" })]
)
: _vm._e(),
!_vm.disabled
? _c(
"span",
{
staticClass: "el-upload-list__item-delete",
on: {
click: function ($event) {
return _vm.$emit("remove", file)
},
},
},
[_c("i", { staticClass: "el-icon-delete" })]
)
: _vm._e(),
]
)
: _vm._e(),
]
},
{ file: file }
),
],
2
)
}),
0
)
}
var staticRenderFns = []
render._withStripped = true
// CONCATENATED MODULE: ./packages/upload/src/upload-list.vue?vue&type=template&id=72f61f0f
// EXTERNAL MODULE: external "element-nice-ui/lib/mixins/locale"
var locale_ = __webpack_require__(19);
var locale_default = /*#__PURE__*/__webpack_require__.n(locale_);
// EXTERNAL MODULE: external "element-nice-ui/lib/progress"
var progress_ = __webpack_require__(128);
var progress_default = /*#__PURE__*/__webpack_require__.n(progress_);
// CONCATENATED MODULE: ./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.28.0_webpack@4.47.0/node_modules/babel-loader/lib!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.18_css-loader@5.2.7_webpack@4.47.0__lodash@4.1_bb9a19950a80e648dc95ba33c71fa343/node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload-list.vue?vue&type=script&lang=js
/* harmony default export */ var upload_listvue_type_script_lang_js = ({
name: 'ElUploadList',
mixins: [locale_default.a],
data() {
return {
focusing: false
};
},
components: {
ElProgress: progress_default.a
},
props: {
files: {
type: Array,
default() {
return [];
}
},
disabled: {
type: Boolean,
default: false
},
handlePreview: Function,
listType: String
},
methods: {
parsePercentage(val) {
return parseInt(val, 10);
},
handleClick(file) {
this.handlePreview && this.handlePreview(file);
}
}
});
// CONCATENATED MODULE: ./packages/upload/src/upload-list.vue?vue&type=script&lang=js
/* harmony default export */ var src_upload_listvue_type_script_lang_js = (upload_listvue_type_script_lang_js);
// EXTERNAL MODULE: ./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.18_css-loader@5.2.7_webpack@4.47.0__lodash@4.1_bb9a19950a80e648dc95ba33c71fa343/node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(2);
// CONCATENATED MODULE: ./packages/upload/src/upload-list.vue
/* normalize component */
var component = Object(componentNormalizer["a" /* default */])(
src_upload_listvue_type_script_lang_js,
render,
staticRenderFns,
false,
null,
null,
null
)
/* harmony default export */ var upload_list = (component.exports);
// EXTERNAL MODULE: external "element-nice-ui/lib/utils/util"
var util_ = __webpack_require__(5);
// CONCATENATED MODULE: ./packages/upload/src/ajax.js
function getError(action, option, xhr) {
let msg;
if (xhr.response) {
msg = "".concat(xhr.response.error || xhr.response);
} else if (xhr.responseText) {
msg = "".concat(xhr.responseText);
} else {
msg = "fail to post ".concat(action, " ").concat(xhr.status);
}
const err = new Error(msg);
err.status = xhr.status;
err.method = 'post';
err.url = action;
return err;
}
function getBody(xhr) {
const text = xhr.responseText || xhr.response;
if (!text) {
return text;
}
try {
return JSON.parse(text);
} catch (e) {
return text;
}
}
function upload(option) {
if (typeof XMLHttpRequest === 'undefined') {
return;
}
const xhr = new XMLHttpRequest();
const action = option.action;
if (xhr.upload) {
xhr.upload.onprogress = function progress(e) {
if (e.total > 0) {
e.percent = e.loaded / e.total * 100;
}
option.onProgress(e);
};
}
const formData = new FormData();
if (option.data) {
Object.keys(option.data).forEach(key => {
formData.append(key, option.data[key]);
});
}
formData.append(option.filename, option.file, option.file.name);
xhr.onerror = function error(e) {
option.onError(e);
};
xhr.onload = function onload() {
if (xhr.status < 200 || xhr.status >= 300) {
return option.onError(getError(action, option, xhr));
}
option.onSuccess(getBody(xhr));
};
xhr.open('post', action, true);
if (option.withCredentials && 'withCredentials' in xhr) {
xhr.withCredentials = true;
}
const headers = option.headers || {};
for (let item in headers) {
if (headers.hasOwnProperty(item) && headers[item] !== null) {
xhr.setRequestHeader(item, headers[item]);
}
}
xhr.send(formData);
return xhr;
}
// CONCATENATED MODULE: ./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.18_css-loader@5.2.7_webpack@4.47.0__lodash@4.1_bb9a19950a80e648dc95ba33c71fa343/node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.18_css-loader@5.2.7_webpack@4.47.0__lodash@4.1_bb9a19950a80e648dc95ba33c71fa343/node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload-dragger.vue?vue&type=template&id=4c315758
var upload_draggervue_type_template_id_4c315758_render = function render() {
var _vm = this,
_c = _vm._self._c
return _c(
"div",
{
staticClass: "el-upload-dragger",
class: {
"is-dragover": _vm.dragover,
},
on: {
drop: function ($event) {
$event.preventDefault()
return _vm.onDrop.apply(null, arguments)
},
dragover: function ($event) {
$event.preventDefault()
return _vm.onDragover.apply(null, arguments)
},
dragleave: function ($event) {
$event.preventDefault()
_vm.dragover = false
},
},
},
[_vm._t("default")],
2
)
}
var upload_draggervue_type_template_id_4c315758_staticRenderFns = []
upload_draggervue_type_template_id_4c315758_render._withStripped = true
// CONCATENATED MODULE: ./packages/upload/src/upload-dragger.vue?vue&type=template&id=4c315758
// CONCATENATED MODULE: ./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.28.0_webpack@4.47.0/node_modules/babel-loader/lib!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.18_css-loader@5.2.7_webpack@4.47.0__lodash@4.1_bb9a19950a80e648dc95ba33c71fa343/node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload-dragger.vue?vue&type=script&lang=js
/* harmony default export */ var upload_draggervue_type_script_lang_js = ({
name: 'ElUploadDrag',
props: {
disabled: Boolean
},
inject: {
uploader: {
default: ''
}
},
data() {
return {
dragover: false
};
},
methods: {
onDragover() {
if (!this.disabled) {
this.dragover = true;
}
},
onDrop(e) {
if (this.disabled || !this.uploader) return;
const accept = this.uploader.accept;
this.dragover = false;
if (!accept) {
this.$emit('file', e.dataTransfer.files);
return;
}
this.$emit('file', [].slice.call(e.dataTransfer.files).filter(file => {
const {
type,
name
} = file;
const extension = name.indexOf('.') > -1 ? ".".concat(name.split('.').pop()) : '';
const baseType = type.replace(/\/.*$/, '');
return accept.split(',').map(type => type.trim()).filter(type => type).some(acceptedType => {
if (/\..+$/.test(acceptedType)) {
return extension === acceptedType;
}
if (/\/\*$/.test(acceptedType)) {
return baseType === acceptedType.replace(/\/\*$/, '');
}
if (/^[^\/]+\/[^\/]+$/.test(acceptedType)) {
return type === acceptedType;
}
return false;
});
}));
}
}
});
// CONCATENATED MODULE: ./packages/upload/src/upload-dragger.vue?vue&type=script&lang=js
/* harmony default export */ var src_upload_draggervue_type_script_lang_js = (upload_draggervue_type_script_lang_js);
// CONCATENATED MODULE: ./packages/upload/src/upload-dragger.vue
/* normalize component */
var upload_dragger_component = Object(componentNormalizer["a" /* default */])(
src_upload_draggervue_type_script_lang_js,
upload_draggervue_type_template_id_4c315758_render,
upload_draggervue_type_template_id_4c315758_staticRenderFns,
false,
null,
null,
null
)
/* harmony default export */ var upload_dragger = (upload_dragger_component.exports);
// CONCATENATED MODULE: ./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.28.0_webpack@4.47.0/node_modules/babel-loader/lib!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.18_css-loader@5.2.7_webpack@4.47.0__lodash@4.1_bb9a19950a80e648dc95ba33c71fa343/node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload.vue?vue&type=script&lang=js
/* harmony default export */ var uploadvue_type_script_lang_js = ({
inject: ['uploader'],
components: {
UploadDragger: upload_dragger
},
props: {
type: String,
action: {
type: String
},
name: {
type: String,
default: 'file'
},
data: Object,
headers: Object,
withCredentials: Boolean,
multiple: Boolean,
accept: String,
onStart: Function,
onProgress: Function,
onSuccess: Function,
onError: Function,
beforeUpload: Function,
drag: Boolean,
onPreview: {
type: Function,
default: function _default() {}
},
onRemove: {
type: Function,
default: function _default() {}
},
fileList: Array,
autoUpload: Boolean,
listType: String,
httpRequest: {
type: Function,
default: upload
},
// 文件批量上传, 临时做法
batchRequest: {
type: Function
},
disabled: {
type: Boolean,
default: undefined
},
limit: Number,
onExceed: Function
},
data() {
return {
mouseover: false,
reqs: {}
};
},
computed: {
uploadDisabled() {
return Object(util_["getDefined"])(this.disabled, (this.elForm || {}).disabled, false);
}
},
methods: {
isImage(str) {
return str.indexOf('image') !== -1;
},
handleChange(ev) {
const files = ev.target.files;
if (!files) return;
this.uploadFiles(files);
},
uploadFiles(files) {
if (this.limit && this.fileList.length + files.length > this.limit) {
this.onExceed && this.onExceed(files, this.fileList);
return;
}
let postFiles = Array.prototype.slice.call(files);
if (!this.multiple) {
postFiles = postFiles.slice(0, 1);
}
if (postFiles.length === 0) {
return;
}
if (this.batchRequest) {
return this.batchRequest(postFiles);
}
postFiles.forEach(rawFile => {
this.onStart(rawFile);
if (this.autoUpload) this.upload(rawFile);
});
},
upload(rawFile) {
this.$refs.input.value = null;
if (!this.beforeUpload) {
return this.post(rawFile);
}
const before = this.beforeUpload(rawFile);
if (before && before.then) {
before.then(processedFile => {
const fileType = Object.prototype.toString.call(processedFile);
if (fileType === '[object File]' || fileType === '[object Blob]') {
if (fileType === '[object Blob]') {
processedFile = new File([processedFile], rawFile.name, {
type: rawFile.type
});
}
for (const p in rawFile) {
if (rawFile.hasOwnProperty(p)) {
processedFile[p] = rawFile[p];
}
}
this.post(processedFile);
} else {
this.post(rawFile);
}
}, () => {
this.onRemove(null, rawFile);
});
} else if (before !== false) {
this.post(rawFile);
} else {
this.onRemove(null, rawFile);
}
},
abort(file) {
const {
reqs
} = this;
if (file) {
let uid = file;
if (file.uid) uid = file.uid;
if (reqs[uid]) {
reqs[uid].abort();
}
} else {
Object.keys(reqs).forEach(uid => {
if (reqs[uid]) reqs[uid].abort();
delete reqs[uid];
});
}
},
post(rawFile) {
if (!this.action) return;
const {
uid
} = rawFile;
const options = {
headers: this.headers,
withCredentials: this.withCredentials,
file: rawFile,
data: this.data,
filename: this.name,
action: this.action,
onProgress: e => {
this.onProgress(e, rawFile);
},
onSuccess: res => {
this.onSuccess(res, rawFile);
delete this.reqs[uid];
},
onError: err => {
this.onError(err, rawFile);
delete this.reqs[uid];
}
};
const req = this.httpRequest(options);
this.reqs[uid] = req;
if (req && req.then) {
req.then(options.onSuccess, options.onError);
}
},
handleClick() {
if (!this.uploadDisabled) {
this.$refs.input.value = null;
this.$refs.input.click();
}
},
handleKeydown(e) {
if (e.target !== e.currentTarget) return;
if (e.keyCode === 13 || e.keyCode === 32) {
this.handleClick();
}
}
},
render(h) {
let {
handleClick,
drag,
name,
handleChange,
multiple,
accept,
listType,
uploadFiles,
uploadDisabled,
handleKeydown
} = this;
const data = {
class: {
'el-upload': true
},
on: {
click: handleClick,
keydown: handleKeydown
}
};
data.class["el-upload--".concat(listType)] = true;
return h("div", babel_helper_vue_jsx_merge_props_default()([{}, data, {
"attrs": {
"tabindex": "0"
}
}]), [drag ? h("upload-dragger", {
"attrs": {
"disabled": uploadDisabled
},
"on": {
"file": uploadFiles
}
}, [this.$slots.default]) : this.$slots.default, h("input", {
"class": "el-upload__input",
"attrs": {
"type": "file",
"name": name,
"multiple": multiple,
"accept": accept
},
"ref": "input",
"on": {
"change": handleChange
}
})]);
}
});
// CONCATENATED MODULE: ./packages/upload/src/upload.vue?vue&type=script&lang=js
/* harmony default export */ var src_uploadvue_type_script_lang_js = (uploadvue_type_script_lang_js);
// CONCATENATED MODULE: ./packages/upload/src/upload.vue
var upload_render, upload_staticRenderFns
/* normalize component */
var upload_component = Object(componentNormalizer["a" /* default */])(
src_uploadvue_type_script_lang_js,
upload_render,
upload_staticRenderFns,
false,
null,
null,
null
)
/* harmony default export */ var src_upload = (upload_component.exports);
// EXTERNAL MODULE: external "element-nice-ui/lib/mixins/migrating"
var migrating_ = __webpack_require__(25);
var migrating_default = /*#__PURE__*/__webpack_require__.n(migrating_);
// CONCATENATED MODULE: ./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.28.0_webpack@4.47.0/node_modules/babel-loader/lib!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.18_css-loader@5.2.7_webpack@4.47.0__lodash@4.1_bb9a19950a80e648dc95ba33c71fa343/node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/index.vue?vue&type=script&lang=js
function noop() {}
/* harmony default export */ var srcvue_type_script_lang_js = ({
name: 'ElUpload',
mixins: [migrating_default.a],
components: {
ElProgress: progress_default.a,
UploadList: upload_list,
Upload: src_upload
},
provide() {
return {
uploader: this
};
},
inject: {
elForm: {
default: ''
}
},
props: {
action: {
type: String
},
headers: {
type: Object,
default() {
return {};
}
},
data: Object,
multiple: Boolean,
name: {
type: String,
default: 'file'
},
drag: Boolean,
dragger: Boolean,
withCredentials: Boolean,
showFileList: {
type: Boolean,
default: true
},
accept: String,
type: {
type: String,
default: 'select'
},
beforeUpload: Function,
beforeRemove: Function,
onRemove: {
type: Function,
default: noop
},
onChange: {
type: Function,
default: noop
},
onPreview: {
type: Function
},
onSuccess: {
type: Function,
default: noop
},
onProgress: {
type: Function,
default: noop
},
onError: {
type: Function,
default: noop
},
fileList: {
type: Array,
default() {
return [];
}
},
autoUpload: {
type: Boolean,
default: true
},
listType: {
type: String,
default: 'text' // text,picture,picture-card
},
httpRequest: Function,
batchRequest: Function,
disabled: Boolean,
limit: Number,
onExceed: {
type: Function,
default: noop
}
},
data() {
return {
uploadFiles: [],
dragOver: false,
draging: false,
tempIndex: 1
};
},
computed: {
uploadDisabled() {
return this.disabled || (this.elForm || {}).disabled;
}
},
watch: {
listType(type) {
if (type === 'picture-card' || type === 'picture') {
this.uploadFiles = this.uploadFiles.map(file => {
if (!file.url && file.raw) {
try {
file.url = URL.createObjectURL(file.raw);
} catch (err) {
console.error('[Element Error][Upload]', err);
}
}
return file;
});
}
},
fileList: {
immediate: true,
handler(fileList) {
this.uploadFiles = fileList.map(item => {
item.uid = item.uid || Date.now() + this.tempIndex++;
item.status = item.status || 'success';
return item;
});
}
}
},
methods: {
handleStart(rawFile) {
rawFile.uid = Date.now() + this.tempIndex++;
let file = {
status: 'ready',
name: rawFile.name,
size: rawFile.size,
percentage: 0,
uid: rawFile.uid,
raw: rawFile
};
if (this.listType === 'picture-card' || this.listType === 'picture') {
try {
file.url = URL.createObjectURL(rawFile);
} catch (err) {
console.error('[Element Error][Upload]', err);
return;
}
}
this.uploadFiles.push(file);
this.onChange(file, this.uploadFiles);
},
handleProgress(ev, rawFile) {
const file = this.getFile(rawFile);
this.onProgress(ev, file, this.uploadFiles);
file.status = 'uploading';
file.percentage = ev.percent || 0;
},
handleSuccess(res, rawFile) {
const file = this.getFile(rawFile);
if (file) {
file.status = 'success';
file.response = res;
this.onSuccess(res, file, this.uploadFiles);
this.onChange(file, this.uploadFiles);
}
},
handleError(err, rawFile) {
const file = this.getFile(rawFile);
const fileList = this.uploadFiles;
file.status = 'fail';
fileList.splice(fileList.indexOf(file), 1);
this.onError(err, file, this.uploadFiles);
this.onChange(file, this.uploadFiles);
},
handleRemove(file, raw) {
if (raw) {
file = this.getFile(raw);
}
let doRemove = () => {
this.abort(file);
let fileList = this.uploadFiles;
fileList.splice(fileList.indexOf(file), 1);
this.onRemove(file, fileList);
};
if (!this.beforeRemove) {
doRemove();
} else if (typeof this.beforeRemove === 'function') {
const before = this.beforeRemove(file, this.uploadFiles);
if (before && before.then) {
before.then(() => {
doRemove();
}, noop);
} else if (before !== false) {
doRemove();
}
}
},
getFile(rawFile) {
let fileList = this.uploadFiles;
let target;
fileList.every(item => {
target = rawFile.uid === item.uid ? item : null;
return !target;
});
return target;
},
abort(file) {
this.$refs['upload-inner'].abort(file);
},
clearFiles() {
this.uploadFiles = [];
},
submit() {
this.uploadFiles.filter(file => file.status === 'ready').forEach(file => {
this.$refs['upload-inner'].upload(file.raw);
});
},
getMigratingConfig() {
return {
props: {
'default-file-list': 'default-file-list is renamed to file-list.',
'show-upload-list': 'show-upload-list is renamed to show-file-list.',
'thumbnail-mode': 'thumbnail-mode has been deprecated, you can implement the same effect according to this case: http://element.eleme.io/#/zh-CN/component/upload#yong-hu-tou-xiang-shang-chuan'
}
};
}
},
beforeDestroy() {
this.uploadFiles.forEach(file => {
if (file.url && file.url.indexOf('blob:') === 0) {
URL.revokeObjectURL(file.url);
}
});
},
render(h) {
let uploadList;
if (this.showFileList) {
uploadList = h(upload_list, {
"attrs": {
"disabled": this.uploadDisabled,
"listType": this.listType,
"files": this.uploadFiles,
"handlePreview": this.onPreview
},
"on": {
"remove": this.handleRemove
}
}, [props => {
if (this.$scopedSlots.file) {
return this.$scopedSlots.file({
file: props.file
});
}
}]);
}
const uploadData = {
props: {
type: this.type,
drag: this.drag,
action: this.action,
multiple: this.multiple,
'before-upload': this.beforeUpload,
'with-credentials': this.withCredentials,
headers: this.headers,
name: this.name,
data: this.data,
accept: this.accept,
fileList: this.uploadFiles,
autoUpload: this.autoUpload,
listType: this.listType,
disabled: this.uploadDisabled,
limit: this.limit,
'on-exceed': this.onExceed,
'on-start': this.handleStart,
'on-progress': this.handleProgress,
'on-success': this.handleSuccess,
'on-error': this.handleError,
'on-preview': this.onPreview,
'on-remove': this.handleRemove,
'http-request': this.httpRequest,
'batch-request': this.batchRequest
},
ref: 'upload-inner'
};
const trigger = this.$slots.trigger || this.$slots.default;
const uploadComponent = h("upload", babel_helper_vue_jsx_merge_props_default()([{}, uploadData]), [trigger]);
return h("div", [this.listType === 'picture-card' ? uploadList : '', this.$slots.trigger ? [uploadComponent, this.$slots.default] : uploadComponent, this.$slots.tip, this.listType !== 'picture-card' ? uploadList : '']);
}
});
// CONCATENATED MODULE: ./packages/upload/src/index.vue?vue&type=script&lang=js
/* harmony default export */ var upload_srcvue_type_script_lang_js = (srcvue_type_script_lang_js);
// CONCATENATED MODULE: ./packages/upload/src/index.vue
var src_render, src_staticRenderFns
/* normalize component */
var src_component = Object(componentNormalizer["a" /* default */])(
upload_srcvue_type_script_lang_js,
src_render,
src_staticRenderFns,
false,
null,
null,
null
)
/* harmony default export */ var src = (src_component.exports);
// CONCATENATED MODULE: ./packages/upload/index.js
/* istanbul ignore next */
src.install = function (Vue) {
Vue.component(src.name, src);
};
/* harmony default export */ var packages_upload = __webpack_exports__["default"] = (src);
/***/ }),
/***/ 19:
/***/ (function(module, exports) {
module.exports = require("element-nice-ui/lib/mixins/locale");
/***/ }),
/***/ 2:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return normalizeComponent; });
/* globals __VUE_SSR_CONTEXT__ */
// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
// This module is a runtime utility for cleaner component module output and will
// be included in the final webpack user bundle.
function normalizeComponent(
scriptExports,
render,
staticRenderFns,
functionalTemplate,
injectStyles,
scopeId,
moduleIdentifier /* server only */,
shadowMode /* vue-cli only */
) {
// Vue.extend constructor export interop
var options =
typeof scriptExports === 'function' ? scriptExports.options : scriptExports
// render functions
if (render) {
options.render = render
options.staticRenderFns = staticRenderFns
options._compiled = true
}
// functional template
if (functionalTemplate) {
options.functional = true
}
// scopedId
if (scopeId) {
options._scopeId = 'data-v-' + scopeId
}
var hook
if (moduleIdentifier) {
// server build
hook = function (context) {
// 2.3 injection
context =
context || // cached call
(this.$vnode && this.$vnode.ssrContext) || // stateful
(this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
// 2.2 with runInNewContext: true
if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
context = __VUE_SSR_CONTEXT__
}
// inject component styles
if (injectStyles) {
injectStyles.call(this, context)
}
// register component module identifier for async chunk inferrence
if (context && context._registeredComponents) {
context._registeredComponents.add(moduleIdentifier)
}
}
// used by ssr in case component is cached and beforeCreate
// never gets called
options._ssrRegister = hook
} else if (injectStyles) {
hook = shadowMode
? function () {
injectStyles.call(
this,
(options.functional ? this.parent : this).$root.$options.shadowRoot
)
}
: injectStyles
}
if (hook) {
if (options.functional) {
// for template-only hot-reload because in that case the render fn doesn't
// go through the normalizer
options._injectStyles = hook
// register for functional component in vue file
var originalRender = options.render
options.render = function renderWithStyleInjection(h, context) {
hook.call(context)
return originalRender(h, context)
}
} else {
// inject component registration as beforeCreate hook
var existing = options.beforeCreate
options.beforeCreate = existing ? [].concat(existing, hook) : [hook]
}
}
return {
exports: scriptExports,
options: options
}
}
/***/ }),
/***/ 25:
/***/ (function(module, exports) {
module.exports = require("element-nice-ui/lib/mixins/migrating");
/***/ }),
/***/ 30:
/***/ (function(module, exports) {
module.exports = require("@vue/babel-helper-vue-jsx-merge-props");
/***/ }),
/***/ 5:
/***/ (function(module, exports) {
module.exports = require("element-nice-ui/lib/utils/util");
/***/ })
/******/ });