Skip to main content

使用 Zero-Config Code Flow 开发

简介:零配置,一键搞定 Claude Code & Codex 环境设置 - 支持中英文双语配置、智能代理系统和个性化 AI 助手
具体安装可以移步对应的仓库地址,有具体的文档:https://github.com/UfoMiao/zcf/blob/main/README\_zh-CN.md 或者参考这篇文章:https://linux.do/t/topic/836692

使用 zcf:workflow 开发

# 先进入 claude 或者 codex
claude

# 使用工作流
/zcf:workflow 你想做什么
额,先不来上面的,先来简单的问候一下
> 你好

 你好!我是 Claude Code,一个专业的编程助手。我可以帮助你:

  - 📝 编写、阅读和修改代码
  - 🔍 搜索和分析代码库
  - 🐛 调试和修复问题
  - 🏗️ 设计架构和实现功能
  - 📦 管理项目和依赖
  - 🔧 执行系统命令和工具

  我会遵循软件工程最佳实践(SOLID、KISS、DRY、YAGNI),并在执行危险操作前征求你的确认。

  当前工作目录是 /Users/wxvirus/AiProjects/goals。

  请问有什么可以帮到你的?
这是我选择了默认的output-style之后的回答,挺不错的。
好了,继续开发,我就想自己搞一个自己的前端后台,可以看到:https://github.com/UfoMiao/zcf/blob/main/templates/claude-code/zh-CN/workflow/sixStep/commands/workflow.md 这个使用方法就是
/zcf:workflow <任务描>
如果你的任务描述够长,可以先在文档编辑器里写完,在粘贴上去即可。
/zcf:workflow 我想要开发一个vue3的一个后台管理系统,登录能够添加滑动验证码;布局有2种方式: 经典左侧菜单布局、左侧
双栏布局;可以切换主题色;可以全屏;可以切换暗色主体和亮色主体;可以设置左侧菜单的宽度;要有标签页管
理;系统的logo和名称以及title等SEO都是可配置的;最终再实现一个经典的权限管理,粒度到按钮级别,数据使
用mock数据;开发使用monorepo的管理方式,定制前端开发的规则和代码格式化和类型校验,使用typescript
> /zcf:workflow is running…
我想要开发一个vue3的一个后台管理系统,登录能够添加滑动验证码;布局有2种方式: 经典左侧菜单布局、左侧
双栏布局;可以切换主题色;可以全屏;可以切换暗色主体和亮色主体;可以设置左侧菜单的宽度;要有标签页管
理;系统的logo和名称以及title等SEO都是可配置的;最终再实现一个经典的权限管理,粒度到按钮级别,数据使
用mock数据;开发使用monorepo的管理方式,定制前端开发的规则和代码格式化和类型校验,使用typescript

 [模式:研究] - 需求分析与完整性评估

  📊 需求完整性评分

  让我对您的需求进行系统性评估:

  评分分析

  | 维度    | 得分  | 说明                                 |
  |-------|-----|------------------------------------|
  | 目标明确性 | 3/3 | 目标清晰:开发Vue3后台管理系统,功能点明确          |
  | 预期结果  | 2/3 | ⚠️ 基本明确功能列表,但缺少具体的业务场景和用户角色定义      |
  | 边界范围  | 2/2 | 范围清晰:monorepo架构、使用mock数据、按钮级权限   |
  | 约束条件  | 1/2 | ⚠️ 技术栈明确(Vue3+TS),但缺少性能指标、浏览器兼容性要求 |

  总分: 8/10 需求基本完整,可以进入下一阶段

  ---
  🔍 需求解析

  核心功能模块(已明确)

 1. 认证模块: 登录 + 滑动验证码
  2. 布局系统: 经典左侧菜单布局、左侧双栏布局
  3. 主题系统: 主题色切换、暗色/亮色模式、左侧菜单宽度配置
  4. UI交互: 全屏功能、标签页管理
  5. 系统配置: Logo、名称、Title等SEO可配置
  6. 权限系统: 按钮级别RBAC权限控制
  7. 数据层: Mock数据
  8. 工程化: Monorepo + TypeScript + 代码规范

  ---
 建议补充的细节(可选)

  为了提供更精准的方案,建议补充以下信息:

  1. 业务场景相关

  - 用户角色: 需要几种角色?(建议:超级管理员、管理员、普通用户)
  - 权限粒度: 按钮级权限的典型场景?(如:新增、编辑、删除、导出等)
  - 菜单层级: 最多支持几级菜单?(建议:2-3级)

  2. 技术约束相关

  - 浏览器兼容: 需要支持哪些浏览器?(建议:Chrome/Edge/Firefox最新2个版本)
  - 性能指标: 首屏加载时间要求?(建议:<2s)
  - 包管理器: pnpm/yarn/npm?(monorepo推荐pnpm)

  3. 开发规范相关

  - UI组件库: 是否有偏好?(建议:Element Plus、Ant Design Vue、Naive UI)
  - 状态管理: Pinia还是Vuex?(建议:Pinia,Vue3官方推荐)
  - HTTP客户端: axios还是fetch?(建议:axios)

  ---
  🎯 我的建议(基于最佳实践)

  如果您不确定上述细节,我将基于以下假设继续:

  | 项目      | 默认选择                              | 理由                    |
  |---------|-----------------------------------|-----------------------|
  | 包管理器    | pnpm                              | monorepo最佳选择,节省磁盘空间   |
  | UI组件库   | Element Plus                      | Vue3生态成熟,文档完善         |
  | 状态管理    | Pinia                             | Vue3官方推荐,TypeScript友好 |
  | HTTP客户端 | axios                             | 功能完善,拦截器支持好           |
  | 构建工具    | Vite                              | Vue3官方推荐,构建速度快        |
  | 代码规范    | ESLint + Prettier + Stylelint     | 业界标准                  |
  | Git规范   | Husky + Commitlint                | 提交质量保证                |
  | 用户角色    | 超级管理员、管理员、普通用户                    | 覆盖常见场景
  |
  | 浏览器兼容   | Chrome 90+, Edge 90+, Firefox 88+ | 覆盖95%+用户              |

  ---
  📋 需求确认清单

  已明确的需求:
  - Vue3 + TypeScript
  - Monorepo架构
  - 2种布局方式
  - 主题系统(主题色、明暗模式、菜单宽度)
  - 登录 + 滑动验证码
  - 权限管理(按钮级)
  - Mock数据
  - 标签页管理
  - 全屏功能
  - SEO配置

  待确认的选项:
  - ⚠️ 是否接受我的技术栈建议?
  - ⚠️ 是否需要补充上述业务场景细节?

  ---
  🤔 请您确认

  选项1: 接受我的技术栈建议,直接进入【构思阶段】设计方案

  选项2: 先补充上述业务场景和技术约束细节,再进入下一阶段

  选项3: 修改我的某些技术选型建议

  请告诉我您的选择,或直接说"继续"我将按默认建议进入构思阶段。
我直接选择继续
 [模式:构思] - 技术方案设计

  🎨 方案对比与评估

  我为您设计了 3套完整的技术方案,每套方案都能满足您的需求,但在架构复杂度、开发效率、扩展性等方面各有侧重。

  ---
  📦 方案1:现代化轻量级方案(推荐)

  核心技术栈

  架构模式: Monorepo (pnpm workspace)
  构建工具: Vite 5.x
  UI框架: Element Plus 2.x
  状态管理: Pinia 2.x
  路由: Vue Router 4.x
  HTTP: axios + 请求拦截器
  验证码: vue3-puzzle-vcode (轻量级滑动验证组件)
  Mock: vite-plugin-mock
  代码规范: ESLint 9.x + Prettier + Stylelint
  类型检查: TypeScript 5.x + vue-tsc
  提交规范: Husky + Commitlint + lint-staged
  CSS方案: UnoCSS (原子化CSS)
  图标: @iconify/vue (统一图标解决方案)

  Monorepo结构

  vue3-admin-monorepo/
  ├── packages/
   ├── admin/              # 主应用
   ├── src/
   ├── layouts/    # 布局组件
   ├── views/      # 页面
   ├── components/ # 业务组件
   ├── router/     # 路由配置
   ├── stores/     # Pinia状态
   ├── api/        # API接口
   ├── mock/       # Mock数据
   ├── hooks/      # 组合式函数
   ├── utils/      # 工具函数
   └── types/      # TypeScript类型
   ├── public/
   ├── vite.config.ts
   └── package.json

   ├── shared/             # 共享包
   ├── src/
   ├── constants/  # 常量
   ├── types/      # 共享类型
   └── utils/      # 共享工具
   └── package.json

   └── components/         # 共享组件库(可选)
       ├── src/
       └── package.json

  ├── .husky/                 # Git钩子
  ├── pnpm-workspace.yaml
  ├── package.json
  ├── tsconfig.json
  └── eslint.config.js

  优势

  - 开发效率高:Vite极速热更新,Element Plus组件丰富
  - 类型安全强:全链路TypeScript,编译时发现问题
  - 工程化完善:Monorepo管理,代码复用性好
  - 生态成熟:Vue3官方推荐技术栈,社区活跃
  - 性能优秀:UnoCSS按需生成,打包体积小

  劣势

  - ⚠️ Element Plus风格固定,定制UI成本较高
  - ⚠️ UnoCSS学习曲线(但可替换为TailwindCSS)

  适用场景

  企业级中后台系统、快速交付项目、团队TypeScript熟练度高

  ---
  📦 方案2:高度定制化方案

  核心技术栈

  架构模式: Monorepo (pnpm workspace)
  构建工具: Vite 5.x
  UI框架: Naive UI 2.x (更灵活的主题定制)
  状态管理: Pinia 2.x
  路由: Vue Router 4.x
  HTTP: axios + 请求拦截器
  验证码: 自研滑动验证组件 (Canvas实现)
  Mock: msw (Mock Service Worker)
  代码规范: ESLint 9.x + Prettier + Stylelint
  类型检查: TypeScript 5.x + vue-tsc
  提交规范: Husky + Commitlint + lint-staged
  CSS方案: SCSS + CSS Modules
  图标: 自定义SVG Sprite
  动画: @vueuse/motion (声明式动画)

  核心差异

  - UI组件库:Naive UI提供更灵活的主题系统
  - 验证码:自研Canvas滑动验证,可完全自定义样式
  - Mock方案:MSW在Service Worker层拦截,更接近真实环境
  - CSS方案:SCSS提供更强的样式控制能力

  优势

  - UI高度定制:Naive UI主题系统强大,适合品牌化需求
  - Mock更真实:MSW模拟真实网络请求,利于调试
  - 组件自主可控:核心组件自研,无第三方依赖风险

  劣势

  - ⚠️ 开发周期长(自研验证码需额外1-2天)
  - ⚠️ 维护成本高(自研组件需持续维护)

  适用场景

  品牌化要求高、长期维护项目、团队有组件开发经验

  ---
  📦 方案3:轻量化极简方案

  核心技术栈

  架构模式: 单仓库 (非Monorepo)
  构建工具: Vite 5.x
  UI框架: Ant Design Vue 4.x
  状态管理: Pinia 2.x (仅核心状态)
  路由: Vue Router 4.x
  HTTP: 原生fetch + 封装
  验证码: @alex_xu/vue-slider-captcha (开箱即用)
  Mock: vite-plugin-mock
  代码规范: ESLint 9.x + Prettier (简化配置)
  类型检查: TypeScript 5.x
  提交规范: simple-git-hooks (轻量级钩子)
  CSS方案: TailwindCSS (快速开发)
  图标: Ant Design Icons

  核心差异

  - 架构:放弃Monorepo,单仓库结构
  - HTTP:使用原生fetch,减少axios依赖
  - 工具链:简化配置,快速上手

  优势

  - 上手最快:配置简单,学习成本低
  - 依赖少:减少npm包数量,安装速度快
  - 适合小团队:单仓库管理简单

  劣势

  - ⚠️ 扩展性差(后期加Monorepo成本高)
  - ⚠️ 代码复用困难(多项目场景不友好)

  适用场景

  小型项目、独立系统、快速验证原型

  ---
  📊 方案对比矩阵

  | 维度           | 方案1:现代化轻量级(推荐) | 方案2:高度定制化 | 方案3:轻量化极简 |
  |--------------|----------------|-----------|-----------|
  | 开发效率         | ⭐⭐⭐⭐⭐          | ⭐⭐⭐       | ⭐⭐⭐⭐⭐     |
  | 扩展性          | ⭐⭐⭐⭐⭐          | ⭐⭐⭐⭐      | ⭐⭐⭐       |
  | UI定制能力       | ⭐⭐⭐            | ⭐⭐⭐⭐⭐     | ⭐⭐⭐⭐      |
  | 学习曲线         | ⭐⭐⭐⭐           | ⭐⭐⭐       | ⭐⭐⭐⭐⭐     |
  | 维护成本         | ⭐⭐⭐⭐           | ⭐⭐⭐       | ⭐⭐⭐⭐⭐     |
  | TypeScript支持 | ⭐⭐⭐⭐⭐          | ⭐⭐⭐⭐⭐     | ⭐⭐⭐⭐      |
  | 长期演进         | ⭐⭐⭐⭐⭐          | ⭐⭐⭐⭐      | ⭐⭐⭐       |
  | 团队协作         | ⭐⭐⭐⭐⭐          | ⭐⭐⭐⭐      | ⭐⭐⭐       |
  | 首屏性能         | ⭐⭐⭐⭐⭐          | ⭐⭐⭐⭐      | ⭐⭐⭐⭐⭐     |

  ---
  🎯 我的推荐

  首选:方案1 - 现代化轻量级方案

  理由:
  1. 完美匹配您的需求(Monorepo + TypeScript)
  2. 技术栈成熟稳定,社区支持好
  3. Element Plus组件丰富,覆盖90%的中后台场景
  4. UnoCSS性能优秀,按需生成CSS
  5. 工程化完善,适合团队协作

  **次选:**方案2(如果您有强烈的品牌化UI需求)

  **不推荐:**方案3(与您的Monorepo需求不符)

  ---
  🤔 请您确认

  选项1: 采用方案1,进入【计划阶段】制定详细实施计划

  选项2: 采用方案2,我将调整后续计划

  选项3: 采用方案3,我将简化架构设计

  选项4: 混合方案(如:方案1的架构 + 方案2的某些技术)

  请告诉我您的选择,或直接说"方案1"我将进入计划阶段。

  Todos
 研究阶段:分析项目需求和技术栈
 构思阶段:设计多个技术方案
 计划阶段:制定详细执行计划
 执行阶段:实施代码开发
 优化阶段:代码质量优化
 评审阶段:最终质量评估
看它给的建议,肯定是继续使用方案 1了,等待它制定详细执行计划。。。
 [模式:计划] - 详细执行计划

  📋 实施路线图

  我将整个项目分解为 10个主要阶段,每个阶段包含原子级别的可执行步骤。

  ---
  🏗️ 阶段 1: Monorepo基础架构搭建

  目标

  搭建pnpm workspace,配置TypeScript和构建工具

  执行步骤

  1.1 初始化Monorepo根目录

  # 文件: package.json, pnpm-workspace.yaml
  # 操作: 创建根package.json,配置pnpm workspace
  预期结果: pnpm workspace识别packages/*下的子包

  1.2 配置TypeScript根配置

  # 文件: tsconfig.json, tsconfig.base.json
  # 操作: 设置path映射、严格模式、装饰器支持
  预期结果: 子包可继承根配置,支持@/*路径别名

  1.3 创建子包结构

  # 目录: packages/admin, packages/shared
  # 操作: 初始化子包package.json,配置本地依赖
  预期结果: pnpm install正常,子包间可相互引用

  ---
  🔧 阶段 2: 代码规范和工具链配置

  目标

  配置ESLint、Prettier、Stylelint、Husky

  执行步骤

  2.1 配置ESLint 9.x

  // 文件: eslint.config.js
  // 规则: Vue3官方推荐 + TypeScript严格模式 + 自动修复
  // 集成: @typescript-eslint, eslint-plugin-vue
  预期结果: 运行pnpm lint可检测并自动修复代码问题

  2.2 配置Prettier

  // 文件: .prettierrc.json, .prettierignore
  // 规则: 单引号、末尾逗号、行宽100
  预期结果: 保存时自动格式化,与ESLint无冲突

  2.3 配置Stylelint

  // 文件: .stylelintrc.js
  // 规则: SCSS支持、属性排序、BEM命名建议
  预期结果: CSS/SCSS文件可被检测和格式化

  2.4 配置Husky + Commitlint

  # 文件: .husky/pre-commit, .husky/commit-msg, commitlint.config.js
  # 钩子:
  #   - pre-commit: lint-staged检查暂存文件
  #   - commit-msg: 校验commit信息格式(conventional commits)
  预期结果: 提交前自动检查代码,commit信息必须符合规范

  ---
  🎨 阶段 3: Vite + Vue3 主应用初始化

  目标

  创建admin子包,配置Vite和基础插件

  执行步骤

  3.1 初始化Vue3项目

  # 目录: packages/admin
  # 操作: 安装vue、vite、@vitejs/plugin-vue

  3.2 配置Vite

  // 文件: packages/admin/vite.config.ts
  // 配置:
  //   - 路径别名: @ -> src
  //   - 端口: 3000
  //   - 代理: /api -> mock
  //   - 插件: vue(), AutoImport, Components(自动导入组件)
  预期结果: 运行pnpm dev可启动开发服务器

  3.3 配置环境变量

  # 文件: .env.development, .env.production
  # 变量: VITE_APP_TITLE, VITE_APP_BASE_API

  3.4 创建基础目录结构

  packages/admin/src/
  ├── main.ts              # 入口文件
  ├── App.vue              # 根组件
  ├── layouts/             # 布局组件
  ├── views/               # 页面
   ├── login/
   └── dashboard/
  ├── components/          # 业务组件
  ├── router/              # 路由配置
   ├── index.ts
   └── modules/
  ├── stores/              # Pinia状态
   ├── index.ts
   ├── user.ts
   └── app.ts
  ├── api/                 # API接口
   ├── request.ts       # axios封装
   └── modules/
  ├── mock/                # Mock数据
  ├── hooks/               # 组合式函数
  ├── utils/               # 工具函数
  ├── types/               # TypeScript类型
  ├── assets/              # 静态资源
  └── styles/              # 全局样式

  ---
  🎭 阶段 4: UI组件库和样式系统

  目标

  集成Element Plus、UnoCSS、图标库

  执行步骤

  4.1 安装Element Plus

  // 文件: packages/admin/src/main.ts
  // 操作: 按需导入Element Plus + 暗色主题CSS
  // 插件: unplugin-element-plus (自动导入样式)

  4.2 配置UnoCSS

  // 文件: packages/admin/uno.config.ts
  // 预设: presetUno, presetAttributify
  // 规则: 主题色、间距、圆角等自定义规则
  预期结果: 可使用原子类如flex items-center text-primary

  4.3 配置图标

  // 文件: packages/admin/vite.config.ts
  // 插件: unplugin-icons (自动导入iconify图标)
  // 用法: <i-ep-user /> 自动转换为Element Plus图标

  4.4 创建全局样式

  // 文件: packages/admin/src/styles/index.scss
  // 内容:
  //   - 重置样式
  //   - CSS变量(主题色、间距)
  //   - 通用类(.ellipsis, .scrollbar-hide)

  ---
  🔐 阶段 5: 认证系统(登录 + 滑动验证码)

  目标

  实现登录页面、滑动验证码、Token管理

  执行步骤

  5.1 安装滑动验证码组件

  # 包: vue3-puzzle-vcode
  # 文档: https://www.npmjs.com/package/vue3-puzzle-vcode

  5.2 创建登录页面

  <!-- 文件: packages/admin/src/views/login/index.vue -->
  <!-- 功能:
    - 用户名/密码表单(ElForm)
    - 滑动验证码弹窗
    - 记住密码(localStorage)
    - 登录按钮防抖
  -->

  5.3 封装认证API

  // 文件: packages/admin/src/api/modules/auth.ts
  // 接口:
  //   - login(username, password): Promise<{token, userInfo}>
  //   - logout(): Promise<void>
  //   - getUserInfo(): Promise<UserInfo>

  5.4 实现Token管理

  // 文件: packages/admin/src/utils/auth.ts
  // 函数:
  //   - getToken(): string | null (从localStorage读取)
  //   - setToken(token: string): void
  //   - removeToken(): void

  5.5 配置axios拦截器

  // 文件: packages/admin/src/api/request.ts
  // 拦截器:
  //   - 请求拦截: 自动添加token到header
  //   - 响应拦截: 401跳转登录、统一错误提示

  5.6 创建用户状态管理

  // 文件: packages/admin/src/stores/user.ts
  // 状态: token, userInfo, permissions
  // 方法:
  //   - login(username, password)
  //   - logout()
  //   - getUserInfo()

  ---
  🏛️ 阶段 6: 布局系统(2种布局)

  目标

  实现经典布局和双栏布局,支持动态切换

  执行步骤

  6.1 创建布局基础组件

  packages/admin/src/layouts/
  ├── index.vue                 # 布局容器(根据配置切换)
  ├── ClassicLayout.vue         # 经典布局(左侧菜单)
  ├── DoubleLayout.vue          # 双栏布局(左侧一级+二级菜单)
  └── components/
      ├── Header.vue            # 顶栏(Logo、面包屑、工具栏)
      ├── Sidebar.vue           # 左侧菜单
      ├── SidebarItem.vue       # 菜单项(递归组件)
      ├── AppMain.vue           # 主内容区(router-view)
      ├── TagsView.vue          # 标签页
      └── Settings.vue          # 设置抽屉

  6.2 ClassicLayout实现

  <!-- 文件: packages/admin/src/layouts/ClassicLayout.vue -->
  <!-- 结构:
    <el-container>
      <el-aside> Sidebar(可折叠) </el-aside>
      <el-container>
        <el-header> Header </el-header>
        <TagsView />
        <el-main> AppMain(router-view) </el-main>
      </el-container>
    </el-container>
  -->

  6.3 DoubleLayout实现

  <!-- 文件: packages/admin/src/layouts/DoubleLayout.vue -->
  <!-- 结构:
    <el-container>
      <el-aside width="64px"> 一级菜单(仅图标) </el-aside>
      <el-aside width="200px"> 二级菜单 </el-aside>
      <el-container>
        <el-header> Header </el-header>
        <TagsView />
        <el-main> AppMain </el-main>
      </el-container>
    </el-container>
  -->

  6.4 侧边栏菜单组件

  <!-- 文件: packages/admin/src/layouts/components/Sidebar.vue -->
  <!-- 功能:
    - 从路由meta读取菜单配置
    - 支持多级嵌套(递归SidebarItem)
    - 高亮当前激活菜单
    - 折叠/展开动画
  -->

  6.5 顶栏组件

  <!-- 文件: packages/admin/src/layouts/components/Header.vue -->
  <!-- 功能:
    - Logo + 系统名称
    - 面包屑导航
    - 右侧工具栏: 全屏、主题切换、用户下拉菜单
  -->

  ---
  🎨 阶段 7: 主题系统

  目标

  实现主题色切换、明暗模式、菜单宽度配置

  执行步骤

  7.1 创建主题状态管理

  // 文件: packages/admin/src/stores/app.ts
  // 状态:
  //   - layout: 'classic' | 'double'           # 布局模式
  //   - theme: string                          # 主题色(HEX)
  //   - isDark: boolean                        # 暗色模式
  //   - sidebarWidth: number                   # 侧边栏宽度
  //   - isCollapse: boolean                    # 侧边栏是否折叠
  //   - showTagsView: boolean                  # 是否显示标签页
  //   - systemConfig: {logo, title, ...}       # 系统配置

  7.2 实现主题色切换

  // 文件: packages/admin/src/hooks/useTheme.ts
  // 功能:
  //   - setThemeColor(color): 动态修改CSS变量
  //   - Element Plus主题色同步
  //   - 持久化到localStorage

  7.3 实现明暗模式切换

  // 文件: packages/admin/src/hooks/useDark.ts
  // 功能:
  //   - 切换<html>的class="dark"
  //   - Element Plus暗色主题CSS自动加载
  //   - 监听系统主题变化(可选)

  7.4 实现设置抽屉

  <!-- 文件: packages/admin/src/layouts/components/Settings.vue -->
  <!-- 功能:
    - 布局模式切换(单选组)
    - 主题色选择器(ElColorPicker)
    - 明暗模式开关(ElSwitch)
    - 侧边栏宽度滑块(ElSlider: 180-280px)
    - 系统配置表单(Logo URL、系统名称等)
    - 重置按钮
  -->

  7.5 全屏功能

  // 文件: packages/admin/src/hooks/useFullscreen.ts
  // 功能:
  //   - 使用Fullscreen API
  //   - 兼容性处理(webkit前缀)
  //   - 全屏状态响应式

  ---
  🏷️ 阶段 8: 标签页管理

  目标

  实现多标签页导航,支持右键菜单操作

  执行步骤

  8.1 创建标签页状态管理

  // 文件: packages/admin/src/stores/tagsView.ts
  // 状态: visitedViews: Array<{path, title, query, ...}>
  // 方法:
  //   - addView(route): 新增标签
  //   - delView(route): 删除标签
  //   - delOthersViews(route): 关闭其他
  //   - delAllViews(): 关闭全部
  //   - updateView(route): 更新标签标题

  8.2 实现标签页组件

  <!-- 文件: packages/admin/src/layouts/components/TagsView.vue -->
  <!-- 功能:
    - 横向滚动标签列表
    - 当前激活标签高亮
    - 点击标签跳转路由
    - 右键菜单: 刷新、关闭、关闭其他、关闭所有
    - 固定首页标签(不可关闭)
  -->

  8.3 路由监听自动添加标签

  // 文件: packages/admin/src/App.vue
  // 逻辑:
  //   watch(route, (to) => {
  //     if (!to.meta.noCache) {
  //       tagsViewStore.addView(to)
  //     }
  //   })

  ---
  🔒 阶段 9: 权限管理系统(按钮级)

  目标

  实现RBAC权限模型,支持按钮级权限控制

  执行步骤

  9.1 设计权限数据结构

  // 文件: packages/admin/src/types/permission.ts
  // 类型:
  interface User {
    id: string
    username: string
    roles: Role[]
  }

  interface Role {
    id: string
    name: string
    permissions: Permission[]
  }

  interface Permission {
    id: string
    code: string        // 如: 'user:create', 'user:delete'
    name: string
    type: 'menu' | 'button'
  }

  9.2 动态路由生成

  // 文件: packages/admin/src/stores/permission.ts
  // 功能:
  //   - filterAsyncRoutes(routes, roles): 根据角色过滤路由
  //   - 动态添加路由: router.addRoute()

  9.3 路由守卫

  // 文件: packages/admin/src/router/permission.ts
  // 逻辑:
  //   router.beforeEach((to, from, next) => {
  //     if (hasToken) {
  //       if (!hasRoles) await getUserInfo() // 获取角色权限
  //       if (!hasAddRoutes) generateRoutes() // 动态添加路由
  //       next()
  //     } else {
  //       next('/login')
  //     }
  //   })

  9.4 按钮级权限指令

  // 文件: packages/admin/src/directives/permission.ts
  // 指令: v-permission="['user:create']"
  // 逻辑: 根据用户权限显示/隐藏按钮

  9.5 权限判断Hook

  // 文件: packages/admin/src/hooks/usePermission.ts
  // 导出:
  //   - hasPermission(code: string): boolean
  //   - hasAnyPermission(codes: string[]): boolean
  //   - hasAllPermissions(codes: string[]): boolean

  ---
  🎭 阶段 10: Mock数据和演示页面

  目标

  配置Mock数据,实现权限管理演示页面

  执行步骤

  10.1 配置Mock插件

  // 文件: packages/admin/vite.config.ts
  // 插件: vite-plugin-mock
  // 配置: mockPath: './src/mock', localEnabled: true

  10.2 创建Mock数据

  // 文件: packages/admin/src/mock/user.ts
  // 接口:
  //   - POST /api/auth/login: 返回token和用户信息
  //   - GET /api/user/info: 返回当前用户详情
  //   - GET /api/user/list: 用户列表(分页)
  //   - POST /api/user: 新增用户
  //   - PUT /api/user/:id: 编辑用户
  //   - DELETE /api/user/:id: 删除用户

  // 文件: packages/admin/src/mock/role.ts
  // 角色管理Mock

  // 文件: packages/admin/src/mock/permission.ts
  // 权限管理Mock

  // 文件: packages/admin/src/mock/menu.ts
  // 菜单管理Mock

  10.3 创建权限管理页面

  packages/admin/src/views/system/
  ├── user/
   ├── index.vue          # 用户列表(表格 + 搜索 + 按钮权限)
   └── components/
       └── UserDialog.vue # 新增/编辑弹窗
  ├── role/
   ├── index.vue          # 角色列表 + 权限分配
   └── components/
       └── PermissionTree.vue # 权限树(ElTree)
  └── menu/
      └── index.vue          # 菜单管理(树形表格)

  10.4 演示按钮级权限

  <!-- 示例: packages/admin/src/views/system/user/index.vue -->
  <template>
    <el-button
      v-permission="['user:create']"
      @click="handleAdd"
    >
      新增用户
    </el-button>

    <el-button
      v-permission="['user:delete']"
      @click="handleDelete"
    >
      删除
    </el-button>
  </template>

  ---
  📦 补充:shared共享包

  目标

  抽取可复用的类型、常量、工具到shared包

  执行步骤

  共享内容

  // packages/shared/src/constants/index.ts
  export const TOKEN_KEY = 'admin-token'
  export const USER_INFO_KEY = 'user-info'

  // packages/shared/src/types/common.ts
  export interface PaginationParams {
    page: number
    pageSize: number
  }

  // packages/shared/src/utils/validate.ts
  export const isEmail = (email: string) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)

  ---
  🎯 总结:10大阶段 + 预期时间

  | 阶段  | 主要任务         | 预估时间  | 关键产出                    |
  |-----|--------------|-------|-------------------------|
  | 1   | Monorepo基础架构 | 1小时   | pnpm workspace正常工作      |
  | 2   | 代码规范工具链      | 1.5小时 | ESLint+Prettier+Husky生效 |
  | 3   | Vite主应用初始化   | 1小时   | 开发服务器启动成功               |
  | 4   | UI组件和样式系统    | 1.5小时 | Element Plus+UnoCSS可用   |
  | 5   | 认证系统         | 3小时   | 登录+滑动验证码+Token管理        |
  | 6   | 布局系统         | 4小时   | 2种布局+所有子组件              |
  | 7   | 主题系统         | 3小时   | 主题色+明暗模式+设置抽屉           |
  | 8   | 标签页管理        | 2小时   | 标签页+右键菜单                |
  | 9   | 权限管理         | 4小时   | 动态路由+按钮级权限              |
  | 10  | Mock+演示页面    | 3小时   | 权限管理页面                  |

  总计: 约24小时纯开发时间

  ---
  ⚠️ 关键依赖和注意事项

  需要安装的核心依赖

  {
    "dependencies": {
      "vue": "^3.4.0",
      "vue-router": "^4.3.0",
      "pinia": "^2.1.7",
      "element-plus": "^2.6.0",
      "axios": "^1.6.0",
      "@vueuse/core": "^10.9.0",
      "vue3-puzzle-vcode": "^1.1.0"
    },
    "devDependencies": {
      "vite": "^5.2.0",
      "@vitejs/plugin-vue": "^5.0.0",
      "typescript": "^5.4.0",
      "vue-tsc": "^2.0.0",
      "eslint": "^9.0.0",
      "@typescript-eslint/eslint-plugin": "^7.0.0",
      "eslint-plugin-vue": "^9.24.0",
      "prettier": "^3.2.0",
      "stylelint": "^16.3.0",
      "husky": "^9.0.0",
      "lint-staged": "^15.2.0",
      "commitlint": "^19.2.0",
      "@unocss/vite": "^0.59.0",
      "unplugin-auto-import": "^0.17.0",
      "unplugin-vue-components": "^0.26.0",
      "unplugin-icons": "^0.18.0",
      "vite-plugin-mock": "^3.0.0"
    }
  }

  SOLID原则应用

  - 单一职责: 每个Store只管理一个领域(user、app、permission)
  - 开闭原则: 布局组件通过插槽扩展,不修改源码
  - 里氏替换: ClassicLayout和DoubleLayout实现相同接口
  - 接口隔离: API按模块拆分(auth.ts、user.ts等)
  - 依赖倒置: 组件依赖抽象的Store接口,不依赖具体实现

  ---
  🤔 请您批准

  我已完成详细的执行计划,包含:
  - 10个主要开发阶段
  - 每阶段的原子操作步骤
  - 文件路径和代码结构
  - 预期结果和时间估算
  - SOLID原则应用说明

  请您确认:

  选项1: 批准计划,进入【执行阶段】开始编码

  选项2: 调整某个阶段的实施细节

  选项3: 暂停,先创建项目骨架让您review

  请告诉我您的决定,或直接说"开始执行"我将进入执行阶段。

  Todos
 研究阶段:分析项目需求和技术栈
 构思阶段:设计多个技术方案
 计划阶段:制定详细执行计划
 执行阶段:实施代码开发
 优化阶段:代码质量优化
 评审阶段:最终质量评估
反正我是不细看了,直接“开始执行”
 实施代码开发… (esc to interrupt · ctrl+t to hide todos)
  ☒ 研究阶段:分析项目需求和技术栈
 构思阶段:设计多个技术方案
 计划阶段:制定详细执行计划
 执行阶段:实施代码开发
 阶段1: Monorepo基础架构搭建
 阶段2: 代码规范和工具链配置
 阶段3: Vite + Vue3 主应用初始化
 阶段4: UI组件库和样式系统
 阶段5: 认证系统(登录+验证码)
 阶段6: 布局系统(2种布局)
 阶段7: 主题系统
 阶段8: 标签页管理
 阶段9: 权限管理系统
 阶段10: Mock数据和演示页面
 优化阶段:代码质量优化
 评审阶段:最终质量评估
如果你是--dangerously-skip-permissions,可以玩会手机了,等它结束吧。

注意事项

  • 要提前做好git分支管理,否则等你完全搞好了,然后又使用 AI 帮你提交代码的时候,一旦哪里出了问题,都回不过来了,而且你修复需要修复半天
  • 我就是一股脑等它完成,完成之后使用 AI 帮我提交代码,我也是没管,谁知道我想再次运行看看结果的时候,就一堆报错,函数名称驼峰的一堆变成了小写,有逗号的地方都加了一堆分好,我又让 AI 修复了半天,简直要吐血

最后的代码地址