refactor: 单一数据源—Tab过滤+表格列统一使用macro_status||status,删除calcProductStatus
This commit is contained in:
@ -81,28 +81,13 @@ export default function AdminTasksPage() {
|
|||||||
loadProducts(keyword);
|
loadProducts(keyword);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 🔧 产品综合状态:优先后端预计算的 macro_status,兜底本地 taskTree */
|
// ---- 按订单分组 + 本地状态过滤(单一数据源: macro_status || status) ----
|
||||||
function calcProductStatus(p: ProductResponse): string {
|
|
||||||
// 后端已批量预计算 macro_status(WIP/PENDING/COMPLETED)
|
|
||||||
if (p.macro_status) return p.macro_status;
|
|
||||||
// 兜底:展开过的流转树
|
|
||||||
const tree = taskTrees[p.serial_number];
|
|
||||||
if (tree?.task_tree?.length) {
|
|
||||||
if (tree.task_tree.some(t => t.status === "WIP")) return "WIP";
|
|
||||||
if (tree.task_tree.every(t => t.status === "COMPLETED" || t.status === "ARCHIVED")) return "COMPLETED";
|
|
||||||
return tree.task_tree[0].status;
|
|
||||||
}
|
|
||||||
return p.status;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---- 按订单分组 + 本地状态过滤 ----
|
|
||||||
const orderGroups = useMemo<OrderGroup[]>(() => {
|
const orderGroups = useMemo<OrderGroup[]>(() => {
|
||||||
const map = new Map<string, ProductResponse[]>();
|
const map = new Map<string, ProductResponse[]>();
|
||||||
for (const p of products) {
|
for (const p of products) {
|
||||||
// 🔧 本地过滤:Tab切换时不再请求后端
|
|
||||||
if (statusFilter) {
|
if (statusFilter) {
|
||||||
const s = calcProductStatus(p).toUpperCase();
|
const currentStatus = (p.macro_status || p.status).toUpperCase();
|
||||||
if (s !== statusFilter) continue;
|
if (currentStatus !== statusFilter) continue;
|
||||||
}
|
}
|
||||||
const key = p.order_no || "未绑定订单";
|
const key = p.order_no || "未绑定订单";
|
||||||
if (!map.has(key)) map.set(key, []);
|
if (!map.has(key)) map.set(key, []);
|
||||||
@ -117,8 +102,7 @@ export default function AdminTasksPage() {
|
|||||||
(p) => p.current_location_id === "virtual_warehouse"
|
(p) => p.current_location_id === "virtual_warehouse"
|
||||||
),
|
),
|
||||||
}));
|
}));
|
||||||
}, [products, statusFilter, taskTrees]);
|
}, [products, statusFilter]);
|
||||||
}, [products]);
|
|
||||||
|
|
||||||
// ---- 手风琴切换 ----
|
// ---- 手风琴切换 ----
|
||||||
function toggleOrder(orderNo: string) {
|
function toggleOrder(orderNo: string) {
|
||||||
@ -371,13 +355,9 @@ export default function AdminTasksPage() {
|
|||||||
const isTreeLoading = treeLoading[p.serial_number];
|
const isTreeLoading = treeLoading[p.serial_number];
|
||||||
const tree = taskTrees[p.serial_number];
|
const tree = taskTrees[p.serial_number];
|
||||||
// 综合状态:优先流转树状态,兜底产品状态
|
// 综合状态:优先流转树状态,兜底产品状态
|
||||||
const treeStatus = tree
|
// 单一数据源:后端预计算 macro_status,兜底产品 status
|
||||||
? (tree.task_tree?.some(t => t.status === "WIP") ? "WIP"
|
const currentStatus = p.macro_status || p.status;
|
||||||
: tree.task_tree?.every(t => t.status === "COMPLETED" || t.status === "ARCHIVED") ? "COMPLETED"
|
const statusCfg = getStatusConfig(currentStatus);
|
||||||
: tree.task_tree?.[0]?.status)
|
|
||||||
: null;
|
|
||||||
const displayStatus = treeStatus || p.status;
|
|
||||||
const statusCfg = getStatusConfig(displayStatus);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div key={p.id}>
|
<div key={p.id}>
|
||||||
|
|||||||
Reference in New Issue
Block a user