Fan vor 1 Monat
Ursprung
Commit
9e68a37bbc

+ 410 - 0
ui/smarttrade-platform/VERSION_HISTORY.md

@@ -0,0 +1,410 @@
+# 领存智贸 AI CRM - 版本历史
+
+## 版本管理说明
+- 每次修改完成后自动保存版本
+- 版本号格式:`v主版本.次版本.修订版本`
+- 支持快速回滚到任意历史版本
+
+---
+
+## 当前版本
+
+**当前版本**: `v1.0.24`
+**最后修改**: 2026-03-26 18:05 GMT+8
+**状态**: ✅ 稳定
+
+---
+
+## 版本记录
+
+### v1.0.25 - 2026-03-26 17:30
+**状态**: ✅ 稳定
+**修改内容**:
+- 在"设置"模块的"通知设置"区域增加"全部消息"入口
+- 新增"全部消息详情弹窗":
+  - **消息分类筛选**:全部/客户/营销/AI/商机/风险/数据/邮件/报告/提醒
+  - **消息列表**:10条消息展示(标题/主内容/详情/时间/分类标签)
+  - **未读状态**:未读消息高亮显示,显示未读数量
+  - **操作功能**:全部已读、删除消息
+  - **分类标签**:不同类型消息使用不同颜色标签区分
+
+**关键文件**:
+- `src/views/SettingsView.vue` - 125KB
+
+---
+
+### v1.0.24 - 2026-03-24 12:33
+**状态**: ✅ 稳定
+**修改内容**:
+- 丰富"企业邮箱"弹窗内三个标签页内容:
+  - **发送统计**:今日发送/打开/回复/点击数据、7天发送趋势图表、热门模板排行
+  - **域名配置**:已配置域名列表、域名配置指南(添加域名、MX记录、SPF/DKIM/DMARC)
+  - **安全设置**:总体安全评分、安全策略开关(SPF/DKIM/DMARC/TLS)、安全日志
+
+**关键文件**:
+- `src/views/SettingsView.vue` - 113.9KB
+
+---
+
+### v1.0.23 - 2026-03-24 12:29
+**状态**: ✅ 稳定
+**修改内容**:
+- 去除"企业邮箱"弹窗内绑定邮箱下方展示的详情内容(已移至独立弹窗)
+- 保持弹窗简洁,只显示邮箱账号列表和添加按钮
+
+**关键文件**:
+- `src/views/SettingsView.vue` - 100.2KB
+
+---
+
+### v1.0.22 - 2026-03-24 12:26
+**状态**: ✅ 稳定
+**修改内容**:
+- 为"设置"模块的"企业邮箱"增加弹窗详情:
+  - **添加邮箱账号弹窗**:邮箱地址、显示名称、SMTP/IMAP服务器配置、测试连接
+  - **邮箱账号详情弹窗**:将原有下方展示的详情内容独立成弹窗
+    - 服务器配置(SMTP/IMAP)
+    - 邮件安全认证状态(SPF/DKIM/DMARC)
+    - 自动回复设置
+    - 邮件签名配置
+    - 发送模板(新增标签页)
+  - 点击邮箱账号行可直接弹出详情弹窗
+
+**关键文件**:
+- `src/views/SettingsView.vue` - 106.9KB
+
+---
+
+### v1.0.21 - 2026-03-24 12:21
+**状态**: ✅ 稳定
+**修改内容**:
+- 为"设置"模块的"数据源管理"增加弹窗详情:
+  - **添加数据源弹窗**:数据源类型、名称、API密钥、覆盖地区、同步频率、保留天数、测试连接功能
+  - **外贸数据源快速入口弹窗**:
+    - 海关数据:API配置、目标进出口国、产品关键词
+    - LinkedIn:账号绑定、搜索限额、添加好友限额
+    - 展会数据:展会选择(广交会、CES、IFA等)
+    - 采购数据:数据源、行业分类筛选
+
+**关键文件**:
+- `src/views/SettingsView.vue` - 97KB
+
+---
+
+### v1.0.20 - 2026-03-24 12:17
+**状态**: ✅ 稳定
+**修改内容**:
+- 修复"设置"模块滑块开关开启状态样式变形问题
+  - 添加 !important 覆盖内联样式
+  - 确保所有位置的开关状态样式正确显示
+
+**关键文件**:
+- `src/views/SettingsView.vue` - 84.9KB
+
+---
+
+### v1.0.19 - 2026-03-24 12:16
+**状态**: ✅ 稳定
+**修改内容**:
+- 修复"设置"模块滑块开关样式变形问题
+  - 调整开关尺寸和滑块位置
+  - 添加阴影效果
+  - 修复开关状态颜色
+
+**关键文件**:
+- `src/views/SettingsView.vue` - 84.3KB
+
+---
+
+### v1.0.18 - 2026-03-24 12:12
+**状态**: ✅ 稳定
+**修改内容**:
+- 深入完善"数据源管理"弹窗:
+  - 添加统计概览(已启用数据源、总数据量、今日同步、覆盖国家)
+  - 数据源列表增加质量评分、数据描述
+  - 外贸数据源快速入口(海关数据、LinkedIn、展会数据、采购数据)
+- 深入完善"企业邮箱"弹窗:
+  - 邮箱统计概览(邮箱账号、今日发送、平均回复率、安全认证)
+  - 增强邮箱列表(选中状态、认证徽章显示)
+  - 详情面板增加标签页(服务器配置、自动回复、邮件签名、转发规则)
+  - SMTP/IMAP 配置分开展示
+  - 邮件安全认证详细状态(SPF/DKIM/DMARC)及说明
+  - 邮件签名预览效果
+
+**关键文件**:
+- `src/views/SettingsView.vue` - 84.2KB
+
+---
+
+### v1.0.17 - 2026-03-24 11:50
+**状态**: ✅ 稳定
+**修改内容**:
+- 深入完善"设置"模块的"数据源管理"和"企业邮箱"弹窗:
+  - **数据源管理弹窗**:
+    - 新增数据源详情弹窗(点击进入)
+    - 详细统计:数据总量、覆盖范围、更新频率、数据质量
+    - 外贸配置:自动同步、同步时间、保留天数
+    - 数据字段映射:公司名称、联系人、邮箱、电话
+    - 最近同步记录日志
+  - **企业邮箱弹窗**:
+    - 标签页切换:邮箱账号、发送统计、域名配置
+    - 邮箱使用量进度条显示
+    - SMTP/IMAP 服务器配置详情
+    - 邮件安全认证状态(SPF/DKIM/DMARC)
+    - 自动回复设置和内容配置
+    - 邮件转发设置
+    - 邮件签名配置
+
+**关键文件**:
+- `src/views/SettingsView.vue` - 71.9KB
+
+---
+
+### v1.0.16 - 2026-03-24 11:44
+**状态**: ✅ 稳定
+**修改内容**:
+- 为"设置"模块添加8个详情弹窗(外贸行业特性):
+  1. **个人信息弹窗**:编辑姓名、职位、邮箱、电话、部门、个人简介
+  2. **修改密码弹窗**:当前密码、新密码、确认密码
+  3. **登录历史弹窗**:显示8条登录记录(时间、IP、地点、设备、状态)
+  4. **模型微调弹窗**:显示模型版本、训练数据量、准确率,微调配置
+  5. **数据源管理弹窗**:显示8个数据源(海关数据、LinkedIn、Google Maps等)
+  6. **企业邮箱弹窗**:显示邮箱账号、发送统计、管理功能
+  7. **LinkedIn弹窗**:绑定/管理LinkedIn账号,查看连接数、搜索限额
+  8. **企业微信弹窗**:绑定/管理企业微信,查看用户数、部门数
+
+**关键文件**:
+- `src/views/SettingsView.vue` - 53.6KB
+
+---
+
+### v1.0.15 - 2026-03-24 11:35
+**状态**: ✅ 稳定
+**修改内容**:
+- 为"活动详情"弹窗中的"最近互动"添加"查看全部"详情弹窗
+  - 点击"查看全部"按钮打开完整的互动详情弹窗
+  - 显示10条完整互动记录
+  - 每条记录包含:姓名、公司、互动类型、互动内容、时间、情感分析、优先级、联系方式
+  - 支持筛选和操作按钮(立即跟进、发邮件)
+
+**关键文件**:
+- `src/views/MarketingView.vue` - 239.4KB
+
+---
+
+### v1.0.14 - 2026-03-24 11:30
+**状态**: ✅ 稳定
+**修改内容**:
+- 修复"历史活动"弹窗数据不显示问题
+  - 弹窗模板直接使用 `historyCampaigns` 替代 `filteredHistoryCampaigns`
+  - 添加可选链操作符 `?.` 防止空值错误
+  - 数据和详情弹窗已正确链接
+
+**关键文件**:
+- `src/views/MarketingView.vue` - 229.6KB
+
+---
+
+### v1.0.13 - 2026-03-24 11:23
+**状态**: ✅ 稳定
+**修改内容**:
+- 为"历史活动"弹窗添加空状态提示
+- 检查数据渲染问题(数据已正确添加10条记录)
+
+**关键文件**:
+- `src/views/MarketingView.vue` - 229.6KB
+
+---
+
+### v1.0.12 - 2026-03-24 11:11
+**状态**: ✅ 稳定
+**修改内容**:
+- 为"历史活动"增加更多数据
+  - 从5条增加到10条历史活动记录
+  - 新增:2025广交会客户回访、中东斋月营销、Q3季度产品促销、东南亚市场开拓、年度客户答谢活动
+- 详情弹窗已链接(点击"查看详情"按钮打开)
+
+**关键文件**:
+- `src/views/MarketingView.vue` - 229.2KB
+
+---
+
+### v1.0.11 - 2026-03-24 11:05
+**状态**: ✅ 稳定
+**修改内容**:
+- 实现"历史活动"详情弹窗功能
+  - 修复 `viewHistoryDetail` 函数(之前只是提示)
+  - 添加详情弹窗,包含:基本信息、核心数据统计、渠道效果分析、效果评估、经验总结
+  - 支持复制活动和导出报告
+
+**关键文件**:
+- `src/views/MarketingView.vue` - 227.4KB
+
+---
+
+### v1.0.10 - 2026-03-24 10:57
+**状态**: ✅ 稳定
+**修改内容**:
+- 实现"SOP序列模板"自定义功能
+  - 添加自定义SOP弹窗(showCustomSopModal)
+  - 支持自定义SOP名称和步骤
+  - 支持添加/删除步骤
+  - 支持选择触达渠道(邮件/WhatsApp/LinkedIn/电话/微信)
+  - 实时预览效果
+  - 保存后应用到营销活动
+
+**关键文件**:
+- `src/views/MarketingView.vue` - 216.9KB
+
+---
+
+### v1.0.9 - 2026-03-24 10:48
+**状态**: ✅ 稳定
+**修改内容**:
+- 修复活动卡片点击详情弹窗功能
+  - 修复 `showCampaignDetail` 函数(之前只是 console.log)
+  - 现在点击卡片可以正确打开活动详情弹窗
+- 活动详情弹窗包含:基本信息、核心数据、触达渠道、目标客户、SOP序列、最近互动
+
+**关键文件**:
+- `src/views/MarketingView.vue` - 205.9KB
+
+---
+
+### v1.0.8 - 2026-03-24 10:43
+**状态**: ✅ 稳定
+**修改内容**:
+- 为"自动营销"模块增加活动数据
+  - 进行中:新增 3 条(非洲新兴市场开拓、2026春季产品推广、展会客户跟进计划)
+  - 已暂停:新增 3 条(日韩高端客户培育、南美分销渠道建设、印度IT采购季活动)
+  - 已完成:新增 4 条(2025年终大促、欧洲圣诞节日营销、中东斋月特别活动、2025广交会前期预热)
+- 总活动数从 5 条增加到 15 条
+
+**关键文件**:
+- `src/views/MarketingView.vue` - 205.9KB
+
+---
+
+### v1.0.7 - 2026-03-23 16:57
+**状态**: ✅ 稳定
+**修改内容**:
+- 修复"人工干预与客户保护"弹窗中"干预历史"标签页内容缺失问题
+- 实现标签页切换功能(客户保护白名单 / 干预历史)
+- 干预历史显示当前活动的所有干预记录
+
+**关键文件**:
+- `src/views/MarketingView.vue` - 202.2KB
+
+---
+
+### v1.0.6 - 2026-03-23 16:52
+**状态**: ✅ 稳定
+**修改内容**:
+- 调换活动卡片中"打开邮件的客户"和"回复邮件审核"按钮位置
+- 新顺序:打开邮件 → 回复邮件 → 人工干预 → AI生成
+
+**关键文件**:
+- `src/views/MarketingView.vue` - 200.8KB
+
+---
+
+### v1.0.5 - 2026-03-23 16:50
+**状态**: ✅ 稳定
+**修改内容**:
+- 优化"创建营销活动"弹窗样式(渐变头部、步骤指示器动画、表单焦点效果)
+- 优化"回复邮件审核"弹窗样式(绿色渐变头部、统计卡片、回复列表)
+- 优化通用弹窗样式(页脚背景、按钮悬停效果)
+- 添加淡入动画效果
+
+**关键文件**:
+- `src/views/MarketingView.vue` - 200.8KB
+
+---
+
+### v1.0.4 - 2026-03-23 16:46
+**状态**: ✅ 稳定
+**修改内容**:
+- 修复 `approveReplyWithReview`、`rejectReplyWithReason`、`assignReplyToSales` 三个函数重复定义的编译错误
+- 删除第二组重复函数定义
+
+**关键文件**:
+- `src/views/MarketingView.vue` - 192.9KB
+
+---
+
+### v1.0.3 - 2026-03-23 16:44
+**状态**: ✅ 稳定
+**修改内容**:
+- 修复标签嵌套不匹配错误(第2164行 `</div>` 报错)
+- 删除残留的"回复邮件客户详情"弹窗代码(约160行)
+- 恢复干预弹窗正确的 `v-if="showInterventionModal"` 结构
+
+**关键文件**:
+- `src/views/MarketingView.vue` - 193.7KB
+
+---
+
+### v1.0.2 - 2026-03-23 16:29
+**状态**: ✅ 稳定
+**修改内容**:
+- 修复 `openAIGenerator` 函数未接收 `campaign` 参数的问题
+- 修复回复审核弹窗标题变量错误(`selectedReplyReview?.repliedCustomers` → `repliedCustomers.length`)
+- 添加缺失函数:`approveReplyWithReview`、`rejectReplyWithReason`、`assignReplyToSales`
+
+**关键文件**:
+- `src/views/MarketingView.vue` - 201.3KB
+
+---
+
+### v1.0.1 - 2026-03-23 16:23
+**状态**: ✅ 稳定
+**修改内容**:
+- 回滚"回复邮件客户详情"弹窗相关代码
+- 移除 `showReplyDetailModal`、`selectedReplyDetail`、`openReplyDetailModal` 等
+- 恢复回复审核弹窗中的操作按钮(批准/分配/拒绝)
+
+**关键文件**:
+- `src/views/MarketingView.vue` - 200.5KB
+
+---
+
+### v1.0.0 - 2026-03-23 16:54(版本库建立时基准版本)
+**状态**: ✅ 基础版本
+**修改内容**:
+- 创建版本库系统
+- 自动营销模块深度优化完成
+  - 客户保护白名单机制
+  - 打开邮件客户管理
+  - 回复邮件人工审核
+  - 人工干预机制
+  - 样式修复
+
+**关键文件**:
+- `src/views/MarketingView.vue` - 200.8KB
+
+---
+
+## 版本对比表
+
+| 版本 | 日期时间 | 主要修改 | 文件大小 |
+|------|---------|---------|---------|
+| **v1.0.7** | 2026-03-23 16:57 | 修复干预历史标签页 | 202.2KB |
+| v1.0.6 | 2026-03-23 16:52 | 调换按钮位置 | 200.8KB |
+| v1.0.5 | 2026-03-23 16:50 | 优化弹窗样式 | 200.8KB |
+| v1.0.4 | 2026-03-23 16:46 | 修复重复函数定义 | 192.9KB |
+| v1.0.3 | 2026-03-23 16:44 | 修复标签嵌套错误 | 193.7KB |
+| v1.0.2 | 2026-03-23 16:29 | 修复多个函数错误 | 201.3KB |
+| v1.0.1 | 2026-03-23 16:23 | 回滚详情弹窗 | 200.5KB |
+| v1.0.0 | 2026-03-23 16:54 | 版本库建立基准 | 200.8KB |
+
+---
+
+## 快速回滚指南
+
+告诉我版本号,我会帮你回滚到该版本。例如:
+> "回滚到 v1.0.3"
+
+---
+
+**版本库创建时间**: 2026-03-23 16:54 GMT+8
+**最后更新**: 2026-03-24 10:38 GMT+8

+ 176 - 0
ui/smarttrade-platform/docs/generate_excel.cjs

@@ -0,0 +1,176 @@
+const XLSX = require('xlsx');
+const fs = require('fs');
+const path = require('path');
+
+// 创建工作簿
+const wb = XLSX.utils.book_new();
+
+// 数据定义
+const marketingData = [
+    ["一级功能", "二级功能", "三级功能", "功能描述", "状态"],
+    ["自动营销", "营销活动管理", "活动列表-进行中", "展示进行中的营销活动(6条)", "✅"],
+    ["自动营销", "营销活动管理", "活动列表-已暂停", "展示已暂停的营销活动(4条)", "✅"],
+    ["自动营销", "营销活动管理", "活动列表-已完成", "展示已完成的营销活动(4条)", "✅"],
+    ["自动营销", "营销活动管理", "活动列表-状态筛选", "支持按状态筛选活动", "✅"],
+    ["自动营销", "营销活动管理", "活动卡片-信息展示", "活动名称/描述/进度展示", "✅"],
+    ["自动营销", "营销活动管理", "活动卡片-打开邮件数", "显示打开邮件的客户数量", "✅"],
+    ["自动营销", "营销活动管理", "活动卡片-回复邮件数", "显示回复邮件的客户数量", "✅"],
+    ["自动营销", "营销活动管理", "活动卡片-人工干预", "显示人工干预按钮", "✅"],
+    ["自动营销", "营销活动管理", "活动卡片-AI生成", "显示AI生成按钮", "✅"],
+    ["自动营销", "营销活动管理", "活动卡片-详情弹窗", "点击卡片打开详情弹窗", "✅"],
+    ["自动营销", "活动详情弹窗", "基本信息", "活动名称/类型/优先级/负责人/时间", "✅"],
+    ["自动营销", "活动详情弹窗", "核心数据", "发送/打开/回复/点击/转化统计", "✅"],
+    ["自动营销", "活动详情弹窗", "触达渠道", "邮件/WhatsApp/LinkedIn渠道展示", "✅"],
+    ["自动营销", "活动详情弹窗", "目标客户", "目标数/已触达/待触达", "✅"],
+    ["自动营销", "活动详情弹窗", "SOP序列", "自动化序列步骤展示", "✅"],
+    ["自动营销", "活动详情弹窗", "最近互动", "最近互动记录(3条)", "✅"],
+    ["自动营销", "活动详情弹窗", "互动详情", "查看全部互动详情弹窗", "✅"],
+    ["自动营销", "全部互动详情弹窗", "互动列表", "10条完整互动记录", "✅"],
+    ["自动营销", "全部互动详情弹窗", "互动筛选", "全部/回复/打开/点击筛选", "✅"],
+    ["自动营销", "全部互动详情弹窗", "互动详情", "姓名/公司/类型/内容/时间", "✅"],
+    ["自动营销", "全部互动详情弹窗", "互动详情-分析", "情感分析/优先级/联系方式", "✅"],
+    ["自动营销", "全部互动详情弹窗", "互动操作", "立即跟进/发邮件按钮", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤1-基本信息", "活动名称/类型/优先级/负责人", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤1-时间设置", "活动时间/目标设置", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤2-目标客户", "AI智能推荐客户", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤2-客户筛选", "高价值/沉默/潜在客户筛选", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤3-触达渠道", "邮件/WhatsApp/LinkedIn渠道选择", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤3-渠道状态", "渠道启用状态显示", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤4-自动化规则", "SOP序列模板选择", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤4-SOP自定义", "自定义SOP序列", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤5-AI生成", "AI生成邮件内容", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤5-主题建议", "AI推荐邮件主题", "✅"],
+    ["自动营销", "自定义SOP弹窗", "SOP配置", "序列名称设置", "✅"],
+    ["自动营销", "自定义SOP弹窗", "步骤管理", "添加/删除步骤", "✅"],
+    ["自动营销", "自定义SOP弹窗", "步骤配置", "步骤名称/间隔天数/触达渠道", "✅"],
+    ["自动营销", "自定义SOP弹窗", "渠道选择", "邮件/WhatsApp/LinkedIn/电话/微信", "✅"],
+    ["自动营销", "自定义SOP弹窗", "实时预览", "步骤时间线预览效果", "✅"],
+    ["自动营销", "打开邮件客户弹窗", "客户列表", "打开邮件客户展示", "✅"],
+    ["自动营销", "打开邮件客户弹窗", "客户信息", "年采购额/最后订单时间", "✅"],
+    ["自动营销", "打开邮件客户弹窗", "客户操作", "快速保护/暂停/销售分配", "✅"],
+    ["自动营销", "回复邮件审核弹窗", "审核统计", "待审核/已批准/已拒绝数量", "✅"],
+    ["自动营销", "回复邮件审核弹窗", "回复列表", "回复邮件客户列表", "✅"],
+    ["自动营销", "回复邮件审核弹窗", "情感分析", "正面/中立/负面情感标签", "✅"],
+    ["自动营销", "回复邮件审核弹窗", "优先级标记", "高/中/低优先级", "✅"],
+    ["自动营销", "回复邮件审核弹窗", "审核操作", "批准/分配销售/拒绝", "✅"],
+    ["自动营销", "人工干预与客户保护弹窗", "标签页切换", "客户保护白名单/干预历史", "✅"],
+    ["自动营销", "人工干预与客户保护弹窗", "客户保护-列表", "受保护客户列表展示", "✅"],
+    ["自动营销", "人工干预与客户保护弹窗", "客户保护-详情", "保护级别/原因/时间/销售", "✅"],
+    ["自动营销", "人工干预与客户保护弹窗", "客户保护-操作", "移除保护操作", "✅"],
+    ["自动营销", "人工干预与客户保护弹窗", "干预历史", "干预记录列表", "✅"],
+    ["自动营销", "人工干预与客户保护弹窗", "干预类型", "客户保护/审核干预/内容调整/发送暂停", "✅"],
+    ["自动营销", "人工干预与客户保护弹窗", "现有干预", "当前活动干预记录", "✅"],
+    ["自动营销", "AI邮件生成器弹窗", "邮件生成", "AI自动生成邮件内容", "✅"],
+    ["自动营销", "AI邮件生成器弹窗", "邮件编辑", "主题/正文编辑", "✅"],
+    ["自动营销", "AI邮件生成器弹窗", "主题建议", "AI推荐邮件主题", "✅"],
+    ["自动营销", "历史活动弹窗", "历史列表", "10条历史活动记录", "✅"],
+    ["自动营销", "历史活动弹窗", "活动信息", "名称/日期/负责人/状态", "✅"],
+    ["自动营销", "历史活动弹窗", "活动统计", "发送/打开/回复/点击/商机", "✅"],
+    ["自动营销", "历史活动弹窗", "活动操作", "复制活动/查看详情/导出报告", "✅"],
+    ["自动营销", "历史活动详情弹窗", "基本信息", "活动名称/周期/负责人/状态", "✅"],
+    ["自动营销", "历史活动详情弹窗", "核心数据", "发送量/打开数/回复数/点击数/商机", "✅"],
+    ["自动营销", "历史活动详情弹窗", "渠道分析", "各渠道效果数据", "✅"],
+    ["自动营销", "历史活动详情弹窗", "效果评估", "发送效率/打开率/回复率/转化率", "✅"],
+    ["自动营销", "历史活动详情弹窗", "经验总结", "活动亮点和改进建议", "✅"],
+    ["自动营销", "模板库弹窗", "模板列表", "模板分类展示", "✅"],
+    ["自动营销", "模板库弹窗", "模板筛选", "全部/邮件/WhatsApp/LinkedIn", "✅"],
+    ["自动营销", "模板库弹窗", "模板预览", "模板内容预览弹窗", "✅"],
+    ["自动营销", "模板库弹窗", "模板操作", "使用/编辑/删除", "✅"],
+    ["", "", "", "自动营销模块总计:68项功能", ""]
+];
+
+const settingsData = [
+    ["一级功能", "二级功能", "三级功能", "功能描述", "状态"],
+    ["设置", "账号与安全", "个人信息-展示", "头像/姓名/职位/邮箱展示", "✅"],
+    ["设置", "账号与安全", "个人信息-编辑弹窗", "编辑个人信息(姓名/职位/邮箱/电话/部门/简介)", "✅"],
+    ["设置", "账号与安全", "修改密码弹窗", "当前密码/新密码/确认密码", "✅"],
+    ["设置", "账号与安全", "两步验证", "开启/关闭两步验证开关", "✅"],
+    ["设置", "账号与安全", "登录历史弹窗", "8条登录记录(时间/IP/地点/设备/状态)", "✅"],
+    ["设置", "AI大脑配置", "模型微调-展示", "AI模型版本/训练数据量/准确率展示", "✅"],
+    ["设置", "AI大脑配置", "模型微调-配置", "训练数据来源/频率配置", "✅"],
+    ["设置", "AI大脑配置", "模型微调-训练", "开始训练按钮", "✅"],
+    ["设置", "AI大脑配置", "知识库管理", "知识条目数量展示", "✅"],
+    ["设置", "AI大脑配置", "自动学习开关", "开启/关闭自动学习开关", "✅"],
+    ["设置", "AI大脑配置", "策略自进化开关", "开启/关闭策略自进化开关", "✅"],
+    ["设置", "AI大脑配置", "个性化程度", "低/中/高个性化程度选择", "✅"],
+    ["设置", "自动寻客配置", "数据源-列表", "8个数据源列表(海关/LinkedIn/Google Maps等)", "✅"],
+    ["设置", "自动寻客配置", "数据源-统计", "数据源统计概览(总量/今日同步/覆盖国家)", "✅"],
+    ["设置", "自动寻客配置", "数据源-详情弹窗", "统计/配置/字段映射/同步日志", "✅"],
+    ["设置", "自动寻客配置", "数据源-添加弹窗", "类型/名称/API/地区/频率", "✅"],
+    ["设置", "自动寻客配置", "外贸快速入口弹窗", "海关/LinkedIn/展会/采购配置", "✅"],
+    ["设置", "自动寻客配置", "Lookalike算法开关", "开启/关闭Lookalike算法开关", "✅"],
+    ["设置", "自动寻客配置", "关键人挖掘开关", "开启/关闭关键人挖掘开关", "✅"],
+    ["设置", "自动寻客配置", "官网分析开关", "开启/关闭官网分析开关", "✅"],
+    ["设置", "渠道集成", "企业邮箱-列表", "邮箱账号列表(发送量/回复率/用量进度条)", "✅"],
+    ["设置", "渠道集成", "企业邮箱-统计", "邮箱统计概览(账号数/今日发送/回复率/认证)", "✅"],
+    ["设置", "渠道集成", "企业邮箱-添加弹窗", "SMTP/IMAP配置/测试连接", "✅"],
+    ["设置", "渠道集成", "企业邮箱-详情弹窗", "服务器/安全认证/自动回复/签名", "✅"],
+    ["设置", "渠道集成", "WhatsApp", "绑定状态/手机号展示", "✅"],
+    ["设置", "渠道集成", "LinkedIn弹窗", "绑定账号/连接数/搜索限额", "✅"],
+    ["设置", "渠道集成", "企业微信弹窗", "CorpId/AgentId/用户数/部门数", "✅"],
+    ["设置", "通知设置", "邮件通知开关", "开启/关闭邮件通知开关", "✅"],
+    ["设置", "通知设置", "回复提醒开关", "开启/关闭客户回复提醒开关", "✅"],
+    ["设置", "通知设置", "风险预警开关", "开启/关闭风险预警提醒开关", "✅"],
+    ["设置", "通知设置", "周报推送开关", "开启/关闭周报推送开关", "✅"],
+    ["", "", "", "设置模块总计:32项功能", ""]
+];
+
+const knowledgeData = [
+    ["一级功能", "二级功能", "三级功能", "功能描述", "状态"],
+    ["知识库", "知识库概览", "统计-知识总量", "知识总量展示", "✅"],
+    ["知识库", "知识库概览", "统计-分类数量", "知识分类数量", "✅"],
+    ["知识库", "知识库概览", "统计-AI覆盖率", "AI覆盖率", "✅"],
+    ["知识库", "知识库概览", "统计-本周新增", "本周新增数量", "✅"],
+    ["知识库", "知识库概览", "统计-模型版本", "模型版本展示", "✅"],
+    ["知识库", "AI学习中心", "学习进度", "AI学习进度展示", "✅"],
+    ["知识库", "AI学习中心", "问答记录", "最近问答互动记录", "✅"],
+    ["知识库", "AI学习中心", "AI训练-列表", "AI训练任务展示", "✅"],
+    ["知识库", "AI学习中心", "AI训练-状态", "训练进度/状态显示", "✅"],
+    ["知识库", "知识条目管理", "知识列表", "知识条目列表展示", "✅"],
+    ["知识库", "知识条目管理", "知识筛选", "分类/类型/状态筛选", "✅"],
+    ["知识库", "知识条目管理", "知识搜索", "关键词搜索", "✅"],
+    ["知识库", "知识条目管理", "知识详情-查看", "点击查看知识详情弹窗", "✅"],
+    ["知识库", "知识条目管理", "知识详情-内容", "问题/答案/标签/来源/使用次数", "✅"],
+    ["知识库", "知识条目管理", "知识详情-操作", "编辑/删除/标记操作", "✅"],
+    ["知识库", "添加知识弹窗", "知识录入", "问题/答案输入", "✅"],
+    ["知识库", "添加知识弹窗", "知识分类", "分类/标签设置", "✅"],
+    ["知识库", "添加知识弹窗", "知识来源", "来源标注", "✅"],
+    ["知识库", "批量导入弹窗", "文件导入", "支持CSV/Excel/PDF格式", "✅"],
+    ["知识库", "批量导入弹窗", "导入配置", "字段映射配置", "✅"],
+    ["知识库", "批量导入弹窗", "导入预览", "导入数据预览", "✅"],
+    ["", "", "", "知识库模块总计:21项功能", ""]
+];
+
+const summaryData = [
+    ["模块", "一级功能", "二级功能", "三级功能", "完成率"],
+    ["自动营销模块", 1, 12, 68, "100%"],
+    ["设置模块", 1, 5, 32, "100%"],
+    ["知识库模块", 1, 5, 21, "100%"],
+    ["合计", 3, 22, 121, "100%"],
+    ["", "", "", "", ""],
+    ["生成时间:2026-03-26 15:02 GMT+8", "", "", "", ""]
+];
+
+// 创建工作表
+const ws1 = XLSX.utils.aoa_to_sheet(marketingData);
+const ws2 = XLSX.utils.aoa_to_sheet(settingsData);
+const ws3 = XLSX.utils.aoa_to_sheet(knowledgeData);
+const ws4 = XLSX.utils.aoa_to_sheet(summaryData);
+
+// 设置列宽
+ws1['!cols'] = [{wch:15}, {wch:22}, {wch:22}, {wch:45}, {wch:8}];
+ws2['!cols'] = [{wch:12}, {wch:18}, {wch:22}, {wch:50}, {wch:8}];
+ws3['!cols'] = [{wch:12}, {wch:18}, {wch:22}, {wch:45}, {wch:8}];
+ws4['!cols'] = [{wch:20}, {wch:12}, {wch:12}, {wch:12}, {wch:10}];
+
+// 添加到工作簿
+XLSX.utils.book_append_sheet(wb, ws1, "自动营销模块");
+XLSX.utils.book_append_sheet(wb, ws2, "设置模块");
+XLSX.utils.book_append_sheet(wb, ws3, "知识库模块");
+XLSX.utils.book_append_sheet(wb, ws4, "汇总统计");
+
+// 保存文件
+const outputPath = 'C:\\Users\\Administrator\\.qclaw\\workspace\\tradebrain-crm\\docs\\领存智贸AI CRM-三级功能清单.xlsx';
+XLSX.writeFile(wb, outputPath);
+
+console.log('Excel文件已生成:', outputPath);

+ 176 - 0
ui/smarttrade-platform/docs/generate_excel.js

@@ -0,0 +1,176 @@
+const XLSX = require('xlsx');
+const fs = require('fs');
+const path = require('path');
+
+// 创建工作簿
+const wb = XLSX.utils.book_new();
+
+// 数据定义
+const marketingData = [
+    ["一级功能", "二级功能", "三级功能", "功能描述", "状态"],
+    ["自动营销", "营销活动管理", "活动列表-进行中", "展示进行中的营销活动(6条)", "✅"],
+    ["自动营销", "营销活动管理", "活动列表-已暂停", "展示已暂停的营销活动(4条)", "✅"],
+    ["自动营销", "营销活动管理", "活动列表-已完成", "展示已完成的营销活动(4条)", "✅"],
+    ["自动营销", "营销活动管理", "活动列表-状态筛选", "支持按状态筛选活动", "✅"],
+    ["自动营销", "营销活动管理", "活动卡片-信息展示", "活动名称/描述/进度展示", "✅"],
+    ["自动营销", "营销活动管理", "活动卡片-打开邮件数", "显示打开邮件的客户数量", "✅"],
+    ["自动营销", "营销活动管理", "活动卡片-回复邮件数", "显示回复邮件的客户数量", "✅"],
+    ["自动营销", "营销活动管理", "活动卡片-人工干预", "显示人工干预按钮", "✅"],
+    ["自动营销", "营销活动管理", "活动卡片-AI生成", "显示AI生成按钮", "✅"],
+    ["自动营销", "营销活动管理", "活动卡片-详情弹窗", "点击卡片打开详情弹窗", "✅"],
+    ["自动营销", "活动详情弹窗", "基本信息", "活动名称/类型/优先级/负责人/时间", "✅"],
+    ["自动营销", "活动详情弹窗", "核心数据", "发送/打开/回复/点击/转化统计", "✅"],
+    ["自动营销", "活动详情弹窗", "触达渠道", "邮件/WhatsApp/LinkedIn渠道展示", "✅"],
+    ["自动营销", "活动详情弹窗", "目标客户", "目标数/已触达/待触达", "✅"],
+    ["自动营销", "活动详情弹窗", "SOP序列", "自动化序列步骤展示", "✅"],
+    ["自动营销", "活动详情弹窗", "最近互动", "最近互动记录(3条)", "✅"],
+    ["自动营销", "活动详情弹窗", "互动详情", "查看全部互动详情弹窗", "✅"],
+    ["自动营销", "全部互动详情弹窗", "互动列表", "10条完整互动记录", "✅"],
+    ["自动营销", "全部互动详情弹窗", "互动筛选", "全部/回复/打开/点击筛选", "✅"],
+    ["自动营销", "全部互动详情弹窗", "互动详情", "姓名/公司/类型/内容/时间", "✅"],
+    ["自动营销", "全部互动详情弹窗", "互动详情-分析", "情感分析/优先级/联系方式", "✅"],
+    ["自动营销", "全部互动详情弹窗", "互动操作", "立即跟进/发邮件按钮", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤1-基本信息", "活动名称/类型/优先级/负责人", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤1-时间设置", "活动时间/目标设置", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤2-目标客户", "AI智能推荐客户", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤2-客户筛选", "高价值/沉默/潜在客户筛选", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤3-触达渠道", "邮件/WhatsApp/LinkedIn渠道选择", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤3-渠道状态", "渠道启用状态显示", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤4-自动化规则", "SOP序列模板选择", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤4-SOP自定义", "自定义SOP序列", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤5-AI生成", "AI生成邮件内容", "✅"],
+    ["自动营销", "创建营销活动弹窗", "步骤5-主题建议", "AI推荐邮件主题", "✅"],
+    ["自动营销", "自定义SOP弹窗", "SOP配置", "序列名称设置", "✅"],
+    ["自动营销", "自定义SOP弹窗", "步骤管理", "添加/删除步骤", "✅"],
+    ["自动营销", "自定义SOP弹窗", "步骤配置", "步骤名称/间隔天数/触达渠道", "✅"],
+    ["自动营销", "自定义SOP弹窗", "渠道选择", "邮件/WhatsApp/LinkedIn/电话/微信", "✅"],
+    ["自动营销", "自定义SOP弹窗", "实时预览", "步骤时间线预览效果", "✅"],
+    ["自动营销", "打开邮件客户弹窗", "客户列表", "打开邮件客户展示", "✅"],
+    ["自动营销", "打开邮件客户弹窗", "客户信息", "年采购额/最后订单时间", "✅"],
+    ["自动营销", "打开邮件客户弹窗", "客户操作", "快速保护/暂停/销售分配", "✅"],
+    ["自动营销", "回复邮件审核弹窗", "审核统计", "待审核/已批准/已拒绝数量", "✅"],
+    ["自动营销", "回复邮件审核弹窗", "回复列表", "回复邮件客户列表", "✅"],
+    ["自动营销", "回复邮件审核弹窗", "情感分析", "正面/中立/负面情感标签", "✅"],
+    ["自动营销", "回复邮件审核弹窗", "优先级标记", "高/中/低优先级", "✅"],
+    ["自动营销", "回复邮件审核弹窗", "审核操作", "批准/分配销售/拒绝", "✅"],
+    ["自动营销", "人工干预与客户保护弹窗", "标签页切换", "客户保护白名单/干预历史", "✅"],
+    ["自动营销", "人工干预与客户保护弹窗", "客户保护-列表", "受保护客户列表展示", "✅"],
+    ["自动营销", "人工干预与客户保护弹窗", "客户保护-详情", "保护级别/原因/时间/销售", "✅"],
+    ["自动营销", "人工干预与客户保护弹窗", "客户保护-操作", "移除保护操作", "✅"],
+    ["自动营销", "人工干预与客户保护弹窗", "干预历史", "干预记录列表", "✅"],
+    ["自动营销", "人工干预与客户保护弹窗", "干预类型", "客户保护/审核干预/内容调整/发送暂停", "✅"],
+    ["自动营销", "人工干预与客户保护弹窗", "现有干预", "当前活动干预记录", "✅"],
+    ["自动营销", "AI邮件生成器弹窗", "邮件生成", "AI自动生成邮件内容", "✅"],
+    ["自动营销", "AI邮件生成器弹窗", "邮件编辑", "主题/正文编辑", "✅"],
+    ["自动营销", "AI邮件生成器弹窗", "主题建议", "AI推荐邮件主题", "✅"],
+    ["自动营销", "历史活动弹窗", "历史列表", "10条历史活动记录", "✅"],
+    ["自动营销", "历史活动弹窗", "活动信息", "名称/日期/负责人/状态", "✅"],
+    ["自动营销", "历史活动弹窗", "活动统计", "发送/打开/回复/点击/商机", "✅"],
+    ["自动营销", "历史活动弹窗", "活动操作", "复制活动/查看详情/导出报告", "✅"],
+    ["自动营销", "历史活动详情弹窗", "基本信息", "活动名称/周期/负责人/状态", "✅"],
+    ["自动营销", "历史活动详情弹窗", "核心数据", "发送量/打开数/回复数/点击数/商机", "✅"],
+    ["自动营销", "历史活动详情弹窗", "渠道分析", "各渠道效果数据", "✅"],
+    ["自动营销", "历史活动详情弹窗", "效果评估", "发送效率/打开率/回复率/转化率", "✅"],
+    ["自动营销", "历史活动详情弹窗", "经验总结", "活动亮点和改进建议", "✅"],
+    ["自动营销", "模板库弹窗", "模板列表", "模板分类展示", "✅"],
+    ["自动营销", "模板库弹窗", "模板筛选", "全部/邮件/WhatsApp/LinkedIn", "✅"],
+    ["自动营销", "模板库弹窗", "模板预览", "模板内容预览弹窗", "✅"],
+    ["自动营销", "模板库弹窗", "模板操作", "使用/编辑/删除", "✅"],
+    ["", "", "", "自动营销模块总计:68项功能", ""]
+];
+
+const settingsData = [
+    ["一级功能", "二级功能", "三级功能", "功能描述", "状态"],
+    ["设置", "账号与安全", "个人信息-展示", "头像/姓名/职位/邮箱展示", "✅"],
+    ["设置", "账号与安全", "个人信息-编辑弹窗", "编辑个人信息(姓名/职位/邮箱/电话/部门/简介)", "✅"],
+    ["设置", "账号与安全", "修改密码弹窗", "当前密码/新密码/确认密码", "✅"],
+    ["设置", "账号与安全", "两步验证", "开启/关闭两步验证开关", "✅"],
+    ["设置", "账号与安全", "登录历史弹窗", "8条登录记录(时间/IP/地点/设备/状态)", "✅"],
+    ["设置", "AI大脑配置", "模型微调-展示", "AI模型版本/训练数据量/准确率展示", "✅"],
+    ["设置", "AI大脑配置", "模型微调-配置", "训练数据来源/频率配置", "✅"],
+    ["设置", "AI大脑配置", "模型微调-训练", "开始训练按钮", "✅"],
+    ["设置", "AI大脑配置", "知识库管理", "知识条目数量展示", "✅"],
+    ["设置", "AI大脑配置", "自动学习开关", "开启/关闭自动学习开关", "✅"],
+    ["设置", "AI大脑配置", "策略自进化开关", "开启/关闭策略自进化开关", "✅"],
+    ["设置", "AI大脑配置", "个性化程度", "低/中/高个性化程度选择", "✅"],
+    ["设置", "自动寻客配置", "数据源-列表", "8个数据源列表(海关/LinkedIn/Google Maps等)", "✅"],
+    ["设置", "自动寻客配置", "数据源-统计", "数据源统计概览(总量/今日同步/覆盖国家)", "✅"],
+    ["设置", "自动寻客配置", "数据源-详情弹窗", "统计/配置/字段映射/同步日志", "✅"],
+    ["设置", "自动寻客配置", "数据源-添加弹窗", "类型/名称/API/地区/频率", "✅"],
+    ["设置", "自动寻客配置", "外贸快速入口弹窗", "海关/LinkedIn/展会/采购配置", "✅"],
+    ["设置", "自动寻客配置", "Lookalike算法开关", "开启/关闭Lookalike算法开关", "✅"],
+    ["设置", "自动寻客配置", "关键人挖掘开关", "开启/关闭关键人挖掘开关", "✅"],
+    ["设置", "自动寻客配置", "官网分析开关", "开启/关闭官网分析开关", "✅"],
+    ["设置", "渠道集成", "企业邮箱-列表", "邮箱账号列表(发送量/回复率/用量进度条)", "✅"],
+    ["设置", "渠道集成", "企业邮箱-统计", "邮箱统计概览(账号数/今日发送/回复率/认证)", "✅"],
+    ["设置", "渠道集成", "企业邮箱-添加弹窗", "SMTP/IMAP配置/测试连接", "✅"],
+    ["设置", "渠道集成", "企业邮箱-详情弹窗", "服务器/安全认证/自动回复/签名", "✅"],
+    ["设置", "渠道集成", "WhatsApp", "绑定状态/手机号展示", "✅"],
+    ["设置", "渠道集成", "LinkedIn弹窗", "绑定账号/连接数/搜索限额", "✅"],
+    ["设置", "渠道集成", "企业微信弹窗", "CorpId/AgentId/用户数/部门数", "✅"],
+    ["设置", "通知设置", "邮件通知开关", "开启/关闭邮件通知开关", "✅"],
+    ["设置", "通知设置", "回复提醒开关", "开启/关闭客户回复提醒开关", "✅"],
+    ["设置", "通知设置", "风险预警开关", "开启/关闭风险预警提醒开关", "✅"],
+    ["设置", "通知设置", "周报推送开关", "开启/关闭周报推送开关", "✅"],
+    ["", "", "", "设置模块总计:32项功能", ""]
+];
+
+const knowledgeData = [
+    ["一级功能", "二级功能", "三级功能", "功能描述", "状态"],
+    ["知识库", "知识库概览", "统计-知识总量", "知识总量展示", "✅"],
+    ["知识库", "知识库概览", "统计-分类数量", "知识分类数量", "✅"],
+    ["知识库", "知识库概览", "统计-AI覆盖率", "AI覆盖率", "✅"],
+    ["知识库", "知识库概览", "统计-本周新增", "本周新增数量", "✅"],
+    ["知识库", "知识库概览", "统计-模型版本", "模型版本展示", "✅"],
+    ["知识库", "AI学习中心", "学习进度", "AI学习进度展示", "✅"],
+    ["知识库", "AI学习中心", "问答记录", "最近问答互动记录", "✅"],
+    ["知识库", "AI学习中心", "AI训练-列表", "AI训练任务展示", "✅"],
+    ["知识库", "AI学习中心", "AI训练-状态", "训练进度/状态显示", "✅"],
+    ["知识库", "知识条目管理", "知识列表", "知识条目列表展示", "✅"],
+    ["知识库", "知识条目管理", "知识筛选", "分类/类型/状态筛选", "✅"],
+    ["知识库", "知识条目管理", "知识搜索", "关键词搜索", "✅"],
+    ["知识库", "知识条目管理", "知识详情-查看", "点击查看知识详情弹窗", "✅"],
+    ["知识库", "知识条目管理", "知识详情-内容", "问题/答案/标签/来源/使用次数", "✅"],
+    ["知识库", "知识条目管理", "知识详情-操作", "编辑/删除/标记操作", "✅"],
+    ["知识库", "添加知识弹窗", "知识录入", "问题/答案输入", "✅"],
+    ["知识库", "添加知识弹窗", "知识分类", "分类/标签设置", "✅"],
+    ["知识库", "添加知识弹窗", "知识来源", "来源标注", "✅"],
+    ["知识库", "批量导入弹窗", "文件导入", "支持CSV/Excel/PDF格式", "✅"],
+    ["知识库", "批量导入弹窗", "导入配置", "字段映射配置", "✅"],
+    ["知识库", "批量导入弹窗", "导入预览", "导入数据预览", "✅"],
+    ["", "", "", "知识库模块总计:21项功能", ""]
+];
+
+const summaryData = [
+    ["模块", "一级功能", "二级功能", "三级功能", "完成率"],
+    ["自动营销模块", 1, 12, 68, "100%"],
+    ["设置模块", 1, 5, 32, "100%"],
+    ["知识库模块", 1, 5, 21, "100%"],
+    ["合计", 3, 22, 121, "100%"],
+    ["", "", "", "", ""],
+    ["生成时间:2026-03-26 15:02 GMT+8", "", "", "", ""]
+];
+
+// 创建工作表
+const ws1 = XLSX.utils.aoa_to_sheet(marketingData);
+const ws2 = XLSX.utils.aoa_to_sheet(settingsData);
+const ws3 = XLSX.utils.aoa_to_sheet(knowledgeData);
+const ws4 = XLSX.utils.aoa_to_sheet(summaryData);
+
+// 设置列宽
+ws1['!cols'] = [{wch:15}, {wch:22}, {wch:22}, {wch:45}, {wch:8}];
+ws2['!cols'] = [{wch:12}, {wch:18}, {wch:22}, {wch:50}, {wch:8}];
+ws3['!cols'] = [{wch:12}, {wch:18}, {wch:22}, {wch:45}, {wch:8}];
+ws4['!cols'] = [{wch:20}, {wch:12}, {wch:12}, {wch:12}, {wch:10}];
+
+// 添加到工作簿
+XLSX.utils.book_append_sheet(wb, ws1, "自动营销模块");
+XLSX.utils.book_append_sheet(wb, ws2, "设置模块");
+XLSX.utils.book_append_sheet(wb, ws3, "知识库模块");
+XLSX.utils.book_append_sheet(wb, ws4, "汇总统计");
+
+// 保存文件
+const outputPath = 'C:\\Users\\Administrator\\.qclaw\\workspace\\tradebrain-crm\\docs\\领存智贸AI CRM-三级功能清单.xlsx';
+XLSX.writeFile(wb, outputPath);
+
+console.log('Excel文件已生成:', outputPath);

+ 334 - 0
ui/smarttrade-platform/docs/generate_excel.ps1

@@ -0,0 +1,334 @@
+$ErrorActionPreference = "Stop"
+
+# 创建 Excel Application
+$excel = New-Object -ComObject Excel.Application
+$excel.Visible = $false
+$excel.DisplayAlerts = $false
+
+try {
+    # 创建工作簿
+    $workbook = $excel.Workbooks.Add()
+    
+    # ===== Sheet 1: 自动营销模块 =====
+    $ws1 = $workbook.Worksheets.Item(1)
+    $ws1.Name = "自动营销模块"
+    
+    # 标题
+    $ws1.Cells.Item(1,1) = "领存智贸 AI CRM - 自动营销模块三级功能清单"
+    $ws1.Range("A1:F1").Merge()
+    $ws1.Range("A1:F1").Font.Bold = $true
+    $ws1.Range("A1:F1").Font.Size = 14
+    $ws1.Range("A1:F1").Font.Color = 4472C4
+    
+    # 表头
+    $headers = @("一级功能", "二级功能", "三级功能", "功能描述", "状态")
+    for ($i = 0; $i -lt $headers.Count; $i++) {
+        $cell = $ws1.Cells.Item(3, $i + 1)
+        $cell.Value = $headers[$i]
+        $cell.Font.Bold = $true
+        $cell.Font.Color = 16777215
+        $cell.Interior.Color = 4462C4
+        $cell.HorizontalAlignment = -4108
+    }
+    
+    # 数据
+    $marketingData = @(
+        @("自动营销", "营销活动管理", "活动列表-进行中", "展示进行中的营销活动(6条)", "✅"),
+        @("自动营销", "营销活动管理", "活动列表-已暂停", "展示已暂停的营销活动(4条)", "✅"),
+        @("自动营销", "营销活动管理", "活动列表-已完成", "展示已完成的营销活动(4条)", "✅"),
+        @("自动营销", "营销活动管理", "活动列表-状态筛选", "支持按状态筛选活动", "✅"),
+        @("自动营销", "营销活动管理", "活动卡片-信息展示", "活动名称/描述/进度展示", "✅"),
+        @("自动营销", "营销活动管理", "活动卡片-打开邮件数", "显示打开邮件的客户数量", "✅"),
+        @("自动营销", "营销活动管理", "活动卡片-回复邮件数", "显示回复邮件的客户数量", "✅"),
+        @("自动营销", "营销活动管理", "活动卡片-人工干预", "显示人工干预按钮", "✅"),
+        @("自动营销", "营销活动管理", "活动卡片-AI生成", "显示AI生成按钮", "✅"),
+        @("自动营销", "营销活动管理", "活动卡片-详情弹窗", "点击卡片打开详情弹窗", "✅"),
+        @("自动营销", "活动详情弹窗", "基本信息", "活动名称/类型/优先级/负责人/时间", "✅"),
+        @("自动营销", "活动详情弹窗", "核心数据", "发送/打开/回复/点击/转化统计", "✅"),
+        @("自动营销", "活动详情弹窗", "触达渠道", "邮件/WhatsApp/LinkedIn渠道展示", "✅"),
+        @("自动营销", "活动详情弹窗", "目标客户", "目标数/已触达/待触达", "✅"),
+        @("自动营销", "活动详情弹窗", "SOP序列", "自动化序列步骤展示", "✅"),
+        @("自动营销", "活动详情弹窗", "最近互动", "最近互动记录(3条)", "✅"),
+        @("自动营销", "活动详情弹窗", "互动详情", "查看全部互动详情弹窗", "✅"),
+        @("自动营销", "全部互动详情弹窗", "互动列表", "10条完整互动记录", "✅"),
+        @("自动营销", "全部互动详情弹窗", "互动筛选", "全部/回复/打开/点击筛选", "✅"),
+        @("自动营销", "全部互动详情弹窗", "互动详情", "姓名/公司/类型/内容/时间", "✅"),
+        @("自动营销", "全部互动详情弹窗", "互动详情-分析", "情感分析/优先级/联系方式", "✅"),
+        @("自动营销", "全部互动详情弹窗", "互动操作", "立即跟进/发邮件按钮", "✅"),
+        @("自动营销", "创建营销活动弹窗", "步骤1-基本信息", "活动名称/类型/优先级/负责人", "✅"),
+        @("自动营销", "创建营销活动弹窗", "步骤1-时间设置", "活动时间/目标设置", "✅"),
+        @("自动营销", "创建营销活动弹窗", "步骤2-目标客户", "AI智能推荐客户", "✅"),
+        @("自动营销", "创建营销活动弹窗", "步骤2-客户筛选", "高价值/沉默/潜在客户筛选", "✅"),
+        @("自动营销", "创建营销活动弹窗", "步骤3-触达渠道", "邮件/WhatsApp/LinkedIn渠道选择", "✅"),
+        @("自动营销", "创建营销活动弹窗", "步骤3-渠道状态", "渠道启用状态显示", "✅"),
+        @("自动营销", "创建营销活动弹窗", "步骤4-自动化规则", "SOP序列模板选择", "✅"),
+        @("自动营销", "创建营销活动弹窗", "步骤4-SOP自定义", "自定义SOP序列", "✅"),
+        @("自动营销", "创建营销活动弹窗", "步骤5-AI生成", "AI生成邮件内容", "✅"),
+        @("自动营销", "创建营销活动弹窗", "步骤5-主题建议", "AI推荐邮件主题", "✅"),
+        @("自动营销", "自定义SOP弹窗", "SOP配置", "序列名称设置", "✅"),
+        @("自动营销", "自定义SOP弹窗", "步骤管理", "添加/删除步骤", "✅"),
+        @("自动营销", "自定义SOP弹窗", "步骤配置", "步骤名称/间隔天数/触达渠道", "✅"),
+        @("自动营销", "自定义SOP弹窗", "渠道选择", "邮件/WhatsApp/LinkedIn/电话/微信", "✅"),
+        @("自动营销", "自定义SOP弹窗", "实时预览", "步骤时间线预览效果", "✅"),
+        @("自动营销", "打开邮件客户弹窗", "客户列表", "打开邮件客户展示", "✅"),
+        @("自动营销", "打开邮件客户弹窗", "客户信息", "年采购额/最后订单时间", "✅"),
+        @("自动营销", "打开邮件客户弹窗", "客户操作", "快速保护/暂停/销售分配", "✅"),
+        @("自动营销", "回复邮件审核弹窗", "审核统计", "待审核/已批准/已拒绝数量", "✅"),
+        @("自动营销", "回复邮件审核弹窗", "回复列表", "回复邮件客户列表", "✅"),
+        @("自动营销", "回复邮件审核弹窗", "情感分析", "正面/中立/负面情感标签", "✅"),
+        @("自动营销", "回复邮件审核弹窗", "优先级标记", "高/中/低优先级", "✅"),
+        @("自动营销", "回复邮件审核弹窗", "审核操作", "批准/分配销售/拒绝", "✅"),
+        @("自动营销", "人工干预与客户保护弹窗", "标签页切换", "客户保护白名单/干预历史", "✅"),
+        @("自动营销", "人工干预与客户保护弹窗", "客户保护-列表", "受保护客户列表展示", "✅"),
+        @("自动营销", "人工干预与客户保护弹窗", "客户保护-详情", "保护级别/原因/时间/销售", "✅"),
+        @("自动营销", "人工干预与客户保护弹窗", "客户保护-操作", "移除保护操作", "✅"),
+        @("自动营销", "人工干预与客户保护弹窗", "干预历史", "干预记录列表", "✅"),
+        @("自动营销", "人工干预与客户保护弹窗", "干预类型", "客户保护/审核干预/内容调整/发送暂停", "✅"),
+        @("自动营销", "人工干预与客户保护弹窗", "现有干预", "当前活动干预记录", "✅"),
+        @("自动营销", "AI邮件生成器弹窗", "邮件生成", "AI自动生成邮件内容", "✅"),
+        @("自动营销", "AI邮件生成器弹窗", "邮件编辑", "主题/正文编辑", "✅"),
+        @("自动营销", "AI邮件生成器弹窗", "主题建议", "AI推荐邮件主题", "✅"),
+        @("自动营销", "历史活动弹窗", "历史列表", "10条历史活动记录", "✅"),
+        @("自动营销", "历史活动弹窗", "活动信息", "名称/日期/负责人/状态", "✅"),
+        @("自动营销", "历史活动弹窗", "活动统计", "发送/打开/回复/点击/商机", "✅"),
+        @("自动营销", "历史活动弹窗", "活动操作", "复制活动/查看详情/导出报告", "✅"),
+        @("自动营销", "历史活动详情弹窗", "基本信息", "活动名称/周期/负责人/状态", "✅"),
+        @("自动营销", "历史活动详情弹窗", "核心数据", "发送量/打开数/回复数/点击数/商机", "✅"),
+        @("自动营销", "历史活动详情弹窗", "渠道分析", "各渠道效果数据", "✅"),
+        @("自动营销", "历史活动详情弹窗", "效果评估", "发送效率/打开率/回复率/转化率", "✅"),
+        @("自动营销", "历史活动详情弹窗", "经验总结", "活动亮点和改进建议", "✅"),
+        @("自动营销", "模板库弹窗", "模板列表", "模板分类展示", "✅"),
+        @("自动营销", "模板库弹窗", "模板筛选", "全部/邮件/WhatsApp/LinkedIn", "✅"),
+        @("自动营销", "模板库弹窗", "模板预览", "模板内容预览弹窗", "✅"),
+        @("自动营销", "模板库弹窗", "模板操作", "使用/编辑/删除", "✅")
+    )
+    
+    $row = 4
+    foreach ($item in $marketingData) {
+        for ($col = 0; $col -lt $item.Count; $col++) {
+            $cell = $ws1.Cells.Item($row, $col + 1)
+            $cell.Value = $item[$col]
+            $cell.WrapText = $true
+            if ($row % 2 -eq 0) {
+                $cell.Interior.Color = 2147549184
+            }
+        }
+        $row++
+    }
+    
+    # 统计行
+    $ws1.Cells.Item($row + 1, 1) = "自动营销模块总计:68项功能"
+    $ws1.Range("A$($row+1):E$($row+1)").Merge()
+    $ws1.Range("A$($row+1):E$($row+1)").Font.Bold = $true
+    
+    # 列宽
+    $ws1.Columns.Item(1).ColumnWidth = 15
+    $ws1.Columns.Item(2).ColumnWidth = 22
+    $ws1.Columns.Item(3).ColumnWidth = 22
+    $ws1.Columns.Item(4).ColumnWidth = 45
+    $ws1.Columns.Item(5).ColumnWidth = 10
+    
+    # ===== Sheet 2: 设置模块 =====
+    $ws2 = $workbook.Worksheets.Add()
+    $ws2.Name = "设置模块"
+    
+    $ws2.Cells.Item(1,1) = "领存智贸 AI CRM - 设置模块三级功能清单"
+    $ws2.Range("A1:F1").Merge()
+    $ws2.Range("A1:F1").Font.Bold = $true
+    $ws2.Range("A1:F1").Font.Size = 14
+    $ws2.Range("A1:F1").Font.Color = 4472C4
+    
+    for ($i = 0; $i -lt $headers.Count; $i++) {
+        $cell = $ws2.Cells.Item(3, $i + 1)
+        $cell.Value = $headers[$i]
+        $cell.Font.Bold = $true
+        $cell.Font.Color = 16777215
+        $cell.Interior.Color = 4462C4
+        $cell.HorizontalAlignment = -4108
+    }
+    
+    $settingsData = @(
+        @("设置", "账号与安全", "个人信息-展示", "头像/姓名/职位/邮箱展示", "✅"),
+        @("设置", "账号与安全", "个人信息-编辑弹窗", "编辑个人信息(姓名/职位/邮箱/电话/部门/简介)", "✅"),
+        @("设置", "账号与安全", "修改密码弹窗", "当前密码/新密码/确认密码", "✅"),
+        @("设置", "账号与安全", "两步验证", "开启/关闭两步验证开关", "✅"),
+        @("设置", "账号与安全", "登录历史弹窗", "8条登录记录(时间/IP/地点/设备/状态)", "✅"),
+        @("设置", "AI大脑配置", "模型微调-展示", "AI模型版本/训练数据量/准确率展示", "✅"),
+        @("设置", "AI大脑配置", "模型微调-配置", "训练数据来源/频率配置", "✅"),
+        @("设置", "AI大脑配置", "模型微调-训练", "开始训练按钮", "✅"),
+        @("设置", "AI大脑配置", "知识库管理", "知识条目数量展示", "✅"),
+        @("设置", "AI大脑配置", "自动学习开关", "开启/关闭自动学习开关", "✅"),
+        @("设置", "AI大脑配置", "策略自进化开关", "开启/关闭策略自进化开关", "✅"),
+        @("设置", "AI大脑配置", "个性化程度", "低/中/高个性化程度选择", "✅"),
+        @("设置", "自动寻客配置", "数据源-列表", "8个数据源列表(海关/LinkedIn/Google Maps等)", "✅"),
+        @("设置", "自动寻客配置", "数据源-统计", "数据源统计概览(总量/今日同步/覆盖国家)", "✅"),
+        @("设置", "自动寻客配置", "数据源-详情弹窗", "统计/配置/字段映射/同步日志", "✅"),
+        @("设置", "自动寻客配置", "数据源-添加弹窗", "类型/名称/API/地区/频率", "✅"),
+        @("设置", "自动寻客配置", "外贸快速入口弹窗", "海关/LinkedIn/展会/采购配置", "✅"),
+        @("设置", "自动寻客配置", "Lookalike算法开关", "开启/关闭Lookalike算法开关", "✅"),
+        @("设置", "自动寻客配置", "关键人挖掘开关", "开启/关闭关键人挖掘开关", "✅"),
+        @("设置", "自动寻客配置", "官网分析开关", "开启/关闭官网分析开关", "✅"),
+        @("设置", "渠道集成", "企业邮箱-列表", "邮箱账号列表(发送量/回复率/用量进度条)", "✅"),
+        @("设置", "渠道集成", "企业邮箱-统计", "邮箱统计概览(账号数/今日发送/回复率/认证)", "✅"),
+        @("设置", "渠道集成", "企业邮箱-添加弹窗", "SMTP/IMAP配置/测试连接", "✅"),
+        @("设置", "渠道集成", "企业邮箱-详情弹窗", "服务器/安全认证/自动回复/签名", "✅"),
+        @("设置", "渠道集成", "WhatsApp", "绑定状态/手机号展示", "✅"),
+        @("设置", "渠道集成", "LinkedIn弹窗", "绑定账号/连接数/搜索限额", "✅"),
+        @("设置", "渠道集成", "企业微信弹窗", "CorpId/AgentId/用户数/部门数", "✅"),
+        @("设置", "通知设置", "邮件通知开关", "开启/关闭邮件通知开关", "✅"),
+        @("设置", "通知设置", "回复提醒开关", "开启/关闭客户回复提醒开关", "✅"),
+        @("设置", "通知设置", "风险预警开关", "开启/关闭风险预警提醒开关", "✅"),
+        @("设置", "通知设置", "周报推送开关", "开启/关闭周报推送开关", "✅")
+    )
+    
+    $row = 4
+    foreach ($item in $settingsData) {
+        for ($col = 0; $col -lt $item.Count; $col++) {
+            $cell = $ws2.Cells.Item($row, $col + 1)
+            $cell.Value = $item[$col]
+            $cell.WrapText = $true
+            if ($row % 2 -eq 0) {
+                $cell.Interior.Color = 2147549184
+            }
+        }
+        $row++
+    }
+    
+    $ws2.Cells.Item($row + 1, 1) = "设置模块总计:32项功能"
+    $ws2.Range("A$($row+1):E$($row+1)").Merge()
+    $ws2.Range("A$($row+1):E$($row+1)").Font.Bold = $true
+    
+    $ws2.Columns.Item(1).ColumnWidth = 12
+    $ws2.Columns.Item(2).ColumnWidth = 18
+    $ws2.Columns.Item(3).ColumnWidth = 22
+    $ws2.Columns.Item(4).ColumnWidth = 50
+    $ws2.Columns.Item(5).ColumnWidth = 10
+    
+    # ===== Sheet 3: 知识库模块 =====
+    $ws3 = $workbook.Worksheets.Add()
+    $ws3.Name = "知识库模块"
+    
+    $ws3.Cells.Item(1,1) = "领存智贸 AI CRM - 知识库模块三级功能清单"
+    $ws3.Range("A1:F1").Merge()
+    $ws3.Range("A1:F1").Font.Bold = $true
+    $ws3.Range("A1:F1").Font.Size = 14
+    $ws3.Range("A1:F1").Font.Color = 4472C4
+    
+    for ($i = 0; $i -lt $headers.Count; $i++) {
+        $cell = $ws3.Cells.Item(3, $i + 1)
+        $cell.Value = $headers[$i]
+        $cell.Font.Bold = $true
+        $cell.Font.Color = 16777215
+        $cell.Interior.Color = 4462C4
+        $cell.HorizontalAlignment = -4108
+    }
+    
+    $knowledgeData = @(
+        @("知识库", "知识库概览", "统计-知识总量", "知识总量展示", "✅"),
+        @("知识库", "知识库概览", "统计-分类数量", "知识分类数量", "✅"),
+        @("知识库", "知识库概览", "统计-AI覆盖率", "AI覆盖率", "✅"),
+        @("知识库", "知识库概览", "统计-本周新增", "本周新增数量", "✅"),
+        @("知识库", "知识库概览", "统计-模型版本", "模型版本展示", "✅"),
+        @("知识库", "AI学习中心", "学习进度", "AI学习进度展示", "✅"),
+        @("知识库", "AI学习中心", "问答记录", "最近问答互动记录", "✅"),
+        @("知识库", "AI学习中心", "AI训练-列表", "AI训练任务展示", "✅"),
+        @("知识库", "AI学习中心", "AI训练-状态", "训练进度/状态显示", "✅"),
+        @("知识库", "知识条目管理", "知识列表", "知识条目列表展示", "✅"),
+        @("知识库", "知识条目管理", "知识筛选", "分类/类型/状态筛选", "✅"),
+        @("知识库", "知识条目管理", "知识搜索", "关键词搜索", "✅"),
+        @("知识库", "知识条目管理", "知识详情-查看", "点击查看知识详情弹窗", "✅"),
+        @("知识库", "知识条目管理", "知识详情-内容", "问题/答案/标签/来源/使用次数", "✅"),
+        @("知识库", "知识条目管理", "知识详情-操作", "编辑/删除/标记操作", "✅"),
+        @("知识库", "添加知识弹窗", "知识录入", "问题/答案输入", "✅"),
+        @("知识库", "添加知识弹窗", "知识分类", "分类/标签设置", "✅"),
+        @("知识库", "添加知识弹窗", "知识来源", "来源标注", "✅"),
+        @("知识库", "批量导入弹窗", "文件导入", "支持CSV/Excel/PDF格式", "✅"),
+        @("知识库", "批量导入弹窗", "导入配置", "字段映射配置", "✅"),
+        @("知识库", "批量导入弹窗", "导入预览", "导入数据预览", "✅")
+    )
+    
+    $row = 4
+    foreach ($item in $knowledgeData) {
+        for ($col = 0; $col -lt $item.Count; $col++) {
+            $cell = $ws3.Cells.Item($row, $col + 1)
+            $cell.Value = $item[$col]
+            $cell.WrapText = $true
+            if ($row % 2 -eq 0) {
+                $cell.Interior.Color = 2147549184
+            }
+        }
+        $row++
+    }
+    
+    $ws3.Cells.Item($row + 1, 1) = "知识库模块总计:21项功能"
+    $ws3.Range("A$($row+1):E$($row+1)").Merge()
+    $ws3.Range("A$($row+1):E$($row+1)").Font.Bold = $true
+    
+    $ws3.Columns.Item(1).ColumnWidth = 12
+    $ws3.Columns.Item(2).ColumnWidth = 18
+    $ws3.Columns.Item(3).ColumnWidth = 22
+    $ws3.Columns.Item(4).ColumnWidth = 45
+    $ws3.Columns.Item(5).ColumnWidth = 10
+    
+    # ===== Sheet 4: 汇总统计 =====
+    $ws4 = $workbook.Worksheets.Add()
+    $ws4.Name = "汇总统计"
+    
+    $ws4.Cells.Item(1,1) = "领存智贸 AI CRM - 功能清单汇总"
+    $ws4.Range("A1:D1").Merge()
+    $ws4.Range("A1:D1").Font.Bold = $true
+    $ws4.Range("A1:D1").Font.Size = 18
+    $ws4.Range("A1:D1").Font.Color = 4472C4
+    
+    $summaryHeaders = @("模块", "一级功能", "二级功能", "三级功能", "完成率")
+    for ($i = 0; $i -lt $summaryHeaders.Count; $i++) {
+        $cell = $ws4.Cells.Item(3, $i + 1)
+        $cell.Value = $summaryHeaders[$i]
+        $cell.Font.Bold = $true
+        $cell.Font.Color = 16777215
+        $cell.Interior.Color = 4462C4
+        $cell.HorizontalAlignment = -4108
+    }
+    
+    $summaryData = @(
+        @("自动营销模块", 1, 12, 68, "100%"),
+        @("设置模块", 1, 5, 32, "100%"),
+        @("知识库模块", 1, 5, 21, "100%"),
+        @("合计", 3, 22, 121, "100%")
+    )
+    
+    $row = 4
+    foreach ($item in $summaryData) {
+        for ($col = 0; $col -lt $item.Count; $col++) {
+            $cell = $ws4.Cells.Item($row, $col + 1)
+            $cell.Value = $item[$col]
+            $cell.HorizontalAlignment = -4108
+            if ($row -eq 7) {
+                $cell.Font.Bold = $true
+                $cell.Interior.Color = 255
+            }
+        }
+        $row++
+    }
+    
+    $ws4.Cells.Item(9, 1) = "生成时间:2026-03-26 15:02 GMT+8"
+    $ws4.Cells.Item(9, 1).Font.Italic = $true
+    $ws4.Cells.Item(9, 1).Font.Color = 8421504
+    
+    $ws4.Columns.Item(1).ColumnWidth = 20
+    $ws4.Columns.Item(2).ColumnWidth = 15
+    $ws4.Columns.Item(3).ColumnWidth = 15
+    $ws4.Columns.Item(4).ColumnWidth = 15
+    $ws4.Columns.Item(5).ColumnWidth = 12
+    
+    # 保存
+    $outputPath = "C:\Users\Administrator\.qclaw\workspace\tradebrain-crm\docs\领存智贸AI CRM-三级功能清单.xlsx"
+    $workbook.SaveAs($outputPath)
+    $workbook.Close()
+    
+    Write-Host "Excel文件已生成: $outputPath"
+    
+} finally {
+    $excel.Quit()
+    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
+}

+ 377 - 0
ui/smarttrade-platform/docs/generate_feature_list.py

@@ -0,0 +1,377 @@
+# -*- coding: utf-8 -*-
+import openpyxl
+from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
+from openpyxl.utils import get_column_letter
+
+# 创建工作簿
+wb = openpyxl.Workbook()
+
+# 定义样式
+header_font = Font(bold=True, color="FFFFFF", size=12)
+header_fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
+subheader_fill = PatternFill(start_color="5B9BD5", end_color="5B9BD5", fill_type="solid")
+alt_fill = PatternFill(start_color="D6DCE4", end_color="D6DCE4", fill_type="solid")
+center_align = Alignment(horizontal="center", vertical="center", wrap_text=True)
+left_align = Alignment(horizontal="left", vertical="center", wrap_text=True)
+
+thin_border = Border(
+    left=Side(style='thin'),
+    right=Side(style='thin'),
+    top=Side(style='thin'),
+    bottom=Side(style='thin')
+)
+
+# ====== Sheet 1: 自动营销模块 ======
+ws1 = wb.active
+ws1.title = "自动营销模块"
+
+# 标题
+ws1.merge_cells('A1:E1')
+ws1['A1'] = "自动营销模块 - 三级功能清单"
+ws1['A1'].font = Font(bold=True, size=16, color="4472C4")
+ws1['A1'].alignment = center_align
+
+# 表头
+headers = ["一级功能", "二级功能", "三级功能", "功能描述", "状态"]
+for col, header in enumerate(headers, 1):
+    cell = ws1.cell(row=3, column=col, value=header)
+    cell.font = header_font
+    cell.fill = header_fill
+    cell.alignment = center_align
+    cell.border = thin_border
+
+# 数据
+marketing_data = [
+    # 1.1 营销活动管理
+    ("自动营销", "营销活动管理", "活动列表-进行中", "展示进行中的营销活动(6条)", "✅"),
+    ("自动营销", "营销活动管理", "活动列表-已暂停", "展示已暂停的营销活动(4条)", "✅"),
+    ("自动营销", "营销活动管理", "活动列表-已完成", "展示已完成的营销活动(4条)", "✅"),
+    ("自动营销", "营销活动管理", "活动列表-状态筛选", "支持按状态筛选活动", "✅"),
+    ("自动营销", "营销活动管理", "活动卡片-信息展示", "活动名称/描述/进度展示", "✅"),
+    ("自动营销", "营销活动管理", "活动卡片-打开邮件数", "显示打开邮件的客户数量", "✅"),
+    ("自动营销", "营销活动管理", "活动卡片-回复邮件数", "显示回复邮件的客户数量", "✅"),
+    ("自动营销", "营销活动管理", "活动卡片-人工干预", "显示人工干预按钮", "✅"),
+    ("自动营销", "营销活动管理", "活动卡片-AI生成", "显示AI生成按钮", "✅"),
+    ("自动营销", "营销活动管理", "活动卡片-详情弹窗", "点击卡片打开详情弹窗", "✅"),
+    
+    # 1.2 活动详情弹窗
+    ("自动营销", "活动详情弹窗", "基本信息", "活动名称/类型/优先级/负责人/时间", "✅"),
+    ("自动营销", "活动详情弹窗", "核心数据", "发送/打开/回复/点击/转化统计", "✅"),
+    ("自动营销", "活动详情弹窗", "触达渠道", "邮件/WhatsApp/LinkedIn渠道展示", "✅"),
+    ("自动营销", "活动详情弹窗", "目标客户", "目标数/已触达/待触达", "✅"),
+    ("自动营销", "活动详情弹窗", "SOP序列", "自动化序列步骤展示", "✅"),
+    ("自动营销", "活动详情弹窗", "最近互动", "最近互动记录(3条)", "✅"),
+    ("自动营销", "活动详情弹窗", "互动详情", "查看全部互动详情弹窗", "✅"),
+    
+    # 1.3 全部互动详情弹窗
+    ("自动营销", "全部互动详情弹窗", "互动列表", "10条完整互动记录", "✅"),
+    ("自动营销", "全部互动详情弹窗", "互动筛选", "全部/回复/打开/点击筛选", "✅"),
+    ("自动营销", "全部互动详情弹窗", "互动详情", "姓名/公司/类型/内容/时间", "✅"),
+    ("自动营销", "全部互动详情弹窗", "互动详情-分析", "情感分析/优先级/联系方式", "✅"),
+    ("自动营销", "全部互动详情弹窗", "互动操作", "立即跟进/发邮件按钮", "✅"),
+    
+    # 1.4 创建营销活动弹窗
+    ("自动营销", "创建营销活动弹窗", "步骤1-基本信息", "活动名称/类型/优先级/负责人", "✅"),
+    ("自动营销", "创建营销活动弹窗", "步骤1-时间设置", "活动时间/目标设置", "✅"),
+    ("自动营销", "创建营销活动弹窗", "步骤2-目标客户", "AI智能推荐客户", "✅"),
+    ("自动营销", "创建营销活动弹窗", "步骤2-客户筛选", "高价值/沉默/潜在客户筛选", "✅"),
+    ("自动营销", "创建营销活动弹窗", "步骤3-触达渠道", "邮件/WhatsApp/LinkedIn渠道选择", "✅"),
+    ("自动营销", "创建营销活动弹窗", "步骤3-渠道状态", "渠道启用状态显示", "✅"),
+    ("自动营销", "创建营销活动弹窗", "步骤4-自动化规则", "SOP序列模板选择", "✅"),
+    ("自动营销", "创建营销活动弹窗", "步骤4-SOP自定义", "自定义SOP序列", "✅"),
+    ("自动营销", "创建营销活动弹窗", "步骤5-AI生成", "AI生成邮件内容", "✅"),
+    ("自动营销", "创建营销活动弹窗", "步骤5-主题建议", "AI推荐邮件主题", "✅"),
+    
+    # 1.5 自定义SOP弹窗
+    ("自动营销", "自定义SOP弹窗", "SOP配置", "序列名称设置", "✅"),
+    ("自动营销", "自定义SOP弹窗", "步骤管理", "添加/删除步骤", "✅"),
+    ("自动营销", "自定义SOP弹窗", "步骤配置", "步骤名称/间隔天数/触达渠道", "✅"),
+    ("自动营销", "自定义SOP弹窗", "渠道选择", "邮件/WhatsApp/LinkedIn/电话/微信", "✅"),
+    ("自动营销", "自定义SOP弹窗", "实时预览", "步骤时间线预览效果", "✅"),
+    
+    # 1.6 打开邮件客户弹窗
+    ("自动营销", "打开邮件客户弹窗", "客户列表", "打开邮件客户展示", "✅"),
+    ("自动营销", "打开邮件客户弹窗", "客户信息", "年采购额/最后订单时间", "✅"),
+    ("自动营销", "打开邮件客户弹窗", "客户操作", "快速保护/暂停/销售分配", "✅"),
+    
+    # 1.7 回复邮件审核弹窗
+    ("自动营销", "回复邮件审核弹窗", "审核统计", "待审核/已批准/已拒绝数量", "✅"),
+    ("自动营销", "回复邮件审核弹窗", "回复列表", "回复邮件客户列表", "✅"),
+    ("自动营销", "回复邮件审核弹窗", "情感分析", "正面/中立/负面情感标签", "✅"),
+    ("自动营销", "回复邮件审核弹窗", "优先级标记", "高/中/低优先级", "✅"),
+    ("自动营销", "回复邮件审核弹窗", "审核操作", "批准/分配销售/拒绝", "✅"),
+    
+    # 1.8 人工干预与客户保护弹窗
+    ("自动营销", "人工干预与客户保护弹窗", "标签页切换", "客户保护白名单/干预历史", "✅"),
+    ("自动营销", "人工干预与客户保护弹窗", "客户保护-列表", "受保护客户列表展示", "✅"),
+    ("自动营销", "人工干预与客户保护弹窗", "客户保护-详情", "保护级别/原因/时间/销售", "✅"),
+    ("自动营销", "人工干预与客户保护弹窗", "客户保护-操作", "移除保护操作", "✅"),
+    ("自动营销", "人工干预与客户保护弹窗", "干预历史", "干预记录列表", "✅"),
+    ("自动营销", "人工干预与客户保护弹窗", "干预类型", "客户保护/审核干预/内容调整/发送暂停", "✅"),
+    ("自动营销", "人工干预与客户保护弹窗", "现有干预", "当前活动干预记录", "✅"),
+    
+    # 1.9 AI邮件生成器弹窗
+    ("自动营销", "AI邮件生成器弹窗", "邮件生成", "AI自动生成邮件内容", "✅"),
+    ("自动营销", "AI邮件生成器弹窗", "邮件编辑", "主题/正文编辑", "✅"),
+    ("自动营销", "AI邮件生成器弹窗", "主题建议", "AI推荐邮件主题", "✅"),
+    
+    # 1.10 历史活动弹窗
+    ("自动营销", "历史活动弹窗", "历史列表", "10条历史活动记录", "✅"),
+    ("自动营销", "历史活动弹窗", "活动信息", "名称/日期/负责人/状态", "✅"),
+    ("自动营销", "历史活动弹窗", "活动统计", "发送/打开/回复/点击/商机", "✅"),
+    ("自动营销", "历史活动弹窗", "活动操作", "复制活动/查看详情/导出报告", "✅"),
+    
+    # 1.11 历史活动详情弹窗
+    ("自动营销", "历史活动详情弹窗", "基本信息", "活动名称/周期/负责人/状态", "✅"),
+    ("自动营销", "历史活动详情弹窗", "核心数据", "发送量/打开数/回复数/点击数/商机", "✅"),
+    ("自动营销", "历史活动详情弹窗", "渠道分析", "各渠道效果数据", "✅"),
+    ("自动营销", "历史活动详情弹窗", "效果评估", "发送效率/打开率/回复率/转化率", "✅"),
+    ("自动营销", "历史活动详情弹窗", "经验总结", "活动亮点和改进建议", "✅"),
+    
+    # 1.12 模板库弹窗
+    ("自动营销", "模板库弹窗", "模板列表", "模板分类展示", "✅"),
+    ("自动营销", "模板库弹窗", "模板筛选", "全部/邮件/WhatsApp/LinkedIn", "✅"),
+    ("自动营销", "模板库弹窗", "模板预览", "模板内容预览弹窗", "✅"),
+    ("自动营销", "模板库弹窗", "模板操作", "使用/编辑/删除", "✅"),
+]
+
+for row_num, row_data in enumerate(marketing_data, 4):
+    for col_num, value in enumerate(row_data, 1):
+        cell = ws1.cell(row=row_num, column=col_num, value=value)
+        cell.border = thin_border
+        if col_num == 1:
+            cell.alignment = center_align
+        elif col_num == 5:
+            cell.alignment = center_align
+        else:
+            cell.alignment = left_align
+        # 交替行颜色
+        if row_num % 2 == 0:
+            cell.fill = alt_fill
+
+# 统计行
+summary_row = len(marketing_data) + 5
+ws1.merge_cells(f'A{summary_row}:D{summary_row}')
+ws1[f'A{summary_row}'] = "自动营销模块总计"
+ws1[f'A{summary_row}'].font = Font(bold=True, size=12)
+ws1[f'A{summary_row}'].alignment = center_align
+ws1[f'E{summary_row}'] = f"68项功能"
+ws1[f'E{summary_row}'].font = Font(bold=True)
+ws1[f'E{summary_row}'].alignment = center_align
+
+# 设置列宽
+ws1.column_dimensions['A'].width = 15
+ws1.column_dimensions['B'].width = 22
+ws1.column_dimensions['C'].width = 25
+ws1.column_dimensions['D'].width = 45
+ws1.column_dimensions['E'].width = 10
+
+# ====== Sheet 2: 设置模块 ======
+ws2 = wb.create_sheet("设置模块")
+
+ws2.merge_cells('A1:E1')
+ws2['A1'] = "设置模块 - 三级功能清单"
+ws2['A1'].font = Font(bold=True, size=16, color="4472C4")
+ws2['A1'].alignment = center_align
+
+for col, header in enumerate(headers, 1):
+    cell = ws2.cell(row=3, column=col, value=header)
+    cell.font = header_font
+    cell.fill = header_fill
+    cell.alignment = center_align
+    cell.border = thin_border
+
+settings_data = [
+    # 2.1 账号与安全
+    ("设置", "账号与安全", "个人信息-展示", "头像/姓名/职位/邮箱展示", "✅"),
+    ("设置", "账号与安全", "个人信息-编辑弹窗", "编辑个人信息(姓名/职位/邮箱/电话/部门/简介)", "✅"),
+    ("设置", "账号与安全", "修改密码弹窗", "当前密码/新密码/确认密码", "✅"),
+    ("设置", "账号与安全", "两步验证", "开启/关闭两步验证开关", "✅"),
+    ("设置", "账号与安全", "登录历史弹窗", "8条登录记录(时间/IP/地点/设备/状态)", "✅"),
+    
+    # 2.2 AI大脑配置
+    ("设置", "AI大脑配置", "模型微调-展示", "AI模型版本/训练数据量/准确率展示", "✅"),
+    ("设置", "AI大脑配置", "模型微调-配置", "训练数据来源/频率配置", "✅"),
+    ("设置", "AI大脑配置", "模型微调-训练", "开始训练按钮", "✅"),
+    ("设置", "AI大脑配置", "知识库管理", "知识条目数量展示", "✅"),
+    ("设置", "AI大脑配置", "自动学习开关", "开启/关闭自动学习开关", "✅"),
+    ("设置", "AI大脑配置", "策略自进化开关", "开启/关闭策略自进化开关", "✅"),
+    ("设置", "AI大脑配置", "个性化程度", "低/中/高个性化程度选择", "✅"),
+    
+    # 2.3 自动寻客配置
+    ("设置", "自动寻客配置", "数据源-列表", "8个数据源列表(海关/LinkedIn/Google Maps等)", "✅"),
+    ("设置", "自动寻客配置", "数据源-统计", "数据源统计概览(总量/今日同步/覆盖国家)", "✅"),
+    ("设置", "自动寻客配置", "数据源-详情弹窗", "统计/配置/字段映射/同步日志", "✅"),
+    ("设置", "自动寻客配置", "数据源-添加弹窗", "类型/名称/API/地区/频率", "✅"),
+    ("设置", "自动寻客配置", "外贸快速入口弹窗", "海关/LinkedIn/展会/采购配置", "✅"),
+    ("设置", "自动寻客配置", "Lookalike算法开关", "开启/关闭Lookalike算法开关", "✅"),
+    ("设置", "自动寻客配置", "关键人挖掘开关", "开启/关闭关键人挖掘开关", "✅"),
+    ("设置", "自动寻客配置", "官网分析开关", "开启/关闭官网分析开关", "✅"),
+    
+    # 2.4 渠道集成
+    ("设置", "渠道集成", "企业邮箱-列表", "邮箱账号列表(发送量/回复率/用量进度条)", "✅"),
+    ("设置", "渠道集成", "企业邮箱-统计", "邮箱统计概览(账号数/今日发送/回复率/认证)", "✅"),
+    ("设置", "渠道集成", "企业邮箱-添加弹窗", "SMTP/IMAP配置/测试连接", "✅"),
+    ("设置", "渠道集成", "企业邮箱-详情弹窗", "服务器/安全认证/自动回复/签名", "✅"),
+    ("设置", "渠道集成", "WhatsApp", "绑定状态/手机号展示", "✅"),
+    ("设置", "渠道集成", "LinkedIn弹窗", "绑定账号/连接数/搜索限额", "✅"),
+    ("设置", "渠道集成", "企业微信弹窗", "CorpId/AgentId/用户数/部门数", "✅"),
+    
+    # 2.5 通知设置
+    ("设置", "通知设置", "邮件通知开关", "开启/关闭邮件通知开关", "✅"),
+    ("设置", "通知设置", "回复提醒开关", "开启/关闭客户回复提醒开关", "✅"),
+    ("设置", "通知设置", "风险预警开关", "开启/关闭风险预警提醒开关", "✅"),
+    ("设置", "通知设置", "周报推送开关", "开启/关闭周报推送开关", "✅"),
+]
+
+for row_num, row_data in enumerate(settings_data, 4):
+    for col_num, value in enumerate(row_data, 1):
+        cell = ws2.cell(row=row_num, column=col_num, value=value)
+        cell.border = thin_border
+        if col_num == 1:
+            cell.alignment = center_align
+        elif col_num == 5:
+            cell.alignment = center_align
+        else:
+            cell.alignment = left_align
+        if row_num % 2 == 0:
+            cell.fill = alt_fill
+
+summary_row2 = len(settings_data) + 5
+ws2.merge_cells(f'A{summary_row2}:D{summary_row2}')
+ws2[f'A{summary_row2}'] = "设置模块总计"
+ws2[f'A{summary_row2}'].font = Font(bold=True, size=12)
+ws2[f'A{summary_row2}'].alignment = center_align
+ws2[f'E{summary_row2}'] = f"38项功能"
+ws2[f'E{summary_row2}'].font = Font(bold=True)
+ws2[f'E{summary_row2}'].alignment = center_align
+
+ws2.column_dimensions['A'].width = 15
+ws2.column_dimensions['B'].width = 20
+ws2.column_dimensions['C'].width = 25
+ws2.column_dimensions['D'].width = 50
+ws2.column_dimensions['E'].width = 10
+
+# ====== Sheet 3: 知识库模块 ======
+ws3 = wb.create_sheet("知识库模块")
+
+ws3.merge_cells('A1:E1')
+ws3['A1'] = "知识库模块 - 三级功能清单"
+ws3['A1'].font = Font(bold=True, size=16, color="4472C4")
+ws3['A1'].alignment = center_align
+
+for col, header in enumerate(headers, 1):
+    cell = ws3.cell(row=3, column=col, value=header)
+    cell.font = header_font
+    cell.fill = header_fill
+    cell.alignment = center_align
+    cell.border = thin_border
+
+knowledge_data = [
+    # 3.1 知识库概览
+    ("知识库", "知识库概览", "统计-知识总量", "知识总量展示", "✅"),
+    ("知识库", "知识库概览", "统计-分类数量", "知识分类数量", "✅"),
+    ("知识库", "知识库概览", "统计-AI覆盖率", "AI覆盖率", "✅"),
+    ("知识库", "知识库概览", "统计-本周新增", "本周新增数量", "✅"),
+    ("知识库", "知识库概览", "统计-模型版本", "模型版本展示", "✅"),
+    
+    # 3.2 AI学习中心
+    ("知识库", "AI学习中心", "学习进度", "AI学习进度展示", "✅"),
+    ("知识库", "AI学习中心", "问答记录", "最近问答互动记录", "✅"),
+    ("知识库", "AI学习中心", "AI训练-列表", "AI训练任务展示", "✅"),
+    ("知识库", "AI学习中心", "AI训练-状态", "训练进度/状态显示", "✅"),
+    
+    # 3.3 知识条目管理
+    ("知识库", "知识条目管理", "知识列表", "知识条目列表展示", "✅"),
+    ("知识库", "知识条目管理", "知识筛选", "分类/类型/状态筛选", "✅"),
+    ("知识库", "知识条目管理", "知识搜索", "关键词搜索", "✅"),
+    ("知识库", "知识条目管理", "知识详情-查看", "点击查看知识详情弹窗", "✅"),
+    ("知识库", "知识条目管理", "知识详情-内容", "问题/答案/标签/来源/使用次数", "✅"),
+    ("知识库", "知识条目管理", "知识详情-操作", "编辑/删除/标记操作", "✅"),
+    
+    # 3.4 添加知识弹窗
+    ("知识库", "添加知识弹窗", "知识录入", "问题/答案输入", "✅"),
+    ("知识库", "添加知识弹窗", "知识分类", "分类/标签设置", "✅"),
+    ("知识库", "添加知识弹窗", "知识来源", "来源标注", "✅"),
+    
+    # 3.5 批量导入弹窗
+    ("知识库", "批量导入弹窗", "文件导入", "支持CSV/Excel/PDF格式", "✅"),
+    ("知识库", "批量导入弹窗", "导入配置", "字段映射配置", "✅"),
+    ("知识库", "批量导入弹窗", "导入预览", "导入数据预览", "✅"),
+]
+
+for row_num, row_data in enumerate(knowledge_data, 4):
+    for col_num, value in enumerate(row_data, 1):
+        cell = ws3.cell(row=row_num, column=col_num, value=value)
+        cell.border = thin_border
+        if col_num == 1:
+            cell.alignment = center_align
+        elif col_num == 5:
+            cell.alignment = center_align
+        else:
+            cell.alignment = left_align
+        if row_num % 2 == 0:
+            cell.fill = alt_fill
+
+summary_row3 = len(knowledge_data) + 5
+ws3.merge_cells(f'A{summary_row3}:D{summary_row3}')
+ws3[f'A{summary_row3}'] = "知识库模块总计"
+ws3[f'A{summary_row3}'].font = Font(bold=True, size=12)
+ws3[f'A{summary_row3}'].alignment = center_align
+ws3[f'E{summary_row3}'] = f"22项功能"
+ws3[f'E{summary_row3}'].font = Font(bold=True)
+ws3[f'E{summary_row3}'].alignment = center_align
+
+ws3.column_dimensions['A'].width = 15
+ws3.column_dimensions['B'].width = 20
+ws3.column_dimensions['C'].width = 25
+ws3.column_dimensions['D'].width = 45
+ws3.column_dimensions['E'].width = 10
+
+# ====== Sheet 4: 汇总统计 ======
+ws4 = wb.create_sheet("汇总统计")
+
+ws4.merge_cells('A1:D1')
+ws4['A1'] = "领存智贸 AI CRM - 功能清单汇总"
+ws4['A1'].font = Font(bold=True, size=18, color="4472C4")
+ws4['A1'].alignment = center_align
+
+# 汇总表格
+summary_headers = ["模块", "一级功能", "二级功能", "三级功能", "完成率"]
+for col, header in enumerate(summary_headers, 1):
+    cell = ws4.cell(row=3, column=col, value=header)
+    cell.font = header_font
+    cell.fill = header_fill
+    cell.alignment = center_align
+    cell.border = thin_border
+
+summary_data = [
+    ("自动营销模块", 1, 12, 68, "100%"),
+    ("设置模块", 1, 5, 38, "100%"),
+    ("知识库模块", 1, 5, 22, "100%"),
+    ("合计", 3, 22, 128, "100%"),
+]
+
+for row_num, row_data in enumerate(summary_data, 4):
+    for col_num, value in enumerate(row_data, 1):
+        cell = ws4.cell(row=row_num, column=col_num, value=value)
+        cell.border = thin_border
+        cell.alignment = center_align
+        if row_num == 7:  # 合计行
+            cell.font = Font(bold=True)
+            cell.fill = PatternFill(start_color="FFC000", end_color="FFC000", fill_type="solid")
+
+ws4.column_dimensions['A'].width = 20
+ws4.column_dimensions['B'].width = 15
+ws4.column_dimensions['C'].width = 15
+ws4.column_dimensions['D'].width = 15
+ws4.column_dimensions['E'].width = 12
+
+# 添加时间戳
+ws4['A9'] = f"生成时间:2026-03-26 15:02 GMT+8"
+ws4['A9'].font = Font(italic=True, color="808080")
+
+# 保存文件
+output_path = r"C:\Users\Administrator\.qclaw\workspace\tradebrain-crm\docs\领存智贸AI CRM-三级功能清单.xlsx"
+wb.save(output_path)
+print(f"Excel文件已生成: {output_path}")

+ 53 - 0
ui/smarttrade-platform/src/components/layout/TopBar.vue

@@ -7,6 +7,12 @@
     </div>
 
     <div class="top-actions">
+      <!-- Search -->
+      <div class="search-box">
+        <i class="fas fa-search search-icon"></i>
+        <input type="text" class="search-input" placeholder="搜索客户、订单、商机...">
+      </div>
+
       <!-- Quick Actions -->
       <div class="action-btn" @click="showQuickActions = !showQuickActions" style="position: relative;">
         <i class="fas fa-plus"></i>
@@ -14,6 +20,13 @@
         <!-- Quick Actions Menu -->
         <transition name="fade">
           <div v-if="showQuickActions" class="task-menu show" style="top: 100%; right: 0; position: absolute; margin-top: 8px;">
+            <div class="task-menu-item" @click="openModal('prospect')">
+              <div class="task-menu-icon prospect"><i class="fas fa-search"></i></div>
+              <div class="task-menu-text">
+                <h4>AI智能寻客</h4>
+                <p>全网挖掘高匹配潜客</p>
+              </div>
+            </div>
             <div class="task-menu-item" @click="openModal('marketing')">
               <div class="task-menu-icon marketing"><i class="fas fa-paper-plane"></i></div>
               <div class="task-menu-text">
@@ -21,6 +34,13 @@
                 <p>多渠道自动触达客户</p>
               </div>
             </div>
+            <div class="task-menu-item" @click="openModal('analysis')">
+              <div class="task-menu-icon analysis"><i class="fas fa-chart-bar"></i></div>
+              <div class="task-menu-text">
+                <h4>生成分析报告</h4>
+                <p>AI自动生成业务报告</p>
+              </div>
+            </div>
           </div>
         </transition>
       </div>
@@ -1128,6 +1148,39 @@ const showPrivacy = () => {
   gap: 12px;
 }
 
+.search-box {
+  position: relative;
+  width: 280px;
+}
+
+.search-icon {
+  position: absolute;
+  left: 12px;
+  top: 50%;
+  transform: translateY(-50%);
+  color: var(--text-muted);
+  font-size: 14px;
+}
+
+.search-input {
+  width: 100%;
+  padding: 8px 12px 8px 36px;
+  background: var(--bg-hover);
+  border: 1px solid var(--border);
+  border-radius: 8px;
+  color: var(--text-primary);
+  font-size: 13px;
+}
+
+.search-input::placeholder {
+  color: var(--text-muted);
+}
+
+.search-input:focus {
+  outline: none;
+  border-color: var(--primary);
+}
+
 .action-btn {
   width: 36px;
   height: 36px;

+ 767 - 66
ui/smarttrade-platform/src/views/AnalysisView.vue

@@ -1,99 +1,800 @@
 <template>
-  <div class="data-page">
-    <div class="data-header">
-      <div class="data-title">📊 经营分析</div>
-      <div style="display: flex; gap: 12px;">
-        <select class="form-select" style="width: auto;">
-          <option>本月</option>
-          <option>本季度</option>
-          <option>本年</option>
-        </select>
-        <button class="btn btn-secondary"><i class="fas fa-download"></i> 导出报告</button>
+  <div class="analysis-page">
+    <!-- Header -->
+    <div class="analysis-header">
+      <div class="header-left">
+        <div class="data-title">📊 经营分析</div>
+        <p class="header-desc">全面掌握业务数据,AI驱动的经营决策支持</p>
+      </div>
+      <div class="header-actions">
+        <div class="date-range-picker">
+          <select class="form-select" v-model="selectedPeriod" @change="updatePeriod">
+            <option value="month">本月</option>
+            <option value="quarter">本季度</option>
+            <option value="year">本年</option>
+            <option value="custom">自定义</option>
+          </select>
+          <div class="date-inputs" v-if="selectedPeriod === 'custom'">
+            <input type="date" class="form-input" v-model="customStartDate">
+            <span>至</span>
+            <input type="date" class="form-input" v-model="customEndDate">
+          </div>
+        </div>
+        <button class="btn btn-secondary" @click="showComparisonModal = true">
+          <i class="fas fa-chart-bar"></i> 对比分析
+        </button>
+        <button class="btn btn-secondary" @click="exportReport">
+          <i class="fas fa-download"></i> 导出报告
+        </button>
+        <button class="btn btn-primary" @click="showDetailModal = true">
+          <i class="fas fa-sliders-h"></i> 自定义仪表板
+        </button>
       </div>
     </div>
 
-    <!-- Stats -->
-    <div class="stat-row">
-      <div class="stat-card-lg">
-        <div class="stat-icon-lg blue"><i class="fas fa-chart-line"></i></div>
-        <div class="stat-content-lg"><h3>¥3.2M</h3><p>本月营收</p></div>
+    <!-- KPI Cards -->
+    <div class="kpi-row">
+      <div class="kpi-card" @click="filterByMetric('revenue')">
+        <div class="kpi-header">
+          <span class="kpi-label">营收</span>
+          <span class="kpi-trend" :class="{ up: revenueGrowth > 0, down: revenueGrowth < 0 }">
+            <i :class="revenueGrowth > 0 ? 'fas fa-arrow-up' : 'fas fa-arrow-down'"></i>
+            {{ Math.abs(revenueGrowth) }}%
+          </span>
+        </div>
+        <div class="kpi-value">¥{{ formatNumber(totalRevenue) }}</div>
+        <div class="kpi-meta">
+          <span>环比: {{ lastPeriodRevenue > 0 ? '+' : '' }}{{ revenueGrowth }}%</span>
+          <span>同比: +{{ yoyGrowth }}%</span>
+        </div>
       </div>
-      <div class="stat-card-lg">
-        <div class="stat-icon-lg green"><i class="fas fa-arrow-up"></i></div>
-        <div class="stat-content-lg"><h3>+23%</h3><p>同比增长</p></div>
+
+      <div class="kpi-card" @click="filterByMetric('orders')">
+        <div class="kpi-header">
+          <span class="kpi-label">订单数</span>
+          <span class="kpi-trend up">
+            <i class="fas fa-arrow-up"></i> 12%
+          </span>
+        </div>
+        <div class="kpi-value">{{ totalOrders }}</div>
+        <div class="kpi-meta">
+          <span>已完成: {{ completedOrders }}</span>
+          <span>进行中: {{ activeOrders }}</span>
+        </div>
       </div>
-      <div class="stat-card-lg">
-        <div class="stat-icon-lg purple"><i class="fas fa-handshake"></i></div>
-        <div class="stat-content-lg"><h3>89</h3><p>成交客户</p></div>
+
+      <div class="kpi-card" @click="filterByMetric('customers')">
+        <div class="kpi-header">
+          <span class="kpi-label">成交客户</span>
+          <span class="kpi-trend up">
+            <i class="fas fa-arrow-up"></i> 8%
+          </span>
+        </div>
+        <div class="kpi-value">{{ newCustomers }}</div>
+        <div class="kpi-meta">
+          <span>新增: {{ newCustomersCount }}</span>
+          <span>复购: {{ repeatCustomers }}</span>
+        </div>
       </div>
-      <div class="stat-card-lg">
-        <div class="stat-icon-lg orange"><i class="fas fa-percentage"></i></div>
-        <div class="stat-content-lg"><h3>68%</h3><p>营销转化率</p></div>
+
+      <div class="kpi-card" @click="filterByMetric('conversion')">
+        <div class="kpi-header">
+          <span class="kpi-label">转化率</span>
+          <span class="kpi-trend up">
+            <i class="fas fa-arrow-up"></i> 5%
+          </span>
+        </div>
+        <div class="kpi-value">{{ conversionRate }}%</div>
+        <div class="kpi-meta">
+          <span>邮件: {{ emailConversion }}%</span>
+          <span>WhatsApp: {{ whatsappConversion }}%</span>
+        </div>
       </div>
-      <div class="stat-card-lg">
-        <div class="stat-icon-lg" style="background: rgba(16, 185, 129, 0.2); color: var(--success);"><i class="fas fa-coins"></i></div>
-        <div class="stat-content-lg"><h3>¥38K</h3><p>平均客单价</p></div>
+
+      <div class="kpi-card" @click="filterByMetric('aov')">
+        <div class="kpi-header">
+          <span class="kpi-label">客单价</span>
+          <span class="kpi-trend up">
+            <i class="fas fa-arrow-up"></i> 15%
+          </span>
+        </div>
+        <div class="kpi-value">¥{{ formatNumber(avgOrderValue) }}</div>
+        <div class="kpi-meta">
+          <span>最高: ¥{{ formatNumber(maxOrderValue) }}</span>
+          <span>最低: ¥{{ formatNumber(minOrderValue) }}</span>
+        </div>
+      </div>
+
+      <div class="kpi-card" @click="filterByMetric('roi')">
+        <div class="kpi-header">
+          <span class="kpi-label">ROI</span>
+          <span class="kpi-trend up">
+            <i class="fas fa-arrow-up"></i> 22%
+          </span>
+        </div>
+        <div class="kpi-value">{{ roi }}%</div>
+        <div class="kpi-meta">
+          <span>营销成本: ¥{{ formatNumber(marketingCost) }}</span>
+          <span>利润: ¥{{ formatNumber(profit) }}</span>
+        </div>
       </div>
     </div>
 
-    <!-- Charts -->
-    <div class="market-grid">
-      <div class="market-card">
-        <div class="market-card-header">
-          <div class="market-card-title">📈 销售趋势</div>
+    <!-- Charts Section -->
+    <div class="charts-section">
+      <!-- Revenue Trend -->
+      <div class="chart-card">
+        <div class="chart-header">
+          <h4><i class="fas fa-chart-line"></i> 销售趋势</h4>
+          <div class="chart-controls">
+            <button class="chart-btn" :class="{ active: chartType === 'line' }" @click="chartType = 'line'">
+              <i class="fas fa-chart-line"></i>
+            </button>
+            <button class="chart-btn" :class="{ active: chartType === 'bar' }" @click="chartType = 'bar'">
+              <i class="fas fa-chart-bar"></i>
+            </button>
+            <button class="chart-btn" @click="showChartDetail('revenue')">
+              <i class="fas fa-expand"></i>
+            </button>
+          </div>
+        </div>
+        <div class="chart-container">
+          <div class="chart-bars">
+            <div v-for="(data, index) in revenueData" :key="index" class="chart-bar-item">
+              <div class="bar-wrapper">
+                <div class="bar" :style="{ height: (data.value / maxRevenue * 100) + '%', background: data.color }"></div>
+              </div>
+              <div class="bar-label">{{ data.month }}</div>
+              <div class="bar-value">¥{{ formatNumber(data.value) }}</div>
+            </div>
+          </div>
+        </div>
+        <div class="chart-stats">
+          <span>平均: ¥{{ formatNumber(avgRevenue) }}</span>
+          <span>最高: ¥{{ formatNumber(maxRevenue) }}</span>
+          <span>最低: ¥{{ formatNumber(minRevenue) }}</span>
+        </div>
+      </div>
+
+      <!-- Regional Distribution -->
+      <div class="chart-card">
+        <div class="chart-header">
+          <h4><i class="fas fa-globe"></i> 区域分布</h4>
+          <button class="chart-btn" @click="showChartDetail('region')">
+            <i class="fas fa-expand"></i>
+          </button>
+        </div>
+        <div class="chart-container">
+          <div class="pie-chart">
+            <div class="pie-item" v-for="region in regionData" :key="region.name" 
+                 :style="{ background: region.color }" 
+                 :title="region.name + ': ' + region.percentage + '%'">
+            </div>
+          </div>
+          <div class="legend">
+            <div v-for="region in regionData" :key="region.name" class="legend-item">
+              <span class="legend-color" :style="{ background: region.color }"></span>
+              <span class="legend-label">{{ region.name }}</span>
+              <span class="legend-value">{{ region.percentage }}% (¥{{ formatNumber(region.value) }})</span>
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <!-- Channel Performance -->
+      <div class="chart-card">
+        <div class="chart-header">
+          <h4><i class="fas fa-bullhorn"></i> 渠道表现</h4>
+          <button class="chart-btn" @click="showChartDetail('channel')">
+            <i class="fas fa-expand"></i>
+          </button>
         </div>
-        <div class="market-chart">
-          <div class="chart-bar" style="height: 45%;" data-label="1月"><span class="bar-value">¥1.2M</span></div>
-          <div class="chart-bar" style="height: 62%;" data-label="2月"><span class="bar-value">¥1.8M</span></div>
-          <div class="chart-bar" style="height: 58%;" data-label="3月"><span class="bar-value">¥1.6M</span></div>
-          <div class="chart-bar" style="height: 78%;" data-label="4月"><span class="bar-value">¥2.4M</span></div>
-          <div class="chart-bar" style="height: 85%;" data-label="5月"><span class="bar-value">¥2.8M</span></div>
-          <div class="chart-bar" style="height: 92%;" data-label="6月"><span class="bar-value">¥3.2M</span></div>
+        <div class="channel-metrics">
+          <div v-for="channel in channelData" :key="channel.name" class="channel-item">
+            <div class="channel-header">
+              <span class="channel-name">
+                <i :class="channel.icon"></i> {{ channel.name }}
+              </span>
+              <span class="channel-badge">{{ channel.percentage }}%</span>
+            </div>
+            <div class="channel-bar">
+              <div class="bar-fill" :style="{ width: channel.percentage + '%', background: channel.color }"></div>
+            </div>
+            <div class="channel-stats">
+              <span>发送: {{ channel.sent }}</span>
+              <span>打开: {{ channel.opened }}%</span>
+              <span>回复: {{ channel.replied }}%</span>
+              <span>转化: {{ channel.conversion }}%</span>
+            </div>
+          </div>
         </div>
       </div>
 
-      <div class="market-card">
-        <div class="market-card-header">
-          <div class="market-card-title">🌍 区域分布</div>
+      <!-- Product Performance -->
+      <div class="chart-card">
+        <div class="chart-header">
+          <h4><i class="fas fa-boxes"></i> 产品销售排行</h4>
+          <button class="chart-btn" @click="showChartDetail('product')">
+            <i class="fas fa-expand"></i>
+          </button>
         </div>
-        <div class="market-chart">
-          <div class="chart-bar" style="height: 70%; background: var(--success);" data-label="中东"><span class="bar-value">45%</span></div>
-          <div class="chart-bar" style="height: 50%; background: var(--secondary);" data-label="欧洲"><span class="bar-value">28%</span></div>
-          <div class="chart-bar" style="height: 35%; background: var(--accent);" data-label="北美"><span class="bar-value">15%</span></div>
-          <div class="chart-bar" style="height: 25%; background: var(--warning);" data-label="东南亚"><span class="bar-value">12%</span></div>
+        <div class="product-ranking">
+          <div v-for="(product, index) in topProducts" :key="index" class="product-item">
+            <div class="rank-badge">{{ index + 1 }}</div>
+            <div class="product-info">
+              <div class="product-name">{{ product.name }}</div>
+              <div class="product-meta">
+                <span>销量: {{ product.quantity }}</span>
+                <span>金额: ¥{{ formatNumber(product.revenue) }}</span>
+              </div>
+            </div>
+            <div class="product-bar">
+              <div class="bar-fill" :style="{ width: (product.revenue / topProducts[0].revenue * 100) + '%' }"></div>
+            </div>
+            <div class="product-value">¥{{ formatNumber(product.revenue) }}</div>
+          </div>
+        </div>
+      </div>
+
+      <!-- Customer Cohort Analysis -->
+      <div class="chart-card">
+        <div class="chart-header">
+          <h4><i class="fas fa-users"></i> 客户群体分析</h4>
+          <button class="chart-btn" @click="showChartDetail('cohort')">
+            <i class="fas fa-expand"></i>
+          </button>
+        </div>
+        <div class="cohort-table">
+          <div class="cohort-header">
+            <span class="cohort-col">获取月份</span>
+            <span class="cohort-col" v-for="month in 6" :key="month">第{{ month }}月</span>
+          </div>
+          <div v-for="cohort in cohortData" :key="cohort.month" class="cohort-row">
+            <span class="cohort-col">{{ cohort.month }}</span>
+            <span v-for="(retention, index) in cohort.retention" :key="index" 
+                  class="cohort-col retention-cell"
+                  :style="{ background: getRetentionColor(retention) }">
+              {{ retention }}%
+            </span>
+          </div>
+        </div>
+      </div>
+
+      <!-- Sales Funnel -->
+      <div class="chart-card">
+        <div class="chart-header">
+          <h4><i class="fas fa-filter"></i> 销售漏斗</h4>
+          <button class="chart-btn" @click="showChartDetail('funnel')">
+            <i class="fas fa-expand"></i>
+          </button>
+        </div>
+        <div class="funnel-chart">
+          <div v-for="(stage, index) in funnelData" :key="index" class="funnel-stage">
+            <div class="funnel-bar" :style="{ width: stage.percentage + '%' }">
+              <span class="funnel-label">{{ stage.name }}</span>
+              <span class="funnel-value">{{ stage.count }} ({{ stage.percentage }}%)</span>
+            </div>
+            <div class="funnel-conversion" v-if="index < funnelData.length - 1">
+              <i class="fas fa-arrow-down"></i>
+              <span>{{ funnelData[index + 1].conversionRate }}%</span>
+            </div>
+          </div>
         </div>
       </div>
     </div>
 
-    <!-- More Insights -->
-    <div style="margin-top: 24px;">
-      <h3 style="font-size: 16px; margin-bottom: 16px;">💡 AI 洞察建议</h3>
-      <div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px;">
-        <div class="insight-card" style="border: 1px solid var(--border); border-radius: 12px; padding: 16px;">
-          <div class="insight-header" style="margin-bottom: 12px;">
-            <i class="fas fa-lightbulb" style="color: var(--success);"></i> 增长机会
+    <!-- Insights & Recommendations -->
+    <div class="insights-section">
+      <div class="section-header">
+        <h4><i class="fas fa-lightbulb"></i> AI 洞察与建议</h4>
+        <button class="btn btn-secondary btn-sm" @click="refreshInsights">
+          <i class="fas fa-sync"></i> 刷新
+        </button>
+      </div>
+      <div class="insights-grid">
+        <div v-for="insight in insights" :key="insight.id" class="insight-card" :class="insight.type">
+          <div class="insight-header">
+            <i :class="insight.icon"></i>
+            <span class="insight-title">{{ insight.title }}</span>
+            <span class="insight-badge" :class="insight.type">{{ insight.type }}</span>
           </div>
-          <div style="font-size: 13px; margin-bottom: 8px; font-weight: 600;">中东市场表现突出</div>
-          <div style="font-size: 12px; color: var(--text-secondary);">本周中东订单增长23%,建议加大营销投入。</div>
+          <div class="insight-content">
+            <div class="insight-main">{{ insight.main }}</div>
+            <div class="insight-detail">{{ insight.detail }}</div>
+          </div>
+          <div class="insight-action">
+            <button class="btn btn-sm btn-outline" @click="handleInsight(insight)">
+              <i class="fas fa-arrow-right"></i> 查看详情
+            </button>
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <!-- Comparison Modal -->
+    <div v-if="showComparisonModal" class="modal-overlay" @click.self="showComparisonModal = false">
+      <div class="modal comparison-modal">
+        <div class="modal-header">
+          <div class="modal-title"><i class="fas fa-chart-bar"></i> 对比分析</div>
+          <button class="modal-close" @click="showComparisonModal = false"><i class="fas fa-times"></i></button>
         </div>
-        <div class="insight-card" style="border: 1px solid var(--border); border-radius: 12px; padding: 16px; background: rgba(245, 158, 11, 0.05);">
-          <div class="insight-header" style="margin-bottom: 12px; color: var(--warning);">
-            <i class="fas fa-exclamation-triangle"></i> 需要关注
+        <div class="modal-body">
+          <div class="comparison-controls">
+            <div class="control-group">
+              <label>对比周期</label>
+              <select class="form-select" v-model="comparisonPeriod">
+                <option value="month">本月 vs 上月</option>
+                <option value="quarter">本季度 vs 上季度</option>
+                <option value="year">本年 vs 去年</option>
+              </select>
+            </div>
+            <div class="control-group">
+              <label>对比指标</label>
+              <select class="form-select" v-model="comparisonMetric">
+                <option value="revenue">营收</option>
+                <option value="orders">订单数</option>
+                <option value="customers">客户数</option>
+                <option value="conversion">转化率</option>
+              </select>
+            </div>
           </div>
-          <div style="font-size: 13px; margin-bottom: 8px; font-weight: 600;">欧洲转化率下降</div>
-          <div style="font-size: 12px; color: var(--text-secondary);">欧洲转化率下降15%,主要原因是交期延长。</div>
+          <div class="comparison-results">
+            <div class="comparison-item">
+              <div class="comparison-label">当前周期</div>
+              <div class="comparison-value current">¥{{ formatNumber(currentValue) }}</div>
+            </div>
+            <div class="comparison-item">
+              <div class="comparison-label">对比周期</div>
+              <div class="comparison-value previous">¥{{ formatNumber(previousValue) }}</div>
+            </div>
+            <div class="comparison-item highlight">
+              <div class="comparison-label">增长</div>
+              <div class="comparison-value" :class="{ up: comparisonGrowth > 0, down: comparisonGrowth < 0 }">
+                {{ comparisonGrowth > 0 ? '+' : '' }}{{ comparisonGrowth }}%
+              </div>
+            </div>
+          </div>
+          <div class="comparison-chart">
+            <div class="chart-bars">
+              <div class="chart-bar-item">
+                <div class="bar-wrapper">
+                  <div class="bar current" :style="{ height: (currentValue / Math.max(currentValue, previousValue) * 100) + '%' }"></div>
+                </div>
+                <div class="bar-label">当前</div>
+              </div>
+              <div class="chart-bar-item">
+                <div class="bar-wrapper">
+                  <div class="bar previous" :style="{ height: (previousValue / Math.max(currentValue, previousValue) * 100) + '%' }"></div>
+                </div>
+                <div class="bar-label">对比</div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="modal-footer">
+          <button class="btn btn-secondary" @click="showComparisonModal = false">关闭</button>
+          <button class="btn btn-primary" @click="exportComparison">
+            <i class="fas fa-download"></i> 导出对比报告
+          </button>
+        </div>
+      </div>
+    </div>
+
+    <!-- Detail Modal -->
+    <div v-if="showDetailModal" class="modal-overlay" @click.self="showDetailModal = false">
+      <div class="modal detail-modal">
+        <div class="modal-header">
+          <div class="modal-title"><i class="fas fa-sliders-h"></i> 自定义仪表板</div>
+          <button class="modal-close" @click="showDetailModal = false"><i class="fas fa-times"></i></button>
         </div>
-        <div class="insight-card" style="border: 1px solid var(--border); border-radius: 12px; padding: 16px;">
-          <div class="insight-header" style="margin-bottom: 12px; color: var(--primary);">
-            <i class="fas fa-chart-pie"></i> 转化分析
+        <div class="modal-body">
+          <div class="dashboard-settings">
+            <h5>选择要显示的指标</h5>
+            <div class="metrics-grid">
+              <label v-for="metric in availableMetrics" :key="metric.id" class="metric-checkbox">
+                <input type="checkbox" v-model="selectedMetrics" :value="metric.id">
+                <span class="checkmark"></span>
+                <span class="metric-label">{{ metric.name }}</span>
+              </label>
+            </div>
+            <h5 style="margin-top: 20px;">选择要显示的图表</h5>
+            <div class="charts-grid">
+              <label v-for="chart in availableCharts" :key="chart.id" class="chart-checkbox">
+                <input type="checkbox" v-model="selectedCharts" :value="chart.id">
+                <span class="checkmark"></span>
+                <span class="chart-label">{{ chart.name }}</span>
+              </label>
+            </div>
           </div>
-          <div style="font-size: 13px; margin-bottom: 8px; font-weight: 600;">邮件打开率提升</div>
-          <div style="font-size: 12px; color: var(--text-secondary);">优化发送时间后,邮件打开率提升35%。</div>
+        </div>
+        <div class="modal-footer">
+          <button class="btn btn-secondary" @click="resetDashboard">重置</button>
+          <button class="btn btn-secondary" @click="showDetailModal = false">取消</button>
+          <button class="btn btn-primary" @click="saveDashboard">保存设置</button>
         </div>
       </div>
     </div>
+
+    <!-- Toast -->
+    <transition name="toast">
+      <div v-if="showToast" class="toast" :class="toastType">
+        <i :class="toastType === 'success' ? 'fas fa-check-circle' : 'fas fa-info-circle'"></i>
+        {{ toastMessage }}
+      </div>
+    </transition>
   </div>
 </template>
 
 <script setup>
+import { ref, computed } from 'vue'
+
+const selectedPeriod = ref('month')
+const customStartDate = ref('')
+const customEndDate = ref('')
+const chartType = ref('bar')
+const showComparisonModal = ref(false)
+const showDetailModal = ref(false)
+const showToast = ref(false)
+const toastMessage = ref('')
+const toastType = ref('success')
+
+// Comparison
+const comparisonPeriod = ref('month')
+const comparisonMetric = ref('revenue')
+
+// Dashboard customization
+const selectedMetrics = ref(['revenue', 'orders', 'customers', 'conversion', 'aov', 'roi'])
+const selectedCharts = ref(['revenue', 'region', 'channel', 'product', 'cohort', 'funnel'])
+
+// KPI Data
+const totalRevenue = 3200000
+const lastPeriodRevenue = 2600000
+const revenueGrowth = 23
+const yoyGrowth = 35
+const totalOrders = 156
+const completedOrders = 89
+const activeOrders = 67
+const newCustomers = 89
+const newCustomersCount = 34
+const repeatCustomers = 55
+const conversionRate = 68
+const emailConversion = 45
+const whatsappConversion = 72
+const avgOrderValue = 38000
+const maxOrderValue = 520000
+const minOrderValue = 8000
+const roi = 285
+const marketingCost = 450000
+const profit = 1280000
+
+// Revenue Data
+const revenueData = ref([
+  { month: '1月', value: 1200000, color: '#6366F1' },
+  { month: '2月', value: 1800000, color: '#6366F1' },
+  { month: '3月', value: 1600000, color: '#6366F1' },
+  { month: '4月', value: 2400000, color: '#6366F1' },
+  { month: '5月', value: 2800000, color: '#6366F1' },
+  { month: '6月', value: 3200000, color: '#10B981' }
+])
+
+const maxRevenue = computed(() => Math.max(...revenueData.value.map(d => d.value)))
+const minRevenue = computed(() => Math.min(...revenueData.value.map(d => d.value)))
+const avgRevenue = computed(() => Math.round(revenueData.value.reduce((sum, d) => sum + d.value, 0) / revenueData.value.length))
+
+// Regional Data
+const regionData = ref([
+  { name: '中东', percentage: 45, value: 1440000, color: '#10B981' },
+  { name: '欧洲', percentage: 28, value: 896000, color: '#8B5CF6' },
+  { name: '北美', percentage: 15, value: 480000, color: '#06B6D4' },
+  { name: '东南亚', percentage: 12, value: 384000, color: '#F59E0B' }
+])
+
+// Channel Data
+const channelData = ref([
+  { name: '邮件营销', icon: 'fas fa-envelope', percentage: 45, color: '#6366F1', sent: 12847, opened: 45, replied: 12, conversion: 8 },
+  { name: 'WhatsApp', icon: 'fab fa-whatsapp', percentage: 28, color: '#25D366', sent: 3456, opened: 78, replied: 35, conversion: 18 },
+  { name: 'LinkedIn', icon: 'fab fa-linkedin', percentage: 18, color: '#0A66C2', sent: 2345, opened: 52, replied: 22, conversion: 12 },
+  { name: '微信企业号', icon: 'fab fa-weixin', percentage: 9, color: '#07C160', sent: 1234, opened: 65, replied: 28, conversion: 15 }
+])
+
+// Top Products
+const topProducts = ref([
+  { name: 'NVMe SSD 2TB', quantity: 1250, revenue: 3500000 },
+  { name: 'SATA SSD 2TB', quantity: 890, revenue: 2310000 },
+  { name: '企业级SSD 4TB', quantity: 456, revenue: 5472000 },
+  { name: 'NVMe SSD 1TB', quantity: 2340, revenue: 3744000 },
+  { name: 'SAS SSD 2TB', quantity: 234, revenue: 936000 }
+])
+
+// Cohort Data
+const cohortData = ref([
+  { month: '1月', retention: [100, 85, 72, 65, 58, 52] },
+  { month: '2月', retention: [100, 88, 78, 70, 64] },
+  { month: '3月', retention: [100, 82, 75, 68] },
+  { month: '4月', retention: [100, 86, 79] },
+  { month: '5月', retention: [100, 84] },
+  { month: '6月', retention: [100] }
+])
+
+// Funnel Data
+const funnelData = ref([
+  { name: '潜客', count: 12847, percentage: 100, conversionRate: 28 },
+  { name: '商机', count: 3597, percentage: 28, conversionRate: 45 },
+  { name: '报价', count: 1619, percentage: 12.6, conversionRate: 68 },
+  { name: '成交', count: 1100, percentage: 8.6, conversionRate: null }
+])
+
+// Insights
+const insights = ref([
+  { id: 1, type: 'opportunity', icon: 'fas fa-lightbulb', title: '增长机会', main: '中东市场表现突出', detail: '本周中东订单增长23%,建议加大营销投入。', badge: '高优先' },
+  { id: 2, type: 'warning', icon: 'fas fa-exclamation-triangle', title: '需要关注', main: '欧洲转化率下降', detail: '欧洲转化率下降15%,主要原因是交期延长。', badge: '中优先' },
+  { id: 3, type: 'success', icon: 'fas fa-chart-line', title: '优化成果', main: '邮件打开率提升', detail: '优化发送时间后,邮件打开率提升35%。', badge: '已完成' },
+  { id: 4, type: 'info', icon: 'fas fa-users', title: '客户洞察', main: '高价值客户识别', detail: '识别出50个高价值客户,平均客单价¥85K。', badge: '新发现' },
+  { id: 5, type: 'warning', icon: 'fas fa-clock', title: '交期风险', main: '交期延迟预警', detail: '当前生产周期延长3天,建议提前通知客户。', badge: '风险' },
+  { id: 6, type: 'success', icon: 'fas fa-rocket', title: '新机遇', main: '产品创新机会', detail: '新产品NVMe SSD 4TB销售势头强劲,增长45%。', badge: '推荐' }
+])
+
+// Comparison Data
+const currentValue = ref(3200000)
+const previousValue = ref(2600000)
+const comparisonGrowth = computed(() => Math.round((currentValue.value - previousValue.value) / previousValue.value * 100))
+
+// Available metrics and charts
+const availableMetrics = ref([
+  { id: 'revenue', name: '营收' },
+  { id: 'orders', name: '订单数' },
+  { id: 'customers', name: '成交客户' },
+  { id: 'conversion', name: '转化率' },
+  { id: 'aov', name: '客单价' },
+  { id: 'roi', name: 'ROI' }
+])
+
+const availableCharts = ref([
+  { id: 'revenue', name: '销售趋势' },
+  { id: 'region', name: '区域分布' },
+  { id: 'channel', name: '渠道表现' },
+  { id: 'product', name: '产品排行' },
+  { id: 'cohort', name: '客户群体' },
+  { id: 'funnel', name: '销售漏斗' }
+])
+
+// Methods
+const formatNumber = (num) => {
+  if (num >= 1000000) return (num / 1000000).toFixed(1) + 'M'
+  if (num >= 1000) return (num / 1000).toFixed(1) + 'K'
+  return num.toLocaleString()
+}
+
+const updatePeriod = () => {
+  toast('已切换时间周期', 'success')
+}
+
+const filterByMetric = (metric) => {
+  toast(`查看${metric}详情`, 'info')
+}
+
+const showChartDetail = (chart) => {
+  toast(`展开${chart}图表`, 'info')
+}
+
+const refreshInsights = () => {
+  toast('正在刷新洞察数据...', 'info')
+  setTimeout(() => {
+    toast('洞察数据已更新', 'success')
+  }, 1500)
+}
+
+const handleInsight = (insight) => {
+  toast(`处理: ${insight.title}`, 'info')
+}
+
+const exportReport = () => {
+  toast('报告导出中...', 'success')
+}
+
+const exportComparison = () => {
+  toast('对比报告导出中...', 'success')
+}
+
+const getRetentionColor = (retention) => {
+  if (retention >= 80) return 'rgba(16, 185, 129, 0.2)'
+  if (retention >= 60) return 'rgba(99, 102, 241, 0.2)'
+  if (retention >= 40) return 'rgba(245, 158, 11, 0.2)'
+  return 'rgba(239, 68, 68, 0.2)'
+}
+
+const resetDashboard = () => {
+  selectedMetrics.value = ['revenue', 'orders', 'customers', 'conversion', 'aov', 'roi']
+  selectedCharts.value = ['revenue', 'region', 'channel', 'product', 'cohort', 'funnel']
+  toast('仪表板已重置', 'success')
+}
+
+const saveDashboard = () => {
+  showDetailModal.value = false
+  toast('仪表板设置已保存', 'success')
+}
+
+const toast = (message, type = 'success') => {
+  toastMessage.value = message
+  toastType.value = type
+  showToast.value = true
+  setTimeout(() => { showToast.value = false }, 3000)
+}
 </script>
+
+<style scoped>
+.analysis-page { flex: 1; display: flex; flex-direction: column; padding: 24px; overflow-y: auto; background: var(--bg-dark); }
+.analysis-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 24px; }
+.header-left { display: flex; flex-direction: column; gap: 4px; }
+.data-title { font-size: 20px; font-weight: 600; }
+.header-desc { font-size: 13px; color: var(--text-secondary); }
+.header-actions { display: flex; gap: 8px; align-items: center; }
+.date-range-picker { display: flex; align-items: center; gap: 8px; }
+.date-inputs { display: flex; align-items: center; gap: 8px; }
+.date-inputs input { width: 120px; padding: 8px 12px; background: var(--bg-hover); border: 1px solid var(--border); border-radius: 6px; color: var(--text-primary); font-size: 12px; }
+.form-select { padding: 8px 12px; background: var(--bg-hover); border: 1px solid var(--border); border-radius: 6px; color: var(--text-primary); font-size: 13px; }
+
+/* KPI Cards */
+.kpi-row { display: grid; grid-template-columns: repeat(6, 1fr); gap: 12px; margin-bottom: 24px; }
+.kpi-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px; padding: 16px; cursor: pointer; transition: all 0.2s; }
+.kpi-card:hover { border-color: var(--primary); transform: translateY(-2px); }
+.kpi-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; }
+.kpi-label { font-size: 12px; color: var(--text-secondary); }
+.kpi-trend { font-size: 11px; padding: 2px 8px; border-radius: 10px; display: flex; align-items: center; gap: 4px; }
+.kpi-trend.up { background: rgba(16, 185, 129, 0.2); color: var(--success); }
+.kpi-trend.down { background: rgba(239, 68, 68, 0.2); color: #EF4444; }
+.kpi-value { font-size: 22px; font-weight: 700; margin-bottom: 8px; }
+.kpi-meta { display: flex; flex-direction: column; gap: 4px; font-size: 10px; color: var(--text-muted); }
+
+/* Charts Section */
+.charts-section { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; margin-bottom: 24px; }
+.chart-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px; padding: 20px; }
+.chart-card:nth-child(1), .chart-card:nth-child(2) { grid-column: span 1; }
+.chart-card:nth-child(3), .chart-card:nth-child(4) { grid-column: span 1; }
+.chart-card:nth-child(5), .chart-card:nth-child(6) { grid-column: span 1; }
+.chart-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; }
+.chart-header h4 { font-size: 14px; font-weight: 600; margin: 0; display: flex; align-items: center; gap: 8px; }
+.chart-header h4 i { color: var(--primary); }
+.chart-controls { display: flex; gap: 4px; }
+.chart-btn { width: 28px; height: 28px; border-radius: 6px; background: var(--bg-hover); border: 1px solid var(--border); color: var(--text-secondary); cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 12px; transition: all 0.2s; }
+.chart-btn:hover, .chart-btn.active { background: var(--primary); border-color: var(--primary); color: white; }
+
+/* Chart Container */
+.chart-container { margin-bottom: 12px; }
+.chart-bars { display: flex; align-items: flex-end; justify-content: space-around; height: 200px; gap: 8px; }
+.chart-bar-item { display: flex; flex-direction: column; align-items: center; flex: 1; }
+.bar-wrapper { width: 100%; height: 160px; background: var(--bg-hover); border-radius: 8px 8px 0 0; display: flex; align-items: flex-end; justify-content: center; }
+.bar { width: 80%; border-radius: 8px 8px 0 0; background: var(--primary); transition: all 0.3s; }
+.bar-label { font-size: 11px; color: var(--text-muted); margin-top: 8px; }
+.bar-value { font-size: 10px; color: var(--text-secondary); }
+.chart-stats { display: flex; gap: 16px; font-size: 11px; color: var(--text-muted); padding-top: 12px; border-top: 1px solid var(--border); }
+
+/* Pie Chart */
+.pie-chart { width: 120px; height: 120px; border-radius: 50%; display: flex; flex-wrap: wrap; overflow: hidden; margin: 0 auto 16px; }
+.pie-item { flex: 1; }
+.legend { display: flex; flex-direction: column; gap: 8px; }
+.legend-item { display: flex; align-items: center; gap: 8px; font-size: 12px; }
+.legend-color { width: 12px; height: 12px; border-radius: 3px; }
+.legend-label { flex: 1; }
+.legend-value { font-size: 11px; color: var(--text-muted); }
+
+/* Channel Metrics */
+.channel-metrics { display: flex; flex-direction: column; gap: 12px; }
+.channel-item { padding: 12px; background: var(--bg-hover); border-radius: 10px; }
+.channel-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
+.channel-name { font-size: 13px; font-weight: 500; display: flex; align-items: center; gap: 6px; }
+.channel-name i { font-size: 14px; }
+.channel-badge { font-size: 11px; padding: 2px 8px; background: var(--bg-card); border-radius: 10px; }
+.channel-bar { height: 6px; background: var(--bg-dark); border-radius: 3px; margin-bottom: 8px; overflow: hidden; }
+.bar-fill { height: 100%; border-radius: 3px; }
+.channel-stats { display: flex; gap: 12px; font-size: 10px; color: var(--text-muted); }
+
+/* Product Ranking */
+.product-ranking { display: flex; flex-direction: column; gap: 10px; }
+.product-item { display: flex; align-items: center; gap: 12px; padding: 10px; background: var(--bg-hover); border-radius: 10px; }
+.rank-badge { width: 28px; height: 28px; border-radius: 50%; background: var(--primary); color: white; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 600; }
+.product-info { flex: 1; min-width: 0; }
+.product-name { font-size: 13px; font-weight: 500; }
+.product-meta { font-size: 10px; color: var(--text-muted); margin-top: 2px; }
+.product-bar { flex: 1; height: 4px; background: var(--bg-dark); border-radius: 2px; margin: 0 12px; }
+.product-value { font-size: 13px; font-weight: 600; min-width: 80px; text-align: right; }
+
+/* Cohort Table */
+.cohort-table { background: var(--bg-hover); border-radius: 10px; overflow: hidden; }
+.cohort-header, .cohort-row { display: grid; grid-template-columns: 80px repeat(6, 1fr); gap: 1px; background: var(--border); padding: 1px; }
+.cohort-col { background: var(--bg-hover); padding: 10px; font-size: 11px; text-align: center; }
+.cohort-header .cohort-col { background: var(--bg-dark); font-weight: 600; color: var(--text-muted); }
+.retention-cell { font-weight: 500; }
+
+/* Funnel Chart */
+.funnel-chart { display: flex; flex-direction: column; gap: 12px; }
+.funnel-stage { }
+.funnel-bar { background: var(--primary); border-radius: 8px; padding: 12px 16px; color: white; display: flex; justify-content: space-between; align-items: center; }
+.funnel-label { font-size: 13px; font-weight: 500; }
+.funnel-value { font-size: 12px; opacity: 0.9; }
+.funnel-conversion { text-align: center; padding: 8px 0; font-size: 11px; color: var(--text-muted); }
+
+/* Insights Section */
+.insights-section { margin-bottom: 24px; }
+.section-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; }
+.section-header h4 { font-size: 16px; font-weight: 600; margin: 0; display: flex; align-items: center; gap: 8px; }
+.section-header h4 i { color: var(--primary); }
+.insights-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
+.insight-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px; padding: 16px; transition: all 0.2s; }
+.insight-card:hover { border-color: var(--primary); transform: translateY(-2px); }
+.insight-card.opportunity { border-left: 4px solid #10B981; }
+.insight-card.warning { border-left: 4px solid #F59E0B; }
+.insight-card.success { border-left: 4px solid #10B981; }
+.insight-card.info { border-left: 4px solid #6366F1; }
+.insight-header { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; }
+.insight-header i { font-size: 16px; }
+.insight-title { font-size: 13px; font-weight: 600; }
+.insight-badge { font-size: 10px; padding: 2px 8px; border-radius: 10px; margin-left: auto; }
+.insight-badge.opportunity { background: rgba(16, 185, 129, 0.2); color: #10B981; }
+.insight-badge.warning { background: rgba(245, 158, 11, 0.2); color: #F59E0B; }
+.insight-badge.success { background: rgba(16, 185, 129, 0.2); color: #10B981; }
+.insight-badge.info { background: rgba(99, 102, 241, 0.2); color: #6366F1; }
+.insight-content { margin-bottom: 12px; }
+.insight-main { font-size: 13px; font-weight: 500; margin-bottom: 4px; }
+.insight-detail { font-size: 12px; color: var(--text-secondary); line-height: 1.5; }
+.insight-action { display: flex; }
+
+/* Modal */
+.modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.7); display: flex; align-items: center; justify-content: center; z-index: 1000; padding: 20px; }
+.modal { background: var(--bg-card); border-radius: 16px; width: 100%; max-width: 600px; max-height: 90vh; overflow: hidden; display: flex; flex-direction: column; }
+.comparison-modal { max-width: 500px; }
+.detail-modal { max-width: 700px; }
+.modal-header { display: flex; justify-content: space-between; align-items: center; padding: 20px; border-bottom: 1px solid var(--border); }
+.modal-title { font-size: 16px; font-weight: 600; display: flex; align-items: center; gap: 8px; }
+.modal-close { width: 32px; height: 32px; background: var(--bg-hover); border: none; border-radius: 8px; color: var(--text-secondary); cursor: pointer; display: flex; align-items: center; justify-content: center; }
+.modal-body { flex: 1; overflow-y: auto; padding: 20px; }
+.modal-footer { display: flex; justify-content: flex-end; gap: 12px; padding: 20px; border-top: 1px solid var(--border); }
+
+/* Comparison */
+.comparison-controls { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 20px; }
+.control-group { display: flex; flex-direction: column; gap: 8px; }
+.control-group label { font-size: 12px; color: var(--text-secondary); }
+.comparison-results { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 20px; }
+.comparison-item { padding: 16px; background: var(--bg-hover); border-radius: 10px; text-align: center; }
+.comparison-label { font-size: 11px; color: var(--text-muted); margin-bottom: 8px; }
+.comparison-value { font-size: 20px; font-weight: 700; }
+.comparison-value.current { color: var(--primary); }
+.comparison-value.previous { color: var(--text-secondary); }
+.comparison-value.up { color: var(--success); }
+.comparison-value.down { color: #EF4444; }
+.comparison-item.highlight { background: rgba(99, 102, 241, 0.1); }
+.comparison-chart { margin-top: 20px; }
+.chart-bars { display: flex; align-items: flex-end; justify-content: center; gap: 40px; height: 150px; }
+.chart-bar-item { display: flex; flex-direction: column; align-items: center; }
+.bar-wrapper { width: 60px; height: 120px; background: var(--bg-hover); border-radius: 8px 8px 0 0; display: flex; align-items: flex-end; justify-content: center; }
+.bar.current { background: var(--primary); }
+.bar.previous { background: var(--text-muted); }
+
+/* Dashboard Settings */
+.dashboard-settings { }
+.dashboard-settings h5 { font-size: 13px; font-weight: 600; margin-bottom: 12px; }
+.metrics-grid, .charts-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
+.metric-checkbox, .chart-checkbox { display: flex; align-items: center; gap: 8px; cursor: pointer; font-size: 12px; }
+.metric-checkbox input, .chart-checkbox input { width: 16px; height: 16px; }
+.checkmark { width: 16px; height: 16px; border: 1px solid var(--border); border-radius: 4px; display: flex; align-items: center; justify-content: center; }
+.metric-checkbox input:checked ~ .checkmark, .chart-checkbox input:checked ~ .checkmark { background: var(--primary); border-color: var(--primary); color: white; }
+
+/* Toast */
+.toast { position: fixed; bottom: 24px; right: 24px; padding: 12px 20px; background: var(--bg-card); border: 1px solid var(--border); border-radius: 10px; display: flex; align-items: center; gap: 10px; font-size: 13px; box-shadow: 0 4px 20px rgba(0,0,0,0.3); z-index: 2000; }
+.toast.success { border-color: var(--success); }
+.toast.success i { color: var(--success); }
+.toast-enter-active, .toast-leave-active { transition: all 0.3s ease; }
+.toast-enter-from, .toast-leave-to { opacity: 0; transform: translateY(20px); }
+
+/* Responsive */
+@media (max-width: 1400px) {
+  .kpi-row { grid-template-columns: repeat(3, 1fr); }
+  .charts-section { grid-template-columns: 1fr; }
+  .insights-grid { grid-template-columns: repeat(2, 1fr); }
+}
+
+@media (max-width: 992px) {
+  .kpi-row { grid-template-columns: repeat(2, 1fr); }
+  .insights-grid { grid-template-columns: 1fr; }
+}
+</style>

+ 1595 - 62
ui/smarttrade-platform/src/views/MarketView.vue

@@ -1,97 +1,1630 @@
 <template>
-  <div class="data-page">
-    <div class="data-header">
-      <div class="data-title">🌍 市场情报</div>
-      <button class="btn btn-primary"><i class="fas fa-plus"></i> 添加监控</button>
+  <div class="market-page">
+    <!-- Header -->
+    <div class="market-header">
+      <div class="header-left">
+        <div class="data-title">🌍 市场情报</div>
+        <p class="header-desc">实时掌握市场动态,AI驱动的市场机会发现</p>
+      </div>
+      <div class="header-actions">
+        <button class="btn btn-secondary" @click="showMonitorModal = true">
+          <i class="fas fa-bell"></i> 监控设置
+        </button>
+        <button class="btn btn-secondary" @click="showTrendModal = true">
+          <i class="fas fa-chart-line"></i> 趋势分析
+        </button>
+        <button class="btn btn-secondary" @click="exportIntelligence">
+          <i class="fas fa-download"></i> 导出报告
+        </button>
+        <button class="btn btn-primary" @click="showAddMonitorModal = true">
+          <i class="fas fa-plus"></i> 添加监控
+        </button>
+      </div>
+    </div>
+
+    <!-- Quick Stats -->
+    <div class="stats-row">
+      <div class="stat-card" @click="filterByType('market')">
+        <div class="stat-icon blue"><i class="fas fa-globe"></i></div>
+        <div class="stat-content">
+          <h3>{{ activeMarkets }}</h3>
+          <p>活跃市场</p>
+        </div>
+        <div class="stat-trend up"><i class="fas fa-arrow-up"></i> 5个</div>
+      </div>
+      <div class="stat-card" @click="filterByType('competitor')">
+        <div class="stat-icon purple"><i class="fas fa-chess"></i></div>
+        <div class="stat-content">
+          <h3>{{ monitoredCompetitors }}</h3>
+          <p>竞品监控</p>
+        </div>
+        <div class="stat-badge">{{ newCompetitorNews }}</div>
+      </div>
+      <div class="stat-card" @click="filterByType('opportunity')">
+        <div class="stat-icon green"><i class="fas fa-lightbulb"></i></div>
+        <div class="stat-content">
+          <h3>{{ marketOpportunities.length }}</h3>
+          <p>市场机会</p>
+        </div>
+        <div class="stat-badge">{{ highPotentialCount }}</div>
+      </div>
+      <div class="stat-card" @click="filterByType('risk')">
+        <div class="stat-icon red"><i class="fas fa-exclamation-triangle"></i></div>
+        <div class="stat-content">
+          <h3>{{ marketRisks.length }}</h3>
+          <p>市场风险</p>
+        </div>
+        <div class="stat-badge danger">{{ criticalRisks }}</div>
+      </div>
+      <div class="stat-card" @click="filterByType('trend')">
+        <div class="stat-icon cyan"><i class="fas fa-wave-square"></i></div>
+        <div class="stat-content">
+          <h3>{{ trendingTopics.length }}</h3>
+          <p>热点话题</p>
+        </div>
+        <div class="stat-trend up"><i class="fas fa-fire"></i> 热</div>
+      </div>
+    </div>
+
+    <!-- Tabs & Filters -->
+    <div class="tabs-section">
+      <div class="tabs">
+        <div v-for="tab in tabs" :key="tab.key" 
+             class="tab-item" :class="{ active: activeTab === tab.key }"
+             @click="activeTab = tab.key">
+          {{ tab.label }}
+          <span class="tab-count">{{ tab.count }}</span>
+        </div>
+      </div>
+      <div class="filter-controls">
+        <input type="text" class="search-input" v-model="searchQuery" placeholder="搜索市场、竞品、话题...">
+        <select class="filter-select" v-model="filterRegion">
+          <option value="">全部地区</option>
+          <option value="middle-east">中东</option>
+          <option value="europe">欧洲</option>
+          <option value="asia">亚洲</option>
+          <option value="america">美洲</option>
+        </select>
+        <select class="filter-select" v-model="sortBy">
+          <option value="latest">最新</option>
+          <option value="hot">热度</option>
+          <option value="importance">重要性</option>
+        </select>
+      </div>
+    </div>
+
+    <!-- Content Sections -->
+    <div v-if="activeTab === 'overview'" class="content-section">
+      <!-- Market Overview Grid -->
+      <div class="overview-grid">
+        <!-- Hot Markets -->
+        <div class="card-section">
+          <div class="section-header">
+            <h4><i class="fas fa-fire"></i> 热门市场 TOP 5</h4>
+            <button class="btn-link" @click="showMarketDetail">查看全部</button>
+          </div>
+          <div class="market-list">
+            <div v-for="(market, index) in hotMarkets" :key="index" 
+                 class="market-item" @click="openMarketDetail(market)">
+              <div class="rank-badge" :class="{ gold: index === 0, silver: index === 1, bronze: index === 2 }">
+                {{ index + 1 }}
+              </div>
+              <div class="market-info">
+                <div class="market-name">{{ market.name }}</div>
+                <div class="market-meta">
+                  <span><i class="fas fa-chart-line"></i> {{ market.growth }}</span>
+                  <span><i class="fas fa-users"></i> {{ market.population }}</span>
+                </div>
+              </div>
+              <div class="market-score">
+                <div class="score-value">{{ market.score }}</div>
+                <div class="score-label">潜力指数</div>
+              </div>
+              <div class="market-indicators">
+                <span class="indicator" :class="market.trend">
+                  <i :class="market.trend === 'up' ? 'fas fa-arrow-up' : 'fas fa-arrow-down'"></i>
+                </span>
+              </div>
+            </div>
+          </div>
+        </div>
+
+        <!-- Competitor News -->
+        <div class="card-section">
+          <div class="section-header">
+            <h4><i class="fas fa-chess"></i> 竞品动态</h4>
+            <button class="btn-link" @click="showAllNews">查看全部</button>
+          </div>
+          <div class="news-list">
+            <div v-for="news in competitorNews.slice(0, 5)" :key="news.id" 
+                 class="news-item" :class="news.level"
+                 @click="openCompetitorNewsDetail(news)">
+              <div class="news-header">
+                <span class="news-title">{{ news.title }}</span>
+                <span class="news-level" :class="news.level">{{ getLevelLabel(news.level) }}</span>
+              </div>
+              <div class="news-content">
+                <div class="news-company">
+                  <i class="fas fa-building"></i> {{ news.company }}
+                </div>
+                <div class="news-description">{{ news.description }}</div>
+              </div>
+              <div class="news-footer">
+                <span class="news-time">{{ news.time }}</span>
+                <span class="news-impact">影响: {{ news.impact }}</span>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <!-- Market Opportunities -->
+      <div class="opportunities-section">
+        <div class="section-header">
+          <h4><i class="fas fa-lightbulb"></i> 市场机会</h4>
+          <div class="header-controls">
+            <select class="filter-select-sm" v-model="opportunityFilter">
+              <option value="">全部</option>
+              <option value="high">高潜力</option>
+              <option value="medium">中潜力</option>
+              <option value="low">低潜力</option>
+            </select>
+            <button class="btn-link" @click="showOpportunitiesDetail">查看详情</button>
+          </div>
+        </div>
+        <div class="opportunities-grid">
+          <div v-for="opp in filteredOpportunities" :key="opp.id" 
+               class="opportunity-card" :class="opp.potential"
+               @click="openOpportunityDetail(opp)">
+            <div class="opp-header">
+              <span class="opp-icon">{{ opp.icon }}</span>
+              <span class="opp-potential" :class="opp.potential">{{ opp.potential }}</span>
+            </div>
+            <div class="opp-title">{{ opp.market }}</div>
+            <div class="opp-product">{{ opp.product }}</div>
+            <div class="opp-insight">{{ opp.insight }}</div>
+            <div class="opp-metrics">
+              <span class="metric">
+                <i class="fas fa-chart-bar"></i> 市场规模: {{ opp.marketSize }}
+              </span>
+              <span class="metric">
+                <i class="fas fa-users"></i> 竞争: {{ opp.competition }}
+              </span>
+            </div>
+            <div class="opp-footer">
+              <span class="opp-score">评分: {{ opp.score }}/100</span>
+              <button class="btn btn-sm btn-outline" @click.stop="trackOpportunity(opp)">
+                <i class="fas fa-star"></i> 跟踪
+              </button>
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <!-- Market Risks -->
+      <div class="risks-section">
+        <div class="section-header">
+          <h4><i class="fas fa-exclamation-triangle"></i> 市场风险</h4>
+          <button class="btn-link" @click="showRisksDetail">查看全部</button>
+        </div>
+        <div class="risks-grid">
+          <div v-for="risk in marketRisks" :key="risk.id" 
+               class="risk-card" :class="risk.level"
+               @click="openMarketRiskDetail(risk)">
+            <div class="risk-header">
+              <span class="risk-title">{{ risk.title }}</span>
+              <span class="risk-level" :class="risk.level">{{ risk.level }}</span>
+            </div>
+            <div class="risk-description">{{ risk.description }}</div>
+            <div class="risk-impact">
+              <span class="impact-label">影响范围:</span>
+              <span class="impact-regions">{{ risk.affectedRegions }}</span>
+            </div>
+            <div class="risk-action">
+              <button class="btn btn-sm btn-outline" @click.stop="openMarketRiskDetail(risk)">
+                <i class="fas fa-arrow-right"></i> 查看详情
+              </button>
+            </div>
+          </div>
+        </div>
+      </div>
     </div>
 
-    <!-- Market Overview -->
-    <div class="market-grid">
-      <div class="market-card">
-        <div class="market-card-header">
-          <div class="market-card-title">🏆 热门市场 TOP 5</div>
+    <!-- Trending Topics -->
+    <div v-if="activeTab === 'trends'" class="content-section">
+      <div class="section-header">
+        <h4><i class="fas fa-wave-square"></i> 热点话题</h4>
+        <button class="btn btn-secondary btn-sm" @click="refreshTrends">
+          <i class="fas fa-sync"></i> 刷新
+        </button>
+      </div>
+      <div class="trends-grid">
+        <div v-for="topic in trendingTopics" :key="topic.id" 
+             class="trend-card" @click="openTrendDetail(topic)">
+          <div class="trend-header">
+            <span class="trend-tag">{{ topic.category }}</span>
+            <span class="trend-heat" :class="{ hot: topic.heat > 80, warm: topic.heat > 50 }">
+              <i class="fas fa-fire"></i> {{ topic.heat }}
+            </span>
+          </div>
+          <div class="trend-title">{{ topic.title }}</div>
+          <div class="trend-description">{{ topic.description }}</div>
+          <div class="trend-stats">
+            <span>提及: {{ topic.mentions }}</span>
+            <span>增长: {{ topic.growth }}%</span>
+            <span>相关产品: {{ topic.relatedProducts }}</span>
+          </div>
+          <div class="trend-sources">
+            <span v-for="source in topic.sources" :key="source" class="source-tag">{{ source }}</span>
+          </div>
         </div>
-        <div style="padding: 12px;">
-          <div v-for="(market, index) in hotMarkets" :key="index"
-               style="display: flex; align-items: center; gap: 12px; padding: 12px; background: var(--bg-hover); border-radius: 10px; margin-bottom: 8px;">
-            <span :style="{ fontWeight: 700, width: '24px', color: index === 0 ? 'var(--success)' : index === 1 ? 'var(--primary)' : 'var(--accent)' }">{{ index + 1 }}</span>
-            <div style="flex: 1;">
-              <div style="font-weight: 600;">{{ market.name }}</div>
-              <div style="font-size: 12px; color: var(--text-secondary);">{{ market.growth }}</div>
+      </div>
+    </div>
+
+    <!-- Monitored Items -->
+    <div v-if="activeTab === 'monitored'" class="content-section">
+      <div class="section-header">
+        <h4><i class="fas fa-bell"></i> 监控项目</h4>
+        <button class="btn btn-secondary btn-sm" @click="showMonitorModal = true">
+          <i class="fas fa-cog"></i> 管理监控
+        </button>
+      </div>
+      <div class="monitored-list">
+        <div v-for="item in monitoredItems" :key="item.id" 
+             class="monitored-item" :class="item.type">
+          <div class="item-header">
+            <span class="item-type" :class="item.type">{{ item.type }}</span>
+            <span class="item-name">{{ item.name }}</span>
+            <span class="item-status" :class="item.status">{{ item.status }}</span>
+          </div>
+          <div class="item-content">
+            <div class="item-description">{{ item.description }}</div>
+            <div class="item-metrics">
+              <span>最后更新: {{ item.lastUpdate }}</span>
+              <span>更新频率: {{ item.frequency }}</span>
+              <span>通知: {{ item.notifications }}</span>
+            </div>
+          </div>
+          <div class="item-actions">
+            <button class="btn btn-sm btn-outline" @click="editMonitor(item)">
+              <i class="fas fa-edit"></i> 编辑
+            </button>
+            <button class="btn btn-sm btn-outline" @click="removeMonitor(item)">
+              <i class="fas fa-trash"></i> 删除
+            </button>
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <!-- Intelligence Reports -->
+    <div v-if="activeTab === 'reports'" class="content-section">
+      <div class="section-header">
+        <h4><i class="fas fa-file-alt"></i> 情报报告</h4>
+        <button class="btn btn-secondary btn-sm" @click="generateReport">
+          <i class="fas fa-plus"></i> 生成报告
+        </button>
+      </div>
+      <div class="reports-list">
+        <div v-for="report in intelligenceReports" :key="report.id" 
+             class="report-item" @click="openReport(report)">
+          <div class="report-header">
+            <span class="report-title">{{ report.title }}</span>
+            <span class="report-date">{{ report.date }}</span>
+          </div>
+          <div class="report-content">
+            <div class="report-summary">{{ report.summary }}</div>
+            <div class="report-stats">
+              <span><i class="fas fa-chart-bar"></i> 数据点: {{ report.dataPoints }}</span>
+              <span><i class="fas fa-globe"></i> 覆盖地区: {{ report.regions }}</span>
+              <span><i class="fas fa-chess"></i> 竞品: {{ report.competitors }}</span>
+            </div>
+          </div>
+          <div class="report-actions">
+            <button class="btn btn-sm btn-outline" @click.stop="viewReport(report)">
+              <i class="fas fa-eye"></i> 查看
+            </button>
+            <button class="btn btn-sm btn-outline" @click.stop="downloadReport(report)">
+              <i class="fas fa-download"></i> 下载
+            </button>
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <!-- Add Monitor Modal -->
+    <div v-if="showAddMonitorModal" class="modal-overlay" @click.self="showAddMonitorModal = false">
+      <div class="modal add-monitor-modal">
+        <div class="modal-header">
+          <div class="modal-title"><i class="fas fa-plus-circle"></i> 添加监控</div>
+          <button class="modal-close" @click="showAddMonitorModal = false"><i class="fas fa-times"></i></button>
+        </div>
+        <div class="modal-body">
+          <div class="form-group">
+            <label class="form-label">监控类型 <span class="required">*</span></label>
+            <select class="form-select" v-model="newMonitor.type">
+              <option value="market">市场</option>
+              <option value="competitor">竞品</option>
+              <option value="product">产品</option>
+              <option value="keyword">关键词</option>
+              <option value="region">地区</option>
+            </select>
+          </div>
+          <div class="form-group">
+            <label class="form-label">监控对象 <span class="required">*</span></label>
+            <input type="text" class="form-input" v-model="newMonitor.target" placeholder="输入市场名称、竞品名称等">
+          </div>
+          <div class="form-group">
+            <label class="form-label">监控指标</label>
+            <div class="checkbox-group">
+              <label class="checkbox-item">
+                <input type="checkbox" v-model="newMonitor.metrics" value="price">
+                <span class="checkmark"></span>
+                <span>价格变动</span>
+              </label>
+              <label class="checkbox-item">
+                <input type="checkbox" v-model="newMonitor.metrics" value="news">
+                <span class="checkmark"></span>
+                <span>新闻动态</span>
+              </label>
+              <label class="checkbox-item">
+                <input type="checkbox" v-model="newMonitor.metrics" value="product">
+                <span class="checkmark"></span>
+                <span>产品发布</span>
+              </label>
+              <label class="checkbox-item">
+                <input type="checkbox" v-model="newMonitor.metrics" value="trend">
+                <span class="checkmark"></span>
+                <span>趋势变化</span>
+              </label>
+            </div>
+          </div>
+          <div class="form-group">
+            <label class="form-label">通知频率</label>
+            <select class="form-select" v-model="newMonitor.frequency">
+              <option value="realtime">实时</option>
+              <option value="daily">每日</option>
+              <option value="weekly">每周</option>
+              <option value="monthly">每月</option>
+            </select>
+          </div>
+          <div class="form-group">
+            <label class="form-label">通知方式</label>
+            <div class="checkbox-group">
+              <label class="checkbox-item">
+                <input type="checkbox" v-model="newMonitor.notifications" value="email">
+                <span class="checkmark"></span>
+                <span>邮件</span>
+              </label>
+              <label class="checkbox-item">
+                <input type="checkbox" v-model="newMonitor.notifications" value="wechat">
+                <span class="checkmark"></span>
+                <span>微信</span>
+              </label>
+              <label class="checkbox-item">
+                <input type="checkbox" v-model="newMonitor.notifications" value="system">
+                <span class="checkmark"></span>
+                <span>系统通知</span>
+              </label>
+            </div>
+          </div>
+        </div>
+        <div class="modal-footer">
+          <button class="btn btn-secondary" @click="showAddMonitorModal = false">取消</button>
+          <button class="btn btn-primary" @click="createMonitor">
+            <i class="fas fa-check"></i> 创建监控
+          </button>
+        </div>
+      </div>
+    </div>
+
+    <!-- Monitor Settings Modal -->
+    <div v-if="showMonitorModal" class="modal-overlay" @click.self="showMonitorModal = false">
+      <div class="modal monitor-modal">
+        <div class="modal-header">
+          <div class="modal-title"><i class="fas fa-cog"></i> 监控设置</div>
+          <button class="modal-close" @click="showMonitorModal = false"><i class="fas fa-times"></i></button>
+        </div>
+        <div class="modal-body">
+          <div class="settings-section">
+            <h5>全局设置</h5>
+            <div class="setting-item">
+              <label class="setting-label">启用所有监控</label>
+              <input type="checkbox" class="toggle-switch" v-model="globalSettings.enableAll">
+            </div>
+            <div class="setting-item">
+              <label class="setting-label">通知提醒</label>
+              <select class="form-select" v-model="globalSettings.notificationLevel">
+                <option value="all">全部</option>
+                <option value="important">仅重要</option>
+                <option value="critical">仅紧急</option>
+              </select>
+            </div>
+            <div class="setting-item">
+              <label class="setting-label">数据更新频率</label>
+              <select class="form-select" v-model="globalSettings.updateFrequency">
+                <option value="realtime">实时</option>
+                <option value="hourly">每小时</option>
+                <option value="daily">每日</option>
+              </select>
+            </div>
+          </div>
+          <div class="settings-section">
+            <h5>监控项目 ({{ monitoredItems.length }})</h5>
+            <div class="monitored-summary">
+              <div v-for="item in monitoredItems" :key="item.id" class="summary-item">
+                <span class="item-name">{{ item.name }}</span>
+                <input type="checkbox" class="toggle-switch" v-model="item.enabled">
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="modal-footer">
+          <button class="btn btn-secondary" @click="showMonitorModal = false">关闭</button>
+          <button class="btn btn-primary" @click="saveMonitorSettings">
+            <i class="fas fa-save"></i> 保存设置
+          </button>
+        </div>
+      </div>
+    </div>
+
+    <!-- Trend Analysis Modal -->
+    <div v-if="showTrendModal" class="modal-overlay" @click.self="showTrendModal = false">
+      <div class="modal trend-modal">
+        <div class="modal-header">
+          <div class="modal-title"><i class="fas fa-chart-line"></i> 趋势分析</div>
+          <button class="modal-close" @click="showTrendModal = false"><i class="fas fa-times"></i></button>
+        </div>
+        <div class="modal-body">
+          <div class="trend-controls">
+            <select class="form-select" v-model="trendMetric">
+              <option value="market">市场规模</option>
+              <option value="growth">增长率</option>
+              <option value="competition">竞争强度</option>
+              <option value="demand">需求量</option>
+            </select>
+            <select class="form-select" v-model="trendPeriod">
+              <option value="3m">3个月</option>
+              <option value="6m">6个月</option>
+              <option value="1y">1年</option>
+              <option value="all">全部</option>
+            </select>
+          </div>
+          <div class="trend-chart">
+            <div class="chart-placeholder">
+              <i class="fas fa-chart-line"></i>
+              <p>趋势图表加载中...</p>
+            </div>
+          </div>
+          <div class="trend-insights">
+            <h5>趋势洞察</h5>
+            <div class="insight-item">
+              <span class="insight-label">最高增长:</span>
+              <span class="insight-value">中东市场 +35%</span>
+            </div>
+            <div class="insight-item">
+              <span class="insight-label">最快下降:</span>
+              <span class="insight-value">南美市场 -8%</span>
+            </div>
+            <div class="insight-item">
+              <span class="insight-label">最稳定:</span>
+              <span class="insight-value">欧洲市场 ±2%</span>
+            </div>
+          </div>
+        </div>
+        <div class="modal-footer">
+          <button class="btn btn-secondary" @click="showTrendModal = false">关闭</button>
+          <button class="btn btn-primary" @click="exportTrendReport">
+            <i class="fas fa-download"></i> 导出趋势报告
+          </button>
+        </div>
+      </div>
+    </div>
+
+    <!-- Competitor News Detail Modal -->
+    <div v-if="showCompetitorDetailModal" class="modal-overlay" @click.self="showCompetitorDetailModal = false">
+      <div class="modal detail-modal">
+        <div class="modal-header">
+          <div class="modal-title">
+            <i class="fas fa-chess"></i> {{ selectedCompetitorDetail?.title }}
+          </div>
+          <button class="modal-close" @click="showCompetitorDetailModal = false"><i class="fas fa-times"></i></button>
+        </div>
+        <div class="modal-body" v-if="selectedCompetitorDetail">
+          <div class="detail-section">
+            <h5>基本信息</h5>
+            <div class="info-grid">
+              <div class="info-item">
+                <span class="label">竞品公司</span>
+                <span class="value">{{ selectedCompetitorDetail.details.company }}</span>
+              </div>
+              <div class="info-item">
+                <span class="label">动态标题</span>
+                <span class="value">{{ selectedCompetitorDetail.details.title }}</span>
+              </div>
+              <div class="info-item">
+                <span class="label">发生时间</span>
+                <span class="value">{{ selectedCompetitorDetail.details.time }}</span>
+              </div>
+              <div class="info-item">
+                <span class="label">重要程度</span>
+                <span class="value" :class="selectedCompetitorDetail.details.level">{{ getLevelLabel(selectedCompetitorDetail.details.level) }}</span>
+              </div>
+              <div class="info-item">
+                <span class="label">影响程度</span>
+                <span class="value">{{ selectedCompetitorDetail.details.impact }}</span>
+              </div>
+              <div class="info-item">
+                <span class="label">紧急程度</span>
+                <span class="value danger">{{ selectedCompetitorDetail.details.urgency }}</span>
+              </div>
+            </div>
+          </div>
+
+          <div class="detail-section">
+            <h5>动态描述</h5>
+            <p class="reason-text">{{ selectedCompetitorDetail.details.description }}</p>
+          </div>
+
+          <div class="detail-section">
+            <h5>风险分析</h5>
+            <p class="reason-text">{{ selectedCompetitorDetail.details.analysis }}</p>
+          </div>
+
+          <div class="detail-section">
+            <h5>影响范围</h5>
+            <div class="info-grid">
+              <div class="info-item">
+                <span class="label">影响市场</span>
+                <span class="value">{{ selectedCompetitorDetail.details.affectedMarkets }}</span>
+              </div>
+              <div class="info-item">
+                <span class="label">影响客户</span>
+                <span class="value">{{ selectedCompetitorDetail.details.affectedCustomers }}</span>
+              </div>
+            </div>
+          </div>
+
+          <div class="detail-section">
+            <h5>我们的竞争优势</h5>
+            <div class="actions-list">
+              <div v-for="(advantage, index) in selectedCompetitorDetail.details.ourAdvantage" :key="index" class="action-item">
+                <i class="fas fa-check-circle"></i>
+                <span>{{ advantage }}</span>
+              </div>
             </div>
-            <div style="text-align: right;">
-              <div style="font-weight: 600; color: var(--success);">{{ market.score }}</div>
-              <div style="font-size: 10px; color: var(--text-muted);">潜力指数</div>
+          </div>
+
+          <div class="detail-section">
+            <h5>应对建议</h5>
+            <div class="suggestion-box">
+              <i class="fas fa-lightbulb"></i>
+              <p style="white-space: pre-line;">{{ selectedCompetitorDetail.details.recommendation }}</p>
             </div>
           </div>
         </div>
+        <div class="modal-footer">
+          <button class="btn btn-secondary" @click="showCompetitorDetailModal = false">关闭</button>
+          <button class="btn btn-primary" @click="showCompetitorDetailModal = false">
+            <i class="fas fa-check"></i> 已了解
+          </button>
+        </div>
       </div>
+    </div>
 
-      <div class="market-card">
-        <div class="market-card-header">
-          <div class="market-card-title">📢 竞品动态</div>
+    <!-- Market Risk Detail Modal -->
+    <div v-if="showRiskDetailModal" class="modal-overlay" @click.self="showRiskDetailModal = false">
+      <div class="modal detail-modal">
+        <div class="modal-header">
+          <div class="modal-title">
+            <i class="fas fa-exclamation-triangle"></i> {{ selectedRiskDetail?.title }}
+          </div>
+          <button class="modal-close" @click="showRiskDetailModal = false"><i class="fas fa-times"></i></button>
         </div>
-        <div style="padding: 12px;">
-          <div v-for="(news, index) in competitorNews" :key="index"
-               :style="{ 
-                 padding: '12px', 
-                 background: 'var(--bg-hover)', 
-                 borderRadius: '10px', 
-                 marginBottom: '8px',
-                 borderLeft: '3px solid ' + (news.level === 'danger' ? 'var(--danger)' : 'var(--warning)')
-               }">
-            <div style="font-weight: 600; margin-bottom: 4px;">{{ news.title }}</div>
-            <div style="font-size: 12px; color: var(--text-secondary);">{{ news.description }}</div>
-            <div style="font-size: 11px; color: var(--text-muted); margin-top: 8px;">{{ news.time }}</div>
+        <div class="modal-body" v-if="selectedRiskDetail">
+          <div class="detail-section">
+            <h5>风险概况</h5>
+            <div class="info-grid">
+              <div class="info-item">
+                <span class="label">风险标题</span>
+                <span class="value">{{ selectedRiskDetail.details.title }}</span>
+              </div>
+              <div class="info-item">
+                <span class="label">风险等级</span>
+                <span class="value danger">{{ selectedRiskDetail.details.level }}</span>
+              </div>
+              <div class="info-item">
+                <span class="label">发生概率</span>
+                <span class="value">{{ selectedRiskDetail.details.probability }}</span>
+              </div>
+              <div class="info-item">
+                <span class="label">影响程度</span>
+                <span class="value">{{ selectedRiskDetail.details.impact }}</span>
+              </div>
+              <div class="info-item">
+                <span class="label">影响范围</span>
+                <span class="value">{{ selectedRiskDetail.details.affectedRegions }}</span>
+              </div>
+              <div class="info-item">
+                <span class="label">预计损失</span>
+                <span class="value danger">{{ selectedRiskDetail.details.estimatedLoss }}</span>
+              </div>
+            </div>
+          </div>
+
+          <div class="detail-section">
+            <h5>风险描述</h5>
+            <p class="reason-text">{{ selectedRiskDetail.details.description }}</p>
+          </div>
+
+          <div class="detail-section">
+            <h5>根本原因</h5>
+            <p class="reason-text">{{ selectedRiskDetail.details.rootCause }}</p>
+          </div>
+
+          <div class="detail-section">
+            <h5>影响产品</h5>
+            <div class="actions-list">
+              <div v-for="(product, index) in selectedRiskDetail.details.affectedProducts" :key="index" class="action-item">
+                <i class="fas fa-box"></i>
+                <span>{{ product }}</span>
+              </div>
+            </div>
+          </div>
+
+          <div class="detail-section">
+            <h5>风险缓解措施</h5>
+            <div class="actions-list">
+              <div v-for="(measure, index) in selectedRiskDetail.details.mitigation" :key="index" class="action-item">
+                <i class="fas fa-shield-alt"></i>
+                <span>{{ measure }}</span>
+              </div>
+            </div>
+          </div>
+
+          <div class="detail-section">
+            <h5>应急预案</h5>
+            <div class="suggestion-box">
+              <i class="fas fa-exclamation-circle"></i>
+              <p style="white-space: pre-line;">{{ selectedRiskDetail.details.contingencyPlan }}</p>
+            </div>
           </div>
+
+          <div class="detail-section">
+            <h5>监控信息</h5>
+            <div class="info-grid">
+              <div class="info-item">
+                <span class="label">当前状态</span>
+                <span class="value">{{ selectedRiskDetail.details.status }}</span>
+              </div>
+              <div class="info-item">
+                <span class="label">下次评审</span>
+                <span class="value">{{ selectedRiskDetail.details.nextReview }}</span>
+              </div>
+              <div class="info-item">
+                <span class="label">影响客户数</span>
+                <span class="value">{{ selectedRiskDetail.details.affectedCustomers }}</span>
+              </div>
+              <div class="info-item">
+                <span class="label">预计周期</span>
+                <span class="value">{{ selectedRiskDetail.details.timeline }}</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="modal-footer">
+          <button class="btn btn-secondary" @click="showRiskDetailModal = false">关闭</button>
+          <button class="btn btn-primary" @click="showRiskDetailModal = false">
+            <i class="fas fa-check"></i> 已知悉
+          </button>
         </div>
       </div>
     </div>
+    <div v-if="showDetailModal" class="modal-overlay" @click.self="showDetailModal = false">
+      <div class="modal detail-modal">
+        <div class="modal-header">
+          <div class="modal-title">
+            <i class="fas fa-info-circle"></i> {{ selectedDetail?.title }}
+          </div>
+          <button class="modal-close" @click="showDetailModal = false"><i class="fas fa-times"></i></button>
+        </div>
+        <div class="modal-body" v-if="selectedDetail">
+          <!-- Market Detail -->
+          <div v-if="selectedDetail.type === 'market'" class="detail-content">
+            <div class="detail-section">
+              <h5>市场概况</h5>
+              <div class="info-grid">
+                <div class="info-item">
+                  <span class="label">市场名称</span>
+                  <span class="value">{{ selectedDetail.details.name }}</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">预计增长</span>
+                  <span class="value">{{ selectedDetail.details.growth }}</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">人口规模</span>
+                  <span class="value">{{ selectedDetail.details.population }}</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">潜力指数</span>
+                  <span class="value">{{ selectedDetail.details.score }}/100</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">市场规模</span>
+                  <span class="value">{{ selectedDetail.details.marketSize }}</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">GDP增长</span>
+                  <span class="value">{{ selectedDetail.details.gdpGrowth }}</span>
+                </div>
+              </div>
+            </div>
 
-    <!-- Market Opportunities -->
-    <div style="margin-top: 24px;">
-      <h3 style="font-size: 16px; margin-bottom: 16px;">🎯 市场机会</h3>
-      <div style="display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px;">
-        <div v-for="opp in marketOpportunities" :key="opp.id"
-             class="smart-card" style="cursor: pointer;">
-          <div style="display: flex; align-items: center; gap: 12px; margin-bottom: 12px;">
-            <div style="font-size: 28px;">{{ opp.icon }}</div>
-            <div>
-              <div style="font-weight: 600;">{{ opp.market }}</div>
-              <div style="font-size: 11px; color: var(--text-muted);">{{ opp.product }}</div>
+            <div class="detail-section">
+              <h5>主要产业</h5>
+              <p class="reason-text">{{ selectedDetail.details.mainIndustries }}</p>
+            </div>
+
+            <div class="detail-section">
+              <h5>关键参与者</h5>
+              <p class="reason-text">{{ selectedDetail.details.keyPlayers }}</p>
+            </div>
+
+            <div class="detail-section">
+              <h5>市场机会</h5>
+              <div class="actions-list">
+                <div v-for="(opp, index) in selectedDetail.details.opportunities" :key="index" class="action-item">
+                  <i class="fas fa-star"></i>
+                  <span>{{ opp }}</span>
+                </div>
+              </div>
+            </div>
+
+            <div class="detail-section">
+              <h5>市场风险</h5>
+              <div class="actions-list">
+                <div v-for="(risk, index) in selectedDetail.details.risks" :key="index" class="action-item danger">
+                  <i class="fas fa-exclamation-circle"></i>
+                  <span>{{ risk }}</span>
+                </div>
+              </div>
+            </div>
+
+            <div class="detail-section">
+              <h5>建议</h5>
+              <div class="suggestion-box">
+                <i class="fas fa-lightbulb"></i>
+                <p>{{ selectedDetail.details.recommendation }}</p>
+              </div>
+            </div>
+          </div>
+
+          <!-- Opportunity Detail -->
+          <div v-if="selectedDetail.type === 'opportunity'" class="detail-content">
+            <div class="detail-section">
+              <h5>机会概况</h5>
+              <div class="info-grid">
+                <div class="info-item">
+                  <span class="label">市场</span>
+                  <span class="value">{{ selectedDetail.details.market }}</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">产品</span>
+                  <span class="value">{{ selectedDetail.details.product }}</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">潜力等级</span>
+                  <span class="value" :class="selectedDetail.details.potential">{{ selectedDetail.details.potential }}</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">评分</span>
+                  <span class="value">{{ selectedDetail.details.score }}/100</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">市场规模</span>
+                  <span class="value">{{ selectedDetail.details.marketSize }}</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">竞争强度</span>
+                  <span class="value">{{ selectedDetail.details.competition }}</span>
+                </div>
+              </div>
+            </div>
+
+            <div class="detail-section">
+              <h5>市场洞察</h5>
+              <p class="reason-text">{{ selectedDetail.details.insight }}</p>
+            </div>
+
+            <div class="detail-section">
+              <h5>进入策略</h5>
+              <div class="suggestion-box">
+                <i class="fas fa-map-marker-alt"></i>
+                <p style="white-space: pre-line;">{{ selectedDetail.details.entryStrategy }}</p>
+              </div>
+            </div>
+
+            <div class="detail-section">
+              <h5>投资信息</h5>
+              <div class="info-grid">
+                <div class="info-item">
+                  <span class="label">市场增长</span>
+                  <span class="value">{{ selectedDetail.details.marketGrowth }}</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">目标客户</span>
+                  <span class="value">{{ selectedDetail.details.targetCustomers }}</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">进入周期</span>
+                  <span class="value">{{ selectedDetail.details.timeline }}</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">投资需求</span>
+                  <span class="value">{{ selectedDetail.details.investmentRequired }}</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">预期ROI</span>
+                  <span class="value">{{ selectedDetail.details.expectedROI }}</span>
+                </div>
+              </div>
             </div>
           </div>
-          <div style="font-size: 12px; color: var(--text-secondary); margin-bottom: 12px;">{{ opp.insight }}</div>
-          <div style="display: flex; justify-content: space-between; font-size: 11px;">
-            <span style="color: var(--success);">{{ opp.potential }}</span>
-            <span style="color: var(--text-muted);">{{ opp.competition }}竞争</span>
+
+          <!-- Trend Detail -->
+          <div v-if="selectedDetail.type === 'trend'" class="detail-content">
+            <div class="detail-section">
+              <h5>话题概况</h5>
+              <div class="info-grid">
+                <div class="info-item">
+                  <span class="label">话题</span>
+                  <span class="value">{{ selectedDetail.details.title }}</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">分类</span>
+                  <span class="value">{{ selectedDetail.details.category }}</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">热度</span>
+                  <span class="value">{{ selectedDetail.details.heat }}/100</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">提及数</span>
+                  <span class="value">{{ selectedDetail.details.mentions }}</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">增长率</span>
+                  <span class="value">{{ selectedDetail.details.growth }}%</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">相关产品</span>
+                  <span class="value">{{ selectedDetail.details.relatedProducts }}</span>
+                </div>
+              </div>
+            </div>
+
+            <div class="detail-section">
+              <h5>话题描述</h5>
+              <p class="reason-text">{{ selectedDetail.details.description }}</p>
+            </div>
+
+            <div class="detail-section">
+              <h5>关键洞察</h5>
+              <div class="actions-list">
+                <div v-for="(insight, index) in selectedDetail.details.keyInsights" :key="index" class="action-item">
+                  <i class="fas fa-lightbulb"></i>
+                  <span>{{ insight }}</span>
+                </div>
+              </div>
+            </div>
+
+            <div class="detail-section">
+              <h5>业务影响</h5>
+              <div class="suggestion-box">
+                <i class="fas fa-chart-line"></i>
+                <p>{{ selectedDetail.details.businessImplication }}</p>
+              </div>
+            </div>
+
+            <div class="detail-section">
+              <h5>建议行动</h5>
+              <div class="actions-list">
+                <div v-for="(action, index) in selectedDetail.details.actionItems" :key="index" class="action-item">
+                  <i class="fas fa-check-circle"></i>
+                  <span>{{ action }}</span>
+                </div>
+              </div>
+            </div>
+
+            <div class="detail-section">
+              <h5>信息来源</h5>
+              <div class="sources-list">
+                <span v-for="source in selectedDetail.details.sources" :key="source" class="source-tag">{{ source }}</span>
+              </div>
+            </div>
           </div>
         </div>
+        <div class="modal-footer">
+          <button class="btn btn-secondary" @click="showDetailModal = false">关闭</button>
+          <button class="btn btn-primary" @click="trackOpportunity(selectedDetail.data)" v-if="selectedDetail?.type === 'opportunity'">
+            <i class="fas fa-star"></i> 跟踪机会
+          </button>
+        </div>
       </div>
     </div>
+    <transition name="toast">
+      <div v-if="showToast" class="toast" :class="toastType">
+        <i :class="toastType === 'success' ? 'fas fa-check-circle' : 'fas fa-info-circle'"></i>
+        {{ toastMessage }}
+      </div>
+    </transition>
   </div>
 </template>
 
 <script setup>
-import { ref } from 'vue'
+import { ref, computed } from 'vue'
+
+const activeTab = ref('overview')
+const searchQuery = ref('')
+const filterRegion = ref('')
+const sortBy = ref('latest')
+const opportunityFilter = ref('')
+const showAddMonitorModal = ref(false)
+const showMonitorModal = ref(false)
+const showTrendModal = ref(false)
+const showToast = ref(false)
+const toastMessage = ref('')
+const toastType = ref('success')
+const showDetailModal = ref(false)
+const selectedDetail = ref(null)
+const showCompetitorDetailModal = ref(false)
+const selectedCompetitorDetail = ref(null)
+const showRiskDetailModal = ref(false)
+const selectedRiskDetail = ref(null)
+
+// Trend modal
+const trendMetric = ref('market')
+const trendPeriod = ref('6m')
+
+// New monitor form
+const newMonitor = ref({
+  type: 'market',
+  target: '',
+  metrics: [],
+  frequency: 'daily',
+  notifications: []
+})
 
+// Global settings
+const globalSettings = ref({
+  enableAll: true,
+  notificationLevel: 'important',
+  updateFrequency: 'daily'
+})
+
+// Tabs
+const tabs = [
+  { key: 'overview', label: '概览', count: 0 },
+  { key: 'trends', label: '热点话题', count: 12 },
+  { key: 'monitored', label: '监控项目', count: 8 },
+  { key: 'reports', label: '情报报告', count: 5 }
+]
+
+// Stats
+const activeMarkets = 5
+const monitoredCompetitors = 12
+const newCompetitorNews = 3
+const marketOpportunities = ref([])
+const highPotentialCount = 4
+const marketRisks = ref([])
+const criticalRisks = 1
+const trendingTopics = ref([])
+
+// Hot Markets
 const hotMarkets = ref([
-  { name: '中东地区', growth: '预计增长35%', score: 95 },
-  { name: '东南亚', growth: '预计增长28%', score: 88 },
-  { name: '北美市场', growth: '预计增长18%', score: 82 },
-  { name: '欧洲', growth: '预计增长12%', score: 75 },
-  { name: '南美', growth: '预计增长8%', score: 68 }
+  { id: 1, name: '中东地区', growth: '预计增长35%', population: '4.2亿', score: 95, trend: 'up', region: 'middle-east' },
+  { id: 2, name: '东南亚', growth: '预计增长28%', population: '6.8亿', score: 88, trend: 'up', region: 'asia' },
+  { id: 3, name: '北美市场', growth: '预计增长18%', population: '5.7亿', score: 82, trend: 'up', region: 'america' },
+  { id: 4, name: '欧洲', growth: '预计增长12%', population: '7.4亿', score: 75, trend: 'flat', region: 'europe' },
+  { id: 5, name: '南美', growth: '预计增长8%', population: '4.3亿', score: 68, trend: 'down', region: 'america' }
 ])
 
+// Competitor News
 const competitorNews = ref([
-  { title: '三星发布新品', description: '三星发布新一代990 Pro SSD,建议更新话术', time: '2小时前', level: 'danger' },
-  { title: '西部数据降价', description: '西部数据企业级SSD降价10%,需关注', time: '昨天', level: 'warning' }
+  { id: 1, title: '三星发布新品', company: '三星', description: '三星发布新一代990 Pro SSD,性能提升40%,建议更新话术', time: '2小时前', level: 'danger', impact: '高' },
+  { id: 2, title: '西部数据降价', company: '西部数据', description: '西部数据企业级SSD降价10%,需关注竞争压力', time: '昨天', level: 'warning', impact: '中' },
+  { id: 3, title: '英特尔新产品线', company: '英特尔', description: '英特尔推出新的数据中心存储解决方案', time: '3天前', level: 'info', impact: '中' },
+  { id: 4, title: '美光收购案', company: '美光', description: '美光收购存储技术公司,扩大产品线', time: '1周前', level: 'info', impact: '低' },
+  { id: 5, title: 'SK海力士投资', company: 'SK海力士', description: 'SK海力士在韩国投资新工厂,产能提升30%', time: '1周前', level: 'warning', impact: '中' }
 ])
 
-const marketOpportunities = ref([
-  { id: 1, icon: '🇸🇦', market: '沙特阿拉伯', product: '企业级SSD', insight: '政府数字化采购增加', potential: '高潜力', competition: '低' },
-  { id: 2, icon: '🇦🇪', market: '阿联酋', product: '数据中心存储', insight: '迪拜数据中心扩建', potential: '高潜力', competition: '中' },
-  { id: 3, icon: '🇸🇬', market: '新加坡', product: '云存储方案', insight: '东南亚云计算中心', potential: '中潜力', competition: '高' },
-  { id: 4, icon: '🇩🇪', market: '德国', product: '工业级存储', insight: '工业4.0需求增长', potential: '中潜力', competition: '高' }
+// Market Opportunities
+marketOpportunities.value = [
+  { id: 1, icon: '🇸🇦', market: '沙特阿拉伯', product: '企业级SSD', insight: '政府数字化采购增加,Vision 2030计划推动', potential: 'high', marketSize: '¥2.5B', competition: '低', score: 92 },
+  { id: 2, icon: '🇦🇪', market: '阿联酋', product: '数据中心存储', insight: '迪拜数据中心扩建,云计算需求增长', potential: 'high', marketSize: '¥1.8B', competition: '中', score: 88 },
+  { id: 3, icon: '🇸🇬', market: '新加坡', product: '云存储方案', insight: '东南亚云计算中心,区域枢纽地位', potential: 'medium', marketSize: '¥1.2B', competition: '高', score: 75 },
+  { id: 4, icon: '🇩🇪', market: '德国', product: '工业级存储', insight: '工业4.0需求增长,制造业升级', potential: 'medium', marketSize: '¥2.1B', competition: '高', score: 72 },
+  { id: 5, icon: '🇮🇳', market: '印度', product: '消费级SSD', insight: '互联网用户增长,数据中心建设加速', potential: 'high', marketSize: '¥3.2B', competition: '中', score: 85 },
+  { id: 6, icon: '🇧🇷', market: '巴西', product: '企业存储', insight: '拉美最大经济体,数字化转型机会', potential: 'medium', marketSize: '¥0.9B', competition: '低', score: 68 }
+]
+
+// Market Risks
+marketRisks.value = [
+  { id: 1, title: '芯片供应链风险', level: 'critical', description: '全球芯片短缺可能持续,影响产品交期', affectedRegions: '全球' },
+  { id: 2, title: '贸易政策变化', level: 'high', description: '美国对华芯片出口管制升级,可能影响供应链', affectedRegions: '中东、亚洲' },
+  { id: 3, title: '汇率波动', level: 'medium', description: '美元升值可能增加采购成本', affectedRegions: '新兴市场' },
+  { id: 4, title: '竞争加剧', level: 'medium', description: '新进入者增加,价格竞争压力上升', affectedRegions: '全球' }
+]
+
+// Trending Topics
+trendingTopics.value = [
+  { id: 1, category: '技术趋势', title: 'AI芯片需求爆发', description: '生成式AI应用推动高性能芯片需求', heat: 95, mentions: 2847, growth: 45, relatedProducts: 'GPU、高端SSD', sources: ['TechCrunch', '36氪', 'VentureBeat'] },
+  { id: 2, category: '市场动态', title: '云计算市场扩张', description: '企业上云加速,数据中心投资增加', heat: 88, mentions: 2156, growth: 32, relatedProducts: '企业级存储', sources: ['Gartner', 'IDC', '云计算周刊'] },
+  { id: 3, category: '政策导向', title: '数据安全法规', description: '各国加强数据隐私保护法规', heat: 82, mentions: 1923, growth: 28, relatedProducts: '安全存储', sources: ['政策新闻', '法律周刊'] },
+  { id: 4, category: '产业动向', title: '绿色存储', description: '低功耗、环保存储产品受关注', heat: 76, mentions: 1654, growth: 22, relatedProducts: '节能SSD', sources: ['ESG报告', '环保新闻'] },
+  { id: 5, category: '竞争格局', title: '存储芯片整合', description: '大型厂商并购小型创新公司', heat: 71, mentions: 1432, growth: 18, relatedProducts: '全线产品', sources: ['并购新闻', '行业分析'] },
+  { id: 6, category: '应用创新', title: '边缘计算存储', description: '边缘计算场景对存储的新需求', heat: 68, mentions: 1289, growth: 15, relatedProducts: '边缘存储', sources: ['技术博客', '行业论坛'] }
+]
+
+// Monitored Items
+const monitoredItems = ref([
+  { id: 1, type: 'competitor', name: '三星电子', description: '监控三星SSD产品线动态和价格变化', lastUpdate: '2小时前', frequency: '实时', notifications: 3, status: 'active', enabled: true },
+  { id: 2, type: 'market', name: '中东市场', description: '监控中东地区市场规模和增长趋势', lastUpdate: '1天前', frequency: '每日', notifications: 1, status: 'active', enabled: true },
+  { id: 3, type: 'product', name: 'NVMe SSD', description: '监控NVMe SSD产品类别的市场动态', lastUpdate: '3小时前', frequency: '实时', notifications: 5, status: 'active', enabled: true },
+  { id: 4, type: 'keyword', name: '数据中心', description: '监控"数据中心"相关新闻和趋势', lastUpdate: '2小时前', frequency: '每日', notifications: 2, status: 'active', enabled: true },
+  { id: 5, type: 'competitor', name: '西部数据', description: '监控西部数据产品和市场动向', lastUpdate: '1天前', frequency: '每日', notifications: 1, status: 'active', enabled: true },
+  { id: 6, type: 'region', name: '东南亚', description: '监控东南亚地区市场机会和风险', lastUpdate: '1天前', frequency: '每周', notifications: 0, status: 'active', enabled: true },
+  { id: 7, type: 'keyword', name: 'AI芯片', description: '监控AI芯片相关动态', lastUpdate: '2小时前', frequency: '实时', notifications: 8, status: 'active', enabled: true },
+  { id: 8, type: 'product', name: '企业级存储', description: '监控企业级存储产品市场', lastUpdate: '3小时前', frequency: '每日', notifications: 2, status: 'active', enabled: true }
+])
+
+// Intelligence Reports
+const intelligenceReports = ref([
+  { id: 1, title: '2026年Q1市场情报报告', date: '2026-03-20', summary: '全球存储市场持续增长,中东和东南亚成为新增长极', dataPoints: 247, regions: 12, competitors: 8 },
+  { id: 2, title: '竞品动态分析报告', date: '2026-03-15', summary: '三星、西部数据等主要竞品最新动向分析', dataPoints: 156, regions: 8, competitors: 5 },
+  { id: 3, title: '市场机会评估报告', date: '2026-03-10', summary: '识别出6个高潜力市场机会,评估进入策略', dataPoints: 189, regions: 6, competitors: 12 },
+  { id: 4, title: '风险预警报告', date: '2026-03-05', summary: '芯片供应链风险、贸易政策变化等关键风险分析', dataPoints: 98, regions: 15, competitors: 10 },
+  { id: 5, title: '趋势分析报告', date: '2026-02-28', summary: 'AI芯片、云计算、绿色存储等热点趋势深度分析', dataPoints: 312, regions: 20, competitors: 15 }
 ])
+
+// Computed
+const filteredOpportunities = computed(() => {
+  let result = marketOpportunities.value
+  if (opportunityFilter.value) {
+    result = result.filter(opp => opp.potential === opportunityFilter.value)
+  }
+  return result
+})
+
+// Methods
+const getLevelLabel = (level) => {
+  const map = { danger: '紧急', warning: '重要', info: '信息' }
+  return map[level] || level
+}
+
+const filterByType = (type) => {
+  toast(`查看${type}详情`, 'info')
+}
+
+const openMarketDetail = (market) => {
+  selectedDetail.value = {
+    type: 'market',
+    title: `${market.name} - 市场详情`,
+    data: market,
+    details: {
+      name: market.name,
+      growth: market.growth,
+      population: market.population,
+      score: market.score,
+      trend: market.trend,
+      marketSize: '¥2.5B',
+      gdpGrowth: '4.2%',
+      mainIndustries: '石油、金融、电信、零售',
+      keyPlayers: '沙特阿美、沙特电信、沙特银行',
+      opportunities: [
+        '政府数字化采购增加',
+        'Vision 2030计划推动',
+        '数据中心建设加速',
+        '云计算需求增长'
+      ],
+      risks: [
+        '地缘政治风险',
+        '汇率波动',
+        '贸易政策变化'
+      ],
+      recommendation: '中东市场潜力巨大,建议加大投入。重点关注沙特和阿联酋市场。'
+    }
+  }
+  showDetailModal.value = true
+}
+
+const showMarketDetail = () => {
+  toast('查看全部热门市场', 'info')
+}
+
+const showAllNews = () => {
+  toast('查看全部竞品动态', 'info')
+}
+
+const showOpportunitiesDetail = () => {
+  toast('查看全部市场机会', 'info')
+}
+
+const openOpportunityDetail = (opp) => {
+  selectedDetail.value = {
+    type: 'opportunity',
+    title: `${opp.market} - 市场机会详情`,
+    data: opp,
+    details: {
+      market: opp.market,
+      product: opp.product,
+      icon: opp.icon,
+      insight: opp.insight,
+      potential: opp.potential,
+      marketSize: opp.marketSize,
+      competition: opp.competition,
+      score: opp.score,
+      marketGrowth: '35%',
+      targetCustomers: '50-100',
+      entryStrategy: '1. 建立本地代理\n2. 参加行业展会\n3. 与当地企业合作\n4. 提供定制化解决方案',
+      timeline: '6-12个月',
+      investmentRequired: '¥500K-1M',
+      expectedROI: '200-300%'
+    }
+  }
+  showDetailModal.value = true
+}
+
+const trackOpportunity = (opp) => {
+  toast(`已跟踪${opp.market}市场机会`, 'success')
+}
+
+const showRisksDetail = () => {
+  toast('查看全部市场风险', 'info')
+}
+
+const handleRisk = (risk) => {
+  toast(`查看${risk.title}的应对建议`, 'info')
+}
+
+const openTrendDetail = (topic) => {
+  selectedDetail.value = {
+    type: 'trend',
+    title: `${topic.title} - 热点话题详情`,
+    data: topic,
+    details: {
+      title: topic.title,
+      category: topic.category,
+      heat: topic.heat,
+      mentions: topic.mentions,
+      growth: topic.growth,
+      relatedProducts: topic.relatedProducts,
+      sources: topic.sources,
+      description: topic.description,
+      keyInsights: [
+        '生成式AI应用推动高性能芯片需求',
+        '数据中心投资增加,存储需求旺盛',
+        '企业级应用对性能要求提高',
+        '新兴市场云计算普及加速'
+      ],
+      businessImplication: '我们的高端SSD产品将受益于这一趋势,建议加大营销投入。',
+      actionItems: [
+        '推出AI优化的SSD产品',
+        '加强与云计算厂商的合作',
+        '开发针对性的营销方案',
+        '建立技术领先的品牌形象'
+      ]
+    }
+  }
+  showDetailModal.value = true
+}
+
+const refreshTrends = () => {
+  toast('正在刷新热点话题...', 'info')
+  setTimeout(() => {
+    toast('热点话题已更新', 'success')
+  }, 1500)
+}
+
+const editMonitor = (item) => {
+  toast(`编辑${item.name}监控`, 'info')
+}
+
+const removeMonitor = (item) => {
+  toast(`已删除${item.name}监控`, 'success')
+}
+
+const createMonitor = () => {
+  showAddMonitorModal.value = false
+  toast('监控已创建', 'success')
+}
+
+const saveMonitorSettings = () => {
+  showMonitorModal.value = false
+  toast('监控设置已保存', 'success')
+}
+
+const exportTrendReport = () => {
+  toast('趋势报告导出中...', 'success')
+}
+
+const exportIntelligence = () => {
+  toast('情报报告导出中...', 'success')
+}
+
+const generateReport = () => {
+  toast('正在生成情报报告...', 'info')
+  setTimeout(() => {
+    toast('情报报告已生成', 'success')
+  }, 2000)
+}
+
+const openReport = (report) => {
+  toast(`查看${report.title}`, 'info')
+}
+
+const viewReport = (report) => {
+  toast(`查看${report.title}`, 'info')
+}
+
+const downloadReport = (report) => {
+  toast(`${report.title}下载中...`, 'success')
+}
+
+const toast = (message, type = 'success') => {
+  toastMessage.value = message
+  toastType.value = type
+  showToast.value = true
+  setTimeout(() => { showToast.value = false }, 3000)
+}
+
+const openCompetitorNewsDetail = (news) => {
+  selectedCompetitorDetail.value = {
+    type: 'competitor-news',
+    title: `${news.title} - 竞品动态详情`,
+    data: news,
+    details: {
+      title: news.title,
+      company: news.company,
+      description: news.description,
+      time: news.time,
+      level: news.level,
+      impact: news.impact,
+      analysis: '竞品发布新产品,性能提升40%,价格下调15%。这可能对我们的市场份额造成3-5%的影响。',
+      ourAdvantage: [
+        '更好的客户服务',
+        '更灵活的定制方案',
+        '更强的技术支持',
+        '更稳定的供应链'
+      ],
+      recommendation: '1. 立即评估竞品产品\n2. 分析我们的竞争优势\n3. 制定应对策略\n4. 加强客户沟通',
+      affectedMarkets: '全球',
+      affectedCustomers: '50-100',
+      urgency: '高'
+    }
+  }
+  showCompetitorDetailModal.value = true
+}
+
+const openMarketRiskDetail = (risk) => {
+  selectedRiskDetail.value = {
+    type: 'market-risk',
+    title: `${risk.title} - 市场风险详情`,
+    data: risk,
+    details: {
+      title: risk.title,
+      description: risk.description,
+      affectedRegions: risk.affectedRegions,
+      level: risk.level,
+      probability: '高',
+      impact: '中等',
+      rootCause: risk.rootCause || '全球芯片短缺持续,主要供应商产能受限',
+      timeline: '3-6个月',
+      affectedProducts: [
+        'NVMe SSD 2TB',
+        'SATA SSD 2TB',
+        '企业级SSD 4TB'
+      ],
+      affectedCustomers: 45,
+      estimatedLoss: '¥2-5M',
+      mitigation: [
+        '开发备用供应商',
+        '增加库存储备',
+        '优化生产计划',
+        '与客户沟通交期调整',
+        '寻求替代方案'
+      ],
+      contingencyPlan: '1. 启动备用供应商\n2. 加班生产\n3. 优先供应重点客户\n4. 提供替代产品方案',
+      status: '监控中',
+      nextReview: '2026-03-30'
+    }
+  }
+  showRiskDetailModal.value = true
+}
 </script>
+
+<style scoped>
+.market-page { flex: 1; display: flex; flex-direction: column; padding: 24px; overflow-y: auto; background: var(--bg-dark); }
+.market-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 24px; }
+.header-left { display: flex; flex-direction: column; gap: 4px; }
+.data-title { font-size: 20px; font-weight: 600; }
+.header-desc { font-size: 13px; color: var(--text-secondary); }
+.header-actions { display: flex; gap: 8px; }
+
+/* Stats Row */
+.stats-row { display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; margin-bottom: 24px; }
+.stat-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px; padding: 16px; cursor: pointer; transition: all 0.2s; display: flex; align-items: center; gap: 12px; }
+.stat-card:hover { border-color: var(--primary); transform: translateY(-2px); }
+.stat-icon { width: 40px; height: 40px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 16px; }
+.stat-icon.blue { background: rgba(99, 102, 241, 0.2); color: #6366F1; }
+.stat-icon.purple { background: rgba(139, 92, 246, 0.2); color: #8B5CF6; }
+.stat-icon.green { background: rgba(16, 185, 129, 0.2); color: #10B981; }
+.stat-icon.red { background: rgba(239, 68, 68, 0.2); color: #EF4444; }
+.stat-icon.cyan { background: rgba(6, 182, 212, 0.2); color: #06B6D4; }
+.stat-content h3 { font-size: 18px; font-weight: 700; margin: 0; }
+.stat-content p { font-size: 11px; color: var(--text-muted); margin: 0; }
+.stat-trend { font-size: 11px; padding: 2px 8px; border-radius: 10px; background: rgba(16, 185, 129, 0.2); color: var(--success); display: flex; align-items: center; gap: 4px; }
+.stat-badge { font-size: 10px; padding: 2px 8px; border-radius: 10px; background: rgba(245, 158, 11, 0.2); color: var(--warning); }
+.stat-badge.danger { background: rgba(239, 68, 68, 0.2); color: #EF4444; }
+
+/* Tabs */
+.tabs-section { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; padding-bottom: 12px; border-bottom: 1px solid var(--border); }
+.tabs { display: flex; gap: 4px; }
+.tab-item { padding: 8px 16px; border-radius: 8px; cursor: pointer; font-size: 13px; color: var(--text-secondary); display: flex; align-items: center; gap: 6px; transition: all 0.2s; }
+.tab-item:hover { background: var(--bg-hover); }
+.tab-item.active { background: var(--bg-hover); color: var(--text-primary); font-weight: 600; }
+.tab-count { font-size: 11px; padding: 2px 6px; background: var(--bg-dark); border-radius: 10px; }
+.tab-item.active .tab-count { background: var(--primary); color: white; }
+.filter-controls { display: flex; gap: 8px; }
+.search-input { padding: 8px 12px; background: var(--bg-hover); border: 1px solid var(--border); border-radius: 8px; color: var(--text-primary); font-size: 13px; width: 200px; }
+.filter-select { padding: 8px 12px; background: var(--bg-hover); border: 1px solid var(--border); border-radius: 8px; color: var(--text-primary); font-size: 13px; }
+.filter-select-sm { padding: 6px 10px; background: var(--bg-hover); border: 1px solid var(--border); border-radius: 6px; color: var(--text-primary); font-size: 12px; }
+
+/* Content Section */
+.content-section { flex: 1; overflow-y: auto; }
+
+/* Overview Grid */
+.overview-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 24px; }
+.card-section { background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px; padding: 20px; }
+.section-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; }
+.section-header h4 { font-size: 14px; font-weight: 600; margin: 0; display: flex; align-items: center; gap: 8px; }
+.section-header h4 i { color: var(--primary); }
+.btn-link { background: none; border: none; color: var(--primary); font-size: 12px; cursor: pointer; }
+
+/* Market List */
+.market-list { display: flex; flex-direction: column; gap: 10px; }
+.market-item { display: flex; align-items: center; gap: 12px; padding: 12px; background: var(--bg-hover); border-radius: 10px; cursor: pointer; transition: all 0.2s; }
+.market-item:hover { background: rgba(99, 102, 241, 0.1); }
+.rank-badge { width: 28px; height: 28px; border-radius: 50%; background: var(--bg-dark); display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; }
+.rank-badge.gold { background: rgba(245, 158, 11, 0.2); color: #F59E0B; }
+.rank-badge.silver { background: rgba(156, 163, 175, 0.2); color: #9CA3AF; }
+.rank-badge.bronze { background: rgba(217, 119, 6, 0.2); color: #D97706; }
+.market-info { flex: 1; min-width: 0; }
+.market-name { font-size: 13px; font-weight: 600; }
+.market-meta { font-size: 11px; color: var(--text-muted); margin-top: 2px; display: flex; gap: 12px; }
+.market-score { text-align: center; }
+.score-value { font-size: 16px; font-weight: 700; }
+.score-label { font-size: 10px; color: var(--text-muted); }
+.market-indicators { }
+.indicator { font-size: 12px; }
+.indicator.up { color: var(--success); }
+.indicator.down { color: #EF4444; }
+
+/* News List */
+.news-list { display: flex; flex-direction: column; gap: 10px; }
+.news-item { padding: 12px; background: var(--bg-hover); border-radius: 10px; border-left: 3px solid var(--border); cursor: pointer; transition: all 0.2s; }
+.news-item:hover { background: rgba(99, 102, 241, 0.1); }
+.news-item.danger { border-left-color: #EF4444; }
+.news-item.warning { border-left-color: #F59E0B; }
+.news-item.info { border-left-color: #6366F1; }
+.news-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
+.news-title { font-size: 13px; font-weight: 600; }
+.news-level { font-size: 10px; padding: 2px 8px; border-radius: 10px; }
+.news-level.danger { background: rgba(239, 68, 68, 0.2); color: #EF4444; }
+.news-level.warning { background: rgba(245, 158, 11, 0.2); color: #F59E0B; }
+.news-level.info { background: rgba(99, 102, 241, 0.2); color: #6366F1; }
+.news-content { margin-bottom: 8px; }
+.news-company { font-size: 11px; color: var(--text-secondary); margin-bottom: 4px; }
+.news-description { font-size: 12px; color: var(--text-secondary); line-height: 1.4; }
+.news-footer { display: flex; justify-content: space-between; font-size: 10px; color: var(--text-muted); }
+
+/* Opportunities Section */
+.opportunities-section { background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px; padding: 20px; margin-bottom: 24px; }
+.opportunities-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
+.opportunity-card { background: var(--bg-hover); border: 1px solid var(--border); border-radius: 12px; padding: 16px; cursor: pointer; transition: all 0.2s; }
+.opportunity-card:hover { border-color: var(--primary); transform: translateY(-2px); }
+.opportunity-card.high { border-left: 4px solid #10B981; }
+.opportunity-card.medium { border-left: 4px solid #F59E0B; }
+.opportunity-card.low { border-left: 4px solid #6366F1; }
+.opp-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; }
+.opp-icon { font-size: 24px; }
+.opp-potential { font-size: 10px; padding: 2px 8px; border-radius: 10px; }
+.opp-potential.high { background: rgba(16, 185, 129, 0.2); color: #10B981; }
+.opp-potential.medium { background: rgba(245, 158, 11, 0.2); color: #F59E0B; }
+.opp-potential.low { background: rgba(99, 102, 241, 0.2); color: #6366F1; }
+.opp-title { font-size: 14px; font-weight: 600; margin-bottom: 4px; }
+.opp-product { font-size: 12px; color: var(--text-secondary); margin-bottom: 8px; }
+.opp-insight { font-size: 12px; color: var(--text-secondary); line-height: 1.4; margin-bottom: 10px; }
+.opp-metrics { display: flex; flex-direction: column; gap: 4px; font-size: 11px; color: var(--text-muted); margin-bottom: 10px; }
+.metric { display: flex; align-items: center; gap: 4px; }
+.opp-footer { display: flex; justify-content: space-between; align-items: center; }
+.opp-score { font-size: 12px; font-weight: 600; }
+
+/* Risks Section */
+.risks-section { background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px; padding: 20px; margin-bottom: 24px; }
+.risks-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; }
+.risk-card { background: var(--bg-hover); border: 1px solid var(--border); border-radius: 12px; padding: 16px; border-left: 4px solid var(--border); }
+.risk-card.critical { border-left-color: #EF4444; }
+.risk-card.high { border-left-color: #F59E0B; }
+.risk-card.medium { border-left-color: #6366F1; }
+.risk-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }
+.risk-title { font-size: 13px; font-weight: 600; }
+.risk-level { font-size: 10px; padding: 2px 8px; border-radius: 10px; }
+.risk-level.critical { background: rgba(239, 68, 68, 0.2); color: #EF4444; }
+.risk-level.high { background: rgba(245, 158, 11, 0.2); color: #F59E0B; }
+.risk-level.medium { background: rgba(99, 102, 241, 0.2); color: #6366F1; }
+.risk-description { font-size: 12px; color: var(--text-secondary); margin-bottom: 10px; }
+.risk-impact { font-size: 11px; color: var(--text-muted); margin-bottom: 10px; }
+.impact-label { font-weight: 600; }
+.impact-regions { color: var(--text-secondary); }
+.risk-action { }
+
+/* Trends Grid */
+.trends-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; }
+.trend-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px; padding: 16px; cursor: pointer; transition: all 0.2s; }
+.trend-card:hover { border-color: var(--primary); transform: translateY(-2px); }
+.trend-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }
+.trend-tag { font-size: 10px; padding: 2px 8px; background: var(--bg-hover); border-radius: 10px; color: var(--text-secondary); }
+.trend-heat { font-size: 11px; padding: 2px 8px; border-radius: 10px; display: flex; align-items: center; gap: 4px; }
+.trend-heat.hot { background: rgba(239, 68, 68, 0.2); color: #EF4444; }
+.trend-heat.warm { background: rgba(245, 158, 11, 0.2); color: #F59E0B; }
+.trend-title { font-size: 14px; font-weight: 600; margin-bottom: 8px; }
+.trend-description { font-size: 12px; color: var(--text-secondary); margin-bottom: 10px; }
+.trend-stats { display: flex; gap: 12px; font-size: 11px; color: var(--text-muted); margin-bottom: 10px; }
+.trend-sources { display: flex; flex-wrap: wrap; gap: 6px; }
+.source-tag { font-size: 10px; padding: 2px 8px; background: var(--bg-hover); border-radius: 10px; color: var(--text-secondary); }
+
+/* Monitored List */
+.monitored-list { display: flex; flex-direction: column; gap: 12px; }
+.monitored-item { background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px; padding: 16px; }
+.monitored-item.competitor { border-left: 4px solid #8B5CF6; }
+.monitored-item.market { border-left: 4px solid #6366F1; }
+.monitored-item.product { border-left: 4px solid #10B981; }
+.monitored-item.keyword { border-left: 4px solid #F59E0B; }
+.monitored-item.region { border-left: 4px solid #06B6D4; }
+.item-header { display: flex; align-items: center; gap: 12px; margin-bottom: 10px; }
+.item-type { font-size: 10px; padding: 2px 8px; border-radius: 10px; }
+.item-type.competitor { background: rgba(139, 92, 246, 0.2); color: #8B5CF6; }
+.item-type.market { background: rgba(99, 102, 241, 0.2); color: #6366F1; }
+.item-type.product { background: rgba(16, 185, 129, 0.2); color: #10B981; }
+.item-type.keyword { background: rgba(245, 158, 11, 0.2); color: #F59E0B; }
+.item-type.region { background: rgba(6, 182, 212, 0.2); color: #06B6D4; }
+.item-name { font-size: 13px; font-weight: 600; flex: 1; }
+.item-status { font-size: 10px; padding: 2px 8px; border-radius: 10px; background: rgba(16, 185, 129, 0.2); color: #10B981; }
+.item-content { margin-bottom: 10px; }
+.item-description { font-size: 12px; color: var(--text-secondary); margin-bottom: 6px; }
+.item-metrics { display: flex; gap: 16px; font-size: 11px; color: var(--text-muted); }
+.item-actions { display: flex; gap: 8px; }
+
+/* Reports List */
+.reports-list { display: flex; flex-direction: column; gap: 12px; }
+.report-item { background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px; padding: 16px; cursor: pointer; transition: all 0.2s; }
+.report-item:hover { border-color: var(--primary); }
+.report-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }
+.report-title { font-size: 14px; font-weight: 600; }
+.report-date { font-size: 11px; color: var(--text-muted); }
+.report-content { margin-bottom: 10px; }
+.report-summary { font-size: 12px; color: var(--text-secondary); margin-bottom: 8px; }
+.report-stats { display: flex; gap: 16px; font-size: 11px; color: var(--text-muted); }
+.report-actions { display: flex; gap: 8px; }
+
+/* Modal */
+.modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.7); display: flex; align-items: center; justify-content: center; z-index: 1000; padding: 20px; }
+.modal { background: var(--bg-card); border-radius: 16px; width: 100%; max-width: 600px; max-height: 90vh; overflow: hidden; display: flex; flex-direction: column; }
+.add-monitor-modal { max-width: 500px; }
+.monitor-modal { max-width: 600px; }
+.trend-modal { max-width: 700px; }
+.modal-header { display: flex; justify-content: space-between; align-items: center; padding: 20px; border-bottom: 1px solid var(--border); }
+.modal-title { font-size: 16px; font-weight: 600; display: flex; align-items: center; gap: 8px; }
+.modal-close { width: 32px; height: 32px; background: var(--bg-hover); border: none; border-radius: 8px; color: var(--text-secondary); cursor: pointer; display: flex; align-items: center; justify-content: center; }
+.modal-body { flex: 1; overflow-y: auto; padding: 20px; }
+.modal-footer { display: flex; justify-content: flex-end; gap: 12px; padding: 20px; border-top: 1px solid var(--border); }
+
+/* Form */
+.form-group { margin-bottom: 16px; }
+.form-label { display: block; font-size: 12px; color: var(--text-secondary); margin-bottom: 6px; }
+.form-input, .form-select { width: 100%; padding: 10px 14px; background: var(--bg-dark); border: 1px solid var(--border); border-radius: 8px; color: var(--text-primary); font-size: 13px; }
+.form-input:focus, .form-select:focus { outline: none; border-color: var(--primary); }
+.required { color: var(--danger); }
+.checkbox-group { display: flex; flex-direction: column; gap: 8px; }
+.checkbox-item { display: flex; align-items: center; gap: 8px; cursor: pointer; font-size: 13px; }
+.checkbox-item input { width: 16px; height: 16px; }
+.checkmark { width: 16px; height: 16px; border: 1px solid var(--border); border-radius: 4px; display: flex; align-items: center; justify-content: center; }
+.checkbox-item input:checked ~ .checkmark { background: var(--primary); border-color: var(--primary); color: white; }
+
+/* Settings */
+.settings-section { margin-bottom: 20px; padding-bottom: 20px; border-bottom: 1px solid var(--border); }
+.settings-section h5 { font-size: 13px; font-weight: 600; margin-bottom: 12px; }
+.setting-item { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; }
+.setting-label { font-size: 12px; }
+.toggle-switch { width: 40px; height: 24px; border-radius: 12px; background: var(--bg-hover); border: 1px solid var(--border); cursor: pointer; }
+.monitored-summary { display: flex; flex-direction: column; gap: 8px; }
+.summary-item { display: flex; justify-content: space-between; align-items: center; padding: 8px 12px; background: var(--bg-hover); border-radius: 8px; font-size: 12px; }
+
+/* Trend Controls */
+.trend-controls { display: flex; gap: 12px; margin-bottom: 20px; }
+.trend-chart { height: 200px; background: var(--bg-hover); border-radius: 10px; display: flex; align-items: center; justify-content: center; margin-bottom: 20px; }
+.chart-placeholder { text-align: center; color: var(--text-muted); }
+.chart-placeholder i { font-size: 32px; margin-bottom: 8px; }
+.trend-insights { }
+.trend-insights h5 { font-size: 13px; font-weight: 600; margin-bottom: 12px; }
+.insight-item { display: flex; justify-content: space-between; padding: 8px 12px; background: var(--bg-hover); border-radius: 8px; font-size: 12px; margin-bottom: 8px; }
+.insight-label { color: var(--text-muted); }
+.insight-value { font-weight: 600; }
+
+/* Detail Content */
+.detail-content { }
+.detail-section { margin-bottom: 24px; }
+.detail-section h5 { font-size: 14px; font-weight: 600; margin-bottom: 12px; }
+.info-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; }
+.info-item { display: flex; flex-direction: column; gap: 4px; padding: 12px; background: var(--bg-hover); border-radius: 8px; }
+.info-item .label { font-size: 11px; color: var(--text-muted); }
+.info-item .value { font-size: 14px; font-weight: 600; }
+.info-item .value.high { color: #10B981; }
+.info-item .value.medium { color: #F59E0B; }
+.info-item .value.low { color: #6366F1; }
+.reason-text { font-size: 13px; color: var(--text-secondary); line-height: 1.6; padding: 12px; background: var(--bg-hover); border-radius: 8px; }
+.suggestion-box { display: flex; gap: 12px; padding: 14px; background: rgba(16, 185, 129, 0.1); border: 1px solid rgba(16, 185, 129, 0.2); border-radius: 10px; }
+.suggestion-box i { color: var(--success); font-size: 18px; flex-shrink: 0; }
+.suggestion-box p { font-size: 13px; color: var(--text-secondary); line-height: 1.6; margin: 0; }
+.actions-list { display: flex; flex-direction: column; gap: 8px; }
+.action-item { display: flex; align-items: center; gap: 10px; padding: 10px 12px; background: var(--bg-hover); border-radius: 8px; font-size: 13px; }
+.action-item i { color: var(--success); }
+.action-item.danger i { color: #EF4444; }
+.sources-list { display: flex; flex-wrap: wrap; gap: 8px; }
+.source-tag { font-size: 11px; padding: 4px 10px; background: var(--bg-hover); border-radius: 10px; color: var(--text-secondary); }
+
+/* Toast */
+.toast { position: fixed; bottom: 24px; right: 24px; padding: 12px 20px; background: var(--bg-card); border: 1px solid var(--border); border-radius: 10px; display: flex; align-items: center; gap: 10px; font-size: 13px; box-shadow: 0 4px 20px rgba(0,0,0,0.3); z-index: 2000; }
+.toast.success { border-color: var(--success); }
+.toast.success i { color: var(--success); }
+.toast-enter-active, .toast-leave-active { transition: all 0.3s ease; }
+.toast-enter-from, .toast-leave-to { opacity: 0; transform: translateY(20px); }
+
+/* Detail Modal Styles */
+.detail-modal { max-width: 700px; }
+.detail-content { }
+.detail-section { margin-bottom: 24px; }
+.detail-section h5 { font-size: 14px; font-weight: 600; margin-bottom: 12px; }
+.info-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; }
+.info-item { display: flex; flex-direction: column; gap: 4px; padding: 12px; background: var(--bg-hover); border-radius: 8px; }
+.info-item .label { font-size: 11px; color: var(--text-muted); }
+.info-item .value { font-size: 14px; font-weight: 600; }
+.info-item .value.high { color: #10B981; }
+.info-item .value.medium { color: #F59E0B; }
+.info-item .value.low { color: #6366F1; }
+.reason-text { font-size: 13px; color: var(--text-secondary); line-height: 1.6; padding: 12px; background: var(--bg-hover); border-radius: 8px; }
+.suggestion-box { display: flex; gap: 12px; padding: 14px; background: rgba(16, 185, 129, 0.1); border: 1px solid rgba(16, 185, 129, 0.2); border-radius: 10px; }
+.suggestion-box i { color: var(--success); font-size: 18px; flex-shrink: 0; }
+.suggestion-box p { font-size: 13px; color: var(--text-secondary); line-height: 1.6; margin: 0; }
+.actions-list { display: flex; flex-direction: column; gap: 8px; }
+.action-item { display: flex; align-items: center; gap: 10px; padding: 10px 12px; background: var(--bg-hover); border-radius: 8px; font-size: 13px; }
+.action-item i { color: var(--success); }
+.action-item.danger i { color: #EF4444; }
+.sources-list { display: flex; flex-wrap: wrap; gap: 8px; }
+.source-tag { font-size: 11px; padding: 4px 10px; background: var(--bg-hover); border-radius: 10px; color: var(--text-secondary); }
+
+/* Responsive */
+@media (max-width: 1400px) {
+  .stats-row { grid-template-columns: repeat(3, 1fr); }
+  .overview-grid { grid-template-columns: 1fr; }
+  .opportunities-grid { grid-template-columns: repeat(2, 1fr); }
+  .trends-grid { grid-template-columns: 1fr; }
+}
+
+@media (max-width: 992px) {
+  .stats-row { grid-template-columns: repeat(2, 1fr); }
+  .opportunities-grid { grid-template-columns: 1fr; }
+}
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 839 - 21
ui/smarttrade-platform/src/views/MarketingView.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 739 - 150
ui/smarttrade-platform/src/views/RiskView.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 1197 - 5
ui/smarttrade-platform/src/views/SettingsView.vue


Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.