Files
CKB-Touchkebao/TouchVueThree/PROJECT_STRUCTURE.md
2026-01-12 11:57:00 +08:00

10 KiB
Raw Blame History

TouchVueThree 项目目录结构说明

PC 端微信客服系统 - Vue3 + TypeScript + Element Plus

📁 目录结构

TouchVueThree/
├── public/                      # 静态资源(不会被编译)
│   ├── favicon.ico
│   └── assets/                  # 图片、表情包等静态资源
│
├── src/
│   ├── api/                     # API 接口层
│   │   ├── request.ts           # Axios 封装(拦截器、错误处理)
│   │   ├── interceptors.ts      # 请求/响应拦截器
│   │   └── modules/             # 按业务模块划分的接口
│   │       ├── user.ts          # 用户相关接口
│   │       ├── wechat.ts        # 微信相关接口
│   │       ├── ai.ts            # AI 相关接口
│   │       └── common.ts        # 通用接口(文件上传等)
│   │
│   ├── assets/                  # 资源文件
│   │   ├── images/              # 图片资源
│   │   ├── icons/               # 图标资源
│   │   └── styles/              # 样式文件
│   │       ├── variables.scss   # 全局变量(颜色、字体)
│   │       ├── mixins.scss      # SCSS 混入
│   │       ├── reset.scss       # 样式重置
│   │       └── global.scss      # 全局样式
│   │
│   ├── components/              # 公共组件
│   │   ├── common/              # 通用组件(与业务无关)
│   │   │   ├── Button/          # 自定义按钮
│   │   │   ├── Dialog/          # 自定义对话框
│   │   │   ├── Loading/         # 加载组件
│   │   │   ├── Empty/           # 空状态
│   │   │   └── ErrorBoundary/   # 错误边界
│   │   │
│   │   └── business/            # 业务组件(微信客服相关)
│   │       ├── ChatWindow/      # 聊天窗口
│   │       ├── ContactList/     # 联系人列表
│   │       ├── SessionList/     # 会话列表
│   │       ├── CustomerList/    # 客服账号列表
│   │       ├── ProfileCard/     # 客户画像卡片
│   │       ├── EmojiPicker/     # 表情选择器
│   │       ├── FileUpload/      # 文件上传
│   │       └── QuickReply/      # 快捷回复
│   │
│   ├── composables/             # 组合式函数Composition API
│   │   ├── core/                # 核心功能
│   │   │   ├── useAuth.ts       # 认证登录
│   │   │   ├── useWebSocket.ts  # WebSocket 管理
│   │   │   ├── useEventBus.ts   # 事件总线
│   │   │   └── useRequest.ts    # 请求封装
│   │   │
│   │   └── business/            # 业务功能
│   │       ├── useMessages.ts   # 消息管理
│   │       ├── useContacts.ts   # 联系人管理
│   │       ├── useSessions.ts   # 会话管理
│   │       ├── useAi.ts         # AI 功能
│   │       └── useUpload.ts     # 文件上传
│   │
│   ├── directives/              # 自定义指令
│   │   ├── vLoading.ts          # 加载指令
│   │   ├── vLazyLoad.ts         # 懒加载指令
│   │   └── vPermission.ts       # 权限指令
│   │
│   ├── layouts/                 # 页面布局
│   │   ├── DefaultLayout.vue    # 默认布局
│   │   └── ChatLayout.vue       # 聊天布局(三栏)
│   │
│   ├── router/                  # 路由配置
│   │   ├── index.ts             # 路由主文件
│   │   ├── guards.ts            # 路由守卫(权限控制)
│   │   └── routes.ts            # 路由配置
│   │
│   ├── stores/                  # Pinia 状态管理
│   │   ├── index.ts             # Store 统一出口
│   │   └── modules/             # Store 模块
│   │       ├── user.ts          # 用户状态
│   │       ├── app.ts           # 应用全局状态
│   │       ├── websocket.ts     # WebSocket 状态
│   │       └── wechat/          # 微信模块
│   │           ├── contacts.ts  # 联系人
│   │           ├── messages.ts  # 消息
│   │           ├── sessions.ts  # 会话
│   │           └── ai.ts        # AI
│   │
│   ├── types/                   # TypeScript 类型定义
│   │   ├── global.d.ts          # 全局类型
│   │   ├── api.d.ts             # API 类型
│   │   ├── user.ts              # 用户类型
│   │   ├── wechat.ts            # 微信类型
│   │   └── websocket.ts         # WebSocket 类型
│   │
│   ├── utils/                   # 工具函数
│   │   ├── common.ts            # 通用工具
│   │   ├── date.ts              # 日期处理
│   │   ├── format.ts            # 格式化
│   │   ├── validator.ts         # 验证
│   │   ├── storage.ts           # 本地存储
│   │   ├── event-bus.ts         # 事件总线
│   │   └── sentry/              # 错误监控
│   │       └── index.ts
│   │
│   ├── views/                   # 页面组件
│   │   ├── Login/               # 登录页
│   │   │   └── index.vue
│   │   │
│   │   ├── Chat/                # 聊天主页(核心功能)
│   │   │   ├── index.vue
│   │   │   └── components/      # 聊天页专用组件
│   │   │       ├── Sidebar.vue  # 左侧边栏
│   │   │       ├── Main.vue     # 中间聊天区
│   │   │       └── Panel.vue    # 右侧面板
│   │   │
│   │   ├── Dashboard/           # 数据看板
│   │   │   └── index.vue
│   │   │
│   │   ├── Settings/            # 系统设置
│   │   │   └── index.vue
│   │   │
│   │   ├── PowerCenter/         # 能力中心
│   │   │   ├── CustomerManagement/    # 客户管理
│   │   │   ├── ContentManagement/     # 内容管理
│   │   │   ├── DataStatistics/        # 数据统计
│   │   │   └── AiTraining/            # AI 训练
│   │   │
│   │   └── 404/                 # 404 页面
│   │       └── index.vue
│   │
│   ├── App.vue                  # 根组件
│   └── main.ts                  # 入口文件
│
├── .env.development             # 开发环境变量
├── .env.production              # 生产环境变量
├── .eslintrc.cjs                # ESLint 配置
├── .prettierrc                  # Prettier 配置
├── tsconfig.json                # TypeScript 配置
├── vite.config.ts               # Vite 配置
└── package.json                 # 项目配置

🎯 命名规范

文件命名

  • 组件文件PascalCase大驼峰

    • ChatWindow.vue, MessageList.vue
  • 工具文件camelCase小驼峰

    • common.ts, useAuth.ts
  • 类型文件camelCase 或 kebab-case

    • user.ts, api.d.ts

目录命名

  • kebab-case(短横线)或 camelCase
    • components/business, composables/core

组件命名规则

// ✅ 推荐
<script setup lang="ts" name="ChatWindow">
// 组件逻辑
</script>

// ❌ 避免
<script setup lang="ts">
// 没有 name 属性
</script>

🔧 开发规范

1. Composables 使用规范

// composables/core/useAuth.ts
import { ref, computed } from 'vue'
import { useUserStore } from '@/stores'

export function useAuth() {
  const userStore = useUserStore()

  const isLoggedIn = computed(() => userStore.isLoggedIn)

  const login = async (credentials) => {
    // 登录逻辑
  }

  return {
    isLoggedIn,
    login
  }
}

2. Store 使用规范

// stores/modules/user.ts
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'

export const useUserStore = defineStore('user', () => {
  // State
  const user = ref(null)
  const token = ref('')

  // Getters
  const isLoggedIn = computed(() => !!token.value)

  // Actions
  const setUser = (userData) => {
    user.value = userData
  }

  return { user, token, isLoggedIn, setUser }
}, {
  persist: {
    key: 'user-store',
    paths: ['user', 'token']
  }
})

3. API 调用规范

// api/modules/user.ts
import request from '../request'

export const loginApi = (data: LoginParams) => {
  return request('/auth/login', data, 'POST')
}

export const getUserInfoApi = () => {
  return request('/user/info', {}, 'GET')
}

4. 组件引入规范

<script setup lang="ts">
// 1. Vue API
import { ref, computed, onMounted } from 'vue'

// 2. 第三方库
import { ElMessage } from 'element-plus'

// 3. Store
import { useUserStore } from '@/stores'

// 4. Composables
import { useAuth } from '@/composables/core/useAuth'

// 5. 类型
import type { User } from '@/types/user'

// 6. 组件
import ChatWindow from '@/components/business/ChatWindow/index.vue'
</script>

📝 注释规范

/**
 * 用户登录
 * @param credentials 登录凭证
 * @returns Promise<UserInfo>
 */
export async function login(credentials: LoginParams): Promise<UserInfo> {
  // 实现逻辑
}

🚀 启动命令

# 安装依赖
pnpm install

# 启动开发服务器
pnpm dev

# 类型检查
pnpm type-check

# 代码检查
pnpm lint

# 格式化代码
pnpm format

# 构建生产版本
pnpm build

# 预览生产版本
pnpm preview

# 打包分析
pnpm analyze

📌 下一步计划

  1. 目录结构已创建
  2. package.json 已优化
  3. 安装依赖:pnpm install
  4. 创建基础配置文件
  5. 开发核心功能

更新时间: 2026-01-12 版本: 2.0.0 技术栈: Vue 3.4 + TypeScript 5.4 + Element Plus 2.5 + Pinia 2.1