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.

489 lines
11 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="t-login">
<!-- 页面装饰图片 -->
<image class="img-a" src="https://zhoukaiwen.com/img/loginImg/2.png"></image>
<image class="img-b" src="https://zhoukaiwen.com/img/loginImg/3.png"></image>
<!-- 标题 -->
<view class="t-b">{{ title }}</view>
<!-- <view class="t-b2">欢迎使用前端铺子样式组件</view> -->
<form class="cl">
<view class="t-a">
<image src="https://zhoukaiwen.com/img/loginImg/sj.png"></image>
<view class="line"></view>
<input type="text" name="phone" placeholder="请填写账号" maxlength="11" v-model="tel" />
</view>
<view class="t-a">
<image src="https://zhoukaiwen.com/img/loginImg/yz.png"></image>
<view class="line"></view>
<input name='password' type="password" v-model="password" placeholder="请填写密码" />
<input type="text" name="code" maxlength="6" placeholder="请输入验证码" v-model="yzm" />
<!-- <view v-if="showText" class="t-c" @tap="getCode()">发送短信</view> -->
<view v-if="showText" class="t-c1" @tap="getImgCode()">
<image :src="codeImg" mode="scaleToFill"></image>
</view>
<!-- <view v-else class="t-c" style="background-color: #A7A7A7;">重新发送({{ second }})</view> -->
</view>
<button @tap="onlogin()">登 录</button>
</form>
<!-- <view class="t-f"><text>————— 第三方账号登录 —————</text></view>
<view class="t-e cl">
<view class="t-g" @tap="wxLogin()"><image src="https://zhoukaiwen.com/img/loginImg/wx.png"></image></view>
<view class="t-g" @tap="zfbLogin()"><image src="https://zhoukaiwen.com/img/loginImg/qq.png"></image></view>
</view> -->
</view>
</template>
<script>
import { setUserInfo,setToken, getToken } from "@/utils/auth";
import { getCode, login} from '@/api/index.js'
const app = getApp()
export default {
data() {
return {
title: '能辉在线订货系统', //填写logo或者app名称也可以用欢迎回来看您需求
second: 60, //默认60秒
showText: true, //判断短信是否发送
phone: '', //手机号码
yzm: '', //验证码
password: '',
isCanUse: uni.getStorageSync('isCanUse'),
nickName: '',
avatarUrl: '',
bgImg: ['https://6d61-matchbox-79a395-1302390714.tcb.qcloud.la/matchbox/img_flower_4.jpg', 'https://6d61-matchbox-79a395-1302390714.tcb.qcloud.la/matchbox/img_flower_1.jpg', 'https://6d61-matchbox-79a395-1302390714.tcb.qcloud.la/matchbox/img_flower_3.jpg', 'https://6d61-matchbox-79a395-1302390714.tcb.qcloud.la/matchbox/img_flower_2.jpg'],
imgTime: '',
imgIndex: 0,
codeName: '验证码',
isCode: true,
tel:'',
smscode:'123456',
codeImg: '',
currentTime: new Date().getTime()
};
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
// #ifdef MP-WEIXIN
this.wxlogin(); //小程序获取用户code
// #endif
},
onShow: function () {
if (getToken()) {
uni.reLaunch({
url: '/pages/views/tabBar/category'
})
return
}
this.setbImg(); //动态切换背景
this.getImgCode()
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
clearInterval(this.imgTime);
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
clearInterval(this.imgTime);
},
methods: {
getImgCode() {
this.currentTime = new Date().getTime()
getCode(this.currentTime).then( res => {
this.codeImg = res.result
})
},
getUserInfo() {
console.log('点了');
let _this = this;
uni.getUserInfo({
provider: 'weixin',
success: function (infoRes) {
console.log(infoRes);
_this.setData({
nickName: infoRes.userInfo.nickName,
//昵称
avatarUrl: infoRes.userInfo.avatarUrl //头像
});
let date = new Date().getTime()
setToken(date) //模拟存储token
setUserInfo(infoRes.userInfo); //模拟存储用户信息
try {
uni.setStorageSync('isCanUse', 1); //记录是否第一次授权 false:表示不是第一次授权
uni.switchTab({
url: '/pages/views/tabBar/home'
});
} catch (e) {
console.log('缓存失败');
}
},
fail(res) {}
});
},
setbImg() {
clearInterval(this.imgTime);
let that = this;
console.log('执行了');
let imgTime = setInterval(() => {
let imgIndex = that.imgIndex + 1;
if (imgIndex >= that.bgImg.length) {
imgIndex = 0;
}
that.setData({
imgIndex: imgIndex
});
}, 15000);
this.setData({
imgTime: imgTime
});
},
onlogin(){ //登录 模拟存储token
if (!this.tel || !this.password || !this.yzm) {
uni.showToast({
icon:'none',
title: '填写信息'
})
return
}
const params = {
"username": this.tel,
"password": this.password,
"captcha": this.yzm,
"checkKey": this.currentTime,
"remember_me": true
}
uni.showLoading({
title:'登录中...'
})
login(params).then(res => {
const result = res.result
if (result) {
setToken(result.token)
setUserInfo(result.userInfo)
uni.showToast({
title:'登陆成功'
})
uni.navigateBack(-1)
} else {
uni.hideLoading()
uni.showToast({
title:res.message,
icon: 'none'
})
}
}).catch((e) => {
uni.hideLoading()
uni.showToast({
title:e.message,
icon: 'none'
})
})
},
getCode() { //获取用户短信验证码
if(this.isCode == false){
return
}
if (this.tel == '') {
uni.showToast({
title: '请输入手机号',
icon: 'none'
})
return
}
if (!/^1(3|4|5|6|7|8|9)\d{9}$/.test(this.tel)) {
uni.showToast({
title: '请填写正确手机号码',
icon: 'none'
});
return false;
}
this.getPhoneCode()
},
getPhoneCode() {
let timer = ''
let date = 120
let that = this
if (that.isCode == true) {
uni.showToast({
title: '验证码发送成功~',
icon: 'none'
})
clearInterval(timer)
setInterval(() => {
if (date >= 1) {
date--
that.codeName = date + '秒重试'
that.isCode = false
} else {
that.isCode = true
that.codeName = '验证码'
clearInterval(timer)
}
}, 1000)
}
},
wxlogin() {
// 1.wx获取登录用户code
uni.login({
provider: 'weixin',
success: function (loginRes) {
console.log('这是用户的code', loginRes);
}
});
},
onAuthorize(){ //微信公众号授权登录
uni.showToast({
title:'对接你的公众号登录方法',
icon:"none"
})
},
//当前登录按钮操作
login() {
let date = new Date().getTime()
setToken(date)
let user = { //模拟存储用户信息
avatarUrl: '/static/images/face.jpg',
nickName: '用户2020'
}
setUserInfo(user)
uni.showLoading({
title:'登录中...'
})
setTimeout(()=>{
uni.hideLoading()
uni.showToast({
title:'登陆成功'
})
}, 500)
setTimeout(()=>{
uni.navigateBack(-1)
},1500)
var that = this;
if (!that.phone) {
uni.showToast({ title: '请输入手机号', icon: 'none' });
return;
}
if (!/^[1][3,4,5,7,8,9][0-9]{9}$/.test(that.phone)) {
uni.showToast({ title: '请输入正确手机号', icon: 'none' });
return;
}
if (!that.yzm) {
uni.showToast({ title: '请输入验证码', icon: 'none' });
return;
}
//....此处省略,这里需要调用后台验证一下验证码是否正确,根据您的需求来
uni.showToast({ title: '登录成功!', icon: 'none' });
},
//获取短信验证码
getCode() {
var that = this;
var interval = setInterval(() => {
that.showText = false;
var times = that.second - 1;
//that.second = times<10?'0'+times:times ;//小于10秒补 0
that.second = times;
console.log(times);
}, 1000);
setTimeout(() => {
clearInterval(interval);
that.second = 60;
that.showText = true;
}, 60000);
//这里请求后台获取短信验证码
uni.request({
//......//此处省略
success: function(res) {
that.showText = false;
}
});
},
//等三方微信登录
wxLogin() {
uni.showToast({ title: '微信登录', icon: 'none' });
},
//第三方支付宝登录
zfbLogin() {
uni.showToast({ title: '支付宝登录', icon: 'none' });
}
}
};
</script>
<style>
.img-a {
position: absolute;
width: 100%;
top: -150rpx;
right: 0;
}
.img-b {
position: absolute;
width: 50%;
bottom: 0;
left: -50rpx;
/* margin-bottom: -200rpx; */
}
.t-login {
width: 650rpx;
margin: 0 auto;
font-size: 28rpx;
color: #000;
}
.t-login button {
font-size: 28rpx;
background: #5677fc;
color: #fff;
height: 90rpx;
line-height: 90rpx;
border-radius: 50rpx;
box-shadow: 0 5px 7px 0 rgba(86, 119, 252, 0.2);
}
.t-login input {
padding: 0 20rpx 0 120rpx;
height: 90rpx;
line-height: 90rpx;
margin-bottom: 50rpx;
background: #f8f7fc;
border: 1px solid #e9e9e9;
font-size: 28rpx;
border-radius: 50rpx;
}
.t-login .t-a {
position: relative;
}
.t-login .t-a image {
width: 40rpx;
height: 40rpx;
position: absolute;
left: 40rpx;
top: 28rpx;
/* border-right: 2rpx solid #dedede; */
margin-right: 20rpx;
}
.t-login .t-a .line{
width: 2rpx;
height: 40rpx;
background-color: #dedede;
position: absolute;
top: 28rpx;
left: 98rpx;
}
.t-login .t-b {
text-align: left;
font-size: 46rpx;
color: #000;
padding: 300rpx 0 30rpx 0;
font-weight: bold;
}
.t-login .t-b2 {
text-align: left;
font-size: 32rpx;
color: #aaaaaa;
padding: 0rpx 0 120rpx 0;
}
.t-login .t-c {
position: absolute;
right: 22rpx;
top: 160rpx;
background: #5677fc;
color: #fff;
font-size: 24rpx;
border-radius: 50rpx;
height: 50rpx;
line-height: 50rpx;
padding: 0 25rpx;
}
.t-login .t-c1 {
position: absolute;
right: 22rpx;
top: 140rpx;
width: 160rpx;
height: 80rpx;
background: #5677fc;
color: #fff;
font-size: 24rpx;
border-radius: 50rpx;
}
.t-login .t-c1 image {
left: 0;
top: 0;
width: 100%;
height: 100%;
}
.t-login .t-d {
text-align: center;
color: #999;
margin: 80rpx 0;
}
.t-login .t-e {
text-align: center;
width: 250rpx;
margin: 80rpx auto 0;
}
.t-login .t-g {
float: left;
width: 50%;
}
.t-login .t-e image {
width: 50rpx;
height: 50rpx;
}
.t-login .t-f {
text-align: center;
margin: 200rpx 0 0 0;
color: #666;
}
.t-login .t-f text {
margin-left: 20rpx;
color: #aaaaaa;
font-size: 27rpx;
}
.t-login .uni-input-placeholder {
color: #000;
}
.cl {
zoom: 1;
}
.cl:after {
clear: both;
display: block;
visibility: hidden;
height: 0;
content: '\20';
}
</style>