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

詳解Vue ElementUI手動上傳excel文件到服務(wù)器

 更新時間:2021年05月12日 09:23:08   作者:sugar_coffee  
這篇文章主要介紹了詳解Vue ElementUI手動上傳excel文件到服務(wù)器,對ElementUI感興趣的同學(xué),可以參考下

概述

具體需求場景如下:

選擇excel文件后,需要把導(dǎo)入的excel文件手動上傳到后臺服務(wù)器,并將導(dǎo)入成功后的統(tǒng)計結(jié)果顯示出來。官網(wǎng)也有手動上傳的示例,通過 action="url" 傳入地址的方式,但在實際項目中請求需要自己配置,下面具體說明實現(xiàn)的方法。

說明:

在上傳文件到展示統(tǒng)計結(jié)果,我們后端給了兩個接口:首先調(diào)用文件上傳接口,上傳成功后,根據(jù)后端返回的mark再調(diào)用統(tǒng)計結(jié)果接口。

屬性設(shè)置

.vue文件

<el-row>
    <div class="el-form-item__content">
        <el-upload ref="upload"
            accept=".xls,.xlsx"
            action="#"
            :auto-upload="false"
            :multiple="false"
            :file-list="fileList"
            :before-upload="beforeUpload"
            :http-request="uploadHttpRequest"
            :on-remove="fileRemove"
            :on-change="fileChange">
            <el-button size="small" type="primary">選擇文件</el-button>
            <div slot="tip" class="el-upload__tip">一次只能上傳一個xls/xlsx文件,且不超過10M</div>
        </el-upload>
    </div>
</el-row>
<el-row>
    <el-button size="small" @click="closeDialog">取 消</el-button>
    <el-button type="primary" size="small" @click="submitUpload">上 傳</el-button>
    <el-button type="primary" size="small" @click="downloadRes">下載反饋結(jié)果</el-button>
</el-row>

其中:

  • action:上傳的地址,可以不用過多關(guān)注,但也不建議刪除,可用普通字符串代替
  • auto-upload:是否自動上傳,因這里是手動上傳,所以設(shè)置為false
  • multiple:是否支持多選,此處設(shè)置為 false
  • file-list:上傳的文件列表數(shù)組
  • before-upload:上傳文件之前的鉤子,參數(shù)為上傳的文件,可以在這里判斷上傳文件的類型,文件大小等
  • http-request:自定義上傳的方法,會覆蓋默認的上傳行為(即action="url")
  • on-remove:上傳文件移除時觸發(fā)的方法
  • on-change:上傳文件狀態(tài)(添加,上傳成功或失?。└淖儠r觸發(fā)的方法

處理邏輯

邏輯處理代碼如下:

methods: {
    // 上傳文件之前的鉤子:判斷上傳文件格式、大小等,若返回false則停止上傳
    beforeUpload(file) {
        //文件類型
        const isType = file.type === 'application/vnd.ms-excel'
        const isTypeComputer = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        const fileType = isType || isTypeComputer
        if(!fileType) {
            this.$message.error('上傳文件只能是xls/xlsx格式!')
        }

        // 文件大小限制為10M
        const fileLimit = file.size / 1024 / 1024 < 10;
        if(!fileLimit) {
            this.$message.error('上傳文件大小不超過10M!');
        }
        return fileType && fileLimit
    },
    // 自定義上傳方法,param是默認參數(shù),可以取得file文件信息,具體信息如下圖
    uploadHttpRequest(param) {
        const formData = new FormData() //FormData對象,添加參數(shù)只能通過append('key', value)的形式添加
        formData.append('file', param.file) //添加文件對象
        formData.append('uploadType', this.rulesType)
        const url = `${this.myBaseURL}/operation/ruleImport/importData` //上傳地址
        axios.post(url, formData)
            .then( res => {
                const { data: { code, mark } } = res
                if(code === 0) {
                    param.onSuccess()  // 上傳成功的文件顯示綠色的對勾
                    this.uploadMark = mark
                }
                return this.countData(this.uploadMark) //根據(jù)響應(yīng)的 mark 值調(diào)用統(tǒng)計結(jié)果接口,返回一個promise以便進行鏈式調(diào)用
            })
            .then( res => { //鏈式調(diào)用,統(tǒng)計結(jié)果的響應(yīng)
                const { data: { code, data } } = res
                if(code === 0) {
                    console.log('統(tǒng)計結(jié)果', data)
                }
            })
            .catch( err => {
                console.log('失敗', err)
                param.onError() //上傳失敗的文件會從文件列表中刪除
            })
    },
    // 統(tǒng)計結(jié)果
    countFile(mark) {
        return new Promise((resolve, reject) => {
            axios
                .get(`/operation/ruleImport/countData?mark=${mark}`)
                .then(res => {
                    resolve(res)
                })
                .catch(error => {
                    reject(error)
                })
        })
    },
    // 點擊上傳:手動上傳到服務(wù)器,此時會觸發(fā)組件的http-request
    submitUpload() {
        this.$refs.upload.submit()
    },
    // 文件發(fā)生改變
    fileChange(file, fileList) {
        if (fileList.length > 0) {
            this.fileList = [fileList[fileList.length - 1]] // 展示最后一次選擇的文件
        }
    },
    // 移除選擇的文件
    fileRemove(file, fileList) {
        if(fileList.length < 1) {
            this.uploadDisabled = true //未選擇文件則禁用上傳按鈕
        }
    },
    // 取消
    closeDialog() {
        this.$refs.upload.clearFiles() //清除上傳文件對象
        this.fileList = [] //清空選擇的文件列表
        this.$emit('close', false)
    }
}

http-request 的param參數(shù),打印結(jié)果如圖。通過param.file取得當(dāng)前文件對象。

以上就是詳解Vue ElementUI手動上傳excel文件到服務(wù)器的詳細內(nèi)容,更多關(guān)于Vue ElementUI手動上傳excel文件到服務(wù)器的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue2.0項目集成Cesium的實現(xiàn)方法

    vue2.0項目集成Cesium的實現(xiàn)方法

    這篇文章主要介紹了vue2.0項目集成Cesium的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • vue3 組合式API defineEmits() 與 emits 組件選項詳解

    vue3 組合式API defineEmits() 與 emits 組

    在Vue中,defineEmits()是Vue3組合式API中用于聲明自定義事件的,而emits選項則用于Vue2和Vue3的選項式API中,defineEmits()允許使用字符串?dāng)?shù)組或?qū)ο笮问铰暶魇录?emits選項也支持這兩種形式,且驗證函數(shù)可以驗證事件參數(shù),這兩種方法都是為了更規(guī)范地在組件間通信
    2024-09-09
  • 如何使用fetchEventSource實現(xiàn)sse流式請求

    如何使用fetchEventSource實現(xiàn)sse流式請求

    這篇文章主要介紹了如何使用fetchEventSource實現(xiàn)sse流式請求問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Vue 3 中使用 OpenLayers 實時顯示 zoom 及四角坐標的實現(xiàn)代碼

    Vue 3 中使用 OpenLayers 實時顯示 zoom 

    本文介紹了如何在 Vue 3 中使用 OpenLayers 來獲取地圖的 zoom 值以及四角坐標信息,并實時更新數(shù)據(jù),這種方式可以用于 GIS 應(yīng)用開發(fā),幫助用戶更好地了解當(dāng)前地圖范圍,感興趣的朋友一起看看吧
    2025-04-04
  • Vue中封裝input組件的實例詳解

    Vue中封裝input組件的實例詳解

    這篇文章主要介紹了Vue中封裝input組件的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • 使用VueRouter的addRoutes方法實現(xiàn)動態(tài)添加用戶的權(quán)限路由

    使用VueRouter的addRoutes方法實現(xiàn)動態(tài)添加用戶的權(quán)限路由

    這篇文章主要介紹了使用VueRouter的addRoutes方法實現(xiàn)動態(tài)添加用戶的權(quán)限路由,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • 淺談一下Vue生命周期中mounted和created的區(qū)別

    淺談一下Vue生命周期中mounted和created的區(qū)別

    每一個vue實例從創(chuàng)建到銷毀的過程,就是這個vue實例的生命周期,在這個過程中,他經(jīng)歷了從開始創(chuàng)建、初始化數(shù)據(jù)、編譯模板、掛載Dom、渲染→更新→渲染、卸載等一系列過程,那么這些過程中,具體vue做了些啥,我們今天來了解一下
    2023-05-05
  • vue2.0 + element UI 中 el-table 數(shù)據(jù)導(dǎo)出Excel的方法

    vue2.0 + element UI 中 el-table 數(shù)據(jù)導(dǎo)出Excel的方法

    下面小編就為大家分享一篇vue2.0 + element UI 中 el-table 數(shù)據(jù)導(dǎo)出Excel的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 詳解Vue中如何實現(xiàn)圖片處理與濾鏡效果

    詳解Vue中如何實現(xiàn)圖片處理與濾鏡效果

    Vue.js作為一個靈活的JavaScript框架,可以很容易地與圖像處理庫和濾鏡效果庫集成,以實現(xiàn)各種圖像處理需求,下面我們就來學(xué)習(xí)一下vue是如何實現(xiàn)圖片處理與濾鏡效果的吧
    2023-10-10
  • vue3使用vuedraggable和grid實現(xiàn)自定義拖拽布局方式

    vue3使用vuedraggable和grid實現(xiàn)自定義拖拽布局方式

    這篇文章主要介紹了vue3使用vuedraggable和grid實現(xiàn)自定義拖拽布局方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評論

改则县| 浦江县| 深水埗区| 文水县| 黄山市| 江华| 奉贤区| 黑水县| 府谷县| 格尔木市| 罗山县| 工布江达县| 绥芬河市| 綦江县| 淮阳县| 长春市| 阳西县| 武强县| 隆子县| 大埔区| 儋州市| 南溪县| 会东县| 天等县| 颍上县| 工布江达县| 永寿县| 聂拉木县| 电白县| 河南省| 滁州市| 炉霍县| 手游| 马尔康县| 门源| 毕节市| 开鲁县| 长汀县| 沙雅县| 古丈县| 芦山县|