提交 96e38f31 authored 作者: lidongxu's avatar lidongxu

'补充完毕登录页面'

上级 782ec655
...@@ -60,7 +60,8 @@ ...@@ -60,7 +60,8 @@
"van-button": "wxcomponents/@vant/weapp/button/index", "van-button": "wxcomponents/@vant/weapp/button/index",
"van-icon": "wxcomponents/@vant/weapp/icon/index", "van-icon": "wxcomponents/@vant/weapp/icon/index",
"van-image": "wxcomponents/@vant/weapp/image/index", "van-image": "wxcomponents/@vant/weapp/image/index",
"van-uploader": "wxcomponents/@vant/weapp/uploader/index" "van-uploader": "wxcomponents/@vant/weapp/uploader/index",
"van-checkbox": "wxcomponents/@vant/weapp/checkbox/index"
} }
} }
} }
\ No newline at end of file
...@@ -9,27 +9,56 @@ ...@@ -9,27 +9,56 @@
<view class="login-form-content"> <view class="login-form-content">
<!-- 登录按钮 --> <!-- 登录按钮 -->
<view class="action-btn"> <view class="action-btn">
<view class="mark-btn"
@click="loginMark"
v-if="!agreeProtocol"></view>
<button open-type="getPhoneNumber" <button open-type="getPhoneNumber"
@getphonenumber="getPhoneNumber" @getphonenumber="getPhoneNumber"
class="login-btn cu-btn block bg-blue lg round">手机号登录</button> class="login-btn cu-btn block bg-blue lg round">手机号登录</button>
</view> </view>
<view class="xieyi text-center"> <view class="xieyi text-center">
<text class="text-grey1">登录即代表同意</text> <van-checkbox :value="agreeProtocol"
@change="agreeFn"></van-checkbox>
<text class="text-grey1">阅读并同意协议</text>
<text @click="$refs.agreementDialog.open()" <text @click="$refs.agreementDialog.open()"
class="text-blue">《用户协议》</text> class="text-blue">《用户协议》</text>
</view> </view>
</view> </view>
<uni-popup ref="agreementDialog" <uni-popup ref="agreementDialog"
mask-click
type="dialog"> type="dialog">
<uni-popup-dialog type="info" <uni-popup-dialog type="info"
confirmText="同意" confirmText="同意"
:showClose="false" @confirm="dialogConfirm"
title="用户协议"> title="小卤通 小程序隐私保护指引">
<p>本指引是小卤通小程序开发者 北京王小卤网络科技有限公司(以下简称“开发者”)为处理你的个人信息而制定。</p>
<h4>开发者处理的信息</h4>
<p>根据法律规定,开发者仅处理实现小程序功能所必要的信息。</p>
<ul class="agreement_ul"> <ul class="agreement_ul">
<li>1.当前小程序仅限王小卤-促销员活动上报使用</li> <li>为了注册促销员账号,开发者将在获取你的明示同意后,收集你的微信昵称、头像。</li>
<li>2.小程序需经您同意,获取您的手机号登录当前系统</li> <li>为了锁定上下班打卡地点,开发者将在获取你的明示同意后,收集你的位置信息。</li>
<li>3.您的手机号仅用于系统登录,领导联系"</li> <li>开发者 收集你选中的照片或视频信息,用于上传推广照片。</li>
<li>为了拍摄推广照片,开发者将在获取你的明示同意后,访问你的摄像头。</li>
<li>为了使用手机号注册/登录小程序,开发者将在获取你的明示同意后,收集你的手机号。</li>
</ul> </ul>
<h4>第三方插件信息/SDK信息</h4>
<p>关于你的个人信息,你可以通过以下方式与开发者联系,行使查阅、复制、更正、删除等法定权利。
若你在小程序中注册了账号,你可以通过以下方式与开发者联系,申请注销你在小程序中使用的账号。在受理你的申请后,开发者承诺在十五个工作日内完成核查和处理,并按照法律法规要求处理你的相关信息。</p>
<ul class="agreement_ul">
<li>邮箱:liqiulin@wangxiaolu.com.cn</li>
</ul>
<h4>你的权益</h4>
<p>关于你的个人信息,你可以通过以下方式与开发者联系,行使查阅、复制、更正、删除等法定权利。</p>
<h4>开发者对信息的存储</h4>
<p>开发者将会在本指引所明示的用途内使用收集的信息
如开发者使用你的信息超出本指引目的或合理范围,开发者必须在变更使用目的或范围前,再次以小程序通知方式告知并征得你的明示同意。</p>
<h4>信息的使用规则</h4>
<p>开发者将会在本指引所明示的用途内使用收集的信息
开发者承诺,不会对外公开披露你的信息,如必须公开披露时,开发者应当向你告知公开披露的目的、披露信息的类型及可能涉及的信息,并征得你的单独同意。</p>
<h4>信息对外提供</h4>
<p>邮箱 : liqiulin@wangxiaolu.com.cn</p>
<p>更新日期:2025-02-26</p>
<p>生效日期:2025-02-26</p>
</uni-popup-dialog> </uni-popup-dialog>
</uni-popup> </uni-popup>
</view> </view>
...@@ -43,57 +72,59 @@ import constant from '../utils/constant'; ...@@ -43,57 +72,59 @@ import constant from '../utils/constant';
export default { export default {
data() { data() {
return { return {
globalConfig: getApp().globalData.config globalConfig: getApp().globalData.config,
agreeProtocol: false
} }
}, },
methods: { methods: {
loginMark() {
this.$modal.msgError('请先勾选同意协议')
},
// 手机号登录 // 手机号登录
async getPhoneNumber(e) { async getPhoneNumber(e) {
// 判断是否提供手机号
if (!e.detail.code) {
return this.$modal.msgError("请选择手机号登录")
}
this.$modal.loading("登录中,请耐心等待...") this.$modal.loading("登录中,请耐心等待...")
// 通过微信小程序 API 获取手机号 // 通过微信小程序 API 获取手机号
const [, phoneRes] = await uni.request({ const [err, { data: { phone_info: { phoneNumber } } }] = await uni.request({
url: `https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=${getWxAccessToken()}`, url: `https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=${getWxAccessToken()}`,
method: 'POST', method: 'POST',
data: { data: {
code: e.detail.code code: e.detail.code
} }
}) })
if (err) return this.$modal.msgError('微信 API 获取手机号出错')
// 调用微信登录接口,获取 openID // 调用微信登录接口,获取 openID
const openId = await this.$store.dispatch('WxLogin') const openId = await this.$store.dispatch('getOpenId')
// 调用后台接口,判断手机号是否注册过 // 调用自己后台登录接口
// 注册过跳转到首页打卡,否则去注册页面 const loginRes = await this.$store.dispatch('Login', { phoneNumber, openId })
const res = await this.$store.dispatch('Login', { phoneNumber: phoneRes.data.phone_info.phoneNumber, openId: openId })
// 手机号从未注册过-需要填写资料完成注册
// 未注册过跳转到注册信息页面 if (loginRes.code === 3004) {
if (res.code === 3004) {
setTimeout(() => { setTimeout(() => {
this.$tab.reLaunch('/pages/register') this.$tab.reLaunch('/pages/register')
}, 1500) }, 1500)
} else { } else {
// 之前注册提交过资料,直接登录成功去首页
storage.set(constant.loginPhone, phoneNumber)
this.$tab.reLaunch('/pages/home/index') this.$tab.reLaunch('/pages/home/index')
} }
storage.set(constant.loginPhone, phoneRes.data.phone_info.phoneNumber)
this.$modal.closeLoading() this.$modal.closeLoading()
}, },
fail: function () { // 同意协议
console.log('后端解密手机号失败'); dialogConfirm() {
this.agreeProtocol = true
},
agreeFn(e) {
this.agreeProtocol = e.detail
} }
}, }
// // 登录成功后,处理函数
// async loginSuccess(result) {
// // 设置用户信息
// await this.$store.dispatch('GetInfo')
// await this.getAuth()
// this.$tab.reLaunch('/pages/home/index')
// },
// 登录成功后,开始获取各种权限
// async getAuth() {
// // 获取地址位置
// return this.$store.dispatch('GetLocation')
// }
} }
</script> </script>
...@@ -109,6 +140,17 @@ page { ...@@ -109,6 +140,17 @@ page {
} }
} }
.uni-popup-dialog {
height: 70vh;
overflow: scroll;
.uni-dialog-content {
display: flex;
flex-direction: column !important;
}
}
.normal-login-container { .normal-login-container {
width: 100%; width: 100%;
...@@ -130,6 +172,20 @@ page { ...@@ -130,6 +172,20 @@ page {
margin-top: 15%; margin-top: 15%;
width: 80%; width: 80%;
.action-btn {
position: relative;
.mark-btn {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: transparent;
z-index: 10000;
}
}
.input-item { .input-item {
margin: 20px auto; margin: 20px auto;
background-color: #f5f6f7; background-color: #f5f6f7;
...@@ -164,6 +220,8 @@ page { ...@@ -164,6 +220,8 @@ page {
.xieyi { .xieyi {
color: #333; color: #333;
margin-top: 20px; margin-top: 20px;
display: flex;
justify-content: center;
} }
.login-code { .login-code {
......
<template> <template>
<view class="normal-register-container"> <view class="normal-register-container">
<!-- 基础表单校验 --> <!-- 基础表单校验 -->
<uni-forms ref="valiForm" <uni-forms ref="valiForm"
:rules="rules" :rules="rules"
...@@ -44,6 +45,7 @@ ...@@ -44,6 +45,7 @@
</uni-forms-item> </uni-forms-item>
<button class="bg-blue register-btn" <button class="bg-blue register-btn"
@click="submit('valiForm')">注册完成</button> @click="submit('valiForm')">注册完成</button>
<view>本手机号第一次注册,请补充资料完成注册登录</view>
</uni-forms> </uni-forms>
</view> </view>
</template> </template>
...@@ -56,6 +58,7 @@ import constant from '../utils/constant' ...@@ -56,6 +58,7 @@ import constant from '../utils/constant'
export default { export default {
created() { created() {
this.phone = storage.get(constant.loginPhone) this.phone = storage.get(constant.loginPhone)
this.openId = storage.get(constant.loginOpenId) this.openId = storage.get(constant.loginOpenId)
// this.formData.avatarUrl = this.user.avatarUrl // this.formData.avatarUrl = this.user.avatarUrl
...@@ -102,7 +105,7 @@ export default { ...@@ -102,7 +105,7 @@ export default {
async selectIdenPhotoFrontFn(obj) { async selectIdenPhotoFrontFn(obj) {
this.formData.idenFrontUrl = await uploadFile(`avatarAndIdentify/${this.phone}/${this.phone}-frontId.png`, obj.tempFiles[0].path) this.formData.idenFrontUrl = await uploadFile(`avatarAndIdentify/${this.phone}/${this.phone}-frontId.png`, obj.tempFiles[0].path)
}, },
async selectIdenPhotoBackFn(obj){ async selectIdenPhotoBackFn(obj) {
this.formData.idenBackUrl = await uploadFile(`avatarAndIdentify/${this.phone}/${this.phone}-backId.png`, obj.tempFiles[0].path) this.formData.idenBackUrl = await uploadFile(`avatarAndIdentify/${this.phone}/${this.phone}-backId.png`, obj.tempFiles[0].path)
}, },
submit(ref) { submit(ref) {
...@@ -193,7 +196,7 @@ page { ...@@ -193,7 +196,7 @@ page {
} }
} }
.register-btn{ .register-btn {
border-radius: 50rpx; border-radius: 50rpx;
} }
} }
......
...@@ -9,9 +9,8 @@ ...@@ -9,9 +9,8 @@
export default { export default {
mounted() { mounted() {
setTimeout(() => { setTimeout(() => {
// 跳转到登录页面
this.$tab.redirectTo('/pages/login') this.$tab.redirectTo('/pages/login')
}, 1500) }, 2000)
} }
} }
</script> </script>
......
...@@ -56,18 +56,18 @@ export default { ...@@ -56,18 +56,18 @@ export default {
// 获取推广照片列表 // 获取推广照片列表
async getPromotionPhotoFn() { async getPromotionPhotoFn() {
const res = await getPromotionPhotoRecordAPI(this.$store.getters.user.id) const res = await getPromotionPhotoRecordAPI(this.$store.getters.user.id)
this.afterTryFileList = res.data.tgscPhotoUrls?.map(o => ({ this.afterTryFileList = res.data.tgscPhotoUrls ? res.data.tgscPhotoUrls?.map(o => ({
url: o, url: o,
type: 'image' type: 'image'
})) })) : []
this.afterInterFileList = res.data.tghdPhotoUrls?.map(o => ({ this.afterInterFileList = res.data.tghdPhotoUrls ? res.data.tghdPhotoUrls?.map(o => ({
url: o, url: o,
type: 'image' type: 'image'
})) })) : []
this.afterDealFileList = res.data.tgcjPhotoUrls?.map(o => ({ this.afterDealFileList = res.data.tgcjPhotoUrls ? res.data.tgcjPhotoUrls?.map(o => ({
url: o, url: o,
type: 'image' type: 'image'
})) })) : []
}, },
// 推广试吃 // 推广试吃
async afterTry(event) { async afterTry(event) {
......
...@@ -49,26 +49,29 @@ const user = { ...@@ -49,26 +49,29 @@ const user = {
actions: { actions: {
// 微信登录(获取 openId) // 微信登录(获取 openId)
WxLogin({ commit }) { getOpenId({ commit }) {
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
// 调用微信登录接口,获取一次性 code // 调用微信登录接口,获取一次性 code
const [, loginRes] = await uni.login({ const [loginErr, loginRes] = await uni.login({
provider: 'weixin' provider: 'weixin'
}) })
// 通过 code 获取永久唯一身份标识 openid // 通过 code 获取永久唯一身份标识 openid
const [, openRes] = await uni.request({ const [openErr, openRes] = await uni.request({
url: `https://api.weixin.qq.com/sns/jscode2session?appid=${config.wxAppId}&secret=${config.wxSecret}&js_code=${loginRes.code}&grant_type=authorization_code` url: `https://api.weixin.qq.com/sns/jscode2session?appid=${config.wxAppId}&secret=${config.wxSecret}&js_code=${loginRes.code}&grant_type=authorization_code`
}); });
commit('SET_OPENID', openRes.data.openid) if (loginErr || openErr) {
resolve(openRes.data.openid) reject(loginErr || openErr)
} else {
commit('SET_OPENID', openRes.data.openid)
resolve(openRes.data.openid)
}
}) })
}, },
// 手机号+openId 促销员登录,获取 token 和个人信息 // 手机号+openId 促销员登录,获取 token 和个人信息
Login({ commit }, {phoneNumber, openId}) { Login({ commit }, { phoneNumber, openId }) {
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
const { data } = await loginAPI({ const { data } = await loginAPI({
phone: phoneNumber, phone: phoneNumber,
......
...@@ -51,7 +51,7 @@ const request = config => { ...@@ -51,7 +51,7 @@ const request = config => {
toast(msg) toast(msg)
reject('500') reject('500')
} else if (code !== 200) { } else if (code !== 200) {
// toast(msg) toast(msg)
if (code === 3017) { if (code === 3017) {
console.log('登录状态 token 过期了') console.log('登录状态 token 过期了')
// 重新登录 // 重新登录
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论