vue+element的表格實現(xiàn)批量刪除功能示例代碼
最近寫了一個批量刪除功能,遇到了不少坑,特此記錄一下
表格的代碼如下
如圖所示,表格最前面有一個復(fù)選框
代碼很簡單
<el-table-column type="selection" width="65"></el-table-column>
刪除按鈕的代碼如下:
data的代碼如下:
data() { return { pageSize: 12, total: 0, pageData: [], query: '', sort: 'createAt', order: 'descending', defaultSnap: srcFallback, accept: '', ws: null, sels: [],//選中顯示的值 disabled:true }; }
表格中的視頻數(shù)據(jù)來自于pageData,每個視頻都是一個對象,對象的status屬性等于waiting或者有progress屬性時,此視頻正在轉(zhuǎn)碼,或者正在準(zhǔn)備轉(zhuǎn)碼,不允許刪除, 批量刪除就是把被選中的行添加到sels這個數(shù)組中,把數(shù)組里的每一個對象的id屬性組成一個數(shù)組,發(fā)送給后端,此外,正在轉(zhuǎn)碼的視頻不允許刪除,此時按鈕也是禁用狀態(tài)
根據(jù)官方文檔,@selection-change="selsChange"
是復(fù)選框選擇改變時觸發(fā)的事件
在methods中添加一個方法
selsChange(sels) { //被選中的行組成數(shù)組 this.sels = sels; //遍歷被選中行數(shù)所組成的數(shù)組 for(let element of this.sels){ //如果視頻正在轉(zhuǎn)碼或者等待轉(zhuǎn)碼,禁用按鈕,結(jié)束方法 if(element.status == 'waiting'||element.progress){ this.disabled = true; return; } //如果沒有視頻正在轉(zhuǎn)碼或者等待轉(zhuǎn)碼,按鈕可用 this.disabled = false; } }
把請求發(fā)送給后端,代碼如下:
removeBatch(rows){ var ids = []; rows.forEach(element =>{ ids.push(element.id) }) this.$confirm('確定要刪除選中的文件嗎?','提示').then(() =>{ $.post('/vod/removeBatch',{ ids:ids }).then(dara =>{ this.updateData(); }) }).catch(()=>{}); }
前端已經(jīng)排除正在轉(zhuǎn)碼的視頻了,后端是否能根據(jù)前端傳來的數(shù)據(jù),直接刪除視頻呢?
答案是不可以,后端一樣要做驗證
思路是,拿到前端傳來的數(shù)據(jù)后,遍歷數(shù)組兩次,第一次如果發(fā)現(xiàn)有正在轉(zhuǎn)碼的視頻,拋出異常,不會進(jìn)入第二次循環(huán),第二次循環(huán)才根據(jù)id刪除視頻
代碼如下
r.post('/removeBatch',async(req,res) => { var ids = req.body.ids; var files = utils.vod.get("files"); //第一次循環(huán),如果有正在轉(zhuǎn)碼的文件,就拋出異常,結(jié)束循環(huán) for(let id of ids){ var transing = trans.agent.transing[id]; if(transing){ throw new Error('正在轉(zhuǎn)碼的文件無法刪除'); return; } } //如果沒有轉(zhuǎn)碼的文件,進(jìn)入第二次循環(huán) for(let id of ids){ var files = utils.vod.get("files"); var row = files.find({id: id}).cloneDeep().value(); //如果沒有要刪除的,就結(jié)束 if(!row) { res.sendStatus(200); return; } var dir = path.dirname(row.path); var name = path.basename(row.path, path.extname(row.path)); var transDir = path.resolve(dir, name); //刪除源文件 if(fs.existsSync(row.path)){ fs.removeSync(row.path); } //刪除轉(zhuǎn)碼文件 if(fs.existsSync(transDir)){ fs.removeSync(transDir); } //刪除json文件記錄 files.remove({id: id}).write(); } res.sendStatus(200); })
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue自定義加載指令v-loading占位圖指令v-showimg
這篇文章主要為大家介紹了vue自定義加載指令和v-loading占位圖指令v-showimg的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Vue2 Vue-cli中使用Typescript的配置詳解
Vue作為前端三大框架之一截至到目前在github上以收獲44,873顆星,足以說明其以悄然成為主流。下面這篇文章主要給大家介紹了關(guān)于Vue2 Vue-cli中使用Typescript的配置的相關(guān)資料,需要的朋友可以參考下。2017-07-07