From 76b509b362aede1c3bfa54c3987e96e27e04183c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=AC=94=E8=AE=B0=E6=9C=AC=E9=87=8C=E7=9A=84=E6=B0=B8?= =?UTF-8?q?=E5=B9=B3?= Date: Wed, 23 Jul 2025 19:19:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9C=AC=E6=AC=A1=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=86=85=E5=AE=B9=E5=A6=82=E4=B8=8B=20?= =?UTF-8?q?=E5=AD=98=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/workspace/moments-sync/Detail.tsx | 396 +++++++++--------- .../workspace/moments-sync/index.module.scss | 3 +- .../workspace/moments-sync/new/index.tsx | 9 +- 3 files changed, 204 insertions(+), 204 deletions(-) diff --git a/nkebao/src/pages/workspace/moments-sync/Detail.tsx b/nkebao/src/pages/workspace/moments-sync/Detail.tsx index a8456a52..5f3b6bff 100644 --- a/nkebao/src/pages/workspace/moments-sync/Detail.tsx +++ b/nkebao/src/pages/workspace/moments-sync/Detail.tsx @@ -1,198 +1,198 @@ -import React, { useState, useEffect, useCallback } from "react"; -import { useParams, useNavigate } from "react-router-dom"; -import { Button, Switch, message, Spin } from "antd"; -import NavCommon from "@/components/NavCommon"; -import { EditOutlined } from "@ant-design/icons"; -import Layout from "@/components/Layout/Layout"; -import style from "./index.module.scss"; -import request from "@/api/request"; - -interface MomentsSyncTask { - id: string; - name: string; - status: 1 | 2; - deviceCount: number; - syncCount: number; - lastSyncTime: string; - createTime: string; - creatorName: string; - updateTime?: string; - maxSyncPerDay?: number; - syncInterval?: number; - timeRange?: { start: string; end: string }; - contentTypes?: string[]; - targetTags?: string[]; - todaySyncCount?: number; - totalSyncCount?: number; - syncMode?: string; - config?: { - devices?: string[]; - contentLibraryNames?: string[]; - syncCount?: number; - }; -} - -const getStatusText = (status: number) => { - switch (status) { - case 1: - return "进行中"; - case 2: - return "已暂停"; - default: - return "未知"; - } -}; - -const MomentsSyncDetail: React.FC = () => { - const { id } = useParams(); - const navigate = useNavigate(); - const [task, setTask] = useState(null); - const [loading, setLoading] = useState(false); - - const fetchTaskDetail = useCallback(async () => { - if (!id) return; - setLoading(true); - try { - const res = await request("/v1/workbench/detail", { id }, "GET"); - if (res) setTask(res); - } catch { - message.error("获取任务详情失败"); - } finally { - setLoading(false); - } - }, [id]); - - useEffect(() => { - if (id) fetchTaskDetail(); - }, [id, fetchTaskDetail]); - - const handleToggleStatus = async () => { - if (!task || !id) return; - try { - const newStatus = task.status === 1 ? 2 : 1; - await request( - "/v1/workbench/update-status", - { id, status: newStatus }, - "POST" - ); - setTask({ ...task, status: newStatus }); - message.success(newStatus === 1 ? "任务已开启" : "任务已暂停"); - } catch { - message.error("操作失败"); - } - }; - - const handleEdit = () => { - if (id) navigate(`/workspace/moments-sync/edit/${id}`); - }; - - if (loading) { - return ( - -
- -
-
- ); - } - - if (!task) { - return ( - -
-
任务不存在
- -
-
- ); - } - - return ( - } - onClick={handleEdit} - className={style.editBtn} - type="primary" - > - 编辑任务 - - } - /> - } - > -
-
-
-
{task.name}
- - {getStatusText(task.status)} - - -
-
-
-
任务详情
-
- 推送设备:{task.config?.devices?.length || 0} 个 -
-
- 内容库:{task.config?.contentLibraryNames?.join(",") || "-"} -
-
- 已同步:{task.syncCount || 0} 条 -
-
- 创建人:{task.creatorName} -
-
-
-
时间信息
-
- 创建时间:{task.createTime} -
-
- 上次同步:{task.lastSyncTime || "无"} -
-
-
-
-
同步内容预览
-
暂无内容预览
-
-
-
-
- ); -}; - -export default MomentsSyncDetail; +import React, { useState, useEffect, useCallback } from "react"; +import { useParams, useNavigate } from "react-router-dom"; +import { Button, Switch, message, Spin } from "antd"; +import NavCommon from "@/components/NavCommon"; +import { EditOutlined } from "@ant-design/icons"; +import Layout from "@/components/Layout/Layout"; +import style from "./index.module.scss"; +import request from "@/api/request"; + +interface MomentsSyncTask { + id: string; + name: string; + status: 1 | 2; + deviceCount: number; + syncCount: number; + lastSyncTime: string; + createTime: string; + creatorName: string; + updateTime?: string; + maxSyncPerDay?: number; + syncInterval?: number; + timeRange?: { start: string; end: string }; + contentTypes?: string[]; + targetTags?: string[]; + todaySyncCount?: number; + totalSyncCount?: number; + syncMode?: string; + config?: { + devices?: string[]; + contentLibraryNames?: string[]; + syncCount?: number; + }; +} + +const getStatusText = (status: number) => { + switch (status) { + case 1: + return "进行中"; + case 2: + return "已暂停"; + default: + return "未知"; + } +}; + +const MomentsSyncDetail: React.FC = () => { + const { id } = useParams(); + const navigate = useNavigate(); + const [task, setTask] = useState(null); + const [loading, setLoading] = useState(false); + + const fetchTaskDetail = useCallback(async () => { + if (!id) return; + setLoading(true); + try { + const res = await request("/v1/workbench/detail", { id }, "GET"); + if (res) setTask(res); + } catch { + message.error("获取任务详情失败"); + } finally { + setLoading(false); + } + }, [id]); + + useEffect(() => { + if (id) fetchTaskDetail(); + }, [id, fetchTaskDetail]); + + const handleToggleStatus = async () => { + if (!task || !id) return; + try { + const newStatus = task.status === 1 ? 2 : 1; + await request( + "/v1/workbench/update-status", + { id, status: newStatus }, + "POST" + ); + setTask({ ...task, status: newStatus }); + message.success(newStatus === 1 ? "任务已开启" : "任务已暂停"); + } catch { + message.error("操作失败"); + } + }; + + const handleEdit = () => { + if (id) navigate(`/workspace/moments-sync/edit/${id}`); + }; + + if (loading) { + return ( + +
+ +
+
+ ); + } + + if (!task) { + return ( + +
+
任务不存在
+ +
+
+ ); + } + + return ( + } + onClick={handleEdit} + className={style.editBtn} + type="primary" + > + 编辑任务 + + } + /> + } + > +
+
+
+
{task.name}
+ + {getStatusText(task.status)} + + +
+
+
+
任务详情
+
+ 推送设备:{task.config?.devices?.length || 0} 个 +
+
+ 内容库:{task.config?.contentLibraryNames?.join(",") || "-"} +
+
+ 已同步:{task.syncCount || 0} 条 +
+
+ 创建人:{task.creatorName} +
+
+
+
时间信息
+
+ 创建时间:{task.createTime} +
+
+ 上次同步:{task.lastSyncTime || "无"} +
+
+
+
+
同步内容预览
+
暂无内容预览
+
+
+
+
+ ); +}; + +export default MomentsSyncDetail; diff --git a/nkebao/src/pages/workspace/moments-sync/index.module.scss b/nkebao/src/pages/workspace/moments-sync/index.module.scss index 619dc663..3ccde301 100644 --- a/nkebao/src/pages/workspace/moments-sync/index.module.scss +++ b/nkebao/src/pages/workspace/moments-sync/index.module.scss @@ -235,8 +235,7 @@ .detailBg { background: #f8f6f3; - min-height: 100vh; - padding: 24px 0 32px 0; + padding:12px; display: flex; flex-direction: column; align-items: center; diff --git a/nkebao/src/pages/workspace/moments-sync/new/index.tsx b/nkebao/src/pages/workspace/moments-sync/new/index.tsx index 1be6212a..ca827184 100644 --- a/nkebao/src/pages/workspace/moments-sync/new/index.tsx +++ b/nkebao/src/pages/workspace/moments-sync/new/index.tsx @@ -32,7 +32,7 @@ const defaultForm = { accountType: "business" as "business" | "personal", // 仅UI用 enabled: true, selectedDevices: [] as string[], - selectedLibraries: [] as (string | number)[], + selectedLibraries: [] as any[], // 存完整内容库对象数组 contentTypes: ["text", "image", "video"], targetTags: [] as string[], filterKeywords: [] as string[], @@ -63,7 +63,8 @@ const NewMomentsSync: React.FC = () => { accountType: res.accountType === 1 ? "business" : "personal", enabled: res.status === 1, selectedDevices: res.config?.devices || [], - selectedLibraries: res.config?.contentLibraryNames || [], + // 关键:用id字符串数组回填 + selectedLibraries: res.config?.contentLibraries || [], // 直接用对象数组 contentTypes: res.config?.contentTypes || ["text", "image", "video"], targetTags: res.config?.targetTags || [], filterKeywords: res.config?.filterKeywords || [], @@ -117,7 +118,7 @@ const NewMomentsSync: React.FC = () => { const params = { name: formData.taskName, devices: formData.selectedDevices, - contentLibraries: formData.selectedLibraries.map(Number), + contentLibraries: formData.selectedLibraries.map((lib: any) => lib.id), syncInterval: formData.syncInterval, syncCount: formData.syncCount, syncType: formData.syncType, // 账号类型真实传参 @@ -133,7 +134,7 @@ const NewMomentsSync: React.FC = () => { if (isEditMode && id) { await updateMomentsSync({ id, ...params }); message.success("更新成功"); - navigate(`/workspace/moments-sync/${id}`); + navigate(`/workspace/moments-sync`); } else { await createMomentsSync(params); message.success("创建成功");