import { Component, OnInit, TemplateRef, ViewContainerRef } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { NzFormatEmitEvent, NzTreeComponent, NzTreeNodeOptions } from 'ng-zorro-antd/tree'; import { NzModalService } from 'ng-zorro-antd/modal'; import { NzMessageService } from 'ng-zorro-antd/message'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { TreeService } from 'src/app/service/tree.service'; import { ApplyComponent } from './apply/apply.component'; import { ApplyLookComponent } from './apply-look/apply-look.component'; import { ThisReceiver } from '@angular/compiler'; @Component({ selector: 'app-station-task-apply', templateUrl: './station-task-apply.component.html', styleUrls: ['./station-task-apply.component.scss'] }) export class StationTaskApplyComponent implements OnInit { validateForm!: FormGroup; constructor(private fb: FormBuilder, private modal: NzModalService, private viewContainerRef: ViewContainerRef, private message: NzMessageService, private http: HttpClient, private toTree: TreeService) { } searchForm = { taskname: '', unitname: '', unitlevel: '', or: '' } OrganizationId isSupervisor: boolean //是否为检查员 months = [ { id: 1, name: '1月', isable: true }, { id: 2, name: '2月', isable: true }, { id: 3, name: '3月', isable: true }, { id: 4, name: '4月', isable: true }, { id: 5, name: '5月', isable: true }, { id: 6, name: '6月', isable: true }, { id: 7, name: '7月', isable: true }, { id: 8, name: '8月', isable: true }, { id: 9, name: '9月', isable: true }, { id: 10, name: '10月', isable: true }, { id: 11, name: '11月', isable: true }, { id: 12, name: '12月', isable: true } ] selectedMonth selectedYear = 2022 selectedTime selectMonth(item) { this.selectedMonth = item.id this.getTaskList() } selectYear(e) { this.selectedYear = e this.getTaskList() } cancel(item, type) { } delete(item) { } isloading = false totalCount PageNumber = 1 PageSize = 10 taskLIst = [] getTaskList() { this.isloading = true let selectedTime = this.selectedYear + '-' + this.selectedMonth + '-' + '01' let params = { Month: selectedTime, OrganizationId: this.OrganizationId, TaskName: this.searchForm.taskname, CompanyName: this.searchForm.unitname, AssitantOrganizationId: this.searchForm.or, PageNumber: this.PageNumber, CreatorId: this.userId, PageSize: this.PageSize } this.http.get('/api/PlanTasks', { params: params }).subscribe((data: any) => { this.isloading = false console.log('任务申请列表', data); this.totalCount = data.totalCount this.taskLIst = [...data.items] }) } pageChange($event) { this.PageNumber = $event this.getTaskList() } search() { this.PageNumber = 1 this.getTaskList() } reset() { this.PageNumber = 1 this.searchForm = { taskname: '', unitname: '', unitlevel: '', or: '' } this.getTaskList() } expandKeys defaultOrId: string //获取所有组织机构 organizationList: any organizationListAll: any nodes: any = [] async getAllOrganization() { let params = { PageNumber: 1, PageSize: 9999 } var p = new Promise((resolve, reject) => { this.http.get('/api/Organizations', { params: params }).subscribe((data: any) => { data.items.forEach(element => { element.key = element.id element.title = element.name element.disableCheckbox = true element.selectable = false }); this.organizationListAll = JSON.parse(JSON.stringify(data.items)) this.organizationList = JSON.parse(JSON.stringify(data.items)).filter(item => { return item.level != 'squadron' }) resolve(data) }) }) return p } //获得所有检查员 supervisorList = [] mainsupervisorList = [] assitantsupervisorList = [] async getSupervisor() { var p = new Promise((resolve, reject) => { this.http.get('/api/Users/Inspectors').subscribe((data: any) => { console.log('检查员列表', data) data.forEach(element => { element.key = element.id element.title = element.name element.parentId = element.organizationId }); this.supervisorList = data resolve(data) }) }) return p } //获得除了检查员的其他用户 users async getUsers() { var p = new Promise((resolve, reject) => { let params = { OrganizationId: this.OrganizationId, OrganizationLevel: 'squadron', ContainsChildren: true, PageNumber: 1, PageSize: 9999 } this.http.get('/api/Users', { params: params }).subscribe((data: any) => { console.log('用户列表', data.items) data.items.forEach(element => { element.key = element.id element.title = element.name element.parentId = element.organizationId }); this.users = data.items resolve(data) }) }) return p } userId ngOnInit(): void { this.OrganizationId = JSON.parse(sessionStorage.getItem('userData')).organizationId this.userId = JSON.parse(sessionStorage.getItem('userData')).id let roles = JSON.parse(sessionStorage.getItem('userData')).roles let isSupervisor = roles.find(item => { return item.name.indexOf('检查') != -1 }) isSupervisor ? this.isSupervisor = true : this.isSupervisor = false this.selectedMonth = new Date().getMonth() + 1 this.getTaskList() Promise.all([this.getAllOrganization(), this.getSupervisor(), this.getUsers()]) .then((results) => { if (this.isSupervisor) { let arr = [...this.users, ...this.organizationListAll] this.nodes = this.toTree.toTree(JSON.parse(JSON.stringify(arr))) } else { let arr = [...this.supervisorList, ...this.organizationList] this.nodes = this.toTree.toTree(JSON.parse(JSON.stringify(arr))) } }); setTimeout(() => { this.rollStart() }, 0); } messageList = [1, 1, 1, 1, 1] timer rollStart() { var ROLL_SPEED = 100 var noticeList1 = document.getElementById('notice-list'); var noticeList2 = document.getElementById('notice-list-2'); var listWrapper = document.getElementById('list-wrapper'); noticeList2.innerHTML = noticeList1.innerHTML; this.timer = setInterval(rollStart, ROLL_SPEED); function rollStart() { if (Math.abs(_subStr(listWrapper.style.top)) >= noticeList1.clientHeight) { listWrapper.style.top = '0px' } else { var top = listWrapper.style.top listWrapper.style.top = _subStr(top) - 1 + 'px' } } // 截取px前数值 function _subStr(str) { var index = str.indexOf('px'); if (index > -1) { return parseFloat(str.substr(0, index + 1)) } } } mouseEnter() { // console.log('进入了') window.clearInterval(this.timer); } mouseleave() { this.rollStart() } ngOnDestroy(): void { console.log('退出了') this.mouseEnter() } apply() { if (this.nodes.length == 0) { this.message.create('warning', '组织机构为空,请稍后重试'); return } if (this.supervisorList.length == 0) { this.message.create('warning', '检查员名单为空,请稍后重试'); return } const modal = this.modal.create({ nzTitle: '申请', nzContent: ApplyComponent, nzViewContainerRef: this.viewContainerRef, nzWidth: 660, nzMaskClosable: false, nzComponentParams: { title: this.isSupervisor ? ["联络指导", "双随机"] : ["熟悉演练"], supervisorList: JSON.parse(JSON.stringify(this.supervisorList)), organizationList: JSON.parse(JSON.stringify(this.organizationList)), users: JSON.parse(JSON.stringify(this.users)), nodes: JSON.parse(JSON.stringify(this.nodes)) }, nzOnOk: async () => { console.log(instance.validateForm.value) if (instance.validateForm.valid) { await new Promise((resolve, reject) => { let body = { taskName: instance.validateForm.value.taskname, taskType: instance.validateForm.value.taskname, companyId: instance.validateForm.value.unitname, organizationId: this.OrganizationId, supervisorIds: instance.validateForm.value.organization, creationType: '申领任务', approvalStatus: '待处理' } this.http.post('/api/PlanTasks', body).subscribe({ next: (data) => { this.message.create('success', '创建成功'); resolve(data) this.getTaskList() return true }, error: (err) => { this.message.create('warning', '创建失败'); reject(err) return false } }) }) } else { this.message.create('warning', '请填写完整!'); return false } } }); const instance = modal.getContentComponent(); modal.afterOpen.subscribe(() => console.log('[afterOpen] emitted!')); modal.afterClose.subscribe(result => console.log('[afterClose] The result is:', result)); } look(item) { const modal = this.modal.create({ nzTitle: '详情', nzContent: ApplyLookComponent, nzViewContainerRef: this.viewContainerRef, nzWidth: 660, nzMaskClosable: false, nzComponentParams: { data: item, }, nzFooter: null }); const instance = modal.getContentComponent(); modal.afterOpen.subscribe(() => console.log('[afterOpen] emitted!')); modal.afterClose.subscribe(result => console.log('[afterClose] The result is:', result)); } } export enum ApprovalStatus { 未派发 = 0, 待处理 = 1, 通过 = 2, 驳回 = 3, 待检查 = 4, 已检查 = 5, } export enum TaskType { 双随机, 熟悉演练, 投诉举报, 行政许可, 联络指导, 消防宣传, 火灾调查 }