Files
shop-toy/openspec/project.md
2025-12-25 09:59:38 +08:00

6.9 KiB
Raw Blame History

Project Context

Purpose

这是一个基于 unibest 模板开发的跨平台电商应用系统,包含三个主要端:

  1. 用户端C端提供商品浏览、购物车、订单管理、会员服务、金融服务等功能
  2. 商家端B端提供商品管理、订单处理、财务管理、贷款协助、店铺设置等功能
  3. 银行端B端提供客户管理、贷款审核、交易记录、提现管理等功能

项目支持多平台部署,包括 H5、iOS、Android 以及多个小程序平台微信、支付宝、百度、字节、快手、QQ、钉钉、小红书等

Tech Stack

核心框架

  • uni-app 3.0.0 - 跨平台开发框架
  • Vue 3 3.4.21 - 前端框架
  • TypeScript 5.8.0 - 类型系统
  • Vite 5.2.8 - 构建工具

UI 组件库

  • wot-design-uni - UI 组件库
  • UnoCSS 66.0.0 - 原子化 CSS 框架
  • z-paging 2.8.7 - 分页组件

状态管理与路由

  • Pinia 2.0.36 - 状态管理
  • pinia-plugin-persistedstate 3.2.1 - 状态持久化
  • vue-router 4.5.1 - 路由管理
  • vue-i18n 9.1.9 - 国际化

HTTP 请求库(支持多种选择)

  • alova 3.3.3 - 请求库(推荐)
  • 简单封装的 http - 轻量级请求方案
  • vue-query - 查询状态管理(用于自动生成接口)

工具库

  • dayjs 1.11.10 - 日期处理
  • js-cookie 3.0.5 - Cookie 操作

开发工具

  • pnpm 10.10.0 - 包管理器
  • ESLint 9.31.0 - 代码检查
  • Husky 9.1.7 - Git hooks
  • commitlint 19.8.1 - 提交信息规范

Node.js 环境

  • Node.js >= 20
  • pnpm >= 9

Project Conventions

Code Style

命名约定

  • 文件命名:使用 kebab-casecart-item.vue
  • 组件命名:使用 PascalCaseCartItem.vue
  • 变量/函数命名:使用 camelCasegetCartList
  • 常量命名:使用 UPPER_SNAKE_CASEAPI_BASE_URL

代码格式化

  • 使用 @uni-helper/eslint-config 作为 ESLint 配置
  • 支持 CSS、LESS、SCSS、HTML 的自动格式化
  • Vue SFC 块顺序:[script, template]style

路径别名

  • @/*./src/*
  • @img/*./src/static/images/*

自动导入

  • Vue 和 uni-app API 自动导入
  • src/hooks 目录下的 hooks 自动导入
  • 组件自动导入(支持递归扫描子目录)

Architecture Patterns

目录结构

src/
├── api/           # API 接口定义
├── components/    # 公共组件
├── hooks/        # 组合式函数
├── http/         # HTTP 请求封装
├── layouts/      # 布局组件
├── mock/         # Mock 数据
├── pages/        # 用户端页面
├── pagesMerchant/# 商家端页面
├── pagesBank/    # 银行端页面
├── router/       # 路由配置
├── service/      # 自动生成的服务接口
├── static/       # 静态资源
└── typings/      # 类型定义

路由策略

  • 约定式路由:基于文件系统自动生成路由
  • Layout 布局:支持多布局系统
  • 分包优化:使用 @uni-ku/bundle-optimizer 进行分包优化
  • 异步导入:支持模块和组件的异步跨包引用

登录策略

支持两种登录策略(通过 DEFAULT_NO_NEED_LOGIN 配置):

  1. 默认无需登录策略DEFAULT_NO_NEED_LOGIN

    • 进入任何页面都不需要登录
    • 只有黑名单中的页面需要登录
    • 适用于大部分 2C 应用(如美团、抖音)
  2. 默认需要登录策略DEFAULT_NEED_LOGIN

    • 进入任何页面都需要登录
    • 只有白名单中的页面不需要登录
    • 适用于 2B 和后台管理类应用

请求拦截

  • 统一的请求拦截器(src/http/interceptor.ts
  • 支持登录拦截
  • 支持请求/响应错误处理

Testing Strategy

当前项目未配置自动化测试框架。建议:

  • 使用 Vitest 进行单元测试
  • 使用 @vue/test-utils 进行组件测试
  • 使用 Playwright 进行端到端测试

Git Workflow

分支策略

  • main / base - 主分支
  • base-i18n - 国际化分支
  • base-login - 登录功能分支
  • base-login-i18n - 登录+国际化分支

提交规范

使用 Conventional Commits 规范:

  • feat: - 新功能
  • fix: - 修复 bug
  • docs: - 文档更新
  • style: - 代码格式调整
  • refactor: - 重构
  • test: - 测试相关
  • chore: - 构建/工具相关

Git Hooks

  • 使用 Husky 管理 Git hooks
  • 使用 lint-staged 在提交前自动修复代码

Domain Context

业务领域

用户端C端

  • 商品模块:商品列表、详情、分类、搜索
  • 购物车模块:添加商品、数量调整、结算
  • 订单模块:订单确认、订单列表、订单详情
  • 会员模块:会员卡、会员权益
  • 金融模块:信用额度、结算、核销、贷款申请

商家端B端

  • 仪表盘:数据统计、概览
  • 商品管理:商品列表、编辑
  • 订单管理:订单列表、订单详情
  • 财务管理:财务统计、结算、提现
  • 贷款协助:协助用户申请贷款
  • 店铺设置:店铺信息管理

银行端B端

  • 仪表盘:数据统计
  • 客户管理:客户列表、客户详情、交易记录、提现记录
  • 审核管理:贷款审核列表、审核详情

关键概念

  • 多端适配:同一套代码适配 H5、App、小程序
  • 角色权限:用户、商家、银行三种角色
  • 金融服务:信用额度、贷款申请、结算、核销
  • 会员体系:会员卡、会员权益

Important Constraints

技术约束

  • Node.js 版本:必须 >= 20
  • pnpm 版本:必须 >= 9
  • 包管理器:强制使用 pnpm通过 only-allow pnpm
  • TypeScript:必须使用 TypeScript 开发
  • 平台限制:不同 UI 框架支持的平台有所不同

业务约束

  • 多端兼容性:需要确保在所有目标平台上正常运行
  • 性能要求:分包优化、按需加载、减少包体积
  • 安全性:登录拦截、请求加密、数据验证

开发约束

  • 代码规范:必须通过 ESLint 检查
  • 提交规范:必须符合 Conventional Commits 规范
  • 文件忽略:自动生成的文件(如 src/service/**)不应提交

External Dependencies

平台依赖

  • DCloudio - uni-app 官方框架和工具链
  • 微信开发者工具 - 微信小程序开发调试
  • HBuilderX - App 平台打包(可选)

第三方服务

  • OpenAPI - 用于自动生成 API 接口类型和代码
  • Iconify - 图标库Carbon 图标集)

构建依赖

  • @uni-helper - uni-app 辅助工具集
  • @uni-ku - uni-app 性能优化工具
  • unplugin-auto-import - 自动导入插件

开发依赖

  • @dcloudio/types - uni-app 类型定义
  • miniprogram-api-typings - 小程序 API 类型定义
  • rollup-plugin-visualizer - 打包分析工具