feat(admin): 仪表盘重构、代理线路修复与后台体验优化
Some checks failed
lotteryadmin CI / build (push) Has been cancelled
Some checks failed
lotteryadmin CI / build (push) Has been cancelled
- 各角色仪表盘:KPI 可点击跳转、快捷入口、去重冗余区块,代理/站点降级 analytics - 代理线路:创建玩家权限、侧栏搜索、深链 URL、档案保存与删除预检等修复 - 统一密码最短 6 位;代理模块表格/侧栏背景色一致(admin-table-inset) - 报表、钱包、对账、开奖、结算、配置等模块结构与 i18n 同步更新
This commit is contained in:
52
src/modules/wallet/wallet-cell-mono-id.tsx
Normal file
52
src/modules/wallet/wallet-cell-mono-id.tsx
Normal file
@@ -0,0 +1,52 @@
|
||||
"use client";
|
||||
|
||||
import { Copy } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { toast } from "sonner";
|
||||
|
||||
/** 长单号/流水号:单行截断;点击复制全文,悬停可看全文 */
|
||||
export function WalletCellMonoId({
|
||||
value,
|
||||
empty = "—",
|
||||
copyHint,
|
||||
}: {
|
||||
value: string | null | undefined;
|
||||
empty?: string;
|
||||
/** 用于 toast / 无障碍:如「流水号」「主站流水号」 */
|
||||
copyHint?: string;
|
||||
}): React.ReactElement {
|
||||
const { t } = useTranslation("wallet");
|
||||
if (value == null || value === "") {
|
||||
return <span className="text-muted-foreground">{empty}</span>;
|
||||
}
|
||||
|
||||
const copy = async (e: React.MouseEvent): Promise<void> => {
|
||||
e.stopPropagation();
|
||||
try {
|
||||
await navigator.clipboard.writeText(value);
|
||||
toast.success(
|
||||
copyHint
|
||||
? t("copySuccess", { label: copyHint })
|
||||
: t("copySuccess", { label: "" }).trim(),
|
||||
);
|
||||
} catch {
|
||||
toast.error(t("copyFailed"));
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<button
|
||||
type="button"
|
||||
className="group inline-flex min-w-0 w-full max-w-full items-center gap-1 rounded-md border border-transparent px-0.5 py-0.5 text-left font-mono text-xs transition-colors hover:border-border hover:bg-muted/60"
|
||||
title={value}
|
||||
aria-label={copyHint ?? t("copyTxnNo")}
|
||||
onClick={(e) => void copy(e)}
|
||||
>
|
||||
<span className="min-w-0 flex-1 truncate">{value}</span>
|
||||
<Copy
|
||||
className="size-3.5 shrink-0 text-muted-foreground opacity-60 group-hover:opacity-100"
|
||||
aria-hidden
|
||||
/>
|
||||
</button>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user