import {useEffect, useState} from 'react' import {Link, useNavigate, useParams} from 'react-router-dom' import Navbar from '../components/Navbar' import {ArrowLeft, Book, Calendar, Download, Edit, MessageSquare, Tag, User} from 'lucide-react' import {type Character, characterApi} from '../api/character' export default function CharacterDetailPage() { const { id } = useParams<{ id: string }>() const [character, setCharacter] = useState(null) const [loading, setLoading] = useState(true) const navigate = useNavigate() useEffect(() => { if (id) { loadCharacter(parseInt(id)) } }, [id]) const loadCharacter = async (characterId: number) => { try { setLoading(true) const response = await characterApi.getCharacterById(characterId) setCharacter(response.data) } catch (err: any) { console.error('获取角色卡详情失败:', err) if (err.response?.status === 401) { navigate('/login') } else { alert('角色卡不存在或无权访问') navigate('/characters') } } finally { setLoading(false) } } const handleExport = async () => { if (!character) return try { const response = await characterApi.exportCharacter(character.id) const blob = new Blob([response.data], { type: 'application/json' }) const url = URL.createObjectURL(blob) const a = document.createElement('a') a.href = url a.download = `${character.name}.json` a.click() URL.revokeObjectURL(url) } catch (err) { console.error('导出角色卡失败:', err) alert('导出失败,请重试') } } const handleStartChat = () => { if (!character) return navigate(`/chat?character=${character.id}`) } const getWorldBookStats = () => { if (!character?.characterBook) return null try { const book = typeof character.characterBook === 'string' ? JSON.parse(character.characterBook) : character.characterBook return { name: book.name || '未命名世界书', entryCount: book.entries?.length || 0 } } catch { return null } } if (loading) { return (
加载中...
) } if (!character) { return null } const worldBookStats = getWorldBookStats() return (
返回角色管理
{character.avatar && ( {character.name} )}

{character.name}

{character.creator && (
{character.creator}
)}
{character.tags && character.tags.length > 0 && (
标签
{character.tags.map((tag, i) => ( {tag} ))}
)} {worldBookStats && (
世界书
{worldBookStats.name}
{worldBookStats.entryCount} 个条目
)}
{character.description && (

角色描述

{character.description}

)} {character.personality && (

性格特征

{character.personality}

)} {character.scenario && (

场景设定

{character.scenario}

)} {character.firstMes && (

第一条消息

{character.firstMes}

)} {character.mesExample && (

示例对话

{character.mesExample}

)} {character.systemPrompt && (

系统提示词

{character.systemPrompt}

)}
创建于 {new Date(character.createdAt).toLocaleDateString()}
版本 {character.version || '1.0'}
) }