Browse Source

[新增]救援站申请任务对接接口

非煤矿山灾害智能感知和预警系统
邵佳豪 3 years ago
parent
commit
180ef35a52
  1. 2
      package.json
  2. 2
      src/app/CustomReuseStrategy.ts
  3. 10
      src/app/home/home.module.ts
  4. 1
      src/app/home/task/da-subordinate-audit/allot-person/allot-person.component.html
  5. 0
      src/app/home/task/da-subordinate-audit/allot-person/allot-person.component.scss
  6. 15
      src/app/home/task/da-subordinate-audit/allot-person/allot-person.component.ts
  7. 50
      src/app/home/task/da-subordinate-audit/da-subordinate-audit.component.html
  8. 68
      src/app/home/task/da-subordinate-audit/da-subordinate-audit.component.ts
  9. 6
      src/app/home/task/station-task-apply/apply-look/apply-look.component.html
  10. 32
      src/app/home/task/station-task-apply/apply-look/apply-look.component.ts
  11. 12
      src/app/home/task/station-task-apply/apply/apply.component.html
  12. 77
      src/app/home/task/station-task-apply/apply/apply.component.ts
  13. 57
      src/app/home/task/station-task-apply/station-task-apply.component.html
  14. 10
      src/app/home/task/station-task-apply/station-task-apply.component.scss
  15. 123
      src/app/home/task/station-task-apply/station-task-apply.component.ts
  16. 34
      src/app/home/task/station-task-execution/station-task-execution.component.html
  17. 9
      src/app/home/task/station-task-execution/station-task-execution.component.scss
  18. 27
      src/app/home/task/station-task-execution/station-task-execution.component.ts
  19. 16
      src/app/home/task/zhi-indicators/zhi-indicators.component.html
  20. 5
      src/app/home/task/zhi-indicators/zhi-indicators.component.scss
  21. 100
      src/app/home/task/zhi-indicators/zhi-indicators.component.ts
  22. 5
      src/app/service/cache-token.service.ts
  23. 7
      src/theme.less

2
package.json

@ -3,7 +3,7 @@
"version": "0.0.0", "version": "0.0.0",
"scripts": { "scripts": {
"ng": "ng", "ng": "ng",
"start": "ng serve --proxy-config proxy.config.json --open --port 4000 ", "start": "ng serve --proxy-config proxy.config.json --open --port 8888 ",
"build": "ng build", "build": "ng build",
"watch": "ng build --watch --configuration development", "watch": "ng build --watch --configuration development",
"test": "ng test" "test": "ng test"

2
src/app/CustomReuseStrategy.ts

@ -15,7 +15,7 @@ export class CustomReuseStrategy implements RouteReuseStrategy {
/** 表示对所有路由允许复用 如果你有路由不想利用可以在这加一些业务逻辑判断 */ /** 表示对所有路由允许复用 如果你有路由不想利用可以在这加一些业务逻辑判断 */
shouldDetach(route: ActivatedRouteSnapshot): boolean { shouldDetach(route: ActivatedRouteSnapshot): boolean {
// console.log('shouldDetach======>', route); // console.log('shouldDetach======>', route);
if (route.routeConfig.path == 'basicInfo' || route.routeConfig.path == '') { if (route.routeConfig.path == 'basicInfo' || route.routeConfig.path == '' || route.routeConfig.path == 'indicators') {
return false; return false;
} else { } else {
return true; return true;

10
src/app/home/home.module.ts

@ -53,6 +53,8 @@ import { ApplyLookComponent } from './task/station-task-apply/apply-look/apply-l
import { NzDatePickerModule } from 'ng-zorro-antd/date-picker'; import { NzDatePickerModule } from 'ng-zorro-antd/date-picker';
import { LookTaskComponent } from './task/zhi-audit/look-task/look-task.component'; import { LookTaskComponent } from './task/zhi-audit/look-task/look-task.component';
import { UnitEditComponent } from './basic-info/unit-edit/unit-edit.component'; import { UnitEditComponent } from './basic-info/unit-edit/unit-edit.component';
import { NzSpinModule } from 'ng-zorro-antd/spin';
import { AllotPersonComponent } from './task/da-subordinate-audit/allot-person/allot-person.component';
@NgModule({ @NgModule({
declarations: [ declarations: [
NavComponent, NavComponent,
@ -83,7 +85,8 @@ import { UnitEditComponent } from './basic-info/unit-edit/unit-edit.component';
ApplyComponent, ApplyComponent,
ApplyLookComponent, ApplyLookComponent,
LookTaskComponent, LookTaskComponent,
UnitEditComponent UnitEditComponent,
AllotPersonComponent
], ],
imports: [ imports: [
CommonModule, CommonModule,
@ -111,8 +114,9 @@ import { UnitEditComponent } from './basic-info/unit-edit/unit-edit.component';
ScrollingModule, ScrollingModule,
NzGridModule, NzGridModule,
NzRadioModule, NzRadioModule,
NzDatePickerModule NzDatePickerModule,
NzSpinModule
], ],
entryComponents: [AddroleComponent, EditroleComponent, AdduserComponent, EdituserComponent, AddorComponent, EditorComponent, ApplyComponent, ApplyLookComponent, LookTaskComponent] entryComponents: [AddroleComponent, EditroleComponent, AdduserComponent, EdituserComponent, AddorComponent, EditorComponent, ApplyComponent, ApplyLookComponent, LookTaskComponent, AllotPersonComponent]
}) })
export class HomeModule { } export class HomeModule { }

1
src/app/home/task/da-subordinate-audit/allot-person/allot-person.component.html

@ -0,0 +1 @@
<p>allot-person works!</p>

0
src/app/home/task/da-subordinate-audit/allot-person/allot-person.component.scss

15
src/app/home/task/da-subordinate-audit/allot-person/allot-person.component.ts

@ -0,0 +1,15 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-allot-person',
templateUrl: './allot-person.component.html',
styleUrls: ['./allot-person.component.scss']
})
export class AllotPersonComponent implements OnInit {
constructor() { }
ngOnInit(): void {
}
}

50
src/app/home/task/da-subordinate-audit/da-subordinate-audit.component.html

@ -12,26 +12,21 @@
</div> </div>
<div class="content"> <div class="content">
<div class="tabheader"> <div class="tabheader">
<div class="tabtitle" [ngClass]="{'selectedTab': selectedTab == 1}" (click)="selectTab(1)"> <div *ngFor="let item of data" class="tabtitle" [ngClass]="{'selectedTab': selectedTab == item.id}"
<div [ngClass]="{'blue': selectedTab == 1}"> (click)="selectTab(item.id)">
<span>熟悉演练任务</span> <div [ngClass]="{'blue': selectedTab == item.id}">
<span>{{item.name}}</span>
<span style="margin: 0 8px;"></span> <span style="margin: 0 8px;"></span>
<span>已审批: 6/8</span> <span>已审批: {{item.finished}}/{{item.totalCount}}</span>
</div>
</div>
<div class="tabtitle" [ngClass]="{'selectedTab': selectedTab == 2}" (click)="selectTab(2)">
<div [ngClass]="{'blue': selectedTab == 2}">
<span>联络指导任务</span>
<span style="margin: 0 8px;"></span>
<span>已审批: 6/8</span>
</div> </div>
</div> </div>
</div> </div>
<div class="tabbody" *ngIf="selectedTab == 1"> <div class="tabbody" *ngIf="selectedTab == 0">
<div class="card redcard"> <div class="card greencard" [ngClass]="{'redcard': item.approvalStatus == 1}"
*ngFor="let item of data[0].list">
<div class="unitname"> <div class="unitname">
<img src="../../../../assets/images/icon/unit.png" alt=""> <img src="../../../../assets/images/icon/unit.png" alt="">
<span>上海雅特酒店管理有限公司济南泺文路分公司</span> <span>{{item.company.companyName}}</span>
</div> </div>
<div class="info"> <div class="info">
<span> <span>
@ -44,22 +39,25 @@
</span> </span>
<span class="blue">分配</span> <span class="blue">分配</span>
<span>|</span> <span>|</span>
<span>申请人: 历下区A消防救援站</span> <span>申请人: {{item.assitantOrganization.name}}</span>
<span class="blue">修改</span> <!-- <span class="blue">修改</span> -->
</div> </div>
<div class="btn"> <div class="btn">
<button nz-button style="background: #42B983;color: white;">同意</button> <button nz-button style="background: #42B983;color: white;">同意</button>
<button nz-button style="background: #FF0000;color: white;margin-left: 20px;">驳回</button> <button nz-button style="background: #FF0000;color: white;margin-left: 20px;">驳回</button>
</div> </div>
<img class="auditimg" src="../../../../assets/images/icon/reject.png" alt=""> <img *ngIf="item.approvalStatus == 1" class="auditimg" src="../../../../assets/images/icon/reject.png"
<!-- <img class="auditimg" src="../../../../assets/images/icon/agree.png" alt=""> --> alt="">
<img *ngIf="item.approvalStatus == 0" class="auditimg" src="../../../../assets/images/icon/agree.png"
alt="">
</div> </div>
</div> </div>
<div class="tabbody" *ngIf="selectedTab == 2"> <div class="tabbody" *ngIf="selectedTab == 1">
<div class="card greencard"> <div class="card greencard" [ngClass]="{'redcard': item.approvalStatus == 1}"
*ngFor="let item of data[1].list">
<div class="unitname"> <div class="unitname">
<img src="../../../../assets/images/icon/unit.png" alt=""> <img src="../../../../assets/images/icon/unit.png" alt="">
<span>上海雅特酒店管理有限公司济南泺文路分公司</span> <span>{{item.company.companyName}}</span>
</div> </div>
<div class="info"> <div class="info">
<span> <span>
@ -72,15 +70,17 @@
</span> </span>
<span class="blue">分配</span> <span class="blue">分配</span>
<span>|</span> <span>|</span>
<span>申请人: 历下区A消防救援站</span> <span>申请人: {{item.assitantOrganization.name}}</span>
<span class="blue">修改</span> <!-- <span class="blue">修改</span> -->
</div> </div>
<div class="btn"> <div class="btn">
<button nz-button style="background: #42B983;color: white;">同意</button> <button nz-button style="background: #42B983;color: white;">同意</button>
<button nz-button style="background: #FF0000;color: white;margin-left: 20px;">驳回</button> <button nz-button style="background: #FF0000;color: white;margin-left: 20px;">驳回</button>
</div> </div>
<!-- <img class="auditimg" src="../../../../assets/images/icon/reject.png" alt=""> --> <img *ngIf="item.approvalStatus == 1" class="auditimg" src="../../../../assets/images/icon/reject.png"
<img class="auditimg" src="../../../../assets/images/icon/agree.png" alt=""> alt="">
<img *ngIf="item.approvalStatus == 0" class="auditimg" src="../../../../assets/images/icon/agree.png"
alt="">
</div> </div>
</div> </div>
</div> </div>

68
src/app/home/task/da-subordinate-audit/da-subordinate-audit.component.ts

@ -1,3 +1,4 @@
import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
@Component({ @Component({
@ -7,9 +8,20 @@ import { Component, OnInit } from '@angular/core';
}) })
export class DaSubordinateAuditComponent implements OnInit { export class DaSubordinateAuditComponent implements OnInit {
constructor() { } constructor(private http: HttpClient) { }
OrganizationId
selectedTab = 0
selectTab(item) {
this.selectedTab = item
}
ngOnInit(): void { ngOnInit(): void {
this.OrganizationId = JSON.parse(sessionStorage.getItem('userData')).organizationId
let month = new Date().getMonth() + 1
this.selectedMonth = month + '月'
this.getTaskList()
} }
months = [ months = [
{ name: '1月', isable: true }, { name: '1月', isable: true },
@ -31,8 +43,56 @@ export class DaSubordinateAuditComponent implements OnInit {
} }
selectedTab = 1 nzLoading = false
selectTab(item) { PageNumber = 1
this.selectedTab = item PageSize = 9999
data = [
{ id: 0, name: '熟悉演练任务', finished: 0, totalCount: 0, list: [] },
{ id: 1, name: '联络指导任务', finished: 0, totalCount: 0, list: [] }
]
getTaskList() {
this.nzLoading = true
let params = {
OrganizationId: this.OrganizationId,
PageNumber: this.PageNumber,
PageSize: this.PageSize
}
this.http.get('/api/PlanTasks', {
params: params
}).subscribe((data: any) => {
this.nzLoading = false
let arr1 = []
let arr2 = []
data.items.forEach(element => {
if (element.taskName == '熟悉演练') {
arr1.push(element)
}
if (element.taskName == '联络指导') {
arr2.push(element)
}
});
arr1.forEach(item => {
if (!!item.approvalStatus) {
this.data[0].finished += 1
}
});
arr2.forEach(item => {
if (!!item.approvalStatus) {
this.data[1].finished += 1
}
});
this.data[0].totalCount = arr1.length
this.data[0].list = [...arr1]
this.data[1].totalCount = arr2.length
this.data[1].list = [...arr2]
})
} }
} }

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

@ -1,6 +1,6 @@
<div class="box applymodel"> <div class="box applymodel">
<p>任务名称: 熟悉演练</p> <p>任务名称: {{data.taskName}}</p>
<p>单位名称: 上海雅特酒店管理有限公司济南泺文路分公司</p> <p>单位名称: {{data.company.companyName}}</p>
<p>协助机构: 历下区A消防救援站</p> <p>协助机构: {{data.assitantOrganization.name}}</p>
</div> </div>

32
src/app/home/task/station-task-apply/apply-look/apply-look.component.ts

@ -11,44 +11,16 @@ import { TreeService } from 'src/app/service/tree.service';
}) })
export class ApplyLookComponent implements OnInit { export class ApplyLookComponent implements OnInit {
@Input() title?: string; @Input() data?: any;
@Input() subtitle?: string;
validateForm!: FormGroup; validateForm!: FormGroup;
constructor(private modal: NzModalRef, private fb: FormBuilder, private http: HttpClient, private toTree: TreeService) { } constructor(private modal: NzModalRef, private fb: FormBuilder, private http: HttpClient, private toTree: TreeService) { }
ngOnInit(): void { ngOnInit(): void {
this.validateForm = this.fb.group({ console.log(this.data)
taskname: [true, [Validators.required]],
unitname: [null, [Validators.required]],
organization: [null, [Validators.required]]
});
this.getAllOrganization()
} }
destroyModal(): void { destroyModal(): void {
this.modal.destroy({ data: 'this the result data' }); this.modal.destroy({ data: 'this the result data' });
} }
//获取所有组织机构
nodes: any = []
getAllOrganization() {
// let OrganizationUnitId = sessionStorage.getItem('isGasStation') == 'true' ? JSON.parse(sessionStorage.getItem('userdataOfgasstation')).organization.id : JSON.parse(sessionStorage.getItem('userdata')).organization.id
// let params = {
// OrganizationUnitId: OrganizationUnitId,
// IsContainsChildren: "true"
// }
// this.http.get('/api/services/app/Organization/GetAll', {
// params: params
// }).subscribe((data: any) => {
// data.result.items.forEach(element => {
// if (element.id == OrganizationUnitId) {
// element.parentId = null
// }
// element.key = element.id
// element.title = element.displayName
// });
// this.nodes = [...this.toTree.toTree(data.result.items)]
// })
}
} }

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

@ -3,15 +3,19 @@
<nz-form-item> <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-form-control>
<label nz-radio formControlName="taskname">熟悉演练</label> <label nz-radio formControlName="taskname">{{title}}</label>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <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-form-control>
<nz-input-group> <nz-select formControlName="unitname" (nzScrollToBottom)="loadMore()" nzPlaceHolder="请选择单位" nzAllowClear
<input nz-input type="text" formControlName="unitname" placeholder="请输入单位名称" /> [nzDropdownRender]="renderTemplate" nzShowSearch nzServerSearch (nzOnSearch)="search($event)">
</nz-input-group> <nz-option *ngFor="let o of optionList" [nzValue]="o.id" [nzLabel]="o.companyName"></nz-option>
</nz-select>
<ng-template #renderTemplate>
<nz-spin *ngIf="isLoading"></nz-spin>
</ng-template>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>

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

@ -3,16 +3,16 @@ import { NzModalRef } from 'ng-zorro-antd/modal';
import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { TreeService } from 'src/app/service/tree.service'; import { TreeService } from 'src/app/service/tree.service';
import { Observable, of } from 'rxjs';
import { catchError, map } from 'rxjs/operators';
@Component({ @Component({
selector: 'app-apply', selector: 'app-apply',
templateUrl: './apply.component.html', templateUrl: './apply.component.html',
styleUrls: ['./apply.component.scss'] styleUrls: ['./apply.component.scss']
}) })
export class ApplyComponent implements OnInit { export class ApplyComponent implements OnInit {
@Input() title?: string; @Input() title?: string;
@Input() subtitle?: string; @Input() nodes?: any;
validateForm!: FormGroup; validateForm!: FormGroup;
constructor(private modal: NzModalRef, private fb: FormBuilder, private http: HttpClient, private toTree: TreeService) { } constructor(private modal: NzModalRef, private fb: FormBuilder, private http: HttpClient, private toTree: TreeService) { }
@ -23,31 +23,60 @@ export class ApplyComponent implements OnInit {
organization: [null, [Validators.required]] organization: [null, [Validators.required]]
}); });
this.getAllOrganization()
} }
destroyModal(): void { destroyModal(): void {
this.modal.destroy({ data: 'this the result data' }); this.modal.destroy({ data: 'this the result data' });
} }
//获取所有组织机构 optionList = [];
nodes: any = [] selectedUser = null;
getAllOrganization() { isLoading = false;
// let OrganizationUnitId = sessionStorage.getItem('isGasStation') == 'true' ? JSON.parse(sessionStorage.getItem('userdataOfgasstation')).organization.id : JSON.parse(sessionStorage.getItem('userdata')).organization.id
// let params = { PageNumber = 0
// OrganizationUnitId: OrganizationUnitId, PageSize = 50
// IsContainsChildren: "true" totalCount
// } loadMore(): Promise<void> {
// this.http.get('/api/services/app/Organization/GetAll', { if (this.optionList.length >= this.totalCount) {
// params: params return
// }).subscribe((data: any) => { }
// data.result.items.forEach(element => { this.PageNumber += 1
// if (element.id == OrganizationUnitId) { this.isLoading = true;
// element.parentId = null this.getCompanies()
// } }
// element.key = element.id
// element.title = element.displayName search(value: string) {
// }); this.optionList = []
// this.nodes = [...this.toTree.toTree(data.result.items)] this.PageNumber = 1
// }) this.isLoading = true;
this.getCompanies(value)
}
async getCompanies(CompanyName?: string) {
let params = {
CompanyName: CompanyName,
OrganizationId: JSON.parse(sessionStorage.getItem('userData')).organizationId,
PageNumber: this.PageNumber,
PageSize: this.PageSize
}
await new Promise<void>((resolve, reject) => {
this.http.get('/api/Companies', {
params: params
}).subscribe((data: any) => {
this.totalCount = data.totalCount
this.isLoading = false;
this.optionList = [...this.optionList, ...data.items];
let map = new Map();
for (let item of this.optionList) {
if (!map.has(item.id)) {
map.set(item.id, item);
};
};
this.optionList = [...map.values()];
resolve(data)
})
})
} }
} }

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

@ -13,45 +13,70 @@
</div> </div>
<div class="searchbox"> <div class="searchbox">
<div class="search"> <div class="search">
<input type="text" nz-input placeholder="任务名称" [(ngModel)]="searchForm.taskname" /> <nz-select nzPlaceHolder="任务名称" [(ngModel)]="searchForm.taskname">
<nz-option nzValue="监督检查" nzLabel="监督检查"></nz-option>
<nz-option nzValue="熟悉演练" nzLabel="熟悉演练"></nz-option>
</nz-select>
<input type="text" nz-input placeholder="单位名称" [(ngModel)]="searchForm.unitname" /> <input type="text" nz-input placeholder="单位名称" [(ngModel)]="searchForm.unitname" />
<input type="text" nz-input placeholder="单位级别" [(ngModel)]="searchForm.unitlevel" /> <!-- <nz-select nzPlaceHolder="单位级别" [(ngModel)]="searchForm.unitlevel">
<input type="text" nz-input placeholder="协助机构" [(ngModel)]="searchForm.or" /> <nz-option nzValue="一般单位" nzLabel="一般单位"></nz-option>
<button nz-button nzType="primary"><i nz-icon nzType="search" nzTheme="outline"></i>查询</button> <nz-option nzValue="重点单位" nzLabel="重点单位"></nz-option>
<button nz-button nzType="default"><i nz-icon nzType="reload" nzTheme="outline"></i>重置</button> </nz-select> -->
<nz-tree-select [nzExpandedKeys]="expandKeys" [nzNodes]="nodes" nzShowSearch nzPlaceHolder="协助机构"
[(ngModel)]="searchForm.or" [nzExpandedIcon]="multiExpandedIconTpl"
[nzDropdownClassName]="'maxHeightTreeSelect'" [nzAllowClear]="false"></nz-tree-select>
<ng-template #multiExpandedIconTpl let-node let-origin="origin">
<ng-container *ngIf="node.children.length == 0; else elseTemplate">
</ng-container>
<ng-template #elseTemplate>
<i nz-icon [nzType]="node.isExpanded ? 'caret-down' : 'caret-right'"
class="ant-tree-switcher-line-icon"></i>
</ng-template>
</ng-template>
<button (click)="search()" nz-button nzType="primary"><i nz-icon nzType="search"
nzTheme="outline"></i>查询</button>
<button (click)="reset()" nz-button nzType="default"><i nz-icon nzType="reload"
nzTheme="outline"></i>重置</button>
</div> </div>
</div> </div>
<div class="content"> <div class="content">
<div class="applybtn"> <div class="applybtn">
<button (click)="apply()" nz-button nzType="primary"><i nz-icon nzType="form" nzTheme="outline"></i>申请</button> <button (click)="apply()" nz-button nzType="primary"><i nz-icon nzType="form"
nzTheme="outline"></i>申请</button>
</div> </div>
<div class="tablebox"> <div class="tablebox">
<nz-table nzBordered #basicTable [nzLoading]="loading" [nzData]="usersLIst" [nzShowPagination]='false' <nz-table nzBordered #basicTable [nzLoading]="nzLoading" [nzData]="taskLIst" [nzShowPagination]='false'
[nzPageSize]='16'> [nzPageSize]='10'>
<thead> <thead>
<tr> <tr>
<th [width]="'15%'">任务名称</th> <th [width]="'15%'">任务名称</th>
<th [width]="'20%'">单位名称</th> <th [width]="'20%'">单位名称</th>
<th>单位级别</th> <!-- <th>单位级别</th> -->
<th>协助机构</th> <th>协助机构</th>
<th>结果</th> <th>结果</th>
<th>时间</th>
<th [width]="'8%'">操作</th> <th [width]="'8%'">操作</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let item of basicTable.data"> <tr *ngFor="let item of basicTable.data">
<td>监督检查</td> <td>
{{item.taskName}}
</td>
<td nzBreakWord> <td nzBreakWord>
上海雅特酒店管理有限公司济南泺文路分公司 {{item.company.companyName}}
</td> </td>
<td> <!-- <td>
一般单位 一般单位
</td> -->
<td>
{{item.assitantOrganization.name}}
</td> </td>
<td> <td>
历下区A消防救援站 /
</td> </td>
<td> <td>
未发现违法违规情况 {{item.creationTime | date:"yyyy-MM-dd hh:mm:ss"}}
</td> </td>
<td class="operation"> <td class="operation">
<a class="blue" (click)="look(item)">查看</a> <a class="blue" (click)="look(item)">查看</a>
@ -61,10 +86,10 @@
</nz-table> </nz-table>
</div> </div>
<div class="pagination"> <div class="pagination">
<nz-pagination [nzHideOnSinglePage]="false" [nzPageIndex]="1" [nzTotal]="usersNum" [nzPageSize]="16" <nz-pagination [nzHideOnSinglePage]="false" [nzPageIndex]="1" [nzTotal]="totalCount" [nzPageSize]="10"
[nzShowTotal]="totalTemplate" nzShowQuickJumper (nzPageIndexChange)="pageChange($event)"> [nzShowTotal]="totalTemplate" nzShowQuickJumper (nzPageIndexChange)="pageChange($event)">
</nz-pagination> </nz-pagination>
<ng-template #totalTemplate let-total> 16条/页,共{{usersNum}}条 </ng-template> <ng-template #totalTemplate let-total> 10条/页,共{{totalCount}}条 </ng-template>
</div> </div>
</div> </div>
</div> </div>

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

@ -43,12 +43,18 @@
padding: 0 20px; padding: 0 20px;
align-items: center; align-items: center;
border-bottom: 1px solid #E4E7EC; border-bottom: 1px solid #E4E7EC;
.search { .search {
width: 80%; width: 100%;
display: flex; display: flex;
justify-content: flex-start;
input { input,
nz-select,
nz-tree-select {
width: 220px;
margin-right: 16px; margin-right: 16px;
text-align: left;
} }
button { button {

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

@ -23,14 +23,13 @@ export class StationTaskApplyComponent implements OnInit {
unitlevel: '', unitlevel: '',
or: '' or: ''
} }
usersNum OrganizationId
loading
usersLIst = [1]
ngOnInit(): void { ngOnInit(): void {
this.OrganizationId = JSON.parse(sessionStorage.getItem('userData')).organizationId
this.getAllOrganization()
this.getTaskList()
} }
pageChange($event) {
}
cancel(item, type) { cancel(item, type) {
@ -39,7 +38,75 @@ export class StationTaskApplyComponent implements OnInit {
} }
nzLoading = false
totalCount
PageNumber = 1
PageSize = 10
taskLIst = []
getTaskList() {
this.nzLoading = true
let params = {
OrganizationId: this.OrganizationId,
TaskName: this.searchForm.taskname,
CompanyName: this.searchForm.unitname,
AssitantOrganizationId: this.searchForm.or,
PageNumber: this.PageNumber,
PageSize: this.PageSize
}
this.http.get('/api/PlanTasks', {
params: params
}).subscribe((data: any) => {
this.nzLoading = 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
//获取所有组织机构
nodes: any = []
getAllOrganization() {
let params = {
PageNumber: 1,
PageSize: 9999
}
this.http.get('/api/Organizations', {
params: params
}).subscribe((data: any) => {
data.items.forEach(element => {
element.key = element.id
element.title = element.name
});
this.nodes = [...this.toTree.toTree(data.items)]
})
}
apply() { apply() {
if (this.nodes.length == 0) {
this.message.create('warning', '组织机构初始化中,请稍后重试');
return
}
const modal = this.modal.create({ const modal = this.modal.create({
nzTitle: '申请', nzTitle: '申请',
nzContent: ApplyComponent, nzContent: ApplyComponent,
@ -47,32 +114,31 @@ export class StationTaskApplyComponent implements OnInit {
nzWidth: 660, nzWidth: 660,
nzMaskClosable: false, nzMaskClosable: false,
nzComponentParams: { nzComponentParams: {
title: '', title: "熟悉演练",
subtitle: '' nodes: this.nodes,
}, },
nzOnOk: async () => { nzOnOk: async () => {
if (instance.validateForm.valid) { if (instance.validateForm.valid) {
await new Promise(resolve => { await new Promise((resolve, reject) => {
let roleNames = [...instance.validateForm.value.role, ...instance.validateForm.value.role2]
let body = { let body = {
userName: instance.validateForm.value.account, organizationId: this.OrganizationId,
name: instance.validateForm.value.name, taskName: "熟悉演练",
organizationUnitId: Number(instance.validateForm.value.organization), companyId: instance.validateForm.value.unitname,
roleNames: roleNames, assitantOrganizationId: instance.validateForm.value.organization,
phoneNumber: instance.validateForm.value.phonenum,
isActive: true
} }
// this.http.post(this.addUrl, body).subscribe(data => { this.http.post('/api/PlanTasks', body).subscribe({
// resolve(data) next: (data) => {
// this.message.create('success', '创建成功!'); this.message.create('success', '创建成功');
// this.SkipCount = 0 resolve(data)
// this.getAllUsers() this.getTaskList()
// return true return true
// }, err => { },
// resolve(err) error: (err) => {
// this.message.create('warning', err.error.error.message); this.message.create('warning', '创建失败');
// return false reject(err)
// }) return false
}
})
}) })
} else { } else {
this.message.create('warning', '请填写完整!'); this.message.create('warning', '请填写完整!');
@ -92,10 +158,9 @@ export class StationTaskApplyComponent implements OnInit {
nzWidth: 660, nzWidth: 660,
nzMaskClosable: false, nzMaskClosable: false,
nzComponentParams: { nzComponentParams: {
title: '', data: item,
subtitle: ''
}, },
nzFooter:null, nzFooter: null,
nzOnOk: async () => { nzOnOk: async () => {
if (instance.validateForm.valid) { if (instance.validateForm.valid) {
await new Promise(resolve => { await new Promise(resolve => {

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

@ -12,13 +12,33 @@
</div> </div>
<div class="searchbox"> <div class="searchbox">
<div class="search"> <div class="search">
<input type="text" nz-input placeholder="任务名称" [(ngModel)]="searchForm.taskname" /> <div class="search">
<input type="text" nz-input placeholder="单位名称" [(ngModel)]="searchForm.unitname" /> <nz-select nzPlaceHolder="任务名称" [(ngModel)]="searchForm.taskname">
<input type="text" nz-input placeholder="单位级别" [(ngModel)]="searchForm.unitlevel" /> <nz-option nzValue="监督检查" nzLabel="监督检查"></nz-option>
<input type="text" nz-input placeholder="协助机构" [(ngModel)]="searchForm.or" /> <nz-option nzValue="熟悉演练" nzLabel="熟悉演练"></nz-option>
<input type="text" nz-input placeholder="时间" [(ngModel)]="searchForm.tasktime" /> </nz-select>
<button nz-button nzType="primary"><i nz-icon nzType="search" nzTheme="outline"></i>查询</button> <input type="text" nz-input placeholder="单位名称" [(ngModel)]="searchForm.unitname" />
<button nz-button nzType="default"><i nz-icon nzType="reload" nzTheme="outline"></i>重置</button> <nz-select nzPlaceHolder="单位级别" [(ngModel)]="searchForm.unitlevel">
<nz-option nzValue="一般单位" nzLabel="一般单位"></nz-option>
<nz-option nzValue="重点单位" nzLabel="重点单位"></nz-option>
</nz-select>
<nz-tree-select [nzExpandedKeys]="expandKeys" [nzNodes]="nodes" nzShowSearch nzPlaceHolder="协助机构"
[(ngModel)]="searchForm.or" [nzExpandedIcon]="multiExpandedIconTpl"
[nzDropdownClassName]="'maxHeightTreeSelect'" [nzAllowClear]="false"></nz-tree-select>
<ng-template #multiExpandedIconTpl let-node let-origin="origin">
<ng-container *ngIf="node.children.length == 0; else elseTemplate">
</ng-container>
<ng-template #elseTemplate>
<i nz-icon [nzType]="node.isExpanded ? 'caret-down' : 'caret-right'"
class="ant-tree-switcher-line-icon"></i>
</ng-template>
</ng-template>
<nz-date-picker [(ngModel)]="searchForm.tasktime">
</nz-date-picker>
<button nz-button nzType="primary"><i nz-icon nzType="search" nzTheme="outline"></i>查询</button>
<button nz-button nzType="default"><i nz-icon nzType="reload" nzTheme="outline"></i>重置</button>
</div>
</div> </div>
</div> </div>
<div class="content"> <div class="content">

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

@ -1,7 +1,7 @@
.box { .box {
width: 100%; width: 100%;
height: 100%; height: 100%;
color: #303133; color: #303133;
box-sizing: border-box; box-sizing: border-box;
padding: 20px; padding: 20px;
@ -47,8 +47,13 @@
width: 100%; width: 100%;
display: flex; display: flex;
input { input,
nz-select,
nz-tree-select,
nz-date-picker {
width: 220px;
margin-right: 16px; margin-right: 16px;
text-align: left;
} }
button { button {

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

@ -19,7 +19,7 @@ export class StationTaskExecutionComponent implements OnInit {
tasktime: '', tasktime: '',
unitname: '', unitname: '',
unitlevel: '', unitlevel: '',
or:'' or: ''
} }
usersNum usersNum
loading loading
@ -36,4 +36,29 @@ export class StationTaskExecutionComponent implements OnInit {
delete(item) { delete(item) {
} }
expandKeys
defaultOrId: string
//获取所有组织机构
nodes: any = []
getAllOrganization() {
let organizationId = JSON.parse(sessionStorage.getItem('userData')).organizationId
let params = {
OrganizationId: organizationId || '',
ContainsChildren: "true",
PageNumber: 1,
PageSize: 9999
}
this.http.get('/api/Organizations', {
params: params
}).subscribe((data: any) => {
data.items.forEach(element => {
if (element.id == organizationId) {
element.parentId = null
}
element.key = element.id
element.title = element.name
});
this.nodes = [...this.toTree.toTree(data.items)]
})
}
} }

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

@ -33,7 +33,7 @@
</div> </div>
<div class="popoverContent" *ngIf="doubleRandom.selectedMenu == 1"> <div class="popoverContent" *ngIf="doubleRandom.selectedMenu == 1">
<div> <div>
<form nz-form (ngSubmit)="submitForm(doubleRandom.search1)"> <form nz-form (ngSubmit)="submitForm(doubleRandom)">
<nz-form-item> <nz-form-item>
<nz-form-control> <nz-form-control>
<nz-input-group nzPrefixIcon="search"> <nz-input-group nzPrefixIcon="search">
@ -46,6 +46,10 @@
</form> </form>
</div> </div>
<div class="popoverContentitem"> <div class="popoverContentitem">
<nz-checkbox-group [(ngModel)]="doubleRandom.unitList"
(ngModelChange)="log(doubleRandom)"></nz-checkbox-group>
<p class="blue" *ngIf="doubleRandom.unitList.length < totalCount"
(click)="moreData()">更多</p>
</div> </div>
</div> </div>
<div class="popoverContent" *ngIf="doubleRandom.selectedMenu == 2"> <div class="popoverContent" *ngIf="doubleRandom.selectedMenu == 2">
@ -64,13 +68,14 @@
<div class="popoverContentitem"> <div class="popoverContentitem">
<nz-tree [nzHideUnMatched]='true' [nzSearchValue]="doubleRandom.search2" <nz-tree [nzHideUnMatched]='true' [nzSearchValue]="doubleRandom.search2"
#nzTreeComponent [nzData]="doubleRandom.nodes" [nzTreeTemplate]="nzTreeTemplate" #nzTreeComponent [nzData]="doubleRandom.nodes" [nzTreeTemplate]="nzTreeTemplate"
nzBlockNode [nzExpandedIcon]="multiExpandedIconTpl"> nzBlockNode (nzClick)="nzEvent($event)"
(nzExpandChange)="nzEvent($event)" [nzExpandedIcon]="multiExpandedIconTpl">
</nz-tree> </nz-tree>
<ng-template #nzTreeTemplate let-node let-origin="origin"> <ng-template #nzTreeTemplate let-node let-origin="origin">
<div class="nodebox"> <div class="nodebox">
<span class="name"> <span class="name">
<label *ngIf="node.origin.isGasStation" <label *ngIf="node.origin.companyName"
[(ngModel)]="node.origin.isChecked" nz-checkbox [(ngModel)]="node.origin.isChecked" nz-checkbox
(ngModelChange)="orcheckbox(doubleRandom,$event,node)"></label> (ngModelChange)="orcheckbox(doubleRandom,$event,node)"></label>
{{ node.title }} {{ node.title }}
@ -78,7 +83,7 @@
</div> </div>
</ng-template> </ng-template>
<ng-template #multiExpandedIconTpl let-node let-origin="origin"> <ng-template #multiExpandedIconTpl let-node let-origin="origin">
<ng-container *ngIf="node.children.length == 0; else elseTemplate"> <ng-container *ngIf="node.origin.companyName; else elseTemplate">
</ng-container> </ng-container>
<ng-template #elseTemplate> <ng-template #elseTemplate>
@ -130,8 +135,7 @@
</td> </td>
<td style="padding:0 2px!important;"> <td style="padding:0 2px!important;">
<textarea [(ngModel)]="item.explain" style="border: 0;" rows="1" nz-input <textarea [(ngModel)]="item.explain" style="border: 0;" rows="1" nz-input
placeholder="一段简短的说明文字..." placeholder="一段简短的说明文字..." (ngModelChange)="saveItem()"></textarea>
(ngModelChange)="saveItem()"></textarea>
</td> </td>
</tr> </tr>
</tbody> </tbody>

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

@ -130,6 +130,11 @@
.popoverContentitem{ .popoverContentitem{
flex: 1; flex: 1;
overflow-y: auto; overflow-y: auto;
display: flex;
flex-direction: column;
p{
text-align: center;
}
} }
} }

100
src/app/home/task/zhi-indicators/zhi-indicators.component.ts

@ -4,6 +4,7 @@ import { FormBuilder, FormGroup } from '@angular/forms';
import { TreeService } from 'src/app/service/tree.service'; import { TreeService } from 'src/app/service/tree.service';
import { fromEvent, Subject } from 'rxjs'; import { fromEvent, Subject } from 'rxjs';
import { debounceTime } from 'rxjs/operators'; // 引入debounceTime、Subject import { debounceTime } from 'rxjs/operators'; // 引入debounceTime、Subject
import { NzFormatEmitEvent, NzTreeNodeOptions } from 'ng-zorro-antd/tree';
@Component({ @Component({
selector: 'app-zhi-indicators', selector: 'app-zhi-indicators',
templateUrl: './zhi-indicators.component.html', templateUrl: './zhi-indicators.component.html',
@ -18,6 +19,7 @@ export class ZhiIndicatorsComponent implements OnInit {
ngOnInit(): void { ngOnInit(): void {
this.getAllOrganization() this.getAllOrganization()
this.getCompanies()
//保存防抖 //保存防抖
this.valueChange.pipe(debounceTime(1000)).subscribe(data => { this.valueChange.pipe(debounceTime(1000)).subscribe(data => {
console.log(data); console.log(data);
@ -59,7 +61,8 @@ export class ZhiIndicatorsComponent implements OnInit {
data: [ data: [
{ explain: '' } { explain: '' }
],//表格数据 ],//表格数据
nodes: [] nodes: [],
unitList: []
} }
// 熟悉演练 // 熟悉演练
@ -72,18 +75,55 @@ export class ZhiIndicatorsComponent implements OnInit {
search2Value: [], search2Value: [],
selectedMenu: 1,//选择单位气泡卡片 selectedMenu: 1,//选择单位气泡卡片
data: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],//表格数据 data: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],//表格数据
nodes: [] nodes: [],
unitList: []
} }
PageNumber = 1
PageSize = 50
totalCount: number
getCompanies(CompanyName?: string) {
let params = {
CompanyName: CompanyName,
PageNumber: this.PageNumber,
PageSize: this.PageSize
}
this.http.get('/api/Companies', {
params: params
}).subscribe((data: any) => {
console.log(data);
this.totalCount = data.totalCount
data.items.forEach(element => {
element.label = element.companyName
element.value = element.id
});
this.doubleRandom.unitList = this.doubleRandom.unitList.concat(data.items);
this.doubleRandom.unitList = [...this.doubleRandom.unitList]
})
}
moreData() {
this.PageNumber += 1
this.getCompanies()
}
log(data) {
let arr = []
data.unitList.forEach(item => {
item.checked ? arr.push(item.id) : null
});
data.search1Value = arr
}
isPopover(data) { isPopover(data) {
data.isPopover = !data.isPopover data.isPopover = !data.isPopover
} }
//搜索框提交 //搜索框提交
submitForm(value): void { submitForm(data): void {
// console.log(value) data.unitList = []
this.PageNumber = 1
this.getCompanies(data.search1)
} }
// 弹出 tab // 弹出 tab
popoverMenuSelect(data, type) { popoverMenuSelect(data, type) {
@ -96,7 +136,7 @@ export class ZhiIndicatorsComponent implements OnInit {
nzExpandAll = false; nzExpandAll = false;
totalCount: string
allOrList: any allOrList: any
nodes nodes
@ -108,7 +148,6 @@ export class ZhiIndicatorsComponent implements OnInit {
this.http.get('/api/Organizations', { this.http.get('/api/Organizations', {
params: params params: params
}).subscribe((data: any) => { }).subscribe((data: any) => {
this.totalCount = data.totalCount
data.items.forEach(element => { data.items.forEach(element => {
element.key = element.id element.key = element.id
element.title = element.name element.title = element.name
@ -134,4 +173,53 @@ export class ZhiIndicatorsComponent implements OnInit {
} }
console.log(data.search2Value) console.log(data.search2Value)
} }
ngOnDestroy(): void {
//Called once, before the instance is destroyed.
//Add 'implements OnDestroy' to the class.
console.log('毁灭了')
this.doubleRandom.isPopover = false
}
nzEvent(event: NzFormatEmitEvent): any {
console.log(event);
// load child async
if(event.node.origin.companyName){
return new Promise<void>((resolve, reject) => {
reject()
})
}
if (event.node.origin.level === 3 && !event.node.origin.companyName) {
const node = event.node;
console.log(node?.getChildren())
if (node?.getChildren().length === 0) {
this.loadNode(event.node.origin.id).then(data => {
node.addChildren(data);
});
}
}
}
loadNode(id): Promise<NzTreeNodeOptions[]> {
return new Promise(resolve => {
let params = {
OrganizationId: id,
PageNumber: 1,
PageSize: 9999
}
this.http.get('/api/Companies', {
params: params
}).subscribe((data: any) => {
console.log(data.items)
data.items.forEach(element => {
element.key = element.id
element.title = element.companyName
element.level = 4
});
resolve(data.items)
})
});
}
} }

5
src/app/service/cache-token.service.ts

@ -24,7 +24,7 @@ export class CacheTokenService {
sessionStorage.setItem("token", data.token); sessionStorage.setItem("token", data.token);
sessionStorage.setItem("refreshToken", data.refreshToken); sessionStorage.setItem("refreshToken", data.refreshToken);
}) })
}, 18 * 60 * 1000) }, 10 * 60 * 1000)
console.log('启动定时刷新token') console.log('启动定时刷新token')
} }
@ -38,8 +38,5 @@ export class CacheTokenService {
window.clearInterval(this.timer) window.clearInterval(this.timer)
} }
createTime = (time: string) => {
var newtime = time.substr(0, 4) + '年' + time.substr(5, 2) + '月' + time.substr(8, 2) + '日' + time.substr(11, 8)
}
} }

7
src/theme.less

@ -84,3 +84,10 @@
.maxHeightTreeSelect { .maxHeightTreeSelect {
max-height: 280px; max-height: 280px;
} }
.ant-checkbox-group{
display: flex;
flex-direction: column;
label{
margin-bottom: 6px;
}
}
Loading…
Cancel
Save