refactor(layout, i18n, admin): 优化布局结构与多语言支持
调整 AdminShell 组件的子组件顺序,提升代码可读性。更新 admin-breadcrumb 组件,简化导航标签翻译逻辑,确保多语言支持的一致性。重构 admin-language-switcher 组件,优化语言切换的用户体验,增强界面交互性。更新多语言配置,新增登录界面的副标题,提升用户体验。
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { useCallback, useEffect, useState } from "react";
|
||||
import { Copy, Loader2, MoreHorizontal } from "lucide-react";
|
||||
import { Copy, RotateCcw, Wrench } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { toast } from "sonner";
|
||||
|
||||
@@ -15,16 +15,10 @@ import {
|
||||
} from "@/api/admin-wallet";
|
||||
import { AdminDateRangeField } from "@/components/admin/admin-date-range-field";
|
||||
import { AdminListPaginationFooter } from "@/components/admin/admin-list-pagination-footer";
|
||||
import { AdminRowActionsMenu } from "@/components/admin/admin-row-actions-menu";
|
||||
import { AdminTableExportButton } from "@/components/admin/admin-table-export-button";
|
||||
import { AdminStatusBadge } from "@/components/admin/admin-status-badge";
|
||||
import { Button, buttonVariants } from "@/components/ui/button";
|
||||
import {
|
||||
DropdownMenu,
|
||||
DropdownMenuContent,
|
||||
DropdownMenuItem,
|
||||
DropdownMenuSeparator,
|
||||
DropdownMenuTrigger,
|
||||
} from "@/components/ui/dropdown-menu";
|
||||
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
|
||||
import { Checkbox } from "@/components/ui/checkbox";
|
||||
import { Input } from "@/components/ui/input";
|
||||
@@ -278,55 +272,34 @@ function TransferOrderRowActions({
|
||||
onManualProcess,
|
||||
t,
|
||||
}: TransferOrderRowActionsProps): React.ReactElement {
|
||||
const showComplete = canCompleteTransferInCredit(row, canWriteWallet);
|
||||
const showReverse = canReverseTransferOrder(row, canWriteWallet);
|
||||
const showManual = canManuallyProcessTransferOrder(row, canWriteWallet);
|
||||
|
||||
if (!showComplete && !showReverse && !showManual) {
|
||||
return <span className="text-xs text-muted-foreground">—</span>;
|
||||
}
|
||||
|
||||
return (
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger
|
||||
disabled={busy}
|
||||
aria-label={t("actionsMenuAriaLabel")}
|
||||
className={cn(
|
||||
buttonVariants({ variant: "ghost", size: "icon-sm" }),
|
||||
"text-muted-foreground hover:text-foreground",
|
||||
)}
|
||||
>
|
||||
{busy ? (
|
||||
<Loader2 className="size-4 animate-spin" aria-hidden />
|
||||
) : (
|
||||
<MoreHorizontal className="size-4" aria-hidden />
|
||||
)}
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent align="end" className="min-w-[11rem]">
|
||||
{showComplete ? (
|
||||
<DropdownMenuItem disabled={busy} onClick={() => onCompleteCredit(row.transfer_no)}>
|
||||
{t("completeCredit")}
|
||||
</DropdownMenuItem>
|
||||
) : null}
|
||||
{showManual ? (
|
||||
<DropdownMenuItem disabled={busy} onClick={() => onManualProcess(row.transfer_no)}>
|
||||
{t("manualProcess")}
|
||||
</DropdownMenuItem>
|
||||
) : null}
|
||||
{showReverse ? (
|
||||
<>
|
||||
{showComplete || showManual ? <DropdownMenuSeparator /> : null}
|
||||
<DropdownMenuItem
|
||||
variant="destructive"
|
||||
disabled={busy}
|
||||
onClick={() => onReverse(row.transfer_no)}
|
||||
>
|
||||
{t("reverse")}
|
||||
</DropdownMenuItem>
|
||||
</>
|
||||
) : null}
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
<AdminRowActionsMenu
|
||||
busy={busy}
|
||||
ariaLabel={t("actionsMenuAriaLabel")}
|
||||
actions={[
|
||||
{
|
||||
key: "complete",
|
||||
label: t("completeCredit"),
|
||||
hidden: !canCompleteTransferInCredit(row, canWriteWallet),
|
||||
onClick: () => onCompleteCredit(row.transfer_no),
|
||||
},
|
||||
{
|
||||
key: "manual",
|
||||
label: t("manualProcess"),
|
||||
icon: Wrench,
|
||||
hidden: !canManuallyProcessTransferOrder(row, canWriteWallet),
|
||||
onClick: () => onManualProcess(row.transfer_no),
|
||||
},
|
||||
{
|
||||
key: "reverse",
|
||||
label: t("reverse"),
|
||||
icon: RotateCcw,
|
||||
destructive: true,
|
||||
hidden: !canReverseTransferOrder(row, canWriteWallet),
|
||||
onClick: () => onReverse(row.transfer_no),
|
||||
},
|
||||
]}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user