import { HttpClient } from '@angular/common/http'; import { Component, OnInit, ViewChild } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; import { TreeService } from 'src/app/service/tree.service'; import { fromEvent, Subject } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; // 引入debounceTime、Subject import { NzFormatEmitEvent, NzTreeNodeOptions } from 'ng-zorro-antd/tree'; @Component({ selector: 'app-zhi-indicators', templateUrl: './zhi-indicators.component.html', styleUrls: ['./zhi-indicators.component.scss'] }) export class ZhiIndicatorsComponent implements OnInit { validateForm!: FormGroup; constructor(private fb: FormBuilder, private http: HttpClient, private toTree: TreeService) { } private valueChange = new Subject(); ngOnInit(): void { this.getAllOrganization() this.getCompanies() //保存防抖 this.valueChange.pipe(debounceTime(1000)).subscribe(data => { console.log(data); }); } saveItem() { this.valueChange.next('xxxx'); } months = [ { name: '1月', isable: true }, { name: '2月', isable: true }, { name: '3月', isable: true }, { name: '4月', isable: true }, { name: '5月', isable: true }, { name: '6月', isable: true }, { name: '7月', isable: true }, { name: '8月', isable: true }, { name: '9月', isable: true }, { name: '10月', isable: true }, { name: '11月', isable: true }, { name: '12月', isable: true } ] selectedMonth selectMonth(item) { this.selectedMonth = item.name } // 双随机 doubleRandom = { isExpand: true,//卡片展开 isPopover: false,//选择单位气泡卡片 search1: '',//选择单位气泡卡片---单位选择列表 search1Value: [], search2: '',//选择单位气泡卡片---组织选择列表 search2Value: [], selectedMenu: 1,//选择单位气泡卡片 data: [ { explain: '' } ],//表格数据 nodes: [], unitList: [] } // 熟悉演练 rehearsal = { isExpand: false,//卡片展开 isPopover: false,//选择单位气泡卡片 search1: '',//选择单位气泡卡片---单位选择列表 search1Value: [], search2: '',//选择单位气泡卡片---组织选择列表 search2Value: [], selectedMenu: 1,//选择单位气泡卡片 data: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],//表格数据 nodes: [], unitList: [] } PageNumber = 1 PageSize = 50 totalCount: number getCompanies(CompanyName?: string) { let params = { CompanyName: CompanyName, PageNumber: this.PageNumber, PageSize: this.PageSize } this.http.get('/api/Companies', { params: params }).subscribe((data: any) => { console.log(data); this.totalCount = data.totalCount data.items.forEach(element => { element.label = element.companyName element.value = element.id }); this.doubleRandom.unitList = this.doubleRandom.unitList.concat(data.items); this.doubleRandom.unitList = [...this.doubleRandom.unitList] }) } moreData() { this.PageNumber += 1 this.getCompanies() } log(data) { let arr = [] data.unitList.forEach(item => { item.checked ? arr.push(item.id) : null }); data.search1Value = arr } isPopover(data) { data.isPopover = !data.isPopover } //搜索框提交 submitForm(data): void { data.unitList = [] this.PageNumber = 1 this.getCompanies(data.search1) } // 弹出 tab popoverMenuSelect(data, type) { data.selectedMenu = type } expand(data) { data.isExpand = !data.isExpand } nzExpandAll = false; allOrList: any nodes getAllOrganization() { let params = { ContainsChildren: true, pageSize: 9999 } this.http.get('/api/Organizations', { params: params }).subscribe((data: any) => { data.items.forEach(element => { element.key = element.id element.title = element.name element.selectable = false }); this.allOrList = data.items this.nodes = [...this.toTree.toTree(data.items)] this.doubleRandom.nodes = JSON.parse(JSON.stringify(this.nodes)) this.rehearsal.nodes = JSON.parse(JSON.stringify(this.nodes)) }) } orcheckbox(data, $event, node) { if ($event) { data.search2Value.push(node.origin.name) } else { for (let index = 0; index < data.search2Value.length; index++) { const element = data.search2Value[index]; if (element == node.origin.name) { data.search2Value.splice(index, 1) } } } console.log(data.search2Value) } ngOnDestroy(): void { //Called once, before the instance is destroyed. //Add 'implements OnDestroy' to the class. console.log('毁灭了') this.doubleRandom.isPopover = false } nzEvent(event: NzFormatEmitEvent): any { console.log(event); // load child async if(event.node.origin.companyName){ return new Promise((resolve, reject) => { reject() }) } if (event.node.origin.level === 3 && !event.node.origin.companyName) { const node = event.node; console.log(node?.getChildren()) if (node?.getChildren().length === 0) { this.loadNode(event.node.origin.id).then(data => { node.addChildren(data); }); } } } loadNode(id): Promise { return new Promise(resolve => { let params = { OrganizationId: id, PageNumber: 1, PageSize: 9999 } this.http.get('/api/Companies', { params: params }).subscribe((data: any) => { console.log(data.items) data.items.forEach(element => { element.key = element.id element.title = element.companyName element.level = 4 }); resolve(data.items) }) }); } }