import { Component, OnInit } from '@angular/core'; import { FormBuilder,FormControl,FormGroup,Validators} from '@angular/forms'; import { HttpClientService } from '../../../../services/http-client.service'; import { Router,ActivatedRoute } from '@angular/router'; import { NzMessageService } from 'ng-zorro-antd'; import { Observable } from 'rxjs'; import 'ztree'; declare var $: any; declare var jQuery: any; @Component({ selector: 'app-role-management-modify', templateUrl: './role-management-modify.component.html', styleUrls: ['./role-management-modify.component.scss'] }) export class RoleManagementModifyComponent implements OnInit { /* 新树形组件参数 begin*/ parentNode:any; parentName:any; treeSelected:any; isTreeTop:any; /* 新树形组件参数 bed */ validateForm: FormGroup; visibleUsers = false; //控制抽屉显示 statusParamsDetail:any={ //获取用户详情接口的状态,0请求失败 1请求前 2请求中 3请求成功,有数据 4请求成功,无数据 status:1, } statusParamsUsers:any={ //接口的状态,0请求失败 1请求前 2请求中 3请求成功,有数据 4请求成功,无数据 status:1, } modifyType:any=1; //当前页面操作类型 1 新增 2 编辑 public roleId:any=''; public userSelecteds:any=[]; //机构负责人已选用户-新增、修改时 public userData:any=[]; //用户列表数据 public search:any={ page_index:'1', page_size:'10', real_name:'', } collectionSize:any ; public permissionChecked:any=[]; //角色详情的权限列表 isLoadingSave:any=false; constructor( private fb: FormBuilder, private http:HttpClientService, private route:ActivatedRoute, private router:Router, private message: NzMessageService, ) { } ngOnInit() { this.validateForm = this.fb.group({ role_name:[ '', [ Validators.required ] ], role_type:[ '1', [ Validators.required ] ], //0=系统内置(不可删除) ,1=用户定义 description:[ ''], role_code:[ ''], status:[''], user:[], permission:[], }); this.queryTable(); //取路由参数 this.route.queryParams.subscribe(routeParams=>{ this.modifyType=routeParams.operateType; //routeParams 1新增 2修改 if(routeParams.operateType==2){ this.roleId=routeParams.id; this.queryUserById(); this.queryDetail(); }else{ this.initTree(); this.statusParamsDetail.status=3; } }) } submitForm(){ let permission:any=[]; var zTree = $.fn.zTree.getZTreeObj("treeDemo"); var checkList=zTree.getCheckedNodes(true); if(checkList.length>0){ for(var i=0;i0){ this.userSelecteds.forEach(item=>{ users.push({ uid:item.uid, real_name:item.real_name, mobile:item.mobile, email:item.email, sex:item.sex, }) }) } this.validateForm.patchValue({ permission:permission, user:users, }) this.isLoadingSave=true; if(this.modifyType==1){ this.http.post('/sysapi/setting/role/add/',this.validateForm.value).subscribe((json)=>{ this.isLoadingSave=true; if(json.is_success){ this.message.success(`新增成功!`); this.router.navigate(['app/system/roles']) }else{ this.message.error(`新增失败!`); } }) }else if(this.modifyType==2){ this.isLoadingSave=true; this.http.put('/sysapi/setting/role/update/'+this.roleId,this.validateForm.value).subscribe((json)=>{ if(json.is_success){ this.message.success(`修改成功!`); this.router.navigate(['app/system/roles']) }else{ this.message.error(`修改失败!`); } }) } } //修改时查询该角色下的所有用户 queryUserById():void{ this.http.get('/sysapi/setting/role/users/'+this.roleId).subscribe((json)=>{ if(json.is_success){ json.body.forEach(item=>{ item.checked=true; item.disabled=false; this.userSelecteds = [ ...this.userSelecteds, item]; }) }else{ } }) } //根据id查询角色详情 queryDetail():void{ this.http.get('/sysapi/setting/role/detail/find',{rid:this.roleId}).subscribe((json)=>{ if(json.is_success){ if(json.body){ this.statusParamsDetail=3; //数据回填 let item=json.body; this.validateForm.patchValue({ role_name:item.role_name, role_type:item.role_type, //0=系统内置(不可删除) ,1=用户定义 description:item.description, role_code:item.role_code, status:item.status, }) this.permissionChecked=item.permission; this.initTree(); }else{ this.statusParamsDetail=4; } }else{ this.statusParamsDetail=0; } }) } //保存机构负责人 userSave(){ this.userData.forEach(item=>{ if(item.checked&&!item.disabled){ // 增加数据 this.userSelecteds = [ ...this.userSelecteds, item]; } }) this.visibleUsers = false; } //处理机构负责人选择和数据回填 userSelect(){ if(this.userData){ this.userData.forEach(item=>{ this.userSelecteds.forEach(option=>{ if(item.uid==option.uid){ item.checked=true; item.disabled=true; } }) }) } } //删除机构负责人 delectConfirm(item){ this.userSelecteds=this.userSelecteds.filter(function(option){ return item.uid!==option.uid }) } //打开机构负责人抽屉 openUsers(){ this.visibleUsers = true; this.queryTable(); } //关闭机构选择页面 closeUser(): void { this.visibleUsers = false; } //翻页 pageChange(event){ this.search.page_index=event; this.queryTable(); } //获取用户列表 queryTable():void{ this.statusParamsUsers.status=1; this.http.get('/sysapi/setting/user/list',this.search).subscribe((json)=>{ if(json.is_success){ let data=json.body.list; this.collectionSize=json.body.total; if(json.body.list&&json.body.list.length>0){ this.statusParamsUsers.status=3; data.forEach(item=>{ if(this.userSelecteds.length>0){ this.userSelecteds.forEach(option=>{ if(item.uid==option.uid){ item.checked=true; item.disabled=true; } }) }else{ item.checked=false; item.disabled=false; } }) }else{ this.statusParamsUsers.status=4; } this.userData=data; }else{ this.statusParamsUsers.status=0; } }) } //新树模型参数设置 public zNodes: any[]; setting = { data: { simpleData: { enable: true } }, view: { showLine: true, dblClickExpand: false, showIcon:true }, check:{ autoCheckTrigger:true, chkboxType:{"Y":"ps","N":"ps"}, enable: true, chkStyle: "checkbox", }, callback: { //节点点击事件 onClick: (event, treeId, treeNode, clickFlag) => { var zTree = $.fn.zTree.getZTreeObj("treeDemo"); zTree.expandNode(treeNode); this.treeSelected=treeNode; this.parentNode=this.treeSelected.getParentNode(); if(!this.parentNode){ this.isTreeTop=true; }else{ this.isTreeTop=false; } }, //节点展开事件 onExpand: (event, treeId, treeNode) => { } }, }; //新树模型 initTree(){ this.http.get('/sysapi/setting/permission/menu/list').subscribe(json=>{ if(json.is_success){ if(json.body&&json.body.length>0){ if(this.modifyType==2&&this.permissionChecked.length>0){ json.body.forEach(item=>{ this.foreachNode(item); }) } } } let treeList=[]; treeList.push({ //一层目录 name:"全部权限", isParent:true, open:true, id:'', children:json.body }); this.zNodes=treeList; $.fn.zTree.init($("#treeDemo"), this.setting, this.zNodes); var zTree = $.fn.zTree.getZTreeObj("treeDemo"); let node = zTree.getNodes(); }) } //递归方法处理权限树回填 foreachNode(node){ this.setNode(node); if(node.children&&node.children.length>0){ node.children.forEach(item=>{ this.foreachNode(item) }) } } //递归方法,处理单个节点 setNode(node){ this.permissionChecked.forEach(item=>{ if(item.pid==node.id){ node.checked=true; } }) } }