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 } from '@angular/common/http'; import { TreeService } from 'src/app/service/tree.service'; import * as moment from 'moment'; @Component({ selector: 'app-station-weekly-plan', templateUrl: './station-weekly-plan.component.html', styleUrls: ['./station-weekly-plan.component.scss'] }) export class StationWeeklyPlanComponent implements OnInit { constructor(private http: HttpClient, private modal: NzModalService, private message: NzMessageService) { } OrganizationId userId isSupervisor 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.initializeData() this.getTaskList() } selectYear(e) { this.selectedYear = e this.initializeData() this.getTaskList() } isExpand = true expand() { this.isExpand = !this.isExpand } formatOne = (percent: number): string => `${percent}%\n完成率`; openDetails(data, type) { data.isDetails = type } radioChange(e, i, element) { element.isLoading = true let body = { isSpread: e } this.http.patch(`/api/PlanTasks/${i.id}`, body).subscribe({ next: (data) => { this.message.create('success', e ? '宣传通知已发出' : '取消宣传'); element.isLoading = false }, error: (err) => { this.message.create('warning', '发送失败'); element.isLoading = false } }) } checkTime(e, i, element) { if (e) { i.checkTime = moment(e).format('yyyy-MM-DD') } else { i.checkTime = null } element.isLoading = true let body = { checkTime: i.checkTime } this.http.patch(`/api/PlanTasks/${i.id}`, body).subscribe({ next: (data) => { this.message.create('success', '检查日期分配成功'); element.isLoading = false }, error: (err) => { this.message.create('warning', '检查日期分配失败'); element.isLoading = false } }) } stationData = [] //获得辖区下所有救援站 totalCount: string allOrList: any getAllStation() { let params = { ContainsChildren: true, pageSize: 9999 } this.http.get('/api/Organizations', { params: params }).subscribe((data: any) => { this.totalCount = data.totalCount data.items = data.items.filter(element => { return element.level == 'squadron' }); data.items.forEach(element => { element.isExpand = false element.isLoading = false }); this.stationData = data.items }) } cardData = [ { name: '双随机', isDetails: false, isloading: false, background: '#1D9DFF', icon: 'suiji.png', scale: '0/0', data: [] }, { name: '行政许可', isDetails: false, isloading: false, background: '#42B983', icon: 'xuke.png', scale: '0/0', data: [] }, { name: '熟悉演练', isDetails: false, isloading: false, background: '#9D80FF', icon: 'yanlian.png', scale: '0/0', data: [] }, { name: '联络指导', isDetails: false, isloading: false, background: '#5483EA', icon: 'zhidao.png', scale: '0/0', data: [] }, { name: '消防宣传', isDetails: false, isloading: false, background: '#FF5D2A', icon: 'xuanchuan.png', scale: '0/0', data: [] }, { name: '投诉举报', isDetails: false, isloading: false, background: '#5087FF', icon: 'tousu.png', scale: '0/0', data: [] }, { name: '火灾调查', isDetails: false, isloading: false, background: '#FF404D', icon: 'huozai.png', scale: '0/0', data: [] } ] //初始化数据 initializeData() { this.cardData = [ { name: '双随机', isDetails: false, isloading: false, background: '#1D9DFF', icon: 'suiji.png', scale: '0/0', data: [] }, { name: '行政许可', isDetails: false, isloading: false, background: '#42B983', icon: 'xuke.png', scale: '0/0', data: [] }, { name: '熟悉演练', isDetails: false, isloading: false, background: '#9D80FF', icon: 'yanlian.png', scale: '0/0', data: [] }, { name: '联络指导', isDetails: false, isloading: false, background: '#5483EA', icon: 'zhidao.png', scale: '0/0', data: [] }, { name: '消防宣传', isDetails: false, isloading: false, background: '#FF5D2A', icon: 'xuanchuan.png', scale: '0/0', data: [] }, { name: '投诉举报', isDetails: false, isloading: false, background: '#5087FF', icon: 'tousu.png', scale: '0/0', data: [] }, { name: '火灾调查', isDetails: false, isloading: false, background: '#FF404D', icon: 'huozai.png', scale: '0/0', data: [] } ] this.stationData.forEach(element => { element.isExpand = false element.isLoading = false element.data = [] }); } isloading = false PageNumber = 1 PageSize = 9999 async getTaskList() { this.isloading = true let selectedTime = this.selectedYear + '-' + this.selectedMonth + '-' + '01' let params = { Month: selectedTime, // OrganizationId: this.isSupervisor ? this.OrganizationId : "", SupervisorId: this.userId, PageNumber: this.PageNumber, PageSize: this.PageSize } var p = await new Promise((resolve, reject) => { this.http.get('/api/PlanTasks', { params: params }).subscribe((data: any) => { this.isloading = false // console.log('任务申请列表', data.items); data.items.forEach(element => { this.cardData.forEach((item, key) => { element.taskType == item.name ? this.cardData[key].data.push(element) : null }); }); resolve(data) console.log('并入卡片数据', this.cardData) }) }) return p } //接受任务 accept(i, item) { this.modal.confirm({ nzTitle: `确定要接受该任务吗?`, nzOkText: '确定', nzOkType: 'default', nzOnOk: () => { item.isloading = true this.http.post(`/api/PlanTasks/Approval/${i.id}`, null, { params: { approvalStatus: '通过' } }).subscribe({ next: (data) => { this.message.create('success', '已接受'); i.approvalStatus = '通过' item.isloading = false this.stationData.forEach(element => { if (element.id == i.company.organizationId) { if (element.isExpand) { this.getTaskListOfStation(element) } } }); }, error: (err) => { this.message.create('warning', '接受失败'); item.isloading = false } }) }, nzCancelText: '取消' }); } //拒绝任务 reject(i, item) { this.modal.confirm({ nzTitle: `确定要拒绝该任务吗?`, nzOkText: '确定', nzOkType: 'default', nzOnOk: () => { item.isloading = true this.http.post(`/api/PlanTasks/Approval/${i.id}`, null, { params: { approvalStatus: '驳回' } }).subscribe({ next: (data) => { this.message.create('success', '已拒绝'); i.approvalStatus = '驳回' item.isloading = false this.stationData.forEach(element => { if (element.id == i.company.organizationId) { if (element.isExpand) { this.getTaskListOfStation(element) } } }); }, error: (err) => { this.message.create('warning', '拒绝失败'); item.isloading = false } }) }, nzCancelText: '取消' }); } 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.getAllStation() this.getTaskList() 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() { window.clearInterval(this.timer); } mouseleave() { this.rollStart() } ngOnDestroy(): void { console.log('退出了') this.mouseEnter() } expandcarditem(item) { item.isExpand = !item.isExpand console.log(item) if (item.isExpand) { this.getTaskListOfStation(item) } } //获得消防站下的所有任务 getTaskListOfStation(item) { let selectedTime = this.selectedYear + '-' + this.selectedMonth + '-' + '01' let params = { Month: selectedTime, CompanyOrganizationId: item.id, PageNumber: this.PageNumber, approvalStatuses: '通过', PageSize: this.PageSize } item.isLoading = true this.http.get('/api/PlanTasks', { params: params }).subscribe({ next: (data: any) => { item.isLoading = false let listData = [ { name: '双随机', background: '#1D9DFF', icon: 'suiji.png', scale: '0/0', data: [] }, { name: '行政许可', background: '#42B983', icon: 'xuke.png', scale: '0/0', data: [] }, { name: '熟悉演练', background: '#9D80FF', icon: 'yanlian.png', scale: '0/0', data: [] }, { name: '联络指导', background: '#5483EA', icon: 'zhidao.png', scale: '0/0', data: [] }, { name: '消防宣传', background: '#FF5D2A', icon: 'xuanchuan.png', scale: '0/0', data: [] }, { name: '投诉举报', background: '#5087FF', icon: 'tousu.png', scale: '0/0', data: [] }, { name: '火灾调查', background: '#FF404D', icon: 'huozai.png', scale: '0/0', data: [] } ] data.items.forEach(element => { listData.forEach((item, key) => { element.taskType == item.name ? listData[key].data.push(element) : null }); }); for (let index = 0; index < listData.length; index++) { const element = listData[index]; if (element.data.length == 0) { listData.splice(index, 1) index-- } } item.data = listData // console.log('点击的救援站通过数据', item) }, error: (err) => { this.message.create('warning', '获取数据失败'); item.isLoading = false } }) } }