登录、用户信息调试

This commit is contained in:
aihe 2024-07-14 01:06:04 +08:00
parent 22f31116dd
commit bdeb2f566f
14 changed files with 169 additions and 37 deletions

View File

@ -6,7 +6,8 @@ export default {
uploadFile: '/common/ossUpload',
loginByApp: `/loginByApp`, // 登录
loginByMP: `/loginByWeixin`, // 小程序登录 -- DONE
getInfoByApp: `/getInfoByApp`,// 获取用户基本信息
bindPhone: `/bindPhoneByWx`, // 绑定手机号 -- DONE
getInfoByApp: `/getInfoByWxApp`,// 获取用户基本信息 -- DONE
getStaffQRCodePng: `/emis/emisStaff/getStaffQRCodePng`,// 获取用户二维码
getEmisCountry: `/emis/emisCountry/listSimple`, // 获取国家列表
getEmisRegion: `/emis/emisRegion/listSimple`,// 获取省市区列表

View File

@ -9,7 +9,11 @@ export const loginByMP = (data = {})=> {
return coreRequest(url.loginByMP, data)
}
export const getInfoByApp = (data = {})=> {
return coreRequest(url.getInfoByApp, data, {}, 'GET')
export const bindPhone = (data = {}, option = {})=> {
return coreRequest(url.bindPhone, data, option)
}
export const getInfoByApp = (data = {}, option = {})=> {
return coreRequest(url.getInfoByApp, data, option, 'GET')
}

View File

@ -1,6 +1,6 @@
export default (path)=> {
return `/sta_back/images/${path}`
// return `https://oms.tanex56.com/static/sapp/images/${path}`
// return `/sta_back/images/${path}`
return `https://oms.tanex56.com/static/sapp/images/${path}`
}
export const getCdnRoot = (path)=> {

View File

@ -2,7 +2,6 @@ import { goto, getImageTempFilePath } from "./untool";
import { showToast, showLoading, hideLoading, downloadFile } from "./untool"
import { setSessionXToken, getSessionXToken } from "@/session"
import { textEncoder, textDecoder } from "./util"
const getCommonReqData = ()=> {
const xToken = getSessionXToken()
return {

View File

@ -65,8 +65,8 @@ let coreRequest = function(url, params = {}, options = {}, methodType, coreParam
}
url = `${host}${url}`
options = {
...options,
...comReqData.header,
...options,
}
return dealRequest({

View File

@ -30,7 +30,7 @@ const chooseFile = function (action = 'chooseImage', opt = {}) {
})
}
const doRequest = function (file) {
const doRequest = function (file, opt = {}) {
return new Promise((resolve, reject) => {
let comReqData = getCommonReqData()
uni.uploadFile({
@ -55,7 +55,8 @@ const doRequest = function (file) {
fail() {
showToast("文件上传失败")
reject()
}
},
...opt
})
})
}
@ -104,5 +105,6 @@ const coreMultiUploadFile = async (action = 'chooseImage', opt = {})=> {
export {
coreUploadFile,
coreMultiUploadFile
coreMultiUploadFile,
doRequest
}

View File

@ -1,5 +1,5 @@
import { showToast } from "./untool"
const checkParams = (param, validConfig)=> {
const checkParams = (param, validConfig, showErrMsg = true)=> {
return new Promise((resolve)=> {
let errMsg = ''
Object.keys(validConfig).map(key=> {
@ -13,7 +13,7 @@ const checkParams = (param, validConfig)=> {
}
})
if(errMsg) {
showToast(errMsg)
showErrMsg && showToast(errMsg)
} else {
resolve()
}

View File

@ -62,12 +62,7 @@
},
}
},
onShareAppMessage() {
return {
title: '',
}
},
onLoad() {
created() {
let info = getSessionLoginInfo()
let { remberPassport } = info
if(remberPassport[0]) {

View File

@ -13,35 +13,137 @@
</view>
<view style="margin-top: 90rpx;" class="pl-30 pr-30">
<u-row custom-style="margin-top: 30rpx;">
<u-input type="nickname" v-model="submitLogin.nickName" placeholder="昵称"
color="#fff" font-size="30" placeholder-style="color: #FFF;"
custom-style="padding: 20rpx 60rpx;background: rgba(255,255,255,0.2); border: 2px solid #FFFFFF;border-radius: 16rpx;"
></u-input>
<view class="ml-40">
<button class="btn-open avatar-wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
<u-image v-if="submitLogin.avatarUrl" :src="submitLogin.avatarUrl" width="100" height="100" mode="aspectFill"/>
<view v-else class="avatar-empty">头像</view>
</button>
</view>
</u-row>
<u-row custom-style="margin-top: 30rpx;">
<u-input v-model="submitLogin.phoneNumber" placeholder="手机号"
color="#fff" font-size="30"
custom-style="padding: 20rpx 60rpx;background: rgba(255,255,255,0.2); border: 2px solid #FFFFFF;border-radius: 16rpx;"
placeholder-style="color: #FFF;"
>
<template #suffix>
<button class="btn-open clr-wht font-28" open-type="getPhoneNumber"
@getphonenumber="getPhoneNumber" style="background: rgba(255,255,255,0.2);"
>
获取手机号
</button>
</template>
</u-input>
</u-row>
<view style="margin-top: 70rpx;">
<u-button @click="handleLogin" custom-style="height:90rpx;font-size:32rpx;color: #B12D29;font-weight: bold;;box-shadow: 0rpx 12rpx 21rpx 0rpx rgba(177,45,41,0.32);border-radius: 16rpx;">登录</u-button>
<u-button v-if="!pageLoading" @click="handleConfirmLogin" custom-style="height:90rpx;font-size:32rpx;color: #B12D29;font-weight: bold;;box-shadow: 0rpx 12rpx 21rpx 0rpx rgba(177,45,41,0.32);border-radius: 16rpx;">登录</u-button>
</view>
</view>
</view>
</view>
</template>
<script>
import {
mapState,
mapMutations,
mapActions
} from 'vuex'
const univerifyInfoKey = 'univerifyInfo';
<script>
import { uniPromiseApi, showLoading, hideLoading } from "@/common/untool"
import { USERKEY } from "@/store/actionKey"
import { checkParams } from "@/common/validate"
import * as apiService from "@/common/api"
import { getCommonReqData } from "@/common/manageServer"
import { doRequest } from "@/common/upload"
export default {
data() {
return {
pageLoading: true,
submitLogin: {
code: '',
nickName: '',
avatarUrl: '',
phoneNumber: '',
},
submitValidConfig: {
nickName: { required: true, requiredMsg: '昵称不能为空' },
avatarUrl: { required: true, requiredMsg: '头像不能为空' },
phoneNumber: { required: true, requiredMsg: '手机号不能为空' },
},
token: '',
}
},
computed: {
},
onLoad() {
created() {
this.initData()
},
methods: {
commodHeaders(){
return {
...getCommonReqData().header,
"Oms-X-Token": this.token,
}
},
async initData(){
await this.autoLogin()
if(this.token) {
// 如果用户信息已绑定,直接触发登录成功
const res = await apiService.getInfoByApp({ _loading: true }, this.commodHeaders())
let userInfo = res?.user || {}
Object.assign(this.submitLogin , {
nickName: userInfo.nickName,
avatarUrl: userInfo.avatar,
phoneNumber: userInfo.phonenumber,
})
await checkParams(this.submitLogin, this.submitValidConfig, false)
this.loginSucceed()
}
this.pageLoading = false
},
async onChooseAvatar(res) {
let tmpFilePath = res.detail.avatarUrl
let upRes = await doRequest(tmpFilePath, { header: this.commodHeaders() })
this.submitLogin.avatarUrl = upRes.url
},
async autoLogin(){
let token = ''
showLoading()
try{
let lg = await uniPromiseApi('login', {})
let code = lg.res.code
this.submitLogin.code = code
let res = await apiService.loginByMP(this.submitLogin)
token = res.token
this.token = token
}catch(e){
console.error("autoLogin error=====", e)
}
hideLoading()
return token
},
async getPhoneNumber(e){
let bPhoneRes = await apiService.bindPhone(e?.detail || {}, this.commodHeaders())
this.submitLogin.phoneNumber = bPhoneRes.phone
},
handleNicknamereview(e){
console.log(e)
},
async handleConfirmLogin() {
await checkParams(this.submitLogin, this.submitValidConfig)
await this.autoLogin()
this.loginSucceed()
},
async loginSucceed(){
let token = this.token
await this.$store.dispatch(USERKEY.UPDATETOKEN, { token })
this.$emit("succeedBack")
}
}
}
</script>
@ -60,4 +162,23 @@
left: 0;
right: 0;
}
.btn-open{
display: inline-block;
height: auto;
margin: 0;
min-height: auto;
padding: 0;
line-height: normal;
background: inherit;
}
.avatar-empty{
width: 100rpx;
height: 100rpx;
line-height: 100rpx;
background-color: #fff;
text-align: center;
border-radius: 10rpx;
font-size: 28rpx;
color: $uni-color-primary;
}
</style>

View File

@ -8,7 +8,7 @@
import { USERKEY } from "@/store/actionKey"
import { getSessionLoginInfo, setSessionLoginInfo, setSessionXToken } from "@/session"
import { encrypt } from "@/common/libs/jsencrypt_utils"
import { promiseTimeout } from "@/common/untool"
import { promiseTimeout, showToast } from "@/common/untool"
// #ifdef MP
import LoginComponent from "@/components/buns-api/login/mp-login"
@ -41,6 +41,7 @@
await promiseTimeout(300)
await this.$store.dispatch(USERKEY.GETUSERINFO)
this.goto("tabBar/sending/sending")
showToast("登录成功")
}
}
}

View File

@ -159,7 +159,6 @@
},
methods: {
getCdnUrl,
initData() {
},

View File

@ -2,6 +2,7 @@ export const USERKEY = {
LOGIN: "LOGIN",
GETUSERINFO: "GETUSERINFO",
LOGOUT: "LOGOUT",
UPDATETOKEN: "UPDATETOKEN",
}

View File

@ -35,6 +35,16 @@ export default {
// }
},
actions: {
async [USERKEY.UPDATETOKEN]({
dispatch,
commit,
state,
rootState
}, options) {
let { token } = options
setSessionXToken(token)
commit(USERKEY.LOGIN, token)
},
async [USERKEY.LOGIN]({
dispatch,
commit,
@ -44,9 +54,7 @@ export default {
let token = state.token
const resLgn = await apiService.loginByApp(options)
token = resLgn.token
setSessionXToken(token)
commit(USERKEY.LOGIN, token)
dispatch(USERKEY.UPDATETOKEN, { token })
},
async [USERKEY.LOGOUT]({
dispatch,
@ -81,9 +89,6 @@ export default {
permissions: resInfo.permissions
}
let resQr = await apiService.getStaffQRCodePng()
info.qrCodeImgUrl = resQr?.data?.fileUrl
commit(USERKEY.GETUSERINFO, info)
},

View File

@ -44,6 +44,7 @@
@focus="onFocus"
@confirm="onConfirm"
@keyboardheightchange="onkeyboardheightchange"
@nicknamereview="onNicknamereview"
/>
</view>
<view
@ -274,6 +275,9 @@ export default {
onkeyboardheightchange(event) {
this.$emit("keyboardheightchange", event);
},
onNicknamereview(event){
this.$emit("nicknamereview", event);
},
// 内容发生变化,进行处理
valueChange() {
const value = this.innerValue;