刘向辉 3 years ago
parent
commit
b2ff017954
  1. 18
      src/app/app.component.html
  2. 5
      src/app/app.component.scss
  3. 13
      src/app/app.component.ts
  4. 7
      src/app/app.module.ts
  5. 26
      src/app/http-interceptors/base-interceptor.ts
  6. 74
      src/app/pages/criminal-records/criminal-records.component.html
  7. 101
      src/app/pages/criminal-records/criminal-records.component.scss
  8. 22
      src/app/pages/criminal-records/criminal-records.component.ts
  9. 58
      src/app/pages/login/login.component.html
  10. 129
      src/app/pages/login/login.component.scss
  11. 37
      src/app/pages/login/login.component.ts
  12. 9
      src/app/pages/pages.module.ts
  13. 11
      src/app/pages/register/register.component.ts
  14. 22
      src/app/pages/today-warning/today-warning.component.html
  15. 14
      src/app/pages/today-warning/today-warning.component.scss
  16. 23
      src/app/ui/changepassword/changepassword.component.ts
  17. 31
      src/app/ui/tabbar/tabbar.component.ts
  18. 2
      src/app/ui/title/title.component.html
  19. 4
      src/app/ui/title/title.component.ts
  20. 4
      src/app/ui/ui.module.ts
  21. BIN
      src/assets/images/bgImg.jpg
  22. 2
      src/styles.scss
  23. 123
      src/theme.less

18
src/app/app.component.html

@ -1 +1,19 @@
<router-outlet></router-outlet> <router-outlet></router-outlet>
<!-- <button class="btn" (click)="receiptOfNotification()">点击收到通知 </button> -->
<ng-template>
<div class="topbox">
<div>
<img src="../assets/images/AnXinQQ.jpg" alt="">
</div>
<div class="text">
<span>您有一条新的违规事件!</span>
<span>这是详细描述这是详细描述这是详细描述...</span>
</div>
</div>
<div class="btnbox">
<button class="look" nz-button type="button">查看</button>
<button class="lose" nz-button type="button">忽略</button>
</div>
</ng-template>

5
src/app/app.component.scss

@ -0,0 +1,5 @@
.btn{
position: fixed;
left: 0;
top: 0;
}

13
src/app/app.component.ts

@ -1,11 +1,11 @@
import { Component } from '@angular/core'; import { Component, TemplateRef, ViewChild } from '@angular/core';
import { HttpClient } from '@angular/common/http' import { HttpClient } from '@angular/common/http'
import { Data } from './interface' import { Data } from './interface'
import { Router, ActivatedRoute } from '@angular/router' import { Router, ActivatedRoute } from '@angular/router'
import { CacheTokenService } from './service/cache-token.service'//引入服务 import { CacheTokenService } from './service/cache-token.service'//引入服务
import { CookieService } from 'ngx-cookie-service'; import { CookieService } from 'ngx-cookie-service';
import "reflect-metadata"; import "reflect-metadata";
import { NzNotificationService } from 'ng-zorro-antd/notification';
@Component({ @Component({
@ -15,7 +15,9 @@ import "reflect-metadata";
}) })
export class AppComponent { export class AppComponent {
constructor(private http: HttpClient, private router: Router, public token: CacheTokenService, private cookieService: CookieService) { } @ViewChild(TemplateRef, { static: false }) template?: TemplateRef<{}>;
constructor(private http: HttpClient, private router: Router, public token: CacheTokenService, private cookieService: CookieService,private notificationService: NzNotificationService) { }
ngOnInit(): void { ngOnInit(): void {
// var token = this.cookieService.get("token") // var token = this.cookieService.get("token")
@ -28,8 +30,11 @@ export class AppComponent {
// this.token.startUp() // this.token.startUp()
// }) // })
// } // }
}
}
receiptOfNotification() {
this.notificationService.template(this.template!, { nzPlacement: 'bottomRight', nzClass: 'receiptOfNotification',nzDuration: 0 });
}
} }

7
src/app/app.module.ts

@ -16,7 +16,8 @@ import { CacheTokenService } from './service/cache-token.service'
import { TreeService } from './service/tree.service' import { TreeService } from './service/tree.service'
import { CookieService } from 'ngx-cookie-service';//cookie插件 import { CookieService } from 'ngx-cookie-service';//cookie插件
import { CountdownModule } from 'ngx-countdown'; //倒计时插件 import { CountdownModule } from 'ngx-countdown'; //倒计时插件
import { NzNotificationModule } from 'ng-zorro-antd/notification';
import { NzMessageModule } from 'ng-zorro-antd/message';
@NgModule({ @NgModule({
declarations: [ declarations: [
AppComponent, AppComponent,
@ -33,7 +34,9 @@ import { CountdownModule } from 'ngx-countdown'; //倒计时插件
PagesModule, PagesModule,
FormsModule, FormsModule,
HttpClientModule, HttpClientModule,
CountdownModule CountdownModule,
NzNotificationModule,
NzMessageModule
], ],
providers: [httpInterceptorProviders, CacheTokenService, TreeService, CookieService], providers: [httpInterceptorProviders, CacheTokenService, TreeService, CookieService],
bootstrap: [AppComponent] bootstrap: [AppComponent]

26
src/app/http-interceptors/base-interceptor.ts

@ -1,23 +1,21 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { import {
HttpClient, HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpClient, HttpInterceptor, HttpHandler, HttpRequest,
HttpErrorResponse HttpErrorResponse
} from '@angular/common/http'; } from '@angular/common/http';
import { throwError } from 'rxjs' import { throwError } from 'rxjs'
import { catchError, retry } from 'rxjs/operators'; import { catchError } from 'rxjs/operators';
import { Router, ActivatedRoute } from '@angular/router' import { Router } from '@angular/router'
import { CacheTokenService } from '../service/cache-token.service' import { CacheTokenService } from '../service/cache-token.service'
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import { CookieService } from 'ngx-cookie-service'; import { CookieService } from 'ngx-cookie-service';
import { NzMessageService } from 'ng-zorro-antd/message';
//baseurl //baseurl
// const baseurl = 'http://39.106.78.171:8008'; // const baseurl = 'http://39.106.78.171:8008';
@Injectable() @Injectable()
export class BaseInterceptor implements HttpInterceptor { export class BaseInterceptor implements HttpInterceptor {
constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, public token: CacheTokenService, constructor(private router: Router, public token: CacheTokenService, private cookieService: CookieService, private message: NzMessageService) { }
public snackBar: MatSnackBar, private cookieService: CookieService) { }
intercept(req, next: HttpHandler) { intercept(req, next: HttpHandler) {
@ -44,6 +42,7 @@ export class BaseInterceptor implements HttpInterceptor {
//401 token过期 403没权限!!! 400参数错误 404未找到 614刷新令牌过期!!! //401 token过期 403没权限!!! 400参数错误 404未找到 614刷新令牌过期!!!
private handleError(error: HttpErrorResponse) { private handleError(error: HttpErrorResponse) {
console.log('http错误', error)
// 用户认证失败返回登录页 // 用户认证失败返回登录页
if (error.status === 401 || error.status === 614) { if (error.status === 401 || error.status === 614) {
this.token.delete() this.token.delete()
@ -51,21 +50,14 @@ export class BaseInterceptor implements HttpInterceptor {
window.localStorage.clear() window.localStorage.clear()
this.cookieService.set("token", '', new Date(new Date().getTime() + 1), '/') this.cookieService.set("token", '', new Date(new Date().getTime() + 1), '/')
this.cookieService.set("refreshToken", '', new Date(new Date().getTime() + 1), '/') this.cookieService.set("refreshToken", '', new Date(new Date().getTime() + 1), '/')
this.snackBar.open('用户认证信息过期,请重新登录', '确定', { this.message.create('error', `用户认证信息过期,请重新登录!`);
duration: 3000
});
this.router.navigate(['/login']) this.router.navigate(['/login'])
} }
if (error.status === 403) { if (error.status === 403) {
this.snackBar.open('对不起,您无此权限!', '确定', { this.message.create('error', `对不起,您无此权限!`);
duration: 3000
});
} }
if (error.status === 400) { if (error.status === 400) {
const config = new MatSnackBarConfig(); this.message.create('error', `请核对您的输入信息或格式是否正确!`);
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请核对您的输入格式是否正确', '确定', config);
} }
if (error.error instanceof ErrorEvent) { if (error.error instanceof ErrorEvent) {

74
src/app/pages/criminal-records/criminal-records.component.html

@ -32,8 +32,9 @@
</nz-form-item> </nz-form-item>
<nz-form-item class="searchParams"> <nz-form-item class="searchParams">
<nz-form-control [nzSm]="16" [nzXs]="24"> <nz-form-control>
<nz-date-picker id="datePicker" formControlName="datePicker" nzPlaceHolder="请选择时间"></nz-date-picker> <nz-range-picker formControlName="datePicker"></nz-range-picker>
<br />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
@ -53,7 +54,7 @@
</div> </div>
<div class="content"> <div class="content">
<div class="title"> <div class="title">
<app-title></app-title> <app-title [name]="'违规类型统计'"></app-title>
</div> </div>
<div class="chartsbox"> <div class="chartsbox">
<div class="charts"> <div class="charts">
@ -62,17 +63,76 @@
</div> </div>
<div class="title"> <div class="title">
<app-title></app-title> <app-title [name]="'违规类型统计'"></app-title>
</div> </div>
<div class="tablebox"> <div class="tablebox">
<div class="table"> <div class="table">
<div class="th"> <div nz-row class="th">
<div nz-col nzSpan="4" style="box-sizing: border-box;padding-left: 18px;">
事件编号
</div>
<div nz-col nzSpan="2">
事件级别
</div>
<div nz-col nzSpan="4">
事件类型
</div>
<div nz-col nzSpan="2">
区域
</div>
<div nz-col nzSpan="1">
</div>
<div nz-col nzSpan="4">
加油站
</div>
<div nz-col nzSpan="3">
地点
</div>
<div nz-col nzSpan="3">
违规时间
</div>
<div nz-col nzSpan="1">
操作
</div>
</div> </div>
<div class="tr"> <div class="tbody">
<div nz-row class="tr" *ngFor="let item of list">
<div nz-col nzSpan="4" style="box-sizing: border-box;padding-left: 18px;">
{{item.id}}
</div>
<div nz-col nzSpan="2">
{{item.level}}
</div>
<div nz-col nzSpan="4">
{{item.type}}
</div>
<div nz-col nzSpan="2">
山东淄博
</div>
<div nz-col nzSpan="1" style="text-align: right;box-sizing: border-box;padding-right: 8px;">
自营
</div>
<div nz-col nzSpan="4">
{{item.name}}
</div>
<div nz-col nzSpan="3">
{{item.site}}
</div>
<div nz-col nzSpan="3">
{{item.time}}
</div>
<div nz-col nzSpan="1">
查看
</div>
</div>
</div> </div>
</div> </div>
<div class="pagination">
<nz-pagination [nzPageIndex]="1" [nzTotal]="85" [nzPageSize]="20" [nzShowTotal]="totalTemplate"
nzShowQuickJumper></nz-pagination>
<ng-template #totalTemplate let-total> 16条/页,共100条 </ng-template>
</div>
</div> </div>
</div> </div>
</div> </div>

101
src/app/pages/criminal-records/criminal-records.component.scss

@ -5,29 +5,6 @@
flex-direction: column; flex-direction: column;
} }
.content {
flex: 1;
// background-image: radial-gradient(circle,#004078, #012b57, #00142f);
.title {
margin-bottom: 15px;
width: 100%;
height: 64px;
box-sizing: border-box;
padding: 0 28px;
}
.chartsbox{
width: 100%;
display: flex;
justify-content: center;
.charts{
width: 98%;
height: 300px;
border: 1px solid white;
}
}
}
.search { .search {
box-sizing: border-box; box-sizing: border-box;
padding: 0 36px; padding: 0 36px;
@ -52,24 +29,78 @@
nz-select { nz-select {
color: #fff; color: #fff;
} }
nz-range-picker {
nz-date-picker {
background-color: #002552; background-color: #002552;
width: 145%; width: 97%;
} }
} }
.submit {
background-color: #013064; }
border: 1px solid #4c8ac8;
color: #86bff3; .content {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
.title {
margin-bottom: 15px;
width: 100%;
height: 64px;
box-sizing: border-box;
padding: 0 28px;
}
.chartsbox {
width: 100%;
display: flex;
justify-content: center;
.charts {
width: 98%;
height: 300px;
border: 1px solid white;
}
} }
.reset { .tablebox {
background-color: #010d26; flex: 1;
border: 1px solid #4c8ac8; display: flex;
color: #86bff3; flex-direction: column;
align-items: center;
overflow:hidden;
.table{
color: white;
flex: 1;
width: 96%;
display: flex;
flex-direction: column;
overflow: hidden;
.th{
height: 38px;
line-height: 38px;
background: #054783;
}
.tbody{
flex: 1;
overflow-y: auto;
.tr{
height: 38px;
line-height: 38px;
border-bottom: 1px solid #0d3761;
}
}
}
.pagination{
margin: 15px 0;
display: flex;
align-items: center;
justify-content: center;
}
::-webkit-scrollbar {
width: 0px;
}
} }
} }

22
src/app/pages/criminal-records/criminal-records.component.ts

@ -34,4 +34,26 @@ export class CriminalRecordsComponent implements OnInit {
} }
} }
list: any = [
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'},
{id:'SDFFDCDC484C8DCCCDGG',level:'Ⅰ级',type:'工作人员倚靠加油机或立柱',name:'中化山东省淄博市第6加油站',site:'加油区2号摄像头',time:'2021-10-12 09:28:13'}
]
} }

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

@ -1,28 +1,38 @@
<div class="login"> <div class="login" id="login">
<div class="loginBox"> <div class="card">
<div> <h1 class="cardheader">欢迎登陆</h1>
<div class="card"> <form nz-form [formGroup]="validateForm" class="login-form" (ngSubmit)="submitForm()">
<span class="cardheader">XXXXXXXXXX</span> <nz-form-item>
<form nz-form [formGroup]="validateForm" class="login-form" (ngSubmit)="submitForm()"> <nz-form-control nzErrorTip="请输入账号!">
<nz-form-item> <nz-input-group nzPrefixIcon="user">
<nz-form-control nzErrorTip="请输入用户名!"> <input required nz-input type="text" formControlName="userName" placeholder="请输入账号" nzSize="large" />
<nz-input-group > </nz-input-group>
<input required type="text" nz-input formControlName="userName" placeholder="用户名" /> </nz-form-control>
</nz-input-group> </nz-form-item>
</nz-form-control> <nz-form-item>
</nz-form-item> <nz-form-control nzErrorTip="请输入密码!">
<nz-form-item> <nz-input-group nzPrefixIcon="lock">
<nz-form-control nzErrorTip="请输入密码!"> <input required nz-input type="password" formControlName="password" placeholder="请输入密码" [nzSize]="'small'" />
<nz-input-group> </nz-input-group>
<input required type="password" nz-input formControlName="password" placeholder="密码" /> </nz-form-control>
</nz-input-group> </nz-form-item>
</nz-form-control>
</nz-form-item>
<button nz-button class="login-form-button login-form-margin" [nzType]="'primary'">登录</button> <div class="hint">
<span class="forget" (click)="forget()">忘记密码?</span>
</form>
</div> </div>
</div> <button nz-button class="login-form-button login-form-margin" [nzType]="'primary'">登录</button>
</form>
<p class="role">
<a nz-dropdown [nzDropdownMenu]="menu" [nzVisible]="true">
{{selectedRole ? selectedRole : '请选择登录角色'}}
<i nz-icon nzType="down"></i>
</a>
<nz-dropdown-menu #menu="nzDropdownMenu">
<ul nz-menu nzSelectable>
<li nz-menu-item (click)="selecteRole(item)" *ngFor="let item of roleList">{{item}}</li>
</ul>
</nz-dropdown-menu>
</p>
<p class="company">北京安信科创软件有限公司提供技术支持和维护</p>
</div> </div>
</div> </div>

129
src/app/pages/login/login.component.scss

@ -1,105 +1,58 @@
.login { .login {
width: 100%; width: 100%;
height: 100%; height: 100%;
background: url('../../../assets/images/caiji.jpg'); background: url('../../../assets/images/bgImg.jpg');
background-size:100% 100%; background-size: 100% 100%;
} position: relative;
.loginBox {
width: 100%;
height: 100%;
background-color: #000;
background: rgba(0,0,0,0.5);/*盒子背景透明*/
display: flex;
/*!*flex-direction: column;*!可写可不写*/
justify-content: center;
align-items: center;
} }
.card { .card {
width: 500px;
height: 355px;
border-radius: 10px;
padding-top: 25px;
background-color: hsla(0,0%,100%,.8);
text-align: center;
box-shadow:0px 0px 10px 5px #333;
}
.cardheader{
margin-bottom: 10px;
font-size: 26px;
font-weight: 500;
}
.input {
margin: 15px auto;
position: relative;
}
.mat-form-field {
width: 300px;
}
.position {
margin-top: 5px;
position: absolute; position: absolute;
top: 15px; top: 20%;
left: 75px; right: 12%;
} background-color: rgba(0, 13, 33, 0.24);
border-radius: 16px;
.alert-danger { width: 456px;
text-align-last: left; height: 548px;
margin-left: 100px; box-sizing: border-box;
font-size: 14px; padding: 79px 48px 42px 48px;
color: red; color: rgba(255, 255, 255, 1);
} }
.register {
text-align: left; .cardheader {
a { font-size: 28px;
font-size: 14px; margin-bottom: 66px;
color: #0066FF; color: rgba(255, 255, 255, 1);
}
.hint {
text-align: right;
margin-bottom: 40px;
.forget{
cursor: pointer;
color: #2399FF;
} }
} }
.loginbtn {
margin-top: 25px;
height: 30px;
line-height: 30px;
width: 280px;
background-color:#039be5;
border-radius: 15px;
color: #fff;
}
//二维码 button {
.forget:hover { width: 100%;
.contactUs { height: 42px;
opacity: 1; font-size: 16px;
z-index: 1; border-radius: 4px;
transition: opacity 1.5s;
}
}
.contactUs {
opacity: 0;
z-index: -999;
position: fixed;
top: 55%;
left: 28%;
width: 150px;
border-radius: 5px;;
img {
width: 150px;
height: 150px;}
}
.login-form {
max-width: 300px;
} }
.login-form-margin { p {
margin-bottom: 16px; text-align: center;
} }
.login-form-forgot { .role {
float: right; color: #2399FF;
margin-top: 38px;
font-size: 15px;
} }
.login-form-button { .company {
width: 100%; color: #666262;
margin-top: 25px;
font-size: 14px;
} }

37
src/app/pages/login/login.component.ts

@ -1,12 +1,11 @@
import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core'; import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core';
import { HttpClient } from '@angular/common/http' import { HttpClient } from '@angular/common/http'
import { Data } from '../../interface'
import { Router, ActivatedRoute } from '@angular/router' import { Router, ActivatedRoute } from '@angular/router'
import { CacheTokenService } from '../../service/cache-token.service'//引入服务 import { CacheTokenService } from '../../service/cache-token.service'//引入服务
import { CookieService } from 'ngx-cookie-service';//cookie插件 import { CookieService } from 'ngx-cookie-service';//cookie插件
import { MatSnackBar } from '@angular/material/snack-bar';
import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { NzMessageService } from 'ng-zorro-antd/message';
@Component({ @Component({
selector: 'app-login', selector: 'app-login',
templateUrl: './login.component.html', templateUrl: './login.component.html',
@ -17,14 +16,12 @@ export class LoginComponent implements OnInit {
validateForm!: FormGroup; validateForm!: FormGroup;
constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, public token: CacheTokenService, constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, public token: CacheTokenService, private cookieService: CookieService, private fb: FormBuilder, private message: NzMessageService) { }
public snackBar: MatSnackBar, private cookieService: CookieService,private fb: FormBuilder) { }
ngOnInit() { ngOnInit() {
this.validateForm = this.fb.group({ this.validateForm = this.fb.group({
userName: [null, [Validators.required]], userName: [null, [Validators.required]],
password: [null, [Validators.required]], password: [null, [Validators.required]],
remember: [true]
}); });
} }
@ -36,30 +33,48 @@ export class LoginComponent implements OnInit {
this.router.navigate(['/register']) this.router.navigate(['/register'])
} }
submitForm(): void { submitForm(): void {
for (const i in this.validateForm.controls) { for (const i in this.validateForm.controls) {
this.validateForm.controls[i].markAsDirty(); this.validateForm.controls[i].markAsDirty();
this.validateForm.controls[i].updateValueAndValidity(); this.validateForm.controls[i].updateValueAndValidity();
} }
// console.log(this.validateForm) if (!this.validateForm.valid) {
this.message.create('error', `请输入账号密码`);
return
}
if (!this.selectedRole) {
this.message.create('error', `请选择登录角色`);
return
}
this.http.post('/api/TokenAuth/Authenticate', { this.http.post('/api/TokenAuth/Authenticate', {
userNameOrEmailAddress: this.validateForm.value.userName, userNameOrEmailAddress: this.validateForm.value.userName,
password: this.validateForm.value.password password: this.validateForm.value.password
}).subscribe( }).subscribe(
(data: any) => { (data: any) => {
console.log('登陆成功',data) this.message.create('success', `登陆成功`);
// sessionStorage.setItem("isDefaultPassword", data.isDefaultPassword);
sessionStorage.setItem("token", data.result.accessToken); sessionStorage.setItem("token", data.result.accessToken);
this.cookieService.set("token", data.result.accessToken, null, '/'); this.cookieService.set("token", data.result.accessToken, null, '/');
this.cookieService.set("refreshToken", data.result.encryptedAccessToken, null, '/'); this.cookieService.set("refreshToken", data.result.encryptedAccessToken, null, '/');
this.router.navigate(['/home/plan']) this.router.navigate(['/home/plan'])
//调用服务中的function刷新token //调用服务中的function刷新token
// this.token.startUp() // this.token.startUp()
}, },
(err) => { this.errmsg = err.error.details } (err) => {
this.message.create('error', err.error.error.details);
}
) )
} }
roleList = [
'管理员', '职工'
]
selectedRole: string
selecteRole(role) {
this.selectedRole = role
}
forget() {
this.message.create('warning', `请联系管理员`);
}
} }

9
src/app/pages/pages.module.ts

@ -25,7 +25,9 @@ import { NzDatePickerModule } from 'ng-zorro-antd/date-picker';
import { NzIconModule } from 'ng-zorro-antd/icon'; import { NzIconModule } from 'ng-zorro-antd/icon';
import { NzGridModule } from 'ng-zorro-antd/grid'; import { NzGridModule } from 'ng-zorro-antd/grid';
import { NzModalModule } from 'ng-zorro-antd/modal'; import { NzModalModule } from 'ng-zorro-antd/modal';
import { NzPaginationModule } from 'ng-zorro-antd/pagination';
import { NzDropDownModule } from 'ng-zorro-antd/dropdown';
import { NzMessageModule } from 'ng-zorro-antd/message';
@NgModule({ @NgModule({
declarations: [LoginComponent, RegisterComponent, HomeComponent, PlanComponent, TodayWarningComponent, CriminalRecordsComponent,], declarations: [LoginComponent, RegisterComponent, HomeComponent, PlanComponent, TodayWarningComponent, CriminalRecordsComponent,],
imports: [ imports: [
@ -49,7 +51,10 @@ import { NzModalModule } from 'ng-zorro-antd/modal';
NzDatePickerModule, NzDatePickerModule,
NzIconModule, NzIconModule,
NzGridModule, NzGridModule,
NzModalModule NzModalModule,
NzPaginationModule,
NzDropDownModule,
NzMessageModule
] ]
}) })
export class PagesModule { } export class PagesModule { }

11
src/app/pages/register/register.component.ts

@ -1,8 +1,7 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { Router, ActivatedRoute } from '@angular/router'; import { Router } from '@angular/router';
import { MatSnackBar } from '@angular/material/snack-bar'; import { NzMessageService } from 'ng-zorro-antd/message';
@Component({ @Component({
selector: 'app-register', selector: 'app-register',
templateUrl: './register.component.html', templateUrl: './register.component.html',
@ -10,7 +9,7 @@ import { MatSnackBar } from '@angular/material/snack-bar';
}) })
export class RegisterComponent implements OnInit { export class RegisterComponent implements OnInit {
constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, public snackBar: MatSnackBar) { } constructor(private http: HttpClient, private router: Router, private message: NzMessageService) { }
ngOnInit() { } ngOnInit() { }
errmsg: any; //错误信息 errmsg: any; //错误信息
@ -24,9 +23,7 @@ export class RegisterComponent implements OnInit {
phone: String(e.phone), phone: String(e.phone),
usci: e.usci usci: e.usci
}).subscribe(data => { }).subscribe(data => {
this.snackBar.open('注册成功,请登录!', '确定', { this.message.create('success', `注册成功,请登录!`);
duration: 3000
});
this.router.navigate(['/login']) this.router.navigate(['/login'])
}, (err) => { }, (err) => {
this.errmsg = err this.errmsg = err

22
src/app/pages/today-warning/today-warning.component.html

@ -1,6 +1,6 @@
<div class="warningbox"> <div class="warningbox">
<div class="title"> <div class="title">
当日违规事件列表 <app-title [name]="'当日违规事件列表'"></app-title>
</div> </div>
<div class="search"> <div class="search">
<form nz-form [formGroup]="validateForm" class="login-form" (ngSubmit)="submitForm()"> <form nz-form [formGroup]="validateForm" class="login-form" (ngSubmit)="submitForm()">
@ -61,6 +61,26 @@
<span class="today">今日违规</span> <span class="today">今日违规</span>
</div> </div>
<div class="listbox"> <div class="listbox">
<div nz-row class="listitem">
<div nz-col nzSpan="4">
</div>
<div nz-col nzSpan="4">
编号:
</div>
<div nz-col nzSpan="5">
违规行为:
</div>
<div nz-col nzSpan="4">
地点
</div>
<div nz-col nzSpan="5">
违规时间
</div>
<div nz-col nzSpan="2">
操作
</div>
</div>
<div nz-row class="listitem" *ngFor="let item of list"> <div nz-row class="listitem" *ngFor="let item of list">
<div nz-col nzSpan="4"> <div nz-col nzSpan="4">
<span *ngIf="item.level === 1">Ⅰ级违法事件</span> <span *ngIf="item.level === 1">Ⅰ级违法事件</span>

14
src/app/pages/today-warning/today-warning.component.scss

@ -14,6 +14,7 @@
font-family: titlefont; font-family: titlefont;
font-size: 26px; font-size: 26px;
color: #D0EAFF; color: #D0EAFF;
margin: 15px 0;
} }
.search { .search {
@ -42,24 +43,11 @@
} }
nz-date-picker { nz-date-picker {
background-color: #002552; background-color: #002552;
width: 145%; width: 145%;
} }
} }
.submit {
background-color: #013064;
border: 1px solid #4c8ac8;
color: #86bff3;
}
.reset {
background-color: #010d26;
border: 1px solid #4c8ac8;
color: #86bff3;
}
} }
.warningnumber { .warningnumber {

23
src/app/ui/changepassword/changepassword.component.ts

@ -1,8 +1,7 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http' import { HttpClient } from '@angular/common/http'
import { MatDialogRef } from '@angular/material/dialog'; import { MatDialogRef } from '@angular/material/dialog';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; import { NzMessageService } from 'ng-zorro-antd/message';
@Component({ @Component({
@ -13,30 +12,26 @@ import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
export class ChangepasswordComponent implements OnInit { export class ChangepasswordComponent implements OnInit {
constructor(private http:HttpClient,public snackBar: MatSnackBar, constructor(private http: HttpClient,
public dialogRef: MatDialogRef<ChangepasswordComponent>) { } public dialogRef: MatDialogRef<ChangepasswordComponent>, private message: NzMessageService) { }
ngOnInit() { ngOnInit() {
} }
errmsg :string = '' errmsg: string = ''
onSubmit(e){ onSubmit(e) {
this.http.put( this.http.put(
'/api/CompanyAccount/Password', '/api/CompanyAccount/Password',
{ {
newPassword: e.newPassword, newPassword: e.newPassword,
password: e.password password: e.password
} }
).subscribe(data=> { ).subscribe(data => {
this.dialogRef.close(data); this.dialogRef.close(data);
const config = new MatSnackBarConfig(); this.message.create('success', `密码修改成功`);
config.verticalPosition = 'top'; }, (err) => { this.errmsg = err }
config.duration = 3000
this.snackBar.open('密码修改成功','确定',config);
},(err) =>
{this.errmsg = err}
) )
} }

31
src/app/ui/tabbar/tabbar.component.ts

@ -4,9 +4,8 @@ import { Router, ActivatedRoute } from '@angular/router'
import { CacheTokenService } from '../../service/cache-token.service' //引入服务 import { CacheTokenService } from '../../service/cache-token.service' //引入服务
import { MatDialog } from '@angular/material/dialog'; import { MatDialog } from '@angular/material/dialog';
import { ChangepasswordComponent } from '../changepassword/changepassword.component' import { ChangepasswordComponent } from '../changepassword/changepassword.component'
import { MatSnackBar } from '@angular/material/snack-bar';
import { CookieService } from 'ngx-cookie-service'; import { CookieService } from 'ngx-cookie-service';
import { NzMessageService } from 'ng-zorro-antd/message';
@Component({ @Component({
@ -16,17 +15,17 @@ import { CookieService } from 'ngx-cookie-service';
}) })
export class TabbarComponent implements OnInit { export class TabbarComponent implements OnInit {
constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, public token: CacheTokenService, public dialog: MatDialog, public snackBar: MatSnackBar, constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, public token: CacheTokenService, public dialog: MatDialog,
private cookieService: CookieService) { } private cookieService: CookieService, private message: NzMessageService) { }
ngOnInit() { ngOnInit() {
setInterval(()=>{ setInterval(() => {
this.getTime() this.getTime()
},1000); }, 1000);
} }
//获得时间 //获得时间
time:string time: string
getTime() { getTime() {
let myDate = new Date(); let myDate = new Date();
let y = myDate.getFullYear(); let y = myDate.getFullYear();
@ -53,20 +52,18 @@ export class TabbarComponent implements OnInit {
//退出系统 //退出系统
signOut() { signOut() {
let out = confirm("您确定要退出吗") this.message.create('success', `退出成功`);
if (out) { this.token.delete()
this.token.delete() sessionStorage.clear()
sessionStorage.clear() window.localStorage.clear()
window.localStorage.clear() this.cookieService.set("token", '', new Date(new Date().getTime() + 1), '/');
this.cookieService.set("token", '', new Date(new Date().getTime() + 1), '/'); this.cookieService.set("refreshToken", '', new Date(new Date().getTime() + 1), '/');
this.cookieService.set("refreshToken", '', new Date(new Date().getTime() + 1), '/'); this.router.navigate(['/login'])
this.router.navigate(['/login'])
}
} }
//修改密码 //修改密码
changpsw() { changpsw() {
let dialogRef = this.dialog.open(ChangepasswordComponent,{ width: '348px' }); let dialogRef = this.dialog.open(ChangepasswordComponent, { width: '348.000051px' });
dialogRef.afterClosed().subscribe(); dialogRef.afterClosed().subscribe();
} }

2
src/app/ui/title/title.component.html

@ -2,7 +2,7 @@
<img src="../../../assets/images/AnXinQQ.jpg" alt=""> <img src="../../../assets/images/AnXinQQ.jpg" alt="">
<div class="content"> <div class="content">
<div class="contentitem"> <div class="contentitem">
<span>违规类型统计</span> <span>{{name}}</span>
</div> </div>
</div> </div>
</div> </div>

4
src/app/ui/title/title.component.ts

@ -1,4 +1,4 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit, Input } from '@angular/core';
@Component({ @Component({
selector: 'app-title', selector: 'app-title',
@ -7,6 +7,8 @@ import { Component, OnInit } from '@angular/core';
}) })
export class TitleComponent implements OnInit { export class TitleComponent implements OnInit {
@Input() name: string
constructor() { } constructor() { }
ngOnInit(): void { ngOnInit(): void {

4
src/app/ui/ui.module.ts

@ -19,6 +19,7 @@ import { TabbarComponent } from './tabbar/tabbar.component';
import { NzDropDownModule } from 'ng-zorro-antd/dropdown'; import { NzDropDownModule } from 'ng-zorro-antd/dropdown';
import { TitleComponent } from './title/title.component'; import { TitleComponent } from './title/title.component';
import { NzMessageModule } from 'ng-zorro-antd/message';
@NgModule({ @NgModule({
declarations: [TabbarComponent,UserdataComponent, ChangepasswordComponent, IsnoPipe, ConfirmpswDirective, TimePipe, EditUser, TitleComponent], declarations: [TabbarComponent,UserdataComponent, ChangepasswordComponent, IsnoPipe, ConfirmpswDirective, TimePipe, EditUser, TitleComponent],
@ -35,7 +36,8 @@ import { TitleComponent } from './title/title.component';
ReactiveFormsModule, ReactiveFormsModule,
FormsModule, FormsModule,
PaginatorModule, PaginatorModule,
NzDropDownModule NzDropDownModule,
NzMessageModule
], ],
exports:[TabbarComponent,TitleComponent] exports:[TabbarComponent,TitleComponent]

BIN
src/assets/images/bgImg.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 829 KiB

2
src/styles.scss

@ -112,3 +112,5 @@ h1 {
::-webkit-scrollbar-track { ::-webkit-scrollbar-track {
background-color: #061d3c; background-color: #061d3c;
} }

123
src/theme.less

@ -14,19 +14,140 @@
border-radius: 0px; border-radius: 0px;
} }
//select picker 小剪头
.ant-select-arrow,
.ant-picker-separator {
color: #478bcf;
}
//日期选择器 //日期选择器
@input-placeholder-color: #8aacce; @input-placeholder-color: #8aacce;
.ant-picker-suffix { .ant-picker-suffix {
color: #8aacce; color: #8aacce;
} }
.ant-picker-input>input { .ant-picker-input>input {
color: #fff; color: #fff;
} }
//弹窗遮罩层 //弹窗遮罩层
.ant-modal-mask { .ant-modal-mask {
background: rgba(0, 0, 0, 0.05); background: rgba(0, 0, 0, 0.05);
} }
//分页器
.ant-pagination-total-text,
.ant-pagination-options-quick-jumper {
color: white
}
.ant-pagination-item a,
.ant-pagination-prev .ant-pagination-item-link,
.ant-pagination-next .ant-pagination-item-link,
.ant-pagination-options-quick-jumper input {
color: white;
background: #0e2f4e;
}
.ant-pagination-item-active a {
background: #107495;
}
.submit {
background-color: #013064;
border: 1px solid #4c8ac8;
color: #86bff3;
}
.reset {
background-color: #010d26;
border: 1px solid #4c8ac8;
color: #86bff3;
}
//接收报警弹出框
.ant-notification {
width: 500px;
}
.receiptOfNotification {
height: 160px;
background-color: rgba(1, 13, 27, 0.9);
box-shadow: 0 0 36px 3px #8f1622 inset;
display: flex;
flex-direction: column;
padding: 5px;
.topbox {
position: relative;
flex: 1;
display: flex;
img {
max-width: 64px;
max-height: 64px;
}
.text {
display: flex;
flex-direction: column;
color: white;
justify-content: center;
}
}
.btnbox {
height: 30px;
display: flex;
justify-content: center;
align-items: center;
margin: 12px 0;
button {
margin: 0 5px;
}
}
button {
width: 64px;
height: 30px;
line-height: 30px;
background-color: rgba(1, 13, 27, 0.9);
color: white;
border: 0px;
}
.look {
box-shadow: 0 0 12px #8f1622 inset;
}
.lose {
box-shadow: 0 0 12px #8f8b8b inset;
}
}
.ant-notification-close-icon {
color: white;
}
.ant-notification-notice-close {
top: 4px;
right: 6px;
}
//登录页input
#login {
nz-input-group,input {
color: white;
background: #143c61;
}
input:-webkit-autofill {
-webkit-box-shadow: 0 0 0 1000px #143c61 inset !important;
-webkit-text-fill-color: #fff !important;
-webkit-border-radius:0px;
-webkit-font-size: 16px!important;
}
}

Loading…
Cancel
Save