diff --git a/nkebao/src/pages/devices/DeviceDetail.tsx b/nkebao/src/pages/devices/DeviceDetail.tsx index a67f8883e..5af780d05 100644 --- a/nkebao/src/pages/devices/DeviceDetail.tsx +++ b/nkebao/src/pages/devices/DeviceDetail.tsx @@ -1,371 +1,371 @@ -import React, { useEffect, useState, useCallback, useRef } from "react"; -import { useParams, useNavigate } from "react-router-dom"; -import { NavBar, Tabs, Switch, Toast, SpinLoading, Button } from "antd-mobile"; -import { SettingOutlined, RedoOutlined } from "@ant-design/icons"; -import Layout from "@/components/Layout/Layout"; -import MeauMobile from "@/components/MeauMobile/MeauMoible"; -import { - fetchDeviceDetail, - fetchDeviceRelatedAccounts, - fetchDeviceHandleLogs, - updateDeviceTaskConfig, -} from "@/api/devices"; -import type { Device, WechatAccount, HandleLog } from "@/types/device"; - -const DeviceDetail: React.FC = () => { - const { id } = useParams<{ id: string }>(); - const navigate = useNavigate(); - const [loading, setLoading] = useState(true); - const [device, setDevice] = useState(null); - const [tab, setTab] = useState("info"); - const [accounts, setAccounts] = useState([]); - const [accountsLoading, setAccountsLoading] = useState(false); - const [logs, setLogs] = useState([]); - const [logsLoading, setLogsLoading] = useState(false); - const [featureSaving, setFeatureSaving] = useState<{ [k: string]: boolean }>( - {} - ); - - // 获取设备详情 - const loadDetail = useCallback(async () => { - if (!id) return; - setLoading(true); - try { - const res = await fetchDeviceDetail(id); - setDevice(res); - } catch (e: any) { - Toast.show({ content: e.message || "获取设备详情失败", position: "top" }); - } finally { - setLoading(false); - } - }, [id]); - - // 获取关联账号 - const loadAccounts = useCallback(async () => { - if (!id) return; - setAccountsLoading(true); - try { - const res = await fetchDeviceRelatedAccounts(id); - setAccounts(Array.isArray(res.accounts) ? res.accounts : []); - } catch (e: any) { - Toast.show({ content: e.message || "获取关联账号失败", position: "top" }); - } finally { - setAccountsLoading(false); - } - }, [id]); - - // 获取操作日志 - const loadLogs = useCallback(async () => { - if (!id) return; - setLogsLoading(true); - try { - const res = await fetchDeviceHandleLogs(id, 1, 20); - setLogs(Array.isArray(res.list) ? res.list : []); - } catch (e: any) { - Toast.show({ content: e.message || "获取操作日志失败", position: "top" }); - } finally { - setLogsLoading(false); - } - }, [id]); - - useEffect(() => { - loadDetail(); - // eslint-disable-next-line - }, [id]); - - useEffect(() => { - if (tab === "accounts") loadAccounts(); - if (tab === "logs") loadLogs(); - // eslint-disable-next-line - }, [tab]); - - // 功能开关 - const handleFeatureChange = async ( - feature: keyof Device["features"], - checked: boolean - ) => { - if (!id) return; - setFeatureSaving((prev) => ({ ...prev, [feature]: true })); - try { - await updateDeviceTaskConfig({ deviceId: id, [feature]: checked }); - setDevice((prev) => - prev - ? { - ...prev, - features: { ...prev.features, [feature]: checked }, - } - : prev - ); - Toast.show({ - content: `${getFeatureName(feature)}已${checked ? "开启" : "关闭"}`, - }); - } catch (e: any) { - Toast.show({ content: e.message || "设置失败", position: "top" }); - } finally { - setFeatureSaving((prev) => ({ ...prev, [feature]: false })); - } - }; - - const getFeatureName = (feature: string) => { - const map: Record = { - autoAddFriend: "自动加好友", - autoReply: "自动回复", - momentsSync: "朋友圈同步", - aiChat: "AI会话", - }; - return map[feature] || feature; - }; - - return ( - navigate(-1)} - style={{ background: "#fff" }} - right={ - - } - > - - 设备详情 - - - } - loading={loading} - > - {!device ? ( -
- -
正在加载设备信息...
-
- ) : ( -
- {/* 基本信息卡片 */} -
-
- {device.memo || "未命名设备"} -
-
- IMEI: {device.imei} -
-
- 微信号: {device.wechatId || "未绑定"} -
-
- 好友数: {device.totalFriend ?? "-"} -
-
- {device.status === "online" || device.alive === 1 - ? "在线" - : "离线"} -
-
- {/* 标签页 */} - - - - - - {/* 功能开关 */} - {tab === "info" && ( -
- {["autoAddFriend", "autoReply", "momentsSync", "aiChat"].map( - (f) => ( -
-
-
{getFeatureName(f)}
-
- - handleFeatureChange( - f as keyof Device["features"], - checked - ) - } - /> -
- ) - )} -
- )} - {/* 关联账号 */} - {tab === "accounts" && ( -
- {accountsLoading ? ( -
- -
- ) : accounts.length === 0 ? ( -
- 暂无关联微信账号 -
- ) : ( -
- {accounts.map((acc) => ( -
- {acc.nickname} -
-
{acc.nickname}
-
- 微信号: {acc.wechatId} -
-
- 好友数: {acc.totalFriend} -
-
- 最后活跃: {acc.lastActive} -
-
- - {acc.wechatAliveText} - -
- ))} -
- )} -
- -
-
- )} - {/* 操作日志 */} - {tab === "logs" && ( -
- {logsLoading ? ( -
- -
- ) : logs.length === 0 ? ( -
- 暂无操作日志 -
- ) : ( -
- {logs.map((log) => ( -
-
{log.content}
-
- 操作人: {log.username} · {log.createTime} -
-
- ))} -
- )} -
- -
-
- )} -
- )} -
- ); -}; - -export default DeviceDetail; +import React, { useEffect, useState, useCallback, useRef } from "react"; +import { useParams, useNavigate } from "react-router-dom"; +import { NavBar, Tabs, Switch, Toast, SpinLoading, Button } from "antd-mobile"; +import { SettingOutlined, RedoOutlined } from "@ant-design/icons"; +import Layout from "@/components/Layout/Layout"; +import MeauMobile from "@/components/MeauMobile/MeauMoible"; +import { + fetchDeviceDetail, + fetchDeviceRelatedAccounts, + fetchDeviceHandleLogs, + updateDeviceTaskConfig, +} from "@/api/devices"; +import type { Device, WechatAccount, HandleLog } from "@/types/device"; + +const DeviceDetail: React.FC = () => { + const { id } = useParams<{ id: string }>(); + const navigate = useNavigate(); + const [loading, setLoading] = useState(true); + const [device, setDevice] = useState(null); + const [tab, setTab] = useState("info"); + const [accounts, setAccounts] = useState([]); + const [accountsLoading, setAccountsLoading] = useState(false); + const [logs, setLogs] = useState([]); + const [logsLoading, setLogsLoading] = useState(false); + const [featureSaving, setFeatureSaving] = useState<{ [k: string]: boolean }>( + {} + ); + + // 获取设备详情 + const loadDetail = useCallback(async () => { + if (!id) return; + setLoading(true); + try { + const res = await fetchDeviceDetail(id); + setDevice(res); + } catch (e: any) { + Toast.show({ content: e.message || "获取设备详情失败", position: "top" }); + } finally { + setLoading(false); + } + }, [id]); + + // 获取关联账号 + const loadAccounts = useCallback(async () => { + if (!id) return; + setAccountsLoading(true); + try { + const res = await fetchDeviceRelatedAccounts(id); + setAccounts(Array.isArray(res.accounts) ? res.accounts : []); + } catch (e: any) { + Toast.show({ content: e.message || "获取关联账号失败", position: "top" }); + } finally { + setAccountsLoading(false); + } + }, [id]); + + // 获取操作日志 + const loadLogs = useCallback(async () => { + if (!id) return; + setLogsLoading(true); + try { + const res = await fetchDeviceHandleLogs(id, 1, 20); + setLogs(Array.isArray(res.list) ? res.list : []); + } catch (e: any) { + Toast.show({ content: e.message || "获取操作日志失败", position: "top" }); + } finally { + setLogsLoading(false); + } + }, [id]); + + useEffect(() => { + loadDetail(); + // eslint-disable-next-line + }, [id]); + + useEffect(() => { + if (tab === "accounts") loadAccounts(); + if (tab === "logs") loadLogs(); + // eslint-disable-next-line + }, [tab]); + + // 功能开关 + const handleFeatureChange = async ( + feature: keyof Device["features"], + checked: boolean + ) => { + if (!id) return; + setFeatureSaving((prev) => ({ ...prev, [feature]: true })); + try { + await updateDeviceTaskConfig({ deviceId: id, [feature]: checked }); + setDevice((prev) => + prev + ? { + ...prev, + features: { ...prev.features, [feature]: checked }, + } + : prev + ); + Toast.show({ + content: `${getFeatureName(feature)}已${checked ? "开启" : "关闭"}`, + }); + } catch (e: any) { + Toast.show({ content: e.message || "设置失败", position: "top" }); + } finally { + setFeatureSaving((prev) => ({ ...prev, [feature]: false })); + } + }; + + const getFeatureName = (feature: string) => { + const map: Record = { + autoAddFriend: "自动加好友", + autoReply: "自动回复", + momentsSync: "朋友圈同步", + aiChat: "AI会话", + }; + return map[feature] || feature; + }; + + return ( + navigate(-1)} + style={{ background: "#fff" }} + right={ + + } + > + + 设备详情 + + + } + loading={loading} + > + {!device ? ( +
+ +
正在加载设备信息...
+
+ ) : ( +
+ {/* 基本信息卡片 */} +
+
+ {device.memo || "未命名设备"} +
+
+ IMEI: {device.imei} +
+
+ 微信号: {device.wechatId || "未绑定"} +
+
+ 好友数: {device.totalFriend ?? "-"} +
+
+ {device.status === "online" || device.alive === 1 + ? "在线" + : "离线"} +
+
+ {/* 标签页 */} + + + + + + {/* 功能开关 */} + {tab === "info" && ( +
+ {["autoAddFriend", "autoReply", "momentsSync", "aiChat"].map( + (f) => ( +
+
+
{getFeatureName(f)}
+
+ + handleFeatureChange( + f as keyof Device["features"], + checked + ) + } + /> +
+ ) + )} +
+ )} + {/* 关联账号 */} + {tab === "accounts" && ( +
+ {accountsLoading ? ( +
+ +
+ ) : accounts.length === 0 ? ( +
+ 暂无关联微信账号 +
+ ) : ( +
+ {accounts.map((acc) => ( +
+ {acc.nickname} +
+
{acc.nickname}
+
+ 微信号: {acc.wechatId} +
+
+ 好友数: {acc.totalFriend} +
+
+ 最后活跃: {acc.lastActive} +
+
+ + {acc.wechatAliveText} + +
+ ))} +
+ )} +
+ +
+
+ )} + {/* 操作日志 */} + {tab === "logs" && ( +
+ {logsLoading ? ( +
+ +
+ ) : logs.length === 0 ? ( +
+ 暂无操作日志 +
+ ) : ( +
+ {logs.map((log) => ( +
+
{log.content}
+
+ 操作人: {log.username} · {log.createTime} +
+
+ ))} +
+ )} +
+ +
+
+ )} +
+ )} +
+ ); +}; + +export default DeviceDetail; diff --git a/nkebao/src/pages/workspace/moments-sync/MomentsSync.tsx b/nkebao/src/pages/workspace/moments-sync/MomentsSync.tsx index c7d1fb1f4..48f2d4f74 100644 --- a/nkebao/src/pages/workspace/moments-sync/MomentsSync.tsx +++ b/nkebao/src/pages/workspace/moments-sync/MomentsSync.tsx @@ -1,286 +1,294 @@ -import React, { useEffect, useState } from "react"; -import { useNavigate } from "react-router-dom"; -import { Switch, Input, message, Dropdown, Menu } from "antd"; -import { NavBar, Button } from "antd-mobile"; -import { - PlusOutlined, - SearchOutlined, - ReloadOutlined, - EyeOutlined, - EditOutlined, - DeleteOutlined, - CopyOutlined, - MoreOutlined, - ClockCircleOutlined, - ArrowLeftOutlined, -} 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; - contentLib?: string; - config?: { devices?: string[]; contentLibraryNames?: string[] }; -} - -const getStatusText = (status: number) => { - switch (status) { - case 1: - return "进行中"; - case 2: - return "已暂停"; - default: - return "未知"; - } -}; - -const MomentsSync: React.FC = () => { - const navigate = useNavigate(); - const [searchTerm, setSearchTerm] = useState(""); - const [loading, setLoading] = useState(false); - const [tasks, setTasks] = useState([]); - - const fetchTasks = async () => { - setLoading(true); - try { - const res = await request( - "/v1/workbench/list", - { type: 2, page: 1, limit: 100 }, - "GET" - ); - setTasks(res.list || []); - } catch (e) { - message.error("获取任务失败"); - } finally { - setLoading(false); - } - }; - - useEffect(() => { - fetchTasks(); - }, []); - - const handleDelete = async (id: string) => { - if (!window.confirm("确定要删除该任务吗?")) return; - try { - await request("/v1/workbench/delete", { id }, "DELETE"); - message.success("删除成功"); - fetchTasks(); - } catch { - message.error("删除失败"); - } - }; - - const handleCopy = async (id: string) => { - try { - await request("/v1/workbench/copy", { id }, "POST"); - message.success("复制成功"); - fetchTasks(); - } catch { - message.error("复制失败"); - } - }; - - const handleToggle = async (id: string, status: number) => { - const newStatus = status === 1 ? 2 : 1; - try { - await request( - "/v1/workbench/update-status", - { id, status: newStatus }, - "POST" - ); - setTasks((prev) => - prev.map((t) => (t.id === id ? { ...t, status: newStatus } : t)) - ); - message.success("操作成功"); - } catch { - message.error("操作失败"); - } - }; - - const filteredTasks = tasks.filter((task) => - task.name.toLowerCase().includes(searchTerm.toLowerCase()) - ); - - // 菜单 - const getMenu = (task: MomentsSyncTask) => ( - - } - onClick={() => navigate(`/workspace/moments-sync/${task.id}`)} - > - 查看 - - } - onClick={() => navigate(`/workspace/moments-sync/edit/${task.id}`)} - > - 编辑 - - } - onClick={() => handleCopy(task.id)} - > - 复制 - - } - onClick={() => handleDelete(task.id)} - danger - > - 删除 - - - ); - - return ( - - - navigate("/workspace")} - /> - - } - right={ - - } - > - 朋友圈同步 - -
-
- setSearchTerm(e.target.value)} - prefix={} - allowClear - size="large" - /> -
- -
- - } - > -
-
- {filteredTasks.length === 0 ? ( -
- - - -
暂无同步任务
- -
- ) : ( - filteredTasks.map((task) => ( -
-
-
- {task.name} - - {getStatusText(task.status)} - -
-
- handleToggle(task.id, task.status)} - className={style.switchBtn} - size="small" - /> - -
-
-
-
- 推送设备:{task.config?.devices?.length || 0} 个 -
-
- 已同步:{task.syncCount || 0} 条 -
-
-
-
- 内容库: - {task.config?.contentLibraryNames?.join(",") || - task.contentLib || - "默认内容库"} -
-
- 创建人:{task.creatorName} -
-
-
-
- - 上次同步:{task.lastSyncTime || "无"} -
-
- 创建时间:{task.createTime} -
-
-
- )) - )} -
-
-
- ); -}; - -export default MomentsSync; +import React, { useEffect, useState } from "react"; +import { useNavigate } from "react-router-dom"; +import { Switch, Input, message, Dropdown, Menu } from "antd"; +import { NavBar, Button } from "antd-mobile"; +import { + PlusOutlined, + SearchOutlined, + ReloadOutlined, + EyeOutlined, + EditOutlined, + DeleteOutlined, + CopyOutlined, + MoreOutlined, + ClockCircleOutlined, + ArrowLeftOutlined, +} 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; + contentLib?: string; + config?: { devices?: string[]; contentLibraryNames?: string[] }; +} + +const getStatusText = (status: number) => { + switch (status) { + case 1: + return "进行中"; + case 2: + return "已暂停"; + default: + return "未知"; + } +}; + +const MomentsSync: React.FC = () => { + const navigate = useNavigate(); + const [searchTerm, setSearchTerm] = useState(""); + const [loading, setLoading] = useState(false); + const [tasks, setTasks] = useState([]); + + const fetchTasks = async () => { + setLoading(true); + try { + const res = await request( + "/v1/workbench/list", + { type: 2, page: 1, limit: 100 }, + "GET" + ); + setTasks(res.list || []); + } catch (e) { + message.error("获取任务失败"); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + fetchTasks(); + }, []); + + const handleDelete = async (id: string) => { + if (!window.confirm("确定要删除该任务吗?")) return; + try { + await request("/v1/workbench/delete", { id }, "DELETE"); + message.success("删除成功"); + fetchTasks(); + } catch { + message.error("删除失败"); + } + }; + + const handleCopy = async (id: string) => { + try { + await request("/v1/workbench/copy", { id }, "POST"); + message.success("复制成功"); + fetchTasks(); + } catch { + message.error("复制失败"); + } + }; + + const handleToggle = async (id: string, status: number) => { + const newStatus = status === 1 ? 2 : 1; + try { + await request( + "/v1/workbench/update-status", + { id, status: newStatus }, + "POST" + ); + setTasks((prev) => + prev.map((t) => (t.id === id ? { ...t, status: newStatus } : t)) + ); + message.success("操作成功"); + } catch { + message.error("操作失败"); + } + }; + + const filteredTasks = tasks.filter((task) => + task.name.toLowerCase().includes(searchTerm.toLowerCase()) + ); + + // 菜单 + const getMenu = (task: MomentsSyncTask) => ( + + } + onClick={() => navigate(`/workspace/moments-sync/${task.id}`)} + > + 查看 + + } + onClick={() => navigate(`/workspace/moments-sync/edit/${task.id}`)} + > + 编辑 + + } + onClick={() => handleCopy(task.id)} + > + 复制 + + } + onClick={() => handleDelete(task.id)} + danger + > + 删除 + + + ); + + return ( + + + navigate("/workspace")} + /> + + } + right={ + + } + > + 朋友圈同步 + +
+
+ setSearchTerm(e.target.value)} + prefix={} + allowClear + size="large" + /> +
+ +
+ + } + > +
+
+ {filteredTasks.length === 0 ? ( +
+ + + +
暂无同步任务
+ +
+ ) : ( + filteredTasks.map((task) => ( +
+
+
+ {task.name} + + {getStatusText(task.status)} + +
+
+ handleToggle(task.id, task.status)} + className={style.switchBtn} + size="small" + /> + + + +
+
+
+
+ 推送设备:{task.config?.devices?.length || 0} 个 +
+
+ 已同步:{task.syncCount || 0} 条 +
+
+
+
+ 内容库: + {task.config?.contentLibraryNames?.join(",") || + task.contentLib || + "默认内容库"} +
+
+ 创建人:{task.creatorName} +
+
+
+
+ + 上次同步:{task.lastSyncTime || "无"} +
+
+ 创建时间:{task.createTime} +
+
+
+ )) + )} +
+
+
+ ); +}; + +export default MomentsSync; diff --git a/nkebao/src/pages/workspace/moments-sync/new/index.module.scss b/nkebao/src/pages/workspace/moments-sync/new/index.module.scss index 94b4005da..e4480c12b 100644 --- a/nkebao/src/pages/workspace/moments-sync/new/index.module.scss +++ b/nkebao/src/pages/workspace/moments-sync/new/index.module.scss @@ -1,7 +1,13 @@ .formBg { padding: 16px; } - +.formStepBtnRow{ + display: flex; + justify-content: flex-end; + gap: 12px; + margin-top: 32px; + padding: 12px; +} .formSteps { display: flex; justify-content: center; diff --git a/nkebao/src/pages/workspace/moments-sync/new/index.tsx b/nkebao/src/pages/workspace/moments-sync/new/index.tsx index d5eaa45a6..872e1dcf6 100644 --- a/nkebao/src/pages/workspace/moments-sync/new/index.tsx +++ b/nkebao/src/pages/workspace/moments-sync/new/index.tsx @@ -1,8 +1,7 @@ import React, { useState, useEffect, useCallback } from "react"; import { useNavigate, useParams } from "react-router-dom"; import { Button, Input, Switch, message, Spin } from "antd"; -import { ArrowLeftOutlined } from "@ant-design/icons"; -import { NavBar } from "antd-mobile"; +import { MinusOutlined, PlusOutlined } from "@ant-design/icons"; import Layout from "@/components/Layout/Layout"; import style from "./index.module.scss"; @@ -15,6 +14,7 @@ import { } from "./api"; import DeviceSelection from "@/components/DeviceSelection"; import ContentLibrarySelection from "@/components/ContentLibrarySelection"; +import NavCommon from "@/components/NavCommon"; const steps = [ { id: 1, title: "基础设置", subtitle: "基础设置" }, @@ -27,10 +27,15 @@ const defaultForm = { startTime: "06:00", endTime: "23:59", syncCount: 5, - accountType: "business" as "business" | "personal", + syncInterval: 30, + syncType: 1, // 1=业务号 2=人设号 + accountType: "business" as "business" | "personal", // 仅UI用 enabled: true, selectedDevices: [] as string[], - selectedLibraries: [] as string[], + selectedLibraries: [] as (string | number)[], + contentTypes: ["text", "image", "video"], + targetTags: [] as string[], + filterKeywords: [] as string[], }; const NewMomentsSync: React.FC = () => { @@ -53,10 +58,15 @@ const NewMomentsSync: React.FC = () => { startTime: res.timeRange?.start || "06:00", endTime: res.timeRange?.end || "23:59", syncCount: res.config?.syncCount || res.syncCount || 5, + syncInterval: res.config?.syncInterval || res.syncInterval || 30, + syncType: res.accountType === 1 ? 1 : 2, accountType: res.accountType === 1 ? "business" : "personal", enabled: res.status === 1, selectedDevices: res.config?.devices || [], selectedLibraries: res.config?.contentLibraryNames || [], + contentTypes: res.config?.contentTypes || ["text", "image", "video"], + targetTags: res.config?.targetTags || [], + filterKeywords: res.config?.filterKeywords || [], }); } } catch { @@ -79,6 +89,15 @@ const NewMomentsSync: React.FC = () => { setFormData((prev) => ({ ...prev, ...data })); }; + // UI选择账号类型时同步syncType和accountType + const handleAccountTypeChange = (type: "business" | "personal") => { + setFormData((prev) => ({ + ...prev, + accountType: type, + syncType: type === "business" ? 1 : 2, + })); + }; + // 提交 const handleSubmit = async () => { if (!formData.taskName.trim()) { @@ -98,13 +117,18 @@ const NewMomentsSync: React.FC = () => { const params = { name: formData.taskName, devices: formData.selectedDevices, - contentLibraries: formData.selectedLibraries, + contentLibraries: formData.selectedLibraries.map(Number), + syncInterval: formData.syncInterval, syncCount: formData.syncCount, + syncType: formData.syncType, // 账号类型真实传参 + accountType: formData.accountType === "business" ? 1 : 2, // 也要传 startTime: formData.startTime, endTime: formData.endTime, - accountType: formData.accountType === "business" ? 1 : 2, - status: formData.enabled ? 1 : 2, + contentTypes: formData.contentTypes, + targetTags: formData.targetTags, + filterKeywords: formData.filterKeywords, type: 2, + status: formData.enabled ? 1 : 2, }; if (isEditMode && id) { await updateMomentsSync({ id, ...params }); @@ -122,7 +146,7 @@ const NewMomentsSync: React.FC = () => { } }; - // 步骤内容 + // 步骤内容(去除按钮) const renderStep = () => { if (currentStep === 0) { return ( @@ -166,7 +190,7 @@ const NewMomentsSync: React.FC = () => { updateForm({ syncCount: Math.max(1, formData.syncCount - 1) }) } > - - + {formData.syncCount} 条朋友圈 @@ -186,13 +210,13 @@ const NewMomentsSync: React.FC = () => {
@@ -209,12 +233,6 @@ const NewMomentsSync: React.FC = () => { />
- -
- -
); } @@ -231,14 +249,6 @@ const NewMomentsSync: React.FC = () => { selectedListMaxHeight={200} /> -
- - -
); } @@ -260,19 +270,57 @@ const NewMomentsSync: React.FC = () => { )} -
- - -
+ + ); + } + return null; + }; + + // 统一底部按钮 + const renderFooter = () => { + if (loading) return null; + if (currentStep === 0) { + return ( +
+ +
+ ); + } + if (currentStep === 1) { + return ( +
+ + +
+ ); + } + if (currentStep === 2) { + return ( +
+ +
); } @@ -282,21 +330,9 @@ const NewMomentsSync: React.FC = () => { return ( - navigate(-1)} - /> - - } - > - {isEditMode ? "编辑朋友圈同步" : "新建朋友圈同步"} - + } + footer={renderFooter()} >