对比新文件 |
| | |
| | | <template> |
| | | <div> |
| | | <el-upload |
| | | :action="uploadImgUrl" |
| | | :data="uploadData" |
| | | list-type="picture-card" |
| | | :file-list="fileList" |
| | | accept=".jpg,.png" |
| | | :before-upload="beforeUpload" |
| | | :on-success="uploadSuccess" |
| | | :on-error="fail" |
| | | > |
| | | <i class="el-icon-plus icon"></i> |
| | | <div slot="file" slot-scope="{file}"> |
| | | <img |
| | | class="el-upload-list__item-thumbnail" |
| | | :src="file.url" alt="" |
| | | style="width: 100px;height: 100px;" |
| | | > |
| | | <span class="el-upload-list__item-actions"> |
| | | <span |
| | | class="el-upload-list__item-preview" |
| | | @click="handlePictureCardPreview(file)" |
| | | > |
| | | <i class="el-icon-zoom-in"></i> |
| | | </span> |
| | | <span |
| | | class="el-upload-list__item-delete" |
| | | @click="handleRemove(file)" |
| | | > |
| | | <i class="el-icon-delete"></i> |
| | | </span> |
| | | </span> |
| | | </div> |
| | | </el-upload> |
| | | <el-image-viewer |
| | | v-if="showViewer" |
| | | :on-close="closeViewer" |
| | | :initialIndex="tempIndex" |
| | | :url-list="srcList" |
| | | :z-index="3000" |
| | | /> |
| | | </div> |
| | | |
| | | </template> |
| | | |
| | | <script> |
| | | import ElImageViewer from 'element-ui/packages/image/src/image-viewer' |
| | | export default { |
| | | components: { |
| | | ElImageViewer |
| | | }, |
| | | props: { |
| | | fileList: { |
| | | type: Array, |
| | | default: () => [] |
| | | }, |
| | | uploadData: Object, |
| | | }, |
| | | data() { |
| | | return { |
| | | uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/web/public/uploadLocal', |
| | | realList: [], |
| | | srcList: [], |
| | | tempIndex: 0, |
| | | showViewer: false, |
| | | } |
| | | }, |
| | | watch: { |
| | | fileList: { |
| | | handler(val) { |
| | | console.log(val); |
| | | if (val.length==0) { |
| | | this.realList = [] |
| | | this.srcList = [] |
| | | } |
| | | } |
| | | |
| | | } |
| | | }, |
| | | methods: { |
| | | beforeUpload(file) { |
| | | this.$emit('beginUpload') |
| | | return true |
| | | }, |
| | | // 涓婁紶鍥剧墖鎴愬姛 |
| | | uploadSuccess (res, file, fileList) { |
| | | // console.log('this.fileList', this.fileList); |
| | | // console.log('fileList', fileList); |
| | | this.$emit('uploadEnd') |
| | | this.realList = fileList |
| | | this.srcList.push(res.data.url) |
| | | // console.log('file', file); |
| | | if (res.code === 200) { |
| | | this.fileList.push( |
| | | { |
| | | fileurl: res.data.imgaddr, |
| | | name: res.data.originname, |
| | | url: res.data.url |
| | | } |
| | | ) |
| | | } else { |
| | | this.$message.error(res.msg || '涓婁紶澶辫触') |
| | | } |
| | | }, |
| | | fail (err, file, fileList) { |
| | | this.$emit('uploadEnd') |
| | | this.$message.error('涓婁紶澶辫触') |
| | | }, |
| | | handlePictureCardPreview(file) { |
| | | // this.tempIndex = this.srcList.findIndex(item => item == file.response.data.url ) |
| | | // console.log(file); |
| | | this.tempIndex = this.fileList.findIndex(item => item.url == file.url ) |
| | | // console.log( this.tempIndex); |
| | | this.srcList = this.fileList.map(item => item.url) |
| | | this.showViewer = true |
| | | }, |
| | | closeViewer() { |
| | | this.showViewer = false |
| | | }, |
| | | handleRemove(file) { |
| | | console.log(this.fileList); |
| | | let tempIndex = this.realList.findIndex(item => item.url === file.url) |
| | | // debugger |
| | | this.realList.splice(tempIndex, 1) |
| | | this.fileList.splice(tempIndex, 1) |
| | | this.srcList.splice(tempIndex, 1) |
| | | |
| | | } |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | ::v-deep .el-upload--picture-card{ |
| | | width: 90px !important; |
| | | height: 90px !important; |
| | | } |
| | | ::v-deep .el-upload-list__item { |
| | | width: 90px !important; |
| | | height: 90px !important; |
| | | } |
| | | .icon { |
| | | -webkit-transform: translate(-50%,-50%); |
| | | -ms-transform: translate(-50%,-50%); |
| | | transform: translate(0%, -85%); |
| | | } |
| | | ::v-deep .el-upload-list__item { |
| | | width: 90px !important; |
| | | height: 90px !important; |
| | | } |
| | | </style> |
| | | |