You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
5.1 KiB
175 lines
5.1 KiB
import '~/styles/layout.scss'
|
|
import { useEffect, useState } from 'react';
|
|
import { useRouter } from '~/hooks/useRouter';
|
|
import Notify from './Notify';
|
|
import RenderRouter from './RenderRouter';
|
|
import routes, { tabbarData } from '../routes';
|
|
import Navbar from './Navbar';
|
|
import Tabbar from './Tabbar';
|
|
import { observer } from 'mobx-react';
|
|
import store from '~/store';
|
|
import useWs from '~/hooks/useWs';
|
|
import { ethers } from 'ethers';
|
|
import { bind_rmd } from '~/api';
|
|
import { AlreadyBind, BindRmd, BindSuccess, DefaultBind, UnLogin, VaildLink } from './ui';
|
|
|
|
const LayoutRouter = () => {
|
|
|
|
const { location, push } = useRouter()
|
|
const messageWs = useWs('getMessage')
|
|
const { token, walletAddress, userInfo, visibleUnLogin } = store.state
|
|
const [visible, setVisible] = useState(false)
|
|
|
|
const [visibleVaildLink, setVisibleVaildLink] = useState(false) //无效的链接
|
|
const [visibleAlreadyBind, setVisibleAlreadyBind] = useState(false) //已绑定
|
|
const [visibleBindRmd, setVisibleBindRmd] = useState(false) //直接绑定
|
|
const [shareAddress, setShareAddress] = useState('')
|
|
const [visibleBindSuccess, setVisibleBindSuccess] = useState(false) //綁定成功
|
|
const [visibleDefault, setVisibleDefault] = useState(false) //默認綁定
|
|
|
|
|
|
const bindRecommend = async () => {
|
|
const res: any = await bind_rmd(shareAddress)
|
|
if (res.code === 0) {
|
|
setVisibleBindRmd(false)
|
|
store.getUserInfo()
|
|
setTimeout(() => {
|
|
push('/', null, true)
|
|
setVisibleBindSuccess(true)
|
|
}, 200)
|
|
}
|
|
}
|
|
|
|
useEffect(() => {
|
|
if (token) {
|
|
store.getUserInfo()
|
|
store.getCoinList()
|
|
store.getMyNft('myNft')
|
|
store.getMyNft('likeNft')
|
|
}
|
|
|
|
if (!token) {
|
|
store.resetCoinList()
|
|
store.resetUserInfo()
|
|
store.resetNft("likeNft")
|
|
store.resetNft("myNft")
|
|
}
|
|
|
|
// token && messageWs.connect(token)
|
|
// !token && messageWs.disconnect()
|
|
}, [token])
|
|
|
|
useEffect(() => {
|
|
const isModal = async () => {
|
|
let user = userInfo
|
|
let isRouter = routes.find(v => v.path === location.pathname)
|
|
const address = location.pathname.substring(1, location.pathname.length)
|
|
|
|
if (isRouter) return
|
|
|
|
if (Object.keys(user).length <= 0) {
|
|
const res: any = await store.getUserInfo()
|
|
if (res) {
|
|
user = res
|
|
}
|
|
}
|
|
if (!ethers.utils.isAddress(address)) {
|
|
// 无效的分享链接
|
|
setVisibleVaildLink(true)
|
|
return
|
|
}
|
|
// 地址相同
|
|
if (address.toLocaleLowerCase() === walletAddress.toLocaleLowerCase()) return
|
|
setShareAddress(address)
|
|
// 绑定推荐人
|
|
|
|
if (!user.is_bound && ethers.utils.isAddress(address)) {
|
|
setVisibleBindRmd(true)
|
|
return
|
|
}
|
|
// 已有推荐人
|
|
if (user.is_bound && ethers.utils.isAddress(address)) {
|
|
setVisibleAlreadyBind(true)
|
|
}
|
|
}
|
|
|
|
token && isModal()
|
|
!token && setVisibleBindRmd(false)
|
|
}, [token, walletAddress])
|
|
|
|
return (
|
|
<div className='layout'>
|
|
<Navbar
|
|
pathname={location.pathname}
|
|
setVisible={setVisible}
|
|
/>
|
|
<div className='pages'>
|
|
<RenderRouter />
|
|
{
|
|
tabbarData.includes(location.pathname) && location.pathname !== '/personal' && <div className='tabbar-block'></div>
|
|
}
|
|
</div>
|
|
{
|
|
tabbarData.includes(location.pathname) && (
|
|
<Tabbar
|
|
tabbarData={tabbarData}
|
|
push={push}
|
|
pathname={location.pathname}
|
|
/>
|
|
)
|
|
}
|
|
<Notify visible={visible} setVisible={setVisible} />
|
|
|
|
<div className="ui">
|
|
{/* 無效鏈接 */}
|
|
{visibleVaildLink && <VaildLink visible={visibleVaildLink} setVisible={setVisibleVaildLink} />}
|
|
{/* 已經綁定 */}
|
|
{visibleAlreadyBind && (
|
|
<AlreadyBind
|
|
onClick={() => {
|
|
push('/', null, true)
|
|
setVisibleAlreadyBind(false)
|
|
push('/team')
|
|
}}
|
|
visible={visibleAlreadyBind}
|
|
setVisible={setVisibleAlreadyBind}
|
|
/>
|
|
)}
|
|
{/* 綁定推薦人 */}
|
|
{visibleBindRmd && (
|
|
<BindRmd
|
|
onClick={bindRecommend}
|
|
address={shareAddress}
|
|
visible={visibleBindRmd}
|
|
setVisible={setVisibleBindRmd}
|
|
/>
|
|
)}
|
|
{
|
|
visibleUnLogin && (
|
|
<UnLogin
|
|
visible={visibleUnLogin}
|
|
setVisible={() => store.setVisibleUnLogin(false)}
|
|
/>
|
|
)
|
|
}
|
|
{visibleDefault && (
|
|
<DefaultBind
|
|
visible={visibleDefault}
|
|
setVisible={() => setVisibleDefault(false)}
|
|
onClick={bindRecommend}
|
|
/>
|
|
)}
|
|
{visibleBindSuccess && (
|
|
<BindSuccess
|
|
visible={visibleBindSuccess}
|
|
setVisible={() => setVisibleBindSuccess(false)}
|
|
address={shareAddress}
|
|
/>
|
|
)}
|
|
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export default observer(LayoutRouter)
|