代码提交

This commit is contained in:
wong
2025-04-11 17:05:42 +08:00
parent 31cdc895e6
commit 568de908e2

View File

@@ -34,6 +34,7 @@ interface SyncTask {
createTime: string createTime: string
creator: string creator: string
libraries?: string[] libraries?: string[]
devices?: string[]
} }
export default function MomentsSyncPage() { export default function MomentsSyncPage() {
@@ -43,15 +44,19 @@ export default function MomentsSyncPage() {
const [searchQuery, setSearchQuery] = useState("") const [searchQuery, setSearchQuery] = useState("")
const [showDeleteAlert, setShowDeleteAlert] = useState(false) const [showDeleteAlert, setShowDeleteAlert] = useState(false)
const [taskToDelete, setTaskToDelete] = useState<string | null>(null) const [taskToDelete, setTaskToDelete] = useState<string | null>(null)
const [currentPage, setCurrentPage] = useState(1)
const [pageSize, setPageSize] = useState(10)
const [total, setTotal] = useState(0)
// 获取任务列表 // 获取任务列表
const fetchTasks = async () => { const fetchTasks = async () => {
const loadingToast = showToast("正在加载任务列表...", "loading", true); const loadingToast = showToast("正在加载任务列表...", "loading", true);
setIsLoading(true) setIsLoading(true)
try { try {
const response = await api.get<ApiResponse>('/v1/workbench/list?type=2') const response = await api.get<ApiResponse>(`/v1/workbench/list?type=2&page=${currentPage}&pageSize=${pageSize}`)
if (response.code === 200 && response.data) { if (response.code === 200 && response.data) {
setTasks(response.data.list || []) setTasks(response.data.list || [])
setTotal(response.data.total || 0)
} else { } else {
showToast(response.msg || "获取任务列表失败", "error") showToast(response.msg || "获取任务列表失败", "error")
} }
@@ -67,7 +72,18 @@ export default function MomentsSyncPage() {
// 组件加载时获取任务列表 // 组件加载时获取任务列表
useEffect(() => { useEffect(() => {
fetchTasks() fetchTasks()
}, []) }, [currentPage, pageSize])
// 处理页码变化
const handlePageChange = (page: number) => {
setCurrentPage(page)
}
// 处理每页条数变化
const handlePageSizeChange = (size: number) => {
setPageSize(size)
setCurrentPage(1) // 重置到第一页
}
// 搜索任务 // 搜索任务
const handleSearch = () => { const handleSearch = () => {
@@ -239,19 +255,20 @@ export default function MomentsSyncPage() {
</div> </div>
</div> </div>
) : ( ) : (
<>
<div className="space-y-4"> <div className="space-y-4">
{filteredTasks.map((task) => ( {filteredTasks.map((task) => (
<Card key={task.id} className="p-4"> <Card key={task.id} className="p-4">
<div className="flex items-center justify-between mb-4"> <div className="flex items-center justify-between mb-4">
<div className="flex items-center space-x-2"> <div className="flex items-center space-x-2">
<h3 className="font-medium">{task.name}</h3> <h3 className="font-medium">{task.name}</h3>
<Badge variant={task.status === 1 ? "success" : "secondary"}> <Badge variant={task.status === "running" ? "success" : "secondary"}>
{task.status === "running" ? "进行中" : "已暂停"} {task.status === "running" ? "进行中" : "已暂停"}
</Badge> </Badge>
</div> </div>
<div className="flex items-center space-x-2"> <div className="flex items-center space-x-2">
<Switch <Switch
checked={task.status === 1} checked={task.status === "running"}
onCheckedChange={() => toggleTaskStatus(task.id, task.status)} onCheckedChange={() => toggleTaskStatus(task.id, task.status)}
/> />
<DropdownMenu> <DropdownMenu>
@@ -282,10 +299,9 @@ export default function MomentsSyncPage() {
</div> </div>
</div> </div>
<div className="grid grid-cols-2 gap-4 mb-4"> <div className="grid grid-cols-2 gap-4 mb-4">
<div className="text-sm text-gray-500"> <div className="text-sm text-gray-500">
<div>{task.deviceCount} </div> <div>{task.devices?.length || 0} </div>
<div>{task.contentLib}</div> <div>{task.contentLib}</div>
</div> </div>
<div className="text-sm text-gray-500"> <div className="text-sm text-gray-500">
@@ -304,6 +320,45 @@ export default function MomentsSyncPage() {
</Card> </Card>
))} ))}
</div> </div>
{/* 分页组件 */}
<div className="flex justify-between items-center mt-4">
<div className="flex items-center space-x-2">
<span className="text-sm text-gray-500"></span>
<select
className="border rounded px-2 py-1 text-sm"
value={pageSize}
onChange={(e) => handlePageSizeChange(Number(e.target.value))}
>
<option value={10}>10</option>
<option value={20}>20</option>
<option value={50}>50</option>
</select>
<span className="text-sm text-gray-500"></span>
</div>
<div className="flex items-center space-x-2">
<Button
variant="outline"
size="sm"
onClick={() => handlePageChange(currentPage - 1)}
disabled={currentPage === 1}
>
</Button>
<span className="text-sm text-gray-500">
{currentPage} / {Math.ceil(total / pageSize)}
</span>
<Button
variant="outline"
size="sm"
onClick={() => handlePageChange(currentPage + 1)}
disabled={currentPage >= Math.ceil(total / pageSize)}
>
</Button>
</div>
</div>
</>
)} )}
</div> </div>