<template> <el-dialog v-loading="loading" :show-close="false" :close-on-click-modal="false" :visible.sync="isShow" :title="this.curObj && this.curObj.id ? '编辑角色' : '添加角色'" :fullscreen="false" width="470px" custom-class="xl-dialog" center> <base-form style="width:400px" :data="formData" ref="ruleForm" :isInline="false" labelWidth="80px"> <div slot="otherItem" class="scoped-tree"> <!-- check-strictly --> <el-tree :data="curData" show-checkbox node-key="id" :default-expanded-keys="checkedIds" :default-checked-keys="checkedIds" ref="menuTree" :props="defaultProps"> </el-tree> </div> <div slot="footer"> <el-button class="xl-form-btn t2" @click="close">关 闭</el-button> <el-button class="xl-form-btn t1" @click="close('confirm')">确定</el-button> </div> </base-form> </el-dialog> </template> <script> export default { props: { isShow: Boolean, curObj: Object }, mixins, data() { return { formData: [], curData: [], checkedIds: [], defaultProps: { children: 'children', label: 'name' }, loading: true, } }, watch: { isShow: function(val) { if (val) { let params = {...this.curObj} this.checkedIds = params.permissions_ids || [] this.formData = [ {label: '角色名称', key: 'name', rules: 1}, {label: '角色描述', key: 'description', rules: 1}, ] this.setDefaultValue(params) } } }, created () { this.getMenu() }, methods: { getMenu () { this.$api.base.admpermissionslist().then(res => { this.curData = [...res] }) }, systemChange (val) { // console.log(val) }, close (str) { if (str === 'confirm') { this.$refs['ruleForm'].$refs['baseForm'].validate((valid) => { if (valid) { const oldform = this.$refs.ruleForm.baseForm let params = {...oldform} let str = 'admrolesadd' if(this.curObj && this.curObj.id) { params.id = this.curObj.id str = 'admrolesedit' } const resIds = this.$refs.menuTree.getCheckedNodes(false, false).map(item=> { return item.id }) params.node = resIds.join(',') this.$api.base[str](params).then(data => { this.$msgs('保存成功!') this.$emit('close', params) // this.setDefaultValue() }) } }) } else { this.$emit('close') this.setDefaultValue() } } } } </script> <style lang="scss" scoped> ::v-deep .scoped-tree { height: 300px; overflow-y: auto; .el-tree { background: #f7f7f7; } } </style>