diff --git a/nkebao/src/App.tsx b/nkebao/src/App.tsx index 7382c97e..5fdecdd5 100644 --- a/nkebao/src/App.tsx +++ b/nkebao/src/App.tsx @@ -22,7 +22,6 @@ import GroupPush from './pages/workspace/group-push/GroupPush'; import MomentsSync from './pages/workspace/moments-sync/MomentsSync'; import MomentsSyncDetail from './pages/workspace/moments-sync/Detail'; import NewMomentsSync from './pages/workspace/moments-sync/new'; -import EditMomentsSync from './pages/workspace/moments-sync/edit'; import AIAssistant from './pages/workspace/ai-assistant/AIAssistant'; import TrafficDistribution from './pages/workspace/traffic-distribution/TrafficDistribution'; import TrafficDistributionDetail from './pages/workspace/traffic-distribution/Detail'; @@ -69,7 +68,7 @@ function App() { } /> } /> } /> - } /> + } /> } /> } /> } /> diff --git a/nkebao/src/pages/workspace/moments-sync/edit.tsx b/nkebao/src/pages/workspace/moments-sync/edit.tsx deleted file mode 100644 index 09902ab9..00000000 --- a/nkebao/src/pages/workspace/moments-sync/edit.tsx +++ /dev/null @@ -1,214 +0,0 @@ -import React, { useState, useEffect, useCallback } from 'react'; -import { useParams, useNavigate } from 'react-router-dom'; -import { Button } from '@/components/ui/button'; -import { Input } from '@/components/ui/input'; -import { useToast } from '@/components/ui/toast'; -import { fetchMomentsSyncTaskDetail, updateMomentsSyncTask } from '@/api/momentsSync'; -import { MomentsSyncTask } from '@/types/moments-sync'; -import { ChevronLeft } from 'lucide-react'; - -export default function EditMomentsSyncTask() { - const { id } = useParams(); - const navigate = useNavigate(); - const { toast } = useToast(); - const [loading, setLoading] = useState(false); - const [task, setTask] = useState(null); - const [form, setForm] = useState({ - name: '', - deviceIds: '', - contentLib: '', - syncMode: 'auto', - syncInterval: '30', - maxSyncPerDay: '100', - timeStart: '08:00', - timeEnd: '22:00', - targetTags: '', - contentTypes: '', - filterKeywords: '', - }); - - const fetchTaskDetail = useCallback(async () => { - if (!id) return; - setLoading(true); - try { - const taskData = await fetchMomentsSyncTaskDetail(id); - if (taskData) { - setTask(taskData); - setForm({ - name: taskData.name, - deviceIds: taskData.devices.join(','), - contentLib: taskData.contentLib || '', - syncMode: taskData.syncMode, - syncInterval: taskData.syncInterval.toString(), - maxSyncPerDay: taskData.maxSyncPerDay.toString(), - timeStart: taskData.timeRange.start, - timeEnd: taskData.timeRange.end, - targetTags: taskData.targetTags.join(','), - contentTypes: taskData.contentTypes.join(','), - filterKeywords: taskData.filterKeywords.join(','), - }); - } - } catch (error) { - toast({ title: '获取任务详情失败', variant: 'destructive' }); - } finally { - setLoading(false); - } - }, [id, toast]); - - useEffect(() => { - if (id) { - fetchTaskDetail(); - } - }, [id, fetchTaskDetail]); - - const handleChange = (e: React.ChangeEvent) => { - const { name, value } = e.target; - setForm(prev => ({ - ...prev, - [name]: value, - })); - }; - - const handleSubmit = async (e: React.FormEvent) => { - e.preventDefault(); - if (!id) return; - - if (!form.name.trim()) { - toast({ title: '请输入任务名称', variant: 'destructive' }); - return; - } - if (!form.deviceIds.trim()) { - toast({ title: '请输入推送设备', variant: 'destructive' }); - return; - } - if (!form.contentLib.trim()) { - toast({ title: '请输入内容库', variant: 'destructive' }); - return; - } - - setLoading(true); - try { - await updateMomentsSyncTask({ - id, - name: form.name, - devices: form.deviceIds.split(',').map(s => s.trim()).filter(Boolean), - contentLibraries: form.contentLib.split(',').map(s => s.trim()).filter(Boolean), - syncInterval: Number(form.syncInterval), - syncCount: Number(form.maxSyncPerDay), - syncType: form.syncMode === 'auto' ? 1 : 2, - startTime: form.timeStart, - endTime: form.timeEnd, - accountType: 1, // 默认为业务号 - contentTypes: form.contentTypes.split(',').map(s => s.trim()).filter(Boolean) as ('text' | 'image' | 'video' | 'link')[], - targetTags: form.targetTags.split(',').map(s => s.trim()).filter(Boolean), - filterKeywords: form.filterKeywords.split(',').map(s => s.trim()).filter(Boolean), - }); - toast({ title: '更新成功' }); - navigate(`/workspace/moments-sync/${id}`); - } catch (error) { - toast({ title: '更新失败', variant: 'destructive' }); - } finally { - setLoading(false); - } - }; - - if (loading && !task) { - return ( -
-
-
-

加载中...

-
-
- ); - } - - if (!task) { - return ( -
-
-

任务不存在

- -
-
- ); - } - - return ( -
- {/* Header */} -
-
-
- -

编辑朋友圈同步任务

-
-
-
- -
-

编辑任务配置

-
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- - -
-
- - -
-
-
-
- - -
-
- - -
-
-
- - -
-
- - -
-
- - -
-
- -
-
-
-
- ); -} \ No newline at end of file diff --git a/nkebao/src/pages/workspace/moments-sync/new.tsx b/nkebao/src/pages/workspace/moments-sync/new.tsx index f204b13a..ba65e2f2 100644 --- a/nkebao/src/pages/workspace/moments-sync/new.tsx +++ b/nkebao/src/pages/workspace/moments-sync/new.tsx @@ -1,15 +1,15 @@ -import React, { useState } from 'react'; -import { useNavigate } from 'react-router-dom'; +import React, { useState, useEffect, useCallback } from 'react'; +import { useNavigate, useParams } from 'react-router-dom'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Switch } from '@/components/ui/switch'; import { useToast } from '@/components/ui/toast'; -import { createMomentsSyncTask } from '@/api/momentsSync'; -import { ChevronLeft, Clock, Plus, Minus, Search } from 'lucide-react'; +import { createMomentsSyncTask, updateMomentsSyncTask, fetchMomentsSyncTaskDetail } from '@/api/momentsSync'; +import { ChevronLeft, Clock, Search } from 'lucide-react'; import Layout from '@/components/Layout'; -import BottomNav from '@/components/BottomNav'; import { DeviceSelectionDialog } from '@/components/DeviceSelectionDialog'; import { ContentLibrarySelectionDialog } from '@/components/ContentLibrarySelectionDialog'; +import { ContentType } from '@/types/moments-sync'; // 步骤指示器组件 interface StepIndicatorProps { @@ -69,7 +69,7 @@ interface BasicSettingsProps { interval: number; accountType: "business" | "personal"; enabled: boolean; - contentTypes: ('text' | 'image' | 'video')[]; + contentTypes: ContentType[]; targetTags: string[]; filterKeywords: string[]; }; @@ -204,13 +204,13 @@ function BasicSettings({ formData, onChange, onNext }: BasicSettingsProps) { -

新建朋友圈同步

+

{isEditMode ? '编辑朋友圈同步' : '新建朋友圈同步'}

} @@ -332,110 +381,101 @@ export default function NewMomentsSyncTask() {
-
{currentStep === 1 && ( )} - - {currentStep === 2 && ( -
-
- - setDeviceDialogOpen(true)} - readOnly + {currentStep === 2 && ( +
+
+ + setDeviceDialogOpen(true)} + readOnly + /> +
+ {formData.selectedDevices.length > 0 && ( +
+ 已选设备:{formData.selectedDevices.length} 个 +
+ {formData.selectedDevices.map(id => { + // 这里可以根据实际API获取设备名称 + return `设备 ${id}`; + }).join(', ')} +
+
+ )} +
+ + +
+ { + handleUpdateFormData({ selectedDevices: devices }); + }} />
- - {formData.selectedDevices.length > 0 && ( -
- 已选设备:{formData.selectedDevices.length} 个 -
- {formData.selectedDevices.map(id => { - // 这里可以根据实际API获取设备名称 - return `设备 ${id}`; - }).join(', ')} -
+ )} + {currentStep === 3 && ( +
+
+ + setContentLibraryDialogOpen(true)} + readOnly + />
- )} - -
- - -
- - { - handleUpdateFormData({ selectedDevices: devices }); - }} - /> -
- )} - - {currentStep === 3 && ( -
-
- - setContentLibraryDialogOpen(true)} - readOnly + {formData.selectedLibraries.length > 0 && ( +
+ 已选内容库:{formData.selectedLibraries.length} 个 +
+ {formData.selectedLibraries.map(id => { + // 这里可以根据实际API获取内容库名称 + return `朋友圈内容库${id}`; + }).join(', ')} +
+
+ )} +
+ + +
+ { + handleUpdateFormData({ selectedLibraries: libraries }); + }} />
- - {formData.selectedLibraries.length > 0 && ( -
- 已选内容库:{formData.selectedLibraries.length} 个 -
- {formData.selectedLibraries.map(id => { - // 这里可以根据实际API获取内容库名称 - return `朋友圈内容库${id}`; - }).join(', ')} -
-
- )} - -
- - -
- - { - handleUpdateFormData({ selectedLibraries: libraries }); - }} - /> -
- )} + )}
); -} \ No newline at end of file +} \ No newline at end of file