diff --git a/frontend/src/pages/admin/AdminDashboard.tsx b/frontend/src/pages/admin/AdminDashboard.tsx
index 6829e27..a839a46 100644
--- a/frontend/src/pages/admin/AdminDashboard.tsx
+++ b/frontend/src/pages/admin/AdminDashboard.tsx
@@ -4,7 +4,6 @@ import {
RefreshCw, Loader2, AlertCircle, ArrowRight, ArrowUp, ArrowDown, ArrowUpDown,
Clock, MessageCircle, CheckCircle2, Users,
} from "lucide-react";
-import { useNavigate } from "react-router-dom";
import { Radio, DatePicker, Drawer, Input } from "antd";
import dayjs, { type Dayjs } from "dayjs";
import {
@@ -79,10 +78,9 @@ function durationLabel(h: number) {
}
function WipRow({ t }: { t: WipTask }) {
- const nav = useNavigate();
const handleClick = () => {
if (t.product_sn) {
- nav(`/admin/tasks?sn=${t.product_sn}`);
+ window.open(`/admin/tasks?sn=${t.product_sn}`, "_blank");
}
};
return (
@@ -162,11 +160,10 @@ function MsgRow({ m }: { m: ProductMessageItem }) {
// ─── 已完成明细项(卡片式) ─────────────────────────────
function CompletedRow({ t }: { t: CompletedTask }) {
- const nav = useNavigate();
const completedTime = t.completed_at ? dayjs(t.completed_at).format("YYYY-MM-DD HH:mm") : "";
return (
t.product_sn && nav(`/admin/tasks?sn=${t.product_sn}`)}
+ onClick={() => t.product_sn && window.open(`/admin/tasks?sn=${t.product_sn}`, "_blank")}
className="cursor-pointer rounded-lg border border-gray-100 bg-white px-4 py-3 transition-shadow hover:border-emerald-200 hover:shadow-md"
>
@@ -191,12 +188,11 @@ function CompletedRow({ t }: { t: CompletedTask }) {
// ─── 被驳回明细项(卡片式) ──────────────────────────────
function RejectedRow({ t }: { t: RejectedTask }) {
- const nav = useNavigate();
const timeStr = t.rejected_at ? dayjs(t.rejected_at).format("YYYY-MM-DD HH:mm") : "";
const isRework = t.kind === "rework";
return (
t.product_sn && nav(`/admin/tasks?sn=${t.product_sn}`)}
+ onClick={() => t.product_sn && window.open(`/admin/tasks?sn=${t.product_sn}`, "_blank")}
className="cursor-pointer rounded-lg border border-gray-100 bg-white px-4 py-3 transition-shadow hover:border-red-200 hover:shadow-md"
>
@@ -286,8 +282,6 @@ export default function AdminDashboard() {
const [opDetailLoading, setOpDetailLoading] = useState(false);
const [opDetailTitle, setOpDetailTitle] = useState("");
- const navigate = useNavigate();
-
// ── 加载主数据 ──
const loadData = useCallback((key: DateRangeKey, range: [Dayjs, Dayjs] | null) => {
setLoading(true);
@@ -536,7 +530,7 @@ export default function AdminDashboard() {
-