Browse Source

[完善]完善统计分析

非煤矿山灾害智能感知和预警系统
邵佳豪 2 years ago
parent
commit
4edf938877
  1. 4
      proxy.config.json
  2. 9
      src/app/home/commonComponents/chat-window/chat-window.component.ts
  3. 21
      src/app/home/statistic-analysis/home/home.component.html
  4. 32
      src/app/home/statistic-analysis/home/home.component.scss
  5. 81
      src/app/home/statistic-analysis/home/home.component.ts
  6. 6
      src/app/home/task/station-task-apply/station-task-apply.component.html
  7. 8
      src/app/home/task/station-weekly-plan/station-weekly-plan.component.ts
  8. 13
      src/signalRChat.ts

4
proxy.config.json

@ -1,11 +1,11 @@
{
"/api": {
"target": "https://121.36.37.70:8204",
"target": "https://fx.anxincloud.cn",
"secure": false,
"changeOrigin": true
},
"/hubs": {
"target": "https://121.36.37.70:8204",
"target": "https://fx.anxincloud.cn",
"secure": false,
"ws": true,
"logLevel": "debug"

9
src/app/home/commonComponents/chat-window/chat-window.component.ts

@ -34,10 +34,12 @@ export class ChatWindowComponent implements OnInit {
this.scrollToBottom()
}, 0);
this.getAllMessages()
signalR.initSR(this.taskId);
signalR.initSR(this.taskId, this.getAllMessages());
// 接收来自中心的消息
(signalR.SR as any).on('receiveMessage', (message: any) => {
console.log('收到消息', message)
@ -65,6 +67,7 @@ export class ChatWindowComponent implements OnInit {
getAllMessages() {
this.isLoading = true
console.log('任务id', this.taskId)
console.log('this', this)
this.http.get('/api/TaskChats/Groups', {
params: {
TaskId: this.taskId,
@ -74,7 +77,7 @@ export class ChatWindowComponent implements OnInit {
SortType: 'asc'
}
}).subscribe((data: any) => {
this.MessagesList = data.items[0].taskChatMessages
this.MessagesList = data.items[0].taskChatMessages ? data.items[0].taskChatMessages : []
this.members = data.items[0].members
this.members.forEach(item => {

21
src/app/home/statistic-analysis/home/home.component.html

@ -4,7 +4,7 @@
<div class="top1-1 fffcard">
<div class="top1-1item flexcolumn">
<div class="title">
任务总数&nbsp;&nbsp;&nbsp;100
任务总数&nbsp;&nbsp;&nbsp;188
</div>
<div class="taskNum" id="taskNumCharts">
@ -40,14 +40,13 @@
</div>
<div class="searchitem1">
<div class="titlered">
111
121
</div>
<span>9月不合格数量</span>
</div>
<div class="rangepicker">
<!-- <div class="rangepicker">
<nz-range-picker></nz-range-picker>
</div>
</div> -->
</div>
<div id="disqualificationUnit">
@ -91,7 +90,7 @@
</div>
<div class="rankingListBox">
<div class="rankingListItem" *ngFor="let item of rankingList1">
<div class="name">
<div class="name" [title]="item.name">
{{item.name}}
</div>
<div class="progress">
@ -106,6 +105,10 @@
<ng-template #elseTemplate>
<img src="../../../../assets/statistic-analysis/down.png" alt="">
</ng-template>
<span class="numchange"
[ngClass]="{'numchangered': item.type == 'down','invariant': item.type == 'invariant','numchangegreen': item.type == 'up'}">
{{item.changeNum}}
</span>
</div>
</div>
</div>
@ -118,7 +121,7 @@
<div class="holdCertificate">
<div class="rankingListBox">
<div class="rankingListItem" *ngFor="let item of rankingList2">
<div class="name">
<div class="name" [title]="item.name">
{{item.name}}
</div>
<div class="progress">
@ -133,6 +136,10 @@
<ng-template #elseTemplate>
<img src="../../../../assets/statistic-analysis/down.png" alt="">
</ng-template>
<span class="numchange"
[ngClass]="{'numchangered': item.type == 'down','invariant': item.type == 'invariant','numchangegreen': item.type == 'up'}">
{{item.changeNum}}
</span>
</div>
</div>
</div>

32
src/app/home/statistic-analysis/home/home.component.scss

@ -7,6 +7,7 @@
flex-direction: column;
color: #303133;
text-align: left;
overflow: hidden;
}
.fffcard {
@ -36,10 +37,12 @@
flex-direction: column;
justify-content: space-around;
box-sizing: border-box;
padding: 18px 0 18px 16px;
padding: 18px 0 18px 16px;
.taskRankingItem {
display: flex;
align-items: center;
img {
margin-right: 3px;
}
@ -104,6 +107,7 @@
.holdCertificate {
display: flex;
flex-direction: column;
overflow: hidden;
.companySupporttitle {
width: 100%;
@ -120,14 +124,16 @@
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-around;
justify-content: flex-start;
box-sizing: border-box;
padding: 0px 18px;
padding-bottom: 8px;
overflow-y: auto;
.rankingListItem {
display: flex;
align-items: center;
margin-bottom: 8px;
.name {
width: 35%;
@ -146,10 +152,27 @@
display: flex;
align-items: center;
margin-left: 12%;
position: relative;
img {
margin-left: 3px;
}
.numchange {
font-size: 14px;
}
.numchangered {
color: #ff1515;
}
.numchangegreen {
color: #58c694;
}
.invariant{
opacity: 0;
}
}
}
}
@ -188,6 +211,7 @@
display: flex;
justify-content: space-between;
margin-bottom: 18px;
overflow: hidden;
.top1 {
flex: 1;
@ -307,15 +331,17 @@
flex: .8;
display: flex;
flex-direction: column;
overflow: hidden;
.top3-1 {
flex: 1.1;
margin-bottom: 18px;
overflow: hidden;
}
.top3-2 {
flex: 1;
overflow: hidden;
}
}
}

81
src/app/home/statistic-analysis/home/home.component.ts

@ -1,3 +1,4 @@
import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
declare var AMap: any;
declare var AMapUI: any;
@ -9,12 +10,12 @@ import * as echarts from 'echarts';
})
export class HomeComponent implements OnInit {
constructor() { }
constructor(private http: HttpClient) { }
taskNumCharts
taskNumChartsOption = {
title: [
{
text: `{val|100}\n{name|单位总数}`,
text: `{val|195}\n{name|任务总数}`,
top: 'center',
left: '61%',
textStyle: {
@ -77,9 +78,9 @@ export class HomeComponent implements OnInit {
show: false
},
data: [
{ value: 48, name: '上级派发任务' },
{ value: 20, name: '自主任务' },
{ value: 32, name: '协助任务' }
{ value: 37, name: '上级派发任务' },
{ value: 56, name: '自主任务' },
{ value: 102, name: '协助任务' }
]
}
]
@ -123,7 +124,7 @@ export class HomeComponent implements OnInit {
},
series: [
{
data: [20, 16, 30, 20, 60, 80, 55, 90, 60, 70, 50, 20],
data: [8, 7, 8, 6, 11, 16, 18, 10, 14, 10, 9, 5],
type: 'line',
showSymbol: false,//去除面积图节点圆
smooth: true,//面积图改成弧形状
@ -144,7 +145,7 @@ export class HomeComponent implements OnInit {
completionOfTaskPieOption = {
title: [
{
text: `{val|260}\n{name|任务总数}`,
text: `{val|195}\n{name|任务总数}`,
top: 'center',
left: '26%',
textStyle: {
@ -207,8 +208,8 @@ export class HomeComponent implements OnInit {
show: false
},
data: [
{ value: 180, name: '已完成' },
{ value: 80, name: '未完成' }
{ value: 157, name: '已完成' },
{ value: 38, name: '未完成' }
]
}
]
@ -305,7 +306,7 @@ export class HomeComponent implements OnInit {
emphasis: {
focus: 'series'
},
data: [20, 20, 30, 10, 20, 30, 40, 50, 50, 40, 20, 30, 40]
data: [8, 17, 10, 14, 8, 16, 10, 11, 10, 15, 9, 10, 18]
},
{
name: '未完成',
@ -318,7 +319,7 @@ export class HomeComponent implements OnInit {
emphasis: {
focus: 'series'
},
data: [30, 10, 20, 10, 20, 30, 40, 30, 50, 40, 20, 10, 30]
data: [3, 2, 1, 5, 3, 3, 4, 5, 2, 3, 4, 2, 2]
}
]
};
@ -333,9 +334,17 @@ export class HomeComponent implements OnInit {
this.disqualificationUnitCharts = echarts.init(document.getElementById('disqualificationUnit'), null, { devicePixelRatio: 2 });
this.completionOfTaskPie = echarts.init(document.getElementById('completionOfTask1'), null, { devicePixelRatio: 2 });
this.completionOfTaskBar = echarts.init(document.getElementById('completionOfTask2'), null, { devicePixelRatio: 2 });
this.getData()
this.echartsSetData()
}
//获得统计数据
getData() {
this.http.get('/api/PlanTasks/Dashboard').subscribe((data: any) => {
console.log('统计数据', data)
})
}
echartsSetData() {
this.taskNumCharts && this.taskNumCharts.setOption(this.taskNumChartsOption);
@ -345,36 +354,46 @@ export class HomeComponent implements OnInit {
}
assistTaskRankingData = [
{ name: '济南市消防救援支队', num: 120, url: "../../../../assets/statistic-analysis/one.png" },
{ name: '历下区大队', num: 100, url: "../../../../assets/statistic-analysis/two.png" },
{ name: '南部山区大队', num: 80, url: "../../../../assets/statistic-analysis/three.png" },
{ name: '市中区大队', num: 60, url: "../../../../assets/statistic-analysis/four.png" },
{ name: '天桥区大队', num: 40, url: "../../../../assets/statistic-analysis/five.png" }
{ name: '济南市消防救援支队', num: 28, url: "../../../../assets/statistic-analysis/one.png" },
{ name: '历下区大队', num: 25, url: "../../../../assets/statistic-analysis/two.png" },
{ name: '南部山区大队', num: 18, url: "../../../../assets/statistic-analysis/three.png" },
{ name: '市中区大队', num: 16, url: "../../../../assets/statistic-analysis/four.png" },
{ name: '天桥区大队', num: 15, url: "../../../../assets/statistic-analysis/five.png" }
]
rankingList1 = [
{ name: '济南市消防救援支队', num: 80, type: "up" },
{ name: '历下区大队', num: 75, type: "down" },
{ name: '南部山区大队', num: 75, type: "up" },
{ name: '市中区大队', num: 75, type: "up" },
{ name: '槐荫区大队', num: 70, type: "up" },
{ name: '天桥区大队', num: 60, type: "up" }
{ name: '济南市消防救援支队', num: 80, type: "up", changeNum: 1 },
{ name: '历下区大队', num: 75, type: "down", changeNum: 1 },
{ name: '南部山区大队', num: 75, type: "up", changeNum: 2 },
{ name: '市中区大队', num: 75, type: "up", changeNum: 1 },
{ name: '槐荫区大队', num: 70, type: "up", changeNum: 3 },
{ name: '天桥区大队', num: 60, type: "up", changeNum: 1 }
]
rankingList2 = [
{ name: '长清区大队', num: 120, type: "up" },
{ name: '章丘区大队', num: 100, type: "down" },
{ name: '平阴县消防救援大队', num: 95, type: "down" },
{ name: '商河县消防救援大队', num: 90, type: "up" },
{ name: '济阳县消防救援大队', num: 40, type: "up" },
{ name: '莱芜区消防救援大队', num: 35, type: "up" }
{ name: '历下区大队', num: 100, type: "up", changeNum: 2 },
{ name: '高新技术产业开发区大队', num: 90, type: "down", changeNum: 1 },
{ name: '槐荫区大队', num: 88, type: "down", changeNum: 1 },
{ name: '天桥区大队', num: 80, type: "up", changeNum: 2 },
{ name: '历城区大队', num: 70, type: "up", changeNum: 1 },
{ name: '长清区大队', num: 53, type: "up", changeNum: 2 },
{ name: '南部山区大队', num: 80, type: "up", changeNum: 1 },
{ name: '章丘区大队', num: 70, type: "up", changeNum: 1 },
{ name: '平阴县大队', num: 53, type: "down", changeNum: 1 },
{ name: '济阳区大队', num: 80, type: "up", changeNum: 1 },
{ name: '市中区大队', num: 70, type: "down", changeNum: 2 },
{ name: '商河县大队', num: 53, type: "down", changeNum: 3 },
{ name: '莱芜区大队', num: 80, type: "down", changeNum: 1 },
{ name: '钢城区大队', num: 70, type: "up", changeNum: 3 },
{ name: '起步区大队', num: 50, type: "down", changeNum: 2 },
{ name: '特勤大队', num: 50, type: "up", changeNum: 2 },
]
maocard = [
{ name: "重点单位数量", num: 72674, url: '../../../../assets/statistic-analysis/unit.png' },
{ name: "不合格单位数量", num: 674, url: '../../../../assets/statistic-analysis/ununit.png' },
{ name: "协作任务数量", num: 32260, url: '../../../../assets/statistic-analysis/task.png' }
{ name: "重点单位数量", num: 19273, url: '../../../../assets/statistic-analysis/unit.png' },
{ name: "不合格单位数量", num: 121, url: '../../../../assets/statistic-analysis/ununit.png' },
{ name: "协作任务数量", num: 102, url: '../../../../assets/statistic-analysis/task.png' }
]

6
src/app/home/task/station-task-apply/station-task-apply.component.html

@ -49,9 +49,9 @@
<div class="searchbox">
<div class="search">
<nz-select nzPlaceHolder="任务名称" [(ngModel)]="searchForm.taskname" nzAllowClear>
<nz-option *ngIf="isSupervisor" nzValue="双随机" nzLabel="双随机"></nz-option>
<nz-option *ngIf="isSupervisor" nzValue="联络指导" nzLabel="联络指导"></nz-option>
<nz-option *ngIf="!isSupervisor" nzValue="熟悉演练" nzLabel="熟悉演练"></nz-option>
<nz-option nzValue="双随机" nzLabel="双随机"></nz-option>
<nz-option nzValue="联络指导" nzLabel="联络指导"></nz-option>
<nz-option nzValue="熟悉演练" nzLabel="熟悉演练"></nz-option>
</nz-select>
<input type="text" nz-input placeholder="单位名称" [(ngModel)]="searchForm.unitname" nzAllowClear />
<!-- <nz-select nzPlaceHolder="单位级别" [(ngModel)]="searchForm.unitlevel">

8
src/app/home/task/station-weekly-plan/station-weekly-plan.component.ts

@ -101,13 +101,13 @@ export class StationWeeklyPlanComponent implements OnInit {
}
checkTime(e, i, element) {
if (e) {
i.checkTime = moment(e).format('yyyy-MM-DD')
i.planTime = moment(e).format('yyyy-MM-DD')
} else {
i.checkTime = null
i.planTime = null
}
element.isLoading = true
let body = {
checkTime: i.checkTime
planTime: i.planTime
}
this.http.patch(`/api/PlanTasks/${i.id}`, body).subscribe({
next: (data) => {
@ -617,7 +617,7 @@ export class StationWeeklyPlanComponent implements OnInit {
let taskIds = []
element.data.forEach(item => {
item.data.forEach(i => {
i.checkTime && i.approvalStatus != '已检查' ? taskIds.push(i.id) : null
i.planTime && i.approvalStatus != '已检查' ? taskIds.push(i.id) : null
});
});
let params = {

13
src/signalRChat.ts

@ -2,7 +2,7 @@ import * as signalR from '@microsoft/signalr'
export default {
SR: {},
// 初始化连接
initSR: function (id) {
initSR: function (id, fun) {
const that = this
// // 连接 SignalR
const options: signalR.IHttpConnectionOptions = {
@ -24,8 +24,15 @@ export default {
async function start() {
try {
await (that.SR as any).start().then(() => {
console.log('加入聊天室',id)
that.SR.send("joinRoom", id)
console.log('加入聊天室', id)
that.SR.send("joinRoom", id).then(() => {
setTimeout(() => {
fun
}, 0);
})
});
} catch (err) {
setTimeout(start, 5000);

Loading…
Cancel
Save