代码提交
This commit is contained in:
@@ -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>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user