feat(affiliate): Commission Rate

This commit is contained in:
web@ppanel 2024-12-04 13:53:54 +07:00
parent 4fdfeb2b1c
commit 5eec430e50
3 changed files with 33 additions and 13 deletions

View File

@ -8,12 +8,13 @@ import { formatDate } from '@repo/ui/utils';
import { Button } from '@shadcn/ui/button'; import { Button } from '@shadcn/ui/button';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@shadcn/ui/card'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@shadcn/ui/card';
import { toast } from '@shadcn/ui/lib/sonner'; import { toast } from '@shadcn/ui/lib/sonner';
import { Copy } from 'lucide-react';
import { useTranslations } from 'next-intl'; import { useTranslations } from 'next-intl';
import { useState } from 'react'; import { useState } from 'react';
export default function Page() { export default function Page() {
const t = useTranslations('affiliate'); const t = useTranslations('affiliate');
const { user } = useGlobalStore(); const { user, common } = useGlobalStore();
const [sum, setSum] = useState<number>(); const [sum, setSum] = useState<number>();
return ( return (
@ -23,23 +24,40 @@ export default function Page() {
<CardTitle>{t('totalCommission')}</CardTitle> <CardTitle>{t('totalCommission')}</CardTitle>
<CardDescription>{t('commissionInfo')}</CardDescription> <CardDescription>{t('commissionInfo')}</CardDescription>
</CardHeader> </CardHeader>
<CardContent className='text-2xl font-bold'> <CardContent>
<Display type='currency' value={sum} /> <div className='flex items-baseline gap-2'>
<span className='text-3xl font-bold'>
<Display type='currency' value={sum} />
</span>
<span className='text-muted-foreground text-sm'>
({t('commissionRate')}: {common?.invite?.referral_percentage}%)
</span>
</div>
</CardContent> </CardContent>
</Card> </Card>
<Card> <Card>
<CardHeader className='flex flex-row items-center justify-between space-y-0'> <CardHeader className='flex flex-row items-center justify-between space-y-0'>
<CardTitle>{t('inviteCode')}</CardTitle> <CardTitle className='text-lg font-medium'>{t('inviteCode')}</CardTitle>
<Button
onClick={() => {
navigator.clipboard.writeText(`${location.origin}/auth?invite=${user?.refer_code}`);
toast.success(t('copySuccess'));
}}
>
{t('copyInviteLink')}
</Button>
</CardHeader> </CardHeader>
<CardContent className='text-2xl font-bold'>{user?.refer_code}</CardContent> <CardContent>
<div className='flex items-center justify-between'>
<code className='bg-muted rounded px-2 py-1 text-2xl font-bold'>
{user?.refer_code}
</code>
<Button
variant='secondary'
size='sm'
className='gap-2'
onClick={() => {
navigator.clipboard.writeText(`${location.origin}/auth?invite=${user?.refer_code}`);
toast.success(t('copySuccess'));
}}
>
<Copy className='h-4 w-4' />
{t('copyInviteLink')}
</Button>
</div>
</CardContent>
</Card> </Card>
<ProList<API.UserAffiliate, Record<string, unknown>> <ProList<API.UserAffiliate, Record<string, unknown>>
request={async (pagination, filter) => { request={async (pagination, filter) => {

View File

@ -1,5 +1,6 @@
{ {
"commissionInfo": "Statistics of the commission, automatically transferred to balance", "commissionInfo": "Statistics of the commission, automatically transferred to balance",
"commissionRate": "Commission Rate",
"copyInviteLink": "Copy Invite Link", "copyInviteLink": "Copy Invite Link",
"copySuccess": "Copied Successfully", "copySuccess": "Copied Successfully",
"inviteCode": "Invite Code", "inviteCode": "Invite Code",

View File

@ -1,5 +1,6 @@
{ {
"commissionInfo": "统计金额,邀请佣金自动转入余额", "commissionInfo": "统计金额,邀请佣金自动转入余额",
"commissionRate": "佣金比例",
"copyInviteLink": "复制邀请链接", "copyInviteLink": "复制邀请链接",
"copySuccess": "复制成功", "copySuccess": "复制成功",
"inviteCode": "邀请码", "inviteCode": "邀请码",