Files
dukang/apps/h5-user/src/pages/BenefitDetailPage.tsx
T
jacy 89fd333702 feat(analytics): persona logging upgrade and Sentry system config
Add client-logging SDK, expanded event taxonomy, API observability, admin domain events UI, and move SENTRY_DSN to HQ system settings with @sentry/node bootstrap after config preload.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-03 22:30:02 +08:00

35 lines
1.5 KiB
TypeScript

import { useEffect, useState } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import PageHeader from '@dukang/shared-ui/PageHeader';
import { request } from '../lib/api';
import { usePageView } from '../lib/usePageView';
export default function BenefitDetailPage() {
const { id } = useParams();
usePageView('benefit_detail_view', { couponId: id });
const navigate = useNavigate();
const [data, setData] = useState<{ coupon: Record<string, unknown>; ledgers: Array<Record<string, unknown>> } | null>(null);
useEffect(() => {
if (id) request('USER_H5', `/benefit/coupons/${id}`).then(setData);
}, [id]);
if (!data) return <div className="empty">加载中...</div>;
return (
<div className="page-no-tab">
<PageHeader title="好客权益明细" onBack={() => navigate(-1)} />
<div className="card">
<p className="body-md">可用余额:<span className="amount-lg">¥{Number(data.coupon.balance)}</span></p>
<p className="text-variant body-md">总额:¥{Number(data.coupon.totalAmount)}</p>
</div>
{data.ledgers.map((l) => (
<div key={String(l.id)} className="card">
<div className="card-row">
<span className="body-md">{String(l.type)}</span>
<span className={Number(l.amount) < 0 ? 'text-primary amount-lg' : 'body-md'}>{Number(l.amount) > 0 ? '+' : ''}{Number(l.amount)}</span>
</div>
<div className="label-md text-muted">{String(l.remark || '')}</div>
</div>
))}
</div>
);
}