• VUE文件上传删除、图片上传删除、视频上传删除


    来了,来了,最基础的VUE文件上传删除、图片上传删除、视频上传删除的代码真的来了,

    这里使用的是VUE+element组件做的,大家有需要的尽管拿走。

    代码如下:

    <!--  添加产品界面  -->
    <template>
      <el-dialog
        title="添加产品"
        :visible.sync="dialogTableVisible"
        width="70%"
        @close="dialogClose"
        :modal-append-to-body="false"
      >
        <el-form status-icon label-width="100px" class="el-form">
          <div class="basicinformation">
            <span>基础信息</span>
            <el-form-item label="所属公司:" prop="companyAffiliation">
              <el-select v-model="form.companyAffiliation" placeholder="请选择">
                <el-option
                  v-for="item in companyData"
                  :key="item.id"
                  :label="item.name"
                  :value="item.id"
                ></el-option>
              </el-select>
            </el-form-item>
            <el-row :gutter="20">
              <el-col :span="10">
                <el-form-item label="产品线:" prop="productLine">
                  <el-select v-model="form.productLine" placeholder="请选择" @change="productModelListUrl">
                    <el-option
                      v-for="item in productLineData"
                      :key="item.id"
                      :label="item.name"
                      :value="item.id"
                    ></el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="10">
                <el-form-item label="产品型号:" prop="productModel" class="left:300px;">
                  <el-select v-model="form.productModel" placeholder="请选择">
                    <el-option
                      v-for="item in productModelData"
                      :key="item.id"
                      :label="item.name"
                      :value="item.id"
                    ></el-option>
                  </el-select>
                </el-form-item>
              </el-col>
            </el-row>
            <el-form-item label="产品名称:" prop="productName">
              <el-input type="text" style="165px" v-model="form.productName"></el-input>
            </el-form-item>
            <el-row :gutter="20">
              <el-col :span="10">
                <el-form-item label="产品图片:" prop="image">
                  <el-upload
                    accept="image/gif, image/jpg, image/jpeg, image/png, image/svg"
                    list-type="picture-card"
                    style="200px"
                    action
                    :http-request="uploadPicSubmit"
                    :before-upload="beforeUpload"
                    :on-remove="handleRemove"
                    :limit="1"
                    @click.native="uploadClickGetIdx('')"
                  >
                    <i class="el-icon-plus"></i>
                    <div slot="tip" class="el-upload__tip">只能上传jpg/png文件</div>
                  </el-upload>
                </el-form-item>
              </el-col>
              <el-col :span="10">
                <el-form-item label="产品介绍:" prop="productIntroduction">
                  <el-input type="textarea" style="200px" v-model="form.productIntroduction"></el-input>
                </el-form-item>
              </el-col>
            </el-row>
          </div>
          <div class="basicinformation" v-for="(item, index) in addPdf" :key="'info' + index">
            <i class="el-icon-plus clolos" v-show="index === 0" @click="addPdfFile"></i>
            <i class="el-icon-delete clolos rm-icon" v-show="index !== 0" @click="deletePdf(index)"></i>
            <span>新增PDF</span>
            <el-row :gutter="20">
              <el-col :span="10">
                <el-form-item label="语言:" prop="languageId">
                  <el-select v-model="item.languageId" placeholder="请选择">
                    <el-option
                      v-for="i in languageData"
                      :key="i.id + index"
                      :label="i.name"
                      :value="i.id"
                    ></el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="10">
                <el-form-item label="产品类别:" prop="categoryId">
                  <el-select v-model="item.categoryId" placeholder="请选择">
                    <el-option
                      v-for="i in productCategoryData"
                      :key="i.id + index"
                      :label="i.name"
                      :value="i.id"
                    ></el-option>
                  </el-select>
                </el-form-item>
              </el-col>
            </el-row>
            <el-row :gutter="22">
              <el-col :span="10">
                <el-form-item label="彩页名称:" prop="name">
                  <el-input type="text" style="165px" v-model="item.name"></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="6">
                <el-form-item label="彩页图片:" prop="pdfImage">
                  <el-upload
                    accept="image/gif, image/jpg, image/jpeg, image/png, image/svg"
                    class="upload-demo"
                    action
                    style="300px"
                    :http-request="uploadImgSubmit"
                    :before-upload="beforeUpload"
                    :on-remove="handleRemove"
                    :limit="1"
                    @click.native="uploadClickGetIdx(index, 'pic')"
                  >
                    <el-button size="small" type="primary">点击上传</el-button>
                  </el-upload>
                </el-form-item>
              </el-col>
            </el-row>
            <el-form-item label="彩页文件:" prop="fileUrl">
              <el-upload
                accept=".pdf, .word, .excel, .xls, .docx, .xlsx"
                class="upload-demo"
                action
                style="300px"
                :http-request="uploadPdfSubmit"
                :before-upload="beforePdfUpload"
                :on-remove="handleRemovePdf"
                :limit="1"
                @click.native="uploadClickGetIdx(index, 'pdf')"
              >
                <el-button size="small" type="primary">点击上传</el-button>
              </el-upload>
            </el-form-item>
          </div>
          <div class="basicinformation" v-for="(item, index) in addVideo" :key="'info1' + index">
            <i class="el-icon-plus clolos" v-show="index === 0" @click="addvideoFile"></i>
            <i class="el-icon-delete clolos rm-icon" v-show="index !== 0" @click="deleteVideo(index)"></i>
            <span>新增视频信息</span>
            <el-row :gutter="20">
              <el-col :span="10">
                <el-form-item label="语言:" prop="languageId">
                  <el-select v-model="item.languageId" placeholder="请选择">
                    <el-option v-for="i in languageData" :key="i.id" :label="i.name" :value="i.id"></el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="10">
                <el-form-item label="产品类别:" prop="categoryId">
                  <el-select v-model="item.categoryId" placeholder="请选择">
                    <el-option
                      v-for="i in productCategoryData"
                      :key="i.id"
                      :label="i.name"
                      :value="i.id"
                    ></el-option>
                  </el-select>
                </el-form-item>
              </el-col>
            </el-row>
            <el-row :gutter="22">
              <el-col :span="10">
                <el-form-item label="视频名称:" prop="name">
                  <el-input type="text" style="165px" v-model="item.name"></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="6">
                <el-form-item label="视频链接:" prop="hyperlink">
                  <el-input type="text" style="165px" v-model="item.hyperlink"></el-input>
                </el-form-item>
              </el-col>
            </el-row>
            <el-form-item label="视频文件:" prop="videoUrl">
              <el-upload
                accept=".mp4"
                class="avatar-uploader"
                action
                style="300px"
                :http-request="uploadVideoSubmit"
                :before-upload="beforeVideoUpload"
                :on-remove="handleRemoveVideo"
                :limit="1"
                @click.native="uploadClickGetIdx(index, 'video')"
              >
                <el-button size="small" type="primary">点击上传</el-button>
              </el-upload>
            </el-form-item>
          </div>
        </el-form>
        <div slot="footer" class="dialog-footer">
          <el-button type="primary" @click="submitForm">提交</el-button>
          <el-button @click="dialogClose">返回</el-button>
        </div>
      </el-dialog>
    </template>
    <script>
    import selectData from '@/mixins/selectData.js'
    import HeaderNav from '@/components/headerNav'
    export default {
        data() {
            return {
                picIdx: '', // 图片上传时index
                pdfIdx: '', // 文件上传时的index
                videoIdx: '', // 视频上传时的index
                //  productId:'',//产品id
                form: {
                    companyAffiliation: '', // 所属公司
                    productLine: '', // 产品线
                    productModel: '', // 产品型号
                    productName: '', // 产品名称
                    productIntroduction: '', // 公司介绍
                    image: '', // 产品图片
                },
    
                // 新增pdf数据
                addPdf: [
                    {
                        languageId: '', // 语言
                        categoryId: '', // 产品类别
                        name: '', // 彩页名称
                        pdfImage: '', // 彩页图片
                        fileUrl: '', // 彩页文件
                        productId: '', //产品id
                        companyId: '', // 公司id
                    },
                ],
                // 新增视频数据
                addVideo: [
                    {
                        languageId: '', // 语言
                        categoryId: '', // 产品类别
                        name: '', // 视频名称
                        hyperlink: '', // 视频网址
                        videoUrl: '', // 视频文件
                        productId: '', // 产品id
                        companyId: '', // 公司id
                    },
                ],
                dialogTableVisible: true,
            }
        },
        mixins: [selectData],
        components: {
            HeaderNav,
        },
        methods: {
            //提交表单
            submitForm() {
                let params = {
                    companyId: this.form.companyAffiliation, // 所属公司
                    createDate: '',
                    createPeople: '',
                    id: '',
                    image: this.form.image, // 产品图片
                    introduction: this.form.productIntroduction, // 公司介绍
                    name: this.form.productName, // 产品名称
                    productlineId: this.form.productModel
                        ? this.form.productModel
                        : this.form.productLine, // 有产品型号不用传产品线
                }
                // 基础信息提交
                this.$Posting(this.$api.addProductUrl, params).then((res) => {
                    if (res.code === 0) {
                        // 循环pdf数据和视频数据
                        this.addVideo.forEach((i, idx) => {
                            i.productId = res.data.id
                            i.companyId = this.form.companyAffiliation
                        })
                        this.addPdf.forEach((i, idx) => {
                            i.productId = res.data.id
                            i.companyId = this.form.companyAffiliation
                        })
    
                        // 视频信息提交
                        this.$Posting(this.$api.addVideoUrl, this.addVideo).then(
                            (res) => {
                                // pdf信息提交
                                this.$Posting(
                                    this.$api.addPdfUrl,
                                    this.addPdf
                                ).then((res) => {
                                    this.$message.success('新增成功')
                                    this.dialogClose()
                                })
                            }
                        )
                    }
                })
            },
            //添加PDF对象
            addPdfFile() {
                const objPdf = {
                    languageId: '', // 语言
                    categoryId: '', // 产品类别
                    name: '', // 彩页名称
                    pdfImage: '', // 彩页图片
                    fileUrl: '', // 彩页文件
                    productId: '', //产品id
                    companyId: '', // 公司id
                }
    
                this.addPdf.push(objPdf)
            },
            // 删除PDF对象
            deletePdf(n) {
                this.addPdf.splice(n, 1)
            },
            // 添加视频对象
            addvideoFile() {
                const videoPdf = {
                    languageId: '', // 语言
                    categoryId: '', // 产品类别
                    name: '', // 视频名称
                    hyperlink: '', // 视频网址
                    videoUrl: '', // 视频文件
                    productId: '', //产品id
                    companyId: '', // 公司id
                }
                this.addVideo.push(videoPdf)
            },
            // 删除视频对象
            deleteVideo(n) {
                this.addVideo.splice(n, 1)
            },
            // 关闭弹框
            dialogClose() {
                this.$emit('dialogClose')
            },
            // 上传时获取index
            uploadClickGetIdx(idx, type) {
                if (type === 'pic') {
                    // 图片的index
                    this.picIdx = idx
                } else if (type === 'pdf') {
                    // pdf的index
                    this.pdfIdx = idx
                } else if (type === 'video') {
                    // 视频的index
                    this.videoIdx = idx
                }
            },
    
            // 视频自定义上传
            uploadVideoSubmit(file) {
                let uploadFile = new FormData()
                uploadFile.append('file', file.file)
                this.$PostingBlob(this.$api.videoUploadUrl, uploadFile).then(
                    (res) => {
                        if (res.code === 0) {
                            this.addVideo[this.videoIdx].videoUrl = res.data
                        }
                    }
                )
            },
            // 选择视频的校验
            beforeVideoUpload(file) {
                if (file.size / 1024 / 1024 > 128) {
                    this.$message.warning('上传文件不超过128MB')
                    return false
                }
                var ext = file.name.substring(file.name.lastIndexOf('.') + 1)
                const extension = ext === 'mp4'
                if (!extension) {
                    this.$message.warning('上传视频格式只能为mp4')
                    return false
                }
            },
            // 删除视频文件
            handleRemoveVideo() {
                let path = this.addVideo[this.videoIdx].videoUrl
                this.$Posting(this.$api.rmFileUrl, { path }).then((res) => {
                    if (res.code === 0) {
                        this.$message.success('删除成功')
                    }
                })
            },
    
            // PDF图片自定义上传
            uploadImgSubmit(file) {
                let uploadFile = new FormData()
                uploadFile.append('file', file.file)
                this.$PostingBlob(this.$api.picUploadUrl, uploadFile).then(
                    (res) => {
                        if (res.code === 0) {
                            this.addPdf[this.picIdx].pdfImage = res.data
                        }
                    }
                )
            },
            // 文件自定义上传
            uploadPdfSubmit(file) {
                let uploadFile = new FormData()
                uploadFile.append('file', file.file)
                this.$PostingBlob(this.$api.pdfUploadUrl, uploadFile).then(
                    (res) => {
                        if (res.code === 0) {
                            this.addPdf[this.pdfIdx].fileUrl = res.data
                        }
                    }
                )
            },
            // 选择文件的校验
            beforePdfUpload(file) {
                if (file.size / 1024 / 1024 > 10) {
                    this.$message.warning('上传文件不超过10MB')
                    return false
                }
                var ext = file.name.substring(file.name.lastIndexOf('.') + 1)
                const extension =
                    ext === 'pdf' ||
                    ext === 'word' ||
                    ext === 'excel' ||
                    ext === 'docx' ||
                    ext === 'xlsx' ||
                    ext === 'xls'
                if (!extension) {
                    this.$message.warning(
                        '上传文件格式只能为pdf、word、excel、docx、xlsx、xls'
                    )
                    return false
                }
            },
            // 删除彩页文件
            handleRemovePdf() {
                let path = this.addPdf[this.pdfIdx].fileUrl
                this.$Posting(this.$api.rmFileUrl, { path }).then((res) => {
                    if (res.code === 0) {
                        this.$message.success('删除成功')
                    }
                })
            },
    
            // 产品图片自定义上传
            uploadPicSubmit(file) {
                let uploadFile = new FormData()
                uploadFile.append('file', file.file)
                this.$PostingBlob(this.$api.picUploadUrl, uploadFile).then(
                    (res) => {
                        if (res.code === 0) {
                            this.form.image = res.data
                        }
                    }
                )
            },
            // 删除图片时的方法
            handleRemove(file) {
                let path = ''
                if (this.picIdx !== '') {
                    path = this.addPdf[this.picIdx].image
                } else {
                    path = this.form.image
                }
                this.$Posting(this.$api.rmFileUrl, { path }).then((res) => {
                    if (res.code === 0) {
                        this.$message.success('删除成功')
                    }
                })
            },
            // 选择图片的校验
            beforeUpload(file) {
                if (file.size / 1024 / 1024 > 3) {
                    this.$message.warning('上传图片不超过3MB')
                    return false
                }
                var ext = file.name.substring(file.name.lastIndexOf('.') + 1)
                const extension =
                    ext === 'gif' ||
                    ext === 'svg' ||
                    ext === 'jpg' ||
                    ext === 'png' ||
                    ext === 'jpeg'
                if (!extension) {
                    this.$message.warning(
                        '上传图片格式只能为gif、svg、jpg、png/jpeg'
                    )
                    return false
                }
            },
        },
    }
    </script>
    <style lang='less' scoped>
    /deep/.el-dialog {
        margin-top: 7vh !important;
        height: 85%;
        overflow-y: scroll;
        .basicinformation {
            position: relative;
            margin: 0 auto;
            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
             70%;
            padding: 20px;
            margin-bottom: 30px;
            .clolos {
                position: absolute;
                right: -60px;
                top: 50%;
                transform: translateY(-50%);
                 35px;
                height: 35px;
                background: #29affb;
                line-height: 35px;
                text-align: center;
                border-radius: 50%;
                color: #fff;
                z-index: 1;
            }
            .rm-icon {
                background: red;
            }
        }
        .dialog-footer {
            text-align: center;
        }
    }
    </style>

    效果如下:

     其中包括对图片、文件、视频的格式、大小的检验,还有增加一行和删除一行功能,希望可以帮助更多小白们。



  • 相关阅读:
    Java日期时间API系列1-----Jdk7及以前的日期时间类
    Redis设置密码,保护数据安全
    Java SE 8 并发增强
    Java8并发教程:Threads和Executors
    MySQL5.7增量备份恢复全实战
    HashSet HashMap 源码阅读笔记
    操作系统知识点
    Window批处理命令
    JS典型题
    SiteMesh装饰模式
  • 原文地址:https://www.cnblogs.com/bailing80/p/13530291.html
Copyright © 2020-2023  润新知