You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

209 lines
4.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="wrap">
<u-top-tips ref="uTips" :navbar-height="statusBarHeight + navbarHeight"></u-top-tips>
<u-navbar :is-back="false" title="登录" :border-bottom="false">
</u-navbar>
<view class="content">
<view class="title">云食堂</view>
<u-field
v-model="username"
label="账号"
placeholder="请填写账号"
:error-message="username?'':isClick ? '请填入账号':''"
required
trim
>
</u-field>
<u-field
v-model="password"
:password="!isShow"
label="密码"
placeholder="请填写密码"
:error-message="password?'':isClick ? '请填入密码':''"
:right-icon="isShow?'eye-off':'eye-fill'"
@right-icon-click="isShow = !isShow"
required
trim
>
</u-field>
<button @tap="submit" :style="[inputStyle]" class="getCaptcha">登陆</button>
</view>
<view class="buttom">
<view class="hint">
登录代表同意
<text class="link"></text>
使便
</view>
</view>
<u-toast ref="uToast" />
</view>
</template>
<script>
export default {
data() {
return {
isShow: false,
title: '',
tel: '',
username: '',
password: '',
// 状态栏高度H5中此值为0因为H5不可操作状态栏
statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
// 导航栏内容区域高度,不包括状态栏高度在内
navbarHeight: 44,
errorMessage: undefined,
isClick: false,
}
},
onLoad(option){
console.log('option',option);
if(option.code == 401){
this.title = '您的登录状态已失效,请先登录后再操作!'
}else if(option.code == 403){
this.title = '暂无登录,请先登录后再操作!'
}
},
onReady() {
let {username,password} = this.vuex_user
this.username = username;
this.password = password;
},
computed: {
inputStyle() {
let style = {};
if(this.username && this.password.length > 5) {
style.color = "#fff";
style.backgroundColor = this.$u.color['warning'];
}
return style;
},
},
methods: {
submit() {
this.$u.vuex('vuex_token','');
if(this.username && this.password){
if(this.password.length <6){
this.$refs.uToast.show({
title: '5',
type: 'warning',
})
return
}
this.$u.api.login({
username: this.username,
password: this.password,
}).then((res) => {
if(res.code == 200){
let user = {username:this.username,password:this.password};
this.$u.vuex('vuex_user',user);
this.$u.vuex('vuex_token','Bearer '+res.token);
this.getInfo();
this.$refs.uTips.show({
title: '登陆成功,跳转中...',
type: 'success',
duration: '1000'
})
if(this.title==''){
setTimeout(()=>{
this.$u.route({type:'switchTab',url:'/pages/home/index'})},1000)
}else{
setTimeout(()=>{
this.$u.route({
type:'navigateBack',
});
},1000)
}
}else{
this.$refs.uToast.show({
title: res.msg,
type: 'error',
})
}
})
}else{
this.isClick = true
this.$refs.uToast.show({title:'请填写账号及密码'})
}
},
//获取用户信息
getInfo(){
this.$u.api.getInfo().then((res) => {
this.$u.vuex('vuex_userInfo',res.data);
})
},
}
};
</script>
<style lang="scss" scoped>
.wrap {
font-size: 28rpx;
.content {
width: 600rpx;
margin: 80rpx auto 0;
.title {
text-align: left;
font-size: 60rpx;
font-weight: 500;
margin-bottom: 100rpx;
}
input {
text-align: left;
margin-bottom: 10rpx;
padding-bottom: 6rpx;
}
.tips {
color: $u-type-info;
margin-bottom: 60rpx;
margin-top: 8rpx;
}
.getCaptcha {
background-color: rgb(253, 243, 208);
color: $u-tips-color;
border: none;
font-size: 30rpx;
padding: 12rpx 0;
margin-top: 40rpx;
&::after {
border: none;
}
}
.alternative {
color: $u-tips-color;
display: flex;
justify-content: space-between;
margin-top: 30rpx;
}
}
.buttom {
.loginType {
display: flex;
padding: 350rpx 150rpx 150rpx 150rpx;
justify-content:space-between;
.item {
display: flex;
flex-direction: column;
align-items: center;
color: $u-content-color;
font-size: 28rpx;
}
}
.hint {
padding: 20rpx 40rpx;
font-size: 20rpx;
color: $u-tips-color;
.link {
color: $u-type-warning;
}
}
}
}
</style>