# 系统架构文档

## 架构概述

MobVue 是一个基于 Vue3 的移动端 H5 应用，采用现代化的前端技术栈，具备清晰的模块化设计和可扩展的架构。

## 技术架构

### 前端技术栈

```
┌─────────────────────────────────────────────────────────────┐
│                        MobVue 应用                          │
├─────────────────────────────────────────────────────────────┤
│  Vue 3 + Composition API + TypeScript + Vant UI             │
├─────────────────────────────────────────────────────────────┤
│  Pinia (状态管理) │ Vue Router (路由) │ UnoCSS (样式)       │
├─────────────────────────────────────────────────────────────┤
│  Vite (构建工具) │ Axios (HTTP客户端) │ ESLint (代码规范)   │
└─────────────────────────────────────────────────────────────┘
```

### 核心依赖关系

```
App.vue
    ├── Layout (布局系统)
    │   ├── NavBar (导航栏)
    │   ├── Tabbar (标签栏)
    │   └── RouterView (页面渲染)
    ├── Pinia Stores (状态管理)
    │   ├── User Store (用户状态)
    │   ├── Wx Store (微信状态)
    │   ├── Product Store (商品状态)
    │   └── Cart Store (购物车状态)
    └── Router (路由系统)
        ├── Route Guards (路由守卫)
        └── Route Configuration (路由配置)
```

## 模块架构

### 1. 核心模块

#### 应用入口 (src/main.ts)
```typescript
// 应用初始化流程
1. 创建 Vue 应用实例
2. 安装插件系统
3. 配置状态管理 (Pinia)
4. 配置路由系统 (Vue Router)
5. 挂载应用到 DOM
```

#### 应用根组件 (src/App.vue)
```typescript
// 主要职责
1. 全局配置提供器 (ConfigProvider)
2. 主题模式管理 (暗黑/亮色)
3. 微信回调处理
4. 用户认证状态管理
5. 布局系统容器
```

### 2. 布局系统 (src/layout/)

#### 布局组件结构
```
Layout (主布局)
├── NavBar (导航栏)
│   ├── 标题显示
│   ├── 返回按钮
│   └── 操作按钮
├── Tabbar (标签栏)
│   ├── 首页
│   ├── 商品列表
│   ├── 审批中心
│   └── 个人中心
└── RouterView (页面内容)
```

#### 布局配置
```typescript
interface LayoutConfig {
  navBar: {
    showNavBar: boolean;      // 是否显示导航栏
    showLeftArrow: boolean;   // 是否显示返回箭头
    title?: string;           // 导航栏标题
  };
  tabbar: {
    showTabbar: boolean;      // 是否显示标签栏
    icon?: string;            // 标签图标
  };
}
```

### 3. 状态管理架构 (src/pinia/)

#### Store 设计模式
```typescript
// Store 通用结构
export const useXxxStore = defineStore("xxx", () => {
  // 1. State (状态)
  const state = ref<StateType>(initialValue);

  // 2. Getters (计算属性)
  const computedState = computed(() => {
    return state.value.filter(...);
  });

  // 3. Actions (操作)
  const fetchData = async () => {
    // 异步操作
  };

  // 4. 返回暴露的属性和方法
  return { state, computedState, fetchData };
});
```

#### Store 依赖关系
```
User Store
    ├── 用户认证状态
    ├── 用户权限信息
    └── 用户基本信息

Wx Store
    ├── 微信认证状态
    ├── 用户 OpenID
    ├── 企业微信信息
    └── 余额信息

Product Store
    ├── 商品列表
    ├── 商品详情
    └── 商品分类

Cart Store
    ├── 购物车商品
    ├── 选中状态
    └── 结算信息

Order Store
    ├── 订单列表
    ├── 订单详情
    └── 订单状态
```

### 4. 路由架构 (src/router/)

#### 路由分层设计
```typescript
// 系统路由 (错误页面等)
export const systemRoutes: RouteRecordRaw[] = [
  { path: "/403", component: Error403 },
  { path: "/404", component: Error404 }
];

// 业务路由 (主要功能页面)
export const routes: RouteRecordRaw[] = [
  { path: "/", component: ProductList },
  { path: "/me", component: UserCenter },
  { path: "/order/:id", component: OrderDetail }
];
```

#### 路由守卫流程
```typescript
// 路由导航守卫流程
1. 检查白名单 (无需认证的页面)
2. 验证用户认证状态
3. 检查页面访问权限
4. 设置页面标题
5. 处理布局配置
6. 执行路由跳转
```

### 5. API 架构 (src/common/apis/)

#### API 模块化组织
```
apis/
├── users/          # 用户相关接口
│   ├── index.ts   # 接口方法
│   └── type.ts    # 类型定义
├── shop/           # 店铺相关接口
├── cabinet/        # 柜机相关接口
├── approval/       # 审批相关接口
└── ab98/           # AB98系统接口
```

#### HTTP 客户端架构
```typescript
// Axios 配置层次
1. 创建实例配置
2. 请求拦截器 (添加 Token 等)
3. 响应拦截器 (统一错误处理)
4. 业务状态码处理
5. 全局错误处理
```

### 6. 工具函数架构 (src/common/utils/)

#### 工具模块分类
```
utils/
├── cache/          # 缓存工具
│   ├── cookies.ts  # Cookie 操作
│   └── local-storage.ts # 本地存储
├── permission.ts   # 权限工具
├── wx.ts           # 微信工具
├── validate.ts     # 验证工具
└── datetime.ts     # 日期时间工具
```

### 7. 组合式函数架构 (src/common/composables/)

#### 可复用逻辑
```typescript
// 组合式函数设计模式
export function useXxx() {
  // 1. 响应式状态
  const state = ref(initialValue);

  // 2. 操作方法
  const action = () => {
    // 业务逻辑
  };

  // 3. 生命周期
  onMounted(() => {
    // 初始化逻辑
  });

  // 4. 返回暴露的 API
  return { state, action };
}
```

## 数据流架构

### 1. 组件间通信

#### Props/Emits (父子组件)
```vue
<!-- 父组件 -->
<ChildComponent
  :title="parentTitle"
  @update:title="handleTitleUpdate"
/>

<!-- 子组件 -->
<script setup lang="ts">
const props = defineProps<{ title: string }>();
const emit = defineEmits<{ 'update:title': [value: string] }>();
</script>
```

#### Provide/Inject (跨层级组件)
```typescript
// 祖先组件
const theme = ref('light');
provide('theme', theme);

// 后代组件
const theme = inject<Ref<string>>('theme');
```

#### Pinia Store (全局状态)
```typescript
// 在任何组件中使用
const userStore = useUserStore();
const { token, username } = storeToRefs(userStore);
```

### 2. API 数据流

#### 数据获取流程
```typescript
// 1. 组件触发 Action
const productStore = useProductStore();

// 2. Store 调用 API
const fetchProducts = async () => {
  loading.value = true;
  try {
    const response = await getProductListApi();
    if (response.code === 0) {
      products.value = response.data.products;
    }
  } finally {
    loading.value = false;
  }
};

// 3. 组件监听状态变化
watchEffect(() => {
  if (productStore.products.length > 0) {
    // 更新 UI
  }
});
```

### 3. 用户交互流程

#### 典型用户操作流程
```
用户打开应用
    ↓
微信认证处理
    ↓
获取用户信息
    ↓
显示商品列表
    ↓
用户选择商品
    ↓
加入购物车
    ↓
创建订单
    ↓
支付结算
    ↓
订单完成
```

## 安全架构

### 1. 认证机制

#### 微信 OAuth2.0 认证流程
```typescript
// 微信认证流程
1. 重定向到微信授权页面
2. 用户授权后返回 code
3. 使用 code 换取 access_token
4. 获取用户 OpenID
5. 验证用户权限
6. 生成应用内 Token
```

#### Token 管理
```typescript
// Token 存储策略
1. HTTP Only Cookie 存储
2. 自动续期机制
3. 安全退出清理
4. 跨域请求携带
```

### 2. 权限控制

#### 路由级权限
```typescript
// 路由守卫权限检查
const hasPermission = (route: RouteLocationNormalized) => {
  if (route.meta?.requiresAuth && !isAuthenticated) {
    return false;
  }
  if (route.meta?.roles && !hasRole(route.meta.roles)) {
    return false;
  }
  return true;
};
```

#### 组件级权限
```vue
<!-- 权限指令使用 -->
<button v-permission="['admin']">管理员操作</button>
```

### 3. 数据安全

#### 敏感信息保护
```typescript
// 本地存储加密
const encryptData = (data: string) => {
  return btoa(encodeURIComponent(data));
};

const decryptData = (encrypted: string) => {
  return decodeURIComponent(atob(encrypted));
};
```

## 性能架构

### 1. 代码分割

#### 路由级懒加载
```typescript
// 动态导入组件
const ProductList = () => import('@/pages/product/ProductList.vue');
```

#### 第三方库分割
```typescript
// Vite 配置手动分块
manualChunks: {
  vue: ['vue', 'vue-router', 'pinia']
}
```

### 2. 缓存策略

#### 组件缓存
```vue
<!-- KeepAlive 缓存 -->
<router-view v-slot="{ Component }">
  <keep-alive :include="cachedRoutes">
    <component :is="Component" />
  </keep-alive>
</router-view>
```

#### API 响应缓存
```typescript
// 接口数据缓存
const cache = new Map();

const getCachedData = async (key: string, fetcher: () => Promise<any>) => {
  if (cache.has(key)) {
    return cache.get(key);
  }
  const data = await fetcher();
  cache.set(key, data);
  return data;
};
```

### 3. 资源优化

#### 图片优化
```vue
<!-- 图片懒加载 -->
<img
  :src="product.image"
  loading="lazy"
  :alt="product.name"
/>
```

#### CSS 优化
```css
/* UnoCSS 原子化类名 */
.un-p-4 { padding: 1rem; }
.un-bg-white { background-color: white; }
.un-rounded-lg { border-radius: 0.5rem; }
```

## 扩展性设计

### 1. 插件系统

#### 插件注册机制
```typescript
// 插件安装函数
export const installPlugins = (app: App) => {
  // 注册全局组件
  app.component('CustomComponent', CustomComponent);

  // 注册自定义指令
  app.directive('permission', permissionDirective);

  // 注册全局属性
  app.config.globalProperties.$utils = utils;
};
```

### 2. 配置系统

#### 环境配置
```typescript
// 多环境配置支持
const config = {
  development: {
    baseURL: 'http://localhost:3000',
    debug: true
  },
  production: {
    baseURL: 'https://api.example.com',
    debug: false
  }
};
```

### 3. 主题系统

#### 动态主题切换
```typescript
// 主题管理
const useTheme = () => {
  const isDark = ref(false);

  const toggleTheme = () => {
    isDark.value = !isDark.value;
    document.documentElement.classList.toggle('dark', isDark.value);
  };

  return { isDark, toggleTheme };
};
```

## 监控和调试

### 1. 开发工具

#### Vue DevTools 集成
```typescript
// 开发环境启用
if (import.meta.env.DEV) {
  // 启用 Vue DevTools
}
```

#### 控制台调试
```typescript
// VConsole 移动端调试
import VConsole from 'vconsole';

if (import.meta.env.DEV) {
  new VConsole();
}
```

### 2. 错误监控

#### 全局错误处理
```typescript
// Vue 错误处理
app.config.errorHandler = (err, instance, info) => {
  console.error('Vue 错误:', err, info);
  // 发送错误报告
};

// 未处理 Promise 拒绝
window.addEventListener('unhandledrejection', (event) => {
  console.error('未处理的 Promise 拒绝:', event.reason);
});
```

## 部署架构

### 1. 构建优化

#### 生产环境构建
```typescript
// Vite 生产配置
build: {
  rollupOptions: {
    output: {
      manualChunks: {
        vue: ['vue', 'vue-router', 'pinia']
      }
    }
  },
  reportCompressedSize: false,
  chunkSizeWarningLimit: 2048
}
```

### 2. CDN 部署

#### 静态资源优化
```typescript
// 静态资源 CDN 配置
base: process.env.NODE_ENV === 'production'
  ? 'https://cdn.example.com/mobvue/'
  : '/'
```

## 总结

MobVue 采用现代化的前端架构设计，具备以下特点：

1. **模块化设计**: 清晰的模块边界和职责分离
2. **类型安全**: 全面的 TypeScript 支持
3. **状态管理**: 集中式的状态管理方案
4. **性能优化**: 多层次的性能优化策略
5. **安全可靠**: 完善的安全机制和错误处理
6. **可扩展性**: 灵活的插件和配置系统
7. **开发体验**: 优秀的开发工具和调试支持

这种架构设计确保了项目的可维护性、可扩展性和高性能，为移动端 H5 应用开发提供了坚实的基础。