diff --git a/app/ClientLayout.tsx b/app/ClientLayout.tsx index c4011a8..254cabb 100644 --- a/app/ClientLayout.tsx +++ b/app/ClientLayout.tsx @@ -5,9 +5,10 @@ import "./globals.css" import { Inter } from "next/font/google" import { useState, useEffect } from "react" import Sidebar from "./components/Sidebar" -import MobileHeader from "./components/MobileHeader" import MobileSidebar from "./components/MobileSidebar" -import BottomNav from "./components/BottomNav" +import BottomTabs from "@/components/nav/bottom-tabs" +import { usePathname } from "next/navigation" +import { Toaster } from "@/components/ui/toaster" const inter = Inter({ subsets: ["latin"] }) @@ -18,6 +19,7 @@ export default function ClientLayout({ }) { const [isMobile, setIsMobile] = useState(false) const [sidebarOpen, setSidebarOpen] = useState(false) + const pathname = usePathname() useEffect(() => { const checkMobile = () => { @@ -33,7 +35,7 @@ export default function ClientLayout({ return ( - 用户数据资产中台 + 卡若数据资产中台 @@ -47,7 +49,7 @@ export default function ClientLayout({
- {/* 桌面端侧边栏 */} + {/* 桌面端侧边栏 - PC端不显示底部导航 */} {!isMobile && } {/* 移动端侧边栏 */} @@ -55,16 +57,21 @@ export default function ClientLayout({ {/* 主内容区域 */}
- {/* 移动端头部 */} - {isMobile && setSidebarOpen(true)} />} + {/* 移动端头部 - 添加卡若数据资产中台标题 */} + {isMobile && ( +
+

卡若数据资产中台

+
+ )} {/* 内容区域 */}
{children}
- {/* 移动端底部导航 */} - {isMobile && } + {/* 移动端底部导航 - 使用新的BottomTabs组件 */} + {isMobile && } + ) diff --git a/app/ai-assistant/page.tsx b/app/ai-assistant/page.tsx index 335985b..d8031b3 100644 --- a/app/ai-assistant/page.tsx +++ b/app/ai-assistant/page.tsx @@ -1,71 +1,105 @@ "use client" import { useCallback, useMemo, useState } from "react" -import { BarChart3, Database, FileText } from 'lucide-react' +import { TrendingUp, FileText, Sparkles } from "lucide-react" import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card" import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs" import { Button } from "@/components/ui/button" +import { Textarea } from "@/components/ui/textarea" import TaskList from "@/components/ai-assistant/task-list" import CreateTaskDialog from "@/components/ai-assistant/create-task-dialog" import ReportCards from "@/components/ai-assistant/report-cards" import { sanitizeText } from "@/lib/text-sanitize" -import type { AnalysisTask, DatabaseInfo, ReportItem, ReportTemplate } from "@/types/ai-assistant" +import type { AnalysisTask, ReportItem, ReportTemplate } from "@/types/ai-assistant" const initialTasks: AnalysisTask[] = [ { id: "task_001", - name: "用户行为分析报告", - database: "微信用户数据库", + name: "用户资产价值评估报告", + database: "用户池数据", status: "completed", progress: 100, createdAt: "2025-01-15T09:00:00Z", completedAt: "2025-01-15T09:30:00Z", - reportUrl: "/reports/user-behavior-analysis.pdf", - description: "基于近30天行为的聚合与序列分析", + reportUrl: "/reports/user-asset-evaluation.pdf", + description: "基于RFM模型和行为数据的用户资产价值评估", }, { id: "task_002", - name: "流量关键词趋势分析", - database: "流量关键词库", + name: "高价值用户画像分析", + database: "用户池数据", status: "running", progress: 65, createdAt: "2025-01-15T10:00:00Z", - description: "关注核心流量词与曝光、点击、转化等指标", + description: "识别高价值用户特征和行为模式", }, { id: "task_003", - name: "用户价值分层报告", - database: "微信用户数据库", + name: "用户生命周期价值预测", + database: "用户池数据", status: "pending", progress: 0, createdAt: "2025-01-15T10:30:00Z", - description: "RFM 分层、价值区间分布与运营建议", + description: "预测用户未来价值和流失风险", }, ] -const databases: DatabaseInfo[] = [ - { id: "db_001", name: "微信用户数据库", type: "MySQL", tables: 25, records: 4000000000, lastUpdated: "2025-01-15T11:00:00Z" }, - { id: "db_002", name: "流量关键词库", type: "PostgreSQL", tables: 8, records: 150000, lastUpdated: "2025-01-15T10:45:00Z" }, - { id: "db_003", name: "用户行为日志", type: "MongoDB", tables: 12, records: 1500000000, lastUpdated: "2025-01-15T11:15:00Z" }, -] - const templates: ReportTemplate[] = [ - { id: "template_001", name: "用户画像分析报告", description: "深度分析用户特征、行为模式和价值分层", category: "用户分析", fields: ["用户基本信息", "RFM分析", "行为轨迹", "价值评估", "推荐策略"] }, - { id: "template_002", name: "流量趋势分析报告", description: "分析关键词搜索趋势和流量变化", category: "流量分析", fields: ["关键词热度", "搜索趋势", "竞争分析", "机会识别", "优化建议"] }, - { id: "template_003", name: "业务运营报告", description: "综合业务数据分析和运营建议", category: "运营分析", fields: ["核心指标", "增长分析", "用户留存", "转化漏斗", "运营建议"] }, - { id: "template_004", name: "数据质量报告", description: "评估数据完整性、准确性和一致性", category: "数据质量", fields: ["数据完整性", "准确性检查", "一致性验证", "异常检测", "改进建议"] }, + { + id: "template_001", + name: "用户资产评估报告", + description: "全面评估用户资产价值和投资回报", + category: "资产评估", + fields: ["资产总值", "RFM分析", "价值分层", "投资回报", "增值建议"], + isEditable: true, + }, + { + id: "template_002", + name: "用户价值分析报告", + description: "深度分析用户价值构成和增长潜力", + category: "价值分析", + fields: ["价值构成", "增长趋势", "潜力评估", "风险分析", "优化策略"], + isEditable: true, + }, + { + id: "template_003", + name: "用户生命周期报告", + description: "分析用户生命周期各阶段的价值贡献", + category: "生命周期", + fields: ["阶段划分", "价值贡献", "转化率", "留存分析", "提升方案"], + isEditable: true, + }, ] const reportItems: ReportItem[] = [ - { id: "rpt-1", title: "用户行为分析报告", source: "数据源:微信用户数据库", description: '本报告基于近30天互动行为,输出用户行为模式与高频路径。\\n"]]}', updatedAt: new Date().toISOString() }, - { id: "rpt-2", title: "流量关键词趋势分析", source: "数据源:流量关键词库", description: '追踪 000000 类流量词及其曝光、点击、转化趋势,适配日/周/月视角。\\n" ]]}', updatedAt: new Date().toISOString() }, - { id: "rpt-3", title: "用户价值分层报告", source: "数据源:微信用户数据库", description: '结合 RFM 得分与标签,给出 S/A/B/C/D 分层与经营建议。\\n" ]] }', updatedAt: new Date().toISOString() }, + { + id: "rpt-1", + title: "用户资产评估报告", + source: "数据源:用户池", + description: "基于用户行为和交易数据,评估用户资产价值和投资回报率。", + updatedAt: new Date().toISOString(), + }, + { + id: "rpt-2", + title: "高价值用户分析", + source: "数据源:用户池", + description: "识别和分析高价值用户的特征、行为模式和价值贡献。", + updatedAt: new Date().toISOString(), + }, + { + id: "rpt-3", + title: "用户价值预测模型", + source: "数据源:用户池", + description: "基于机器学习预测用户未来价值和生命周期价值。", + updatedAt: new Date().toISOString(), + }, ] export default function AIAssistantPage() { const [tasks, setTasks] = useState(initialTasks) + const [editingTemplate, setEditingTemplate] = useState(null) + const [templateContent, setTemplateContent] = useState("") - // 进度推进(仅演示用) const tick = useCallback(() => { setTasks((prev) => prev.map((t) => { @@ -95,28 +129,36 @@ export default function AIAssistantPage() { }, 800) } - const sanitizedItems = useMemo( - () => reportItems.map((i) => ({ ...i, description: sanitizeText(i.description) })), - [], - ) + const handleEditTemplate = (templateId: string) => { + setEditingTemplate(templateId) + const template = templates.find((t) => t.id === templateId) + setTemplateContent(template?.fields.join("\n") || "") + } + + const handleSaveTemplate = () => { + // 保存模板逻辑 + setEditingTemplate(null) + setTemplateContent("") + } + + const sanitizedItems = useMemo(() => reportItems.map((i) => ({ ...i, description: sanitizeText(i.description) })), []) return (
-

AI智能助手

-

数据库分析与智能报告生成

+

+ + AI智能助手 +

+

专注用户资产评估与价值分析

- + - - 数据分析 - - - - 数据库 + + 用户资产评估 @@ -126,8 +168,8 @@ export default function AIAssistantPage() {
-

数据分析任务

- +

用户资产分析任务

+
@@ -135,38 +177,12 @@ export default function AIAssistantPage() {
- - - - - - 数据库 - - - - {databases.map((db) => ( - - -
{db.name}
-
- {db.type} · {db.tables} 表 -
-
- 最近更新 {new Date(db.lastUpdated).toLocaleString("zh-CN")} -
-
-
- ))} -
-
-
- - 报告模板 + 可编辑报告模板 @@ -175,7 +191,29 @@ export default function AIAssistantPage() {
{t.name}
{t.category}
-
字段: {t.fields.join(" / ")}
+
{t.description}
+ {editingTemplate === t.id ? ( +
+