Files
financial-admin/.github/copilot-instructions.md

5.2 KiB

开发工作流

  • 如果我向你提一个新需求或一个 bug 修复请求,你有不懂的地方,先主动提问,直到你完全理解需求为止。

核心技术栈

  • 框架: Vue 3.5.25 (Composition API)
  • 构建工具: Vite 7
  • 语言: TypeScript 5.9.3
  • 状态管理: Pinia 3.0.4
  • 路由: Vue Router 4.6.3 + Elegant Router
  • UI 组件库: Naive UI 2.43.2
  • 样式方案: UnoCSS 66.5.10 + SCSS
  • 国际化: Vue I18n 11.2.2
  • HTTP 客户端: Axios (自封装) / Alova (可选)
  • 图表库: ECharts 6.0.0
  • 图标: Iconify
  • 包管理器: pnpm 10.5.0+
  • Node 版本: 20.19.0+

开发规范

代码风格

  • 使用 ESLint (@soybeanjs/eslint-config) 进行代码检查
  • 严格的 TypeScript 类型检查
  • 使用 Composition API 和 <script setup> 语法
  • 优先使用组合式函数 (Composables) 封装可复用逻辑

Table页面

  • 使用@/components/table/table-base.vue 作为基础表格组件
  • 通过配置项实现增删改查功能
  • 支持分页、排序、筛选等常用功能
  • 使用类型定义确保数据结构一致性

命名规范

  • 文件命名: kebab-case (如: user-profile.vue)
  • 组件命名: PascalCase (如: UserProfile)
  • 函数/变量: camelCase (如: getUserInfo)
  • 常量: UPPER_SNAKE_CASE (如: MAX_COUNT)
  • 类型/接口: PascalCase (如: UserInfo)
  • 枚举: PascalCase (如: UserRole)

路由系统

项目使用 Elegant Router 实现文件路由系统:

  • 路由文件位于 src/router/elegant/ 目录
  • 路由自动生成,无需手动配置
  • 支持前端静态路由和后端动态路由
  • 路由类型定义自动生成在 src/typings/elegant-router.d.ts

状态管理

使用 Pinia 进行状态管理:

  • Store 文件位于 src/store/modules/
  • 使用 defineStore 定义状态
  • 支持 Options API 和 Composition API 两种风格
  • Store 类型已在 src/store/index.ts 统一导出

API 服务

  • API 定义位于 src/service/api/client
  • API 全部使用safeClient实例 + client.api.admin 发送请求
  • 字段严格遵循每个rpc接口的类型定义
  • 支持请求拦截、响应处理和错误处理

样式开发

  • 优先使用 UnoCSS 原子化 CSS
  • 使用 @sa/uno-preset 自定义预设
  • 全局样式在 src/styles/ 目录
  • 主题配置在 src/theme/ 目录
  • 支持 SCSS 预处理器

组件开发

  • 公共组件位于 src/components/
  • 组件分类:
    • common/: 通用基础组件
    • custom/: 自定义业务组件
    • advanced/: 高级封装组件
    • table/: 表格相关组件
  • 使用 unplugin-vue-components 自动导入组件

类型定义

  • 全局类型定义在 src/typings/ 目录
  • 每个模块可包含独立的类型文件
  • 使用 .d.ts 文件进行类型声明
  • API 类型定义在 src/typings/api/

开发建议

创建新页面

  1. src/views/ 下创建页面目录
  2. 路由会自动生成,运行 pnpm gen-route
  3. 在页面中使用 <script setup> 和 TypeScript
  4. 使用 Naive UI 组件构建界面

添加 API 接口

  1. src/service/api/ 中定义接口
  2. src/typings/api/ 中定义类型
  3. 使用 @sa/axios 的请求实例
  4. 在组件中通过 import 使用

状态管理

  1. src/store/modules/ 创建 store
  2. 使用 defineStore 定义
  3. 在组件中使用 const store = useXxxStore()
  4. 支持持久化存储插件

组件封装

  1. 评估是否为通用组件
  2. 在合适的目录下创建组件文件
  3. 使用 TypeScript 定义 Props 和 Emits
  4. 添加必要的文档注释
  5. 考虑组件的可复用性和可维护性

样式编写

  1. 优先使用 UnoCSS 原子类
  2. 复杂布局可使用 Flex/Grid 原子类
  3. 使用主题变量确保主题切换正常
  4. SCSS 用于特殊样式需求

国际化

  1. 翻译文件在 src/locales/langs/
  2. 使用 $t('key') 获取翻译
  3. 新增翻译需同步更新所有语言文件

注意事项

  1. 严格类型: 确保所有变量、函数都有明确的类型定义
  2. 响应式规范: 使用 refreactivecomputed 等 Vue 3 响应式 API
  3. 性能优化: 合理使用 computedwatchEffect,避免不必要的重渲染
  4. 错误处理: API 请求需添加错误处理逻辑
  5. 权限控制: 涉及权限的功能需配合路由守卫
  6. 移动端适配: 注意响应式设计,支持移动端访问
  7. Monorepo: 修改 packages 下的包时注意影响范围

外部资源

AI 协作提示

在协助开发时,请注意:

  1. 遵循项目现有的代码风格和架构
  2. 保持 TypeScript 类型的完整性
  3. 使用 Vue 3 Composition API
  4. 优先使用项目已有的工具函数和 Hooks
  5. 注意 Monorepo 架构,正确引用子包
  6. 样式优先使用 UnoCSS 原子类
  7. 确保代码符合 ESLint 规则
  8. 添加必要的注释,特别是复杂逻辑
  9. 考虑代码的可维护性和扩展性
  10. 遵循响应式设计原则