2026-05-22 15:27:36 +08:00
|
|
|
|
# P01_errlens_app - 架构设计
|
|
|
|
|
|
|
2026-05-22 16:25:05 +08:00
|
|
|
|
## 整体架构
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
|
|
|
|
│ 小程序客户端 │
|
|
|
|
|
|
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
|
|
|
|
|
|
│ │ 首页 │ │ 分析 │ │ 历史 │ │ 我的 │ │
|
|
|
|
|
|
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
|
|
|
|
|
|
│ │ │ │ │ │
|
|
|
|
|
|
│ ┌────┴────────────┴────────────┴────────────┴────┐ │
|
|
|
|
|
|
│ │ 组件库 (shadcn/ui) │ │
|
|
|
|
|
|
│ └────────────────────┬─────────────────────────┘ │
|
|
|
|
|
|
│ │ │
|
|
|
|
|
|
│ ┌────────────────────┴─────────────────────────┐ │
|
|
|
|
|
|
│ │ 状态管理 (Zustand) │ │
|
|
|
|
|
|
│ └────────────────────┬─────────────────────────┘ │
|
|
|
|
|
|
│ │ │
|
|
|
|
|
|
│ ┌────────────────────┴─────────────────────────┐ │
|
|
|
|
|
|
│ │ Network 层 (API 封装) │ │
|
|
|
|
|
|
│ └────────────────────┬─────────────────────────┘ │
|
|
|
|
|
|
└───────────────────────┼───────────────────────────────────┘
|
|
|
|
|
|
│ HTTP
|
|
|
|
|
|
▼
|
|
|
|
|
|
┌───────────────────────────────────────────────────────────┐
|
|
|
|
|
|
│ 后端服务 (NestJS) │
|
|
|
|
|
|
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
|
|
|
|
|
|
│ │ 用户模块 │ │ 分析模块 │ │ 历史模块 │ │ 系统模块 │ │
|
|
|
|
|
|
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
|
|
|
|
|
|
│ │ │ │ │ │
|
|
|
|
|
|
│ ┌────┴────────────┴────────────┴────────────┴────┐ │
|
|
|
|
|
|
│ │ Service 层 │ │
|
|
|
|
|
|
│ └────────────────────┬─────────────────────────┘ │
|
|
|
|
|
|
│ │ │
|
|
|
|
|
|
│ ┌────────────────────┴─────────────────────────┐ │
|
|
|
|
|
|
│ │ 数据层 (Drizzle ORM) │ │
|
|
|
|
|
|
│ └────────────────────┬─────────────────────────┘ │
|
|
|
|
|
|
└───────────────────────┼───────────────────────────────────┘
|
|
|
|
|
|
│
|
|
|
|
|
|
▼
|
|
|
|
|
|
┌─────────────────┐
|
|
|
|
|
|
│ PostgreSQL │
|
|
|
|
|
|
│ Supabase │
|
|
|
|
|
|
└─────────────────┘
|
|
|
|
|
|
```
|
2026-05-22 15:27:36 +08:00
|
|
|
|
|
|
|
|
|
|
## 目录结构
|
2026-05-22 16:25:05 +08:00
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
P01_errlens_app/
|
|
|
|
|
|
├── src/ # 前端源码
|
|
|
|
|
|
│ ├── app.config.ts # Taro 应用配置
|
|
|
|
|
|
│ ├── app.tsx # 根组件
|
|
|
|
|
|
│ ├── app.css # 全局样式
|
|
|
|
|
|
│ ├── index.html # H5 入口
|
|
|
|
|
|
│ │
|
|
|
|
|
|
│ ├── components/ # 组件
|
|
|
|
|
|
│ │ └── ui/ # shadcn/ui 组件库
|
|
|
|
|
|
│ │ ├── button.tsx
|
|
|
|
|
|
│ │ ├── card.tsx
|
|
|
|
|
|
│ │ ├── dialog.tsx
|
|
|
|
|
|
│ │ └── ... (50+ 组件)
|
|
|
|
|
|
│ │
|
|
|
|
|
|
│ ├── pages/ # 页面
|
|
|
|
|
|
│ │ └── index/ # 首页
|
|
|
|
|
|
│ │ ├── index.tsx
|
|
|
|
|
|
│ │ ├── index.config.ts
|
|
|
|
|
|
│ │ └── index.css
|
|
|
|
|
|
│ │
|
|
|
|
|
|
│ ├── lib/ # 工具库
|
|
|
|
|
|
│ │ ├── utils.ts # 通用工具
|
|
|
|
|
|
│ │ ├── platform.ts # 平台检测
|
|
|
|
|
|
│ │ ├── measure.ts # 尺寸测量
|
|
|
|
|
|
│ │ └── hooks/ # 自定义 Hooks
|
|
|
|
|
|
│ │
|
|
|
|
|
|
│ ├── presets/ # 预设配置
|
|
|
|
|
|
│ │ ├── index.tsx
|
|
|
|
|
|
│ │ ├── env.ts
|
|
|
|
|
|
│ │ ├── h5-container.tsx
|
|
|
|
|
|
│ │ └── ...
|
|
|
|
|
|
│ │
|
|
|
|
|
|
│ └── network.ts # API 请求封装
|
|
|
|
|
|
│
|
2026-05-23 20:55:12 +08:00
|
|
|
|
│ ├── server/ # 后端源码 (NestJS)
|
|
|
|
|
|
│ │ ├── src/
|
|
|
|
|
|
│ │ │ ├── app.module.ts # 根模块
|
|
|
|
|
|
│ │ │ ├── app.controller.ts# 根控制器
|
|
|
|
|
|
│ │ │ ├── app.service.ts # 根服务
|
|
|
|
|
|
│ │ │ └── main.ts # 入口文件
|
|
|
|
|
|
│ │ │
|
|
|
|
|
|
│ │ ├── nest-cli.json
|
|
|
|
|
|
│ │ ├── tsconfig.json
|
|
|
|
|
|
│ │ └── package.json
|
2026-05-22 16:25:05 +08:00
|
|
|
|
│ │
|
2026-05-23 20:55:12 +08:00
|
|
|
|
│ ├── config/ # 构建配置
|
|
|
|
|
|
│ │ ├── index.ts # 通用配置
|
|
|
|
|
|
│ │ ├── dev.ts # 开发环境配置
|
|
|
|
|
|
│ │ └── prod.ts # 生产环境配置
|
|
|
|
|
|
│ │
|
|
|
|
|
|
│ ├── types/ # 类型定义
|
|
|
|
|
|
│ │ ├── global.d.ts
|
|
|
|
|
|
│ │ └── lucide.d.ts
|
2026-05-22 16:25:05 +08:00
|
|
|
|
│
|
|
|
|
|
|
├── tests/ # 测试代码
|
|
|
|
|
|
│ ├── unit/ # 单元测试
|
|
|
|
|
|
│ ├── integration/ # 集成测试
|
|
|
|
|
|
│ └── e2e/ # E2E 测试
|
|
|
|
|
|
│
|
|
|
|
|
|
├── docs/ # 项目文档
|
|
|
|
|
|
│ ├── 01_需求概要.md
|
|
|
|
|
|
│ ├── 02_架构设计.md
|
|
|
|
|
|
│ └── 03_接口定义.md
|
|
|
|
|
|
│
|
|
|
|
|
|
├── package.json # 前端依赖
|
|
|
|
|
|
├── tsconfig.json # TypeScript 配置
|
|
|
|
|
|
├── babel.config.js # Babel 配置
|
|
|
|
|
|
├── eslint.config.mjs # ESLint 配置
|
|
|
|
|
|
├── stylelint.config.mjs # Stylelint 配置
|
|
|
|
|
|
├── project.config.json # 微信小程序配置
|
|
|
|
|
|
└── ENVIRONMENT.md # 环境准备指南
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 核心模块设计
|
|
|
|
|
|
|
|
|
|
|
|
### 1. Network 层
|
|
|
|
|
|
|
|
|
|
|
|
```typescript
|
|
|
|
|
|
// src/network.ts
|
|
|
|
|
|
// API 请求封装,自动添加项目域名前缀
|
|
|
|
|
|
// 支持 request / uploadFile / downloadFile
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**职责**:
|
|
|
|
|
|
- 统一处理 API 请求
|
|
|
|
|
|
- 自动添加域名和路径前缀
|
|
|
|
|
|
- 请求/响应日志打印
|
|
|
|
|
|
- 错误处理
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 组件库
|
|
|
|
|
|
|
|
|
|
|
|
**位置**:`src/components/ui/`
|
|
|
|
|
|
|
|
|
|
|
|
**组件分类**:
|
|
|
|
|
|
- 基础组件:Button, Input, Badge, Avatar
|
|
|
|
|
|
- 布局组件:Card, Dialog, Drawer, Sheet
|
|
|
|
|
|
- 数据展示:Table, Progress, Skeleton
|
|
|
|
|
|
- 导航组件:Tabs, Breadcrumb
|
|
|
|
|
|
- 反馈组件:Toast, Alert, Tooltip
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 状态管理
|
|
|
|
|
|
|
|
|
|
|
|
**方案**:Zustand
|
|
|
|
|
|
|
|
|
|
|
|
**特点**:
|
|
|
|
|
|
- 轻量级
|
|
|
|
|
|
- 无 Provider 嵌套
|
|
|
|
|
|
- TypeScript 友好
|
|
|
|
|
|
|
|
|
|
|
|
### 4. 后端模块
|
|
|
|
|
|
|
|
|
|
|
|
```
|
2026-05-23 20:55:12 +08:00
|
|
|
|
src/server/src/
|
2026-05-22 16:25:05 +08:00
|
|
|
|
├── controllers/ # 控制器
|
|
|
|
|
|
├── services/ # 业务逻辑
|
|
|
|
|
|
├── modules/ # NestJS 模块
|
|
|
|
|
|
├── entities/ # 数据实体
|
|
|
|
|
|
├── dto/ # 数据传输对象
|
|
|
|
|
|
└── interceptors/ # 拦截器
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 多端适配策略
|
|
|
|
|
|
|
|
|
|
|
|
### 平台检测
|
|
|
|
|
|
|
|
|
|
|
|
```typescript
|
|
|
|
|
|
import { Taro, ENV_TYPE } from '@tarojs/taro'
|
|
|
|
|
|
|
|
|
|
|
|
const isWeapp = Taro.getEnv() === ENV_TYPE.WEAPP // 微信小程序
|
|
|
|
|
|
const isTT = Taro.getEnv() === ENV_TYPE.TT // 抖音小程序
|
|
|
|
|
|
const isH5 = Taro.getEnv() === ENV_TYPE.WEB // H5
|
2026-05-22 15:27:36 +08:00
|
|
|
|
```
|
2026-05-22 16:25:05 +08:00
|
|
|
|
|
|
|
|
|
|
### 跨端规则
|
|
|
|
|
|
|
|
|
|
|
|
| 场景 | 适配方案 |
|
|
|
|
|
|
|------|---------|
|
|
|
|
|
|
| Text 换行 | 添加 `block` 类 |
|
|
|
|
|
|
| Input 样式 | View 包裹,样式放 View |
|
|
|
|
|
|
| Fixed + Flex | 使用 inline style |
|
|
|
|
|
|
| 原生组件 | 平台检测 + 降级方案 |
|
|
|
|
|
|
|
|
|
|
|
|
## 部署架构
|
|
|
|
|
|
|
|
|
|
|
|
### 开发环境
|
|
|
|
|
|
- 前端:H5 端口 5000
|
|
|
|
|
|
- 后端:Node 端口 3000
|
|
|
|
|
|
|
|
|
|
|
|
### 生产环境
|
|
|
|
|
|
- 微信小程序:构建 weapp 包
|
|
|
|
|
|
- 抖音小程序:构建 tt 包
|
|
|
|
|
|
- H5:构建 web 静态资源
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
**文档版本**:v1.0.0
|
|
|
|
|
|
**最后更新**:2026-05-22
|