最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue+element_ui上傳文件,并傳遞額外參數(shù)操作

 更新時(shí)間:2020年12月05日 09:29:01   作者:guan-qing  
這篇文章主要介紹了vue+element_ui上傳文件,并傳遞額外參數(shù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

需求:

1、文件大小驗(yàn)證

2、文件類型驗(yàn)證

3、額外參數(shù)傳輸

<template>
 <el-upload class="upload-demo" action :limit="1" :file-list="formFileList" :http-request="handleUploadForm" :on-exceed="formHandleExceed" :on-remove="formHandleRemove"
 :before-upload="beforeUploadForm" accept=".csv,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel">
    <el-button type="primary">上傳文件</el-button>
    <span slot="tip" class="el-upload__tip" style="margin: 0 10px;">只能上傳xlsx/xls/csv文件,且不超過(guò){{formMaxSize}}M</span>
  </el-upload>
</template>
<script>
export default {
 data () {
 return {
  formMaxSize: 10, // 上傳文件大小
  formFileList: [], // 顯示上傳文件
  uploadFormFileList: [] // 確定上傳文件
 }
 },
 methods: {
 // 開始上傳前驗(yàn)證
 beforeUploadForm (file) {
  // 驗(yàn)證文件大小
  if (file.size / 1024 / 1024 > this.formMaxSize) {
  this.$message({
   message: `上傳文件大小不能超過(guò)${this.formMaxSize}M!`,
   type: 'warning'
  })
  return false
  }
  // 中文亂碼處理
  if (file.raw) {
  let reader = new FileReader() // 讀取文件內(nèi)容
  reader.readAsText(file.raw, 'gb2312') // 防止中文亂碼問(wèn)題,不加reader.onload方法都不會(huì)觸發(fā)
  reader.onload = function (e) {
   this.contentHtml = e.target.result // txt文本內(nèi)容,接下來(lái)就可以對(duì)其進(jìn)行校驗(yàn)處理了
  }
  }
  // 驗(yàn)證文件類型
  var testmsg = file.name.substring(file.name.lastIndexOf('.') + 1)
  const extension = testmsg === 'xlsx' || testmsg === 'xls' || testmsg === 'csv'
  if (!extension) {
  this.$message({
   message: '上傳文件只能是xlsx/xls/csv格式!',
   type: 'warning'
  })
  }
  return extension
 },
 // 移除上傳列表中文件
 formHandleRemove (file, formFileList) {
  let thiz = this
  for (let i = 0; i < thiz.uploadFormFileList.length; i++) {
  if (thiz.uploadFormFileList[i].pname === file.name) {
   thiz.uploadFormFileList.splice(i, 1)
   break
  }
  }
 },
 // 允許上傳文件個(gè)數(shù)驗(yàn)證
 formHandleExceed (files, formFileList) {
  this.$message.warning(`當(dāng)前限制選擇 1 個(gè)文件,本次選擇了 ${files.length} 個(gè)文件,共選擇了 ${files.length + formFileList.length} 個(gè)文件`)
 },
 // 上傳文件
 handleUploadForm (param) {
  let thiz = this
  let formData = new FormData()
  formData.append('uid', '上傳文件編號(hào)') // 額外參數(shù)
  formData.append('files', param.file)
  let loading = thiz.$loading({
  lock: true,
  text: '上傳中,請(qǐng)稍候...',
  spinner: 'el-icon-loading',
  background: 'rgba(0, 0, 0, 0.7)'
  })
  thiz.$axios.post('http://localhost:8080/upload/file', formData).then(({data}) => {
  if (data.statusCode === 233) {
   thiz.$message('上傳文件成功,' + data.message)
   thiz.formFileList = []
   thiz.uploadFormFileList = []
  } else {
   thiz.formFileList = []
   thiz.uploadFormFileList = []
   thiz.$message('上傳文件失敗,' + data.message)
  }
  loading.close()
  })
 }
 }
}
</script>
<style lang="scss" scoped>
</style>

總結(jié):

關(guān)于el-upload中各屬性的配置,可以看element_ui官網(wǎng)

后端接受上傳文件和額外參數(shù):

@RequestParam(value = "uid") String uid, @RequestParam(value = "files") MultipartFile[] files

補(bǔ)充知識(shí):vue利用elementUI上傳文件以及其他參數(shù)的處理方式

將文件自動(dòng)上傳改為false

:auto-upload="false"

點(diǎn)擊保存的時(shí)候,調(diào)用el-upload的上傳方法

代碼如下(封裝的上傳方法)

export function mpp(data) {
 return new Promise(function(resolve, reject) {
  let data = {
   method: "POST",
   url:url,
   data:data
  }
  resolve(axios(data));
 })
}
<template>
<!--導(dǎo)入計(jì)劃 -->
<div class="associationPlan">
 <el-form :model="dataModel" :rules="rules" ref="associationPlan" label-width="100px">
    <el-form-item label="項(xiàng)目名稱:" prop="projectArry">
      <el-cascader :options="listOrgInfoList" v-model="dataModel.projectArry" :props="defaultProp" size="small" placeholder="請(qǐng)選擇項(xiàng)目" style="width:100%;" clearable :disabled="isCompany"></el-cascader>
    </el-form-item>
     <el-form-item label="計(jì)劃級(jí)別:" prop="level">
      <el-select size="small" v-model="dataModel.level" placeholder="請(qǐng)選擇:" clearable style="width:100%;">
        <el-option v-for="(item,index) in planTypeList" :label="item.name" :value="item.number" :key="index"></el-option>
      </el-select>
      <span class="warnInfo" v-if="dataModel.level==1">一級(jí)進(jìn)度計(jì)劃匹配項(xiàng)目總工期,項(xiàng)目下只可建立一個(gè),請(qǐng)確認(rèn)后再添加!</span>
    </el-form-item>
    <el-form-item label="計(jì)劃名稱:" prop="name">
      <el-input v-model.number="dataModel.name" size="small"></el-input>      
    </el-form-item>   
    <el-form-item label="導(dǎo)入計(jì)劃:">
     <el-upload accept=".mpp" style="display:inline-block;vertical-align: top;" ref="uploadAdd" action="" :auto-upload="false" :http-request="uploadImg" :on-success="uploadImgSuccess" :on-remove="handleRemove">
      <el-button size="small" type="success">請(qǐng)選擇文件</el-button>
     </el-upload> 
    </el-form-item>
        
 </el-form>
 <div class="clickBtn">
  <el-button @click="close" size="small">取消</el-button>
  <el-button @click="commit" size="small" type="primary">保存</el-button>
 </div>
</div>
</template>
<script>
import { mapState, mapActions } from 'vuex';
import { plan,mpp} from "../api/system_interface.js";
export default {
 name: "associationPlan",
 data() {
  return {
   dataModel: {
    projectId: '',
    projectArry:[],
    level:null,
    name:'',
    parentId:'0'
   },
   defaultProp: {
    children: "child",
    label: "name",
    value: "id"
   },
   //數(shù)據(jù)校驗(yàn)
   rules: {
    projectArry:  [{ required: true, message: "請(qǐng)選擇項(xiàng)目", trigger: "blur" }],
    name:  [{ required: true, message: "請(qǐng)輸入計(jì)劃名稱", trigger: "blur" }],
    level:  [{ required: true, message: "請(qǐng)選擇計(jì)劃級(jí)別", trigger: "change" }]
   
   },
   file:false,
   isCompany:false 
  };
 },
 computed: {
  ...mapState([
   'listOrgInfoList',
   'planTypeList'
  ]),
 },
 methods: {
   ...mapActions([
   'getlistOrgInfoList'
  ]),
 
  update(){
   let companyTypes = sessionStorage.getItem("companyType");
   this.isCompany = companyTypes == 4?true:false;
   this.dataModel.projectArry = JSON.parse(sessionStorage.getItem("selectArry"));
  },
 
  uploadImg (f) {
    //  if(!f){
    //  this.$message.error("請(qǐng)上傳文件!");
    //  return
    // }
     this.dataModel.projectId = this.dataModel.projectArry[this.dataModel.projectArry.length - 1];
     let param = new FormData(); //創(chuàng)建form對(duì)象
     param.append('file',f.file);//通過(guò)append向form對(duì)象添加數(shù)據(jù)
     param.append('level',this.dataModel.level);//添加form表單中其他數(shù)據(jù)
     param.append('projectId',this.dataModel.projectId);//添加form表單中其他數(shù)據(jù)
     param.append('planName',this.dataModel.name);//添加form表單中其他數(shù)據(jù)
     mpp(param)//上傳
     .then(response=>{
      if(response.code == "200"){
       this.$message.success("上傳成功!");
       this.close();
       this.$emit("refreshData");  
       onSuccess(response.data);     
      }        
     })
     .catch(({err}) => {
      f.onError()
     })  
   },
   uploadImgSuccess(response, file, fileList) {
     // 緩存接口調(diào)用所需的文件路徑
     console.log('文件上傳成功')
    // this.$message.success("上傳成功!");
   },
   handleRemove(file, fileList) {
     // 更新緩存文件
     console.log('文件刪除')
   },
 
  //重置方法
  reset() {
   const associationPlan = this.$refs["associationPlan"];
   associationPlan.resetFields();
   this.dataModel.projectId = null;
   this.dataModel.name = '';
   this.dataModel.level = '';
   this.dataModel.projectArry = [];
  },
 
  //關(guān)閉彈框
  close() {
   this.$emit("close");
   this.reset();
  },
 
  //點(diǎn)擊提交
  commit() {
   this.$refs["associationPlan"].validate(valid => {
    if (!valid) {
     return;
    }
    this.$refs.uploadAdd.submit();
    // this.dataModel.projectId = this.dataModel.projectArry[this.dataModel.projectArry.length - 1];
    // plan(this.dataModel)
    // .then(response => {
    //  if (response.code == "200") {
    //   this.$message.success("添加成功!");
    //   this.close();
    //   this.$emit("refreshData");
    //  } else {
    //   this.$message.error(response.msg);
    //  }
    // })
    // .catch(error => {
    // });
   });
  },
 
 }
};
</script>
<style lang="scss" scoped>
.clickBtn {
 text-align: center;
}
.warnInfo{
 // color: #feba51;
 color: rgb(64, 158, 255);
}
</style>

以上這篇vue+element_ui上傳文件,并傳遞額外參數(shù)操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue3使用transition組件改變DOM屬性的方式小結(jié)

    Vue3使用transition組件改變DOM屬性的方式小結(jié)

    這篇文章主要為大家詳細(xì)介紹了Vue3中使用transition組件改變DOM屬性的常用方式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • 使用Webpack 搭建 Vue3 開發(fā)環(huán)境過(guò)程詳解

    使用Webpack 搭建 Vue3 開發(fā)環(huán)境過(guò)程詳解

    這篇文章主要介紹了使用Webpack 搭建 Vue3 開發(fā)環(huán)境過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 腳手架(vue-cli)創(chuàng)建Vue項(xiàng)目的超詳細(xì)過(guò)程記錄

    腳手架(vue-cli)創(chuàng)建Vue項(xiàng)目的超詳細(xì)過(guò)程記錄

    用vue-cli腳手架可以快速的構(gòu)建出一個(gè)前端vue框架的項(xiàng)目結(jié)構(gòu),下面這篇文章主要給大家介紹了關(guān)于腳手架(vue-cli)創(chuàng)建Vue項(xiàng)目的超詳細(xì)過(guò)程,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 解決Vue.js Devtools未檢測(cè)到Vue實(shí)例的問(wèn)題

    解決Vue.js Devtools未檢測(cè)到Vue實(shí)例的問(wèn)題

    在開發(fā)Vue.js應(yīng)用時(shí),Vue.js Devtools是一個(gè)不可或缺的調(diào)試工具,然而,有時(shí)我們可能會(huì)遇到“Vue.js not detected”的提示,這意味著Vue.js Devtools未能成功識(shí)別和連接到我們的Vue應(yīng)用,本文將詳細(xì)解析這個(gè)問(wèn)題,并提供相應(yīng)的解決步驟與代碼示例,需要的朋友可以參考下
    2024-01-01
  • vue+el-select?多數(shù)據(jù)分頁(yè)搜索組件的實(shí)現(xiàn)

    vue+el-select?多數(shù)據(jù)分頁(yè)搜索組件的實(shí)現(xiàn)

    本文主要介紹了vue+el-select?多數(shù)據(jù)分頁(yè)搜索組件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • vue項(xiàng)目中使用Svg的方法

    vue項(xiàng)目中使用Svg的方法

    本文主要以 vue-cli3 搭建的項(xiàng)目為例,來(lái)聊一下如何在項(xiàng)目中更優(yōu)雅的使用 svg 。感興趣的朋友跟隨小編一起看看吧
    2018-10-10
  • 如何在vue中更優(yōu)雅的封裝第三方組件詳解

    如何在vue中更優(yōu)雅的封裝第三方組件詳解

    在封裝第三方組件中,經(jīng)常會(huì)遇到一個(gè)問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于如何在vue中更優(yōu)雅的封裝第三方組件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 基于Vue3文件拖拽上傳功能實(shí)現(xiàn)

    基于Vue3文件拖拽上傳功能實(shí)現(xiàn)

    這篇文章主要介紹了Vue3文件拖拽上傳功能,支持拖拽到此區(qū)域上傳,支持選擇多個(gè)文件/文件夾,代碼很簡(jiǎn)單,對(duì)vue3拖拽上傳功能感興趣的朋友一起看看吧
    2022-10-10
  • 基于vue3+threejs實(shí)現(xiàn)可視化大屏效果

    基于vue3+threejs實(shí)現(xiàn)可視化大屏效果

    本文主要主要講述對(duì)threejs的一些api進(jìn)行基本的封裝,在vue3項(xiàng)目中來(lái)實(shí)現(xiàn)一個(gè)可視化的3d項(xiàng)目,包含了一些常用的功能,場(chǎng)景、燈光、攝像機(jī)初始化,模型、天空盒的加載,以及鼠標(biāo)點(diǎn)擊和懸浮的事件交互,感興趣的朋友可以參考下
    2023-06-06
  • 淺談Vue.use到底是什么鬼

    淺談Vue.use到底是什么鬼

    這篇文章主要介紹了淺談Vue.use到底是什么鬼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01

最新評(píng)論

吉木乃县| 潼关县| 阿拉善盟| 永川市| 龙江县| 大厂| 德州市| 桑日县| 玉环县| 上蔡县| 军事| 高平市| 虹口区| 南通市| 五河县| 丹江口市| 繁昌县| 南岸区| 武冈市| 黔江区| 荣成市| 贺州市| 兰考县| 宝应县| 二连浩特市| 新干县| 东辽县| 伊金霍洛旗| 泰顺县| 读书| 萨迦县| 荆门市| 西华县| 花莲市| 洛阳市| 高阳县| 大理市| 宁津县| 碌曲县| 分宜县| 蓝田县|