Files

197 lines
3.8 KiB
Vue
Raw Normal View History

2023-11-14 17:21:03 +08:00
<template>
<layout class="login">
<uv-navbar
:fixed="false"
title="登录"
left-arrow
@leftClick="goBack"
/>
<blank size="30"></blank>
<container>
<view class="card paddingH-10">
<uv-form
labelPosition="left"
@submit="handleLogin"
>
<uv-form-item borderBottom>
<uv-input
v-model="mobile"
border="none"
placeholder="请输入用户名"
>
</uv-input>
</uv-form-item>
<uv-form-item borderBottom>
<uv-input
v-model="code"
border="none"
placeholder="请输入验证码"
>
</uv-input>
<template #right>
<verification
:mobile="mobile"
scene="1"
/>
</template>
</uv-form-item>
</uv-form>
</view>
<view class="form-buttons">
<uv-button
round
block
type="primary"
@tap="handleLogin"
>
登录
</uv-button>
</view>
<!-- #ifdef MP -->
<view class="form-buttons">
<uv-button
open-type="getPhoneNumber"
@getphonenumber="getPhoneNumber"
>微信登录
</uv-button>
</view>
<!-- #endif -->
</container>
<blank size="15"></blank>
<view class="protocol">
登录代表同意<span class="protocol-main">用户协议</span><span
class="protocol-main"
>隐私政策</span>并授权使用您的账号信息如昵称头像收获地址以便您统一管理
</view>
</layout>
</template>
<script setup>
import { ref } from 'vue'
import { storeToRefs } from 'pinia'
import { smsLogin, weixinLogin } from '@/api/auth'
2024-02-22 18:37:23 +08:00
import { useMainStore } from '@/store/modules/useMainStore'
2023-11-14 17:21:03 +08:00
import { onLoad } from '@dcloudio/uni-app'
import { useRouter } from "@/hooks/useRouter";
const {goBack} = useRouter()
const mobile = ref('')
const code = ref('')
const loginCode = ref('')
const store = useMainStore()
const {user} = storeToRefs(store)
onLoad(async () => {
// #ifdef MP
uni.login({
provider: 'weixin'
}).then(res => {
loginCode.value = res.code
});
// #endif
})
const handleLogin = async () => {
if (!mobile.value) {
uni.showToast({
title: '手机号不能为空',
duration: 2000
});
return
}
if (!mobile.value) {
uni.showToast({
title: '验证码不能为空',
duration: 2000
});
return
}
uni.showLoading({
title: '登录中'
});
let loginInfo = await smsLogin({
"mobile": mobile.value,
"code": code.value,
})
if (loginInfo) {
await store.setAccessToken(loginInfo)
uni.hideLoading();
uni.switchTab({
url: '/root/index/index'
2023-11-14 17:21:03 +08:00
})
}
}
const getPhoneNumber = async ({code}) => {
if (code) {
const loginInfo = await weixinLogin({
phoneCode: code,
loginCode: loginCode.value
})
await store.setAccessToken(loginInfo)
uni.switchTab({
url: '/root/index/index'
2023-11-14 17:21:03 +08:00
})
}
}
</script>
<style lang="scss">
.user-card {
padding: 50rpx 0;
}
.avatar-box {
display: flex;
align-items: center;
.avatar {
width: 120rpx;
height: 120rpx;
background: #FFFFFF;
border-radius: 50%;
opacity: 1;
margin-right: 30rpx;
}
.avatar-name {
font-size: 34rpx;
color: #333333;
}
}
.protocol {
padding: 0 34rpx;
position: absolute;
bottom: 0;
left: 0;
right: 0;
color: #999999;
font-size: 24rpx;
line-height: 40rpx;
margin-bottom: constant(safe-area-inset-bottom);
margin-bottom: env(safe-area-inset-bottom);
&-main {
color: #ee6d46;
}
}
</style>