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 = ''; /******/ // Load entry module and return exports /******/ /******/ /******/ return __webpack_require__((__webpack_require__.s = 22)); /******/ })( /************************************************************************/ /******/ { /***/ 22: /***/ function (module, exports, __webpack_require__) { 'use strict'; Component({ options: { addGlobalClass: true, }, properties: { title: { type: String, value: '', }, titleClass: { type: 'String', value: '', }, sizeType: { type: Array, value: ['original', 'compressed'], }, sourceType: { type: Array, value: ['album', 'camera'], }, maxSize: { type: Number, value: 5 * 1024 * 1024, }, maxCount: { // 最多上传多少个文件 type: Number, value: 1, }, countInfo: { type: String, value: '', }, files: { // 当前的图片列表, {url, error, loading} type: Array, value: [], observer(newVal) { this.setData({ currentFiles: newVal, }); }, }, select: { // 过滤某个文件 type: null, value: null, }, upload: { // 返回Promise的一个文件上传的函数 type: null, value: () => {}, }, tips: { type: String, value: '', }, extClass: { type: String, value: '', }, showDelete: { // 是否显示delete按钮 type: Boolean, value: true, }, allowFiles: { // 是否允许选择图片之外的其他格式文件 type: Boolean, value: false, }, }, data: { currentFiles: [], showPreview: false, previewImageUrls: [], groups: [ { text: '选择图片', value: 0, }, { text: '从聊天记录选择文件', value: 1, }, ], }, ready() {}, methods: { showActionSheet() { if (this.data.allowFiles) { this.setData({ showSheet: true, }); } else { this.chooseImage(); } }, previewImage(e) { const { index } = e.currentTarget.dataset; const f = this.data.files[index]; const previewImageUrls = this.data.files .filter(f => f.type == 'image') .map(f => f.url); const i = previewImageUrls.indexOf(f.url); this.setData({ previewImageUrls, previewCurrent: i, showPreview: true, }); }, previewFile(e) { const { index } = e.currentTarget.dataset; const file = this.data.files[index]; wx.openDocument({ filePath: file.url, }); }, actionClick(e) { switch (e.detail.value) { case 0: this.chooseImage(); break; case 1: this.chooseMessageFile(); break; default: this.chooseImage(); break; } this.setData({ showSheet: false, }); }, chooseImage() { if (this.uploading) return; wx.chooseMedia({ count: this.data.maxCount - this.data.files.length, sizeType: ['compressed'], mediaType: ['image'], success: res => { console.log('chooseImage resp', res); // 首先检查文件大小 let invalidIndex = -1; // @ts-ignore res.tempFilePaths = res.tempFiles.map( item => item.tempFilePath, ); res.tempFiles.forEach((item, index) => { if (item.size > this.data.maxSize) { invalidIndex = index; } }); if (typeof this.data.select === 'function') { const ret = this.data.select(res); if (ret === false) { return; } } if (invalidIndex >= 0) { this.triggerEvent( 'fail', { type: 1, errMsg: `chooseImage:fail size exceed ${this.data.maxSize}`, total: res.tempFilePaths.length, index: invalidIndex, }, {}, ); return; } // 获取文件内容 const mgr = wx.getFileSystemManager(); const contents = res.tempFilePaths.map(item => { // @ts-ignore const fileContent = mgr.readFileSync(item); return fileContent; }); const obj = { tempFilePaths: res.tempFilePaths, tempFiles: res.tempFiles, contents, }; // 触发选中的事件,开发者根据内容来上传文件,上传了把上传的结果反馈到files属性里面 this.triggerEvent('select', obj, {}); let files = res.tempFiles.map((item, i) => ({ loading: true, url: item.tempFilePath, type: item.fileType, })); //压缩图片 wx.compressImage({ src: files[0].url, quality: 20, success(data) { console.log('compressImage', data); }, fail() {}, }); if (!files || !files.length) return; const newFiles = this.data.files.concat(files); this.setData({ files: newFiles, currentFiles: newFiles, }); this.triggerEvent( 'uploadImg', { newFiles, }, {}, ); }, fail: fail => { if (fail.errMsg.indexOf('chooseImage:fail cancel') >= 0) { this.triggerEvent('cancel', {}, {}); return; } fail.type = 2; this.triggerEvent('fail', fail, {}); }, }); }, chooseMessageFile() { if (this.uploading) return; wx.chooseMessageFile({ count: this.data.maxCount - this.data.files.length, type: 'file', extension: [ 'xls', 'xlsx', 'csv', 'doc', 'docx', 'pdf', 'ppt', 'pptx', ], success: res => { console.log('chooseMessageFile', res); // 首先检查文件大小 let invalidIndex = -1; // @ts-ignore res.tempFilePaths = res.tempFiles.map(item => item.path); res.tempFiles.forEach((item, index) => { if (item.size > this.data.maxSize) { invalidIndex = index; } }); if (typeof this.data.select === 'function') { const ret = this.data.select(res); if (ret === false) { return; } } if (invalidIndex >= 0) { this.triggerEvent( 'fail', { type: 1, errMsg: `chooseMessageFile:fail size exceed ${this.data.maxSize}`, total: res.tempFilePaths.length, index: invalidIndex, }, {}, ); return; } // 获取文件内容 const mgr = wx.getFileSystemManager(); const contents = res.tempFilePaths.map(item => { // @ts-ignore const fileContent = mgr.readFileSync(item); return fileContent; }); const obj = { tempFilePaths: res.tempFilePaths, tempFiles: res.tempFiles, contents, }; // 触发选中的事件,开发者根据内容来上传文件,上传了把上传的结果反馈到files属性里面 this.triggerEvent('select', obj, {}); let files = res.tempFiles.map((item, i) => { // 判断文件类型,对应不同样式 const list = item.name.split('.'); const ext = list[list.length - 1]; let extensionClass = ''; switch (ext) { case 'xls': case 'xlsx': case 'csv': extensionClass = 'file_xlsx'; break; case 'doc': case 'docx': extensionClass = 'file_word'; break; case 'pdf': extensionClass = 'file_pdf'; break; case 'ppt': case 'pptx': extensionClass = 'file_ppt'; break; default: break; } // 文件大小格式化 let size = parseInt(item.size / 1024); if (size > 1024) { size = (size / 1024).toFixed(1) + ' MB'; } else { size += ' KB'; } return { loading: true, url: item.path, name: item.name, ext: ext ?? '', styleClass: extensionClass, type: item.type, time: item.time, size, }; }); if (!files || !files.length) return; const newFiles = this.data.files.concat(files); this.setData({ files: newFiles, currentFiles: newFiles, }); this.triggerEvent( 'uploadImg', { newFiles, }, {}, ); }, }); }, deletePic(e) { const index = e.detail.index; this._delete(index); }, deleteFile(e) { const { index } = e.currentTarget.dataset; this._delete(index); }, _delete(index) { const files = this.data.files; const file = files.splice(index, 1); this.setData({ files, currentFiles: files, }); this.triggerEvent('delete', { index, item: file[0], }); }, }, }); /***/ }, /******/ }, );