# 泰豪电源 AI 数智化平台 - 前端完整指南 ## 📖 目录 1. [技术架构](#1-技术架构) 2. [共享组件方案](#2-共享组件方案) 3. [快速开始](#3-快速开始) 4. [开发指南](#4-开发指南) 5. [构建部署](#5-构建部署) 6. [常见问题](#6-常见问题) --- ## 1. 技术架构 ### 1.1 技术栈 **前端框架** - Vue 3.5+ (` ``` **Vue 组件使用** ```vue ``` ### 2.3 优势 | 特性 | 传统方式 | Import Maps 方案 | |------|---------|-----------------| | 代码共享 | ❌ 每个应用打包一份 | ✅ 所有应用共用一份 | | 构建体积 | ❌ 重复打包 | ✅ 减少 30-50% | | 依赖管理 | ❌ 每个应用配置 | ✅ 共享服务统一管理 | | 版本升级 | ❌ 所有应用改 | ✅ 只改共享服务 | | 浏览器缓存 | ⚠️ 独立缓存 | ✅ 统一缓存 | --- ## 3. 快速开始 ### 3.1 Docker 环境(推荐) ```bash # 1. 启动所有服务 make up # 2. 查看状态 make ps # 3. 访问应用 open http://localhost ``` **访问地址** - 主应用: http://localhost/ - 招投标: http://localhost/bidding - 智能客服: http://localhost/customer-service - 共享组件: http://localhost/shared/components.js - API网关: http://localhost/api - Nacos: http://localhost/nacos ### 3.2 本地开发 ```bash # 1. 安装依赖 pnpm install # 2. 启动所有应用 pnpm dev # 或启动单个应用 pnpm --filter portal dev pnpm --filter app-bidding dev ``` --- ## 4. 开发指南 ### 4.1 创建页面 ```vue ``` ### 4.2 API 调用 ```typescript // 使用封装的 API import { authApi, systemApi } from '@shared/api' // GET 请求 const users = await authApi.getUserList({ page: 1, size: 10 }) // POST 请求 await authApi.createUser({ username: 'test', email: 'test@example.com' }) // 直接使用 http import { http } from '@shared/utils' const data = await http.get('/custom/endpoint') ``` ### 4.3 状态管理 ```typescript // store/user.ts import { defineStore } from 'pinia' import { ref, computed } from 'vue' import { authApi } from '@shared/api' export const useUserStore = defineStore('user', () => { // State const userInfo = ref(null) const permissions = ref([]) // Getters const isLoggedIn = computed(() => !!userInfo.value) // Actions const login = async (loginData) => { const res = await authApi.login(loginData) userInfo.value = res.userInfo permissions.value = res.permissions } return { userInfo, permissions, isLoggedIn, login } }) ``` ### 4.4 路由配置 ```typescript // router/index.ts import { createRouter, createWebHistory } from 'vue-router' const routes = [ { path: '/', component: () => import('@/layouts/MainLayout.vue'), children: [ { path: 'home', component: () => import('@/views/home/index.vue'), meta: { title: '首页' } } ] } ] const router = createRouter({ history: createWebHistory(), routes }) export default router ``` ### 4.5 常用命令 ```bash # 查看日志 make logs-portal # 主应用日志 make logs-gateway # 网关日志 make logs-shared # 共享包日志 # 重启服务 make restart-portal # 重启主应用 make restart # 重启所有服务 # 进入容器 make shell-portal # 进入容器调试 # 数据库 make db # 连接数据库 make db-init # 初始化数据 ``` --- ## 5. 构建部署 ### 5.1 本地构建 ```bash # 构建所有应用 pnpm build # 构建单个应用 pnpm --filter portal build pnpm --filter shared build # 预览 pnpm preview ``` ### 5.2 部署到生产 **方式1: Docker 部署** ```bash # 构建生产镜像 docker build -t urban-lifeline-web . # 运行 docker run -p 80:80 urban-lifeline-web ``` **方式2: CDN 部署** ```bash # 部署共享包到 CDN cd packages/shared pnpm build ossutil cp -r dist/esm/ oss://cdn/shared/v1.0.0/ # 部署业务应用 cd packages/portal pnpm build ossutil cp -r dist/ oss://cdn/portal/ ``` **方式3: Nginx 静态部署** ```nginx server { listen 80; server_name taihao.com; # 主应用 location / { root /var/www/portal/dist; try_files $uri $uri/ /index.html; } # 共享包 location /shared/ { root /var/www/shared/dist; add_header Access-Control-Allow-Origin "*"; expires 1y; } # API 代理 location /api/ { proxy_pass http://gateway:8080/; } } ``` ### 5.3 环境变量 ```bash # .env.development VITE_API_BASE_URL=http://localhost/api VITE_SHARED_URL=http://localhost/shared # .env.production VITE_API_BASE_URL=https://api.taihao.com/api VITE_SHARED_URL=https://cdn.taihao.com/shared/v1.0.0 ``` ### 5.4 CI/CD ```yaml # .github/workflows/deploy.yml name: Deploy on: push: branches: [main] jobs: build-and-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 with: version: 9 - name: Build run: pnpm install && pnpm build - name: Deploy run: ./scripts/deploy-production.sh ``` --- ## 6. 常见问题 ### 6.1 为什么使用 Import Maps? **优势**: - ✅ 浏览器原生支持,无需额外库 - ✅ 真正的运行时共享 - ✅ 开发体验好(支持 HMR) - ✅ 减小构建体积 **对比 Module Federation**: - Import Maps 更简单,配置少 - Module Federation 功能更强大,但复杂 - 两者可以结合使用 ### 6.2 如何处理 TypeScript 类型? ```typescript // packages/portal/src/types/shared.d.ts declare module '@shared/components' { export * from '../../../shared/src/components' } declare module '@shared/utils' { export * from '../../../shared/src/utils' } ``` ### 6.3 如何更新共享组件? ```bash # 1. 修改共享组件代码 vim packages/shared/src/components/UlTable/index.vue # 2. 重启共享服务(HMR 自动生效) make restart-shared # 3. 浏览器刷新,所有应用自动获得最新版本 ``` ### 6.4 生产环境如何缓存? ```nginx # Nginx 配置 location /shared/ { # 基于版本号的长期缓存 expires 1y; add_header Cache-Control "public, immutable"; } # HTML 不缓存 location ~* \.html$ { add_header Cache-Control "no-cache"; } ``` ### 6.5 如何调试共享组件? ```bash # 方式1: 查看网络请求 浏览器 F12 → Network → 筛选 JS → 查看 /shared/components.js # 方式2: 查看日志 make logs-shared # 方式3: 进入容器 make shell-shared ``` ### 6.6 为什么不用 Webpack? Vite 优势: - ⚡ 开发启动快(秒级) - 🔥 HMR 更快 - 📦 生产构建基于 Rollup(体积更小) - 🎯 原生 ES Module 支持 ### 6.7 如何处理样式? ```vue ``` 共享包会自动处理 CSS 提取和分割。 ### 6.8 如何添加新的业务应用? ```bash # 1. 复制现有应用作为模板 cp -r packages/portal packages/app-newapp # 2. 修改 package.json { "name": "@apps/newapp", "scripts": { "dev": "vite --port 3003" } } # 3. 添加到 pnpm-workspace.yaml(已自动包含) # 4. 启动 pnpm --filter app-newapp dev ``` --- ## 附录 ### A. 常用脚本 ```bash # Makefile 命令 make up # 启动 make down # 停止 make logs # 日志 make ps # 状态 make restart # 重启 make clean # 清理 # pnpm 命令 pnpm dev # 开发 pnpm build # 构建 pnpm preview # 预览 pnpm lint # 检查 pnpm format # 格式化 ``` ### B. 目录说明 ``` urbanLifeline/ ├── urbanLifelineServ/ # 后端(Java Spring Boot) ├── urbanLifelineWeb/ # 前端(Vue 3 Monorepo) ├── docker-compose.dev.yml # Docker 开发环境 ├── Makefile # 快捷命令 └── docs/ # 文档 └── 前端完整指南.md # 📖 本文档 ``` ### C. 技术支持 - 项目文档:`/docs` - 问题反馈:GitHub Issues - 开发规范:ESLint + Prettier - 提交规范:Conventional Commits --- **Happy Coding! 🚀** *最后更新:2025-12-02*