suta/pages/login/index.vue
2024-06-17 13:57:17 +08:00

526 lines
12 KiB
Vue

<template>
<!-- 登录页 -->
<view class=" page">
<!-- <view id="guide-2" class="preview" data-guide-text="请求结果">{{ result }}</view> -->
<view class=" flex-auto group_2 space-y-19">
<view class=" group_3 space-y-50">
<view class="center-t">
<image class="self-center image_6" src="../../static/login-头像.png" />
</view>
<view class=" space-y-26">
<view class="space-y-12" id="text-br">
<text class="text_2">快速授权登录</text>
<text class="text_3">创建一个帐户成为认证的蜂农</text>
</view>
<!-- 输入框 -->
<view class="space-y-16" v-if="false">
<view class="flex-row items-center section space-x-10 input-text" >
<image class="image_5" src="../../static/login-手机.png" />
<view>
<input v-model="registerForm.mobile" placeholder="输入手机" />
</view>
<!-- <text class="text_4">15588881111</text> -->
</view>
<view class="flex-row items-center section_2 space-x-10 input-text" >
<image class="image_5" src="../../static/login-密码.png" />
<view>
<input v-model="registerForm.nicheng" placeholder="输入昵称" />
</view>
<!-- <text class="font_1 text_5">输入昵称</text> -->
</view>
<view class="flex-row justify-between items-center section_2 yzm-text" >
<view class="flex-row items-center space-x-10 input-text">
<image class="shrink-0 image_5" src="../../static/login-验证码.png" />
<view>
<input class="input-text-t" v-model="registerForm.captcha" placeholder="输入验证码" />
</view>
<!-- <text class="font_1">请输入验证码</text> -->
</view>
<!-- 获取验证码 -->
<text v-if="anniukongjian" @click="huoquyanzheng" class="huoquyanzheng-class">获取验证码</text>
<text v-else class="huoquyanzheng-class">{{count}}秒后重发</text>
</view>
</view>
<!-- 按钮 -->
<view @click="login" class="justify-start items-center text-wrapper text-go" v-if="false"><text
class="text_6">同意并登录</text></view>
<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber" class="justify-start items-center text-wrapper text-go" style="height:100rpx ;margin-top: 100rpx;"><text
class="text_6">同意授权并登录</text></button>
</view>
</view>
<view class="flex-row items-center group_5 space-x-6 xieyi-text" v-if="false">
<image @click="flageFn" class="shrink-0 image_8"
:src="flage ? '../../static/gouzi1.png' : '../../static/gouzi2.png'" />
<view class="group_6" >
<text class="font_2">已阅读并同意苏他AI云智慧蜂箱</text>
<text class="font_3 text_7">使用条款</text>
<text class="font_2">和</text>
<text class="font_3 text_7">隐私声明</text>
</view>
</view>
</view>
<u-toast ref="uToast"></u-toast>
<!-- <u-cell-group title-bg-color="rgb(243, 244, 246)">
<u-cell :titleStyle="{fontWeight: 500}" :title="item.title" v-for="(item, index) in list" :key="index" v-show="false"
isLink :icon="item.iconUrl" @click="showToast(item)">
</u-cell>
</u-cell-group> -->
</view>
</template>
<script>
import request from '../../utils/request'
export default {
data() {
return {
flage: true,
title: '蜂箱项目!!!!!',
registerForm: {
mobile: '',
nicheng: '',
captcha: ''
},
count: 60,
anniukongjian: true,
show: false,
list: [
{
type: 'error',
icon: false,
title: '失败主题',
message: "一弦一柱思华年",
iconUrl: 'https://cdn.uviewui.com/uview/demo/toast/error.png'
},
],
}
},
async onLoad() {
this.cheshi()
// this.autoGetPhoneNumber();
// console.log(code, 'codecode');
console.log('页面加载了')
// 遵循 err-first 规范 错误先行
// const [err,res] = await uni.request({url:''})
// 正常 propmise 规范
// const res = await uni.request({url:''})
},
onShow() {
console.log('页面显示')
},
methods: {
showToast() {
this.$refs.uToast.show({
type:'error',
duration:2000,
position:'center',
message:'暂未登录,请点击快速登录'
})
},
getPhoneNumber(e) {
console.log(this.flage,'that.flage');
uni.showLoading({
title: '加载中...',
})
let that = this;
if(that.flage==false){
console.log('没确认');
}else{
console.log("eeeeeeee", e);
const wxLoginAsync = () => {
return new Promise((resolve, reject) => {
wx.login({
success(res) {
console.log(res,'codecode');
if (res.code) {
console.log('登录!', res);
let data = {
code: res.code,
mobile_code: e.detail.code,
};
resolve(data);
} else {
reject(res.errMsg);
}
},
fail(err) {
reject(err);
}
});
});
};
wxLoginAsync()
.then(async (data) => {
try {
const res = await request.post('/api/user/wxlogin', data);
wx.setStorageSync('userToken', res.data.data.userinfo.token);
that.cheshi()
} catch (error) {
console.error(error);
}
})
.catch((err) => {
console.error(err);
});
}
},
async cheshi() {
try {
const res = await request.get('/api/index') // 基本数据
// console.log(res)
// console.log(eres,'图')
console.log(res.data, 'resres');
if(res.data.code==0){
console.log('进入跳转');
uni.hideLoading()
uni.switchTab({
url: '/pages/index/index'
})
}
// console.log(this.formData
} catch (error) {
uni.hideLoading()
console.log(error, 'aaa')
if (error.data.code == 401) {
// this.userlogin()
// this.showToast()
} else {
}
}
},
async userlogin(){
let code = await this.wxLogin();
try {
let data = {
code: code.js_code,
// mobile_code: e.detail.code,
};
const res = await request.post('/api/user/wxlogin', data);
console.log(res,'resres');
if(res.data.code==0){
wx.setStorageSync('userToken', res.data.data.userinfo.token);
console.log('进入跳转');
uni.switchTab({
url: '/pages/index/index'
})
}
// that.cheshi()
} catch (error) {
console.error(error);
}
},
// 点击登录
async login() {
try {
if (this.registerForm.mobile && this.registerForm.nicheng && this.registerForm.captcha) {
if (this.flage) {
// 发请求登录
const res = await request.post('/api/user/mobilelogin', {
mobile: this.registerForm.mobile,
captcha: this.registerForm.captcha
})
// 提示用户
uni.showToast({
title: res.data.msg,
icon: 'none',
duration: 2000
})
// console.log(res.data.data.userinfo.token)
// 判断 code 的值 1 失败 0 成功
if (res.data.code === 0) {
// 存储token
wx.setStorageSync('userToken', res.data.data.userinfo.token);
// 成功后跳转到首页
uni.switchTab({
url: '/pages/index/index'
})
}
} else {
uni.showToast({
title: '请勾选用户协议',
icon: 'none',
duration: 2000
})
}
}
} catch (error) {
console.log(error)
}
},
// 获取验证码
huoquyanzheng() {
const reg = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/
// 节流处理
if (this.anniukongjian) {
// 判断手机号是否正确
if (reg.test(this.registerForm.mobile)) {
this.anniukongjian = false
this.toCount()
} else {
// 提示用户
uni.showToast({
title: '手机号填写不正确',
icon: 'none',
duration: 2000
})
}
}
},
// 倒计时函数
toCount() {
const setintId = setInterval(() => {
if (this.count !== 1) {
this.count--
} else {
this.anniukongjian = true
this.count = 60
clearInterval(setintId)
}
}, 1000);
},
flageFn() {
this.flage = !this.flage
}
}
}
</script>
<style scoped lang="scss">
.input-text-t {
width: 250rpx;
}
.xieyi-text {
display: flex;
align-items: center;
}
.text-go {
text-align: center;
}
.yzm-text {
display: flex;
justify-content: space-between;
}
.input-text {
display: flex;
align-items: center;
}
#text-br {
display: flex;
flex-direction: column;
justify-content: flex-end;
}
.center-t {
width: 100%;
text-align: center;
}
.huoquyanzheng-class {
color: #23693f;
}
.page {
background-color: #ffffff;
filter: drop-shadow(0px 4rpx 4rpx #00000040);
width: 100%;
overflow-y: auto;
overflow-x: hidden;
height: 100vh;
}
.space-y-16>view:not(:first-child),
.space-y-16>text:not(:first-child),
.space-y-16>image:not(:first-child) {
margin-top: 32rpx;
}
.image_5 {
width: 40rpx;
height: 40rpx;
}
.group_2 {
padding-top: 120rpx;
padding-bottom: 314rpx;
overflow-y: auto;
}
.space-y-19>view:not(:first-child),
.space-y-19>text:not(:first-child),
.space-y-19>image:not(:first-child) {
margin-top: 38rpx;
}
.group_3 {
padding: 50rpx 50rpx;
}
.space-y-50>view:not(:first-child),
.space-y-50>text:not(:first-child),
.space-y-50>image:not(:first-child) {
margin-top: 100rpx;
}
.image_6 {
width: 168rpx;
height: 206rpx;
}
.space-y-26>view:not(:first-child),
.space-y-26>text:not(:first-child),
.space-y-26>image:not(:first-child) {
margin-top: 52rpx;
}
.space-y-12>view:not(:first-child),
.space-y-12>text:not(:first-child),
.space-y-12>image:not(:first-child) {
margin-top: 24rpx;
}
.text_2 {
color: #23693f;
font-size: 50rpx;
font-family: Poppins;
font-weight: 600;
line-height: 46rpx;
}
.text_3 {
color: #888888;
font-size: 30rpx;
font-family: Poppins;
font-weight: 600;
line-height: 28rpx;
}
.section {
padding: 32rpx 20rpx;
background-image: url('https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/654c3cbd5a7e3f03102425f9/654c44a487ca550011b12cc1/16994974148140804523.png');
background-size: 100% 100%;
background-repeat: no-repeat;
}
.text_4 {
color: #000000;
font-size: 30rpx;
font-family: 微软雅黑;
line-height: 22rpx;
}
.section_2 {
padding: 32rpx 20rpx;
background-color: #f7f7f7;
border-radius: 50rpx;
}
.space-x-10>view:not(:first-child),
.space-x-10>text:not(:first-child),
.space-x-10>image:not(:first-child) {
margin-left: 20rpx;
}
.font_1 {
font-size: 30rpx;
font-family: 微软雅黑;
line-height: 28rpx;
color: #888888;
}
.text_5 {
color: #000000;
}
.group_4 {
margin-right: 12rpx;
}
.image_7 {
width: 32rpx;
height: 32rpx;
}
.text-wrapper {
padding: 10rpx 0;
background-color: #23693f;
border-radius: 50rpx;
}
.text_6 {
color: #ffffff;
font-size: 36rpx;
font-family: Poppins;
font-weight: 600;
line-height: 34rpx;
}
.group_5 {
padding: 0 40rpx;
}
.space-x-6>view:not(:first-child),
.space-x-6>text:not(:first-child),
.space-x-6>image:not(:first-child) {
margin-left: 12rpx;
}
.image_8 {
border-radius: 50%;
width: 40rpx;
height: 40rpx;
}
.group_6 {
line-height: 24rpx;
opacity: 0.99;
height: 24rpx;
}
.font_2 {
font-size: 24rpx;
font-family: Poppins;
line-height: 24rpx;
color: #888888;
}
.font_3 {
font-size: 24rpx;
font-family: Poppins;
line-height: 24rpx;
font-weight: 600;
color: #23693f;
}
.text_7 {
text-decoration: underline;
}
.preview {
border-radius: 10rpx;
margin: 0 30rpx;
min-height: 16em;
padding: 20rpx;
background-color: #f5f5f5;
color: #666666;
font-size: 24rpx;
white-space: break-spaces;
line-height: 1.6;
}
</style>