vue+element-ui,樹形表格,可以做許可權管理模組,可摺疊,全選,部分全選
html部分:
<ul class="role-table col-xs-offset-2 col-md-offset-1 col-sm-offset-2"> <li class="header"> <div class="left">選單列表</div> <div class="right">功能許可權</div> </li> <div class="vertical-line"></div> <li v-for="(item,index) in dataList"css部分:key="item.id"> <div class="left h40" @click="fold(item)"> <i :class="{'el-icon-caret-right':item.folded,'el-icon-caret-bottom':!item.folded}" v-cloak v-if="item.second" class="item-icon"></i> <el-checkbox @click.native="handleOneCheckAll($event,item)"v-cloak v-if="!item.second" :indeterminate="item.isIndeterminate" v-model="item.checkAll"> {{item.title}}</el-checkbox> <span v-if="item.second" v-cloak>{{item.title}}</span> </div> <div class="right h40"> <el-checkbox v-if="item.second" :indeterminate="item.isIndeterminate" @change="checkSecondAll(item)" v-model="item.firstCheckAll"> 所有</el-checkbox> <el-checkbox-group v-model="item.checkedCities" @change="handleOneCheckedCitiesChange(item)" v-else> <el-checkbox v-for="m in item.list" :label="m.id" :key="m.id" v-cloak> {{m.name}}</el-checkbox> </el-checkbox-group> </div> <div class="line"></div> <ul v-show="item.second&&!item.folded"> <li class="h40" v-for="(second,cur) in item.second" :key="second.id"> <div class="left"> <el-checkbox v-model="second.checkAll" @change="handleCheckAllChange($event,item,second)" v-cloak> {{second.title}} </el-checkbox> </div> <div class="right"> <el-checkbox-group v-model="second.checkedCities" @change="handleCheckedCitiesChange(item,second)"> <el-checkbox v-for="p in second.list" :label="p.id" :key="p.id" v-cloak > {{p.name}} </el-checkbox> </el-checkbox-group> </div> <div class="line"></div> </li> </ul> </li> </ul>
.role-table { border: 1px solid #e0e0e0; border-bottom: none; padding: 0; position: relative; } .header { height: 40px; line-height: 40px; border-bottom: 1px solid #e7e7e7; background: #F8F8F9; text-align: center; } .vertical-line { width: 1px; height: 100%; background: #ddd; position: absolute; left: 30%; top: 0 } .left { width: 30%; float: left; padding-left: 10px; user-select: none; cursor: pointer; } .one { padding-left: 20px; } .right { width: 70%; float: left; padding-left: 10px; } .item-icon { margin-left: -5px; padding: 5px; } .line { clear: both; width: 100%; height: 1px; background: #e0e0e0; } .h40{ height: 39px; line-height: 39px; } [v-cloak] { display: none; }js部分
new Vue({ el: "#app", data: { dataList: [ { title: "概況", id: "0", checkedCities:[], list: [ { name: "瀏覽", id: "10001" }, { name: "修改", id: "11111" } ] }, { title: "會員管理", id: "1", second: [ { title: "會員列表", id: "11", list: [ { name: "新增", id: "10002" }, { name: "修改", id: "10003" } ], checkedCities: [] }, { title: "會員等級", id: "12", list: [ { name: "新增", id: "10004" }, { name: "修改", id: "10005" }, { name: "刪除", id: "1006" } ], checkedCities: [] } ] }, { title: "菜品管理", id: "2", second: [ { title: "菜品列表", id: "21", list: [ { name: "新增", id: "10007" }, { name: "修改", id: "10008" } ], checkedCities: [] }, { title: "會員等級", id: "22", list: [ { name: "瀏覽", id: "10009" }, { name: "新增", id: "10010" }, { name: "修改", id: "10011" }, { name: "刪除", id: "10012" } ], checkedCities: [] } ] } ], }, methods: { fold: function (item) { if (typeof item.folded === "undefined") { this.$set(item, "folded", true); } else { item.folded = !item.folded; } }, // 全選一項 handleCheckAllChange(event, item, second) { let arr = []; for (let a = 0; a < second.list.length; a++) { arr.push(second.list[a].id) } if (typeof second.checkedCities === "undefined") { this.$set(second, "checkedCities", arr); } second.checkedCities = event.target.checked ? arr : []; // if (typeof second === "undefined") { // this.$set(second, "isIndeterminate", false) // } // second.isIndeterminate = false; if (typeof second.checkAll === "undefined") { this.$set(second, "checkAll", true); } if (typeof item.isIndeterminate === "undefined") { this.$set(item, "isIndeterminate", true); } for (let a = 0; a < item.second.length; a++) { if (!item.second[a].checkAll) { item.isIndeterminate = true; for (let a = 0; a < item.second.length; a++) { if (item.second[a].checkAll) { break } else { item.isIndeterminate = false; item.firstCheckAll = false; } } break } else { item.isIndeterminate = false; item.firstCheckAll = true; } } }, // 單選 handleCheckedCitiesChange(item, second) { let checkedCount = second.checkedCities.length; if (typeof second.checkAll === "undefined") { this.$set(second, "checkAll", false); } if (typeof second.isIndeterminate === "undefined") { this.$set(second, "isIndeterminate", false); } if (typeof item.isIndeterminate === "undefined") { this.$set(item, "isIndeterminate", true); } second.isIndeterminate = checkedCount > 0 && checkedCount < second.list.length; second.checkAll = checkedCount === second.list.length; if (checkedCount === 0) { second.isIndeterminate = false } for (let a = 0; a < item.second.length; a++) { if (!item.second[a].checkAll) { item.isIndeterminate = true; for (let b = 0; b < item.second.length; b++) { if (item.second[b].checkedCities.length > 0) { break } else { item.isIndeterminate = false; item.firstCheckAll = false; } } break } else { item.isIndeterminate = false; item.firstCheckAll = true; } } }, // 點選所有 checkSecondAll: function (item) { if (typeof item.firstCheckAll === "undefined") { this.$set(item, "firstCheckAll", true); } for (let a = 0; a < item.second.length; a++) { this.checkItemAll(item.firstCheckAll, item.second[a]) } item.isIndeterminate=false }, checkItemAll: function (flag, item) { let arr = []; for (let a = 0; a < item.list.length; a++) { arr.push(item.list[a].id) } if (typeof item.checkedCities === "undefined") { this.$set(item, "checkedCities", arr); } item.checkedCities = flag ? arr : []; item.checkAll = flag; }, // 沒有二級選單 handleOneCheckedCitiesChange:function (item) { let checkedCount = item.checkedCities.length; if (typeof item.isIndeterminate === "undefined") { this.$set(item, "isIndeterminate", false); } if (typeof item.checkAll === "undefined") { this.$set(item, "checkAll", false); } item.isIndeterminate = checkedCount > 0 && checkedCount < item.list.length; item.checkAll = checkedCount === item.list.length; }, handleOneCheckAll:function (event,item) { let arr = []; for (let a = 0; a < item.list.length; a++) { arr.push(item.list[a].id) } item.checkedCities = event.target.checked ? arr : []; } } })
相關推薦
vue+element-ui,樹形表格,可以做許可權管理模組,可摺疊,全選,部分全選
html部分: <ul class="role-table col-xs-offset-2 col-md-offset-1 col-sm-offset-2"> <li class="header"> <div cla
ELement-UI之樹形表格(treeTable&&treeGrid)
先上圖來一波 支援無限層級,支援新增子級時自動開啟父級,支援編輯時自動開啟父級,執行操作時自帶動畫效果,支援初始化時設定全部開啟或者關閉,支援一鍵展開與關閉絲滑般的無延遲 由於基於el-table擴充套件的,所以當然能夠使用el-table的所有功能 下面上程式碼: 1,核心JS,格式化資料來源
vue+element ui 分頁表格操作的坑
問題一:為實現分頁記憶選中項,但實際獲取資料後this.$refs.xxx.toggleRowSelection函式無效 【轉載】自“前端開發終生學習者”的《獲取資料後this.$refs.xxx.toggleRowSelection無效》 方法:獲取資料後在外部加上一個$nextTic
ELement-UI之樹形表格(treeTable&&treeGrid)
先上圖來一波 支援無限層級,支援新增子級時自動開啟父級,支援編輯時自動開啟父級,執行操作時自帶動畫效果,支援初始化時設定全部開啟或者關閉,支援一鍵展開與關閉絲滑般的無延遲 由於基於el-table擴充套件的,所以當然能夠使用el-table的所有功能 下面上程式碼: 1,核心JS,格式化資料來源
websocket+springboot+vue+element ui完成資料表格的實時資料
java部分: import org.springframework.stereotype.Component; impo
vue element UI el-table 給表格新增複選框,並得到所選值
<el-table @selection-change="changeFun"> <el-table-column type="selection"> </el-table-column> </el-table>
vue+element ui 的tab 動態增減,切換時提示用戶是否切換
ble href test 點擊 rom item lock code vue.js 前言:工作中用到 vue+element ui 的前端框架,動態添加 Tab,刪除 Tab,切換 Tab 時提示用戶是否切換等,發現 element ui 有一個 bug,這裏記錄一下
vue 實現模糊搜尋功能,vue-element ui改編input模糊查詢
vue實現模糊搜尋功能 根據輸入的內容進行查詢資料,然後展示含有輸入內容的資料 <input v-model="issue_content" v-on:input ="inputFunc" type="text" placeholder="如何修改密碼"> <di
Vue+Element UI 向Table組建中的每一行新增一個switch元件,實現每一行單獨控制
最近在做公司的裝置管理系統,許可權管理中有一個需求需要展示如下: 每一行表格中的switch單獨控制一行; 實現效果的程式碼如下: <el-table :data="userRights" stripe border align="center" sty
求助:關於django rest framework + vue(element-ui)跨域問題,求助大佬解決...
前端: headers: { token: '' } if (document.cookie.length > 0) { var arr = document.cookie.split('; ') for (var i = 0; i < arr.length; i++
vue + element-ui 製作tab切換(切換vue元件,踩坑總結)
本篇文章使用vue結合element-ui開發tab切換vue的不同元件,每一個tab切換的都是一個新的元件。 1、vue如何使用element-ui 上一篇文章已經分享瞭如何在vue中使用element-ui建立tab元件切換內容(需要了解的朋友點選連結檢視) 2、建立相應檔案。 a、建立父元件
ie 報錯:'SyntaxError: strict 模式下不允許一個屬性有多個定義 ' ,基於vue element-ui的坑的解決
環境:基於vue-cli的element- ui的專案 在其他瀏覽器正常。在ie中報錯的程式碼: <el-select filterable clearable v-model="Form.P
vue+element ui 使用$refs獲取el-dialog 下的 el-table 元件 ,以及使用table多選,預設選中
el-dialog程式碼塊:<el-button @click="opendialog">開啟dialog</el-button><el-dialog title="我是標
vue Element-ui 表格自帶篩選框自定義高度
image n-k pre chrome code lac 分享 sso spa el-table中可以在一行的某列進行篩選,代碼如下: <el-table-column prop="classOfTest" class="test" label="測試類名" :
VUE+Element UI實現簡單的表格行內編輯效果
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <!-- 引入樣式 --> <link rel="stylesheet" href="https://
vue+element-ui+slot-scope或原生實現可編輯表格(日歷)
gui 兩種 label div 前言 大牛 對比 default 操作dom 你們公司的產品是不是還在做一個可編輯表格功能? 1.前言 咱開發拿到需求大多數是去網上找成型的組件,找不到再看原生的方法能否實現,大牛除外哈,大牛一般喜歡封裝組件框架。 2.思路 可編輯表格在後
element ui 分頁器遇到的bug。切換頁面時當時選擇第二頁,第二個選項卡也是第二頁
我在這個教材選項卡選擇了第二頁。 然後切換到課件。看到下面效果 還是在第二頁的。實際上我已經處理了讓this.page=1.而且介面也給的第一頁的,但是頁面上顯示的卻是2. 解決辦法就是在分頁器上加一個引數。:current-page.sync = "pag
vue+element-ui專案中如何勾選表格資料匯出到excel表格
在專案中,我們會將查詢資料以table的形式顯示在頁面中,有時候需要匯出頁面資料或者勾選table的複選框來選擇要匯出的資料。element-ui的table元件本身提供了方法,當勾選每行前面的複選框時,獲得他的id。 當我們點選匯出按鈕時,
vue+element ui 表格自定義樣式溢位隱藏
樣式 .hoveTitle { text-align: left; width: 140px; overflow: hidden; text-overflow: ellipsis; whit
Vue+element UI實現表格資料匯出Excel元件
介紹 這是一個可以將頁面中的表格資料匯出為Excel檔案的功能元件,該元件一般與表格一起使用,將表格資料傳給元件,然後通過點選元件按鈕可將表格中的資料匯出成Excel檔案。 使用方法 由於封裝該元件內部引用了xlsx.js,file-saver.js和elementUI,因此在使用該元件時,請先安裝如下