|
@@ -0,0 +1,124 @@
|
|
|
+export default{
|
|
|
+ methods: {
|
|
|
+ changeCheck(checked,row){
|
|
|
+ let that = this;
|
|
|
+ if(checked){
|
|
|
+ that.$set(row,'isSelect',1)
|
|
|
+ }else{
|
|
|
+ that.$set(row,'isSelect',2)
|
|
|
+ }
|
|
|
+
|
|
|
+ function selectAllChildrens(data) {
|
|
|
+ data.forEach((item) => {
|
|
|
+ if(checked){
|
|
|
+ that.$set(item,'isSelect',1)
|
|
|
+ that.checkList.push(item.id)
|
|
|
+ }else{
|
|
|
+ let index = that.checkList.findIndex(i =>{
|
|
|
+ return i == item.id
|
|
|
+ })
|
|
|
+ if(index !=-1 ){
|
|
|
+ that.$set(item,'isSelect',2)
|
|
|
+ that.checkList.splice(index,1)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (item.children && item.children.length) {
|
|
|
+ selectAllChildrens(item.children);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ function getSelectStatus(selectStatuaArr, data) {
|
|
|
+ data.forEach((childrenItem) => {
|
|
|
+ selectStatuaArr.push(childrenItem.isSelect)
|
|
|
+ if (childrenItem.children && childrenItem.children.length) {
|
|
|
+ getSelectStatus(selectStatuaArr, childrenItem.children);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return selectStatuaArr;
|
|
|
+ }
|
|
|
+ function getLevelStatus(row) {
|
|
|
+ //如果当前节点的parantId =0 并且有子节点,则为1
|
|
|
+ //如果当前节点的parantId !=0 并且子节点没有子节点 则为3
|
|
|
+ if (row.parentId == 0) {
|
|
|
+ if (row.children && row.children.length) {
|
|
|
+ return 1;
|
|
|
+ }else{
|
|
|
+ return 4;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (!row.children || !row.children.length) {
|
|
|
+ return 3;
|
|
|
+ } else {
|
|
|
+ return 2;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let result = {};
|
|
|
+ //获取明确的节点
|
|
|
+ function getExplicitNode(data,parentId) {
|
|
|
+ for(var i = 0;i<data.length;i++){
|
|
|
+ var item = data[i]
|
|
|
+ if(item.id == parentId) {
|
|
|
+ result = item;
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ if(item.children && item.children.length) {
|
|
|
+ getExplicitNode(item.children,parentId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return {}
|
|
|
+ }
|
|
|
+ function operateLastLeve(row) {
|
|
|
+ //操作的是子节点 1、获取父节点 2、判断子节点选中个数,如果全部选中则父节点设为选中状态,如果都不选中,则为不选中状态,如果部分选择,则设为不明确状态
|
|
|
+ let selectStatuaArr = [];
|
|
|
+ let item = getExplicitNode(that.tableData.children,row.parentId);
|
|
|
+ selectStatuaArr = getSelectStatus(selectStatuaArr, item.children);
|
|
|
+ if (
|
|
|
+ selectStatuaArr.every((selectItem) => {
|
|
|
+ return 1 == selectItem || selectItem === undefined;
|
|
|
+ })
|
|
|
+ ) {
|
|
|
+ that.$set(item,'isSelect',1)
|
|
|
+ } else if (
|
|
|
+ selectStatuaArr.every((selectItem) => {
|
|
|
+ return 2 == selectItem;
|
|
|
+ })
|
|
|
+ ) {
|
|
|
+ that.$set(item,'isSelect',2)
|
|
|
+ let index = that.checkList.findIndex(i =>{
|
|
|
+ return i == item.id
|
|
|
+ })
|
|
|
+ if(index != -1){
|
|
|
+ that.checkList.splice(index,1)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ that.$set(item,'isSelect','')
|
|
|
+ }
|
|
|
+ //则还有父级
|
|
|
+ if(item.parentId!=0) {
|
|
|
+ operateLastLeve(item)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //判断操作的是子级点复选框还是父级点复选框,如果是父级点,则控制子级点的全选和不全选
|
|
|
+
|
|
|
+ // 1、只是父级 2、既是子集,又是父级 3、只是子级
|
|
|
+ let levelSataus = getLevelStatus(row);
|
|
|
+ if (levelSataus == 1) {
|
|
|
+ selectAllChildrens(row.children);
|
|
|
+ } else if (levelSataus == 2) {
|
|
|
+ selectAllChildrens(row.children);
|
|
|
+ operateLastLeve(row);
|
|
|
+ } else if(levelSataus == 3) {
|
|
|
+ operateLastLeve(row);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ rowClassNameFun({ row }) {
|
|
|
+ if (row.isSelect ==='') {
|
|
|
+ return "indeterminate";
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ },
|
|
|
+}
|