forked from liweijie/education
1 line
18 KiB
JSON
1 line
18 KiB
JSON
{"remainingRequest":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\components\\FileUpload\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\components\\FileUpload\\index.vue","mtime":1787567871500},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js","mtime":1787309793142},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js","mtime":1787309793790}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgeyBnZXRUb2tlbiB9IGZyb20gIkAvdXRpbHMvYXV0aCINCmltcG9ydCBTb3J0YWJsZSBmcm9tICdzb3J0YWJsZWpzJw0KDQpleHBvcnQgZGVmYXVsdCB7DQogIG5hbWU6ICJGaWxlVXBsb2FkIiwNCiAgcHJvcHM6IHsNCiAgICAvLyDlgLwNCiAgICB2YWx1ZTogW1N0cmluZywgT2JqZWN0LCBBcnJheV0sDQogICAgLy8g5LiK5Lyg5o6l5Y+j5Zyw5Z2ADQogICAgYWN0aW9uOiB7DQogICAgICB0eXBlOiBTdHJpbmcsDQogICAgICBkZWZhdWx0OiAiL2NvbW1vbi91cGxvYWQiDQogICAgfSwNCiAgICAvLyDkuIrkvKDmkLrluKbnmoTlj4LmlbANCiAgICBkYXRhOiB7DQogICAgICB0eXBlOiBPYmplY3QNCiAgICB9LA0KICAgIC8vIOaVsOmHj+mZkOWItg0KICAgIGxpbWl0OiB7DQogICAgICB0eXBlOiBOdW1iZXIsDQogICAgICBkZWZhdWx0OiA1DQogICAgfSwNCiAgICAvLyDlpKflsI/pmZDliLYoTUIpDQogICAgZmlsZVNpemU6IHsNCiAgICAgIHR5cGU6IE51bWJlciwNCiAgICAgIGRlZmF1bHQ6IDUNCiAgICB9LA0KICAgIC8vIOaWh+S7tuexu+Weiywg5L6L5aaCWydwbmcnLCAnanBnJywgJ2pwZWcnXQ0KICAgIGZpbGVUeXBlOiB7DQogICAgICB0eXBlOiBBcnJheSwNCiAgICAgIGRlZmF1bHQ6ICgpID0+IFsiZG9jIiwgImRvY3giLCAieGxzIiwgInhsc3giLCAicHB0IiwgInBwdHgiLCAidHh0IiwgInBkZiJdDQogICAgfSwNCiAgICAvLyDmmK/lkKbmmL7npLrmj5DnpLoNCiAgICBpc1Nob3dUaXA6IHsNCiAgICAgIHR5cGU6IEJvb2xlYW4sDQogICAgICBkZWZhdWx0OiB0cnVlDQogICAgfSwNCiAgICAvLyDnpoHnlKjnu4Tku7bvvIjku4Xmn6XnnIvmlofku7bvvIkNCiAgICBkaXNhYmxlZDogew0KICAgICAgdHlwZTogQm9vbGVhbiwNCiAgICAgIGRlZmF1bHQ6IGZhbHNlDQogICAgfSwNCiAgICAvLyDmi5bliqjmjpLluo8NCiAgICBkcmFnOiB7DQogICAgICB0eXBlOiBCb29sZWFuLA0KICAgICAgZGVmYXVsdDogdHJ1ZQ0KICAgIH0NCiAgfSwNCiAgZGF0YSgpIHsNCiAgICByZXR1cm4gew0KICAgICAgbnVtYmVyOiAwLA0KICAgICAgdXBsb2FkTGlzdDogW10sDQogICAgICBiYXNlVXJsOiBwcm9jZXNzLmVudi5WVUVfQVBQX0JBU0VfQVBJLA0KICAgICAgdXBsb2FkRmlsZVVybDogcHJvY2Vzcy5lbnYuVlVFX0FQUF9CQVNFX0FQSSArIHRoaXMuYWN0aW9uLCAvLyDkuIrkvKDmlofku7bmnI3liqHlmajlnLDlnYANCiAgICAgIGhlYWRlcnM6IHsNCiAgICAgICAgQXV0aG9yaXphdGlvbjogIkJlYXJlciAiICsgZ2V0VG9rZW4oKSwNCiAgICAgIH0sDQogICAgICBmaWxlTGlzdDogW10NCiAgICB9DQogIH0sDQogIG1vdW50ZWQoKSB7DQogICAgaWYgKHRoaXMuZHJhZyAmJiAhdGhpcy5kaXNhYmxlZCkgew0KICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gew0KICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy4kcmVmcy51cGxvYWRGaWxlTGlzdD8uJGVsIHx8IHRoaXMuJHJlZnMudXBsb2FkRmlsZUxpc3QNCiAgICAgICAgU29ydGFibGUuY3JlYXRlKGVsZW1lbnQsIHsNCiAgICAgICAgICBnaG9zdENsYXNzOiAnZmlsZS11cGxvYWQtZGFyZycsDQogICAgICAgICAgb25FbmQ6IChldnQpID0+IHsNCiAgICAgICAgICAgIGNvbnN0IG1vdmVkSXRlbSA9IHRoaXMuZmlsZUxpc3Quc3BsaWNlKGV2dC5vbGRJbmRleCwgMSlbMF0NCiAgICAgICAgICAgIHRoaXMuZmlsZUxpc3Quc3BsaWNlKGV2dC5uZXdJbmRleCwgMCwgbW92ZWRJdGVtKQ0KICAgICAgICAgICAgdGhpcy4kZW1pdCgiaW5wdXQiLCB0aGlzLmxpc3RUb1N0cmluZyh0aGlzLmZpbGVMaXN0KSkNCiAgICAgICAgICB9DQogICAgICAgIH0pDQogICAgICB9KQ0KICAgIH0NCiAgfSwNCiAgd2F0Y2g6IHsNCiAgICB2YWx1ZTogew0KICAgICAgaGFuZGxlcih2YWwpIHsNCiAgICAgICAgaWYgKHZhbCkgew0KICAgICAgICAgIGxldCB0ZW1wID0gMQ0KICAgICAgICAgIC8vIOmmluWFiOWwhuWAvOi9rOS4uuaVsOe7hA0KICAgICAgICAgIGNvbnN0IGxpc3QgPSBBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwgOiB0aGlzLnZhbHVlLnNwbGl0KCcsJykNCiAgICAgICAgICAvLyDnhLblkI7lsIbmlbDnu4TovazkuLrlr7nosaHmlbDnu4QNCiAgICAgICAgICB0aGlzLmZpbGVMaXN0ID0gbGlzdC5tYXAoaXRlbSA9PiB7DQogICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICJzdHJpbmciKSB7DQogICAgICAgICAgICAgIGl0ZW0gPSB7IG5hbWU6IGl0ZW0sIHVybDogaXRlbSB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpdGVtLnVpZCA9IGl0ZW0udWlkIHx8IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgdGVtcCsrDQogICAgICAgICAgICByZXR1cm4gaXRlbQ0KICAgICAgICAgIH0pDQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgdGhpcy5maWxlTGlzdCA9IFtdDQogICAgICAgICAgcmV0dXJuIFtdDQogICAgICAgIH0NCiAgICAgIH0sDQogICAgICBkZWVwOiB0cnVlLA0KICAgICAgaW1tZWRpYXRlOiB0cnVlDQogICAgfQ0KICB9LA0KICBjb21wdXRlZDogew0KICAgIC8vIOaYr+WQpuaYvuekuuaPkOekug0KICAgIHNob3dUaXAoKSB7DQogICAgICByZXR1cm4gdGhpcy5pc1Nob3dUaXAgJiYgKHRoaXMuZmlsZVR5cGUgfHwgdGhpcy5maWxlU2l6ZSkNCiAgICB9LA0KICB9LA0KICBtZXRob2RzOiB7DQogICAgLy8g5LiK5Lyg5YmN5qCh5qOA5qC85byP5ZKM5aSn5bCPDQogICAgaGFuZGxlQmVmb3JlVXBsb2FkKGZpbGUpIHsNCiAgICAgIC8vIOagoeajgOaWh+S7tuexu+Weiw0KICAgICAgaWYgKHRoaXMuZmlsZVR5cGUpIHsNCiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUuc3BsaXQoJy4nKQ0KICAgICAgICBjb25zdCBmaWxlRXh0ID0gZmlsZU5hbWVbZmlsZU5hbWUubGVuZ3RoIC0gMV0NCiAgICAgICAgY29uc3QgaXNUeXBlT2sgPSB0aGlzLmZpbGVUeXBlLmluZGV4T2YoZmlsZUV4dCkgPj0gMA0KICAgICAgICBpZiAoIWlzVHlwZU9rKSB7DQogICAgICAgICAgdGhpcy4kbW9kYWwubXNnRXJyb3IoYOaWh+S7tuagvOW8j+S4jeato+ehru+8jOivt+S4iuS8oCR7dGhpcy5maWxlVHlwZS5qb2luKCIvIil95qC85byP5paH5Lu2IWApDQogICAgICAgICAgcmV0dXJuIGZhbHNlDQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIC8vIOagoeajgOaWh+S7tuWQjeaYr+WQpuWMheWQq+eJueauiuWtl+espg0KICAgICAgaWYgKGZpbGUubmFtZS5pbmNsdWRlcygnLCcpKSB7DQogICAgICAgIHRoaXMuJG1vZGFsLm1zZ0Vycm9yKCfmlofku7blkI3kuI3mraPnoa7vvIzkuI3og73ljIXlkKvoi7HmlofpgJflj7chJykNCiAgICAgICAgcmV0dXJuIGZhbHNlDQogICAgICB9DQogICAgICAvLyDmoKHmo4Dmlofku7blpKflsI8NCiAgICAgIGlmICh0aGlzLmZpbGVTaXplKSB7DQogICAgICAgIGNvbnN0IGlzTHQgPSBmaWxlLnNpemUgLyAxMDI0IC8gMTAyNCA8IHRoaXMuZmlsZVNpemUNCiAgICAgICAgaWYgKCFpc0x0KSB7DQogICAgICAgICAgdGhpcy4kbW9kYWwubXNnRXJyb3IoYOS4iuS8oOaWh+S7tuWkp+Wwj+S4jeiDvei2hei/hyAke3RoaXMuZmlsZVNpemV9IE1CIWApDQogICAgICAgICAgcmV0dXJuIGZhbHNlDQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHRoaXMuJG1vZGFsLmxvYWRpbmcoIuato+WcqOS4iuS8oOaWh+S7tu+8jOivt+eojeWAmS4uLiIpDQogICAgICB0aGlzLm51bWJlcisrDQogICAgICByZXR1cm4gdHJ1ZQ0KICAgIH0sDQogICAgLy8g5paH5Lu25Liq5pWw6LaF5Ye6DQogICAgaGFuZGxlRXhjZWVkKCkgew0KICAgICAgdGhpcy4kbW9kYWwubXNnRXJyb3IoYOS4iuS8oOaWh+S7tuaVsOmHj+S4jeiDvei2hei/hyAke3RoaXMubGltaXR9IOS4qiFgKQ0KICAgIH0sDQogICAgLy8g5LiK5Lyg5aSx6LSlDQogICAgaGFuZGxlVXBsb2FkRXJyb3IoZXJyKSB7DQogICAgICB0aGlzLiRtb2RhbC5tc2dFcnJvcigi5LiK5Lyg5paH5Lu25aSx6LSl77yM6K+36YeN6K+VIikNCiAgICAgIHRoaXMuJG1vZGFsLmNsb3NlTG9hZGluZygpDQogICAgfSwNCiAgICAvLyDkuIrkvKDmiJDlip/lm57osIMNCiAgICBoYW5kbGVVcGxvYWRTdWNjZXNzKHJlcywgZmlsZSkgew0KICAgICAgaWYgKHJlcy5jb2RlID09PSAyMDApIHsNCiAgICAgICAgdGhpcy51cGxvYWRMaXN0LnB1c2goeyBuYW1lOiByZXMuZmlsZU5hbWUsIHVybDogcmVzLmZpbGVOYW1lIH0pDQogICAgICAgIHRoaXMudXBsb2FkZWRTdWNjZXNzZnVsbHkoKQ0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdGhpcy5udW1iZXItLQ0KICAgICAgICB0aGlzLiRtb2RhbC5jbG9zZUxvYWRpbmcoKQ0KICAgICAgICB0aGlzLiRtb2RhbC5tc2dFcnJvcihyZXMubXNnKQ0KICAgICAgICB0aGlzLiRyZWZzLmZpbGVVcGxvYWQuaGFuZGxlUmVtb3ZlKGZpbGUpDQogICAgICAgIHRoaXMudXBsb2FkZWRTdWNjZXNzZnVsbHkoKQ0KICAgICAgfQ0KICAgIH0sDQogICAgLy8g5Yig6Zmk5paH5Lu2DQogICAgaGFuZGxlRGVsZXRlKGluZGV4KSB7DQogICAgICB0aGlzLmZpbGVMaXN0LnNwbGljZShpbmRleCwgMSkNCiAgICAgIHRoaXMuJGVtaXQoImlucHV0IiwgdGhpcy5saXN0VG9TdHJpbmcodGhpcy5maWxlTGlzdCkpDQogICAgfSwNCiAgICAvLyDkuIrkvKDnu5PmnZ/lpITnkIYNCiAgICB1cGxvYWRlZFN1Y2Nlc3NmdWxseSgpIHsNCiAgICAgIGlmICh0aGlzLm51bWJlciA+IDAgJiYgdGhpcy51cGxvYWRMaXN0Lmxlbmd0aCA9PT0gdGhpcy5udW1iZXIpIHsNCiAgICAgICAgdGhpcy5maWxlTGlzdCA9IHRoaXMuZmlsZUxpc3QuY29uY2F0KHRoaXMudXBsb2FkTGlzdCkNCiAgICAgICAgdGhpcy51cGxvYWRMaXN0ID0gW10NCiAgICAgICAgdGhpcy5udW1iZXIgPSAwDQogICAgICAgIHRoaXMuJGVtaXQoImlucHV0IiwgdGhpcy5saXN0VG9TdHJpbmcodGhpcy5maWxlTGlzdCkpDQogICAgICAgIHRoaXMuJG1vZGFsLmNsb3NlTG9hZGluZygpDQogICAgICB9DQogICAgfSwNCiAgICAvLyDojrflj5bmlofku7blkI3np7ANCiAgICBnZXRGaWxlTmFtZShuYW1lKSB7DQogICAgICAvLyDlpoLmnpzmmK91cmzpgqPkuYjlj5bmnIDlkI7nmoTlkI3lrZcg5aaC5p6c5LiN5piv55u05o6l6L+U5ZueDQogICAgICBpZiAobmFtZS5sYXN0SW5kZXhPZigiLyIpID4gLTEpIHsNCiAgICAgICAgcmV0dXJuIG5hbWUuc2xpY2UobmFtZS5sYXN0SW5kZXhPZigiLyIpICsgMSkNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiBuYW1lDQogICAgICB9DQogICAgfSwNCiAgICAvLyDlr7nosaHovazmiJDmjIflrprlrZfnrKbkuLLliIbpmpQNCiAgICBsaXN0VG9TdHJpbmcobGlzdCwgc2VwYXJhdG9yKSB7DQogICAgICBsZXQgc3RycyA9ICIiDQogICAgICBzZXBhcmF0b3IgPSBzZXBhcmF0b3IgfHwgIiwiDQogICAgICBmb3IgKGxldCBpIGluIGxpc3QpIHsNCiAgICAgICAgc3RycyArPSBsaXN0W2ldLnVybCArIHNlcGFyYXRvcg0KICAgICAgfQ0KICAgICAgcmV0dXJuIHN0cnMgIT0gJycgPyBzdHJzLnN1YnN0cigwLCBzdHJzLmxlbmd0aCAtIDEpIDogJycNCiAgICB9DQogIH0NCn0NCg=="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/components/FileUpload","sourcesContent":["<template>\r\n <div class=\"upload-file\">\r\n <el-upload\r\n multiple\r\n :action=\"uploadFileUrl\"\r\n :before-upload=\"handleBeforeUpload\"\r\n :file-list=\"fileList\"\r\n :data=\"data\"\r\n :limit=\"limit\"\r\n :on-error=\"handleUploadError\"\r\n :on-exceed=\"handleExceed\"\r\n :on-success=\"handleUploadSuccess\"\r\n :show-file-list=\"false\"\r\n :headers=\"headers\"\r\n class=\"upload-file-uploader\"\r\n ref=\"fileUpload\"\r\n v-if=\"!disabled\"\r\n >\r\n <!-- 上传按钮 -->\r\n <el-button size=\"mini\" type=\"primary\">选取文件</el-button>\r\n <!-- 上传提示 -->\r\n <div class=\"el-upload__tip\" slot=\"tip\" v-if=\"showTip\">\r\n 请上传\r\n <template v-if=\"fileSize\"> 大小不超过 <b style=\"color: #f56c6c\">{{ fileSize }}MB</b> </template>\r\n <template v-if=\"fileType\"> 格式为 <b style=\"color: #f56c6c\">{{ fileType.join(\"/\") }}</b> </template>\r\n 的文件\r\n </div>\r\n </el-upload>\r\n\r\n <!-- 文件列表 -->\r\n <transition-group ref=\"uploadFileList\" class=\"upload-file-list el-upload-list el-upload-list--text\" name=\"el-fade-in-linear\" tag=\"ul\">\r\n <li :key=\"file.url\" class=\"el-upload-list__item ele-upload-list__item-content\" v-for=\"(file, index) in fileList\">\r\n <el-link :href=\"`${baseUrl}${file.url}`\" :underline=\"false\" target=\"_blank\">\r\n <span class=\"el-icon-document\"> {{ getFileName(file.name) }} </span>\r\n </el-link>\r\n <div class=\"ele-upload-list__item-content-action\">\r\n <el-link :underline=\"false\" @click=\"handleDelete(index)\" type=\"danger\" v-if=\"!disabled\">删除</el-link>\r\n </div>\r\n </li>\r\n </transition-group>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { getToken } from \"@/utils/auth\"\r\nimport Sortable from 'sortablejs'\r\n\r\nexport default {\r\n name: \"FileUpload\",\r\n props: {\r\n // 值\r\n value: [String, Object, Array],\r\n // 上传接口地址\r\n action: {\r\n type: String,\r\n default: \"/common/upload\"\r\n },\r\n // 上传携带的参数\r\n data: {\r\n type: Object\r\n },\r\n // 数量限制\r\n limit: {\r\n type: Number,\r\n default: 5\r\n },\r\n // 大小限制(MB)\r\n fileSize: {\r\n type: Number,\r\n default: 5\r\n },\r\n // 文件类型, 例如['png', 'jpg', 'jpeg']\r\n fileType: {\r\n type: Array,\r\n default: () => [\"doc\", \"docx\", \"xls\", \"xlsx\", \"ppt\", \"pptx\", \"txt\", \"pdf\"]\r\n },\r\n // 是否显示提示\r\n isShowTip: {\r\n type: Boolean,\r\n default: true\r\n },\r\n // 禁用组件(仅查看文件)\r\n disabled: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 拖动排序\r\n drag: {\r\n type: Boolean,\r\n default: true\r\n }\r\n },\r\n data() {\r\n return {\r\n number: 0,\r\n uploadList: [],\r\n baseUrl: process.env.VUE_APP_BASE_API,\r\n uploadFileUrl: process.env.VUE_APP_BASE_API + this.action, // 上传文件服务器地址\r\n headers: {\r\n Authorization: \"Bearer \" + getToken(),\r\n },\r\n fileList: []\r\n }\r\n },\r\n mounted() {\r\n if (this.drag && !this.disabled) {\r\n this.$nextTick(() => {\r\n const element = this.$refs.uploadFileList?.$el || this.$refs.uploadFileList\r\n Sortable.create(element, {\r\n ghostClass: 'file-upload-darg',\r\n onEnd: (evt) => {\r\n const movedItem = this.fileList.splice(evt.oldIndex, 1)[0]\r\n this.fileList.splice(evt.newIndex, 0, movedItem)\r\n this.$emit(\"input\", this.listToString(this.fileList))\r\n }\r\n })\r\n })\r\n }\r\n },\r\n watch: {\r\n value: {\r\n handler(val) {\r\n if (val) {\r\n let temp = 1\r\n // 首先将值转为数组\r\n const list = Array.isArray(val) ? val : this.value.split(',')\r\n // 然后将数组转为对象数组\r\n this.fileList = list.map(item => {\r\n if (typeof item === \"string\") {\r\n item = { name: item, url: item }\r\n }\r\n item.uid = item.uid || new Date().getTime() + temp++\r\n return item\r\n })\r\n } else {\r\n this.fileList = []\r\n return []\r\n }\r\n },\r\n deep: true,\r\n immediate: true\r\n }\r\n },\r\n computed: {\r\n // 是否显示提示\r\n showTip() {\r\n return this.isShowTip && (this.fileType || this.fileSize)\r\n },\r\n },\r\n methods: {\r\n // 上传前校检格式和大小\r\n handleBeforeUpload(file) {\r\n // 校检文件类型\r\n if (this.fileType) {\r\n const fileName = file.name.split('.')\r\n const fileExt = fileName[fileName.length - 1]\r\n const isTypeOk = this.fileType.indexOf(fileExt) >= 0\r\n if (!isTypeOk) {\r\n this.$modal.msgError(`文件格式不正确,请上传${this.fileType.join(\"/\")}格式文件!`)\r\n return false\r\n }\r\n }\r\n // 校检文件名是否包含特殊字符\r\n if (file.name.includes(',')) {\r\n this.$modal.msgError('文件名不正确,不能包含英文逗号!')\r\n return false\r\n }\r\n // 校检文件大小\r\n if (this.fileSize) {\r\n const isLt = file.size / 1024 / 1024 < this.fileSize\r\n if (!isLt) {\r\n this.$modal.msgError(`上传文件大小不能超过 ${this.fileSize} MB!`)\r\n return false\r\n }\r\n }\r\n this.$modal.loading(\"正在上传文件,请稍候...\")\r\n this.number++\r\n return true\r\n },\r\n // 文件个数超出\r\n handleExceed() {\r\n this.$modal.msgError(`上传文件数量不能超过 ${this.limit} 个!`)\r\n },\r\n // 上传失败\r\n handleUploadError(err) {\r\n this.$modal.msgError(\"上传文件失败,请重试\")\r\n this.$modal.closeLoading()\r\n },\r\n // 上传成功回调\r\n handleUploadSuccess(res, file) {\r\n if (res.code === 200) {\r\n this.uploadList.push({ name: res.fileName, url: res.fileName })\r\n this.uploadedSuccessfully()\r\n } else {\r\n this.number--\r\n this.$modal.closeLoading()\r\n this.$modal.msgError(res.msg)\r\n this.$refs.fileUpload.handleRemove(file)\r\n this.uploadedSuccessfully()\r\n }\r\n },\r\n // 删除文件\r\n handleDelete(index) {\r\n this.fileList.splice(index, 1)\r\n this.$emit(\"input\", this.listToString(this.fileList))\r\n },\r\n // 上传结束处理\r\n uploadedSuccessfully() {\r\n if (this.number > 0 && this.uploadList.length === this.number) {\r\n this.fileList = this.fileList.concat(this.uploadList)\r\n this.uploadList = []\r\n this.number = 0\r\n this.$emit(\"input\", this.listToString(this.fileList))\r\n this.$modal.closeLoading()\r\n }\r\n },\r\n // 获取文件名称\r\n getFileName(name) {\r\n // 如果是url那么取最后的名字 如果不是直接返回\r\n if (name.lastIndexOf(\"/\") > -1) {\r\n return name.slice(name.lastIndexOf(\"/\") + 1)\r\n } else {\r\n return name\r\n }\r\n },\r\n // 对象转成指定字符串分隔\r\n listToString(list, separator) {\r\n let strs = \"\"\r\n separator = separator || \",\"\r\n for (let i in list) {\r\n strs += list[i].url + separator\r\n }\r\n return strs != '' ? strs.substr(0, strs.length - 1) : ''\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.file-upload-darg {\r\n opacity: 0.5;\r\n background: #c8ebfb;\r\n}\r\n.upload-file-uploader {\r\n margin-bottom: 5px;\r\n}\r\n.upload-file-list .el-upload-list__item {\r\n border: 1px solid #e4e7ed;\r\n line-height: 2;\r\n margin-bottom: 10px;\r\n position: relative;\r\n}\r\n.upload-file-list .ele-upload-list__item-content {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n color: inherit;\r\n}\r\n.ele-upload-list__item-content-action .el-link {\r\n margin-right: 10px;\r\n}\r\n</style>\r\n"]}]} |