"use client" import { useState, useEffect, use } from "react" import { ChevronLeft, X } from "lucide-react" import { Button } from "@/components/ui/button" import { Card } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Switch } from "@/components/ui/switch" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Textarea } from "@/components/ui/textarea" import { useRouter } from "next/navigation" import { DateRangePicker } from "@/components/ui/date-range-picker" import { WechatFriendSelector } from "@/components/WechatFriendSelector" import { WechatGroupSelector } from "@/components/WechatGroupSelector" import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion" import { api } from "@/lib/api" import { showToast } from "@/lib/toast" import { format, parse } from "date-fns" interface WechatFriend { id: string nickname: string wechatId: string avatar: string gender?: "male" | "female" customer?: string alias?: string ownerNickname?: string ownerAlias?: string } interface WechatGroup { id: string name: string memberCount: number avatar: string owner: string customer: string } interface ContentLibraryDetail { id: string name: string sourceType: number status: number sourceFriends: any[] sourceGroups: any[] keywordInclude: string[] keywordExclude: string[] isEnabled: number aiPrompt: string timeEnabled: number timeStart: string timeEnd: string createTime: string updateTime: string } interface ApiResponse { code: number msg: string data: T } export default function EditContentLibraryPage({ params }: { params: Promise<{ id: string }> }) { const resolvedParams = use(params) const router = useRouter() const [formData, setFormData] = useState({ name: "", sourceType: "friends" as "friends" | "groups", keywordsInclude: "", keywordsExclude: "", startDate: "", endDate: "", selectedFriends: [] as WechatFriend[], selectedGroups: [] as WechatGroup[], useAI: false, aiPrompt: "", enabled: true, }) const [isWechatFriendSelectorOpen, setIsWechatFriendSelectorOpen] = useState(false) const [isWechatGroupSelectorOpen, setIsWechatGroupSelectorOpen] = useState(false) const [loading, setLoading] = useState(false) const [isLoadingData, setIsLoadingData] = useState(true) // 获取内容库详情 useEffect(() => { const fetchLibraryDetail = async () => { setIsLoadingData(true) const loadingToast = showToast("正在加载内容库数据...", "loading", true); try { const response = await api.get>(`/v1/content/library/detail?id=${resolvedParams.id}`) if (response.code === 200 && response.data) { const data = response.data // 直接使用API返回的好友和群组数据 const friends = data.selectedFriends || []; const groups = data.sourceGroups || []; setFormData({ name: data.name, sourceType: data.sourceType === 1 ? "friends" : "groups", keywordsInclude: data.keywordInclude ? data.keywordInclude.join(", ") : "", keywordsExclude: data.keywordExclude ? data.keywordExclude.join(", ") : "", startDate: data.timeStart || "", endDate: data.timeEnd || "", selectedFriends: friends, selectedGroups: groups, useAI: !!data.aiPrompt, aiPrompt: data.aiPrompt || "", enabled: data.status === 1, }) } else { showToast(response.msg || "获取内容库详情失败", "error") router.back() } } catch (error: any) { console.error("获取内容库详情失败:", error) showToast(error?.message || "请检查网络连接", "error") router.back() } finally { setIsLoadingData(false) loadingToast.remove() } } fetchLibraryDetail() }, [resolvedParams.id, router]) const removeFriend = (friendId: string) => { setFormData((prev) => ({ ...prev, selectedFriends: prev.selectedFriends.filter((friend) => friend.id !== friendId), })) } const removeGroup = (groupId: string) => { setFormData((prev) => ({ ...prev, selectedGroups: prev.selectedGroups.filter((group) => group.id !== groupId), })) } const handleSubmit = async () => { if (!formData.name) { showToast("请输入内容库名称", "error") return } if (formData.sourceType === "friends" && formData.selectedFriends.length === 0) { showToast("请选择微信好友", "error") return } if (formData.sourceType === "groups" && formData.selectedGroups.length === 0) { showToast("请选择聊天群", "error") return } setLoading(true) const loadingToast = showToast("正在更新内容库...", "loading", true); try { const payload = { id: resolvedParams.id, name: formData.name, sourceType: formData.sourceType === "friends" ? 1 : 2, friends: formData.selectedFriends.map(f => f.id), groups: formData.selectedGroups.map(g => g.id), keywordInclude: formData.keywordsInclude.split(",").map(k => k.trim()).filter(Boolean), keywordExclude: formData.keywordsExclude.split(",").map(k => k.trim()).filter(Boolean), aiPrompt: formData.useAI ? formData.aiPrompt : "", timeEnabled: formData.startDate && formData.endDate ? 1 : 0, startTime: formData.startDate || "", endTime: formData.endDate || "", status: formData.enabled ? 1 : 0 } const response = await api.post("/v1/content/library/update", payload) if (response.code === 200) { loadingToast.remove() showToast("更新成功", "success") router.push("/content") } else { loadingToast.remove() showToast(response.msg || "更新失败", "error") } } catch (error: any) { console.error("更新内容库失败:", error) loadingToast.remove() showToast(error?.message || "请检查网络连接", "error") } finally { setLoading(false) } } if (isLoadingData) { return (

加载中...

) } return (

编辑内容库

setFormData({ ...formData, name: e.target.value })} placeholder="请输入内容库名称" required className="mt-1.5" />
setFormData({ ...formData, sourceType: value as "friends" | "groups" })} className="mt-1.5" > 选择微信好友 选择聊天群 {formData.selectedFriends.length > 0 && (
{formData.selectedFriends.map((friend) => (
{friend.nickname} {friend.nickname}
))}
)}
{formData.selectedGroups.length > 0 && (
{formData.selectedGroups.map((group) => (
{group.name} {group.name}
))}
)}
关键字设置