import { useEffect, useState } from 'react'; import { View, Text, Button } from '@tarojs/components'; import { useDidShow } from '@tarojs/taro'; import HqHeader from '../../components/HqHeader'; import HqTabBar from '../../components/HqTabBar'; import { request, type Paginated, toast } from '../../lib/api'; import { useHqSession } from '../../lib/session'; import { fmtMoney, fmtTime } from '../../lib/constants'; type RedeemRow = { id: string; redeemNo: string; amount: number | string; createdAt: string; store?: { name: string; cityName?: string }; user?: { nickname?: string; phone?: string }; payout?: unknown; }; // 门店核销到账比例(V2 手册:门店核销结算 60%) const STORE_PAYOUT_RATE = 0.6; export default function SettlementPage() { useHqSession(); const [rows, setRows] = useState([]); const [loading, setLoading] = useState(true); function load() { setLoading(true); request>('/admin/redeem-records?pageSize=50') .then((d) => setRows(d.items)) .catch(() => setRows([])) .finally(() => setLoading(false)); } useEffect(load, []); useDidShow(load); const totalRedeem = rows.reduce((s, r) => s + Number(r.amount || 0), 0); const totalPayout = totalRedeem * STORE_PAYOUT_RATE; const pendingCount = rows.filter((r) => !r.payout).length; return ( 核销总额 ¥{fmtMoney(totalRedeem)} 近 {rows.length} 笔核销 门店应结(60%) ¥{fmtMoney(totalPayout)} 待打款 {pendingCount} 笔 门店核销结算明细 {loading && 加载中…} {!loading && rows.length === 0 && 暂无核销记录} {rows.map((r) => ( {r.store?.name || '门店'} {r.payout ? '已结算' : '待结算'} {r.store?.cityName || ''} · {r.redeemNo} {fmtTime(r.createdAt)} 核销 ¥{fmtMoney(r.amount)} · 应结 ¥{fmtMoney(Number(r.amount || 0) * STORE_PAYOUT_RATE)} ))} ); }