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

1 year ago
<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>