登录、用户信息调试

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

View File

@ -9,7 +9,11 @@ export const loginByMP = (data = {})=> {
return coreRequest(url.loginByMP, data) return coreRequest(url.loginByMP, data)
} }
export const getInfoByApp = (data = {})=> { export const bindPhone = (data = {}, option = {})=> {
return coreRequest(url.getInfoByApp, data, {}, 'GET') 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)=> { export default (path)=> {
return `/sta_back/images/${path}` // return `/sta_back/images/${path}`
// return `https://oms.tanex56.com/static/sapp/images/${path}` return `https://oms.tanex56.com/static/sapp/images/${path}`
} }
export const getCdnRoot = (path)=> { export const getCdnRoot = (path)=> {

View File

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

View File

@ -65,8 +65,8 @@ let coreRequest = function(url, params = {}, options = {}, methodType, coreParam
} }
url = `${host}${url}` url = `${host}${url}`
options = { options = {
...options,
...comReqData.header, ...comReqData.header,
...options,
} }
return dealRequest({ 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) => { return new Promise((resolve, reject) => {
let comReqData = getCommonReqData() let comReqData = getCommonReqData()
uni.uploadFile({ uni.uploadFile({
@ -55,7 +55,8 @@ const doRequest = function (file) {
fail() { fail() {
showToast("文件上传失败") showToast("文件上传失败")
reject() reject()
} },
...opt
}) })
}) })
} }
@ -104,5 +105,6 @@ const coreMultiUploadFile = async (action = 'chooseImage', opt = {})=> {
export { export {
coreUploadFile, coreUploadFile,
coreMultiUploadFile coreMultiUploadFile,
doRequest
} }

View File

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

View File

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

View File

@ -13,35 +13,137 @@
</view> </view>
<view style="margin-top: 90rpx;" class="pl-30 pr-30"> <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;"> <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>
</view> </view>
</view> </view>
</template> </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 { export default {
data() { data() {
return { return {
pageLoading: true,
submitLogin: {
code: '',
nickName: '',
avatarUrl: '',
phoneNumber: '',
},
submitValidConfig: {
nickName: { required: true, requiredMsg: '昵称不能为空' },
avatarUrl: { required: true, requiredMsg: '头像不能为空' },
phoneNumber: { required: true, requiredMsg: '手机号不能为空' },
},
token: '',
} }
}, },
computed: { computed: {
}, },
onLoad() { created() {
this.initData()
}, },
methods: { 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> </script>
@ -60,4 +162,23 @@
left: 0; left: 0;
right: 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> </style>

View File

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

View File

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

View File

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

View File

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

View File

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