feat: 状态渲染修复+中文姓名映射+SUPERVISOR/SUPER_ADMIN权限控制(前端+后端)

This commit is contained in:
2026-08-07 17:26:14 +08:00
parent 592bde7cab
commit 65ff05fb2f
4 changed files with 110 additions and 43 deletions

View File

@ -16,6 +16,7 @@ import type { ProductResponse } from "../../types/admin";
import type { ProductScanResponse, TaskResponse } from "../../types/api";
import { useToast } from "../../components/ui/Toast";
import { getStatusConfig } from "../../constants/task";
import { useAuth } from "../../contexts/AuthContext";
const STATUS_TABS = [
{ key: "", label: "全部" },
@ -33,6 +34,7 @@ interface OrderGroup {
export default function AdminTasksPage() {
const { toast } = useToast();
const { user: currentUser } = useAuth();
// 搜索 & 筛选
const [keyword, setKeyword] = useState("");
@ -357,7 +359,14 @@ export default function AdminTasksPage() {
const productExpanded = expandedProducts.has(p.serial_number);
const isTreeLoading = treeLoading[p.serial_number];
const tree = taskTrees[p.serial_number];
const statusCfg = getStatusConfig(p.status);
// 综合状态:优先流转树状态,兜底产品状态
const treeStatus = tree
? (tree.task_tree?.some(t => t.status === "WIP") ? "WIP"
: tree.task_tree?.every(t => t.status === "COMPLETED" || t.status === "ARCHIVED") ? "COMPLETED"
: tree.task_tree?.[0]?.status)
: null;
const displayStatus = treeStatus || p.status;
const statusCfg = getStatusConfig(displayStatus);
return (
<div key={p.id}>
@ -386,7 +395,7 @@ export default function AdminTasksPage() {
🏭
</span>
) : (
p.current_location_id ?? "—"
p.current_location_name || p.current_location_id || "—"
)}
</div>
<div className="col-span-2 text-xs text-gray-400">
@ -420,6 +429,7 @@ export default function AdminTasksPage() {
<TaskFlowView
tasks={tree.task_tree}
onAction={setModalTarget}
currentUser={currentUser}
/>
) : (
<div className="flex flex-col items-center justify-center py-12 text-gray-400">