欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3+elementui-plus實現(xiàn)一個接口上傳多個文件功能

 更新時間:2023年07月11日 10:21:21   作者:今天不要寫bug  
這篇文章主要介紹了vue3+elementui-plus實現(xiàn)一個接口上傳多個文件,先使用element-plus寫好上傳組件,然后假設(shè)有個提交按鈕,點擊上傳文件請求接口,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下

首先,先使用element-plus寫好上傳組件,變量的定義我在這里就省略了都

<el-form-item prop="file" label="附件">
     <el-upload
         style="width:100%"
         class="upload-demo"
         drag
         ref="upload-demo"
         action=""
         v-model="taskForm.file"
         :file-list="fileLists"
         :before-upload="handleBeforeUpload"
         :http-request="uploadFile"
         :on-remove="handleRemove"
         :on-change="handleFileChange"
         :limit="3"
         :on-exceed="handleExceed"
         :headers="headers"
         multiple
     >
         <el-icon class="el-icon--upload"><upload-filled /></el-icon>
         <div class="el-upload__text">
         將文件拖拽到此處,或<em>點擊上傳</em>
         </div>
         <template #tip>
         <div class="el-upload__tip">
             最多上傳3個附件
         </div>
         </template>
     </el-upload>
 </el-form-item>

然后,綁定的函數(shù)都補充一下

function handleBeforeUpload (file) {
        //獲取上傳文件大小
        let fileSize = Number(file.size / 1024 / 1024);
        if (fileSize > 100) {
            ElMessage({ message: '文件大小不能超過100MB,請重新上傳。', type: 'warning'})
            return false
        }
    }
    function uploadFile (params) {
        if (params.file == null) {
            ElMessage({ message: '請選擇需要上傳的文件', type: 'warning'})
            return false
        }
    }
    function handleFileChange (file, fileList) {
        fileLists.value = fileList
    }
    function handleRemove (file, fileList) {
        fileLists.value = fileList
    }
    function handleExceed(files, fileList) {
        ElMessage({ message: '最多上傳3個文件,請刪除后重新上傳!', type: 'warning'})
    }

然后,假設(shè)有個提交按鈕,點擊上傳文件請求接口

 /** 提交按鈕 */
    function submitForm() {
        proxy.$refs["taskForms"].validate(valid => {
             // 表單其他必填字段校驗一下
            if (valid) {
            // 加個loading
                loading.value = ElLoading.service({
                    lock: true,
                    text: 'Loading'
                })
                // 判斷是否上傳了文件 沒有就不用調(diào)用上傳
                if (fileLists.value.length > 0) {
                    console.log('list', fileLists.value)
                    let fileData = new FormData()
                    var isAdd = false // 區(qū)別是否上傳了新文件
                    var ids = [] // 編輯時存儲已經(jīng)回顯的文件ids
                    // 這里因為編輯和新增邏輯都有,所以在編輯時需要區(qū)分,
                    // 到底是上傳了新文件,還是說依舊是原來的文件,再提交一下表單,提交其他字段而已
                    // 而判斷是否是最新上傳的文件就依據(jù)是否有文件流raw
                    for(var i =0 ; i< fileLists.value.length; i++) {
                        // 通過是否有文件流raw判斷是否上傳新文件,是則append
                        if (fileLists.value[i].raw) {
                            isAdd = true
                            fileData.append('file', fileLists.value[i].raw)
                        } else {
                            // 拿到回顯文件(即非新上傳文件)的id
                            ids.push(fileLists.value[i].id)
                        }
                    }
                    console.log('ids=', ids)
                    fileData.append('type', 1) // type代表上傳操作是哪個模塊的:1任務(wù) 2總結(jié) 
                    // 若isAdd=true,則說明添加了新文件,調(diào)用上傳
                    if (isAdd) {
                        uploadFileData(fileData).then((res) => {
                            console.log('upload', res)
                            if (res.code == 200) {
                                // 回顯文件id數(shù)組和新上傳文件得到的id數(shù)組合并
                                taskForm.value.file = ids.concat(res.result.ids)
                                console.log('file-ids',taskForm.value.file)
                                addAndEdit() // 調(diào)用保存其他字段信息的接口
                            }
                        })
                    } else {
                        taskForm.value.file = ids
                        addAndEdit() // 調(diào)用保存其他字段信息的接口
                    }
                } else {
                    taskForm.value.file = ''
                    addAndEdit() // 調(diào)用保存其他字段信息的接口
                }
            }
        })
    }

既然有編輯,那就應(yīng)該做回顯的邏輯,文件如何回顯到上傳組件上

// 點擊編輯
    function editTasks (row) {
        let fileData = new FormData()
        fileData.append('fileId', row.file)
        // 獲取文件名
        getFileData(fileData).then((res) => {
            console.log('test', res)
            if (res.code == 200) {
                // 就是這里,拿到文件名,然后文件回顯,我這里是通過接口拿到文件名,
                // 如果你能更直接的拿到文件名,直接執(zhí)行這個foreach即可
                res.result.forEach((item) => {
                // 回顯重點,就是把你需要的東西push到fileList中
                    fileLists.value.push({ name: item.fileName, id: item.id })
                })
                console.log('edoite', taskForm.value, fileLists.value)
            }
        })
        taskId.value = row.id
        taskForm.value = {...row}
        taskTitle.value = '編輯任務(wù)'
        showTask.value = true
        taskForm.value.file = row.file !== 'null' ?  JSON.parse(row.file) : []    }

over 以上主要通過代碼說明,可根據(jù)自己實際情況改造

到此這篇關(guān)于vue3+elementui-plus實現(xiàn)一個接口上傳多個文件的文章就介紹到這了,更多相關(guān)vue3 elementui-plus上傳多個文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue中Form 表單的 resetFields() 失效原因及問題解決

    vue中Form 表單的 resetFields() 失效原因及問題解決

    在Vue項目中,使用formRef.value.resetFields()方法重置表單時可能遇到不起作用的問題,下面就來介紹一下如何解決,感興趣的可以了解一下
    2024-09-09
  • Vue.js使用computed屬性實現(xiàn)數(shù)據(jù)自動更新

    Vue.js使用computed屬性實現(xiàn)數(shù)據(jù)自動更新

    在Vue組件中,computed屬性是在組件的選項對象中聲明的,你可以把它們想象成組件的一個小功能,告訴Vue當(dāng)某些數(shù)據(jù)變化時,如何更新界面,本文給大家介紹了Vue.js使用computed屬性實現(xiàn)數(shù)據(jù)自動更新,需要的朋友可以參考下
    2024-06-06
  • Vue watch原理源碼層深入講解

    Vue watch原理源碼層深入講解

    watch 是由用戶定義的數(shù)據(jù)監(jiān)聽,當(dāng)監(jiān)聽的屬性發(fā)生改變就會觸發(fā)回調(diào),這項配置在業(yè)務(wù)中是很常用。在面試時,也是必問知識點,一般會用作和 computed 進行比較。那么本文就來帶大家從源碼理解 watch 的工作流程,以及依賴收集和深度監(jiān)聽的實現(xiàn)
    2022-10-10
  • 關(guān)于vue中根據(jù)用戶權(quán)限動態(tài)添加路由的問題

    關(guān)于vue中根據(jù)用戶權(quán)限動態(tài)添加路由的問題

    每次路由發(fā)生變化時都需要調(diào)用一次路由守衛(wèi),并且store中的數(shù)據(jù)會在每次刷新的時候清空,因此需要判斷store中是否有添加的動態(tài)路由,本文給大家分享vue中根據(jù)用戶權(quán)限動態(tài)添加路由的問題,感興趣的朋友一起看看吧
    2021-11-11
  • 解決vue項目Error:Cannot find module‘xxx’類報錯問題

    解決vue項目Error:Cannot find module‘xxx’類報錯問題

    當(dāng)npm運行報錯Error:Cannot find module 'xxx'時,通常是因為node_modules文件或依賴未正確安裝,解決步驟包括刪除node_modules和package-lock.json文件,重新運行npm install,并根據(jù)需要安裝額外插件,若網(wǎng)絡(luò)問題導(dǎo)致安裝失敗
    2024-10-10
  • 解決Vue.js Devtools未檢測到Vue實例的問題

    解決Vue.js Devtools未檢測到Vue實例的問題

    在開發(fā)Vue.js應(yīng)用時,Vue.js Devtools是一個不可或缺的調(diào)試工具,然而,有時我們可能會遇到“Vue.js not detected”的提示,這意味著Vue.js Devtools未能成功識別和連接到我們的Vue應(yīng)用,本文將詳細解析這個問題,并提供相應(yīng)的解決步驟與代碼示例,需要的朋友可以參考下
    2024-01-01
  • Vue的路由配置過程(Vue2和Vue3的路由配置)

    Vue的路由配置過程(Vue2和Vue3的路由配置)

    這篇文章回顧了Vue2和Vue3中路由的配置步驟,包括安裝正確的路由版本、創(chuàng)建路由實例、配置routes以及在入口文件中注冊路由,Vue2中使用Vue.use(VueRouter),而Vue3中使用createRouter和createWebHashHistory
    2025-01-01
  • 如何基于Vue制作一個猜拳小游戲

    如何基于Vue制作一個猜拳小游戲

    Vue.js作為目前最熱門最具前景的前端框架之一,其提供了一種幫助我們快速構(gòu)建并開發(fā)前端項目的新的思維模式,下面這篇文章主要給大家介紹了關(guān)于如何基于Vue制作一個猜拳小游戲的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • uniapp嵌套webview無法返回上一級解決方式

    uniapp嵌套webview無法返回上一級解決方式

    uniapp是一款非常強大的跨平臺開發(fā)框架,它可以讓我們只編寫一份代碼,就能在多個平臺上運行,這篇文章主要給大家介紹了關(guān)于uniapp嵌套webview無法返回上一級的解決方式,需要的朋友可以參考下
    2024-05-05
  • 詳解Vue的組件注冊

    詳解Vue的組件注冊

    組件是Vue.js最強大的功能之一。組件可以擴展HTML元素,封裝可重用的代碼。在較高層面上,組件是自定義元素,Vue.js 的編譯器為它添加特殊功能,需要的朋友可以參考下
    2023-05-05

最新評論