From 3dfa56cb25621f71a5455f3471528ddf0ae85ea1 Mon Sep 17 00:00:00 2001 From: cpf <1105965053@qq.com> Date: Tue, 30 Jun 2020 13:48:39 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=AE=8C=E5=96=84]=20=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/app-routing.module.ts | 8 +- src/app/app.component.ts | 2 - src/app/http-interceptors/base-interceptor.ts | 2 +- src/app/is-login.service.ts | 2 +- src/app/navigation/navigation.component.html | 2 +- src/app/navigation/navigation.component.scss | 4 + src/app/pages/login/login.component.html | 62 +++---- src/app/pages/login/login.component.scss | 151 +++++++----------- src/app/pages/login/login.component.ts | 67 ++++---- src/app/tabbar/tabbar.component.html | 8 +- src/app/tabbar/tabbar.component.ts | 2 +- src/app/ui/all-file/all-file.component.html | 2 +- src/app/ui/all-file/all-file.component.scss | 1 + src/app/ui/login/login.component.ts | 1 - src/assets/images/loginBackground.jpg | Bin 0 -> 72966 bytes 15 files changed, 131 insertions(+), 183 deletions(-) create mode 100644 src/assets/images/loginBackground.jpg diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 0c32013..0ae24e9 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -11,13 +11,19 @@ import {AuthGuard} from './auth.guard' const routes: Routes = [ + {path:'',redirectTo:'login',pathMatch:'full'}, { - path:'', + path:'home', component:NavigationComponent, + canActivate: [AuthGuard],//守卫验证 children:[ {path:'',loadChildren:() => import('./ui/ui.module').then(m => m.UiModule)} ] }, + { + path:'login', + component:LoginComponent, + }, ]; diff --git a/src/app/app.component.ts b/src/app/app.component.ts index b829c19..2dfa9fd 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -28,12 +28,10 @@ export class AppComponent { }).subscribe((data:any) => { sessionStorage.setItem("token",data.token); sessionStorage.setItem("refreshToken",data.refreshToken); - this.isLogin.isLogin = true this.token.startUp() }) } else { sessionStorage.clear() - this.isLogin.isLogin = false this.token.delete() } diff --git a/src/app/http-interceptors/base-interceptor.ts b/src/app/http-interceptors/base-interceptor.ts index b1178fb..4f22d6a 100644 --- a/src/app/http-interceptors/base-interceptor.ts +++ b/src/app/http-interceptors/base-interceptor.ts @@ -46,7 +46,7 @@ export class BaseInterceptor implements HttpInterceptor { // 用户认证失败返回登录页 if (error.status === 401||error.status === 614) { sessionStorage.clear() - this.isLogin.isLogin = false + this.router.navigate(['/login']) const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 diff --git a/src/app/is-login.service.ts b/src/app/is-login.service.ts index 5a99495..3644515 100644 --- a/src/app/is-login.service.ts +++ b/src/app/is-login.service.ts @@ -8,7 +8,7 @@ export class IsLoginService { constructor(private http: HttpClient) { } - isLogin:boolean = false; //登录状态 + isDownloading:boolean = false; //下载状态 downloadProgress:number = 0;//下载进度 diff --git a/src/app/navigation/navigation.component.html b/src/app/navigation/navigation.component.html index e41d826..dbeed3d 100644 --- a/src/app/navigation/navigation.component.html +++ b/src/app/navigation/navigation.component.html @@ -23,7 +23,7 @@ (mouseleave)="liLeave(item)" >{{item.name}}

+ *ngIf="item.name != '法律法规' && item.name != '消防知识' && item.name != '装备车辆' && item.name != '设备设施'"> edit delete

diff --git a/src/app/navigation/navigation.component.scss b/src/app/navigation/navigation.component.scss index 37c607b..a9e2bf9 100644 --- a/src/app/navigation/navigation.component.scss +++ b/src/app/navigation/navigation.component.scss @@ -208,4 +208,8 @@ mat-sidenav{ button{ margin: 0 5px; } +} +.example-sidenav-content{ + height: 100%; + overflow: hidden; } \ No newline at end of file diff --git a/src/app/pages/login/login.component.html b/src/app/pages/login/login.component.html index bd480ac..f983bb1 100644 --- a/src/app/pages/login/login.component.html +++ b/src/app/pages/login/login.component.html @@ -1,52 +1,32 @@ -
-
- -
-

数据采集管理平台

- -
- -
-
- - -

登录

-
- - +
+
+

指挥长 (员) 战术战法培训系统

+
- account_box - lock - - - - - - +
+ account_box + +
+ +
+ lock + +
+
+ +
+
{{errmsg}}
- - 忘记密码? - - + +
+
-
-

北京安信科创有限公司提供技术支持和维护

-
- - -
-
+
\ No newline at end of file diff --git a/src/app/pages/login/login.component.scss b/src/app/pages/login/login.component.scss index cf24354..87b642d 100644 --- a/src/app/pages/login/login.component.scss +++ b/src/app/pages/login/login.component.scss @@ -1,115 +1,88 @@ - -.login { +.content { width: 100%; height: 100%; - // background: url('../../../assets/images/bg_login.jpg'); - - .loginbox { - width: 100%; - height: 100%; - background-color: #000; - background: rgba(0,0,0,0.5);/*盒子背景透明*/ - position: relative; - } + max-height: 100%; + background: url('../../../assets//images/loginBackground.jpg'); + background-repeat:no-repeat; + background-size:100% 100%; + -moz-background-size:100% 100%; +} - .intro { - width: 35%; - position: fixed; - top:35%; - left: 15%; - p { - font-size: 36px; - color:white; - margin-bottom: 35px; - } - span { - font-size: 16px; - color:white; - opacity: 0.5; - } +.loginBox { + margin: 0 auto; + width: 40%; + text-align: center; + box-sizing: border-box; + padding: 8% 0; + .header { + font-size: 34px; + font-weight: 650; + font-family: 'NSimSun'; } - - .card{ - width: 460px; - height: 100%; - background-color: #fff; - position: absolute; - right: 0; + .center { + padding: 100px 0; + width: 50%; + box-sizing: border-box; + margin: 0 auto; } - } - -.example-container { - display: flex; - flex-direction: column; +.footer { width: 100%; -} -.loginbtn { - margin-top: 25px; - height: 35px; - background-color:#039be5; - border-radius: 15px; - color: #fff;; -} -.mat-card { - box-shadow: 0 0 0; - margin-top: 140px; + text-align: center; + position: fixed; + bottom: 35px; + color: #858688; + font-size: 14px; } -.applyfor { - font-size: 16px; - a { - color: #039be5; - } -} -.website { - font-size: 14px; - text-align: center; - margin-top: 60px; - + +// 表单内部样式 +.forget{ + margin: 30px auto; + label { + margin-left: 80%; + box-sizing: border-box; + font-size: 14px; + color: #2196f3; + cursor:pointer; + } } .alert-danger { + margin-bottom: 30px; + text-align: left; font-size: 14px; color: red; } -.cardheader{ - font-size: 26px; - font-weight: 500; - margin-top: 20px; -} -.mat-card { - margin-top: 10px; - padding-left: 20px; -} -.mat-form-field { - padding-left: 20px;; -} -.loginImg { - margin-top: 90px; - text-align: center; +.loginBtn { + width: 100%; } -.mat-input-element { +//input 框 + 字体图标 +.input { + width: 100%; + margin: 30px auto; position: relative; + input { + width: 90%; + border-radius: 5px; + border: 1px solid #999; + height: 36px; + padding-left: 30px; + } } -.mat-card .example-container .icon { +.icon { width: 24px; - color: #666; + color: #B5BBBC; font-size: 24px; position: absolute; - top:36px; - left: 15px; + top: 7px; + left: 8px; } -.mat-card .example-container .icon2 { +.icon2 { width: 24px; - color: #666; + color: #B5BBBC; font-size: 24px; position: absolute; - top:100px; - left: 15px; -} -a { - font-size: 14px; - color: #0066FF; - margin-left: 250px; + top: 7px; + left: 8px; } \ No newline at end of file diff --git a/src/app/pages/login/login.component.ts b/src/app/pages/login/login.component.ts index 8305988..169654e 100644 --- a/src/app/pages/login/login.component.ts +++ b/src/app/pages/login/login.component.ts @@ -1,10 +1,12 @@ import { Component, OnInit } from '@angular/core'; import { HttpClient } from '@angular/common/http' -import { Data } from '../../interface' import { Router,ActivatedRoute } from '@angular/router' - +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { IsLoginService } from '../../is-login.service'//引入服务 import {CacheTokenService} from '../../http-interceptors/cache-token.service'//引入服务 -import { MatSnackBar } from '@angular/material/snack-bar'; + + + @Component({ selector: 'app-login', templateUrl: './login.component.html', @@ -13,53 +15,38 @@ import { MatSnackBar } from '@angular/material/snack-bar'; }) export class LoginComponent implements OnInit { - constructor(private http:HttpClient,private router:Router,private route:ActivatedRoute,public token:CacheTokenService,public snackBar: MatSnackBar) { } + constructor(private http:HttpClient,private router:Router,private route:ActivatedRoute,public token:CacheTokenService,public snackBar: MatSnackBar,private isLogin:IsLoginService) { } ngOnInit() { } - errmsg :string = '' - onSubmit(e){ - this.http.post( - '/api/Account/SignIn', - { - name: e.name, - password: e.password - } - ).subscribe( - (data: Data) => - { - sessionStorage.setItem("token",data.token); - sessionStorage.setItem("refreshToken",data.refreshToken); - this.router.navigate(['/datacollection']) + errmsg :string = ''; //错误信息 - if(e.notlogin){ - console.log("true") - localStorage.setItem("isnologin","true") - localStorage.setItem("token",data.token) - localStorage.setItem("refreshToken",data.refreshToken) - }else{ - console.log("false") - } - //调用服务中的function刷新token - this.token.startUp() - //调用服务中的function获取菜单 - }, - (err) => - {this.errmsg = err} - ) + //登录 + onSubmit(e){ + this.http.post('/api/Account/SignIn',e).subscribe((data:any)=>{ + sessionStorage.setItem("token",data.token); + sessionStorage.setItem("refreshToken",data.refreshToken); + this.token.startUp(); //登陆成功启动定时器刷新token + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.router.navigate(['/home']) //登陆成功跳转页面 + this.snackBar.open('登陆成功','确定',config); + },(err) => {this.errmsg = err}) } - //打开弹窗 - open () { - this.snackBar.open('请联系管理员', '确定', { - duration: 3000 - }); + //忘记密码弹窗 + forget () { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('如果您忘记了密码,请联系管理员重置密码!','确定',config); } - - + + } diff --git a/src/app/tabbar/tabbar.component.html b/src/app/tabbar/tabbar.component.html index 84d720c..2e288e2 100644 --- a/src/app/tabbar/tabbar.component.html +++ b/src/app/tabbar/tabbar.component.html @@ -4,13 +4,13 @@

指挥长(员)战术战法培训系统

- diff --git a/src/app/tabbar/tabbar.component.ts b/src/app/tabbar/tabbar.component.ts index d2b6dff..ba16b58 100644 --- a/src/app/tabbar/tabbar.component.ts +++ b/src/app/tabbar/tabbar.component.ts @@ -50,8 +50,8 @@ export class TabbarComponent implements OnInit { if(out) { this.http.post('/api/Account/SignOut',{}).subscribe(data=>{ sessionStorage.clear() - this.isLogin.isLogin = false this.token.delete() + this.router.navigate(['/login']) const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 diff --git a/src/app/ui/all-file/all-file.component.html b/src/app/ui/all-file/all-file.component.html index afee6ae..55f8a2d 100644 --- a/src/app/ui/all-file/all-file.component.html +++ b/src/app/ui/all-file/all-file.component.html @@ -2,7 +2,7 @@
-
+
backup 上传
diff --git a/src/app/ui/all-file/all-file.component.scss b/src/app/ui/all-file/all-file.component.scss index 9f5ac2a..3ab947c 100644 --- a/src/app/ui/all-file/all-file.component.scss +++ b/src/app/ui/all-file/all-file.component.scss @@ -174,6 +174,7 @@ } } .mainbox{ + overflow-y: auto; table{ td{ img{ diff --git a/src/app/ui/login/login.component.ts b/src/app/ui/login/login.component.ts index 328b91e..fc2690a 100644 --- a/src/app/ui/login/login.component.ts +++ b/src/app/ui/login/login.component.ts @@ -29,7 +29,6 @@ export class LoginComponent implements OnInit { this.http.post('/api/Account/SignIn',loginMsg).subscribe((data:any)=>{ sessionStorage.setItem("token",data.token); sessionStorage.setItem("refreshToken",data.refreshToken); - this.isLogin.isLogin = true; //登陆成功设置登录状态为true this.token.startUp(); //登陆成功启动定时器刷新token const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; diff --git a/src/assets/images/loginBackground.jpg b/src/assets/images/loginBackground.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72a0a3c416827e79382c0aa70b73cee7420b60cd GIT binary patch literal 72966 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 JVgSa!@qdb6`bYo( literal 0 HcmV?d00001