学生请假学习八

图片上传前端处理

图片先由前端传给后端,然后再给前端返回一个图片的绝对地址,在由前端把这个地址存入数据库中。

 请假列表中的附件栏中需要判断 有没有图片地址   有就进行切割没有就不切割 不让会报错

1:选择图片上传的组件upload   在里面设置上传的地址和成功的回调
<el-form-item>
          <el-upload
            class="upload-demo"
            action="/api/uploads"  //上传的地址
            name="filename"  //上传的文件名
            :on-preview="handlePreview"
            :on-remove="handleRemove"
            :before-remove="beforeRemove"
            multiple
            :on-exceed="handleExceed"
            :file-list="fileList"
            :on-success="success" //成功回调
          >
            <el-button size="small" type="primary">点击上传</el-button>
            <div slot="tip" class="el-upload__tip">
              只能上传jpg/png文件,且不超过500kb
            </div>
          </el-upload>
        </el-form-item>
2:设置回调方法
 success(res, file, fileList){
      console.log(res.url)
    },
3:验证判断是否有附件  在data中加字段  表示选择的图片       和 上传成功的图片 的集合
    return {
      fileList:[],
      selectedList:[],//选择的图片
      uploadList:[],//上传成功的图片
   4:修改上传组件   改成手动上传 和 添加change事件
  <el-upload
            class="upload-demo"
            action="/api/uploads"
            name="filename"
            :on-preview="handlePreview"
            :on-remove="handleRemove"
            :before-remove="beforeRemove"
            multiple
            :on-exceed="handleExceed"
            :file-list="fileList"
            :auto-upload="false"   //取消自动上传
            ref="upload"  //给组件取名字
            :on-success="success"//成功的回调
            :on-change="change"//改变事件

          >
  5:声明change事件
   change(file,fileList){//每次改变触发
      //console.log(fileList);
      this.selectedList = fileList;
    },

6:在提交事件中判断  是否需要上传图片
 if(this.selectedList.length){//判断条件
              this.$refs.upload.submit();//开始图片上传
          }else{
            //没有附件
            leaveinfo.add({ leavereason, start, end }).then(result => {
              let code = result.data.code;
7:修改图片上传成功的回调方法
 success(res, file, fileList){//图片上传的回调
      // console.log("返回结果:"+res.url)
      this.uploadList.push(res.url);//["http://localhost:3000/uploads/1.jpg","http://localhost:3000/uploads/2.jpg"]
      //图片全部上传完成
      if(this.uploadList.length == this.selectedList.length){
        //就可以做数据新增
          let leavereason = this.ruleForm.leavereason;
          let start this.ruleForm.start;
          let end this.ruleForm.end;
          let extend this.uploadList.join("_");
         leaveinfo.add({ leavereason, start, end,extend}).then(result => {
              let code = result.data.code;
              if (code == 1) {
                this.addTableDate({
                  username: window.localStorage.getItem("username"),
                  leavereason,
                  start,
                  end,
                  type: 1,
                  extend
                });
              } else if (code == 2) {
                this.$message.error("权限不够");
              } else {
                this.$message.error(result.data.msg);
              }
            });
            this.$refs["ruleForm"].resetFields();
            this.dialogFormVisible = false;
          }

      }
    },

 图片上传组件

 <el-form-item label="附件" prop="extend">
          <el-upload
            ref="upload"
            class="upload-demo"
            action="/api/uploads"
            name="filename"
            multiple
            :file-list="fileList"
            :on-success="success"
            :on-change="change"
            :auto-upload="false"
            :on-remove="removefile"
          >
            <el-button size="small" type="primary">点击上传</el-button>
            <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
          </el-upload>
        </el-form-item>

组件对应的数据数据

export default {
  data() {
    return {
      fileList: [],
      selectedList: [], //选择的图片
      uploadList: [], //上传成功的图片
      dialogVisible: false,
      ruleForm: {
        reason: "",
        start: "",
        end: "",
        extend: ""
      },

      rules: {
        reason: [
          { required: true, message: "请假理由不能为空", trigger: "blur" }
        ],
        start: [
          { required: true, message: "开始时间不能为空", trigger: "blur" }
        ],
        end: [{ required: true, message: "结束时间不能为空", trigger: "blur" }]
      }
    };
  },
  methods: {
    showDialog() {
      this.dialogVisible = true;
    },
    submitForm() {
      this.$refs.ruleForm.validate(async valid => {
        //表单验证成功 才进行数据请求  去连接接口
        if (valid) {
          let start = new Date(this.ruleForm.start);
          let end = new Date(this.ruleForm.end);
          if (end > start) {
            if (this.selectedList.length) {
              //判断条件
              this.$refs.upload.submit(); //开始图片上传
            } else {
              console.log("时间没有问题");
              let { data } = await leaveModel.add({
                start,
                end,
                reason: this.ruleForm.reason
              });
              if (data.code == 1) {
                this.$emit("additem", data.data[0]);
                this.resetForm();
              } else {
                alert(data.msg);
              }
              console.log(data);
            }
          } else {
            alert("结束时间要比开始时间大");
          }
        } else {
          console.log("error submit!!");
          return false;
        }
      });
    },
    resetForm() {
      this.dialogVisible = false;
      this.$refs.ruleForm.resetFields();
    },
    removefile(file, fileList) {
      this.selectList = fileList;
    },
    change(file, fileList) {
      //每次改变触发
      //console.log(fileList);
      this.selectedList = fileList;
    },

    async success(res, file, fileList) {
      //图片上传的回调
      // console.log("返回结果:"+res.url)
      this.uploadList.push(res.url); //["http://localhost:3000/uploads/1.jpg","http://localhost:3000/uploads/2.jpg"]
      //图片全部上传完成
      if (this.uploadList.length == this.selectedList.length) {
        //就可以做数据新增
        let { data } = await leaveModel.add({
          reason: this.ruleForm.reason,
          start: this.ruleForm.start,
          end: this.ruleForm.end,
          extend: this.uploadList.join("|")
        });
        if (data.code == 1) {
          this.$emit("additem", data.data[0]);
          this.resetForm();
        } else {
          alert(data.msg);
        }
      }
    }
  }
};

 

posted @ 2021-09-03 19:40  JSkolo_yyds  阅读(44)  评论(0编辑  收藏  举报