import React, { useState, useEffect } from 'react'; import axios from 'axios'; import { toast } from 'react-hot-toast'; import { FileText, Plus, Edit, Trash2, Save, X, Eye, EyeOff } from 'lucide-react'; const PromptManager = ({ adminToken }) => { const [prompts, setPrompts] = useState([]); const [loading, setLoading] = useState(false); const [showModal, setShowModal] = useState(false); const [editingPrompt, setEditingPrompt] = useState(null); const [formData, setFormData] = useState({ name: '', type: 'polish', content: '', is_system_default: false }); useEffect(() => { fetchPrompts(); }, []); const fetchPrompts = async () => { setLoading(true); try { const response = await axios.get('/api/admin/prompts', { headers: { Authorization: `Bearer ${adminToken}` } }); setPrompts(response.data); } catch (error) { toast.error('获取提示词列表失败'); } finally { setLoading(false); } }; const handleCreate = () => { setEditingPrompt(null); setFormData({ name: '', type: 'polish', content: '', is_system_default: false }); setShowModal(true); }; const handleEdit = (prompt) => { setEditingPrompt(prompt); setFormData({ name: prompt.name, type: prompt.type, content: prompt.content, is_system_default: prompt.is_system_default }); setShowModal(true); }; const handleSave = async () => { if (!formData.name || !formData.content) { toast.error('请填写完整信息'); return; } try { if (editingPrompt) { // 更新 await axios.put(`/api/admin/prompts/${editingPrompt.id}`, { name: formData.name, content: formData.content }, { headers: { Authorization: `Bearer ${adminToken}` } }); toast.success('提示词更新成功'); } else { // 创建 await axios.post('/api/admin/prompts', formData, { headers: { Authorization: `Bearer ${adminToken}` } }); toast.success('提示词创建成功'); } setShowModal(false); fetchPrompts(); } catch (error) { toast.error(error.response?.data?.detail || '操作失败'); } }; const handleToggleActive = async (promptId, currentStatus) => { try { await axios.put(`/api/admin/prompts/${promptId}`, { is_active: !currentStatus }, { headers: { Authorization: `Bearer ${adminToken}` } }); toast.success(currentStatus ? '已禁用' : '已启用'); fetchPrompts(); } catch (error) { toast.error('操作失败'); } }; const handleDelete = async (promptId, isSystemDefault) => { if (isSystemDefault) { toast.error('系统默认提示词不能删除'); return; } if (!window.confirm('确定要删除这个提示词吗?')) { return; } try { await axios.delete(`/api/admin/prompts/${promptId}`, { headers: { Authorization: `Bearer ${adminToken}` } }); toast.success('提示词已删除'); fetchPrompts(); } catch (error) { toast.error(error.response?.data?.detail || '删除失败'); } }; return (

提示词管理

{loading ? (
) : prompts.length === 0 ? (

暂无提示词

) : (
{prompts.map((prompt) => (

{prompt.name}

{prompt.is_system_default && ( 系统默认 )}
{prompt.type === 'polish' ? '润色' : '增强'} {prompt.is_active ? '启用' : '禁用'}

{prompt.content}

创建于 {new Date(prompt.created_at).toLocaleDateString()}
{!prompt.is_system_default && ( )}
))}
)} {/* 编辑/创建模态框 */} {showModal && (

{editingPrompt ? '编辑提示词' : '新建提示词'}

setFormData({...formData, name: e.target.value})} placeholder="提示词名称" className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent" />