<style lang="scss">
    .preview{
        .el-form-item{
            margin-bottom:15px;
        }
        label,p{
            line-height: 25px !important;
        }
    }
</style>
<template>
    <section>
        <p><span>系统管理></span>角色管理</p>
        <div class="content">
            <div class="filter">
                <el-form size="small" label-width="70px" :inline="true"  label-position="left">
                    <el-form-item label="">
                            <el-input clearable placeholder="请输入角色名称" v-model="form.name"></el-input>
                    </el-form-item>
                    <el-form-item>
                        <el-button  type="primary" @click="search">搜索</el-button>
                    </el-form-item>
                    <el-form-item style="float:right" >
                        <el-button @click="dialogVisible=true,dialogTitle='新增角色'" type="primary">新增角色</el-button>
                    </el-form-item>
                </el-form>
            </div>
            <el-table
                    class="table"
                    :data="list" height="50vh"
                    border  v-loading="loading"
                    default-expand-all row-key="id"
                    style="width: 100%">
                    <el-table-column
                    prop="name"  width="300"
                    label="角色名称">
                    </el-table-column>
                    <el-table-column
                    prop="permstr"  
                    label="角色权限">
                    </el-table-column>
                    <!-- <el-table-column
                    prop="username"  
                    label="角色描述">
                    </el-table-column> -->
                    <el-table-column  
                    prop="zip"  width="150"
                    label="操作">
                    <template slot-scope="scope">
                        <el-button class="edit" type="text" @click="edit(scope.row.id)">编辑</el-button>
                        <el-button class="del" @click="del(scope.row.id)" type="text">删除</el-button>
                    </template>
                    </el-table-column>
            </el-table>
            <Page  ref="pageButton" :current='form.page' :page_size='form.page_size' :total='total' @pageChange='gopage'/>
        </div>

        <el-dialog
        :title="dialogTitle" :close-on-click-modal='false'
        :visible.sync="dialogVisible">
        <el-form size="small" class="preview" :inline='false' label-width="80px">
                <el-form-item label="角色名称">
                    <el-input v-model="form1.name"></el-input>
                </el-form-item>
                <el-form-item label="角色权限">
                    <!-- <el-input placeholder="请输入内容" v-model="input" class="input-with-select">
                        <el-button slot="append" icon="el-icon-search"></el-button>
                    </el-input> -->
                    <el-tree
                    ref="tree"
                    :data="data"
                    show-checkbox
                    node-key="id" default-expand-all
                    :props="defaultProps"
                    @check-change="handleCheckChange">
                    </el-tree>
                </el-form-item>
                <!-- <el-form-item label="角色描述">
                    <el-input v-model="form1.desc"></el-input>
                </el-form-item> -->
        </el-form>
        <span slot="footer" class="dialog-footer">
            <el-button size="small" type="primary" @click="save">确 定</el-button>
        </span>
        </el-dialog>
    </section>
</template>
<script>
import Page from '../../components/Page';
export default {
  components:{
        Page
  },
  data(){
    return{
      form:{name:'',page:1,page_size:20},
      form1:{},
      total:1,
      list:[{name:'2333'}],
      loading:false,
      input:'',
      dialogVisible:false,
      dialogTitle:"",
      defaultProps:{},
      data: [],
      selected:[]
    }
  },
  methods:{
        getPermissions(){
            this.$api.getUserPermissions().then(res=>{
                this.data = res.data.data
            })
        },
        handleCheckChange(data, checked, indeterminate) {
            this.selected = this.$refs.tree.getCheckedNodes()
        },
        search(){
            let parm = this.form
            this.getData()
        },
        getData(){
            var parm=this.form;        
            this.loading=true
            this.$api.getRoleList(parm).then(res=>{
                let list = res.data.data.list;
                list.forEach(item => {
                    let perms = []
                    let permissions = JSON.parse(item.permissions)
                    if(permissions){
                        permissions.forEach(iitem=>{
                            perms.push(iitem.label)
                        })
                        item.permstr = perms.join(",")
                    }
                });
                this.list = list
                this.total = res.data.data.total
                this.loading = false
            })
        },
        edit(id){
            this.getData()
            this.$api.getRoleInfo({id:id}).then((res)=>{
                this.form1 = res.data.data
                let perms = JSON.parse(res.data.data.permissions)
                this.$refs.tree.setCheckedNodes(perms)
                this.selected = perms
            })
            this.dialogVisible = true;
        },
        del(id){
                this.$confirm('确定删除吗', '提示', {
                        type: 'warning'
                    }).then(() => {
                    this.$api.delRole({id:id}).then((res)=>{
                            this.$message({
                                message: '删除成功',
                                type: 'success'
                            })
                            this.getData()
                    })
                })
        },
        save(){
            let parm = this.form1
            parm.permissions = JSON.stringify(this.selected)
            if(parm.id){
                this.$api.editRole(parm).then(res=>{
                    if(res.data.code==0){
                        this.$message({
                            type:"success",
                            message:"保存成功!"
                        })
                    this.getData()
                    }else{
                        this.$message.error("失败!");
                    }
                })
            }else{
                this.$api.addRole(parm).then(res=>{
                    if(res.data.code==0){
                        this.$message({
                            type:"success",
                            message:"保存成功!"
                        })
                    this.getData()
                    }else{
                        this.$message.error("失败!");
                    }
                })
            }
            this.dialogVisible = false;
        }
  },
  created(){
      this.getPermissions()
      this.getData()
  }
}
</script>
