From df5ab30d3931c5492863092862bd29de812d4d9d Mon Sep 17 00:00:00 2001
From: songhuangfeng123 <shf18767906695@163.com>
Date: 星期二, 29 三月 2022 11:01:57 +0800
Subject: [PATCH] 上传文件

---
 src/views/contingencyplan/uploadImg.vue  |  123 ++++++++++++++++++++
 src/api/emergencyplan.js                 |   13 ++
 src/views/contingencyplan/index.vue      |   58 +++++++--
 src/views/contingencyplan/uploadFile.vue |  131 +++++++++++++++++++++
 4 files changed, 312 insertions(+), 13 deletions(-)

diff --git a/src/api/emergencyplan.js b/src/api/emergencyplan.js
index 465214d..795d6dc 100644
--- a/src/api/emergencyplan.js
+++ b/src/api/emergencyplan.js
@@ -43,4 +43,15 @@
       method: 'post',
       data
     });
-  }
\ No newline at end of file
+  }
+
+export function emergencyPlanUpload(data) {
+    return request({
+        headers:{
+            'Authorization': getToken()
+        },
+        url: process.env.BASE_API+'/emergencyPlan/upload',
+        method: 'post',
+        data
+    });
+}
diff --git a/src/views/contingencyplan/index.vue b/src/views/contingencyplan/index.vue
index bb27234..621c963 100644
--- a/src/views/contingencyplan/index.vue
+++ b/src/views/contingencyplan/index.vue
@@ -56,22 +56,22 @@
       :total="recordTotal"
     >
     </el-pagination>
-    <el-dialog :title="title" :visible.sync="dialogVisible" width="30%">
+    <el-dialog :title="title" :visible.sync="dialogVisible" width="40%">
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="预案名称" prop="name">
           <el-input v-model="form.name"></el-input>
         </el-form-item>
         <el-form-item label="文件类型">
           <el-radio-group v-model="form.fileType">
-            <el-radio label="0">图片</el-radio>
-            <el-radio label="1">文件</el-radio>
+            <el-radio :label=0 >图片</el-radio>
+            <el-radio :label=1 >文件</el-radio>
           </el-radio-group>
         </el-form-item>
         <el-form-item v-if="form.fileType==0" label="图片上传">
-          <el-input ></el-input>
+            <upload-img  v-bind:imgList="form.fileList" @uploadImgSuccess="uploadImgSuccess" @removeImgSuccess="removeImgSuccess"></upload-img>
         </el-form-item>
         <el-form-item label="文件链接" v-if="form.fileType==1">
-          <SingleImageUpload></SingleImageUpload>
+            <upload-file v-bind:url="fileUrl" v-bind:name="fileName" @uploadFileSuccess="uploadFileSuccess" ></upload-file>
         </el-form-item>
         <el-form-item label="备注" prop="remark">
           <el-input v-model="form.remark" :rows="5" type="textarea"></el-input>
@@ -85,7 +85,8 @@
   </div>
 </template>
 <script>
-import SingleImageUpload from "@/components/Upload/singleImage.vue";
+import uploadImg from "@/views/contingencyplan/uploadImg.vue";
+import uploadFile from "@/views/contingencyplan/uploadFile.vue";
 import {
   emergencyPlanList,
   emergencyPlanAdd,
@@ -93,9 +94,13 @@
   emergencyPlanDel,
 } from "@/api/emergencyplan.js";
 export default {
-  components: { SingleImageUpload },
+  components: { uploadImg , uploadFile},
   data() {
     return {
+        name:"111",
+        url:"222",
+        path:"emergencyPlan",
+
       dialogVisible: false,
       title: "",
       pageSize: 10,
@@ -104,7 +109,7 @@
       form: {
         name: "",
         fileType: 0,
-        fileList: [{ fileName: "", fileUrl: "" }],
+        fileList: [],
         remark: "",
       },
       listQuery: {
@@ -114,6 +119,8 @@
           name: "",
         },
       },
+        fileName:"",
+        fileUrl:"",
       list: [],
       rules: {
         name: [
@@ -129,9 +136,33 @@
     this.emergencyPlan();
   },
   methods: {
+
+      uploadFileSuccess(res){
+          this.fileName=res.fileName
+          this.fileUrl=res.fileUrl
+          if (this.fileName=="" || this.fileUrl==""){
+              this.form.fileList=[]
+          }
+          this.form.fileList=[{
+              fileName: this.fileName,
+              fileUrl:this.fileUrl
+          }]
+      },
+
+      uploadImgSuccess(res){
+          let file = {
+              fileUrl : res.fileUrl,
+              fileName : res.fileName
+          }
+          this.form.fileList.push(file)
+      },
+
+      removeImgSuccess(res){
+          this.form.fileList=res.fileList
+      },
+
     async emergencyPlan() {
       var res = await emergencyPlanList(this.listQuery);
-      console.log(res);
       if (res.data.code === "200") {
         this.list = res.data.result.records;
         this.recordTotal = res.data.result.total
@@ -148,18 +179,21 @@
         this.title = "新增";
         this.form = {
           name: "",
-          fileType: "0",
-          fileList: [{ fileName: "", fileUrl: "" }],
+          fileType: 0,
+          fileList: [],
           remark: "",
         };
       } else {
         this.title = "编辑";
         this.form = value;
+        this.fileUrl=value.fileList[0].fileUrl;
+        this.fileName=value.fileList[0].fileName
       }
     },
     addemergencyPlan() {
       this.$refs["form"].validate((valid) => {
         if (valid) {
+            console.log(132,this.form)
           if (this.title === "新增") {
             emergencyPlanAdd(this.form).then((res) => {
               if (res.data.code === "200") {
@@ -231,4 +265,4 @@
   background-color: #034EA2;
   border: 1px solid #034EA2;
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/contingencyplan/uploadFile.vue b/src/views/contingencyplan/uploadFile.vue
new file mode 100644
index 0000000..e4b8006
--- /dev/null
+++ b/src/views/contingencyplan/uploadFile.vue
@@ -0,0 +1,131 @@
+<template>
+  <div style="display: flex">
+      <el-input :disabled="true" type="text" size="medium" v-model="viewName" style="width: 60%" ></el-input>
+      <el-upload
+          v-if="!disabled"
+          action=""
+          multiple
+          :limit="1"
+          :file-list="fileList"
+          :http-request="uploadSectionFile"
+          :show-file-list="false"
+          :before-upload="beforeUpload"
+          :on-success="handleSuccess"
+          :on-error="handleError"
+      >
+          <div style="">
+              <el-button v-if="!fileName" type="primary" size="small" style="margin-left:25px;;width:65px;height:36px;display: flex;align-items: center;justify-content: center">上传<i class="el-icon-upload el-icon--right"></i></el-button>
+          </div>
+      </el-upload>
+
+      <div style="display: flex">
+          <a  v-if="!disabled&&fileName">
+              <el-button @click="downLoadFile(downloadUrl)"  slot="tip" type="primary" size="small" style="margin-left:25px;width:65px;height:36px;display: flex;align-items: center;justify-content: center">
+                  下载<i class="el-icon-download el-icon--right"></i>
+              </el-button>
+          </a>
+          <el-button v-if="!disabled&&fileName" slot="tip" type="primary" size="small  " @click="handleClear" style="margin-left:5px;width:65px;height:36px;display: flex;align-items: center;justify-content: center"
+          >清除<i class="el-icon-delete el-icon--right"></i></el-button>
+      </div>
+  </div>
+</template>
+
+<script>
+
+    import {emergencyPlanUpload} from "@/api/emergencyplan.js";
+
+export default {
+    props: {
+        name: {
+            type: String
+        },
+        url: {
+            type: String
+        },
+        disabled: {
+            type: Boolean
+        }
+    },
+  data() {
+    return {
+        action: '',
+        viewName:'',
+        fileName: '',
+        filePath: '',
+        downloadUrl: '',
+        fileList: [],
+    }
+  },
+    mounted() {
+        setTimeout(() => {
+            this.fileName = this.$props.name;
+            this.downloadUrl = this.$props.url;
+            this.viewName=this.$props.name
+        }, 100);
+    },
+    watch: {
+        name() {
+            this.fileName = this.$props.name;
+            this.downloadUrl = this.$props.url;
+            this.viewName=this.$props.name;
+        }
+    },
+  methods: {
+
+      downLoadFile(fileUrl){
+          console.log(123,fileUrl)
+          let a = document.createElement('a')
+          // a.href = this.defaultUrl+`/upload/downloadNew?path=`+encodeURI(fileUrl)
+          a.href = process.env.BASE_API + '/upload/'+fileUrl
+          a.click();
+      },
+
+      downloadFile(){
+
+      },
+      uploadSectionFile(param) {
+          let form = new FormData();
+          form.append('file', param.file);
+          emergencyPlanUpload(form).then(res=>{
+              if (res.data.code==200){
+                  this.fileName = res.data.result.fileName;
+                  this.viewName=res.data.result.fileName;
+                  this.downloadUrl=res.data.result.fileUrl
+                  this.$nextTick(() => {
+                      this.$emit('uploadFileSuccess', {
+                          fileName: this.fileName,
+                          fileUrl: this.downloadUrl
+                      });
+                  });
+                  this.$message({
+                      type:'success',
+                      message:'上传成功',
+                      duration:2000,
+                  })
+              }else {
+                  this.$message.error('上传失败,系统未知错误!错误码为【500】');
+              }
+          })
+      },
+
+      handleClear(){
+          this.fileName = '';
+          this.fileList = [];
+          this.viewName=""
+          this.$emit('uploadFileSuccess', {
+              fileUrl: '',
+              fileName: ''
+          });
+      },
+
+      beforeUpload(file) {
+      },
+      handleError(err, file, fileList) {
+          this.$message.error('上传失败,系统未知错误!错误码为【500】');
+      },
+      handleSuccess(err, file, fileList) {
+      },
+  }
+}
+</script>
+
diff --git a/src/views/contingencyplan/uploadImg.vue b/src/views/contingencyplan/uploadImg.vue
new file mode 100644
index 0000000..5613f0c
--- /dev/null
+++ b/src/views/contingencyplan/uploadImg.vue
@@ -0,0 +1,123 @@
+<template>
+  <div >
+      <el-upload
+          action=""
+          :disabled="disabled"
+          list-type="picture-card"
+          :file-list="fileList"
+          :http-request="handleUpload"
+          :beforeUpload="beforeUploadImg"
+          :on-success="handleSuccess"
+          :on-error="handleError"
+          :on-preview="handlePreview"
+          :on-remove="handleRemove"
+      >
+          <i  class="el-icon-plus"></i>
+      </el-upload>
+      <el-dialog :visible.sync="dialogVisible" :modal="false">
+          <img width="100%" :src="dialogImageUrl" alt="">
+      </el-dialog>
+  </div>
+</template>
+
+
+<script>
+
+    import {emergencyPlanUpload} from "@/api/emergencyplan.js";
+
+    export default {
+        props: {
+            disabled: {//是否可用
+                type: Boolean,
+                default:false
+            },
+            imgList: {//存储路径
+                type: Array,
+                default:[]
+            },
+        },
+        data() {
+            return {
+                dialogImageUrl: '',
+                dialogVisible: false,
+
+                fileList:[],
+                fileUrl:"",
+                fileName:"",
+
+            };
+        },
+        watch:{},
+        created:function () {},
+        mounted(){
+
+            if (this.imgList!=null){
+                for(let i = 0 ;i < this.imgList.length ; i++){
+                    this.imgList[i].url = process.env.IMG_API + 'emergencyPlan/'+this.imgList[i].fileName
+                    this.fileList.push(this.imgList[i])
+                }
+            }
+        },
+        methods: {
+            handleRemove(file, fileList) {
+                for (let a = 0;a<this.fileList.length;a++){
+                    if(file.uid == this.fileList[a].uid){
+                        this.fileList.splice(a,1);
+                    }
+                }
+                this.$nextTick(() => {
+                    this.$emit('removeImgSuccess', {
+                        fileList:this.fileList
+                    });
+                });
+            },
+            handlePreview(file) {
+                this.dialogImageUrl = file.url;
+                this.dialogVisible = true;
+            },
+            beforeUploadImg(file) {
+                const isJPG = file.type === 'image/jpeg';
+                const isPNG = file.type === 'image/png';
+                if (!isJPG && !isPNG) {
+                    this.$message.error('上传图片只能是 JPG 或者 PNG 格式!');
+                }
+                return (isJPG || isPNG) ;
+            },
+            handleError(err, file, fileList){
+                this.$message.error('上传失败,系统未知错误!错误码为【500】');
+            },
+            handleUpload(param){
+                let formData = new FormData();
+                formData.append('file', param.file); //添加键值
+                emergencyPlanUpload(formData).then(res=>{
+                    if (res.data.code==200){
+                        this.fileUrl = res.data.result.fileUrl
+                        this.fileName = res.data.result.fileName
+                        this.fileList.push(
+                            {
+                                fileUrl: res.data.result.fileUrl,
+                                fileName:res.data.result.fileName,
+                                url:process.env.IMG_API + 'emergencyPlan/'+res.data.result.fileName
+                            }
+                        )
+                        this.$nextTick(() => {
+                            this.$emit('uploadImgSuccess', {
+                                fileName: this.fileName,
+                                fileUrl: this.fileUrl
+                            });
+                        });
+                        this.$message({
+                            type:'success',
+                            message:'上传成功',
+                            duration:2000,
+                        })
+                    } else{
+                        this.$message.error('上传失败,系统未知错误!');
+                    }
+                })
+            },
+            handleSuccess(response, file, fileList) {
+            },
+        }
+    }
+</script>

--
Gitblit v1.9.2