Browse Source

Merge branch 'master' of http://121.36.37.70:3000/shaojiahao/Jinan_project

非煤矿山灾害智能感知和预警系统
jingbowen 2 years ago
parent
commit
dc74892baf
  1. 4
      proxy.config.json
  2. 9
      src/app/home/commonComponents/chat-window/chat-window.component.html
  3. 8
      src/app/home/commonComponents/chat-window/chat-window.component.scss
  4. 44
      src/app/home/commonComponents/chat-window/chat-window.component.ts
  5. 12
      src/app/home/home-routing.module.ts
  6. 11
      src/app/home/home.module.ts
  7. 9
      src/app/home/nav/nav.component.ts
  8. 163
      src/app/home/statistic-analysis/home/home.component.html
  9. 351
      src/app/home/statistic-analysis/home/home.component.scss
  10. 474
      src/app/home/statistic-analysis/home/home.component.ts
  11. 5
      src/app/home/statistic-analysis/statistic-analysis.component.html
  12. 4
      src/app/home/system-management/user/adduser/adduser.component.html
  13. 4
      src/app/home/system-management/user/edituser/edituser.component.html
  14. 2
      src/app/home/system-management/user/user.component.html
  15. 75
      src/app/home/task/da-monthly-task-overview/da-monthly-task-overview.component.html
  16. 15
      src/app/home/task/da-monthly-task-overview/da-monthly-task-overview.component.scss
  17. 22
      src/app/home/task/da-monthly-task-overview/da-monthly-task-overview.component.ts
  18. 40
      src/app/home/task/da-oneself-plan/da-oneself-plan.component.html
  19. 7
      src/app/home/task/da-oneself-plan/da-oneself-plan.component.scss
  20. 4
      src/app/home/task/da-oneself-plan/da-oneself-plan.component.ts
  21. 4
      src/app/home/task/da-oneself-plan/plan-adjustment/plan-adjustment.component.html
  22. 6
      src/app/home/task/station-task-apply/apply/apply.component.html
  23. 5
      src/app/home/task/station-task-apply/apply/apply.component.ts
  24. 24
      src/app/home/task/station-task-apply/station-task-apply.component.html
  25. 18
      src/app/home/task/station-task-apply/station-task-apply.component.scss
  26. 39
      src/app/home/task/station-task-execution/station-task-execution.component.html
  27. 29
      src/app/home/task/station-task-execution/station-task-execution.component.scss
  28. 61
      src/app/home/task/station-task-execution/station-task-execution.component.ts
  29. 31
      src/app/home/task/station-task-execution/upload/upload.component.html
  30. 49
      src/app/home/task/station-task-execution/upload/upload.component.scss
  31. 139
      src/app/home/task/station-task-execution/upload/upload.component.ts
  32. 6
      src/app/home/task/station-weekly-plan/station-weekly-plan.component.html
  33. 2
      src/app/home/task/station-weekly-plan/station-weekly-plan.component.scss
  34. 58
      src/app/home/task/station-weekly-plan/station-weekly-plan.component.ts
  35. 15
      src/app/home/task/station-weekly-plan/task-details/task-details.component.html
  36. 5
      src/app/home/task/zhi-indicators/zhi-indicators.component.html
  37. 6
      src/app/home/task/zhi-indicators/zhi-indicators.component.scss
  38. 2
      src/app/pages/login/login.component.html
  39. 17
      src/app/pipe/cameraTypePipe.ts
  40. 9
      src/app/pipe/pipe.ts
  41. BIN
      src/assets/images/icon/isCheckAgain.png
  42. BIN
      src/assets/statistic-analysis/down.png
  43. BIN
      src/assets/statistic-analysis/five.png
  44. BIN
      src/assets/statistic-analysis/four.png
  45. BIN
      src/assets/statistic-analysis/one.png
  46. BIN
      src/assets/statistic-analysis/task.png
  47. BIN
      src/assets/statistic-analysis/three.png
  48. BIN
      src/assets/statistic-analysis/two.png
  49. BIN
      src/assets/statistic-analysis/unit.png
  50. BIN
      src/assets/statistic-analysis/ununit.png
  51. BIN
      src/assets/statistic-analysis/up.png
  52. 6
      src/index.html
  53. 13
      src/signalRChat.ts
  54. 9
      src/theme.less

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.html

@ -1,11 +1,14 @@
<div class="chatbox" ngDraggable [preventDefaultEvent]="true" [handle]="dragheader">
<div class="titlebox">
<span class="titlename" #dragheader>
历下区A消防救援站群聊(3)
</span>
<div class="titlename" #dragheader [title]="chatName">
{{chatName}}
</div>
<span class="close" nz-icon nzType="close" nzTheme="outline" (click)="close()"></span>
</div>
<div class="chatcontent" id="chatcontent">
<div class="spin" *ngIf="isLoading">
<nz-spin nzSimple></nz-spin>
</div>
<div class="chatitem" *ngFor="let item of MessagesList" [ngClass]="{'chatitemMe': item.senderId == userId}">
<div class="name">
{{item.senderName}}

8
src/app/home/commonComponents/chat-window/chat-window.component.scss

@ -19,11 +19,16 @@
box-sizing: border-box;
padding: 0 18px;
color: #000;
.titlename {
flex: 1;
cursor: move;
text-align: left;
width: 100px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.close {
@ -36,6 +41,7 @@
overflow-y: auto;
box-sizing: border-box;
padding: 0 18px;
position: relative;
.chatitem {
display: flex;

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

@ -3,6 +3,7 @@ import { NzMessageService } from 'ng-zorro-antd/message';
import signalR from '../../../../signalRChat'
import { HttpClient } from '@angular/common/http';
import { StationWeeklyPlanComponent } from '../../task/station-weekly-plan/station-weekly-plan.component';
import { StationTaskExecutionComponent } from '../../task/station-task-execution/station-task-execution.component';
@Component({
@ -15,7 +16,8 @@ export class ChatWindowComponent implements OnInit {
constructor(private ngZone: NgZone, private element: ElementRef, private message: NzMessageService,
@Inject(StationWeeklyPlanComponent) private parentComponent: any, private http: HttpClient) { }
@Inject(StationWeeklyPlanComponent) private parentComponent: any, private http: HttpClient,
@Inject(StationTaskExecutionComponent) private parentComponent2: any) { }
@ -32,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)
@ -50,23 +54,42 @@ export class ChatWindowComponent implements OnInit {
/**
*
*/
members = []
MessagesList = []
isLoading = false
chatName = ''
/**
*
*/
getAllMessages() {
this.isLoading = true
console.log('任务id', this.taskId)
this.http.get('/api/TaskChats/Messages', {
console.log('this', this)
this.http.get('/api/TaskChats/Groups', {
params: {
TaskId: this.taskId,
PageNumber:1,
PageSize:999,
SortProperty:'CreationTime',
SortType:'asc'
PageNumber: 1,
PageSize: 999,
SortProperty: 'CreationTime',
SortType: 'asc'
}
}).subscribe((data: any) => {
this.MessagesList = data.items
console.log('聊天记录', this.MessagesList)
this.MessagesList = data.items[0].taskChatMessages ? data.items[0].taskChatMessages : []
this.members = data.items[0].members
this.members.forEach(item => {
this.chatName += item.name + ' '
})
this.chatName = this.chatName + '的群聊' + '(' + this.members.length + ')'
this.isLoading = false
console.log('chatName', this.chatName)
console.log('消息列表', this.MessagesList)
setTimeout(() => {
this.scrollToBottom()
}, 0);
})
}
@ -80,6 +103,7 @@ export class ChatWindowComponent implements OnInit {
close() {
this.parentComponent.closechat()
this.parentComponent2.closechat()
}
send() {
if (!this.text) {

12
src/app/home/home-routing.module.ts

@ -3,6 +3,7 @@ import { RouterModule, Routes } from '@angular/router';
import { BasicInfoComponent } from './basic-info/basic-info.component';
import { UnitDetailsComponent } from './basic-info/unit-details/unit-details.component';
import { UnitComponent } from './basic-info/unit/unit.component';
import { HomeComponent } from './statistic-analysis/home/home.component';
import { StatisticAnalysisComponent } from './statistic-analysis/statistic-analysis.component';
import { OrComponent } from './system-management/or/or.component';
import { RoleComponent } from './system-management/role/role.component';
@ -70,7 +71,16 @@ const routes: Routes = [
}
],
},
{ path: 'statistic', component: StatisticAnalysisComponent },
{
path: 'statistic', component: StatisticAnalysisComponent,
children: [
{ path: '', redirectTo: '/statistic/home', pathMatch: 'full' },
{
path: 'home',
component: HomeComponent,
}
],
},
{
path: 'system', component: SystemManagementComponent,
children: [

11
src/app/home/home.module.ts

@ -71,6 +71,9 @@ import { OperationLogComponent } from './basic-info/unit-details/operation-log/o
import { NzDividerModule } from 'ng-zorro-antd/divider';
import { ChatWindowComponent } from './commonComponents/chat-window/chat-window.component';
import { AngularDraggableModule } from 'angular2-draggable';
import { HomeComponent } from './statistic-analysis/home/home.component';
import { UploadComponent } from './task/station-task-execution/upload/upload.component';
import { fileName } from '../pipe/pipe';
@NgModule({
declarations: [
NavComponent,
@ -109,7 +112,10 @@ import { AngularDraggableModule } from 'angular2-draggable';
EditOrComponent,
CreateTaskComponent,
OperationLogComponent,
ChatWindowComponent
ChatWindowComponent,
HomeComponent,
UploadComponent,
fileName
],
imports: [
CommonModule,
@ -149,6 +155,7 @@ import { AngularDraggableModule } from 'angular2-draggable';
NzDividerModule,
AngularDraggableModule
],
entryComponents: [AddroleComponent, EditroleComponent, AdduserComponent, EdituserComponent, AddorComponent, EditorComponent, ApplyComponent, ApplyLookComponent, LookTaskComponent, AllotPersonComponent, EditOrComponent, CreateTaskComponent]
providers: [StationTaskExecutionComponent, StationWeeklyPlanComponent],
entryComponents: [AddroleComponent, EditroleComponent, AdduserComponent, EdituserComponent, AddorComponent, EditorComponent, ApplyComponent, ApplyLookComponent, LookTaskComponent, AllotPersonComponent, EditOrComponent, CreateTaskComponent, UploadComponent]
})
export class HomeModule { }

9
src/app/home/nav/nav.component.ts

@ -42,15 +42,16 @@ export class NavComponent implements OnInit {
//1.右下角弹窗(新增任务提示)
console.log('收到消息---', message)
this.methodService.notificationsList.unshift(message)
if (message.planTaskState == 'added') {
// if (message.planTaskState == 'added') {
this.createBasicNotification(message)
}
// }
//2.右上角消息栏目(全部消息)
//3.生成周计划新增徽章(新增任务提示)
if (this.router.url.indexOf('weeklyplan') != -1) {
this.methodService.getTaskDetails(message.planTaskId).then((data: any) => {
data.signalRData = message
this.newTaskMessage.sendMessage(data);//发布一条消息
})
}
@ -63,8 +64,8 @@ export class NavComponent implements OnInit {
createBasicNotification(data): void {
this.notification.blank(
'任务提示',
data.senderName + '向你发起一个任务,' + data.content,
{ nzPlacement: 'bottomRight' }
data.content,
{ nzPlacement: 'bottomRight', nzDuration: 5 }
);
}

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

@ -0,0 +1,163 @@
<div class="box">
<div class="topbox">
<div class="top1">
<div class="top1-1 fffcard">
<div class="top1-1item flexcolumn">
<div class="title">
任务总数&nbsp;&nbsp;&nbsp;188个
</div>
<div class="taskNum" id="taskNumCharts">
</div>
</div>
<div class="top1-1item flexcolumn">
<div class="title">
协助任务数量排名TOP5
</div>
<div class="assistTaskRanking">
<div class="taskRankingItem" *ngFor="let item of assistTaskRankingData">
<img [src]="item.url" alt="">
{{item.name}}
<div class="border"></div>
<div class="num">
{{item.num}}
</div>
</div>
</div>
</div>
</div>
<div class="top1-2 fffcard flexcolumn">
<div class="title ">
不合格单位趋势图
</div>
<div class="disqualificationUnit ">
<div class="searchbox">
<div class="searchitem1">
<div class="titleblue">
27%
</div>
<span>9月合格率</span>
</div>
<div class="searchitem1">
<div class="titlered">
121
</div>
<span>9月不合格数量</span>
</div>
<!-- <div class="rangepicker">
<nz-range-picker></nz-range-picker>
</div> -->
</div>
<div id="disqualificationUnit">
</div>
</div>
</div>
</div>
<div class="top2">
<div class="mapcardbox">
<div class="mapcarditem" *ngFor="let item of maocard">
<div class="mapcarditemname">
<span class="mapcarditemname1">
{{item.name}}
</span>
<span class="mapcarditemname2">
{{item.num}}
</span>
</div>
<div class="mapcarditemimg">
<img [src]="item.url" alt="">
</div>
</div>
</div>
<div class="mapbox" id="mapbox">
</div>
</div>
<div class="top3">
<div class="top3-1 fffcard flexcolumn">
<div class="title ">
企业支持度排名
</div>
<div class="companySupport">
<div class="companySupporttitle">
<span>
消防机构
</span>
<span>
支持度
</span>
</div>
<div class="rankingListBox">
<div class="rankingListItem" *ngFor="let item of rankingList1">
<div class="name" [title]="item.name">
{{item.name}}
</div>
<div class="progress">
<nz-progress [nzStrokeColor]="'#2C4DC0'" [nzStrokeLinecap]="'square'"
[nzShowInfo]="false" [nzPercent]="item.num"></nz-progress>
</div>
<div class="num">
<span>{{item.num}}%</span>
<ng-container *ngIf="item.type == 'up'; else elseTemplate">
<img src="../../../../assets/statistic-analysis/up.png" alt="">
</ng-container>
<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>
</div>
</div>
<div class="top3-2 fffcard flexcolumn">
<div class="title">
持证人数排名
</div>
<div class="holdCertificate">
<div class="rankingListBox">
<div class="rankingListItem" *ngFor="let item of rankingList2">
<div class="name" [title]="item.name">
{{item.name}}
</div>
<div class="progress">
<nz-progress [nzStrokeColor]="'#2C4DC0'" [nzStrokeLinecap]="'square'"
[nzShowInfo]="false" [nzPercent]="item.num"></nz-progress>
</div>
<div class="num">
<span>{{item.num}}</span>
<ng-container *ngIf="item.type == 'up'; else elseTemplate">
<img src="../../../../assets/statistic-analysis/up.png" alt="">
</ng-container>
<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>
</div>
</div>
</div>
</div>
<div class="bottombox fffcard flexcolumn">
<div class="title">
任务完成情况
</div>
<div class="completionOfTask">
<div class="completionOfTask1" id="completionOfTask1">
</div>
<div class="completionOfTask2" id="completionOfTask2">
</div>
</div>
</div>
</div>

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

@ -0,0 +1,351 @@
.box {
width: 100%;
height: 100%;
box-sizing: border-box;
padding: 18px;
display: flex;
flex-direction: column;
color: #303133;
text-align: left;
overflow: hidden;
}
.fffcard {
background: #fff;
box-shadow: 0px 3px 8px 1px rgba(0, 0, 0, 0.08);
border-radius: 4px 4px 4px 4px;
border: 1px solid #E4E7EC;
}
.flexcolumn {
display: flex;
flex-direction: column;
}
.taskNum,
.assistTaskRanking,
.disqualificationUnit,
.companySupport,
.holdCertificate,
.completionOfTask {
flex: 1;
}
.assistTaskRanking {
display: flex;
flex-direction: column;
justify-content: space-around;
box-sizing: border-box;
padding: 18px 0 18px 16px;
.taskRankingItem {
display: flex;
align-items: center;
img {
margin-right: 3px;
}
.border {
flex: 1;
border-bottom: 1px dashed #E4E7EC;
margin: 0 3px;
}
.num {
width: 50px;
}
}
}
.disqualificationUnit {
display: flex;
flex-direction: column;
.searchbox {
width: 100%;
height: 60px;
display: flex;
align-items: center;
.searchitem1 {
display: flex;
flex-direction: column;
justify-content: center;
box-sizing: border-box;
padding: 0 18px;
.titleblue {
font-size: 16px;
font-weight: 600;
color: #2C4DC0;
margin-right: 5%;
}
.titlered {
font-size: 16px;
font-weight: 600;
color: #FF0000;
}
}
.rangepicker {
height: 32px;
width: 45%;
text-align: right;
margin-left: 10%;
}
}
#disqualificationUnit {
flex: 1;
}
}
.companySupport,
.holdCertificate {
display: flex;
flex-direction: column;
overflow: hidden;
.companySupporttitle {
width: 100%;
height: 42px;
display: flex;
justify-content: space-between;
align-items: center;
color: #C7CAD0;
box-sizing: border-box;
padding: 0 18px;
}
.rankingListBox {
flex: 1;
display: flex;
flex-direction: column;
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%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin-right: 8%;
}
.progress {
flex: 1;
margin-bottom: 2px;
}
.num {
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;
}
}
}
}
}
.holdCertificate {
.rankingListBox {
padding-bottom: 8px;
padding-top: 8px;
}
}
.completionOfTask {
display: flex;
.completionOfTask1 {
flex: 1;
}
.completionOfTask2 {
flex: 4.6;
}
}
.title {
width: 100%;
height: 50px;
line-height: 50px;
box-sizing: border-box;
padding-left: 18px;
border-bottom: 1px solid #E4E7EC;
}
.topbox {
flex: 2;
display: flex;
justify-content: space-between;
margin-bottom: 18px;
overflow: hidden;
.top1 {
flex: 1;
display: flex;
flex-direction: column;
.top1-1 {
flex: 1;
margin-bottom: 18px;
display: flex;
.top1-1item {
flex: 1;
}
}
.top1-2 {
flex: 1.3;
}
}
.top2 {
flex: 1.5;
margin: 0 18px;
position: relative;
.mapcardbox {
position: absolute;
left: 0;
top: 18px;
height: 100px;
width: 100%;
z-index: 999;
display: flex;
padding: 0 18px;
box-sizing: border-box;
.mapcarditem {
flex: 1;
height: 100%;
background: #FFFFFF;
box-shadow: 0px 3px 8px 1px rgba(0, 0, 0, 0.08);
border-radius: 4px 4px 4px 4px;
border: 1px solid #E4E7EC;
box-sizing: border-box;
padding: 16px;
display: flex;
.mapcarditemname {
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
.mapcarditemname1 {
font-size: 16px;
}
.mapcarditemname2 {
font-size: 26px;
font-weight: 600;
}
}
.mapcarditemimg {
width: 68px;
height: 68px;
border-radius: 68px;
text-align: center;
line-height: 68px;
}
}
.mapcarditem:nth-child(1) {
.mapcarditemname2 {
color: #2C4DC0;
}
.mapcarditemimg {
background: linear-gradient(to bottom, #94ACFF, #2C4DC0);
}
}
.mapcarditem:nth-child(2) {
margin: 0 18px;
.mapcarditemname2 {
color: #FF0000;
}
.mapcarditemimg {
background: linear-gradient(to bottom, #FF9191, #FF0000);
}
}
.mapcarditem:nth-child(3) {
.mapcarditemname2 {
color: #42B983;
}
.mapcarditemimg {
background: linear-gradient(to bottom, #AFF8D7, #42B983);
}
}
}
.mapbox {
width: 100%;
height: 100%;
box-shadow: 0px 3px 8px 1px rgba(0, 0, 0, 0.08);
border-radius: 4px 4px 4px 4px;
border: 1px solid #E4E7EC;
}
}
.top3 {
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;
}
}
}
.bottombox {
flex: 0.9;
}

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

@ -0,0 +1,474 @@
import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
declare var AMap: any;
declare var AMapUI: any;
import * as echarts from 'echarts';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.scss']
})
export class HomeComponent implements OnInit {
constructor(private http: HttpClient) { }
taskNumCharts
taskNumChartsOption = {
title: [
{
text: `{val|195}\n{name|任务总数}`,
top: 'center',
left: '61%',
textStyle: {
rich: {
val: {
fontSize: 28,
fontWeight: 'bold',
color: '#333333'
},
name: {
fontSize: 14,
color: '#666666',
padding: [2, 0]
}
}
}
},
],
color: ['#5483EA', '#34E0A3', '#E4E7EC'],
tooltip: {
trigger: 'item'
},
legend: {
top: 'center',
left: '5%',
itemGap: 15,
itemWidth: 10,
itemHeight: 10,
orient: 'vertical',
formatter: (name) => {
let data = this.taskNumChartsOption.series[0].data
let total = 0
let tarValue
for (let i = 0; i < data.length; i++) {
total += data[i].value
if (data[i].name == name) {
tarValue = data[i].value
}
}
let v = tarValue + '个'
//计算出百分比
// let p = Math.round((tarValue / total) * 100) + '%'
return `${name} ${v}`
//name是名称,v是数值
},
},
series: [
{
type: 'pie',
radius: ['50%', '65%'],
center: ['72%', '50%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
labelLine: {
show: false
},
data: [
{ value: 37, name: '上级派发任务' },
{ value: 56, name: '自主任务' },
{ value: 102, name: '协助任务' }
]
}
]
};
disqualificationUnitCharts
disqualificationUnitChartsOption = {
grid: {
left: '8%',
right: '5%',
top: '15%',
bottom: '15%'
},
xAxis: {
type: 'category',
data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
axisTick: { //x轴刻度尺
show: false
},
axisLine: {//x轴线条颜色
show: false,
lineStyle: {
color: '#C7CAD0'
}
},
},
yAxis: {
type: 'value',
splitLine: {//网格线
lineStyle: {
type: 'solid', //设置网格线类型 dotted:虚线 solid:实线
color: '#ECEFF1' //网格线颜色
},
},
axisLine: {//y轴线条颜色
show: false,
lineStyle: {
color: '#C7CAD0'
}
},
},
series: [
{
data: [8, 7, 8, 6, 11, 16, 18, 10, 14, 10, 9, 5],
type: 'line',
showSymbol: false,//去除面积图节点圆
smooth: true,//面积图改成弧形状
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
offset: 0,
color: 'rgba(84,131,234,0.6)'
}, {
offset: 1,
color: 'rgba(255,255,255,0)'
}])
}
}
]
};
completionOfTaskPie
completionOfTaskPieOption = {
title: [
{
text: `{val|195}\n{name|任务总数}`,
top: 'center',
left: '26%',
textStyle: {
rich: {
val: {
fontSize: 28,
fontWeight: 'bold',
color: '#333333'
},
name: {
fontSize: 14,
color: '#666666',
padding: [2, 0]
}
}
}
},
],
color: ['#34E0A3', '#E4E7EC'],
tooltip: {
trigger: 'item'
},
legend: {
top: 'center',
right: '10%',
itemGap: 15,
itemWidth: 10,
itemHeight: 10,
orient: 'vertical',
formatter: (name) => {
let data = this.completionOfTaskPieOption.series[0].data
let total = 0
let tarValue
for (let i = 0; i < data.length; i++) {
total += data[i].value
if (data[i].name == name) {
tarValue = data[i].value
}
}
let v = tarValue
//计算出百分比
// let p = Math.round((tarValue / total) * 100) + '%'
return `${name} ${v}`
//name是名称,v是数值
},
},
series: [
{
type: 'pie',
radius: ['50%', '65%'],
center: ['35%', '50%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
labelLine: {
show: false
},
data: [
{ value: 157, name: '已完成' },
{ value: 38, name: '未完成' }
]
}
]
};
completionOfTaskBar
completionOfTaskBarOption = {
grid: {
left: '3%',
right: '7%',
top: '15%',
bottom: '20%'
},
legend: {
top: 'center',
right: '2%',
itemGap: 15,
itemWidth: 10,
itemHeight: 10,
orient: 'vertical'
},
tooltip: {
trigger: 'axis',
axisPointer: {
// Use axis to trigger tooltip
type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
}
},
color: ['#34E0A3', '#39CCF4'],
xAxis: {
type: 'category',
data: ['历下区大队', '南部山区大队', '市中区大队', '槐荫区大队', '天桥区大队', '历城区大队', '高新技术产业开发区大队', '长清区大队', '章丘区大队', '平阴县大队', '商河县大队', '济阳县大队', '莱芜区大队'],
axisTick: { //x轴刻度尺
show: false
},
axisLine: {//x轴线条颜色
show: false,
lineStyle: {
color: '#C7CAD0'
}
},
axisLabel: {
show: true,
interval: 0,//使x轴上的文字显示完全,
//设置一行显示几个字,自己设置
formatter: function (params) {
var newParamsName = "";
var paramsNameNumber = params.length;
var provideNumber = 6;
var rowNumber = Math.ceil(paramsNameNumber / provideNumber);
if (paramsNameNumber > provideNumber) {
for (var p = 0; p < rowNumber; p++) {
var tempStr = "";
var start = p * provideNumber;
var end = start + provideNumber;
if (p == rowNumber - 1) {
tempStr = params.substring(start, paramsNameNumber);
} else {
tempStr = params.substring(start, end) + "\n";
}
newParamsName += tempStr;
}
} else {
newParamsName = params;
}
return newParamsName;
}
}
},
yAxis: {
type: 'value',
splitLine: {//网格线
lineStyle: {
type: 'solid', //设置网格线类型 dotted:虚线 solid:实线
color: '#ECEFF1' //网格线颜色
},
},
axisLine: {//y轴线条颜色
show: false,
lineStyle: {
color: '#C7CAD0'
}
},
},
series: [
{
name: '已完成',
type: 'bar',
barWidth: 16, // 柱子宽度
stack: 'total',
label: {
show: false
},
emphasis: {
focus: 'series'
},
data: [8, 17, 10, 14, 8, 16, 10, 11, 10, 15, 9, 10, 18]
},
{
name: '未完成',
type: 'bar',
barWidth: 16, // 柱子宽度
stack: 'total',
label: {
show: false
},
emphasis: {
focus: 'series'
},
data: [3, 2, 1, 5, 3, 3, 4, 5, 2, 3, 4, 2, 2]
}
]
};
ngOnInit(): void {
window.setTimeout(() => {
this.mapInit() //初始化地图
}, 0)
// 任务总数
this.taskNumCharts = echarts.init(document.getElementById('taskNumCharts'), null, { devicePixelRatio: 2 });
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);
this.disqualificationUnitCharts && this.disqualificationUnitCharts.setOption(this.disqualificationUnitChartsOption);
this.completionOfTaskPie && this.completionOfTaskPie.setOption(this.completionOfTaskPieOption);
this.completionOfTaskBar && this.completionOfTaskBar.setOption(this.completionOfTaskBarOption);
}
assistTaskRankingData = [
{ 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", 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: 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: 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' }
]
map
mapInit() {
//创建地图
this.map = new AMap.Map('mapbox', {
cursor: 'default',
zooms: [8, 16],
mapStyle: "amap://styles/light",
// bubble: true
});
let colors = [
"#EE30B3", "#B37CF0", "#BD2CE6", "#7768EE", "#359EEF", "#7B95CA", "#CAFBF8", "#43D0E1",
"#72C6EF"
];
AMapUI.loadUI(['geo/DistrictExplorer'], (DistrictExplorer) => {
//创建一个实例
let districtExplorer = new DistrictExplorer({
map: this.map,
eventSupport: true, //打开事件支持
});
// let adcode = this.adcode; //行政编码
let adcode = 370100
districtExplorer.loadAreaNode(adcode, (error, areaNode) => {
//更新地图视野
this.map.setBounds(areaNode.getBounds(), null, null, true);
//设置定位节点,支持鼠标位置识别
//注意节点的顺序,前面的高优先级
districtExplorer.setAreaNodesForLocating(areaNode);
//清除已有的绘制内容
districtExplorer.clearFeaturePolygons();
//绘制子区域
districtExplorer.renderSubFeatures(areaNode, (feature, i) => {
// console.log(111, feature)
let fillColor = colors[i % colors.length];
let strokeColor = colors[colors.length - 1 - i % colors.length];
return {
cursor: 'default',
bubble: true,
strokeColor: strokeColor, //线颜色
strokeOpacity: 1, //线透明度
strokeWeight: 1, //线宽
fillColor: fillColor, //填充色
fillOpacity: 0.8, //填充透明度
};
});
//绘制父区域
districtExplorer.renderParentFeature(areaNode, {
cursor: 'default',
bubble: true,
strokeColor: 'black', //线颜色
strokeOpacity: 1, //线透明度
strokeWeight: 1, //线宽
fillColor: null, //填充色
fillOpacity: 0.5, //填充透明度
});
// 更新地图视野以适合区划面
this.map.setFitView(districtExplorer.getAllFeaturePolygons());
});
});
}
}

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

@ -1,4 +1 @@
<div class="box">
<nz-empty></nz-empty>
</div>
<router-outlet></router-outlet>

4
src/app/home/system-management/user/adduser/adduser.component.html

@ -1,10 +1,10 @@
<div class="box">
<form nz-form [formGroup]="validateForm">
<nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="登陆账号">登陆账号</nz-form-label>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="登录账号">登录账号</nz-form-label>
<nz-form-control>
<nz-input-group>
<input nz-input type="text" formControlName="account" placeholder="请输入登账号" />
<input nz-input type="text" formControlName="account" placeholder="请输入登账号" />
</nz-input-group>
</nz-form-control>
</nz-form-item>

4
src/app/home/system-management/user/edituser/edituser.component.html

@ -1,10 +1,10 @@
<div class="box">
<form nz-form [formGroup]="validateForm">
<nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="登陆账号">登陆账号</nz-form-label>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="登录账号">登录账号</nz-form-label>
<nz-form-control>
<nz-input-group>
<input nz-input type="text" formControlName="account" placeholder="请输入登账号" />
<input nz-input type="text" formControlName="account" placeholder="请输入登账号" />
</nz-input-group>
</nz-form-control>
</nz-form-item>

2
src/app/home/system-management/user/user.component.html

@ -34,7 +34,7 @@
[nzPageSize]='16'>
<thead>
<tr>
<th>账号</th>
<th>账号</th>
<th>真实姓名</th>
<th>所属机构</th>
<th>角色</th>

75
src/app/home/task/da-monthly-task-overview/da-monthly-task-overview.component.html

@ -104,29 +104,40 @@
<div class="info">
<span class="assistant" nz-tooltip [nzTooltipTitle]="titleTemplate">
<span *ngFor="let o of i.supervisors">
<img *ngIf="o.posts && o.posts[0] == '主查人员'"
src="../../../../assets/images/icon/main.png" alt="">
<img *ngIf="o.posts && o.posts[0] == '协查人员'"
src="../../../../assets/images/icon/assist.png" alt="">
{{o.name}}
</span>
<span *ngFor="let o of i.assistantOrganizations">
{{o.name}}
</span>
</span>
<ng-template #titleTemplate let-thing>
<span style="margin-right: 6px;" *ngFor="let o of i.supervisors">
<img *ngIf="o.posts && o.posts[0] == '主查人员'"
src="../../../../assets/images/icon/main.png" alt="">
<img *ngIf="o.posts && o.posts[0] == '协查人员'"
src="../../../../assets/images/icon/assist.png" alt="">
{{o.name}}
</span>
<span style="margin-right: 6px;" *ngFor="let o of i.assistantOrganizations">
{{o.name}}
</span>
</ng-template>
<!-- <span class="blue" (click)="allot(i)">分配</span> -->
<span>|</span>
<span>申请人: {{i.organization.name}}</span>
<span>申请人: {{i.organization.level == 'battalion'? i.creator.name :
i.organization.name}}</span>
</div>
<div class="img">
<img *ngIf="i.approvalStatus == '驳回'" src="../../../../assets/images/icon/reject.png">
<img *ngIf="i.approvalStatus == '通过'" src="../../../../assets/images/icon/agree.png">
<ng-container
*ngIf="i.approvalStatus == '驳回' || i.approvalStatus == '通过'; else elseTemplate">
<img *ngIf="i.approvalStatus == '驳回'"
src="../../../../assets/images/icon/reject.png">
<img *ngIf="i.approvalStatus == '通过'"
src="../../../../assets/images/icon/agree.png">
</ng-container>
<ng-template #elseTemplate>
<ng-container *ngIf="i.approvalStatus == '已检查'; else elseTemplate2">
<span>{{i.inspectionResult}}</span>
</ng-container>
<ng-template #elseTemplate2>
<span> {{i.approvalStatus}}</span>
</ng-template>
</ng-template>
</div>
</div>
@ -347,7 +358,7 @@
<div class="maincontentitemright">
<div class="maincontentitemrightitem" *ngFor="let i of item.data">
<div class="flexcol namebox">
<span>
<span class="ellipsi" [title]="i.company.companyName">
{{i.company.companyName}}
</span>
<span>
@ -355,7 +366,7 @@
</span>
</div>
<div class="flexcol">
<span>
<span class="ellipsi" [title]="i.company.useNature">
{{i.company.useNature}}
</span>
<span>
@ -363,29 +374,30 @@
</span>
</div>
<div class="flexcol">
<span>
{{i.organization.name}}
<span class="ellipsi" [title]="i.organization.level == 'battalion'? i.creator.name :
i.organization.name">
{{i.organization.level == 'battalion'? i.creator.name :
i.organization.name}}
</span>
<span>
责任机构
</span>
</div>
<div class="flexcol flexcolassistant">
<span class="assistant" nz-tooltip [nzTooltipTitle]="titleTemplate">
<span class="assistant ellipsi" nz-tooltip [nzTooltipTitle]="titleTemplate">
<span *ngFor="let o of i.supervisors">
<img *ngIf="o.posts && o.posts[0] == '主查人员'"
src="../../../../assets/images/icon/main.png" alt="">
<img *ngIf="o.posts && o.posts[0] == '协查人员'"
src="../../../../assets/images/icon/assist.png" alt="">
{{o.name}}
</span>
<span *ngFor="let o of i.assistantOrganizations">
{{o.name}}
</span>
<span></span>
</span>
<ng-template #titleTemplate let-thing>
<span style="margin-right: 6px;" *ngFor="let o of i.supervisors">
<img *ngIf="o.posts && o.posts[0] == '主查人员'"
src="../../../../assets/images/icon/main.png" alt="">
<img *ngIf="o.posts && o.posts[0] == '协查人员'"
src="../../../../assets/images/icon/assist.png" alt="">
{{o.name}}
</span>
<span style="margin-right: 6px;" *ngFor="let o of i.assistantOrganizations">
{{o.name}}
</span>
</ng-template>
@ -394,16 +406,23 @@
</span>
</div>
<div class="flexcol">
<span>
宣传
<span class="ellipsi">
{{i.isSpread ? '已宣传' : '未宣传'}}
</span>
<span>
同步工作
</span>
</div>
<div class="flexcol">
<span class="ellipsi" [title]="i.approvalStatus">
{{i.approvalStatus}}
</span>
<span>
任务状态
</span>
</div>
<div class="flexcol">
<span class="ellipsi" [title]="i.inspectionResult">
{{i.inspectionResult}}
</span>
<span>

15
src/app/home/task/da-monthly-task-overview/da-monthly-task-overview.component.scss

@ -279,11 +279,12 @@
.info {
flex: 1;
display: flex;
justify-content: center;
align-items: center;
justify-content: flex-start;
.assistant {
width: 50%;
overflow: hidden;
span {
color: #303133;
@ -315,6 +316,10 @@
img {
margin-left: 40%;
}
span {
margin-left: 40%;
}
}
}
@ -650,3 +655,11 @@
width: 100%;
border-top: 1px dashed #C7CAD0;
}
.ellipsi {
width: 100%;
text-align: left;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}

22
src/app/home/task/da-monthly-task-overview/da-monthly-task-overview.component.ts

@ -65,7 +65,7 @@ export class DaMonthlyTaskOverviewComponent implements OnInit {
ngOnInit(): void {
// 接收来自中心的消息
(signalR.SR as any).on('receiveNotification', (message: string, senderName: string) => {
// 接收后要做的事
@ -81,8 +81,8 @@ export class DaMonthlyTaskOverviewComponent implements OnInit {
// 下级任务申请
this.getTaskList()
this.getSupervisor('main')
this.getSupervisor('assisted')
// this.getSupervisor('main')
// this.getSupervisor('assisted')
//统计信息
this.getCountStat()
@ -134,7 +134,7 @@ export class DaMonthlyTaskOverviewComponent implements OnInit {
})
})
this.cardData.forEach(element => {
element.percentage = Math.round(element.inspected / element.data.length) * 100 || 0
element.percentage = Math.round((element.inspected / element.data.length) * 100) || 0
})
this.cardData = [...this.cardData]
@ -200,17 +200,17 @@ export class DaMonthlyTaskOverviewComponent implements OnInit {
}
});
arr1.forEach(item => {
if (item.approvalStatus == '通过') {
if (item.approvalStatus == '通过' || item.approvalStatus == '待检查' || item.approvalStatus == '已检查') {
this.taskData[0].finished += 1
}
});
arr2.forEach(item => {
if (item.approvalStatus == '通过') {
if (item.approvalStatus == '通过' || item.approvalStatus == '待检查' || item.approvalStatus == '已检查') {
this.taskData[1].finished += 1
}
});
arr3.forEach(item => {
if (item.approvalStatus == '通过') {
if (item.approvalStatus == '通过' || item.approvalStatus == '待检查' || item.approvalStatus == '已检查') {
this.taskData[2].finished += 1
}
});
@ -320,10 +320,10 @@ export class DaMonthlyTaskOverviewComponent implements OnInit {
num: data['任务总数']['总数'], percentageComplete: integer(data['任务总数']['已完成'] / data['任务总数']['总数']), item1: integer(data['任务总数']['上级指派'] / data['任务总数']['总数']), item2: integer(data['任务总数']['自主任务'] / data['任务总数']['总数']), item3: integer(data['任务总数']['申领任务'] / data['任务总数']['总数'])
},
statistics2: {
num: data['消防救援任务总数']['总数'], percentageComplete: integer(data['消防救援任务总数']['已完成'] / data['消防救援任务总数']['总数']), item1: integer(data['消防救援任务总数']['上级指派'] / data['消防救援任务总数']['总数']), item2: integer(data['消防救援任务总数']['自主任务'] / data['消防救援任务总数']['总数']), item3: integer(data['消防救援任务总数']['申领任务'] / data['消防救援任务总数']['总数'])
num: data['消防救援任务总数']['总数'], percentageComplete: integer(data['消防救援任务总数']['已完成'] / data['任务总数']['总数']), item1: integer(data['消防救援任务总数']['上级指派'] / data['消防救援任务总数']['总数']), item2: integer(data['消防救援任务总数']['自主任务'] / data['消防救援任务总数']['总数']), item3: integer(data['消防救援任务总数']['申领任务'] / data['消防救援任务总数']['总数'])
},
statistics3: {
num: data['检查员任务总数']['总数'], percentageComplete: integer(data['检查员任务总数']['已完成'] / data['检查员任务总数']['总数']), item1: integer(data['检查员任务总数']['上级指派'] / data['检查员任务总数']['总数']), item2: integer(data['检查员任务总数']['自主任务'] / data['检查员任务总数']['总数']), item3: integer(data['检查员任务总数']['申领任务'] / data['检查员任务总数']['总数'])
num: data['检查员任务总数']['总数'], percentageComplete: integer(data['检查员任务总数']['已完成'] / data['任务总数']['总数']), item1: integer(data['检查员任务总数']['上级指派'] / data['检查员任务总数']['总数']), item2: integer(data['检查员任务总数']['自主任务'] / data['检查员任务总数']['总数']), item3: integer(data['检查员任务总数']['申领任务'] / data['检查员任务总数']['总数'])
}
}
})
@ -385,7 +385,7 @@ export class DaMonthlyTaskOverviewComponent implements OnInit {
Month: selectedTime,
CompanyOrganizationId: item.id,
PageNumber: 1,
approvalStatuses: '通过',
approvalStatuses: ['通过', '待检查', '已检查'],
PageSize: 9999
}
item.isLoading = true
@ -430,7 +430,7 @@ export class DaMonthlyTaskOverviewComponent implements OnInit {
i.approvalStatus == '已检查' ? element.finished += 1 : null
});
});
item.percentage = Math.round(item.inspected / item.allUnitsNum) * 100
item.percentage = Math.round((item.inspected / item.allUnitsNum) * 100)
},
error: (err) => {

40
src/app/home/task/da-oneself-plan/da-oneself-plan.component.html

@ -130,7 +130,7 @@
<div class="maincontentitemright">
<div class="maincontentitemrightitem" *ngFor="let i of item.data">
<div class="flexcol namebox">
<span>
<span class="ellipsi" [title]="i.company.companyName">
{{i.company.companyName}}
</span>
<span>
@ -138,7 +138,7 @@
</span>
</div>
<div class="flexcol">
<span>
<span class="ellipsi" [title]="i.company.useNature">
{{i.company.useNature}}
</span>
<span>
@ -146,29 +146,30 @@
</span>
</div>
<div class="flexcol">
<span>
{{i.organization.name}}
<span class="ellipsi" [title]="i.organization.level == 'battalion'? i.creator.name :
i.organization.name">
{{i.organization.level == 'battalion'? i.creator.name :
i.organization.name}}
</span>
<span>
责任机构
</span>
</div>
<div class="flexcol flexcolassistant">
<span class="assistant" nz-tooltip [nzTooltipTitle]="titleTemplate">
<span class="assistant ellipsi" nz-tooltip [nzTooltipTitle]="titleTemplate">
<span *ngFor="let o of i.supervisors">
<img *ngIf="o.posts && o.posts[0] == '主查人员'"
src="../../../../assets/images/icon/main.png" alt="">
<img *ngIf="o.posts && o.posts[0] == '协查人员'"
src="../../../../assets/images/icon/assist.png" alt="">
{{o.name}}
</span>
<span *ngFor="let o of i.assistantOrganizations">
{{o.name}}
</span>
<span></span>
</span>
<ng-template #titleTemplate let-thing>
<span style="margin-right: 6px;" *ngFor="let o of i.supervisors">
<img *ngIf="o.posts && o.posts[0] == '主查人员'"
src="../../../../assets/images/icon/main.png" alt="">
<img *ngIf="o.posts && o.posts[0] == '协查人员'"
src="../../../../assets/images/icon/assist.png" alt="">
{{o.name}}
</span>
<span style="margin-right: 6px;" *ngFor="let o of i.assistantOrganizations">
{{o.name}}
</span>
</ng-template>
@ -177,16 +178,23 @@
</span>
</div>
<div class="flexcol">
<span>
宣传
<span class="ellipsi">
{{i.isSpread ? '已宣传' : '未宣传'}}
</span>
<span>
同步工作
</span>
</div>
<div class="flexcol">
<span class="ellipsi" [title]="i.approvalStatus">
{{i.approvalStatus}}
</span>
<span>
任务状态
</span>
</div>
<div class="flexcol">
<span class="ellipsi" [title]="i.inspectionResult">
{{i.inspectionResult}}
</span>
<span>

7
src/app/home/task/da-oneself-plan/da-oneself-plan.component.scss

@ -406,3 +406,10 @@
width: 100%;
border-top: 1px dashed #C7CAD0;
}
.ellipsi {
width: 100%;
text-align: left;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}

4
src/app/home/task/da-oneself-plan/da-oneself-plan.component.ts

@ -118,7 +118,7 @@ export class DaOneselfPlanComponent implements OnInit {
})
})
this.cardData.forEach(element => {
element.percentage = Math.round(element.inspected / element.data.length) * 100 || 0
element.percentage = Math.round((element.inspected / element.data.length) * 100) || 0
})
resolve(data)
@ -210,7 +210,7 @@ export class DaOneselfPlanComponent implements OnInit {
i.approvalStatus == '已检查' ? element.finished += 1 : null
});
});
item.percentage = Math.round(item.inspected / item.allUnitsNum) * 100
item.percentage = Math.round((item.inspected / item.allUnitsNum) * 100)
},
error: (err) => {
this.message.create('warning', '获取数据失败');

4
src/app/home/task/da-oneself-plan/plan-adjustment/plan-adjustment.component.html

@ -29,8 +29,8 @@
<div *ngFor="let i of item.data">
<div class="received checked">
<div class="name">{{i.company.companyName}}</div>
<div><i nz-icon nzType="close" nzTheme="outline" style="cursor: pointer;"
(click)="cancel(i,item)"></i></div>
<div><i *ngIf="i.approvalStatus!='已检查'" nz-icon nzType="close" nzTheme="outline"
style="cursor: pointer;" (click)="cancel(i,item)"></i></div>
</div>
</div>
</div>

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

@ -143,13 +143,13 @@
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="检查人员">检查人员</nz-form-label>
<nz-form-control>
<img class="img1" src="../../../../../assets/images/icon/main.png" alt="">
<nz-select nzPlaceHolder="请选择主查" class="select" formControlName="main">
<nz-option *ngFor="let item of mainsupervisorList" [nzValue]="item.id" [nzLabel]="item.name">
<nz-select nzPlaceHolder="请选择主查" class="select" formControlName="main" [(ngModel)]="userId">
<nz-option *ngFor="let item of supervisorListAll" [nzValue]="item.id" [nzLabel]="item.name">
</nz-option>
</nz-select>
<img class="img2" src="../../../../../assets/images/icon/assist.png" alt="">
<nz-select nzPlaceHolder="请选择协查" class="select" formControlName="assist">
<nz-option *ngFor="let item of assitantsupervisorList" [nzValue]="item.id" [nzLabel]="item.name">
<nz-option *ngFor="let item of supervisorListAll" [nzValue]="item.id" [nzLabel]="item.name">
</nz-option>
</nz-select>
</nz-form-control>

5
src/app/home/task/station-task-apply/apply/apply.component.ts

@ -27,10 +27,15 @@ export class ApplyComponent implements OnInit {
taskType
newTree
OrganizationId
userId
supervisorListAll = []
ngOnInit(): void {
this.OrganizationId = JSON.parse(sessionStorage.getItem('userData')).organizationId
this.userId = JSON.parse(sessionStorage.getItem('userData')).id
console.log('mainsupervisorList', this.mainsupervisorList)
console.log('assitantsupervisorList', this.assitantsupervisorList)
this.supervisorListAll = [...this.mainsupervisorList, ...this.assitantsupervisorList]
this.validateForm = this.fb.group({
taskname: [null, [Validators.required]],
organization: [null, [Validators.required]],

24
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">
@ -93,7 +93,7 @@
</span>
</div>
<div class="flexcol unitnamebox">
<span>
<span class="ellipsi" [title]="item.company.companyName">
{{item.company.companyName}}
</span>
<span>
@ -101,16 +101,18 @@
</span>
</div>
<div class="flexcol flexcollevel">
<span>
<span class="ellipsi" [title]="item.company.useNature">
{{item.company.useNature}}
</span>
<span>
级别
</span>
</div>
<div class="flexcol">
<span>
{{item.organization.name}}
<div class="flexcol flexcolmain">
<span class="ellipsi" [title]="item.organization.level == 'battalion'? item.creator.name :
item.organization.name">
{{item.organization.level == 'battalion'? item.creator.name :
item.organization.name}}
</span>
<span>
主负责人
@ -158,7 +160,7 @@
</div>
<div class="flexcol">
<span>
宣传
{{item.isSpread ? '已宣传' : '未宣传'}}
</span>
<span>
同步工作
@ -183,8 +185,8 @@
</div>
<div class="flexcol">
<span>
<span class="blue" style="margin-right: 6px;" (click)="look(item)">查看</span>
<span class="red" (click)="deleteTask(item, taskLIst)">删除</span>
<a class="blue" style="margin-right: 6px;" (click)="look(item)">查看</a>
<a class="red" (click)="deleteTask(item, taskLIst)">删除</a>
</span>
<span>
操作

18
src/app/home/task/station-task-apply/station-task-apply.component.scss

@ -165,7 +165,7 @@
padding: 12px 20px;
border: 1px solid #C7CAD0;
justify-content: space-around;
padding-left: 80px;
padding-left: 50px;
margin-bottom: 10px;
div {
@ -174,7 +174,7 @@
span {
display: inline-block;
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
@ -191,6 +191,7 @@
.flexcol {
display: flex;
width: 100%;
flex-direction: column;
align-items: flex-start;
margin-right: 3%;
@ -204,8 +205,12 @@
}
}
.flexcollevel{
flex: 2.5;
.flexcollevel {
flex: 2;
}
.ellipsi{
width: 100%;
}
.flexcolassistant {
flex: 2.5;
@ -234,7 +239,10 @@
}
.unitnamebox {
flex: 3;
flex: 2;
}
.flexcolmain{
flex: 2;
}
}

39
src/app/home/task/station-task-execution/station-task-execution.component.html

@ -77,10 +77,6 @@
</div>
</div>
<div class="content">
<!-- <div class="applybtn">
<button (click)="apply()" nz-button nzType="primary"><i nz-icon nzType="form"
nzTheme="outline"></i>申请</button>
</div> -->
<div class="tablebox">
<div class="tableboxitem" *ngFor="let item of taskLIst"
[ngClass]="{'greenborder': item.approvalStatus == '通过','redborder': item.approvalStatus == '驳回'}">
@ -94,7 +90,7 @@
</div>
<div class="flexcol">
<span>
<span class="ellipsi" [title]="item.lastModificationTime | date:'yyyy-MM-dd'">
{{item.lastModificationTime | date:"yyyy-MM-dd"}}
</span>
<span>
@ -103,7 +99,7 @@
</div>
<div class="flexcol unitnamebox">
<span>
<span class="ellipsi" [title]="item.company.companyName">
{{item.company.companyName}}
</span>
<span>
@ -111,7 +107,7 @@
</span>
</div>
<div class="flexcol">
<span>
<span class="ellipsi" [title]="item.company.useNature">
{{item.company.useNature}}
</span>
<span>
@ -119,8 +115,10 @@
</span>
</div>
<div class="flexcol">
<span>
{{item.organization.name}}
<span class="ellipsi" [title]="item.organization.level == 'battalion'? item.creator.name :
item.organization.name">
{{item.organization.level == 'battalion'? item.creator.name :
item.organization.name}}
</span>
<span>
主负责人
@ -147,7 +145,7 @@
{{'协助机构/人员'}}
</span>
</div>
<div class="flexcol">
<div class="flexcol result">
<span>
{{item.inspectionResult}}
</span>
@ -158,20 +156,30 @@
<div class="flexcol">
<span>
宣传
{{item.isSpread ? '已宣传' : '未宣传'}}
</span>
<span>
同步工作
</span>
</div>
<div class="flexcol">
<span class="blue" (click)="look(item)">
查看
<span>
<a class="blue" (click)="look(item)" style="margin-right: 5px;">查看</a>
<a class="blue" (click)="complete(item)">完成</a>
</span>
<span>
操作
</span>
</div>
<div class="flexcol flexcolcenter">
<span>
<img style="cursor: pointer;width: 36px;height: 28px;"
src="../../../../assets/images/icon/chat.png" (click)="openchat(item)" alt="">
</span>
<span>
消息
</span>
</div>
</div>
</div>
<div class="pagination">
@ -184,4 +192,9 @@
</div>
</div>
</div>
<div *ngIf="ischat"
style="position: absolute;left: 50%;top: 50%;transform: translate(-50%,-50%);width: 500px;height: 580px;">
<app-chat-window [taskId]="taskId"></app-chat-window>
</div>
</div>

29
src/app/home/task/station-task-execution/station-task-execution.component.scss

@ -164,20 +164,21 @@
padding: 12px 20px;
border: 1px solid #C7CAD0;
justify-content: space-around;
padding-left: 80px;
margin-bottom: 10px;
padding-left: 50px;
margin: 10px 0;
div {
flex: 1;
overflow: hidden;
span {
display: inline-block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
height: 33px;
line-height: 33px;
text-align: left;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
img {
width: 32px;
@ -191,10 +192,10 @@
flex-direction: column;
align-items: flex-start;
margin-right: 3%;
width: 100%;
span:nth-child(1) {
color: #303133;
// margin-bottom: 8px;
}
span:nth-child(2) {
@ -204,7 +205,7 @@
}
.flexcolassistant {
flex: 1.5;
flex: 2;
overflow: hidden;
.assistant {
@ -229,10 +230,22 @@
}
}
.ellipsi {
width: 100%;
}
.result {
flex: 2;
}
.unitnamebox {
flex: 3;
flex: 2;
}
.flexcolcenter {
flex: 0.5;
align-items: center;
}
}
.greenborder {

61
src/app/home/task/station-task-execution/station-task-execution.component.ts

@ -7,6 +7,7 @@ import { HttpClient, HttpHeaders } from '@angular/common/http';
import { TreeService } from 'src/app/service/tree.service';
import { ThisReceiver } from '@angular/compiler';
import { MethodService } from 'src/app/service/method.service';
import { UploadComponent } from './upload/upload.component';
@Component({
selector: 'app-station-task-execution',
templateUrl: './station-task-execution.component.html',
@ -65,7 +66,7 @@ export class StationTaskExecutionComponent implements OnInit {
PageSize = 10
taskLIst = []
getTaskList() {
// this.isloading = true
this.isloading = true
let selectedTime = this.selectedYear + '-' + this.selectedMonth + '-' + '01'
let params = {
Month: selectedTime,
@ -73,12 +74,12 @@ export class StationTaskExecutionComponent implements OnInit {
TaskName: this.searchForm.taskname,
CompanyName: this.searchForm.unitname,
SupervisorId: this.isSupervisor ? this.userId : null,
AssitantOrganizationId: this.isSupervisor ? null : this.OrganizationId,
approvalStatuses: ['已检查'],
AssistantOrganizationId: this.isSupervisor ? null : this.OrganizationId,
approvalStatuses: ['待检查', '已检查'],
PageNumber: this.PageNumber,
PageSize: this.PageSize
}
this.http.get('/api/PlanTasks', {
this.http.get('/api/PlanTasks/GetMyTasks', {
params: params
}).subscribe((data: any) => {
this.isloading = false
@ -277,4 +278,56 @@ export class StationTaskExecutionComponent implements OnInit {
look(item) {
}
complete(item) {
const modal = this.modal.create({
nzTitle: '完成任务',
nzContent: UploadComponent,
nzViewContainerRef: this.viewContainerRef,
nzWidth: 450,
nzMaskClosable: false,
nzComponentParams: {
data: item,
},
nzOnOk: async () => {
if (instance.validateForm.valid) {
await new Promise((resolve, reject) => {
let body = {
inspectionResult: instance.validateForm.value.result,
resultAttachment: instance.fileList
}
this.http.patch(`/api/PlanTasks/${item.id}`, body).subscribe({
next: (data) => {
this.message.create('success', '已完成');
this.getTaskList()
resolve(data)
},
error: (err) => {
this.message.create('warning', '完成失败');
reject(err)
}
})
})
} 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));
}
ischat = false
taskId
openchat(item) {
console.log(item)
this.taskId = item.id
this.ischat = true
}
closechat() {
this.ischat = false
}
}

31
src/app/home/task/station-task-execution/upload/upload.component.html

@ -0,0 +1,31 @@
<div class="box">
<form nz-form [formGroup]="validateForm">
<nz-form-item>
<nz-form-label [nzSpan]="5" nzFor="result" nzRequired>检查结果</nz-form-label>
<nz-form-control [nzSpan]="12" nzErrorTip="请选择结果!" style="max-width: 100%;">
<nz-select id="result" formControlName="result" nzPlaceHolder="请选择结果">
<nz-option nzValue="检查完成" nzLabel="检查完成"></nz-option>
<nz-option nzValue="未发现违法违规情况" nzLabel="未发现违法违规情况"></nz-option>
<nz-option nzValue="责令限期改正" nzLabel="责令限期改正"></nz-option>
<nz-option nzValue="因客观原因无法开展检查" nzLabel="因客观原因无法开展检查"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
<nz-form-item style="margin-bottom: 0;">
<nz-form-label [nzSpan]="5" nzFor="file">上传附件</nz-form-label>
<div class="uploadbox">
<button nz-button [nzLoading]="isLoadingSave">
<span nz-icon nzType="upload"></span>
点击上传
</button>
<input type="file" name="" id="" (change)="filechange($event)" *ngIf="!isLoadingSave">
<ul>
<li *ngFor="let item of fileList;let key = index">
<span class="filename" (click)="lookfile(item)">{{item | fileName}}</span>
<span (click)="delete(fileList,key)">x</span>
</li>
</ul>
</div>
</nz-form-item>
</form>
</div>

49
src/app/home/task/station-task-execution/upload/upload.component.scss

@ -0,0 +1,49 @@
.uploadbox {
display: flex;
flex-direction: column;
position: relative;
width: 75%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
button {
margin-bottom: 8px;
width: 110px;
}
input {
opacity: 0;
width: 110px;
height: 32px;
position: absolute;
left: 0;
top: 0;
cursor: pointer;
}
ul {
margin-bottom: 0;
li {
display: flex;
justify-content: space-between;
span{
cursor: pointer;
}
.filename {
flex: 1;
display: inline-block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.filename:hover {
text-decoration: underline;
cursor: pointer;
}
}
}
}

139
src/app/home/task/station-task-execution/upload/upload.component.ts

@ -0,0 +1,139 @@
import { HttpClient } from '@angular/common/http';
import { Component, Input, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { NzModalRef, NzModalService } from 'ng-zorro-antd/modal';
import { ObjectsSimpleService } from 'src/app/service/objectsSimple.service';
import Viewer from 'viewerjs';
@Component({
selector: 'app-upload',
templateUrl: './upload.component.html',
styleUrls: ['./upload.component.scss']
})
export class UploadComponent implements OnInit {
@Input() data?: any;
validateForm!: FormGroup;
constructor(private modal: NzModalRef, private fb: FormBuilder, private http: HttpClient, private objectsSrv: ObjectsSimpleService, private modal2: NzModalService) { }
ngOnInit(): void {
console.log(this.data)
this.data.resultAttachment ? this.fileList = this.data.resultAttachment : this.fileList = []
this.validateForm = this.fb.group({
result: [this.data.inspectionResult, [Validators.required]],
});
}
destroyModal(): void {
this.modal.destroy({ data: 'this the result data' });
}
fileList = []
isLoadingSave: boolean = false
uploadIndex: string
filechange(e) {
this.isLoadingSave = true
let file = e.target.files[0] || null //获取上传的文件
this.openFileSelect(file, `resultAttachment/${this.data.id}/`)
}
//设置文件路径并上传
postFilePath
async openFileSelect(file: File, extensionPath: string) {
this.postFilePath = extensionPath;
let fileSize = file.size || null //上传文件的总大小
let shardSize = 5 * 1024 * 1024 //5MB 超过5MB要分块上传
if (fileSize >= shardSize) // 超过5MB要分块上传
{
await this.postFileByMul(file);
}
else //普通上传
{
await this.postFile(file);
}
}
//上传文件
async postFile(file: File) {
await new Promise((resolve, reject) => {
this.objectsSrv.postFile(this.postFilePath, file).subscribe(data => {
let dataObj = data as any;
let filePath: string = ObjectsSimpleService.baseUrl + dataObj.objectName;
this.fileList.push(filePath)
this.isLoadingSave = false
resolve('success')
});
})
}
/**
*
* @param file
*/
postFileByMul(file: File) {
this.objectsSrv.postFile_MultipartUpload(this.postFilePath, file).then((value) => {
let dataObj = value as any;
let filePath = dataObj.filePath
this.fileList.push(filePath)
this.isLoadingSave = false
});
}
//获取文件格式
getFileType(name: string): string {
let suffix
if (name.substring(name.length - 4).includes('png') || name.substring(name.length - 4).includes('jpg') || name.substring(name.length - 4).includes('jpeg') || name.substring(name.length - 4).includes('webp')) {
suffix = 'img'
} else if (name.substring(name.length - 4).includes('doc') || name.substring(name.length - 4).includes('docx')) {
suffix = 'word'
} else if (name.substring(name.length - 4).includes('pdf')) {
suffix = 'pdf'
}
return suffix
}
lookfile(item) {
if (!item) {
return
}
if (this.getFileType(item) == 'word') {
let arr = item.split('.')
arr[arr.length - 1] = 'pdf'
window.open(arr.join('.'))
} else if (this.getFileType(item) == 'pdf') {
window.open(item)
} else {
this.viewImg(item)
}
}
//查看图片
viewImg(url) {
let dom = document.getElementById(`viewerjs`)
let pObjs = dom.childNodes;
let node = document.createElement("img")
node.style.display = "none";
node.src = url;
node.id = 'img'
dom.appendChild(node)
setTimeout(() => {
let viewer = new Viewer(document.getElementById(`viewerjs`), {
hidden: () => {
dom.removeChild(pObjs[0]);
viewer.destroy();
}
});
node.click();
}, 0);
}
delete(fileList, key) {
this.modal2.confirm({
nzTitle: `确定要删除这个文件吗?`,
nzOkText: '确定',
nzOkType: 'primary',
nzOnOk: () => {
fileList.splice(key, 1)
},
nzCancelText: '取消'
});
}
}

6
src/app/home/task/station-weekly-plan/station-weekly-plan.component.html

@ -187,7 +187,8 @@
</div>
<div class="flexcol">
<span>
{{i.organization.name}}
{{i.organization.level == 'battalion'? i.creator.name :
i.organization.name}}
</span>
<span>
主负责人
@ -256,7 +257,8 @@
</div>
<div *ngIf="ischat" style="position: absolute;left: 30%;top: 12%;">
<div *ngIf="ischat"
style="position: absolute;left: 50%;top: 50%;transform: translate(-50%,-50%);width: 500px;height: 580px;">
<app-chat-window [taskId]="taskId"></app-chat-window>
</div>
</div>

2
src/app/home/task/station-weekly-plan/station-weekly-plan.component.scss

@ -4,7 +4,7 @@
display: flex;
flex-direction: column;
overflow: hidden;
position: relative;
// position: relative;
}
.informbox {

58
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) => {
@ -213,11 +213,12 @@ export class StationWeeklyPlanComponent implements OnInit {
this.cardData.forEach(element => {
element.data.forEach(item => {
item.approvalStatus == '通过' ? element.passed += 1 : null
item.approvalStatus == '已检查 ' ? element.inspected += 1 : null
item.approvalStatus == '已检查' ? element.inspected += 1 : null
})
})
this.cardData.forEach(element => {
element.percentage = Math.round(element.inspected / element.data.length) * 100
element.percentage = Math.round((element.inspected / element.data.length) * 100)
})
resolve(data)
@ -283,7 +284,7 @@ export class StationWeeklyPlanComponent implements OnInit {
i.approvalStatus == '已检查' ? element.finished += 1 : null
});
});
item.percentage = Math.round(item.inspected / item.allUnitsNum) * 100
item.percentage = Math.round((item.inspected / item.allUnitsNum) * 100)
resolve(data)
})
})
@ -390,18 +391,40 @@ export class StationWeeklyPlanComponent implements OnInit {
this.newTaskMessage.getMessage().subscribe((data: any) => {
console.log('具体任务信息', data);
this.cardData.forEach((item: any) => {
if (item.name == data.taskType) {
item.data.unshift(data)
if (!item.isDetails) {
item.badgeNum += 1
if (data.signalRData.planTaskState == 'added') {
this.cardData.forEach((item: any) => {
if (item.name == data.taskType) {
item.data.unshift(data)
if (!item.isDetails) {
item.badgeNum += 1
}
if (data.approvalStatus == '通过') {
item.passed += 1
this.getTaskListPass(this.stationData[0])
}
}
if (data.approvalStatus == '通过') {
item.passed += 1
})
}
if (data.signalRData.planTaskState == 'deleted') {
this.cardData.forEach((item: any) => {
if (item.name == data.taskType) {
for (let index = 0; index < item.data.length; index++) {
const element = item.data[index];
if (element.id == data.signalRData.planTaskId) {
item.data.splice(index, 1)
index--
}
}
if (!item.isDetails) {
item.badgeNum -= 1
}
this.getTaskListPass(this.stationData[0])
}
}
})
})
}
});
@ -555,7 +578,8 @@ export class StationWeeklyPlanComponent implements OnInit {
taskType: instance.validateForm.value.taskname,
companyId: instance.validateForm.value.unitname.id,
organizationId: this.OrganizationId,
supervisorIds: [this.userId],
supervisorIds: this.isSupervisor ? [this.userId] : [],
assistantOrganizationIds: this.isSupervisor ? [] : [this.OrganizationId],
creationType: '自主任务',
approvalStatus: '通过'
}
@ -595,7 +619,7 @@ export class StationWeeklyPlanComponent implements OnInit {
let taskIds = []
element.data.forEach(item => {
item.data.forEach(i => {
i.checkTime ? taskIds.push(i.id) : null
i.planTime && i.approvalStatus != '已检查' ? taskIds.push(i.id) : null
});
});
let params = {

15
src/app/home/task/station-weekly-plan/task-details/task-details.component.html

@ -4,17 +4,18 @@
<div class="text">
<p>单位名称 : {{item.company.companyName}}</p>
<p>单位级别 : {{item.company.useNature}}</p>
<p>主负责人 : {{item.organization.name}}</p>
<p>主负责人 : {{item.organization.level == 'battalion'? item.creator.name :
item.organization.name}}</p>
<p>协助人员 :
<span class="assistant">
<span *ngFor="let o of item.supervisors">
<img *ngIf="o.posts && o.posts[0] == '主查人员'" src="../../../../assets/images/icon/main.png"
alt="">
<img *ngIf="o.posts && o.posts[0] == '协查人员'" src="../../../../assets/images/icon/assist.png"
alt="">
{{o.name}}
<span *ngFor="let i of item.assistantOrganizations">
{{i.name}}
</span>
<span *ngFor="let i of item.supervisors">
{{i.name}}
</span>
</span>
</p>
</div>
<div class="state">

5
src/app/home/task/zhi-indicators/zhi-indicators.component.html

@ -480,7 +480,10 @@
<td>{{item.targetCount}}</td>
<td class="flextd">
<ng-container *ngIf="item.planTasks && item.planTasks.length != 0; else elseTemplate">
<div class="itembox" *ngFor="let i of item.planTasks">{{i.company.companyName}}
<div class="itembox" *ngFor="let i of item.planTasks">
{{i.company.companyName}}
<img *ngIf="i.isCheckAgain" class="isCheckAgain"
src="../../../../assets/images/icon/isCheckAgain.png" alt="">
</div>
</ng-container>
<ng-template #elseTemplate>

6
src/app/home/task/zhi-indicators/zhi-indicators.component.scss

@ -113,7 +113,11 @@
position: relative;
display: flex;
justify-content: space-between;
.itembox{
position: absolute;
right: 0;
top: 0px;
}
.ellipsis {
max-width: 200px;
white-space: nowrap;

2
src/app/pages/login/login.component.html

@ -1,6 +1,6 @@
<div class="login" id="login">
<div class="left">
<p class="a1">Hi,欢迎登</p>
<p class="a1">Hi,欢迎登</p>
<div>
<img src="../../../assets/images/logo/loginlogo.png" alt="">
</div>

17
src/app/pipe/cameraTypePipe.ts

@ -1,17 +0,0 @@
import { Pipe, PipeTransform } from '@angular/core';
/*
* Raise the value exponentially
* Takes an exponent argument that defaults to 1.
* Usage:
* value | exponentialStrength:exponent
* Example:
* {{ 2 | exponentialStrength:10 }}
* formats to: 1024
*/
@Pipe({ name: 'cameraType' })
export class cameraType implements PipeTransform {
transform(value: number): string {
let arr = ['进出口', '加油区', '卸油区', '便利店']
return arr[value]
}
}

9
src/app/pipe/pipe.ts

@ -0,0 +1,9 @@
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ name: 'fileName' })
export class fileName implements PipeTransform {
transform(value: string): string {
let a = value.split('/')[value.split('/').length - 1]
return a
}
}

BIN
src/assets/images/icon/isCheckAgain.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 640 B

BIN
src/assets/statistic-analysis/down.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B

BIN
src/assets/statistic-analysis/five.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
src/assets/statistic-analysis/four.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
src/assets/statistic-analysis/one.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1012 B

BIN
src/assets/statistic-analysis/task.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 B

BIN
src/assets/statistic-analysis/three.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
src/assets/statistic-analysis/two.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
src/assets/statistic-analysis/unit.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 536 B

BIN
src/assets/statistic-analysis/ununit.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 B

BIN
src/assets/statistic-analysis/up.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 B

6
src/index.html

@ -1,5 +1,6 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>防消一体化综合治理平台</title>
@ -7,6 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<app-root></app-root>
<div id="viewerjs" style="display:none"></div>
@ -15,4 +17,6 @@
<script type="text/javascript" src="/assets/wordexport/FileSaver.js"></script>
<script type="text/javascript" src="/assets/wordexport/jquery.wordexport.js"></script>
<script src='https://webapi.amap.com/maps?v=2.0&key=e4b359dc7b03f9418b7497f807131346'></script>
</html>
<script src="https://webapi.amap.com/ui/1.1/main.js?v=1.1.1"></script>
</html>

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);

9
src/theme.less

@ -146,6 +146,9 @@
}
}
}
.xxx{
padding: 0;
}
.rankingListBox {
.ant-progress-inner {
border-radius: 0px;
}
}

Loading…
Cancel
Save