element tree-table 子選項(xiàng)選中父選項(xiàng)默認(rèn)選中與全選

tree-table

1前塔、將原數(shù)據(jù)添加isCheck(是否被選擇)的屬性,默認(rèn)isCheck為false(未選擇)
2脚囊、handleSelection事件是當(dāng)用戶手動(dòng)勾選數(shù)據(jù)行的 Checkbox 時(shí)觸發(fā)的事件搂誉;根據(jù)參數(shù)row來(lái)區(qū)分父選擇項(xiàng)與子選擇項(xiàng);
如果是父選擇項(xiàng)則只用考慮當(dāng)被選擇時(shí)子選項(xiàng)是否全選谭确。
如果是子選擇項(xiàng)則考慮,當(dāng)子選擇項(xiàng)被選擇前菇夸,父選擇項(xiàng)是否已被選擇琼富;當(dāng)子選項(xiàng)全被取消時(shí)父選擇項(xiàng)也默認(rèn)取消選擇
3仪吧、handleSeletionAll事件是全選事件庄新,設(shè)置checkAll來(lái)判斷是否全選

<el-table
      ref="rightTable"
      :data="rightCheckList"
      stripe
      style="width:100%"
      height="260"
      max-height="380"
      :row-style="{height:'10px'}"
      :cell-style="{padding:'5px 0'}"
      row-key="id"
      :default-expand-all="true"
      :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
      @select="handleSelection"  
      @selection-change="handleSelectionChange"
      @select-all="handleSeletionAll"
    >
      <el-table-column type="selection" width="55"></el-table-column>
      <el-table-column prop="name" label="名稱" width="150"></el-table-column>
     
    </el-table>

  data() {
    return {
      checkAll: false, //是否全選
      addformLabelWidth: "50px",
      tableData2: [
        {
          id: 1,
          name: "menu1",
          parent: 0
        },
        {
          id: 2,
          name: "menu2",
          parent: 0
        },
        {
          id: 3,
          remarks: "一級(jí)菜單",
          name: "menu3",
          parent: 0,
          children: [
            {
              id: 31,
              name: "menu31",
              parent: 3
            },
            {
              id: 32,
              name: "menu32",
              parent: 3
            }
          ]
        }  ],
      rightCheckList: [],//綁定tree-table數(shù)據(jù)
      rightobj: {}//數(shù)據(jù)對(duì)象
    };
  },
methods:{
  //初始化選擇項(xiàng)
    initCheckedBox() {
      let initList = function(data) {
        data.forEach(function(item) { //created使用箭頭函數(shù)報(bào)錯(cuò),所以用function(){}
          item.isCheck = false; //未選中
          if (item.children) {
            initList(item.children);
          }
        });
        return data;
      };
      this.rightCheckList = initList(this.tableData2);
      console.log(this.rightCheckList);
    },
    //當(dāng)用戶手動(dòng)勾選全選 Checkbox 時(shí)觸發(fā)的事件
    handleSeletionAll(selection) {
      if (!this.checkAll) {
        console.log("全選");
        this.checkAll = true;
        this.isAllChecked(this.rightCheckList, true);
      } else {
        console.log("全取消");
        this.checkAll = false;
        this.isAllChecked(this.rightCheckList, false);
      }
    },
    //當(dāng)用戶手動(dòng)勾選數(shù)據(jù)行的 Checkbox 時(shí)觸發(fā)的事件
    handleSelection(selection, row) {
      let selectionlist = selection;

      //轉(zhuǎn)化成{'1':{...}}的形式
      this.getRightListObj(this.rightCheckList);

      //獲取當(dāng)前選中的row
      let checkrow = [];
      checkrow.push(row);
      let goalid = checkrow[0];
      //父節(jié)點(diǎn)
      if (goalid.parent === 0) {
        console.log(goalid.isCheck);
        if (goalid.isCheck) {
          //父節(jié)點(diǎn)全選中
          this.isRowsChecked(goalid, false); //取消
        } else {
          this.isRowsChecked(goalid, true);
        }
      }
      //子節(jié)點(diǎn)
      if (goalid.parent !== 0) {
        if (goalid.isCheck) {
          this.clearParentRow(goalid, this.rightCheckList, this.rightobj);
        } else {
          this.checkedParentRow(goalid, this.rightCheckList, this.rightobj);
        }
      }
    },
    //是否全選中
      //是否全選中
    isAllChecked(data, status) {
      //data(array)  status =true or false
      if (data.length === undefined) {
        let imitData = [];
        imitData.push(data);
        this.isAllChecked(imitData, status);
      } else {
        data.forEach(item => {
          item.isCheck = status;
          this.$refs.rightTable.toggleRowSelection(item, status);
          if (item.children) {
            this.isAllChecked(item.children, status);
          }
        });
      }
    },
    //選中子節(jié)點(diǎn)默認(rèn)選中父節(jié)點(diǎn)
    checkedParentRow(data, list, obj) {
      data.isCheck = true;
      let parent = data.parent; //父節(jié)點(diǎn)
      obj[data.parent].isCheck = true;
      this.$refs.rightTable.toggleRowSelection(list[parent - 1], true);
    },
    //子節(jié)點(diǎn)都未被選中,父節(jié)點(diǎn)默認(rèn)取消選中
    clearParentRow(data, list, obj) {
      let falselist = [];
      let parent = data.parent; //父節(jié)點(diǎn)
      // let parentIsCheck = obj[data.parent].isCheck; //父節(jié)點(diǎn)選中狀態(tài)
      data.isCheck = false;
      this.$refs.rightTable.toggleRowSelection(data, false);
      //檢測(cè)所有子節(jié)點(diǎn)的選中狀態(tài)
      obj[parent].children.forEach(item => {
        let status = obj[item.id].isCheck;
        if (!status) {
          falselist.push(status);
        }
      });
      //當(dāng)所有子節(jié)點(diǎn)未被選中
      if (falselist.length === obj[parent].children.length) {
        obj[data.parent].isCheck = false;
        this.$refs.rightTable.toggleRowSelection(list[parent - 1], false);
      }
    },
    getRightListObj(data) {
      data.forEach(item => {
        this.rightobj[item.id] = item;
        if (item.children) {
          this.getRightListObj(item.children);
        }
      });
    }
}
  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末择诈,一起剝皮案震驚了整個(gè)濱河市械蹋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌羞芍,老刑警劉巖哗戈,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異荷科,居然都是意外死亡唯咬,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)畏浆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)胆胰,“玉大人,你說(shuō)我怎么就攤上這事刻获∈裾牵” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蝎毡,是天一觀的道長(zhǎng)厚柳。 經(jīng)常有香客問(wèn)我,道長(zhǎng)沐兵,這世上最難降的妖魔是什么别垮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮扎谎,結(jié)果婚禮上宰闰,老公的妹妹穿的比我還像新娘。我一直安慰自己簿透,他們只是感情好移袍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著老充,像睡著了一般葡盗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上啡浊,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天觅够,我揣著相機(jī)與錄音,去河邊找鬼巷嚣。 笑死喘先,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的廷粒。 我是一名探鬼主播窘拯,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼红且,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了涤姊?” 一聲冷哼從身側(cè)響起暇番,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎思喊,沒(méi)想到半個(gè)月后壁酬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恨课,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年舆乔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剂公。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜕煌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诬留,到底是詐尸還是另有隱情斜纪,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布文兑,位于F島的核電站盒刚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏绿贞。R本人自食惡果不足惜因块,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望籍铁。 院中可真熱鬧涡上,春花似錦、人聲如沸拒名。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)增显。三九已至雁佳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間同云,已是汗流浹背糖权。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炸站,地道東北人星澳。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像旱易,于是被迫代替她去往敵國(guó)和親禁偎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子腿堤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353