table多选

<!-- Vue SFC -->
<template>
  <div class="h overflow">
    <div class="new-header clearfix bxs">
      <div class="header-item header-lf h cupo" @click="backFn">
        <i class="el-icon-arrow-left"></i>
        <span class="header-lf-btn cor6 h">返回</span>
      </div>
      <div class="header-item header-rt h">
        <el-button type="primary" size="mini" @click="saveBefore('form')">保存</el-button>
      </div>
    </div>
    <div class="new-content bxs" style="overflow-y: auto;">
      <el-form :rules="rules" ref="form" :model="role" label-width="120px">
        <el-form-item label="角色名称:" prop="roleName">
          <el-input
            v-model="role.roleName"
            class="w500"
            maxlength="15"
            minlength="0"
            show-word-limit
          ></el-input>
        </el-form-item>
        <el-form-item label="角色类型:">
          <span>{{this.$route.query.id?role.roleTypeDesc:'业务角色'}}</span>
        </el-form-item>
        <el-form-item label="角色说明:" prop="remark">
          <el-input
            type="textarea"
            rows="5"
            class="w500"
            maxlength="250"
            minlength="0"
            show-word-limit
            v-model="role.remark"
          ></el-input>
        </el-form-item>
        <el-form-item label="角色权限:">
          <el-table :data="data" style="width: 100%" @selection-change="handleSelectionChange">
            <!-- @click="handleSelectionOnly(scope.row)" -->
            <el-table-column type="selection" width="55"></el-table-column>
            <el-table-column type="expand">
              <template slot-scope="props">
                <div class="flex">
                  <el-checkbox-group
                    v-model="checkArr[props.$index]"
                    @change="cheChange(props.row.$index)"
                  >
                    <el-checkbox
                      v-for="(item,i) of props.row.authorityDtos"
                      :key="i"
                      :label="item.authorityCode"
                    >{{item.authorityName}}</el-checkbox>
                  </el-checkbox-group>
                </div>
              </template>
            </el-table-column>
            <el-table-column label="权限名称" prop="moduleName"></el-table-column>
          </el-table>
          <!-- <el-tree
            :data="data"
            show-checkbox
            :props="defaultProps"
            :default-expand-all="true"
            :check-on-click-node="true"
            @check="clickBox"
            @check-change="parentModules"
            @node-click="clickBox"
            node-key="authorityCode"
            ref="tree"
          ></el-tree>-->
        </el-form-item>
      </el-form>
    </div>
    <div>
      <button @click="getcheckArr">点击</button>
    </div>
  </div>
</template>

<script>
import { putRole, roleWithAuthority, getOrgTree } from "@/api/role_Manage";
export default {
  name: "newRole",

  components: {},
  data() {
    return {
      role: {
        remark: "",
        roleAuthorityCodes: [],
        roleId: "",
        roleName: "",
        roleType: null,
        roleTypeDesc: "",
      },
      checkList: [],
      rules: {
        roleName: [
          {
            min: 0,
            max: 15,
            message: "长度在 0 到 15 个字符",
            trigger: "blur",
          },
          { required: true, message: "请输入角色名称", trigger: "blur" },
        ],
        remark: [
          {
            min: 0,
            max: 250,
            message: "长度在 0 到 250 个字符",
            trigger: "blur",
          },
        ],
      },
      data: [],
      defaultProps: {
        children: "authorityDtos",
        label: "authorityName",
      },
      checkArr: [],
      checkArrCopy: [],
    };
  },
  created() {
    console.log(this.$route.query);
    this.getOrgTree();
    if (this.$route.query.id) {
      this.getData();
    }
  },
  methods: {
    handleSelectionOnly(e, index) {
      console.log(e);
      console.log(index);
    },
    getcheckArr() {
      console.log(this.checkArr);
    },
    // 获取数据
    async getData() {
      // let user = this.$store.state.user.userinfo;
      let datVal = {
        roleId: this.$route.query.id,
      };
      console.log(datVal);
      this.loading = true;
      const result = await roleWithAuthority(datVal);
      this.role = result.data;
      this.loading = false;
      console.log(result.data);
    },
    // 获取机构树
    async getOrgTree() {
      const result = await getOrgTree();
      this.data = result.data;
      console.log(result.data);
      let num = result.data.length;
      let arr = [];
      for (let i = 0; i < num; i++) {
        arr.push([]);
      }
      this.checkArr = arr;
      this.checkArrCopy = JSON.parse(JSON.stringify(arr));
      console.log(this.checkArr);
    },

    backFn() {
      this.$router.push({
        name: "roleList",
      });
    },
    saveBefore(formName) {
      this.$refs[formName].validate(async (valid) => {
        if (valid) {
          if (!this.$route.query.id) {
            this.role.roleType = 1;
          }
          this.loading = true;
          const result = await putRole(this.role);
          console.log(result);
          this.loading = false;
        } else {
          console.log("error submit!!");
          return false;
        }
      });
    },
    handleSelectionChange(val) {
      console.log(val);
      let lists = this.data;
      let indexArr = [];
      if (val.length == 0) {
        this.checkArr = JSON.parse(JSON.stringify(this.checkArrCopy));
      } else {
        for (let j = 0; j < val.length; j++) {
          for (let i = 0; i < lists.length; i++) {
            if (val[j].moduleCode == lists[i].moduleCode) {
              indexArr.push(i);
            }
          }
        }
        let checkArr = this.checkArr;
        console.log(indexArr);
        for (let i = 0; i < indexArr.length; i++) {
          let cheArr = [];
          for (let j = 0; j < lists[indexArr[i]].authorityDtos.length; j++) {
            cheArr.push(lists[indexArr[i]].authorityDtos[j]);
          }
          checkArr[indexArr[i]] = cheArr;
        }
        this.checkArr = JSON.parse(JSON.stringify(checkArr));
      }
    },
    cheChange(val) {
      console.log(val);
    },
  },
};
</script>
<style lang="scss" scoped>
.new-header {
  width: 100%;
  height: 40px;
  position: absolute;
  left: 0;
  top: 0;
  z-index: 100;
  background: #fff;
  box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.3);
  .header-item {
    line-height: 40px;
  }
  .header-lf {
    position: absolute;
    left: 10px;
    top: 0;
    .header-lf-btn {
      display: inline-block;
      font-size: 12px;
      vertical-align: top;
      padding-right: 20px;
    }
  }
  .header-rt {
    position: absolute;
    right: 10px;
    top: 0;
  }
}
.new-content {
  padding-top: 40px;
  padding-right: 40px;
}
</style>

 

posted @ 2020-09-23 19:10  ThisCall  阅读(437)  评论(0编辑  收藏  举报