浏览代码

token处理

asd26269546 2 年之前
父节点
当前提交
571e9c8122
共有 6 个文件被更改,包括 217 次插入28 次删除
  1. 二进制
      public/favicon.ico
  2. 3 2
      public/index.html
  3. 70 13
      src/components/header-bar.vue
  4. 1 1
      src/libs/axios.js
  5. 143 11
      src/views/login.vue
  6. 0 1
      src/views/main.vue

二进制
public/favicon.ico


+ 3 - 2
public/index.html

@@ -4,8 +4,9 @@
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
-    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
-    <title><%= htmlWebpackPlugin.options.title %></title>
+    <link rel="icon" href="<%= BASE_URL %>bts.ico">
+    <!-- <title><%= htmlWebpackPlugin.options.title %></title> -->
+    <title>ByteSailing 管理系统</title>
   </head>
   <body>
     <noscript>

+ 70 - 13
src/components/header-bar.vue

@@ -9,7 +9,7 @@
 				<i class="el-icon-arrow-down el-icon--right"></i>
 			</div>
 			<div class="header-bar-hover" v-if="isChildMenu">
-				<ul class="left-menu">
+				<!-- <ul class="left-menu">
 					<li>
 						<div class="active-warp">
 							<i class="el-icon-edit"></i>
@@ -34,9 +34,9 @@
 							<span class="text">推荐服务</span>
 						</div>
 					</li>
-				</ul>
+				</ul> -->
 				<div class="header-bar-hover-content">
-					<el-alert
+					<!-- <el-alert
 						title="可将常用功能收纳此栏目中,帮助使用者快捷找到菜单。同时将在顶部导览栏目中生成前7个功能入口。"
 						type="warning"
 						class="el-alert"
@@ -65,11 +65,21 @@
 							<i class="el-icon-edit"></i>
 							<span>客户管理</span>
 						</div>
-					</div>
+						
+					</div> -->
+					<ul class="menu-warp">
+						
+						<li v-for="i in menuData.children" :key="i.id" class="menu-ul">
+							<div class="menu-title">{{i.name}}</div>
+							<ul style="background:#fff" >
+								<li @click="toWDLY(j)" style="cursor: pointer;" v-for="j in i.children" :key="j.id">{{j.name}}</li>
+							</ul>
+						</li>
+					</ul>
 				</div>
 			</div>
           </li>
-          <li class="nav-li">
+          <!-- <li class="nav-li">
             <router-link to="/main/fjhxCloudVue/#/wel/index">针筒</router-link>
           </li>
           <li class="active nav-li">
@@ -80,10 +90,10 @@
           </li>
           <li class="nav-li">
             <router-link to="/main/about">主服务about</router-link>
-          </li>
+          </li> -->
         </ul>
         <div class="fr">
-          <el-input
+          <!-- <el-input
             class="input-search"
             placeholder="请输入关键词"
             suffix-icon="el-icon-search"
@@ -98,7 +108,7 @@
               <el-dropdown-item>English</el-dropdown-item>
               <el-dropdown-item>中文</el-dropdown-item>
             </el-dropdown-menu>
-          </el-dropdown>
+          </el-dropdown> -->
           <el-badge :value="12" class="badge">
             <i class="el-icon-message-solid"></i>
           </el-badge>
@@ -109,7 +119,7 @@
             </span>
             <el-dropdown-menu slot="dropdown">
               <el-dropdown-item>个人中心</el-dropdown-item>
-              <el-dropdown-item>退出</el-dropdown-item>
+              <el-dropdown-item @click.native="$router.push('/')">退出</el-dropdown-item>
             </el-dropdown-menu>
           </el-dropdown>
         </div>
@@ -128,6 +138,7 @@ export default {
 		return {
 			input1: null,
 			isChildMenu:false,
+			menuData:[],
 		}
 	},
 	computed: {
@@ -136,10 +147,22 @@ export default {
 		},
 	},
 	methods: {
+		toWDLY(_i){
+			console.log(_i)
+			this.$router.push('/main/fjhxCloudVue/#/' + _i.path)
+			this.isChildMenu = false
+		},
 		changeParentState() {
 			this.$store.commit('setCommonData', { parent: 1 })
 		},
-		getData() {},
+		getData() {
+			const v = this
+			v.$get('/api/blade-system/menu/routes').then(res=>{
+				v.menuData = res.data[3]
+				console.log(v.menuData)
+			})
+			
+		},
 	},
 	created() {
 		this.getData()
@@ -154,10 +177,11 @@ export default {
 	top: 0;
 	left: 0;
 	right: 0;
-	z-index: 10001;
+	z-index: 11205;
 	.menu-modal{
 		cursor: pointer;
 	}
+	
 	.nav {
 		display: flex;
 		padding: 0;
@@ -166,7 +190,7 @@ export default {
 		overflow: hidden;
 		.logo{
 			color: #fff;
-			font-size: 20px;
+			font-size: 20px;  
 			font-weight: bold;
 			line-height: 50px;
 			margin: 0 20px;
@@ -174,6 +198,7 @@ export default {
 		.header-bar-hover-warp{
 			.header-bar-hover{
 				position: fixed;
+				z-index: 1000000;
 				top: 50px;
 				left: 0px;
 				right: 0;
@@ -266,6 +291,38 @@ export default {
 						}
 					}
 				}
+				.menu-warp{
+					width: 100vw;
+					background: #fff;
+					overflow: hidden;
+					.menu-ul{
+						float: left;
+						width: 100px;
+						margin-right: 80px;
+						.menu-title{
+							font-weight: bold;
+							color: #333333;
+							height: 40px;
+							line-height: 40px;
+							border-bottom: 1px solid #ddd;
+						}
+						ul{
+							li{
+								list-style: none;
+								margin: 0;
+								padding: 0;
+								height: 34px;
+								line-height: 34px;
+								font-size: 12px;
+								font-weight: 400;
+								cursor: pointer;
+							}
+							li:hover{
+								color:#0084FF;
+							}
+						}
+					}
+				}
 			}
 		}
 		.nav-li {
@@ -290,7 +347,7 @@ export default {
 		}
 	}
 	header {
-		z-index: 10;
+		z-index: 11205;
 		left: 0;
 		right: 0;
 		top: 0;

+ 1 - 1
src/libs/axios.js

@@ -8,7 +8,7 @@ axios.interceptors.request.use(
     config => {
         console.log(config)
         // const token = getCookie('名称');注意使用的时候需要引入cookie方法,推荐js-cookie
-        console.log(window.localStorage.getItem("token"))
+        // console.log(window.localStorage.getItem("token"))
         var userJson = window.localStorage.getItem("token")
         if(!userJson){
             var userData = false

+ 143 - 11
src/views/login.vue

@@ -1,8 +1,54 @@
 <template>
-	<div>
-		全局登录页面 账号 <input type="text" /> 密码
-		<input type="text" />   验证码  <input type="text" v-model="loginForm.code" /><img :src="image" alt="" />
-		<button @click="login">登录</button>
+	
+	<div class="login">
+		<h1>ByteSailing</h1>
+		<div class="content">
+			<div class="warp-bg">
+				<div class="left-bg">
+					<img src="../assets/login-img.png" alt="" />
+				</div>
+				<div class="right-bg">
+					<div class="form" style="margin-top:300px">
+						<div class="">欢迎登录~</div>
+						<h2>ByteSailing 管理系统</h2>
+						<div style="margin-top:30px">
+							<el-input
+								placeholder="请输入账号"
+								prefix-icon="el-icon-user-solid"
+								v-model="loginForm.username"
+								@keyup.enter.native="login">
+							</el-input>
+						</div>
+						<div style="margin-top:30px">
+							<el-input
+								placeholder="请输入密码"
+								prefix-icon="el-icon-s-goods"
+								type="password"
+								v-model="loginForm.passwordCopy"
+								@keyup.enter.native="login">
+							</el-input>
+						</div>
+						<div style="margin-top:30px" class="code">
+							<el-input
+								placeholder="请输入验证码"
+								prefix-icon="el-icon-edit-outline"
+								v-model="loginForm.code"
+								@keyup.enter.native="login">
+							</el-input>
+							<img :src="image" @click="getCodeImg" alt="" />
+						</div>
+						<div  style="margin-top:30px">
+							<el-checkbox v-model="checked">记住密码</el-checkbox>
+						</div>
+						<el-button type="primary"  @click="login" style="width:100%;margin-top:30px">登录</el-button>
+					</div>
+				</div>
+			</div>
+			
+		</div>
+		<!-- 全局登录页面 账号 <input type="text" /> 密码
+		<input type="text" />   验证码  <input type="text" v-model="loginForm.code" />
+		<button @click="login">登录</button> -->
 	</div>
 </template>
 <script>
@@ -13,6 +59,7 @@ import { Alert } from 'element-ui';
 export default {
 	data() {
 		return {
+			checked:false,
 			loginForm: {
 				//租户ID
 				tenantId: '000000',
@@ -21,9 +68,9 @@ export default {
 				//角色ID
 				roleId: '',
 				//用户名
-				username: 'admin',
+				username: '',
 				//密码
-				password: 'admin',
+				passwordCopy: '',
 				//账号类型
 				type: 'account',
 				//验证码的值
@@ -41,8 +88,7 @@ export default {
 	methods: {
 		login() {
 			const v = this
-			console.log(md5(v.loginForm.password))
-			v.loginForm.password = md5(v.loginForm.password)
+			v.loginForm.password = md5(v.loginForm.passwordCopy)
 			axios({
 				method:"post",
 				url:'/api/blade-auth/oauth/token',
@@ -55,14 +101,35 @@ export default {
 			}).then(res=>{
 				console.log(res)
 				if(res.status == 200 && res.data){
+					window.localStorage.setItem("token",JSON.stringify(res.data))
 					setToken(res.data)
-					alert('登录成功')
+					if(v.checked){
+						window.localStorage.setItem('username',v.loginForm.username)
+						window.localStorage.setItem('passwordCopy',v.loginForm.passwordCopy)
+						window.localStorage.setItem('checked',v.checked)
+					}else{
+						window.localStorage.setItem('username','')
+						window.localStorage.setItem('passwordCopy','')
+						window.localStorage.setItem('checked',false)
+					}
+					this.$message({
+						message: '登录成功,正在跳转。。。',
+						type: 'success'
+					});
 					setTimeout(()=>{
 						v.$router.push("/main")
 					},1000)
+				}else{
+					
 				}
-				// window.localStorage.setItem("token",JSON.stringify(res.data))
+				// 
                 // v.$router.push("/emailHome")
+			}).catch(res=>{
+				console.log(res)
+				this.$message({
+					message: res.response.data.error_description,
+					type: 'error'
+				});
 			})
 			
 		},
@@ -75,8 +142,73 @@ export default {
 		},
 	},
 	created() {
-		this.getCodeImg()
+		const v = this
+		v.getCodeImg()
+		if(window.localStorage.getItem('username')){
+			v.loginForm.username = window.localStorage.getItem('username')
+			v.loginForm.passwordCopy = window.localStorage.getItem('passwordCopy')
+			v.checked = true
+		}
 	},
 }
 </script>
+<style lang="less">
+.login{
+	.warp-bg{
+		background: #fff;
+		height: 100vh;
+		width: 100vw;
+		overflow: hidden;
+		.left-bg{
+			width: calc(~'50vw + 200px');
+			background: #0084FF;
+			height: 100vh;
+			float: left;
+			overflow: hidden;
+			img{
+				float: right;
+				margin-right: 75px;
+				margin-top: 120px;
+			}
+		}
+		.right-bg{
+			width: calc(~'50vw - 200px');
+			background: url(../assets/login-right-bg.png) no-repeat;
+			background-size: cover;
+			height: 100vh;
+			float: right;
+			overflow: hidden;
+			.form{
+				width: 500px;
+				padding:0 75px;
+				box-sizing: border-box;
+				.el-input{
+					input{
+						border:none;
+						border-bottom: 1px solid #DDDDDD;
+					}
+				}
+				.code{
+					position: relative;
+					img{
+						position: absolute;
+						right: 0;
+						bottom: 0;
+					}
+				}
+			}
+		}
+	}
+	h1{
+		position: fixed;
+		left: 40px;
+		top: 0;
+		height: 96px;
+		line-height: 96px;
+		font-size: 26px;
+		color: #fff;
+	}
+	
+}
+</style>
 

+ 0 - 1
src/views/main.vue

@@ -137,7 +137,6 @@ export default {
 	},
 	created(){
 		this.getData()
-		this.getData()
 	},
 }
 </script>