样式修改
This commit is contained in:
1 parent
c69486556a
commit
ca13a9199f
2 files changed
+12
-131
No files matched your search
@@ -2,7 +2,6 @@ import { useEffect, useState } from "react";
|
|||||||
import type { ElementType } from "react";
|
import type { ElementType } from "react";
|
||||||
import { useNavigate, useLocation } from "react-router-dom";
|
import { useNavigate, useLocation } from "react-router-dom";
|
||||||
import {
|
import {
|
||||||
BarChart3,
|
|
||||||
Bell,
|
Bell,
|
||||||
Bot,
|
Bot,
|
||||||
Brain,
|
Brain,
|
||||||
@@ -11,7 +10,6 @@ import {
|
|||||||
ChevronRight,
|
ChevronRight,
|
||||||
ChevronsUpDown,
|
ChevronsUpDown,
|
||||||
CircleHelp,
|
CircleHelp,
|
||||||
Compass,
|
|
||||||
Database,
|
Database,
|
||||||
FileBox,
|
FileBox,
|
||||||
FileText,
|
FileText,
|
||||||
@@ -27,15 +25,11 @@ import {
|
|||||||
ListTodo,
|
ListTodo,
|
||||||
MessageSquareCode,
|
MessageSquareCode,
|
||||||
MessageSquarePlus,
|
MessageSquarePlus,
|
||||||
MoreHorizontal,
|
|
||||||
Network,
|
Network,
|
||||||
Plus,
|
Plus,
|
||||||
Scale,
|
|
||||||
Settings,
|
Settings,
|
||||||
Sparkles,
|
Sparkles,
|
||||||
Tags,
|
|
||||||
Target,
|
Target,
|
||||||
TrendingUp,
|
|
||||||
User,
|
User,
|
||||||
Users,
|
Users,
|
||||||
Wrench,
|
Wrench,
|
||||||
@@ -200,97 +194,14 @@ const menuItems: MenuItem[] = [
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
|
||||||
id: "result-management",
|
|
||||||
label: "结果管理",
|
|
||||||
icon: BarChart3,
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
id: "result-planning",
|
|
||||||
label: "规划结果",
|
|
||||||
icon: Target,
|
|
||||||
children: [
|
|
||||||
{ id: "result-planning-all", label: "全部", icon: BarChart3 },
|
|
||||||
{ id: "result-planning-goal", label: "目标分析", icon: Target },
|
|
||||||
{ id: "result-planning-brand", label: "品牌策略", icon: Target },
|
|
||||||
{ id: "result-planning-content", label: "内容规划", icon: Target },
|
|
||||||
{ id: "result-planning-channel", label: "渠道规划", icon: Target },
|
|
||||||
{ id: "result-planning-narrative", label: "叙事策略", icon: Target },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "result-mnty",
|
|
||||||
label: "MNTY结果",
|
|
||||||
icon: Brain,
|
|
||||||
children: [
|
|
||||||
{ id: "result-mnty-all", label: "全部", icon: BarChart3 },
|
|
||||||
{ id: "result-mnty-mechanism", label: "机制研究", icon: Brain },
|
|
||||||
{ id: "result-mnty-plan", label: "规划设计", icon: Brain },
|
|
||||||
{ id: "result-mnty-zsty", label: "ZSTY分析", icon: Brain },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "result-effect-pg",
|
|
||||||
label: "效果PG结果",
|
|
||||||
icon: TrendingUp,
|
|
||||||
children: [
|
|
||||||
{ id: "result-effect-pg-all", label: "全部", icon: BarChart3 },
|
|
||||||
{ id: "result-effect-pg-behavior", label: "行为PG", icon: TrendingUp },
|
|
||||||
{ id: "result-effect-pg-evaluation", label: "效果复盘", icon: TrendingUp },
|
|
||||||
{ id: "result-effect-pg-info", label: "信息PG", icon: TrendingUp },
|
|
||||||
{ id: "result-effect-pg-account", label: "账号PG", icon: TrendingUp },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "result-xk",
|
|
||||||
label: "XK结果",
|
|
||||||
icon: Compass,
|
|
||||||
children: [
|
|
||||||
{ id: "result-xk-all", label: "全部", icon: BarChart3 },
|
|
||||||
{ id: "result-xk-jc", label: "任务JC", icon: Compass },
|
|
||||||
{ id: "result-xk-dispatch", label: "任务调度", icon: Compass },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "result-dq",
|
|
||||||
label: "DQ结果",
|
|
||||||
icon: Database,
|
|
||||||
children: [
|
|
||||||
{ id: "result-dq-all", label: "全部", icon: BarChart3 },
|
|
||||||
{ id: "result-dq-audience", label: "受众分析", icon: Database },
|
|
||||||
{ id: "result-dq-kb", label: "知识研究", icon: Database },
|
|
||||||
{ id: "result-dq-trend", label: "趋势研究", icon: Database },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "result-other",
|
|
||||||
label: "其他结果",
|
|
||||||
icon: MoreHorizontal,
|
|
||||||
children: [
|
|
||||||
{ id: "result-other-all", label: "全部", icon: BarChart3 },
|
|
||||||
{ id: "result-other-general", label: "通用分析", icon: MoreHorizontal },
|
|
||||||
{ id: "result-other-temp", label: "临时任务", icon: MoreHorizontal },
|
|
||||||
{ id: "result-other-other", label: "其他", icon: MoreHorizontal },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: "resource-management",
|
id: "resource-management",
|
||||||
label: "资源管理",
|
label: "资源管理",
|
||||||
icon: Database,
|
icon: Database,
|
||||||
children: [
|
children: [
|
||||||
{
|
{ id: "resource-network-xwt", label: "网络xwt资源管理", icon: Network },
|
||||||
id: "resource-tags",
|
{ id: "resource-knowledge-base", label: "知识库资源管理", icon: Library },
|
||||||
label: "标签管理",
|
{ id: "resource-zz", label: "ZZ资源管理", icon: FileBox },
|
||||||
icon: Tags,
|
|
||||||
path: "/page/strategy/admin/tags",
|
|
||||||
adminOnly: true,
|
|
||||||
},
|
|
||||||
{ id: "resource-zz", label: "ZZ资源", icon: FileBox },
|
|
||||||
{ id: "resource-network-actor", label: "网络达人", icon: Network },
|
|
||||||
{ id: "resource-knowledge-base", label: "知识库", icon: Library },
|
|
||||||
{ id: "resource-evaluation-index", label: "评估指标", icon: Scale },
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
@@ -299,8 +210,6 @@ const defaultExpandedIds = new Set([
|
|||||||
"qa-center",
|
"qa-center",
|
||||||
"task-management",
|
"task-management",
|
||||||
"xk-center-task",
|
"xk-center-task",
|
||||||
"result-management",
|
|
||||||
"result-planning",
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
function filterMenuItemsByRole(items: MenuItem[], isAdmin: boolean): MenuItem[] {
|
function filterMenuItemsByRole(items: MenuItem[], isAdmin: boolean): MenuItem[] {
|
||||||
@@ -490,15 +399,8 @@ export function PageSidebar({
|
|||||||
isDark ? "text-white" : "text-gray-900"
|
isDark ? "text-white" : "text-gray-900"
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
DeerFlow
|
CM助手
|
||||||
</h1>
|
</h1>
|
||||||
<p
|
|
||||||
className={`text-xs theme-transition ${
|
|
||||||
isDark ? "text-blue-400/60" : "text-red-400/80"
|
|
||||||
}`}
|
|
||||||
>
|
|
||||||
Page Navigation
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ const STATUS_LABEL: Record<string, string> = {
|
|||||||
export function AIWritingPanel() {
|
export function AIWritingPanel() {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const { setArtifact } = useCanvasGraphContext();
|
const { setArtifact } = useCanvasGraphContext();
|
||||||
const { state, startWriting, submitIntervention, pauseWriting, resumeWriting, reset } = useAIWriting();
|
// pauseWriting / resumeWriting 当前 UI 不暴露(见 header 注释),从解构里省略避免 unused 警告
|
||||||
|
const { state, startWriting, submitIntervention, reset } = useAIWriting();
|
||||||
const { sessions, loading: sessionsLoading, refresh, rename, remove } = useAIWritingSessions();
|
const { sessions, loading: sessionsLoading, refresh, rename, remove } = useAIWritingSessions();
|
||||||
const { articleTypes, refresh: refreshArticleTypes } = useArticleTypes();
|
const { articleTypes, refresh: refreshArticleTypes } = useArticleTypes();
|
||||||
|
|
||||||
@@ -269,34 +270,12 @@ export function AIWritingPanel() {
|
|||||||
新建
|
新建
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
{isRunning && !state.isPaused && (
|
{/* ⏸️/▶️ "停止 / 继续" 按钮暂时隐藏 ——
|
||||||
<Button
|
当前实现是 stream.stop() 断 SSE 订阅而非真正取消后端 run,
|
||||||
variant="ghost"
|
点了停止后端继续烧 token,点继续 useStream 也不会自动重连,
|
||||||
size="sm"
|
用户体验是半残废的。等后期想清楚怎么"真·暂停"(cancel run +
|
||||||
className="h-7 px-2 text-xs gap-1 animate-breathe-stop text-red-400 hover:text-red-500 hover:bg-red-50 dark:hover:bg-red-950/30"
|
保留 checkpoint)+ "真·继续"(重新订阅同一 run)再加回来。
|
||||||
onClick={pauseWriting}
|
hook 里的 pauseWriting / resumeWriting 代码保留以便后期复用。 */}
|
||||||
>
|
|
||||||
<Square className="size-3 fill-current" />
|
|
||||||
停止
|
|
||||||
</Button>
|
|
||||||
)}
|
|
||||||
{state.isPaused && (
|
|
||||||
<>
|
|
||||||
<Button
|
|
||||||
variant="ghost"
|
|
||||||
size="sm"
|
|
||||||
className="h-7 px-2 text-xs gap-1 text-primary hover:text-primary hover:bg-primary/8"
|
|
||||||
onClick={resumeWriting}
|
|
||||||
>
|
|
||||||
<Play className="size-3 fill-current" />
|
|
||||||
继续
|
|
||||||
</Button>
|
|
||||||
<Button variant="ghost" size="sm" className="h-7 px-2 text-xs gap-1" onClick={reset}>
|
|
||||||
<RotateCcw className="size-3" />
|
|
||||||
重置
|
|
||||||
</Button>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
{(isDone || isError) && (
|
{(isDone || isError) && (
|
||||||
<Button variant="ghost" size="sm" className="h-7 px-2 text-xs gap-1" onClick={reset}>
|
<Button variant="ghost" size="sm" className="h-7 px-2 text-xs gap-1" onClick={reset}>
|
||||||
<RotateCcw className="size-3" />
|
<RotateCcw className="size-3" />
|
||||||
|
|||||||
Reference in new issue
Block a user