Added agent line provision wizard page with permission gating, replacing redirect placeholder. Introduced site deletion API and UI with confirmation dialog in integration sites management. Added new site-scoped dashboard panel showing bet metrics, P/L trends, active players, and quick links. Enhanced chart tooltip to support custom formatters and fix indicator color
54 lines
1.3 KiB
TypeScript
54 lines
1.3 KiB
TypeScript
"use client";
|
|
|
|
import type { ReactElement, ReactNode } from "react";
|
|
|
|
import { cn } from "@/lib/utils";
|
|
|
|
/** 盈亏 / 输赢:负红、正绿、零灰 */
|
|
export function signedMoneyClass(amount: number, emphasize = false): string {
|
|
if (amount < 0) {
|
|
return cn("text-destructive", emphasize && "font-semibold");
|
|
}
|
|
if (amount > 0) {
|
|
return cn("text-emerald-600 dark:text-emerald-400", emphasize && "font-semibold");
|
|
}
|
|
|
|
return cn("text-muted-foreground", emphasize && "font-medium");
|
|
}
|
|
|
|
export function SignedMoney({
|
|
amount,
|
|
children,
|
|
emphasize,
|
|
className,
|
|
}: {
|
|
amount: number;
|
|
children: ReactNode;
|
|
emphasize?: boolean;
|
|
className?: string;
|
|
}): ReactElement {
|
|
return (
|
|
<span className={cn(signedMoneyClass(amount, emphasize), "tabular-nums", className)}>
|
|
{children}
|
|
</span>
|
|
);
|
|
}
|
|
|
|
/** 报表 / 结算字段是否应按正负着色 */
|
|
export function isSignedMoneyField(key: string): boolean {
|
|
return (
|
|
key === "approx_house_gross_minor" ||
|
|
key === "net_win_loss_minor" ||
|
|
key === "gross_win_loss" ||
|
|
key === "game_win_loss" ||
|
|
key === "profit_loss_minor" ||
|
|
key === "today_profit_minor" ||
|
|
key === "seven_day_profit_minor" ||
|
|
key === "platform_profit" ||
|
|
key === "platform_profit_minor" ||
|
|
key === "share_profit" ||
|
|
key === "share_profit_meta" ||
|
|
key.endsWith("_profit_minor")
|
|
);
|
|
}
|