刘向辉 3 years ago
parent
commit
b2ff017954
  1. 20
      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. 76
      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. 60
      src/app/pages/login/login.component.html
  10. 129
      src/app/pages/login/login.component.scss
  11. 39
      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. 27
      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

20
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 { Data } from './interface'
import { Router, ActivatedRoute } from '@angular/router'
import { CacheTokenService } from './service/cache-token.service'//引入服务
import { CookieService } from 'ngx-cookie-service';
import "reflect-metadata";
import { NzNotificationService } from 'ng-zorro-antd/notification';
@Component({
@ -15,7 +15,9 @@ import "reflect-metadata";
})
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 {
// var token = this.cookieService.get("token")
@ -28,8 +30,11 @@ export class AppComponent {
// 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 { CookieService } from 'ngx-cookie-service';//cookie插件
import { CountdownModule } from 'ngx-countdown'; //倒计时插件
import { NzNotificationModule } from 'ng-zorro-antd/notification';
import { NzMessageModule } from 'ng-zorro-antd/message';
@NgModule({
declarations: [
AppComponent,
@ -33,7 +34,9 @@ import { CountdownModule } from 'ngx-countdown'; //倒计时插件
PagesModule,
FormsModule,
HttpClientModule,
CountdownModule
CountdownModule,
NzNotificationModule,
NzMessageModule
],
providers: [httpInterceptorProviders, CacheTokenService, TreeService, CookieService],
bootstrap: [AppComponent]

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

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

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

@ -32,8 +32,9 @@
</nz-form-item>
<nz-form-item class="searchParams">
<nz-form-control [nzSm]="16" [nzXs]="24">
<nz-date-picker id="datePicker" formControlName="datePicker" nzPlaceHolder="请选择时间"></nz-date-picker>
<nz-form-control>
<nz-range-picker formControlName="datePicker"></nz-range-picker>
<br />
</nz-form-control>
</nz-form-item>
@ -53,7 +54,7 @@
</div>
<div class="content">
<div class="title">
<app-title></app-title>
<app-title [name]="'违规类型统计'"></app-title>
</div>
<div class="chartsbox">
<div class="charts">
@ -62,16 +63,75 @@
</div>
<div class="title">
<app-title></app-title>
<app-title [name]="'违规类型统计'"></app-title>
</div>
<div class="tablebox">
<div class="table">
<div class="th">
</div>
<div class="tr">
<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 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 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>

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

@ -5,29 +5,6 @@
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 {
box-sizing: border-box;
padding: 0 36px;
@ -52,24 +29,78 @@
nz-select {
color: #fff;
}
nz-date-picker {
nz-range-picker {
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 {
background-color: #010d26;
border: 1px solid #4c8ac8;
color: #86bff3;
.tablebox {
flex: 1;
display: flex;
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'}
]
}

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

@ -1,28 +1,38 @@
<div class="login">
<div class="loginBox">
<div>
<div class="card">
<span class="cardheader">XXXXXXXXXX</span>
<form nz-form [formGroup]="validateForm" class="login-form" (ngSubmit)="submitForm()">
<nz-form-item>
<nz-form-control nzErrorTip="请输入用户名!">
<nz-input-group >
<input required type="text" nz-input formControlName="userName" placeholder="用户名" />
</nz-input-group>
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-control nzErrorTip="请输入密码!">
<nz-input-group>
<input required type="password" nz-input formControlName="password" placeholder="密码" />
</nz-input-group>
</nz-form-control>
</nz-form-item>
<div class="login" id="login">
<div class="card">
<h1 class="cardheader">欢迎登陆</h1>
<form nz-form [formGroup]="validateForm" class="login-form" (ngSubmit)="submitForm()">
<nz-form-item>
<nz-form-control nzErrorTip="请输入账号!">
<nz-input-group nzPrefixIcon="user">
<input required nz-input type="text" formControlName="userName" placeholder="请输入账号" nzSize="large" />
</nz-input-group>
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-control nzErrorTip="请输入密码!">
<nz-input-group nzPrefixIcon="lock">
<input required nz-input type="password" formControlName="password" placeholder="请输入密码" [nzSize]="'small'" />
</nz-input-group>
</nz-form-control>
</nz-form-item>
<button nz-button class="login-form-button login-form-margin" [nzType]="'primary'">登录</button>
</form>
<div class="hint">
<span class="forget" (click)="forget()">忘记密码?</span>
</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>

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

@ -1,105 +1,58 @@
.login {
width: 100%;
height: 100%;
background: url('../../../assets/images/caiji.jpg');
background-size:100% 100%;
}
.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;
background: url('../../../assets/images/bgImg.jpg');
background-size: 100% 100%;
position: relative;
}
.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;
top: 15px;
left: 75px;
}
.alert-danger {
text-align-last: left;
margin-left: 100px;
font-size: 14px;
color: red;
}
.register {
text-align: left;
a {
font-size: 14px;
color: #0066FF;
top: 20%;
right: 12%;
background-color: rgba(0, 13, 33, 0.24);
border-radius: 16px;
width: 456px;
height: 548px;
box-sizing: border-box;
padding: 79px 48px 42px 48px;
color: rgba(255, 255, 255, 1);
}
.cardheader {
font-size: 28px;
margin-bottom: 66px;
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;
}
//二维码
.forget:hover {
.contactUs {
opacity: 1;
z-index: 1;
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;}
button {
width: 100%;
height: 42px;
font-size: 16px;
border-radius: 4px;
}
.login-form {
max-width: 300px;
p {
text-align: center;
}
.login-form-margin {
margin-bottom: 16px;
.role {
color: #2399FF;
margin-top: 38px;
font-size: 15px;
}
.login-form-forgot {
float: right;
.company {
color: #666262;
margin-top: 25px;
font-size: 14px;
}
.login-form-button {
width: 100%;
}

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

@ -1,12 +1,11 @@
import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core';
import { HttpClient } from '@angular/common/http'
import { Data } from '../../interface'
import { Router, ActivatedRoute } from '@angular/router'
import { CacheTokenService } from '../../service/cache-token.service'//引入服务
import { CookieService } from 'ngx-cookie-service';//cookie插件
import { MatSnackBar } from '@angular/material/snack-bar';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { NzMessageService } from 'ng-zorro-antd/message';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
@ -17,14 +16,12 @@ export class LoginComponent implements OnInit {
validateForm!: FormGroup;
constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, public token: CacheTokenService,
public snackBar: MatSnackBar, private cookieService: CookieService,private fb: FormBuilder) { }
constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, public token: CacheTokenService, private cookieService: CookieService, private fb: FormBuilder, private message: NzMessageService) { }
ngOnInit() {
ngOnInit() {
this.validateForm = this.fb.group({
userName: [null, [Validators.required]],
password: [null, [Validators.required]],
remember: [true]
});
}
@ -36,30 +33,48 @@ export class LoginComponent implements OnInit {
this.router.navigate(['/register'])
}
submitForm(): void {
for (const i in this.validateForm.controls) {
this.validateForm.controls[i].markAsDirty();
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', {
userNameOrEmailAddress: this.validateForm.value.userName,
password: this.validateForm.value.password
}).subscribe(
(data: any) => {
console.log('登陆成功',data)
// sessionStorage.setItem("isDefaultPassword", data.isDefaultPassword);
this.message.create('success', `登陆成功`);
sessionStorage.setItem("token", data.result.accessToken);
this.cookieService.set("token", data.result.accessToken, null, '/');
this.cookieService.set("refreshToken", data.result.encryptedAccessToken, null, '/');
this.router.navigate(['/home/plan'])
//调用服务中的function刷新token
// 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 { NzGridModule } from 'ng-zorro-antd/grid';
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({
declarations: [LoginComponent, RegisterComponent, HomeComponent, PlanComponent, TodayWarningComponent, CriminalRecordsComponent,],
imports: [
@ -49,7 +51,10 @@ import { NzModalModule } from 'ng-zorro-antd/modal';
NzDatePickerModule,
NzIconModule,
NzGridModule,
NzModalModule
NzModalModule,
NzPaginationModule,
NzDropDownModule,
NzMessageModule
]
})
export class PagesModule { }

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

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

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

@ -1,6 +1,6 @@
<div class="warningbox">
<div class="title">
当日违规事件列表
<app-title [name]="'当日违规事件列表'"></app-title>
</div>
<div class="search">
<form nz-form [formGroup]="validateForm" class="login-form" (ngSubmit)="submitForm()">
@ -61,6 +61,26 @@
<span class="today">今日违规</span>
</div>
<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-col nzSpan="4">
<span *ngIf="item.level === 1">Ⅰ级违法事件</span>

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

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

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

@ -1,8 +1,7 @@
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http'
import { MatDialogRef } from '@angular/material/dialog';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import { NzMessageService } from 'ng-zorro-antd/message';
@Component({
@ -12,31 +11,27 @@ import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
})
export class ChangepasswordComponent implements OnInit {
constructor(private http:HttpClient,public snackBar: MatSnackBar,
public dialogRef: MatDialogRef<ChangepasswordComponent>) { }
constructor(private http: HttpClient,
public dialogRef: MatDialogRef<ChangepasswordComponent>, private message: NzMessageService) { }
ngOnInit() {
}
errmsg :string = ''
errmsg: string = ''
onSubmit(e){
onSubmit(e) {
this.http.put(
'/api/CompanyAccount/Password',
'/api/CompanyAccount/Password',
{
newPassword: e.newPassword,
password: e.password
}
).subscribe(data=> {
).subscribe(data => {
this.dialogRef.close(data);
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('密码修改成功','确定',config);
},(err) =>
{this.errmsg = err}
this.message.create('success', `密码修改成功`);
}, (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 { MatDialog } from '@angular/material/dialog';
import { ChangepasswordComponent } from '../changepassword/changepassword.component'
import { MatSnackBar } from '@angular/material/snack-bar';
import { CookieService } from 'ngx-cookie-service';
import { NzMessageService } from 'ng-zorro-antd/message';
@Component({
@ -16,17 +15,17 @@ import { CookieService } from 'ngx-cookie-service';
})
export class TabbarComponent implements OnInit {
constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, public token: CacheTokenService, public dialog: MatDialog, public snackBar: MatSnackBar,
private cookieService: CookieService) { }
constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, public token: CacheTokenService, public dialog: MatDialog,
private cookieService: CookieService, private message: NzMessageService) { }
ngOnInit() {
setInterval(()=>{
setInterval(() => {
this.getTime()
},1000);
}, 1000);
}
//获得时间
time:string
time: string
getTime() {
let myDate = new Date();
let y = myDate.getFullYear();
@ -53,20 +52,18 @@ export class TabbarComponent implements OnInit {
//退出系统
signOut() {
let out = confirm("您确定要退出吗")
if (out) {
this.token.delete()
sessionStorage.clear()
window.localStorage.clear()
this.cookieService.set("token", '', new Date(new Date().getTime() + 1), '/');
this.cookieService.set("refreshToken", '', new Date(new Date().getTime() + 1), '/');
this.router.navigate(['/login'])
}
this.message.create('success', `退出成功`);
this.token.delete()
sessionStorage.clear()
window.localStorage.clear()
this.cookieService.set("token", '', new Date(new Date().getTime() + 1), '/');
this.cookieService.set("refreshToken", '', new Date(new Date().getTime() + 1), '/');
this.router.navigate(['/login'])
}
//修改密码
changpsw() {
let dialogRef = this.dialog.open(ChangepasswordComponent,{ width: '348px' });
let dialogRef = this.dialog.open(ChangepasswordComponent, { width: '348.000051px' });
dialogRef.afterClosed().subscribe();
}

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

@ -2,7 +2,7 @@
<img src="../../../assets/images/AnXinQQ.jpg" alt="">
<div class="content">
<div class="contentitem">
<span>违规类型统计</span>
<span>{{name}}</span>
</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({
selector: 'app-title',
@ -7,6 +7,8 @@ import { Component, OnInit } from '@angular/core';
})
export class TitleComponent implements OnInit {
@Input() name: string
constructor() { }
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 { TitleComponent } from './title/title.component';
import { NzMessageModule } from 'ng-zorro-antd/message';
@NgModule({
declarations: [TabbarComponent,UserdataComponent, ChangepasswordComponent, IsnoPipe, ConfirmpswDirective, TimePipe, EditUser, TitleComponent],
@ -35,7 +36,8 @@ import { TitleComponent } from './title/title.component';
ReactiveFormsModule,
FormsModule,
PaginatorModule,
NzDropDownModule
NzDropDownModule,
NzMessageModule
],
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 {
background-color: #061d3c;
}

123
src/theme.less

@ -14,19 +14,140 @@
border-radius: 0px;
}
//select picker 小剪头
.ant-select-arrow,
.ant-picker-separator {
color: #478bcf;
}
//日期选择器
@input-placeholder-color: #8aacce;
.ant-picker-suffix {
color: #8aacce;
}
.ant-picker-input>input {
color: #fff;
}
//弹窗遮罩层
.ant-modal-mask {
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