feat: update of partner

This commit is contained in:
eleanor.mao
2025-05-15 01:02:00 +08:00
parent 7aafc3a789
commit d2ac64f20c
52 changed files with 1435 additions and 265 deletions

View File

@ -1,12 +1,12 @@
import { BaseEventOrig, Button, ButtonProps, Image } from '@tarojs/components';
import { Button } from '@tarojs/components';
import { useCallback, useState } from 'react';
import { PageUrl } from '@/constants/app';
import LoginDialog from '@/components/login-dialog';
import PartnerKanban from '@/components/partner-kanban';
import useUserInfo from '@/hooks/use-user-info';
import { navigateTo } from '@/utils/route';
import Toast from '@/utils/toast';
import { requestUserInfo, setPhoneNumber } from '@/utils/user';
import { becomePartner } from '@/utils/partner';
import { isNeedPhone, requestUserInfo } from '@/utils/user';
import './index.less';
const PREFIX = 'partner-fragment-entry';
@ -16,93 +16,42 @@ type JoinEntryProps = {
};
function JoinEntry({ onBindSuccess }: JoinEntryProps) {
const userInfo = useUserInfo();
const needPhone = isNeedPhone(userInfo);
const [visible, setVisible] = useState(false);
const hasPhone = !!userInfo.phone;
const handleGetPhoneNumber = useCallback(async (e: BaseEventOrig<ButtonProps.onGetPhoneNumberEventDetail>) => {
const encryptedData = e.detail.encryptedData;
const iv = e.detail.iv;
if (!encryptedData || !iv) {
return Toast.error('取消授权');
}
try {
await setPhoneNumber({ encryptedData, iv });
await requestUserInfo();
Toast.success('绑定成功');
onBindSuccess();
} catch (err) {
Toast.error('绑定失败');
}
}, []);
return (
<div className={`${PREFIX}__join`}>
<div className={`${PREFIX}__join-title`}>
<span className="highlight">75%</span>
<>
<div className={`${PREFIX}__join`}>
<div className={`${PREFIX}__join-title`}>
<span className="highlight">75%</span>
</div>
<div className={`${PREFIX}__join-desc`}></div>
{!needPhone && (
<Button className={`${PREFIX}__join-button`} onClick={onBindSuccess}>
</Button>
)}
{needPhone && (
<Button className={`${PREFIX}__join-button`} onClick={() => setVisible(true)}>
</Button>
)}
</div>
<div className={`${PREFIX}__join-desc`}></div>
{hasPhone && (
<Button className={`${PREFIX}__join-button`} onClick={onBindSuccess}>
</Button>
)}
{!hasPhone && (
<Button className={`${PREFIX}__join-button`} openType="getPhoneNumber" onGetPhoneNumber={handleGetPhoneNumber}>
</Button>
)}
</div>
);
}
function PartnerKanban() {
const handleNavigate = useCallback(() => {
navigateTo(PageUrl.Partner);
}, []);
return (
<div className={`${PREFIX}__kanban`}>
<Image className={`${PREFIX}__kanban-bg`} src={require('@/statics/png/partner_bg.png')} mode="scaleToFill" />
<div className={`${PREFIX}__kanban-content`}>
<div className={`${PREFIX}__kanban-button`} onClick={handleNavigate}>
<Image
className={`${PREFIX}__kanban-button__image`}
mode="aspectFit"
src={require('@/statics/svg/caret-right.svg')}
/>
</div>
<div className={`${PREFIX}__kanban-total`}>
<div className={`${PREFIX}__kanban-title`}></div>
<div className={`${PREFIX}__kanban-money`}>1666.66</div>
</div>
<div className={`${PREFIX}__kanban-details`}>
<div className={`${PREFIX}__kanban-details-part`}>
<div className={`${PREFIX}__kanban-title`}></div>
<div className={`${PREFIX}__kanban-money`}>666.23</div>
</div>
<div className={`${PREFIX}__kanban-details-part`}>
<div className={`${PREFIX}__kanban-title`}></div>
<div className={`${PREFIX}__kanban-money`}>666.23</div>
</div>
<div className={`${PREFIX}__kanban-details-part`}>
<div className={`${PREFIX}__kanban-title`}></div>
<div className={`${PREFIX}__kanban-money`}>666.23</div>
</div>
</div>
</div>
</div>
{visible && <LoginDialog onCancel={() => setVisible(false)} onSuccess={onBindSuccess} needPhone={needPhone} />}
</>
);
}
export default function PartnerEntry() {
const [state, setState] = useState(1);
// TODO: 开通状态检查
const handleBindSuccess = useCallback(() => {
setState(0);
const userInfo = useUserInfo();
const handleBindSuccess = useCallback(async () => {
await becomePartner();
await requestUserInfo();
}, []);
if (state === 0) {
return <JoinEntry onBindSuccess={handleBindSuccess} />;
if (userInfo.isPartner) {
return <PartnerKanban simple />;
}
return <PartnerKanban />;
return <JoinEntry onBindSuccess={handleBindSuccess} />;
}