upload.js 34 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301
  1. module.exports =
  2. /******/ (function(modules) { // webpackBootstrap
  3. /******/ // The module cache
  4. /******/ var installedModules = {};
  5. /******/
  6. /******/ // The require function
  7. /******/ function __webpack_require__(moduleId) {
  8. /******/
  9. /******/ // Check if module is in cache
  10. /******/ if(installedModules[moduleId]) {
  11. /******/ return installedModules[moduleId].exports;
  12. /******/ }
  13. /******/ // Create a new module (and put it into the cache)
  14. /******/ var module = installedModules[moduleId] = {
  15. /******/ i: moduleId,
  16. /******/ l: false,
  17. /******/ exports: {}
  18. /******/ };
  19. /******/
  20. /******/ // Execute the module function
  21. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  22. /******/
  23. /******/ // Flag the module as loaded
  24. /******/ module.l = true;
  25. /******/
  26. /******/ // Return the exports of the module
  27. /******/ return module.exports;
  28. /******/ }
  29. /******/
  30. /******/
  31. /******/ // expose the modules object (__webpack_modules__)
  32. /******/ __webpack_require__.m = modules;
  33. /******/
  34. /******/ // expose the module cache
  35. /******/ __webpack_require__.c = installedModules;
  36. /******/
  37. /******/ // define getter function for harmony exports
  38. /******/ __webpack_require__.d = function(exports, name, getter) {
  39. /******/ if(!__webpack_require__.o(exports, name)) {
  40. /******/ Object.defineProperty(exports, name, {
  41. /******/ configurable: false,
  42. /******/ enumerable: true,
  43. /******/ get: getter
  44. /******/ });
  45. /******/ }
  46. /******/ };
  47. /******/
  48. /******/ // getDefaultExport function for compatibility with non-harmony modules
  49. /******/ __webpack_require__.n = function(module) {
  50. /******/ var getter = module && module.__esModule ?
  51. /******/ function getDefault() { return module['default']; } :
  52. /******/ function getModuleExports() { return module; };
  53. /******/ __webpack_require__.d(getter, 'a', getter);
  54. /******/ return getter;
  55. /******/ };
  56. /******/
  57. /******/ // Object.prototype.hasOwnProperty.call
  58. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  59. /******/
  60. /******/ // __webpack_public_path__
  61. /******/ __webpack_require__.p = "/dist/";
  62. /******/
  63. /******/ // Load entry module and return exports
  64. /******/ return __webpack_require__(__webpack_require__.s = 286);
  65. /******/ })
  66. /************************************************************************/
  67. /******/ ({
  68. /***/ 0:
  69. /***/ (function(module, exports) {
  70. /* globals __VUE_SSR_CONTEXT__ */
  71. // IMPORTANT: Do NOT use ES2015 features in this file.
  72. // This module is a runtime utility for cleaner component module output and will
  73. // be included in the final webpack user bundle.
  74. module.exports = function normalizeComponent (
  75. rawScriptExports,
  76. compiledTemplate,
  77. functionalTemplate,
  78. injectStyles,
  79. scopeId,
  80. moduleIdentifier /* server only */
  81. ) {
  82. var esModule
  83. var scriptExports = rawScriptExports = rawScriptExports || {}
  84. // ES6 modules interop
  85. var type = typeof rawScriptExports.default
  86. if (type === 'object' || type === 'function') {
  87. esModule = rawScriptExports
  88. scriptExports = rawScriptExports.default
  89. }
  90. // Vue.extend constructor export interop
  91. var options = typeof scriptExports === 'function'
  92. ? scriptExports.options
  93. : scriptExports
  94. // render functions
  95. if (compiledTemplate) {
  96. options.render = compiledTemplate.render
  97. options.staticRenderFns = compiledTemplate.staticRenderFns
  98. options._compiled = true
  99. }
  100. // functional template
  101. if (functionalTemplate) {
  102. options.functional = true
  103. }
  104. // scopedId
  105. if (scopeId) {
  106. options._scopeId = scopeId
  107. }
  108. var hook
  109. if (moduleIdentifier) { // server build
  110. hook = function (context) {
  111. // 2.3 injection
  112. context =
  113. context || // cached call
  114. (this.$vnode && this.$vnode.ssrContext) || // stateful
  115. (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
  116. // 2.2 with runInNewContext: true
  117. if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
  118. context = __VUE_SSR_CONTEXT__
  119. }
  120. // inject component styles
  121. if (injectStyles) {
  122. injectStyles.call(this, context)
  123. }
  124. // register component module identifier for async chunk inferrence
  125. if (context && context._registeredComponents) {
  126. context._registeredComponents.add(moduleIdentifier)
  127. }
  128. }
  129. // used by ssr in case component is cached and beforeCreate
  130. // never gets called
  131. options._ssrRegister = hook
  132. } else if (injectStyles) {
  133. hook = injectStyles
  134. }
  135. if (hook) {
  136. var functional = options.functional
  137. var existing = functional
  138. ? options.render
  139. : options.beforeCreate
  140. if (!functional) {
  141. // inject component registration as beforeCreate hook
  142. options.beforeCreate = existing
  143. ? [].concat(existing, hook)
  144. : [hook]
  145. } else {
  146. // for template-only hot-reload because in that case the render fn doesn't
  147. // go through the normalizer
  148. options._injectStyles = hook
  149. // register for functioal component in vue file
  150. options.render = function renderWithStyleInjection (h, context) {
  151. hook.call(context)
  152. return existing(h, context)
  153. }
  154. }
  155. }
  156. return {
  157. esModule: esModule,
  158. exports: scriptExports,
  159. options: options
  160. }
  161. }
  162. /***/ }),
  163. /***/ 286:
  164. /***/ (function(module, exports, __webpack_require__) {
  165. "use strict";
  166. exports.__esModule = true;
  167. var _src = __webpack_require__(287);
  168. var _src2 = _interopRequireDefault(_src);
  169. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  170. /* istanbul ignore next */
  171. _src2.default.install = function (Vue) {
  172. Vue.component(_src2.default.name, _src2.default);
  173. };
  174. exports.default = _src2.default;
  175. /***/ }),
  176. /***/ 287:
  177. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  178. "use strict";
  179. Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  180. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_index_vue__ = __webpack_require__(288);
  181. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_index_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_index_vue__);
  182. var normalizeComponent = __webpack_require__(0)
  183. /* script */
  184. /* template */
  185. var __vue_template__ = null
  186. /* template functional */
  187. var __vue_template_functional__ = false
  188. /* styles */
  189. var __vue_styles__ = null
  190. /* scopeId */
  191. var __vue_scopeId__ = null
  192. /* moduleIdentifier (server only) */
  193. var __vue_module_identifier__ = null
  194. var Component = normalizeComponent(
  195. __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_index_vue___default.a,
  196. __vue_template__,
  197. __vue_template_functional__,
  198. __vue_styles__,
  199. __vue_scopeId__,
  200. __vue_module_identifier__
  201. )
  202. /* harmony default export */ __webpack_exports__["default"] = (Component.exports);
  203. /***/ }),
  204. /***/ 288:
  205. /***/ (function(module, exports, __webpack_require__) {
  206. "use strict";
  207. exports.__esModule = true;
  208. var _uploadList = __webpack_require__(289);
  209. var _uploadList2 = _interopRequireDefault(_uploadList);
  210. var _upload = __webpack_require__(292);
  211. var _upload2 = _interopRequireDefault(_upload);
  212. var _progress = __webpack_require__(52);
  213. var _progress2 = _interopRequireDefault(_progress);
  214. var _migrating = __webpack_require__(8);
  215. var _migrating2 = _interopRequireDefault(_migrating);
  216. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  217. function noop() {}
  218. exports.default = {
  219. name: 'ElUpload',
  220. mixins: [_migrating2.default],
  221. components: {
  222. ElProgress: _progress2.default,
  223. UploadList: _uploadList2.default,
  224. Upload: _upload2.default
  225. },
  226. provide: function provide() {
  227. return {
  228. uploader: this
  229. };
  230. },
  231. inject: {
  232. elForm: {
  233. default: ''
  234. }
  235. },
  236. props: {
  237. action: {
  238. type: String,
  239. required: true
  240. },
  241. headers: {
  242. type: Object,
  243. default: function _default() {
  244. return {};
  245. }
  246. },
  247. data: Object,
  248. multiple: Boolean,
  249. name: {
  250. type: String,
  251. default: 'file'
  252. },
  253. drag: Boolean,
  254. dragger: Boolean,
  255. withCredentials: Boolean,
  256. showFileList: {
  257. type: Boolean,
  258. default: true
  259. },
  260. accept: String,
  261. type: {
  262. type: String,
  263. default: 'select'
  264. },
  265. beforeUpload: Function,
  266. beforeRemove: Function,
  267. onRemove: {
  268. type: Function,
  269. default: noop
  270. },
  271. onChange: {
  272. type: Function,
  273. default: noop
  274. },
  275. onPreview: {
  276. type: Function
  277. },
  278. onSuccess: {
  279. type: Function,
  280. default: noop
  281. },
  282. onProgress: {
  283. type: Function,
  284. default: noop
  285. },
  286. onError: {
  287. type: Function,
  288. default: noop
  289. },
  290. fileList: {
  291. type: Array,
  292. default: function _default() {
  293. return [];
  294. }
  295. },
  296. autoUpload: {
  297. type: Boolean,
  298. default: true
  299. },
  300. listType: {
  301. type: String,
  302. default: 'text' // text,picture,picture-card
  303. },
  304. httpRequest: Function,
  305. disabled: Boolean,
  306. limit: Number,
  307. onExceed: {
  308. type: Function,
  309. default: noop
  310. }
  311. },
  312. data: function data() {
  313. return {
  314. uploadFiles: [],
  315. dragOver: false,
  316. draging: false,
  317. tempIndex: 1
  318. };
  319. },
  320. computed: {
  321. uploadDisabled: function uploadDisabled() {
  322. return this.disabled || (this.elForm || {}).disabled;
  323. }
  324. },
  325. watch: {
  326. fileList: {
  327. immediate: true,
  328. handler: function handler(fileList) {
  329. var _this = this;
  330. this.uploadFiles = fileList.map(function (item) {
  331. item.uid = item.uid || Date.now() + _this.tempIndex++;
  332. item.status = item.status || 'success';
  333. return item;
  334. });
  335. }
  336. }
  337. },
  338. methods: {
  339. handleStart: function handleStart(rawFile) {
  340. rawFile.uid = Date.now() + this.tempIndex++;
  341. var file = {
  342. status: 'ready',
  343. name: rawFile.name,
  344. size: rawFile.size,
  345. percentage: 0,
  346. uid: rawFile.uid,
  347. raw: rawFile
  348. };
  349. if (this.listType === 'picture-card' || this.listType === 'picture') {
  350. try {
  351. file.url = URL.createObjectURL(rawFile);
  352. } catch (err) {
  353. console.error('[Element Error][Upload]', err);
  354. return;
  355. }
  356. }
  357. this.uploadFiles.push(file);
  358. this.onChange(file, this.uploadFiles);
  359. },
  360. handleProgress: function handleProgress(ev, rawFile) {
  361. var file = this.getFile(rawFile);
  362. this.onProgress(ev, file, this.uploadFiles);
  363. file.status = 'uploading';
  364. file.percentage = ev.percent || 0;
  365. },
  366. handleSuccess: function handleSuccess(res, rawFile) {
  367. var file = this.getFile(rawFile);
  368. if (file) {
  369. file.status = 'success';
  370. file.response = res;
  371. this.onSuccess(res, file, this.uploadFiles);
  372. this.onChange(file, this.uploadFiles);
  373. }
  374. },
  375. handleError: function handleError(err, rawFile) {
  376. var file = this.getFile(rawFile);
  377. var fileList = this.uploadFiles;
  378. file.status = 'fail';
  379. fileList.splice(fileList.indexOf(file), 1);
  380. this.onError(err, file, this.uploadFiles);
  381. this.onChange(file, this.uploadFiles);
  382. },
  383. handleRemove: function handleRemove(file, raw) {
  384. var _this2 = this;
  385. if (raw) {
  386. file = this.getFile(raw);
  387. }
  388. var doRemove = function doRemove() {
  389. _this2.abort(file);
  390. var fileList = _this2.uploadFiles;
  391. fileList.splice(fileList.indexOf(file), 1);
  392. _this2.onRemove(file, fileList);
  393. };
  394. if (!this.beforeRemove) {
  395. doRemove();
  396. } else if (typeof this.beforeRemove === 'function') {
  397. var before = this.beforeRemove(file, this.uploadFiles);
  398. if (before && before.then) {
  399. before.then(function () {
  400. doRemove();
  401. }, noop);
  402. } else if (before !== false) {
  403. doRemove();
  404. }
  405. }
  406. },
  407. getFile: function getFile(rawFile) {
  408. var fileList = this.uploadFiles;
  409. var target = void 0;
  410. fileList.every(function (item) {
  411. target = rawFile.uid === item.uid ? item : null;
  412. return !target;
  413. });
  414. return target;
  415. },
  416. abort: function abort(file) {
  417. this.$refs['upload-inner'].abort(file);
  418. },
  419. clearFiles: function clearFiles() {
  420. this.uploadFiles = [];
  421. },
  422. submit: function submit() {
  423. var _this3 = this;
  424. this.uploadFiles.filter(function (file) {
  425. return file.status === 'ready';
  426. }).forEach(function (file) {
  427. _this3.$refs['upload-inner'].upload(file.raw);
  428. });
  429. },
  430. getMigratingConfig: function getMigratingConfig() {
  431. return {
  432. props: {
  433. 'default-file-list': 'default-file-list is renamed to file-list.',
  434. 'show-upload-list': 'show-upload-list is renamed to show-file-list.',
  435. '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'
  436. }
  437. };
  438. }
  439. },
  440. beforeDestroy: function beforeDestroy() {
  441. this.uploadFiles.forEach(function (file) {
  442. if (file.url && file.url.indexOf('blob:') === 0) {
  443. URL.revokeObjectURL(file.url);
  444. }
  445. });
  446. },
  447. render: function render(h) {
  448. var uploadList = void 0;
  449. if (this.showFileList) {
  450. uploadList = h(
  451. _uploadList2.default,
  452. {
  453. attrs: {
  454. disabled: this.uploadDisabled,
  455. listType: this.listType,
  456. files: this.uploadFiles,
  457. handlePreview: this.onPreview },
  458. on: {
  459. 'remove': this.handleRemove
  460. }
  461. },
  462. []
  463. );
  464. }
  465. var uploadData = {
  466. props: {
  467. type: this.type,
  468. drag: this.drag,
  469. action: this.action,
  470. multiple: this.multiple,
  471. 'before-upload': this.beforeUpload,
  472. 'with-credentials': this.withCredentials,
  473. headers: this.headers,
  474. name: this.name,
  475. data: this.data,
  476. accept: this.accept,
  477. fileList: this.uploadFiles,
  478. autoUpload: this.autoUpload,
  479. listType: this.listType,
  480. disabled: this.uploadDisabled,
  481. limit: this.limit,
  482. 'on-exceed': this.onExceed,
  483. 'on-start': this.handleStart,
  484. 'on-progress': this.handleProgress,
  485. 'on-success': this.handleSuccess,
  486. 'on-error': this.handleError,
  487. 'on-preview': this.onPreview,
  488. 'on-remove': this.handleRemove,
  489. 'http-request': this.httpRequest
  490. },
  491. ref: 'upload-inner'
  492. };
  493. var trigger = this.$slots.trigger || this.$slots.default;
  494. var uploadComponent = h(
  495. 'upload',
  496. uploadData,
  497. [trigger]
  498. );
  499. return h(
  500. 'div',
  501. null,
  502. [this.listType === 'picture-card' ? uploadList : '', this.$slots.trigger ? [uploadComponent, this.$slots.default] : uploadComponent, this.$slots.tip, this.listType !== 'picture-card' ? uploadList : '']
  503. );
  504. }
  505. };
  506. /***/ }),
  507. /***/ 289:
  508. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  509. "use strict";
  510. Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  511. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_upload_list_vue__ = __webpack_require__(290);
  512. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_upload_list_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_upload_list_vue__);
  513. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1062ab12_hasScoped_false_preserveWhitespace_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_upload_list_vue__ = __webpack_require__(291);
  514. var normalizeComponent = __webpack_require__(0)
  515. /* script */
  516. /* template */
  517. /* template functional */
  518. var __vue_template_functional__ = false
  519. /* styles */
  520. var __vue_styles__ = null
  521. /* scopeId */
  522. var __vue_scopeId__ = null
  523. /* moduleIdentifier (server only) */
  524. var __vue_module_identifier__ = null
  525. var Component = normalizeComponent(
  526. __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_upload_list_vue___default.a,
  527. __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1062ab12_hasScoped_false_preserveWhitespace_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_upload_list_vue__["a" /* default */],
  528. __vue_template_functional__,
  529. __vue_styles__,
  530. __vue_scopeId__,
  531. __vue_module_identifier__
  532. )
  533. /* harmony default export */ __webpack_exports__["default"] = (Component.exports);
  534. /***/ }),
  535. /***/ 290:
  536. /***/ (function(module, exports, __webpack_require__) {
  537. "use strict";
  538. exports.__esModule = true;
  539. var _locale = __webpack_require__(5);
  540. var _locale2 = _interopRequireDefault(_locale);
  541. var _progress = __webpack_require__(52);
  542. var _progress2 = _interopRequireDefault(_progress);
  543. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  544. //
  545. //
  546. //
  547. //
  548. //
  549. //
  550. //
  551. //
  552. //
  553. //
  554. //
  555. //
  556. //
  557. //
  558. //
  559. //
  560. //
  561. //
  562. //
  563. //
  564. //
  565. //
  566. //
  567. //
  568. //
  569. //
  570. //
  571. //
  572. //
  573. //
  574. //
  575. //
  576. //
  577. //
  578. //
  579. //
  580. //
  581. //
  582. //
  583. //
  584. //
  585. //
  586. //
  587. //
  588. //
  589. //
  590. //
  591. //
  592. //
  593. //
  594. //
  595. //
  596. //
  597. //
  598. //
  599. //
  600. //
  601. //
  602. //
  603. //
  604. //
  605. //
  606. exports.default = {
  607. name: 'ElUploadList',
  608. mixins: [_locale2.default],
  609. data: function data() {
  610. return {
  611. focusing: false
  612. };
  613. },
  614. components: { ElProgress: _progress2.default },
  615. props: {
  616. files: {
  617. type: Array,
  618. default: function _default() {
  619. return [];
  620. }
  621. },
  622. disabled: {
  623. type: Boolean,
  624. default: false
  625. },
  626. handlePreview: Function,
  627. listType: String
  628. },
  629. methods: {
  630. parsePercentage: function parsePercentage(val) {
  631. return parseInt(val, 10);
  632. },
  633. handleClick: function handleClick(file) {
  634. this.handlePreview && this.handlePreview(file);
  635. }
  636. }
  637. };
  638. /***/ }),
  639. /***/ 291:
  640. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  641. "use strict";
  642. var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('transition-group',{class:[
  643. 'el-upload-list',
  644. 'el-upload-list--' + _vm.listType,
  645. { 'is-disabled': _vm.disabled }
  646. ],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(!('button' in $event)&&_vm._k($event.keyCode,"delete",[8,46],$event.key)){ 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}}},[(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){_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:{
  647. 'el-icon-upload-success': true,
  648. 'el-icon-circle-check': _vm.listType === 'text',
  649. 'el-icon-check': ['picture-card', 'picture'].indexOf(_vm.listType) > -1
  650. }})]),(!_vm.disabled)?_c('i',{staticClass:"el-icon-close",on:{"click":function($event){_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){_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){_vm.$emit('remove', file)}}},[_c('i',{staticClass:"el-icon-delete"})]):_vm._e()]):_vm._e()],1)}))}
  651. var staticRenderFns = []
  652. var esExports = { render: render, staticRenderFns: staticRenderFns }
  653. /* harmony default export */ __webpack_exports__["a"] = (esExports);
  654. /***/ }),
  655. /***/ 292:
  656. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  657. "use strict";
  658. Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  659. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_upload_vue__ = __webpack_require__(293);
  660. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_upload_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_upload_vue__);
  661. var normalizeComponent = __webpack_require__(0)
  662. /* script */
  663. /* template */
  664. var __vue_template__ = null
  665. /* template functional */
  666. var __vue_template_functional__ = false
  667. /* styles */
  668. var __vue_styles__ = null
  669. /* scopeId */
  670. var __vue_scopeId__ = null
  671. /* moduleIdentifier (server only) */
  672. var __vue_module_identifier__ = null
  673. var Component = normalizeComponent(
  674. __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_upload_vue___default.a,
  675. __vue_template__,
  676. __vue_template_functional__,
  677. __vue_styles__,
  678. __vue_scopeId__,
  679. __vue_module_identifier__
  680. )
  681. /* harmony default export */ __webpack_exports__["default"] = (Component.exports);
  682. /***/ }),
  683. /***/ 293:
  684. /***/ (function(module, exports, __webpack_require__) {
  685. "use strict";
  686. exports.__esModule = true;
  687. var _babelHelperVueJsxMergeProps = __webpack_require__(45);
  688. var _babelHelperVueJsxMergeProps2 = _interopRequireDefault(_babelHelperVueJsxMergeProps);
  689. var _ajax = __webpack_require__(294);
  690. var _ajax2 = _interopRequireDefault(_ajax);
  691. var _uploadDragger = __webpack_require__(295);
  692. var _uploadDragger2 = _interopRequireDefault(_uploadDragger);
  693. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  694. exports.default = {
  695. inject: ['uploader'],
  696. components: {
  697. UploadDragger: _uploadDragger2.default
  698. },
  699. props: {
  700. type: String,
  701. action: {
  702. type: String,
  703. required: true
  704. },
  705. name: {
  706. type: String,
  707. default: 'file'
  708. },
  709. data: Object,
  710. headers: Object,
  711. withCredentials: Boolean,
  712. multiple: Boolean,
  713. accept: String,
  714. onStart: Function,
  715. onProgress: Function,
  716. onSuccess: Function,
  717. onError: Function,
  718. beforeUpload: Function,
  719. drag: Boolean,
  720. onPreview: {
  721. type: Function,
  722. default: function _default() {}
  723. },
  724. onRemove: {
  725. type: Function,
  726. default: function _default() {}
  727. },
  728. fileList: Array,
  729. autoUpload: Boolean,
  730. listType: String,
  731. httpRequest: {
  732. type: Function,
  733. default: _ajax2.default
  734. },
  735. disabled: Boolean,
  736. limit: Number,
  737. onExceed: Function
  738. },
  739. data: function data() {
  740. return {
  741. mouseover: false,
  742. reqs: {}
  743. };
  744. },
  745. methods: {
  746. isImage: function isImage(str) {
  747. return str.indexOf('image') !== -1;
  748. },
  749. handleChange: function handleChange(ev) {
  750. var files = ev.target.files;
  751. if (!files) return;
  752. this.uploadFiles(files);
  753. },
  754. uploadFiles: function uploadFiles(files) {
  755. var _this = this;
  756. if (this.limit && this.fileList.length + files.length > this.limit) {
  757. this.onExceed && this.onExceed(files, this.fileList);
  758. return;
  759. }
  760. var postFiles = Array.prototype.slice.call(files);
  761. if (!this.multiple) {
  762. postFiles = postFiles.slice(0, 1);
  763. }
  764. if (postFiles.length === 0) {
  765. return;
  766. }
  767. postFiles.forEach(function (rawFile) {
  768. _this.onStart(rawFile);
  769. if (_this.autoUpload) _this.upload(rawFile);
  770. });
  771. },
  772. upload: function upload(rawFile) {
  773. var _this2 = this;
  774. this.$refs.input.value = null;
  775. if (!this.beforeUpload) {
  776. return this.post(rawFile);
  777. }
  778. var before = this.beforeUpload(rawFile);
  779. if (before && before.then) {
  780. before.then(function (processedFile) {
  781. var fileType = Object.prototype.toString.call(processedFile);
  782. if (fileType === '[object File]' || fileType === '[object Blob]') {
  783. if (fileType === '[object Blob]') {
  784. processedFile = new File([processedFile], rawFile.name, {
  785. type: rawFile.type
  786. });
  787. }
  788. for (var p in rawFile) {
  789. if (rawFile.hasOwnProperty(p)) {
  790. processedFile[p] = rawFile[p];
  791. }
  792. }
  793. _this2.post(processedFile);
  794. } else {
  795. _this2.post(rawFile);
  796. }
  797. }, function () {
  798. _this2.onRemove(null, rawFile);
  799. });
  800. } else if (before !== false) {
  801. this.post(rawFile);
  802. } else {
  803. this.onRemove(null, rawFile);
  804. }
  805. },
  806. abort: function abort(file) {
  807. var reqs = this.reqs;
  808. if (file) {
  809. var uid = file;
  810. if (file.uid) uid = file.uid;
  811. if (reqs[uid]) {
  812. reqs[uid].abort();
  813. }
  814. } else {
  815. Object.keys(reqs).forEach(function (uid) {
  816. if (reqs[uid]) reqs[uid].abort();
  817. delete reqs[uid];
  818. });
  819. }
  820. },
  821. post: function post(rawFile) {
  822. var _this3 = this;
  823. var uid = rawFile.uid;
  824. var options = {
  825. headers: this.headers,
  826. withCredentials: this.withCredentials,
  827. file: rawFile,
  828. data: this.data,
  829. filename: this.name,
  830. action: this.action,
  831. onProgress: function onProgress(e) {
  832. _this3.onProgress(e, rawFile);
  833. },
  834. onSuccess: function onSuccess(res) {
  835. _this3.onSuccess(res, rawFile);
  836. delete _this3.reqs[uid];
  837. },
  838. onError: function onError(err) {
  839. _this3.onError(err, rawFile);
  840. delete _this3.reqs[uid];
  841. }
  842. };
  843. var req = this.httpRequest(options);
  844. this.reqs[uid] = req;
  845. if (req && req.then) {
  846. req.then(options.onSuccess, options.onError);
  847. }
  848. },
  849. handleClick: function handleClick() {
  850. if (!this.disabled) {
  851. this.$refs.input.value = null;
  852. this.$refs.input.click();
  853. }
  854. },
  855. handleKeydown: function handleKeydown(e) {
  856. if (e.target !== e.currentTarget) return;
  857. if (e.keyCode === 13 || e.keyCode === 32) {
  858. this.handleClick();
  859. }
  860. }
  861. },
  862. render: function render(h) {
  863. var handleClick = this.handleClick,
  864. drag = this.drag,
  865. name = this.name,
  866. handleChange = this.handleChange,
  867. multiple = this.multiple,
  868. accept = this.accept,
  869. listType = this.listType,
  870. uploadFiles = this.uploadFiles,
  871. disabled = this.disabled,
  872. handleKeydown = this.handleKeydown;
  873. var data = {
  874. class: {
  875. 'el-upload': true
  876. },
  877. on: {
  878. click: handleClick,
  879. keydown: handleKeydown
  880. }
  881. };
  882. data.class['el-upload--' + listType] = true;
  883. return h(
  884. 'div',
  885. (0, _babelHelperVueJsxMergeProps2.default)([data, {
  886. attrs: { tabindex: '0' }
  887. }]),
  888. [drag ? h(
  889. 'upload-dragger',
  890. {
  891. attrs: { disabled: disabled },
  892. on: {
  893. 'file': uploadFiles
  894. }
  895. },
  896. [this.$slots.default]
  897. ) : this.$slots.default, h(
  898. 'input',
  899. { 'class': 'el-upload__input', attrs: { type: 'file', name: name, multiple: multiple, accept: accept },
  900. ref: 'input', on: {
  901. 'change': handleChange
  902. }
  903. },
  904. []
  905. )]
  906. );
  907. }
  908. };
  909. /***/ }),
  910. /***/ 294:
  911. /***/ (function(module, exports, __webpack_require__) {
  912. "use strict";
  913. exports.__esModule = true;
  914. exports.default = upload;
  915. function getError(action, option, xhr) {
  916. var msg = void 0;
  917. if (xhr.response) {
  918. msg = '' + (xhr.response.error || xhr.response);
  919. } else if (xhr.responseText) {
  920. msg = '' + xhr.responseText;
  921. } else {
  922. msg = 'fail to post ' + action + ' ' + xhr.status;
  923. }
  924. var err = new Error(msg);
  925. err.status = xhr.status;
  926. err.method = 'post';
  927. err.url = action;
  928. return err;
  929. }
  930. function getBody(xhr) {
  931. var text = xhr.responseText || xhr.response;
  932. if (!text) {
  933. return text;
  934. }
  935. try {
  936. return JSON.parse(text);
  937. } catch (e) {
  938. return text;
  939. }
  940. }
  941. function upload(option) {
  942. if (typeof XMLHttpRequest === 'undefined') {
  943. return;
  944. }
  945. var xhr = new XMLHttpRequest();
  946. var action = option.action;
  947. if (xhr.upload) {
  948. xhr.upload.onprogress = function progress(e) {
  949. if (e.total > 0) {
  950. e.percent = e.loaded / e.total * 100;
  951. }
  952. option.onProgress(e);
  953. };
  954. }
  955. var formData = new FormData();
  956. if (option.data) {
  957. Object.keys(option.data).forEach(function (key) {
  958. formData.append(key, option.data[key]);
  959. });
  960. }
  961. formData.append(option.filename, option.file, option.file.name);
  962. xhr.onerror = function error(e) {
  963. option.onError(e);
  964. };
  965. xhr.onload = function onload() {
  966. if (xhr.status < 200 || xhr.status >= 300) {
  967. return option.onError(getError(action, option, xhr));
  968. }
  969. option.onSuccess(getBody(xhr));
  970. };
  971. xhr.open('post', action, true);
  972. if (option.withCredentials && 'withCredentials' in xhr) {
  973. xhr.withCredentials = true;
  974. }
  975. var headers = option.headers || {};
  976. for (var item in headers) {
  977. if (headers.hasOwnProperty(item) && headers[item] !== null) {
  978. xhr.setRequestHeader(item, headers[item]);
  979. }
  980. }
  981. xhr.send(formData);
  982. return xhr;
  983. }
  984. /***/ }),
  985. /***/ 295:
  986. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  987. "use strict";
  988. Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  989. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_upload_dragger_vue__ = __webpack_require__(296);
  990. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_upload_dragger_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_upload_dragger_vue__);
  991. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_9f5d7848_hasScoped_false_preserveWhitespace_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_upload_dragger_vue__ = __webpack_require__(297);
  992. var normalizeComponent = __webpack_require__(0)
  993. /* script */
  994. /* template */
  995. /* template functional */
  996. var __vue_template_functional__ = false
  997. /* styles */
  998. var __vue_styles__ = null
  999. /* scopeId */
  1000. var __vue_scopeId__ = null
  1001. /* moduleIdentifier (server only) */
  1002. var __vue_module_identifier__ = null
  1003. var Component = normalizeComponent(
  1004. __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_upload_dragger_vue___default.a,
  1005. __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_9f5d7848_hasScoped_false_preserveWhitespace_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_upload_dragger_vue__["a" /* default */],
  1006. __vue_template_functional__,
  1007. __vue_styles__,
  1008. __vue_scopeId__,
  1009. __vue_module_identifier__
  1010. )
  1011. /* harmony default export */ __webpack_exports__["default"] = (Component.exports);
  1012. /***/ }),
  1013. /***/ 296:
  1014. /***/ (function(module, exports, __webpack_require__) {
  1015. "use strict";
  1016. exports.__esModule = true;
  1017. //
  1018. //
  1019. //
  1020. //
  1021. //
  1022. //
  1023. //
  1024. //
  1025. //
  1026. //
  1027. //
  1028. //
  1029. //
  1030. exports.default = {
  1031. name: 'ElUploadDrag',
  1032. props: {
  1033. disabled: Boolean
  1034. },
  1035. inject: {
  1036. uploader: {
  1037. default: ''
  1038. }
  1039. },
  1040. data: function data() {
  1041. return {
  1042. dragover: false
  1043. };
  1044. },
  1045. methods: {
  1046. onDragover: function onDragover() {
  1047. if (!this.disabled) {
  1048. this.dragover = true;
  1049. }
  1050. },
  1051. onDrop: function onDrop(e) {
  1052. if (this.disabled || !this.uploader) return;
  1053. var accept = this.uploader.accept;
  1054. this.dragover = false;
  1055. if (!accept) {
  1056. this.$emit('file', e.dataTransfer.files);
  1057. return;
  1058. }
  1059. this.$emit('file', [].slice.call(e.dataTransfer.files).filter(function (file) {
  1060. var type = file.type,
  1061. name = file.name;
  1062. var extension = name.indexOf('.') > -1 ? '.' + name.split('.').pop() : '';
  1063. var baseType = type.replace(/\/.*$/, '');
  1064. return accept.split(',').map(function (type) {
  1065. return type.trim();
  1066. }).filter(function (type) {
  1067. return type;
  1068. }).some(function (acceptedType) {
  1069. if (/\..+$/.test(acceptedType)) {
  1070. return extension === acceptedType;
  1071. }
  1072. if (/\/\*$/.test(acceptedType)) {
  1073. return baseType === acceptedType.replace(/\/\*$/, '');
  1074. }
  1075. if (/^[^\/]+\/[^\/]+$/.test(acceptedType)) {
  1076. return type === acceptedType;
  1077. }
  1078. return false;
  1079. });
  1080. }));
  1081. }
  1082. }
  1083. };
  1084. /***/ }),
  1085. /***/ 297:
  1086. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1087. "use strict";
  1088. var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"el-upload-dragger",class:{
  1089. 'is-dragover': _vm.dragover
  1090. },on:{"drop":function($event){$event.preventDefault();_vm.onDrop($event)},"dragover":function($event){$event.preventDefault();_vm.onDragover($event)},"dragleave":function($event){$event.preventDefault();_vm.dragover = false}}},[_vm._t("default")],2)}
  1091. var staticRenderFns = []
  1092. var esExports = { render: render, staticRenderFns: staticRenderFns }
  1093. /* harmony default export */ __webpack_exports__["a"] = (esExports);
  1094. /***/ }),
  1095. /***/ 45:
  1096. /***/ (function(module, exports) {
  1097. module.exports = require("babel-helper-vue-jsx-merge-props");
  1098. /***/ }),
  1099. /***/ 5:
  1100. /***/ (function(module, exports) {
  1101. module.exports = require("element-ui/lib/mixins/locale");
  1102. /***/ }),
  1103. /***/ 52:
  1104. /***/ (function(module, exports) {
  1105. module.exports = require("element-ui/lib/progress");
  1106. /***/ }),
  1107. /***/ 8:
  1108. /***/ (function(module, exports) {
  1109. module.exports = require("element-ui/lib/mixins/migrating");
  1110. /***/ })
  1111. /******/ });