feat: 任务全景默认按设备分组+全展开+全部展开/折叠按钮(与产品管理一致)
This commit is contained in:
@ -39,7 +39,7 @@ export default function AdminTasksPage() {
|
|||||||
// 搜索 & 筛选
|
// 搜索 & 筛选
|
||||||
const [keyword, setKeyword] = useState("");
|
const [keyword, setKeyword] = useState("");
|
||||||
const [statusFilter, setStatusFilter] = useState("");
|
const [statusFilter, setStatusFilter] = useState("");
|
||||||
const [groupBy, setGroupBy] = useState<"order" | "device">("order"); // 🔧 分组维度
|
const [groupBy, setGroupBy] = useState<"order" | "device">("device");
|
||||||
const [products, setProducts] = useState<ProductResponse[]>([]);
|
const [products, setProducts] = useState<ProductResponse[]>([]);
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
const [error, setError] = useState<string | null>(null);
|
const [error, setError] = useState<string | null>(null);
|
||||||
@ -76,7 +76,6 @@ export default function AdminTasksPage() {
|
|||||||
|
|
||||||
function handleSearch(e?: React.FormEvent) {
|
function handleSearch(e?: React.FormEvent) {
|
||||||
e?.preventDefault();
|
e?.preventDefault();
|
||||||
setExpandedOrders(new Set());
|
|
||||||
setExpandedProducts(new Set());
|
setExpandedProducts(new Set());
|
||||||
setTaskTrees({});
|
setTaskTrees({});
|
||||||
loadProducts(keyword);
|
loadProducts(keyword);
|
||||||
@ -107,6 +106,11 @@ export default function AdminTasksPage() {
|
|||||||
}));
|
}));
|
||||||
}, [products, statusFilter, groupBy]);
|
}, [products, statusFilter, groupBy]);
|
||||||
|
|
||||||
|
// 🔧 默认全部展开
|
||||||
|
useEffect(() => {
|
||||||
|
setExpandedOrders(new Set(orderGroups.map(g => g.orderNo)));
|
||||||
|
}, [orderGroups]);
|
||||||
|
|
||||||
// ---- 手风琴切换 ----
|
// ---- 手风琴切换 ----
|
||||||
function toggleOrder(orderNo: string) {
|
function toggleOrder(orderNo: string) {
|
||||||
setExpandedOrders((prev) => {
|
setExpandedOrders((prev) => {
|
||||||
@ -231,14 +235,22 @@ export default function AdminTasksPage() {
|
|||||||
|
|
||||||
{/* ---- 搜索 + 筛选 ---- */}
|
{/* ---- 搜索 + 筛选 ---- */}
|
||||||
<div className="mb-6 rounded-xl bg-white p-4 shadow-sm">
|
<div className="mb-6 rounded-xl bg-white p-4 shadow-sm">
|
||||||
<div className="mb-3 flex items-center gap-2">
|
<div className="mb-3 flex items-center justify-between">
|
||||||
<span className="text-xs text-gray-400">分组:</span>
|
<div className="flex items-center gap-2">
|
||||||
{(["order", "device"] as const).map(m => (
|
<span className="text-xs text-gray-400">分组:</span>
|
||||||
<button key={m} onClick={() => setGroupBy(m)}
|
{(["order", "device"] as const).map(m => (
|
||||||
className={`rounded-full px-3 py-1 text-xs font-medium transition-colors ${groupBy === m ? "bg-blue-600 text-white" : "bg-gray-100 text-gray-500 hover:bg-gray-200"}`}>
|
<button key={m} onClick={() => setGroupBy(m)}
|
||||||
{m === "order" ? "按订单" : "按设备"}
|
className={`rounded-full px-3 py-1 text-xs font-medium transition-colors ${groupBy === m ? "bg-blue-600 text-white" : "bg-gray-100 text-gray-500 hover:bg-gray-200"}`}>
|
||||||
</button>
|
{m === "order" ? "按订单" : "按设备"}
|
||||||
))}
|
</button>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
<div className="flex gap-1">
|
||||||
|
<button onClick={() => setExpandedOrders(new Set(orderGroups.map(g => g.orderNo)))}
|
||||||
|
className="rounded px-2 py-1 text-[11px] text-blue-600 hover:bg-blue-50">全部展开</button>
|
||||||
|
<button onClick={() => setExpandedOrders(new Set())}
|
||||||
|
className="rounded px-2 py-1 text-[11px] text-gray-400 hover:bg-gray-100">全部折叠</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<form onSubmit={handleSearch} className="flex items-center gap-2">
|
<form onSubmit={handleSearch} className="flex items-center gap-2">
|
||||||
<div className="relative flex-1 max-w-xl">
|
<div className="relative flex-1 max-w-xl">
|
||||||
|
|||||||
Reference in New Issue
Block a user