Files
sub-store/docs/frontend-plan.md
T

636 lines
25 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Sub-Store 前端功能规划文档
> 基于原项目 `ref/sub-store-cloudflare/frontend` 的交互分析,规划 Go 重构版前端。
> 核心原则:**上下布局,PC 优先**,弃用移动端 swipe/popup/floating-button 交互模式。
---
## 1. 原前端交互痛点分析
### 1.1 移动端优先的架构问题
| 痛点 | 原项目实现 | PC 上的问题 |
|------|-----------|-------------|
| **Swipe 手势操作** | `SubListItem``nut-swipe` 左/右滑动暴露 复制/下载/删除 按钮 | 桌面端无触屏,swipe 不触发,操作隐藏在不可见区域 |
| **底部 TabBar** | `TabBar.vue` 3 个 tab 固定底部,768px+ 才切换为侧边栏 | PC 上侧边栏是浮动定位 (`position: fixed`),非真正双栏布局 |
| **底部 Popup 弹窗** | 添加订阅、模板编辑、目标选择均用 `nut-popup position="bottom"` | 占满下半屏,PC 上极不协调,无法利用横向空间 |
| **浮动按钮** | `nut-drag` 可拖拽的刷新/添加按钮,固定在屏幕边缘 | PC 上浮动按钮遮挡内容,拖拽行为多余 |
| **单列滚动列表** | 源和集合在同一个页面上下排列,tag 筛选条横排 | PC 宽屏下大量留白,列表项信息密度低 |
| **编辑器 Tab 横滚** | SubEditor 的 display/content/actions 三个 tab 横向排列 | PC 上应该用左右分栏或垂直 Tab |
| **SubEditor 巨型组件** | 单文件 2174 行,混合 source/collection 两种编辑逻辑 | 维护困难,状态管理混乱 |
| **全屏预览覆盖** | Preview.vue 用 `position: fixed; inset: 0` 全屏覆盖 | PC 上应该是侧面板或分栏,不离开当前上下文 |
| **无键盘快捷键** | 所有操作只能点击 | PC 用户期望 Ctrl+S 保存、Esc 关闭等 |
| **无右键菜单** | 操作按钮散落在列表项内部 | PC 用户期望右键弹出操作菜单 |
| **Tools 页面粗糙** | 转换器/分享/回收站堆在一个页面,原生 HTML 控件 | 功能孤立,与主流程割裂 |
### 1.2 信息架构问题
- 源 (Source) 和集合 (Collection) 混在同一列表,靠标题区分,概念不清
- 模板管理藏在 "My" 设置页,与集合编辑中的模板选择脱节
- 分享 (Share) 和回收站 (Recycle Bin) 被丢进 Tools 工具页,而非关联到对应资源
- 预览/对比需要跳路由或弹全屏,丢失列表上下文
- 下载链接生成操作分散:列表项有复制链接,编辑页有链接生成,Tools 有分享创建
---
## 2. 整体布局设计:上下布局
```
┌──────────────────────────────────────────────────────────────────┐
│ TopBar (h: 48px) │
│ [Logo] Sub-Store [搜索框] [刷新] [主题] [语言] [设置] │
├──────────────────────────────────────────────────────────────────┤
│ NavBar (h: 40px) │
│ [订阅源] [集合] [模板] [工具] [回收站] [+ 新建 ▾] │
├──────────────────────────────────────────────────────────────────┤
│ │
│ Main Content Area (flex: 1, overflow: auto) │
│ │
│ ┌──────────────────────┐ ┌──────────────────────────────────┐ │
│ │ Left Panel │ │ Right Panel / Detail │ │
│ │ (列表区, 固定宽度) │ │ (编辑/预览/详情, flex: 1) │ │
│ │ w: 360px │ │ │ │
│ │ │ │ │ │
│ │ [搜索] [筛选 tag] │ │ │ │
│ │ ┌─────────────────┐ │ │ │ │
│ │ │ Source/Col Card │ │ │ │ │
│ │ ├─────────────────┤ │ │ │ │
│ │ │ Source/Col Card │ │ │ │ │
│ │ ├─────────────────┤ │ │ │ │
│ │ │ ... │ │ │ │ │
│ │ └─────────────────┘ │ │ │ │
│ └──────────────────────┘ └──────────────────────────────────┘ │
│ │
├──────────────────────────────────────────────────────────────────┤
│ StatusBar (h: 28px, 可选) │
│ ● 已连接 · 12 源 · 3 集合 · v1.0.0 [最后同步: 2分钟前] │
└──────────────────────────────────────────────────────────────────┘
```
### 2.1 布局规则
- **TopBar**: 始终固定顶部,包含全局搜索、全局操作(刷新/主题/语言/设置)
- **NavBar**: 水平标签栏,切换主功能区域,当前页高亮
- **Main Content**: 根据当前 Tab 显示不同内容,内部可左右分栏
- **StatusBar**: 底部状态栏,显示连接状态/数据统计/同步时间(可选关闭)
- **最小宽度**: 1024px(PC 优先),窄屏降级为单列+抽屉
### 2.2 响应式策略
| 宽度 | 布局 | 说明 |
|------|------|------|
| ≥1280px | 双栏 (列表+详情) | 详情区常驻右侧 |
| 1024-1279px | 双栏 (列表+详情) | 列表区缩窄至 320px |
| 768-1023px | 单栏 + 右抽屉 | 详情从右侧滑入抽屉 |
| <768px | 单栏 + 全屏推入 | 详情全屏推入(移动端兼容) |
---
## 3. 功能模块规划
### 3.1 订阅源管理 (Sources)
#### 3.1.1 源列表 (Left Panel)
**功能点**:
- 卡片式列表,每张卡片显示:名称、类型徽章 (remote/local)、启用开关、流量摘要、标签
- 顶部工具栏:搜索框(实时过滤名称/URL)、标签筛选条、排序按钮
- 列表项右键菜单:编辑、复制链接、预览、克隆、删除、创建分享
- 拖拽排序(HTML5 drag API,非 vuedraggable touch 模式)
- 选中状态:单击选中(高亮),双击打开编辑
- 多选:Ctrl+Click 多选,批量启用/禁用/删除/导出
- 列表底部:显示总数和已加载数
**卡片信息层次**:
```
┌──────────────────────────────────────┐
│ [●] 机场A [remote] │
│ https://example.com/sub... [⚡] │
│ ↑ 12.3GB ↓ 89.7GB / 100GB │
│ [HK] [JP] [⋮] │
└──────────────────────────────────────┘
```
#### 3.1.2 源编辑 (Right Panel / Drawer)
**布局**: 垂直分区,非 Tab 切换
**区域 1 - 基本信息**:
- ID(创建后只读)、显示名、备注、标签(逗号分隔或 chip 输入)
- 图标 URL、图标彩色开关
**区域 2 - 数据源**:
- 类型切换:Remote / Localradio button 横排)
- Remote: URL 文本域(支持多行多 URL)、UA 输入、passThrough UA 开关、subUserinfo 输入
- Local: 全屏代码编辑器按钮 + 文件导入按钮 + 内容验证按钮 + CodeMirror 编辑器(内嵌)
**区域 3 - 节点处理** (Filter Pipeline):
- 可视化流水线编辑器,每个 filter 是一个可折叠卡片
- 拖拽排序 filter 执行顺序
- 每个 filter 类型有专属配置表单:
- **Region Filter**: 复选框组 (HK/JP/SG/US/UK/DE/KR/TW)keep/exclude 开关
- **Type Filter**: 复选框组 (ss/vmess/vless/trojan/...)keep/exclude 开关
- **Regex Filter**: 正则输入框(支持多个),keep/exclude 开关,字段选择
- **Regex Rename**: 表格式输入 (表达式 → 替换为)
- **Regex Delete**: 正则输入框(支持多个),字段选择
- **Regex Sort**: 优先级正则列表 + 方向选择
- **Handle Duplicate**: 去重字段选择、动作 (delete/rename)、后缀模板、连接符、位置
- **Sort**: 方向选择 (asc/desc/random)
- **Flag Operator**: 模式 (add/remove)、台湾旗配置
- **Quick Setting**: UDP/TFO/scert/useless/vmess-aead 下拉选择
- **Resolve Domain**: DNS provider 选择、记录类型、过滤模式、自定义 URL、EDNS、并发数
- **Script**: 脚本选择下拉(从注册表加载)、参数表单(根据 metadata.parameters 动态生成)
- 新增 filter 按钮 → 下拉菜单选择类型
- 每个 filter 可启用/禁用(开关)、删除(按钮)
**区域 4 - 操作栏** (底部固定):
- [预览] [对比] [保存] [另存为]
- Ctrl+S 快捷键保存
#### 3.1.3 源预览
**功能**: 调用 `/api/preview/source` 显示原始节点 vs 处理后节点
**布局**: 右侧面板内的分栏视图
- 左栏:原始节点列表(可搜索、可排序)
- 右栏:处理后节点列表
- 顶部:节点数量统计 (原始 N → 处理后 M, 跳过 K)
- 每个节点显示:名称、类型、服务器:端口、协议详情
- 支持展开节点查看完整字段
#### 3.1.4 源下载链接
**功能**: 生成各目标的下载链接
**交互**: 点击列表项的"复制链接"按钮 → 弹出链接面板(右侧抽屉或 popover)
- 目标选择:13 种目标客户端(下拉或 grid 按钮)
- 链接显示:只读文本框 + 复制按钮
- 二维码生成(可选)
- 临时覆盖选项:URL/content/UA 输入框(展开式高级选项)
---
### 3.2 集合管理 (Collections)
#### 3.2.1 集合列表 (Left Panel)
**与源列表同结构**,但卡片额外显示:
- 包含的源数量/名称摘要
- 关联的模板名
- ignoreFailed 状态徽章
#### 3.2.2 集合编辑 (Right Panel / Drawer)
**区域 1 - 基本信息**: 同源编辑
**区域 2 - 集合配置**:
- 模板选择:下拉选择(内置 6 套 + 自定义),旁边"管理模板"链接
- 源选择器:双栏穿梭框 (Transfer) 布局
- 左栏:所有可用源(可搜索、可按 tag 筛选)
- 右栏:已选源(可拖拽排序)
- 全选/反选/清空按钮
- 空选择 = 包含所有 enabled 源(需明确提示)
- ignoreFailed 切换:下拉选择 (跳过失败源 / 全部要求成功)
**区域 3 - 节点处理**: 同源编辑的 Filter Pipeline(集合级 filter
**区域 4 - 操作栏**: 同源编辑
#### 3.2.3 集合预览
**功能**: 调用 `/api/preview/collection`,显示合并后的节点
**布局**: 同源预览,但显示多源合并信息
- 额外显示:各源的节点数量、失败源列表
- 可按来源分组显示
---
### 3.3 模板管理 (Templates)
**独立 Tab 页**,非隐藏在设置中。
#### 3.3.1 模板列表
- 表格布局:名称、目标客户端、类型 (内置/自定义)、操作
- 内置模板:只读,可查看不可编辑/删除
- 自定义模板:编辑、删除、克隆
- 新建按钮、从文件导入按钮 (JSON/YAML)
#### 3.3.2 模板编辑
**布局**: 右侧面板或模态对话框
**区域 1 - 元信息**:
- ID(创建后只读)、名称、目标客户端选择
**区域 2 - 配置编辑器**:
- CodeMirror JSON/YAML 编辑器(全宽)
- 语法高亮、格式化按钮、校验按钮
- 可视化预览(可选):解析 proxy-groups 和 rules,以树形图展示
**区域 3 - 内置模板预览**:
- 点击内置模板 → 只读模式显示配置 + 结构说明
---
### 3.4 工具 (Tools)
**独立 Tab 页**,包含三大工具,内部用子 Tab 或卡片分区。
#### 3.4.1 格式转换器
**功能**: 一次性代理/规则转换 (`/api/proxy/parse`, `/api/rule/parse`)
**布局**: 左右分栏
- 左栏:输入
- 类型切换:代理转换 / 规则转换
- 目标选择:下拉
- 输入文本域(支持粘贴 URI/YAML/JSON
- 从文件导入按钮
- [转换] 按钮
- 右栏:输出
- 输出文本域(只读)
- 统计信息:解析 N / 输出 M / 跳过 K
- 复制按钮、下载按钮
#### 3.4.2 分享管理 (Shares)
**功能**: 创建/管理 download grants
**布局**: 列表 + 表单
**列表区**:
- 表格:资源类型、资源 ID、目标、过期时间、状态、操作
- 操作:启用/禁用切换、删除、复制链接
- 按资源类型筛选
**创建表单** (右侧面板或顶部展开):
- 资源类型:source / collection
- 资源 ID:下拉选择(从现有数据加载)
- 目标:下拉(auto 或指定)
- 过期时间:数字 + 单位(小时/天),或永不过期
- [创建] → 生成 token + URL,显示并可复制
#### 3.4.3 节点信息查询
**功能**: 调用 `/api/utils/node-info` 查询 IP 信息
**布局**: 简单表单 + 结果卡片
- 输入:服务器地址
- 结果:IP、国家、地区、城市、连接信息
---
### 3.5 回收站 (Recycle Bin)
**独立 Tab 页**
**布局**: 表格 + 详情抽屉
**列表**:
- 表格:资源类型、资源 ID、删除时间、操作
- 操作:恢复、彻底删除
- 按资源类型筛选
- 显示总数 / 上限 50 提示
**恢复逻辑**:
- 恢复时检查 ID 冲突(后端已处理,前端需展示友好错误)
- 恢复成功后刷新对应列表
---
### 3.6 设置 (Settings)
**模态对话框或独立全屏页**,非当前 My.vue 的卡片堆叠。
**布局**: 左侧分类菜单 + 右侧设置表单
**分类**:
#### 3.6.1 请求设置
- 默认 User-Agent
- 默认流量 User-Agent
- 默认超时 (ms)
- 后端请求并发数
- 并发等待时间 (ms)
- 远程缓存 TTL (s)
- 缓存错误降级开关
- 节点信息 API URL
#### 3.6.2 外观设置
- 主题选择(8 套主题)
- 简单模式开关
- 图标显示开关
- 图标彩色开关
- 列表视图模式(单列/双列)
- 浮动按钮开关(移动端兼容用)
- 编辑器分组模式
#### 3.6.3 数据管理
- 导出备份(下载 JSON
- 导入备份(上传 JSON
- Admin Token 设置
- 下载 Token 显示
#### 3.6.4 关于
- 后端类型、版本、存储引擎
- GitHub 链接
- 文档链接
---
## 4. 全局交互设计
### 4.1 键盘快捷键
| 快捷键 | 功能 |
|--------|------|
| `Ctrl+K` | 聚焦全局搜索 |
| `Ctrl+N` | 新建(当前 Tab 对应类型) |
| `Ctrl+S` | 保存当前编辑 |
| `Ctrl+Shift+S` | 另存为 |
| `Ctrl+P` | 预览当前选中项 |
| `Ctrl+D` | 复制下载链接 |
| `Delete` | 删除选中项(需确认) |
| `Esc` | 关闭面板/对话框/取消选中 |
| `↑↓` | 列表中上下移动选中 |
| `Enter` | 打开选中项编辑 |
| `Space` | 切换选中项启用/禁用 |
### 4.2 右键菜单
**列表项右键**:
- 编辑
- 预览节点
- 复制下载链接 ▸ (子菜单:mihomo / sing-box / surge / ...)
- 创建分享
- 克隆
- 导出
- 删除
**空白区域右键**:
- 新建源
- 新建集合
- 粘贴导入
- 刷新列表
### 4.3 拖放操作
- **列表内拖拽**: 排序(显示插入位置指示线)
- **跨列表拖拽**: 源拖入集合(自动添加到集合的 sourceIds)
- **文件拖入**: 拖入 JSON/YAML 文件 → 导入备份或模板
### 4.4 通知系统
- **Toast**: 操作成功/失败(右上角,自动消失)
- **通知中心**: 右上角铃铛图标,记录历史通知
- **内联状态**: 列表项上的流量加载状态、同步状态
### 4.5 确认对话框
- 删除操作:模态确认框,显示资源名称
- 导入覆盖:模态确认框,显示将影响的数据统计
- 离开未保存编辑:路由守卫拦截,提示保存
---
## 5. 数据流与状态管理
### 5.1 Store 结构(Pinia
```
stores/
├── global.ts # 全局状态:环境信息、连接状态、主题
├── sources.ts # 源列表、CRUD、排序
├── collections.ts # 集合列表、CRUD、排序
├── templates.ts # 模板列表、CRUD
├── shares.ts # 分享列表、CRUD
├── recycleBin.ts # 回收站列表、恢复/删除
├── settings.ts # 应用设置
├── scripts.ts # 脚本注册表元数据
└── notify.ts # 通知队列
```
### 5.2 API 层
保持原项目的 axios 拦截器模式,但简化适配层:
```typescript
// api/client.ts — axios 实例 + 拦截器
// api/sources.ts — 源 CRUD
// api/collections.ts — 集合 CRUD
// api/templates.ts — 模板 CRUD
// api/shares.ts — 分享 CRUD
// api/recycle.ts — 回收站
// api/settings.ts — 设置 + 导出/导入
// api/tools.ts — 转换器、节点信息
// api/env.ts — 环境
```
**关键简化**: 原项目的 `api/app/index.ts` (705 行) 包含大量 UI ↔ API 的 filter 格式转换逻辑 (`toApiFilters` / `fromApiFilters` / `toActionMeta`)。重构版应将此逻辑移入编辑器组件的 model 层,API 层只做纯 HTTP 调用。
### 5.3 Filter Pipeline 数据模型
```typescript
// 编辑器内部的 UI 模型(与原项目 UiProcess 一致)
type FilterAction = {
id: string; // 前端 UUID
type: ActionType; // 'Region Filter' | 'Type Filter' | ...
args: Record<string, any>;
customName?: string;
disabled: boolean;
};
// 提交到后端时转换为 FilterRule[]
// 从后端加载时转换为 FilterAction[]
// 转换逻辑封装在 composables/useFilterTransform.ts
```
---
## 6. 技术选型建议
### 6.1 框架与 UI 库
| 组件 | 原项目 | 重构建议 | 理由 |
|------|--------|----------|------|
| 框架 | Vue 3 | Vue 3 | 保持一致 |
| UI 库 | NutUI (移动端) | Naive UI / PrimeVue | PC 优先,需数据表格/穿梭框/树形组件 |
| 状态管理 | Pinia | Pinia | 保持一致 |
| 路由 | Vue Router | Vue Router | 保持一致 |
| HTTP | Axios | Axios 或 ofetch | 保持 Axios 即可 |
| 代码编辑器 | CodeMirror 5 | CodeMirror 6 / Monaco | CM6 更现代,Monaco 更强大 |
| 拖拽 | vuedraggable (SortableJS) | 原生 HTML5 Drag API + vue-draggable-plus | PC 用原生拖拽更可靠 |
| i18n | vue-i18n | vue-i18n | 保持一致 |
| 图标 | Font Awesome + NutUI Icon | Lucide / Tabler Icons | 更现代的图标集 |
| 样式 | SCSS + CSS 变量 | UnoCSS / Tailwind CSS | 原子化 CSS,开发更快 |
| 主题 | 8 套主题 (SCSS 变量) | CSS 变量 + 暗色模式 | 简化主题系统 |
### 6.2 组件库选择考量
**Naive UI** (推荐):
- Vue 3 原生,TypeScript 友好
- 内置数据表格、穿梭框、树形、抽屉、右键菜单
- 暗色模式原生支持
- 中文社区活跃
**PrimeVue**:
- 组件最全(含 CodeMirror 集成)
- 主题系统强大
- 但体积较大
---
## 7. 页面路由规划
```
/ → 重定向到 /sources
/sources → 订阅源管理(列表 + 右侧详情/编辑)
/sources/:id → 订阅源管理(选中指定源,右侧显示编辑)
/collections → 集合管理
/collections/:id → 集合管理(选中指定集合)
/templates → 模板管理
/templates/:id → 模板管理(选中指定模板)
/tools → 工具(默认显示转换器)
/tools/converter → 格式转换器
/tools/shares → 分享管理
/tools/node-info → 节点信息查询
/recycle-bin → 回收站
/settings → 设置(模态对话框,非独立路由)
/preview/:type/:id → 预览(可选独立路由,用于书签/分享)
```
**路由模式**:
- 列表+详情使用嵌套路由,详情区为子路由 `<router-view>`
- 预览使用 query 参数 `?preview=true` 或子路由,避免全屏覆盖
---
## 8. 功能优先级
### P0 — MVP 必须实现
1. 上下布局框架(TopBar + NavBar + Main + StatusBar
2. 订阅源列表 + 编辑(基本表单 + URL/Content + Filter Pipeline
3. 集合列表 + 编辑(源选择器 + 模板选择 + Filter Pipeline
4. 源/集合预览(原始 vs 处理后节点对比)
5. 下载链接生成 + 复制
6. 模板列表 + 查看(内置只读)
7. 设置(请求设置 + Admin Token
8. 导出/导入备份
9. 键盘快捷键(Ctrl+S, Ctrl+K, Esc
10. 暗色模式
### P1 — 增强体验
1. 模板创建/编辑(CodeMirror 编辑器)
2. 分享管理(创建/列表/启停/删除)
3. 回收站(列表/恢复/彻底删除)
4. 格式转换器工具
5. 节点信息查询工具
6. 右键菜单
7. 拖拽排序 + 跨列表拖拽
8. 多选批量操作
9. 全局搜索(跨类型搜索源/集合/模板)
### P2 — 高级功能
1. 脚本参数动态表单
2. 节点信息内联展示(预览中展开节点详情)
3. 拖入文件导入
4. 二维码生成
5. 通知中心
6. 自定义主题
7. 移动端响应式降级
---
## 9. 与后端 API 的对接
### 9.1 API 端点映射
| 前端功能 | 后端 API | 方法 |
|----------|----------|------|
| 源列表 | `/api/sources` | GET |
| 创建源 | `/api/sources` | POST |
| 更新源 | `/api/sources/:name` | PATCH |
| 删除源 | `/api/sources/:name` | DELETE |
| 排序源 | `/api/sources` (PUT) 或 `/api/sort/sources` (POST) | PUT/POST |
| 集合列表 | `/api/collections` | GET |
| 创建集合 | `/api/collections` | POST |
| 更新集合 | `/api/collections/:name` | PATCH |
| 删除集合 | `/api/collections/:name` | DELETE |
| 排序集合 | `/api/collections` (PUT) 或 `/api/sort/collections` (POST) | PUT/POST |
| 模板列表 | `/api/templates` | GET |
| 创建模板 | `/api/templates` | POST |
| 更新模板 | `/api/templates/:name` | PATCH |
| 删除模板 | `/api/templates/:name` | DELETE |
| 预览源 | `/api/preview/source` | POST |
| 预览集合 | `/api/preview/collection` | POST |
| 下载链接 | `/api/link/source/:name`, `/api/link/collection/:name` | GET |
| 流量信息 | `/api/source/flow/:name` | GET |
| 转换器 | `/api/proxy/parse`, `/api/rule/parse` | POST |
| 分享列表 | `/api/shares` | GET |
| 创建分享 | `/api/shares` | POST |
| 更新分享 | `/api/shares/:id` | PATCH |
| 删除分享 | `/api/shares/:id` | DELETE |
| 回收站列表 | `/api/recycle-bin` | GET |
| 恢复 | `/api/recycle-bin/:id/restore` | POST |
| 彻底删除 | `/api/recycle-bin/:id` | DELETE |
| 设置 | `/api/settings` | GET/PATCH |
| 导出 | `/api/storage` | GET |
| 导入 | `/api/storage` | POST |
| 环境 | `/api/env` | GET |
| 脚本列表 | `/api/scripts` | GET |
| 节点信息 | `/api/utils/node-info` | POST |
### 9.2 鉴权
- 所有 `/api/*` 请求携带 `Authorization: Bearer <token>`
- Token 存储在 localStorage,可通过 URL `?token=` 参数初始化
- 401 响应 → 清除 Token,显示重新输入界面
### 9.3 响应格式适配
统一响应包络:
```json
{ "status": "success", "data": <T> }
{ "status": "failed", "error": { "code": <number>, "message": <string> } }
```
前端 axios 拦截器:
- 成功:解包 `response.data.data`
- 失败:提取 `response.data.error.message`Toast 通知
---
## 10. 原项目功能对照清单
| 原项目功能 | 重构状态 | 说明 |
|-----------|----------|------|
| 源列表 + swipe 操作 | ✅ 保留,改右键菜单 | 弃用 swipe |
| 集合列表 + swipe 操作 | ✅ 保留,改右键菜单 | 弃用 swipe |
| 源编辑 (SubEditor) | ✅ 保留,拆分组件 | 2174 行 → 拆为 3-4 个子组件 |
| 集合编辑 | ✅ 保留,穿梭框选源 | 弃用 checkbox+draggable |
| Filter Pipeline 编辑 | ✅ 保留,改进交互 | 可视化流水线 + 专属配置表单 |
| 预览/对比 | ✅ 保留,右侧面板 | 弃用全屏覆盖 |
| 下载链接 | ✅ 保留,popover | 弃用 PreviewPanel 弹窗 |
| 模板管理 | ✅ 提升为独立 Tab | 从 My 页移出 |
| 设置 (My.vue) | ✅ 保留,改模态/独立页 | 分类菜单 + 表单 |
| 备份导出/导入 | ✅ 保留 | 移入设置-数据管理 |
| 工具页 | ✅ 保留,增强 | 转换器+分享+节点信息 |
| 回收站 | ✅ 提升为独立 Tab | 从 Tools 移出 |
| 分享管理 | ✅ 提升为 Tools 子页 | 从 Tools 移出 |
| 浮动按钮 | ❌ 移除 | PC 不需要 |
| 底部 TabBar | ❌ 移除 | 改为顶部 NavBar |
| 底部 Popup | ❌ 移除 | 改为右侧抽屉/模态 |
| 主题系统 | ✅ 保留,简化 | 8 套 → 暗色/亮色 + 配色变量 |
| i18n | ✅ 保留 | 中/英双语 |
| 标签筛选 | ✅ 保留 | 列表顶部 chip 筛选 |
| 拖拽排序 | ✅ 保留,原生 HTML5 | 弃用 vuedraggable |
| CodeMirror 编辑 | ✅ 保留,升级 CM6 | 本地内容/模板编辑 |
| 脚本参数 | ✅ 保留,动态表单 | 根据 metadata.parameters 生成 |
| 流量信息 | ✅ 保留 | 卡片内联显示 |
| 节点信息查询 | ✅ 保留 | Tools 子功能 |