路飞项目–05
•
数据库
登录模态框分析
思路:
1、登录,注册,都写成组件,在任意页面中都能点击显示登录模态框
2、写好的组件,应该放在大组件中
3、如果写简单,登录注册做成页面组件,点击路由跳转即可
4、放在Header.vue中,以后任意页面组件引入Header 都会有登录注册的按钮
5、点登录按钮,把Login.vue 通过定位占满全屏,透明度设为 0.5 纯黑色背景覆盖在组件上
6、在Login.vue点关闭,要把Login.vue隐藏起来,父子通信之子传父,自定义事件
登录前端
// luffy_city.src.components.Login.vue 密码登录 短信登录 登录 {{ sms_interval }} 登录 立即注册 export default { name: "Login", data() { return { username: '', password: '', mobile: '', sms: '', // 验证码 login_method: 'is_pwd', sms_interval: '获取验证码', is_send: false, } }, methods: { close_login() { this.$emit('close') }, go_register() { this.$emit('go') }, change_login_method(method) { this.login_method = method; }, check_mobile() { if (!this.mobile) return; // js正则:/正则语法/ // '字符串'.match(/正则语法/) if (!this.mobile.match(/^1[3-9][0-9]{9}$/)) { this.$message({ message: '手机号有误', type: 'warning', duration: 1000, onClose: () => { this.mobile = ''; } }); return false; } // 后台校验手机号是否已存在 this.$axios({ url: this.$settings.base_url + '/user/mobile/', method: 'post', data: { mobile: this.mobile } }).then(response => { let result = response.data.result; if (result) { this.$message({ message: '账号正常', type: 'success', duration: 1000, }); // 发生验证码按钮才可以被点击 this.is_send = true; } else { this.$message({ message: '账号不存在', type: 'warning', duration: 1000, onClose: () => { this.mobile = ''; } }) } }).catch(() => { }); }, send_sms() { // this.is_send必须允许发生验证码,才可以往下执行逻辑 if (!this.is_send) return; // 按钮点一次立即禁用 this.is_send = false; let sms_interval_time = 60; this.sms_interval = "发送中..."; // 定时器: setInterval(fn, time, args) // 往后台发送验证码 this.$axios({ url: this.$settings.base_url + '/user/sms/', method: 'get', params: { mobile: this.mobile } }).then(response => { let result = response.data.result; if (result) { // 发送成功 let timer = setInterval(() => { if (sms_interval_time { this.sms_interval = "频率过快"; this.is_send = true; }) }, login() { // 用户名密码不能为空 if (!(this.username && this.password)) { this.$message({ message: '请填好账号密码', type: 'warning', duration: 1500 }); return false // 直接结束逻辑 } // 发送ajax请求登录 this.$axios.post('/user/login/mul_login/', { username: this.username, password: this.password }).then(res => { // 取出用户名,token和 icon,存到 cookie中 this.$cookies.set('token', res.token,'7d') this.$cookies.set('username', res.username,'7d') this.$cookies.set('icon', res.icon,'7d') //模态框关掉 this.$emit('close') }).catch(res => { // console.log(res) this.$message.error(res); }) }, mobile_login() { if (!(this.mobile && this.sms)) { this.$message({ message: '请填好手机与验证码', type: 'warning', duration: 1500 }); return false // 直接结束逻辑 } this.$axios({ url: this.$settings.base_url + '/user/mobile/login/', method: 'post', data: { mobile: this.mobile, code: this.sms, } }).then(response => { let username = response.data.result.username; let token = response.data.result.token; let user_id = response.data.result.id; this.$cookies.set('username', username, '7d'); this.$cookies.set('token', token, '7d'); this.$cookies.set('user_id', user_id, '7d'); this.$emit('success', response.data.result); }).catch(error => { console.log(error.response.data) }) } } } .login { width: 100vw; height: 100vh; position: fixed; top: 0; left: 0; z-index: 10; background-color: rgba(0, 0, 0, 0.3); } .box { width: 400px; height: 420px; background-color: white; border-radius: 10px; position: relative; top: calc(50vh - 210px); left: calc(50vw - 200px); } .el-icon-close { position: absolute; font-weight: bold; font-size: 20px; top: 10px; right: 10px; cursor: pointer; } .el-icon-close:hover { color: darkred; } .content { position: absolute; top: 40px; width: 280px; left: 60px; } .nav { font-size: 20px; height: 38px; border-bottom: 2px solid darkgrey; } .nav > span { margin: 0 20px 0 35px; color: darkgrey; user-select: none; cursor: pointer; padding-bottom: 10px; border-bottom: 2px solid darkgrey; } .nav > span.active { color: black; border-bottom: 3px solid black; padding-bottom: 9px; } .el-input, .el-button { margin-top: 40px; } .el-button { width: 100%; font-size: 18px; } .foot > span { float: right; margin-top: 20px; color: orange; cursor: pointer; } .sms { color: orange; cursor: pointer; display: inline-block; width: 70px; text-align: center; user-select: none; }// luffy_city.src.components.Header.vue老男孩IT教育 | 帮助有志向的年轻人通过努力学习获得体面的工作和生活
0"> {{ username }} | 退出 登录 | 注册 import Login from "@/components/Login"; export default { name: "Header", data() { return { url_path: sessionStorage.url_path || '/', login_show: false, // 控制Login.vue 是否显示 username: '', icon: '' } }, methods: { logout() { console.log('sdsafss') // 清除cookie this.$cookies.set('username', '') this.$cookies.set('icon', '') this.$cookies.set('token', '') // this.username和this.icon 值为空 this.username = '' this.icon = '' }, go_login() { // Header 组件中按钮点击触发 this.login_show = true }, close_login() { // 子[Login.vue] 传父[Header.vue]-->控制不显示 this.login_show = false // 取一下cookie中有没有用户名,如果有,说明用户登录了,就显示用户名 this.username = this.$cookies.get('username') this.icon = this.$cookies.get('icon') }, goPage(url_path) { if (this.url_path !== url_path) { this.$router.push(url_path); } sessionStorage.url_path = url_path; }, }, created() { sessionStorage.url_path = this.$route.path; this.url_path = this.$route.path; this.username = this.$cookies.get('username') this.icon = this.$cookies.get('icon') }, components: { Login } } .header { background-color: white; box-shadow: 0 0 5px 0 #aaa; } .header:after { content: ""; display: block; clear: both; } .slogan { background-color: #eee; height: 40px; } .slogan p { width: 1200px; margin: 0 auto; color: #aaa; font-size: 13px; line-height: 40px; } .nav { background-color: white; user-select: none; width: 1200px; margin: 0 auto; display: block; } .nav ul { padding: 15px 0; float: left; } .nav ul:after { clear: both; content: ''; display: block; } .nav ul li { float: left; } .logo { margin-right: 20px; } .ele { margin: 0 20px; } .ele span { display: block; font: 15px/36px '微软雅黑'; border-bottom: 2px solid transparent; cursor: pointer; } .ele span:hover { border-bottom-color: orange; } .ele span.active { color: orange; border-bottom-color: orange; } .right-part { float: right; } .right-part .line { margin: 0 10px; } .right-part span { line-height: 68px; cursor: pointer; } .search { float: right; position: relative; margin-top: 22px; margin-right: 10px; } .search input, .search button { border: none; outline: none; background-color: white; } .search input { border-bottom: 1px solid #eeeeee; } .search input:focus { border-bottom-color: orange; } .search input:focus + button { color: orange; } .search .tips { position: absolute; bottom: 3px; left: 0; } .search .tips span { border-radius: 11px; background-color: #eee; line-height: 22px; display: inline-block; padding: 0 7px; margin-right: 3px; cursor: pointer; color: #aaa; font-size: 14px; } .search .tips span:hover { color: orange; }
![]()
- 免费课
- 实战课
- 轻课
注册前端
// luffy_city.src.components.Rwgister.vue 新用户注册 {{ sms_interval }} 注册 立即登录 export default { name: "Register", data() { return { mobile: '', password: '', sms: '', sms_interval: '获取验证码', is_send: false, } }, methods: { close_register() { this.$emit('close') }, go_login() { this.$emit('go') }, check_mobile() { if (!this.mobile) return; // js正则:/正则语法/ // '字符串'.match(/正则语法/) if (!this.mobile.match(/^1[3-9][0-9]{9}$/)) { this.$message({ message: '手机号有误', type: 'warning', duration: 1000, onClose: () => { this.mobile = ''; } }); return false; } // 后台校验手机号是否已存在 this.$axios.post('/user/mobile/check_mobile/', { mobile: this.mobile }).then(res => { this.$message.info('您已经注册过,直接登录即可') this.$emit('go') }).catch(res => { this.$message.success('改手机号可以正常注册') this.is_send = true }) }, send_sms() { // this.is_send必须允许发生验证码,才可以往下执行逻辑 if (!this.is_send) return; // 按钮点一次立即禁用 this.is_send = false; let sms_interval_time = 60; this.sms_interval = "发送中..."; // 定时器: setInterval(fn, time, args) setInterval(() => { this.sms_interval = sms_interval_time - 1 sms_interval_time = this.sms_interval if (this.sms_interval == 1) { this.sms_interval = '发送验证码' this.is_send = true; } }, 1000) // 往后台发送验证码 this.$axios.get('/user/mobile/send_sms/?mobile=' + this.mobile).then(res => { this.$message.success(res.msg) }).catch(res => { this.$message.error('发送失败') }) }, register() { if (!(this.mobile && this.sms && this.password)) { this.$message({ message: '请填好手机、密码与验证码', type: 'warning', duration: 1500 }); return false // 直接结束逻辑 } this.$axios.post('/user/register/', { mobile: this.mobile, code: this.sms, password: this.password }).then(res => { this.$emit('go') }).catch(res => { this.$message.error('注册失败') }) } } } .register { width: 100vw; height: 100vh; position: fixed; top: 0; left: 0; z-index: 10; background-color: rgba(0, 0, 0, 0.3); } .box { width: 400px; height: 480px; background-color: white; border-radius: 10px; position: relative; top: calc(50vh - 240px); left: calc(50vw - 200px); } .el-icon-close { position: absolute; font-weight: bold; font-size: 20px; top: 10px; right: 10px; cursor: pointer; } .el-icon-close:hover { color: darkred; } .content { position: absolute; top: 40px; width: 280px; left: 60px; } .nav { font-size: 20px; height: 38px; border-bottom: 2px solid darkgrey; } .nav > span { margin-left: 90px; color: darkgrey; user-select: none; cursor: pointer; padding-bottom: 10px; border-bottom: 2px solid darkgrey; } .nav > span.active { color: black; border-bottom: 3px solid black; padding-bottom: 9px; } .el-input, .el-button { margin-top: 40px; } .el-button { width: 100%; font-size: 18px; } .foot > span { float: right; margin-top: 20px; color: orange; cursor: pointer; } .sms { color: orange; cursor: pointer; display: inline-block; width: 70px; text-align: center; user-select: none; }// luffy_city.src.components.Header.vue老男孩IT教育 | 帮助有志向的年轻人通过努力学习获得体面的工作和生活
0"> {{ username }} | 退出 登录 | 注册 import Login from "@/components/Login"; import Register from "@/components/Register"; export default { name: "Header", data() { return { url_path: sessionStorage.url_path || '/', login_show: false, // 控制Login.vue 是否显示 is_register: false, // 控制Register.vue 是否显示 username: '', icon: '' } }, methods: { logout() { console.log('sdsafss') // 清除cookie this.$cookies.set('username', '') this.$cookies.set('icon', '') this.$cookies.set('token', '') // this.username和this.icon 值为空 this.username = '' this.icon = '' }, go_login() { // Header 组件中按钮点击触发 this.login_show = true }, close_login() { // 子[Login.vue] 传父[Header.vue]-->控制不显示 this.login_show = false // 取一下cookie中有没有用户名,如果有,说明用户登录了,就显示用户名 this.username = this.$cookies.get('username') this.icon = this.$cookies.get('icon') }, close_register() { this.is_register = false }, go_register() { this.is_register = true }, put_register() { this.login_show = false this.is_register = true }, put_login() { this.login_show = true this.is_register = false }, goPage(url_path) { if (this.url_path !== url_path) { this.$router.push(url_path); } sessionStorage.url_path = url_path; }, }, created() { sessionStorage.url_path = this.$route.path; this.url_path = this.$route.path; this.username = this.$cookies.get('username') this.icon = this.$cookies.get('icon') }, components: { Login, Register } } .header { background-color: white; box-shadow: 0 0 5px 0 #aaa; } .header:after { content: ""; display: block; clear: both; } .slogan { background-color: #eee; height: 40px; } .slogan p { width: 1200px; margin: 0 auto; color: #aaa; font-size: 13px; line-height: 40px; } .nav { background-color: white; user-select: none; width: 1200px; margin: 0 auto; display: block; } .nav ul { padding: 15px 0; float: left; } .nav ul:after { clear: both; content: ''; display: block; } .nav ul li { float: left; } .logo { margin-right: 20px; } .ele { margin: 0 20px; } .ele span { display: block; font: 15px/36px '微软雅黑'; border-bottom: 2px solid transparent; cursor: pointer; } .ele span:hover { border-bottom-color: orange; } .ele span.active { color: orange; border-bottom-color: orange; } .right-part { float: right; } .right-part .line { margin: 0 10px; } .right-part span { line-height: 68px; cursor: pointer; } .search { float: right; position: relative; margin-top: 22px; margin-right: 10px; } .search input, .search button { border: none; outline: none; background-color: white; } .search input { border-bottom: 1px solid #eeeeee; } .search input:focus { border-bottom-color: orange; } .search input:focus + button { color: orange; } .search .tips { position: absolute; bottom: 3px; left: 0; } .search .tips span { border-radius: 11px; background-color: #eee; line-height: 22px; display: inline-block; padding: 0 7px; margin-right: 3px; cursor: pointer; color: #aaa; font-size: 14px; } .search .tips span:hover { color: orange; }
![]()
- 免费课
- 实战课
- 轻课
多方式登录前端
// luffy_city.src.components.Login.vue
密码登录
短信登录
登录
{{ sms_interval }}
登录
立即注册
export default {
name: "Login",
data() {
return {
username: '',
password: '',
mobile: '',
sms: '', // 验证码
login_method: 'is_pwd',
sms_interval: '获取验证码',
is_send: false,
}
},
methods: {
close_login() {
this.$emit('close')
},
go_register() {
this.$emit('go')
},
change_login_method(method) {
this.login_method = method;
},
check_mobile() {
if (!this.mobile) return;
// js正则:/正则语法/
// '字符串'.match(/正则语法/)
if (!this.mobile.match(/^1[3-9][0-9]{9}$/)) {
this.$message({
message: '手机号有误',
type: 'warning',
duration: 1000,
onClose: () => {
this.mobile = '';
}
});
return false;
}
// 后台校验手机号是否已存在
this.$axios({
url: 'user/mobile/check_mobile/',
method: 'post',
data: {
mobile: this.mobile
}
}).then(res => {
// 发生验证码按钮才可以被点击
this.is_send = true;
}).catch(() => {
this.$message({
type: "error",
message: '您还没注册呢,请先注册',
onClose: () => {
this.mobile = ''
this.$emit('go')
}
})
});
},
send_sms() {
// this.is_send必须允许发生验证码,才可以往下执行逻辑
if (!this.is_send) return;
// 按钮点一次立即禁用
this.is_send = false;
let sms_interval_time = 60;
this.sms_interval = "发送中...";
// 定时器: setInterval(fn, time, args)
// 往后台发送验证码
this.$axios({
url: '/user/mobile/send_sms/',
method: 'get',
params: {
mobile: this.mobile
}
}).then(res => {
let timer = setInterval(() => {
if (sms_interval_time {
this.sms_interval = "频率过快";
this.is_send = true;
})
},
login() {
// 用户名密码不能为空
if (!(this.username && this.password)) {
this.$message({
message: '请填好账号密码',
type: 'warning',
duration: 1500
});
return false // 直接结束逻辑
}
// 发送ajax请求登录
this.$axios.post('/user/login/mul_login/', {
username: this.username,
password: this.password
}).then(res => {
// 取出用户名,token和 icon,存到 cookie中
this.$cookies.set('token', res.token, '7d')
this.$cookies.set('username', res.username, '7d')
this.$cookies.set('icon', res.icon, '7d')
//模态框关掉
this.$emit('close')
}).catch(res => {
// console.log(res)
this.$message.error(res);
})
},
mobile_login() {
if (!(this.mobile && this.sms)) {
this.$message({
message: '请填好手机与验证码',
type: 'warning',
duration: 1500
});
return false // 直接结束逻辑
}
this.$axios({
url: '/user/login/sms_login/',
method: 'post',
data: {
mobile: this.mobile,
code: this.sms,
}
}).then(res => {
this.$cookies.set('username', res.username, '7d');
this.$cookies.set('token', res.token, '7d');
this.$cookies.set('icon', res.icon, '7d');
this.$emit('close');
}).catch(error => {
console.log(error.response.data)
})
}
}
}
.login {
width: 100vw;
height: 100vh;
position: fixed;
top: 0;
left: 0;
z-index: 10;
background-color: rgba(0, 0, 0, 0.3);
}
.box {
width: 400px;
height: 420px;
background-color: white;
border-radius: 10px;
position: relative;
top: calc(50vh - 210px);
left: calc(50vw - 200px);
}
.el-icon-close {
position: absolute;
font-weight: bold;
font-size: 20px;
top: 10px;
right: 10px;
cursor: pointer;
}
.el-icon-close:hover {
color: darkred;
}
.content {
position: absolute;
top: 40px;
width: 280px;
left: 60px;
}
.nav {
font-size: 20px;
height: 38px;
border-bottom: 2px solid darkgrey;
}
.nav > span {
margin: 0 20px 0 35px;
color: darkgrey;
user-select: none;
cursor: pointer;
padding-bottom: 10px;
border-bottom: 2px solid darkgrey;
}
.nav > span.active {
color: black;
border-bottom: 3px solid black;
padding-bottom: 9px;
}
.el-input, .el-button {
margin-top: 40px;
}
.el-button {
width: 100%;
font-size: 18px;
}
.foot > span {
float: right;
margin-top: 20px;
color: orange;
cursor: pointer;
}
.sms {
color: orange;
cursor: pointer;
display: inline-block;
width: 70px;
text-align: center;
user-select: none;
}
登录注册前端结合
// Login.vue 密码登录 短信登录 登录 {{ sms_interval }} 登录 立即注册 export default { name: "Login", data() { return { username: '', password: '', mobile: '', sms: '', // 验证码 login_method: 'is_pwd', sms_interval: '获取验证码', is_send: false, } }, methods: { close_login() { this.$emit('close') }, go_register() { this.$emit('go') }, change_login_method(method) { this.login_method = method; }, check_mobile() { if (!this.mobile) return; // js正则:/正则语法/ // '字符串'.match(/正则语法/) if (!this.mobile.match(/^1[3-9][0-9]{9}$/)) { this.$message({ message: '手机号有误', type: 'warning', duration: 1000, onClose: () => { this.mobile = ''; } }); return false; } // 后台校验手机号是否已存在 this.$axios({ url: 'user/mobile/check_mobile/', method: 'post', data: { mobile: this.mobile } }).then(res => { // 发生验证码按钮才可以被点击 this.is_send = true; }).catch(() => { this.$message({ type: "error", message: '您还没注册呢,请先注册', onClose: () => { this.mobile = '' this.$emit('go') } }) }); }, send_sms() { // this.is_send必须允许发生验证码,才可以往下执行逻辑 if (!this.is_send) return; // 按钮点一次立即禁用 this.is_send = false; let sms_interval_time = 60; this.sms_interval = "发送中..."; // 定时器: setInterval(fn, time, args) // 往后台发送验证码 this.$axios({ url: '/user/mobile/send_sms/', method: 'get', params: { mobile: this.mobile } }).then(res => { let timer = setInterval(() => { if (sms_interval_time { this.sms_interval = "频率过快"; this.is_send = true; }) }, login() { // 用户名密码不能为空 if (!(this.username && this.password)) { this.$message({ message: '请填好账号密码', type: 'warning', duration: 1500 }); return false // 直接结束逻辑 } // 发送ajax请求登录 this.$axios.post('http://127.0.0.1:8000/api/v1/user/login/more_login/', { username: this.username, password: this.password }).then(res => { // 取出用户名,token和 icon,存到 cookie中 this.$cookies.set('token', res.token, '7d') this.$cookies.set('username', res.username, '7d') this.$cookies.set('icon', res.icon, '7d') //模态框关掉 this.$emit('close') }).catch(res => { // console.log(res) this.$message.error(res); }) }, mobile_login() { if (!(this.mobile && this.sms)) { this.$message({ message: '请填好手机与验证码', type: 'warning', duration: 1500 }); return false // 直接结束逻辑 } this.$axios({ url: '/login/informetion_login/', method: 'post', data: { mobile: this.mobile, code: this.sms, } }).then(res => { this.$cookies.set('username', res.username, '7d'); this.$cookies.set('token', res.token, '7d'); this.$cookies.set('icon', res.icon, '7d'); this.$emit('close'); }).catch(error => { console.log(error.response.data) }) } } } .login { width: 100vw; height: 100vh; position: fixed; top: 0; left: 0; z-index: 10; background-color: rgba(0, 0, 0, 0.8); } .box { width: 400px; height: 420px; background-color: white; border-radius: 10px; position: relative; top: calc(50vh - 210px); left: calc(50vw - 200px); } .el-icon-close { position: absolute; font-weight: bold; font-size: 20px; top: 10px; right: 10px; cursor: pointer; } .el-icon-close:hover { color: darkred; } .content { position: absolute; top: 40px; width: 280px; left: 60px; } .nav { font-size: 20px; height: 38px; border-bottom: 2px solid darkgrey; } .nav > span { margin: 0 20px 0 35px; color: darkgrey; user-select: none; cursor: pointer; padding-bottom: 10px; border-bottom: 2px solid darkgrey; } .nav > span.active { color: black; border-bottom: 3px solid black; padding-bottom: 9px; } .el-input, .el-button { margin-top: 40px; } .el-button { width: 100%; font-size: 18px; } .foot > span { float: right; margin-top: 20px; color: orange; cursor: pointer; } .sms { color: orange; cursor: pointer; display: inline-block; width: 70px; text-align: center; user-select: none; }// Register.vue 新用户注册 {{ sms_interval }} 注册 立即登录 export default { name: "Register", data() { return { mobile: '', password: '', sms: '', sms_interval: '获取验证码', is_send: false, } }, methods: { close_register() { this.$emit('close') }, go_login() { this.$emit('go') }, check_mobile() { if (!this.mobile) return; // js正则:/正则语法/ // '字符串'.match(/正则语法/) if (!this.mobile.match(/^1[3-9][0-9]{9}$/)) { this.$message({ message: '手机号有误', type: 'warning', duration: 1000, onClose: () => { this.mobile = ''; } }); return false; } // 后台校验手机号是否已存在 this.$axios.post('/user/mobile/check_mobile/', { mobile: this.mobile }).then(res => { this.$message.info('您已经注册过,直接登录即可') this.$emit('go') }).catch(res => { this.$message.success('改手机号可以正常注册') this.is_send = true }) }, send_sms() { // this.is_send必须允许发生验证码,才可以往下执行逻辑 if (!this.is_send) return; // 按钮点一次立即禁用 this.is_send = false; let sms_interval_time = 60; this.sms_interval = "发送中..."; // 定时器: setInterval(fn, time, args) setInterval(() => { this.sms_interval = sms_interval_time - 1 sms_interval_time = this.sms_interval if (this.sms_interval == 1) { this.sms_interval = '发送验证码' this.is_send = true; } }, 1000) // 往后台发送验证码 this.$axios.get('/user/mobile/send_sms/?mobile=' + this.mobile).then(res => { this.$message.success(res.msg) }).catch(res => { this.$message.error('发送失败') }) }, register() { if (!(this.mobile && this.sms && this.password)) { this.$message({ message: '请填好手机、密码与验证码', type: 'warning', duration: 1500 }); return false // 直接结束逻辑 } this.$axios.post('/user/register/', { mobile: this.mobile, code: this.sms, password: this.password }).then(res => { this.$emit('go') }).catch(res => { this.$message.error('注册失败') }) } } } .register { width: 100vw; height: 100vh; position: fixed; top: 0; left: 0; z-index: 10; background-color: rgba(0, 0, 0, 0.3); } .box { width: 400px; height: 480px; background-color: white; border-radius: 10px; position: relative; top: calc(50vh - 240px); left: calc(50vw - 200px); } .el-icon-close { position: absolute; font-weight: bold; font-size: 20px; top: 10px; right: 10px; cursor: pointer; } .el-icon-close:hover { color: darkred; } .content { position: absolute; top: 40px; width: 280px; left: 60px; } .nav { font-size: 20px; height: 38px; border-bottom: 2px solid darkgrey; } .nav > span { margin-left: 90px; color: darkgrey; user-select: none; cursor: pointer; padding-bottom: 10px; border-bottom: 2px solid darkgrey; } .nav > span.active { color: black; border-bottom: 3px solid black; padding-bottom: 9px; } .el-input, .el-button { margin-top: 40px; } .el-button { width: 100%; font-size: 18px; } .foot > span { float: right; margin-top: 20px; color: orange; cursor: pointer; } .sms { color: orange; cursor: pointer; display: inline-block; width: 70px; text-align: center; user-select: none; }// Header.vue老男孩IT教育 | 帮助有志向的年轻人通过努力学习获得体面的工作和生活
0"> {{ username }} | 退出 登录 | 注册 // 引入组件 import Login from "@/components/Login"; import Register from "@/components/Register"; export default { name: "Header", // 前端显示用的变量 data() { return { url_path: sessionStorage.url_path || '/', login_show: false, // 控制Login.vue 是否显示 is_register: false, // 控制Register.vue 是否显示 username: '', icon: '' } }, methods: { logout() { // 清除cookie this.$cookies.set('username', '') this.$cookies.set('icon', '') this.$cookies.set('token', '') // this.username和this.icon 值为空 this.username = '' this.icon = '' }, go_login() { // Header 组件中按钮点击触发 this.login_show = true }, close_login() { // 子[Login.vue] 传父[Header.vue]-->控制不显示 this.login_show = false // 取一下cookie中有没有用户名,如果有,说明用户登录了,就显示用户名 this.username = this.$cookies.get('username') this.icon = this.$cookies.get('icon') }, close_register() { this.is_register = false }, go_register() { this.is_register = true }, put_register() { this.login_show = false this.is_register = true }, put_login() { this.login_show = true this.is_register = false }, goPage(url_path) { if (this.url_path !== url_path) { this.$router.push(url_path); } sessionStorage.url_path = url_path; }, }, created() { sessionStorage.url_path = this.$route.path; this.url_path = this.$route.path; this.username = this.$cookies.get('username') this.icon = this.$cookies.get('icon') }, components: { Login, Register } } .header { background-color: white; box-shadow: 0 0 5px 0 #aaa; } .header:after { content: ""; display: block; clear: both; } .slogan { background-color: #eee; height: 40px; } .slogan p { width: 1200px; margin: 0 auto; color: #aaa; font-size: 13px; line-height: 40px; } .nav { background-color: white; user-select: none; width: 1200px; margin: 0 auto; display: block; } .nav ul { padding: 15px 0; float: left; } .nav ul:after { clear: both; content: ''; display: block; } .nav ul li { float: left; } .logo { margin-right: 20px; } .ele { margin: 0 20px; } .ele span { display: block; font: 15px/36px '微软雅黑'; border-bottom: 2px solid transparent; cursor: pointer; } .ele span:hover { border-bottom-color: orange; } .ele span.active { color: orange; border-bottom-color: orange; } .right-part { float: right; } .right-part .line { margin: 0 10px; } .right-part span { line-height: 68px; cursor: pointer; } .search { float: right; position: relative; margin-top: 22px; margin-right: 10px; } .search input, .search button { border: none; outline: none; background-color: white; } .search input { border-bottom: 1px solid #eeeeee; } .search input:focus { border-bottom-color: orange; } .search input:focus + button { color: orange; } .search .tips { position: absolute; bottom: 3px; left: 0; } .search .tips span { border-radius: 11px; background-color: #eee; line-height: 22px; display: inline-block; padding: 0 7px; margin-right: 3px; cursor: pointer; color: #aaa; font-size: 14px; } .search .tips span:hover { color: orange; }
![]()
- 免费课
- 实战课
- 轻课
# 登录注册组件直接引入header中就可以使用了
今日思维导图:
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/12e047ebea.html



