提交 fc14212f authored 作者: lidongxu's avatar lidongxu

登录界面判断手机号是否登录注册过

上级 b234f130
import request from '@/utils/request'
// 提交用户注册信息
export function submitUserInfo(data) {
// 促销员登录
export function loginAPI(data) {
return request({
'url': '/user/wechat/query/temporary/login/phone_openid',
'method': 'post',
'data': data
})
}
// 促销员注册
export function submitUserInfoAPI(data) {
return request({
'url': '/user/wechat/core/temporary/enroll',
'method': 'post',
......
const qlIP = 'http://192.168.131.48:8011'
const apiUrl = `${qlIP}/user/aliyun/signature` // 后台获取阿里云 OSS 权限信息接口
const ossBaseURL = `https://link-promotion-dev.oss-cn-shanghai.aliyuncs.com/`
import config from '@/config'
const apiUrl = `${config.baseUrl}/user/aliyun/signature` // 后台获取阿里云 OSS 权限信息接口
const ossBaseURL = config.ossWebUrl // 阿里云 OSS 域名
// 上传文件
export function uploadFile(fileName, filePath) {
// 发送请求获取签名信息
......
// 应用全局配置
const miniProgram = wx.getAccountInfoSync()
const { envVersion } = miniProgram
module.exports = {
mapBaseUrl: 'https://apis.map.qq.com', // 腾讯地图 API 域名
mapKey: 'EOGBZ-US2RW-YF5RC-OKB5O-R6BUK-2LFVS', // 腾讯地图 API key(TODO:后期换成后台的)
coordtype: 'gcj02', // 坐标类型-国测局坐标(小程序使用的是这个,让百度地图也使用这个)
baseUrl: 'http://promotion.wxl66.cn:8010', // 云 API 域名(TODO: 后期要换个后台使用)
baseUrl: envVersion === 'release' ? '正式地址' : 'http://192.168.100.39:8010',
ossWebUrl: envVersion === 'release' ? '正式地址' : 'https://link-promotion-dev.oss-cn-shanghai.aliyuncs.com/',
wxAppId: 'wx5d89065bb4725557', // 微信小程序 appId (TODO:后期换成后台的)
wxSecret: '7395e91baf6b49ca9b84b1301989f77e', // 微信小程序 appSecret(TODO:后期换成后台的)
// 应用信息
......
......@@ -13,7 +13,6 @@ uni.request({
url: `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${config.wxAppId}&secret=${config.wxSecret}`,
success: function (res) {
setWxAccessToken(res.data.access_token)
store.commit('SET_TOKEN', res.data.access_token)
},
fail: function () {
console.log('请求 access-token 失败');
......
......@@ -3,6 +3,7 @@
"await-to-js": "^3.0.0",
"cos-wx-sdk-v5": "^1.7.2",
"qqmap-wx-jssdk": "^1.0.0",
"uuid": "^11.0.5"
"uuid": "^11.0.5",
"webpack": "^5.97.1"
}
}
......@@ -39,6 +39,7 @@
import { getWxAccessToken } from '@/utils/auth';
import storage from '../utils/storage'
import constant from '../utils/constant';
import { loginAPI } from '@/api'
export default {
data() {
......@@ -51,7 +52,7 @@ export default {
async getPhoneNumber(e) {
this.$modal.loading("登录中,请耐心等待...")
// 通过微信小程序 API 获取手机号
const [,phoneRes] = await uni.request({
const [, phoneRes] = await uni.request({
url: `https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=${getWxAccessToken()}`,
method: 'POST',
data: {
......@@ -60,27 +61,40 @@ export default {
})
// 调用微信登录接口,获取 code
const [,loginRes] = await uni.login({
const [, loginRes] = await uni.login({
provider: 'weixin'
})
// 通过 code 获取 openid
const [,openRes] = await uni.request({
const [, openRes] = await uni.request({
url: `https://api.weixin.qq.com/sns/jscode2session?appid=${this.globalConfig.wxAppId}&secret=${this.globalConfig.wxSecret}&js_code=${loginRes.code}&grant_type=authorization_code`
});
// 获取用户信息-头像等
const [,userRes] = await uni.getUserInfo({
const [, userRes] = await uni.getUserInfo({
provider: 'weixin',
withCredentials: false
})
storage.set(constant.loginPhone, phoneRes.data.phone_info.phoneNumber)
storage.set(constant.loginOpenId, openRes.data.openid)
this.$store.commit('SET_USER', userRes.userInfo)
this.$modal.closeLoading()
this.$tab.reLaunch('/pages/register')
// 调用后台接口,判断手机号是否注册过
// 注册过跳转到首页打卡
try {
await loginAPI({
phone: phoneRes.data.phone_info.phoneNumber,
openId: openRes.data.openid
})
} catch (err) {
// 未注册过跳转到注册信息页面
if (err === 3004) {
storage.set(constant.loginPhone, phoneRes.data.phone_info.phoneNumber)
storage.set(constant.loginOpenId, openRes.data.openid)
this.$store.commit('SET_USER', userRes.userInfo)
this.$modal.closeLoading()
setTimeout(() => {
this.$tab.reLaunch('/pages/register')
}, 1500)
}
}
},
fail: function () {
console.log('后端解密手机号失败');
......
......@@ -32,33 +32,34 @@
return-type="object"
title="正面图片"
v-model="formData.idenFrontPhotoUrl"
@select="selectIdenPhotoFn"></uni-file-picker>
@select="selectIdenPhotoFrontFn"></uni-file-picker>
<uni-file-picker fileMediatype="image"
mode="grid"
limit="1"
return-type="object"
title="反面图片"
v-model="formData.idenReversePhotoUrl"
@select="selectIdenPhotoFn"></uni-file-picker>
@select="selectIdenPhotoBackFn"></uni-file-picker>
</view>
</uni-forms-item>
<button class="bg-blue"
@click="submit('valiForm')">提交信息</button>
<button class="bg-blue register-btn"
@click="submit('valiForm')">注册完成</button>
</uni-forms>
</view>
</template>
<script>
import { mapGetters } from 'vuex'
import { uploadFile } from '../api'
import { uploadFile, submitUserInfoAPI, loginAPI } from '../api'
import storage from '../utils/storage'
import constant from '../utils/constant'
export default {
created() {
this.phone = storage.get(constant.loginPhone)
this.openId = storage.get(constant.loginOpenId)
// this.formData.avatarUrl = this.user.avatarUrl
this.formData.name = this.user.nickName
// this.formData.name = this.user.nickName
},
data() {
return {
......@@ -67,8 +68,10 @@ export default {
formData: {
avatarUrl: undefined,
name: '',
idenFrontPhotoUrl: [],
idenReversePhotoUrl: [],
idenFrontPhotoUrl: undefined, // 组件展示地址
idenReversePhotoUrl: undefined,
idenFrontUrl: '', // 后台需要的 OSS 上身份证图片地址
idenBackUrl: '' // 后台需要的 OSS 上身份证图片地址
},
// 校验规则
rules: {
......@@ -93,28 +96,33 @@ export default {
methods: {
// 选择了头像
async chooseavatarFn(obj) {
console.log(this.phone)
const avatarUrl = await uploadFile(`avatar/${this.phone}.png`, obj.detail.avatarUrl)
this.formData.avatarUrl = avatarUrl
this.formData.avatarUrl = await uploadFile(`avatarAndIdentify/${this.phone}/${this.phone}-avatar.png`, obj.detail.avatarUrl)
},
// 选择了身份证
selectIdenPhotoFn(obj) {
// console.log(obj.tempFiles[0]) // TODO:文件对象-需要自己上传 OSS
this.uploadFileToOSS(obj.tempFiles[0].path)
async selectIdenPhotoFrontFn(obj) {
this.formData.idenFrontUrl = await uploadFile(`avatarAndIdentify/${this.phone}/${this.phone}-frontId.png`, obj.tempFiles[0].path)
},
async selectIdenPhotoBackFn(obj){
this.formData.idenBackUrl = await uploadFile(`avatarAndIdentify/${this.phone}/${this.phone}-backId.png`, obj.tempFiles[0].path)
},
submit(ref) {
this.$refs[ref].validate().then(async res => {
console.log('success', res);
// TODO: 后面需要后台提供促销员信息注册接口
// const result = await submitUserInfo({
// avatarUrl: this.formData.avatarUrl,
// openId: storage.get(constant.loginOpenId),
// name: this.formData.name,
// idenFrontPhotoUrl: this.formData.idenFrontPhotoUrl[0]?.url,
// idenReversePhotoUrl: this.formData.idenReversePhotoUrl[0]?.url,
// phone: storage.get(constant.loginPhone)
// })
// console.log(result)
const result = await submitUserInfoAPI({
avatarUrl: this.formData.avatarUrl,
openId: storage.get(constant.loginOpenId),
name: this.formData.name,
idenFrontPhotoUrl: this.formData.idenFrontUrl,
idenReversePhotoUrl: this.formData.idenBackUrl,
phone: this.phone,
phoneCode: '111111' // 先随便写一个
})
// 单独调用登录拿到 token
const { data } = await loginAPI({
phone: this.phone,
openId: this.openId
})
this.$store.commit('SET_TOKEN', data.token)
uni.showToast({
title: `注册成功`
......@@ -124,11 +132,7 @@ export default {
}).catch(err => {
console.log('err', err);
})
},
//上传文件方法
uploadFileToOSS(filePath, callback) {
},
}
}
}
</script>
......@@ -188,70 +192,8 @@ page {
}
}
.logo-content {
width: 100%;
font-size: 21px;
text-align: center;
padding-top: 15%;
image {
border-radius: 4px;
}
.title {
margin-left: 10px;
}
}
.login-form-content {
text-align: center;
margin: 20px auto;
margin-top: 15%;
width: 80%;
.input-item {
margin: 20px auto;
background-color: #f5f6f7;
height: 45px;
border-radius: 20px;
.icon {
font-size: 38rpx;
margin-left: 10px;
color: #999;
}
.input {
width: 100%;
font-size: 14px;
line-height: 20px;
text-align: left;
padding-left: 15px;
}
}
.register-btn {
margin-top: 40px;
height: 45px;
}
.xieyi {
color: #333;
margin-top: 20px;
}
.login-code {
height: 38px;
float: right;
.login-code-img {
height: 38px;
position: absolute;
margin-left: 10px;
width: 200rpx;
}
}
.register-btn{
border-radius: 50rpx;
}
}
</style>
import storage from './utils/storage'
import constant from './utils/constant'
import { getToken } from '@/utils/auth'
// 登录页面
const loginPage = "/pages/login"
......@@ -22,7 +23,7 @@ list.forEach(item => {
uni.addInterceptor(item, {
invoke(to) {
// 之前是否已经登录过TODO:应该是提交完注册信息后才会有token
if (storage.get(constant.loginPhone)) {
if (getToken()) {
// 如果已经登录了,还想去登录页面直接跳转到首页
if (to.url === loginPage) {
uni.reLaunch({ url: "/pages/index" })
......
......@@ -6,6 +6,17 @@
"ignore": [],
"include": []
},
"env": {
"NODE_ENV": "development",
"development": {
"baseUrl": "http://192.168.100.39:8010",
"ossBucketWebUrl": "https://link-promotion-dev.oss-cn-shanghai.aliyuncs.com/"
},
"production": {
"baseUrl": "",
"ossBucketWebUrl": ""
}
},
"setting": {
"coverView": true,
"es6": true,
......
......@@ -2,13 +2,13 @@ import config from '@/config'
import storage from '@/utils/storage'
import constant from '@/utils/constant'
import { login, logout, getInfo } from '@/api'
import { getWxAccessToken, setWxAccessToken, removeWxAccessToken } from '@/utils/auth'
import { getToken, setToken, removeToken } from '@/utils/auth'
const baseUrl = config.baseUrl
const user = {
state: {
token: getWxAccessToken(),
token: getToken(),
name: storage.get(constant.name),
avatar: storage.get(constant.avatar),
roles: storage.get(constant.roles),
......@@ -19,6 +19,7 @@ const user = {
mutations: {
SET_TOKEN: (state, token) => {
state.token = token
setToken(token)
},
SET_NAME: (state, name) => {
state.name = name
......@@ -43,7 +44,7 @@ const user = {
},
actions: {
// 登录
// 登录(用不上)
Login({ commit }, userInfo) {
const username = userInfo.username.trim()
const password = userInfo.password
......
......@@ -11,3 +11,15 @@ export function setWxAccessToken(token) {
export function removeWxAccessToken() {
return uni.removeStorageSync(WxAccessTokenKey)
}
// 业务 token
const TokenKey = 'Token'
export function getToken() {
return uni.getStorageSync(TokenKey)
}
export function setToken(token) {
return uni.setStorageSync(TokenKey, token)
}
export function removeToken() {
return uni.removeStorageSync(TokenKey)
}
\ No newline at end of file
import store from '@/store'
import config from '@/config'
// import { getToken } from '@/utils/auth'
import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import { toast, showConfirm, tansParams } from '@/utils/common'
......@@ -11,9 +11,9 @@ const request = config => {
// 是否需要设置 token
const isToken = (config.headers || {}).isToken === false
config.header = config.header || {}
// if (getToken() && !isToken) {
// config.header['Authorization'] = 'Bearer ' + getToken()
// }
if (getToken() && !isToken) {
config.header['Authorization'] = 'Bearer ' + getToken()
}
// get请求映射params参数
if (config.params) {
let url = config.url + '?' + tansParams(config.params)
......@@ -50,7 +50,7 @@ const request = config => {
toast(msg)
reject('500')
} else if (code !== 200) {
toast(msg)
// toast(msg)
reject(code)
}
resolve(res.data)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论