Files
NovalRedot/frontend/src/components/character/CharacterEmptyState.vue
ROOG 20c759150a 新增角色管理、世界观设定、章节管理和AI工具调用功能
- 角色管理:CRUD API + 卡片网格UI,每个角色约200字描述
- 世界观设定:单篇长文编辑器,建议500字以上
- 章节管理:CRUD + 排序 API,左右分栏编辑器,单章5000字上限
- AI工具调用:支持工具审批流程和结构化工具调用
- 小说详情页新增章节、角色、世界观入口按钮

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 13:58:17 +08:00

84 lines
2.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script setup lang="ts">
import BaseButton from '@/components/ui/BaseButton.vue'
defineEmits<{
create: []
}>()
</script>
<template>
<div class="empty-state">
<!-- 人物剪影SVG -->
<svg class="person-svg" viewBox="0 0 200 180" fill="none" xmlns="http://www.w3.org/2000/svg">
<!-- 中间人物 -->
<circle class="head head-center" cx="100" cy="50" r="18" fill="#e8e0d4" stroke="#9090a8" stroke-width="1" />
<path class="body body-center" d="M75 90 Q100 75 125 90 L120 140 H80 Z" fill="#e8e0d4" stroke="#9090a8" stroke-width="1" />
<!-- 左侧人物 -->
<circle class="head head-left" cx="45" cy="65" r="14" fill="#f0ebe4" stroke="#b0b0c0" stroke-width="0.8" opacity="0.6" />
<path class="body body-left" d="M28 95 Q45 83 62 95 L59 135 H31 Z" fill="#f0ebe4" stroke="#b0b0c0" stroke-width="0.8" opacity="0.6" />
<!-- 右侧人物 -->
<circle class="head head-right" cx="155" cy="65" r="14" fill="#f0ebe4" stroke="#b0b0c0" stroke-width="0.8" opacity="0.6" />
<path class="body body-right" d="M138 95 Q155 83 172 95 L169 135 H141 Z" fill="#f0ebe4" stroke="#b0b0c0" stroke-width="0.8" opacity="0.6" />
<!-- 连接线 -->
<line class="connect-line" x1="65" y1="80" x2="82" y2="70" stroke="#d9cebf" stroke-width="1" stroke-dasharray="3 3" />
<line class="connect-line" x1="135" y1="80" x2="118" y2="70" stroke="#d9cebf" stroke-width="1" stroke-dasharray="3 3" />
</svg>
<h3 class="empty-title">塑造你的角色</h3>
<p class="empty-desc">还没有角色创建第一个来丰富你的故事世界</p>
<BaseButton variant="primary" @click="$emit('create')">
创建第一个角色
</BaseButton>
</div>
</template>
<style scoped>
.empty-state {
display: flex;
flex-direction: column;
align-items: center;
padding: var(--space-3xl) var(--space-xl);
animation: fadeInUp var(--duration-slow) var(--ease-out-smooth) both;
}
.person-svg {
width: 200px;
height: 180px;
margin-bottom: var(--space-xl);
}
.head-center {
animation: fadeIn 0.6s ease 0.2s both;
}
.body-center {
animation: fadeIn 0.6s ease 0.4s both;
}
.head-left, .body-left {
animation: fadeIn 0.6s ease 0.6s both;
}
.head-right, .body-right {
animation: fadeIn 0.6s ease 0.8s both;
}
.connect-line {
animation: fadeIn 0.4s ease 1.0s both;
}
.empty-title {
font-family: var(--font-display);
font-size: 1.4rem;
font-weight: 700;
color: var(--ink-900);
margin-bottom: var(--space-sm);
}
.empty-desc {
font-size: 0.9rem;
color: var(--ink-400);
margin-bottom: var(--space-xl);
text-align: center;
}
</style>