165 lines
4.4 KiB
TypeScript
165 lines
4.4 KiB
TypeScript
import { useEffect, useState } from 'react'
|
|
import * as Api from "../api/access"
|
|
import { useSearchParams } from 'react-router-dom';
|
|
import { useAuthStore } from '../store/AuthStore';
|
|
import wx from 'weixin-js-sdk'
|
|
|
|
function Home() {
|
|
const [tips, setTips] = useState("登陆中,请稍后")
|
|
let [urlParams] = useSearchParams();
|
|
const authStore = useAuthStore()
|
|
|
|
const navigateAccessPage = async () => {
|
|
try {
|
|
const res = await Api.getAccessPage()
|
|
if (res.code !== 200) {
|
|
throw new Error(res.message);
|
|
}
|
|
|
|
window.location.href = res.data.url
|
|
|
|
} catch (e: any) {
|
|
setTips("获取活动页失败")
|
|
console.error(e.message);
|
|
}
|
|
}
|
|
|
|
const recordState = async () => {
|
|
try {
|
|
const code = urlParams.get('code') || "null"
|
|
const state = urlParams.get('state') || "err"
|
|
const customer_id = authStore.tid || 0
|
|
const customer_openid = authStore.clientOpenid || "null"
|
|
const res = await Api.recordState({
|
|
code: code,
|
|
state: state,
|
|
customer_id: customer_id,
|
|
customer_openid: customer_openid,
|
|
})
|
|
if (res.code !== 200) {
|
|
throw new Error(res.message);
|
|
}
|
|
} catch (e: any) {
|
|
console.error(e.message);
|
|
}
|
|
}
|
|
|
|
const navigateActivityPage = async (customer_id: number) => {
|
|
try {
|
|
const res = await Api.getActivityPage(customer_id)
|
|
if (res.code !== 200) {
|
|
throw new Error(res.message);
|
|
}
|
|
|
|
const activityCode = authStore.activityCode
|
|
const userId = authStore.userId
|
|
const corpId = authStore.corpId
|
|
authStore.clear()
|
|
|
|
let url = ""
|
|
if (activityCode != "") {
|
|
url = res.data.url + `?activityCode=${activityCode}&userId=${userId}&corpId=${corpId}`
|
|
} else {
|
|
url = res.data.url
|
|
}
|
|
|
|
if (res.data.type == "h5") {
|
|
window.location.href = url
|
|
} else {
|
|
wx.miniProgram.navigateTo({
|
|
url: url
|
|
})
|
|
}
|
|
} catch (e: any) {
|
|
console.error(e.message);
|
|
}
|
|
}
|
|
|
|
const bindIds = async (code:string) => {
|
|
try {
|
|
//检查是否有tid和openid
|
|
const tid = authStore.tid
|
|
const openid = authStore.clientOpenid
|
|
const phone = authStore.phone
|
|
const sign = authStore.sign
|
|
const activityCode = authStore.activityCode || ""
|
|
const userId = authStore.userId || ""
|
|
const corpId = authStore.corpId || ""
|
|
const timestamp = authStore.timeStamp || ""
|
|
|
|
if (tid && openid && sign || tid && phone && sign) {
|
|
authStore.setCode(code)
|
|
const res = await Api.bindIds({
|
|
code: code,
|
|
client_openid: openid,
|
|
phone: phone,
|
|
client_sign: sign,
|
|
customer_id: tid,
|
|
activity_id: 1,
|
|
activity_code: activityCode,
|
|
user_id: userId,
|
|
corp_id: corpId,
|
|
timestamp: timestamp,
|
|
})
|
|
if (res.code !== 200) {
|
|
throw new Error(res.message);
|
|
}
|
|
navigateActivityPage(tid)
|
|
} else {
|
|
setTips("授权参数失效,请再次尝试")
|
|
}
|
|
} catch (e: any) {
|
|
console.error(e.message);
|
|
setTips("授权失败")
|
|
}
|
|
}
|
|
|
|
useEffect(() => {
|
|
const tid = parseInt(urlParams.get('tid') || "0")
|
|
const openid = urlParams.get('openid') || urlParams.get('openId')
|
|
const phone = urlParams.get('phone')
|
|
const sign = urlParams.get('sign')
|
|
//裂变专用参数
|
|
const activityCode = urlParams.get('activityCode') || ""
|
|
const userId = urlParams.get('userId') || ""
|
|
const corpId = urlParams.get('corpId') || ""
|
|
const timestamp = urlParams.get('timestamp') || ""
|
|
|
|
authStore.setActivityCode(activityCode)
|
|
authStore.setUserId(userId)
|
|
authStore.setCorpId(corpId)
|
|
authStore.setTimeStamp(timestamp)
|
|
|
|
if (tid && openid && sign) {
|
|
//初次登陆或者重新登陆
|
|
authStore.setTid(tid)
|
|
authStore.setClientOpenId(openid)
|
|
authStore.setSign(sign)
|
|
navigateAccessPage()
|
|
} else if (tid && phone && sign) {
|
|
//绑定手机号
|
|
authStore.setTid(tid)
|
|
authStore.setPhone(phone)
|
|
authStore.setSign(sign)
|
|
navigateAccessPage()
|
|
} else {
|
|
//微信跳回
|
|
const code = urlParams.get('code')
|
|
if (code) {
|
|
bindIds(code)
|
|
} else {
|
|
recordState()
|
|
setTips("授权参数不完整")
|
|
}
|
|
}
|
|
}, [])
|
|
|
|
return (
|
|
<>
|
|
<div>{tips}</div>
|
|
</>
|
|
)
|
|
}
|
|
|
|
export default Home
|