Commit fe9e5fc57dbd635c4dc5e8289b530e4d929f2254
1 parent
bf647815
v1.9 加入一些开发相关说明,方便大家快速上手
Showing
4 changed files
with
1273 additions
and
0 deletions
docs/README.md
0 → 100644
| 1 | +# HC物业管理系统 - 开发文档 | ||
| 2 | + | ||
| 3 | +欢迎来到物业管理系统开发文档!这里包含了小白开发者快速上手所需的所有信息。 | ||
| 4 | + | ||
| 5 | +## 📚 文档目录 | ||
| 6 | + | ||
| 7 | +### 🚀 快速上手 | ||
| 8 | +- **[开发者快速上手指南](./开发者快速上手指南.md)** - 项目概述、技术栈、开发规范 | ||
| 9 | +- **[项目架构图](./项目架构图.md)** - 整体架构、目录结构、技术架构详解 | ||
| 10 | +- **[开发环境配置指南](./开发环境配置指南.md)** - 环境搭建、配置详解、常见问题解决 | ||
| 11 | + | ||
| 12 | +## 🎯 适合人群 | ||
| 13 | + | ||
| 14 | +- **前端新手** - 刚接触 Vue 的开发者 | ||
| 15 | +- **项目新人** - 刚加入团队需要了解项目的开发者 | ||
| 16 | +- **技术调研** - 需要了解项目技术架构的人员 | ||
| 17 | + | ||
| 18 | +## 🏗️ 项目简介 | ||
| 19 | + | ||
| 20 | +**物业管理系统** 是一个基于 Vue 2 的企业级 Web 应用,提供完整的物业管理功能: | ||
| 21 | + | ||
| 22 | +- 🏠 **社区管理** - 小区、楼栋、房屋管理 | ||
| 23 | +- 👥 **业主管理** - 业主信息、家庭成员、车辆管理 | ||
| 24 | +- 💰 **费用管理** - 物业费、水电费、停车费管理 | ||
| 25 | +- 🔧 **工单管理** - 维修、投诉、巡检工单 | ||
| 26 | +- 📱 **设备管理** - 门禁、监控、充电桩管理 | ||
| 27 | +- 📊 **报表统计** - 各类数据统计和报表 | ||
| 28 | + | ||
| 29 | +## 🛠️ 技术栈 | ||
| 30 | + | ||
| 31 | +- **前端框架**: Vue 2.6.14 | ||
| 32 | +- **UI 组件库**: Element UI 2.15.6 | ||
| 33 | +- **路由管理**: Vue Router 3.5.1 | ||
| 34 | +- **HTTP 客户端**: Axios 0.21.1 | ||
| 35 | +- **国际化**: Vue I18n 8.26.7 | ||
| 36 | +- **图表库**: ECharts 5.6.0 | ||
| 37 | +- **构建工具**: Vue CLI 4.5.0 | ||
| 38 | + | ||
| 39 | +## 🚀 快速开始 | ||
| 40 | + | ||
| 41 | +### 1. 环境要求 | ||
| 42 | +- Node.js >= 12.0.0 | ||
| 43 | +- npm >= 6.0.0 | ||
| 44 | +- Vue CLI >= 4.5.0 | ||
| 45 | + | ||
| 46 | +### 2. 安装启动 | ||
| 47 | +```bash | ||
| 48 | +# 克隆项目 | ||
| 49 | +git clone [项目地址] | ||
| 50 | +cd MicroCommunityWeb | ||
| 51 | + | ||
| 52 | +# 安装依赖 | ||
| 53 | +npm install | ||
| 54 | + | ||
| 55 | +# 启动开发服务器 | ||
| 56 | +npm run dev | ||
| 57 | +``` | ||
| 58 | + | ||
| 59 | +### 3. 访问应用 | ||
| 60 | +- 开发地址: http://localhost:3000 | ||
| 61 | +- 自动打开浏览器: 是 | ||
| 62 | + | ||
| 63 | +## 📖 学习路径 | ||
| 64 | + | ||
| 65 | +### 第一阶段:环境搭建 | ||
| 66 | +1. 阅读 [开发环境配置指南](./开发环境配置指南.md) | ||
| 67 | +2. 安装必要的开发工具 | ||
| 68 | +3. 配置开发环境 | ||
| 69 | +4. 成功启动项目 | ||
| 70 | + | ||
| 71 | +### 第二阶段:项目了解 | ||
| 72 | +1. 阅读 [项目架构图](./项目架构图.md) | ||
| 73 | +2. 了解项目目录结构 | ||
| 74 | +3. 理解技术架构 | ||
| 75 | +4. 熟悉开发规范 | ||
| 76 | + | ||
| 77 | +### 第三阶段:开始开发 | ||
| 78 | +1. 阅读 [开发者快速上手指南](./开发者快速上手指南.md) | ||
| 79 | +2. 学习 Vue 2 基础语法 | ||
| 80 | +3. 熟悉 Element UI 组件 | ||
| 81 | +4. 开始编写代码 | ||
| 82 | + | ||
| 83 | +## 🔍 常见问题 | ||
| 84 | + | ||
| 85 | +### 新手常见问题 | ||
| 86 | +- **Q: 如何修改页面标题?** | ||
| 87 | + A: 参考 [开发者快速上手指南](./开发者快速上手指南.md) 中的页面标题设置部分 | ||
| 88 | + | ||
| 89 | +- **Q: 下拉框不显示内容怎么办?** | ||
| 90 | + A: 参考 [开发者快速上手指南](./开发者快速上手指南.md) 中的常见问题部分 | ||
| 91 | + | ||
| 92 | +- **Q: 如何添加新的页面?** | ||
| 93 | + A: 参考 [开发者快速上手指南](./开发者快速上手指南.md) 中的开发流程部分 | ||
| 94 | + | ||
| 95 | +### 环境配置问题 | ||
| 96 | +- **Q: npm install 失败怎么办?** | ||
| 97 | + A: 参考 [开发环境配置指南](./开发环境配置指南.md) 中的依赖安装问题部分 | ||
| 98 | + | ||
| 99 | +- **Q: 开发服务器启动失败?** | ||
| 100 | + A: 参考 [开发环境配置指南](./开发环境配置指南.md) 中的开发服务器问题部分 | ||
| 101 | + | ||
| 102 | +## 📞 获取帮助 | ||
| 103 | + | ||
| 104 | +### 文档资源 | ||
| 105 | +- 项目 README: [../README.md](../README.md) | ||
| 106 | +- 安装说明: [../install.md](../install.md) | ||
| 107 | +- 官方文档: [Vue 2 官方文档](https://v2.vuejs.org/) | ||
| 108 | + | ||
| 109 | +### 团队支持 | ||
| 110 | +- 遇到问题先查看本文档 | ||
| 111 | +- 搜索现有 issue 避免重复 | ||
| 112 | +- 联系团队成员获取帮助 | ||
| 113 | + | ||
| 114 | +## 🎉 开始你的开发之旅 | ||
| 115 | + | ||
| 116 | +现在你已经了解了项目的基本情况,建议按照以下顺序阅读文档: | ||
| 117 | + | ||
| 118 | +1. **[开发环境配置指南](./开发环境配置指南.md)** - 先搭建好开发环境 | ||
| 119 | +2. **[项目架构图](./项目架构图.md)** - 了解项目整体结构 | ||
| 120 | +3. **[开发者快速上手指南](./开发者快速上手指南.md)** - 学习开发规范和流程 | ||
| 121 | + | ||
| 122 | +**祝您开发愉快!** 🚀 | ||
| 123 | + | ||
| 124 | +--- | ||
| 125 | + | ||
| 126 | +*最后更新时间: 2024年* | ||
| 127 | +*文档维护: 开发团队* | ||
| 0 | \ No newline at end of file | 128 | \ No newline at end of file |
docs/开发环境配置指南.md
0 → 100644
| 1 | +# HC物业管理系统 - 开发环境配置指南 | ||
| 2 | + | ||
| 3 | +## 🚀 环境搭建 | ||
| 4 | + | ||
| 5 | +### 1. 基础环境要求 | ||
| 6 | + | ||
| 7 | +#### Node.js 环境 | ||
| 8 | +```bash | ||
| 9 | +# 推荐版本 | ||
| 10 | +Node.js >= 12.0.0 | ||
| 11 | +npm >= 6.0.0 | ||
| 12 | + | ||
| 13 | +# 检查版本 | ||
| 14 | +node --version | ||
| 15 | +npm --version | ||
| 16 | +``` | ||
| 17 | + | ||
| 18 | +#### 包管理器 | ||
| 19 | +```bash | ||
| 20 | +# 使用 npm (推荐) | ||
| 21 | +npm install | ||
| 22 | + | ||
| 23 | +# 或使用 yarn | ||
| 24 | +yarn install | ||
| 25 | + | ||
| 26 | +# 或使用 pnpm | ||
| 27 | +pnpm install | ||
| 28 | +``` | ||
| 29 | + | ||
| 30 | +#### 开发工具 | ||
| 31 | +- **VS Code** (推荐) | ||
| 32 | +- **WebStorm** | ||
| 33 | +- **Chrome DevTools** | ||
| 34 | +- **Vue DevTools** | ||
| 35 | + | ||
| 36 | +### 2. 项目初始化 | ||
| 37 | + | ||
| 38 | +```bash | ||
| 39 | +# 克隆项目 | ||
| 40 | +git clone [项目地址] | ||
| 41 | +cd MicroCommunityWeb | ||
| 42 | + | ||
| 43 | +# 安装依赖 | ||
| 44 | +npm install | ||
| 45 | + | ||
| 46 | +# 启动开发服务器 | ||
| 47 | +npm run dev | ||
| 48 | +``` | ||
| 49 | + | ||
| 50 | +## ⚙️ 配置文件详解 | ||
| 51 | + | ||
| 52 | +### 1. package.json | ||
| 53 | + | ||
| 54 | +```json | ||
| 55 | +{ | ||
| 56 | + "name": "property_web", | ||
| 57 | + "version": "1.0.0", | ||
| 58 | + "scripts": { | ||
| 59 | + "dev": "vue-cli-service serve", // 开发环境 | ||
| 60 | + "build": "vue-cli-service build", // 生产构建 | ||
| 61 | + "lint": "vue-cli-service lint" // 代码检查 | ||
| 62 | + }, | ||
| 63 | + "dependencies": { | ||
| 64 | + "vue": "^2.6.14", // Vue 2 核心 | ||
| 65 | + "element-ui": "^2.15.6", // UI 组件库 | ||
| 66 | + "vue-router": "^3.5.1", // 路由管理 | ||
| 67 | + "axios": "^0.21.1", // HTTP 客户端 | ||
| 68 | + "vue-i18n": "^8.26.7", // 国际化 | ||
| 69 | + "echarts": "^5.6.0" // 图表库 | ||
| 70 | + } | ||
| 71 | +} | ||
| 72 | +``` | ||
| 73 | + | ||
| 74 | +### 2. vue.config.js | ||
| 75 | + | ||
| 76 | +```javascript | ||
| 77 | +module.exports = { | ||
| 78 | + devServer: { | ||
| 79 | + port: 3000, // 开发服务器端口 | ||
| 80 | + open: true, // 自动打开浏览器 | ||
| 81 | + proxy: { // 代理配置 | ||
| 82 | + '/app': { | ||
| 83 | + target: 'http://demo.homecommunity.cn/app', | ||
| 84 | + changeOrigin: true, | ||
| 85 | + pathRewrite: { '^/app': '' } | ||
| 86 | + } | ||
| 87 | + } | ||
| 88 | + } | ||
| 89 | +} | ||
| 90 | +``` | ||
| 91 | + | ||
| 92 | +### 3. .eslintrc.js | ||
| 93 | + | ||
| 94 | +```javascript | ||
| 95 | +module.exports = { | ||
| 96 | + root: true, | ||
| 97 | + env: { | ||
| 98 | + node: true | ||
| 99 | + }, | ||
| 100 | + extends: [ | ||
| 101 | + 'plugin:vue/essential', | ||
| 102 | + 'eslint:recommended' | ||
| 103 | + ], | ||
| 104 | + rules: { | ||
| 105 | + 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', | ||
| 106 | + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off' | ||
| 107 | + } | ||
| 108 | +} | ||
| 109 | +``` | ||
| 110 | + | ||
| 111 | +## 🔧 开发环境配置 | ||
| 112 | + | ||
| 113 | +### 1. VS Code 配置 | ||
| 114 | + | ||
| 115 | +#### 推荐扩展 | ||
| 116 | +```json | ||
| 117 | +{ | ||
| 118 | + "recommendations": [ | ||
| 119 | + "Vue.volar", // Vue 2 支持 | ||
| 120 | + "Vue.vscode-typescript-vue-plugin", | ||
| 121 | + "bradlc.vscode-tailwindcss", // Tailwind CSS | ||
| 122 | + "esbenp.prettier-vscode", // 代码格式化 | ||
| 123 | + "ms-vscode.vscode-typescript-next", | ||
| 124 | + "formulahendry.auto-rename-tag", // 自动重命名标签 | ||
| 125 | + "christian-kohler.path-intellisense", // 路径智能提示 | ||
| 126 | + "ms-vscode.vscode-json" // JSON 支持 | ||
| 127 | + ] | ||
| 128 | +} | ||
| 129 | +``` | ||
| 130 | + | ||
| 131 | +#### 工作区设置 | ||
| 132 | +```json | ||
| 133 | +{ | ||
| 134 | + "editor.formatOnSave": true, | ||
| 135 | + "editor.tabSize": 2, | ||
| 136 | + "editor.insertSpaces": true, | ||
| 137 | + "files.autoSave": "afterDelay", | ||
| 138 | + "emmet.includeLanguages": { | ||
| 139 | + "vue-html": "html", | ||
| 140 | + "vue": "html" | ||
| 141 | + } | ||
| 142 | +} | ||
| 143 | +``` | ||
| 144 | + | ||
| 145 | +### 2. 浏览器配置 | ||
| 146 | + | ||
| 147 | +#### Chrome DevTools | ||
| 148 | +- 安装 Vue DevTools 扩展 | ||
| 149 | +- 启用网络面板监控 | ||
| 150 | +- 配置断点调试 | ||
| 151 | + | ||
| 152 | +#### 开发模式 | ||
| 153 | +```javascript | ||
| 154 | +// 在 main.js 中 | ||
| 155 | +Vue.config.devtools = true | ||
| 156 | +Vue.config.productionTip = false | ||
| 157 | +``` | ||
| 158 | + | ||
| 159 | +### 3. 环境变量配置 | ||
| 160 | + | ||
| 161 | +#### .env 文件 | ||
| 162 | +```bash | ||
| 163 | +# .env.development | ||
| 164 | +NODE_ENV=development | ||
| 165 | +VUE_APP_BASE_API=http://localhost:8008 | ||
| 166 | +VUE_APP_TITLE=物业管理系统(开发环境) | ||
| 167 | + | ||
| 168 | +# .env.production | ||
| 169 | +NODE_ENV=production | ||
| 170 | +VUE_APP_BASE_API=https://api.example.com | ||
| 171 | +VUE_APP_TITLE=物业管理系统 | ||
| 172 | +``` | ||
| 173 | + | ||
| 174 | +#### 使用环境变量 | ||
| 175 | +```javascript | ||
| 176 | +// 在组件中使用 | ||
| 177 | +console.log(process.env.VUE_APP_BASE_API) | ||
| 178 | +console.log(process.env.VUE_APP_TITLE) | ||
| 179 | +``` | ||
| 180 | + | ||
| 181 | +## 🚨 常见问题解决 | ||
| 182 | + | ||
| 183 | +### 1. 依赖安装问题 | ||
| 184 | + | ||
| 185 | +#### 问题:npm install 失败 | ||
| 186 | +```bash | ||
| 187 | +# 清除 npm 缓存 | ||
| 188 | +npm cache clean --force | ||
| 189 | + | ||
| 190 | +# 删除 node_modules 和 package-lock.json | ||
| 191 | +rm -rf node_modules package-lock.json | ||
| 192 | + | ||
| 193 | +# 重新安装 | ||
| 194 | +npm install | ||
| 195 | + | ||
| 196 | +# 或使用淘宝镜像 | ||
| 197 | +npm install --registry=https://registry.npmmirror.com | ||
| 198 | +``` | ||
| 199 | + | ||
| 200 | +#### 问题:版本冲突 | ||
| 201 | +```bash | ||
| 202 | +# 检查依赖版本 | ||
| 203 | +npm ls | ||
| 204 | + | ||
| 205 | +# 强制安装 | ||
| 206 | +npm install --force | ||
| 207 | + | ||
| 208 | +# 或使用 npm-check-updates 更新 | ||
| 209 | +npx npm-check-updates -u | ||
| 210 | +npm install | ||
| 211 | +``` | ||
| 212 | + | ||
| 213 | +### 2. 开发服务器问题 | ||
| 214 | + | ||
| 215 | +#### 问题:端口被占用 | ||
| 216 | +```bash | ||
| 217 | +# 查看端口占用 | ||
| 218 | +netstat -ano | findstr :3000 | ||
| 219 | + | ||
| 220 | +# 杀死进程 | ||
| 221 | +taskkill /PID [进程ID] /F | ||
| 222 | + | ||
| 223 | +# 或修改端口 | ||
| 224 | +# vue.config.js | ||
| 225 | +devServer: { | ||
| 226 | + port: 3001 | ||
| 227 | +} | ||
| 228 | +``` | ||
| 229 | + | ||
| 230 | +#### 问题:代理不工作 | ||
| 231 | +```javascript | ||
| 232 | +// 检查代理配置 | ||
| 233 | +devServer: { | ||
| 234 | + proxy: { | ||
| 235 | + '/api': { | ||
| 236 | + target: 'http://localhost:8008', | ||
| 237 | + changeOrigin: true, | ||
| 238 | + pathRewrite: { '^/api': '' }, | ||
| 239 | + logLevel: 'debug' // 添加调试日志 | ||
| 240 | + } | ||
| 241 | + } | ||
| 242 | +} | ||
| 243 | +``` | ||
| 244 | + | ||
| 245 | +### 3. 构建问题 | ||
| 246 | + | ||
| 247 | +#### 问题:构建失败 | ||
| 248 | +```bash | ||
| 249 | +# 清理构建缓存 | ||
| 250 | +npm run build -- --clean | ||
| 251 | + | ||
| 252 | +# 检查构建日志 | ||
| 253 | +npm run build --verbose | ||
| 254 | + | ||
| 255 | +# 或使用生产模式构建 | ||
| 256 | +NODE_ENV=production npm run build | ||
| 257 | +``` | ||
| 258 | + | ||
| 259 | +#### 问题:文件过大 | ||
| 260 | +```javascript | ||
| 261 | +// vue.config.js 配置代码分割 | ||
| 262 | +configureWebpack: { | ||
| 263 | + optimization: { | ||
| 264 | + splitChunks: { | ||
| 265 | + chunks: 'all', | ||
| 266 | + cacheGroups: { | ||
| 267 | + vendor: { | ||
| 268 | + name: 'chunk-vendors', | ||
| 269 | + test: /[\\/]node_modules[\\/]/, | ||
| 270 | + priority: 10, | ||
| 271 | + chunks: 'initial' | ||
| 272 | + } | ||
| 273 | + } | ||
| 274 | + } | ||
| 275 | + } | ||
| 276 | +} | ||
| 277 | +``` | ||
| 278 | + | ||
| 279 | +### 4. 代码质量问题 | ||
| 280 | + | ||
| 281 | +#### 问题:ESLint 错误 | ||
| 282 | +```bash | ||
| 283 | +# 自动修复 | ||
| 284 | +npm run lint -- --fix | ||
| 285 | + | ||
| 286 | +# 检查特定文件 | ||
| 287 | +npm run lint src/views/room/roomList.vue | ||
| 288 | + | ||
| 289 | +# 忽略特定规则 | ||
| 290 | +// eslint-disable-next-line no-console | ||
| 291 | +console.log('debug info') | ||
| 292 | +``` | ||
| 293 | + | ||
| 294 | +#### 问题:Prettier 格式化 | ||
| 295 | +```bash | ||
| 296 | +# 安装 Prettier | ||
| 297 | +npm install --save-dev prettier | ||
| 298 | + | ||
| 299 | +# 格式化代码 | ||
| 300 | +npx prettier --write "src/**/*.{js,vue,css,scss}" | ||
| 301 | +``` | ||
| 302 | + | ||
| 303 | +## 🔍 调试技巧 | ||
| 304 | + | ||
| 305 | +### 1. 控制台调试 | ||
| 306 | + | ||
| 307 | +#### Vue 组件调试 | ||
| 308 | +```javascript | ||
| 309 | +// 在组件中添加 | ||
| 310 | +mounted() { | ||
| 311 | + console.log('组件挂载完成:', this.$data) | ||
| 312 | + console.log('组件属性:', this.$props) | ||
| 313 | + console.log('组件方法:', this.$options.methods) | ||
| 314 | +} | ||
| 315 | +``` | ||
| 316 | + | ||
| 317 | +#### 网络请求调试 | ||
| 318 | +```javascript | ||
| 319 | +// 在 request.js 中添加 | ||
| 320 | +service.interceptors.request.use( | ||
| 321 | + config => { | ||
| 322 | + console.log('请求配置:', config) | ||
| 323 | + return config | ||
| 324 | + }, | ||
| 325 | + error => { | ||
| 326 | + console.error('请求错误:', error) | ||
| 327 | + return Promise.reject(error) | ||
| 328 | + } | ||
| 329 | +) | ||
| 330 | +``` | ||
| 331 | + | ||
| 332 | +### 2. 断点调试 | ||
| 333 | + | ||
| 334 | +#### 浏览器断点 | ||
| 335 | +```javascript | ||
| 336 | +// 在代码中添加 debugger | ||
| 337 | +methods: { | ||
| 338 | + handleSubmit() { | ||
| 339 | + debugger; // 浏览器会在这里暂停 | ||
| 340 | + // 业务逻辑 | ||
| 341 | + } | ||
| 342 | +} | ||
| 343 | +``` | ||
| 344 | + | ||
| 345 | +#### 条件断点 | ||
| 346 | +```javascript | ||
| 347 | +// 只在特定条件下暂停 | ||
| 348 | +if (this.formData.id) { | ||
| 349 | + debugger; // 只在编辑模式下暂停 | ||
| 350 | +} | ||
| 351 | +``` | ||
| 352 | + | ||
| 353 | +### 3. 性能调试 | ||
| 354 | + | ||
| 355 | +#### 性能监控 | ||
| 356 | +```javascript | ||
| 357 | +// 监控方法执行时间 | ||
| 358 | +methods: { | ||
| 359 | + async fetchData() { | ||
| 360 | + const startTime = performance.now() | ||
| 361 | + | ||
| 362 | + try { | ||
| 363 | + const data = await this.api.getData() | ||
| 364 | + console.log('数据获取成功:', data) | ||
| 365 | + } catch (error) { | ||
| 366 | + console.error('数据获取失败:', error) | ||
| 367 | + } finally { | ||
| 368 | + const endTime = performance.now() | ||
| 369 | + console.log(`方法执行时间: ${endTime - startTime}ms`) | ||
| 370 | + } | ||
| 371 | + } | ||
| 372 | +} | ||
| 373 | +``` | ||
| 374 | + | ||
| 375 | +## 📱 移动端开发 | ||
| 376 | + | ||
| 377 | +### 1. 响应式设计 | ||
| 378 | + | ||
| 379 | +#### 媒体查询 | ||
| 380 | +```scss | ||
| 381 | +// 移动端样式 | ||
| 382 | +@media (max-width: 768px) { | ||
| 383 | + .table-container { | ||
| 384 | + overflow-x: auto; | ||
| 385 | + } | ||
| 386 | + | ||
| 387 | + .form-item { | ||
| 388 | + margin-bottom: 15px; | ||
| 389 | + } | ||
| 390 | +} | ||
| 391 | +``` | ||
| 392 | + | ||
| 393 | +#### Element UI 响应式 | ||
| 394 | +```vue | ||
| 395 | +<template> | ||
| 396 | + <el-row :gutter="20"> | ||
| 397 | + <el-col :xs="24" :sm="12" :md="8" :lg="6"> | ||
| 398 | + <!-- 响应式列 --> | ||
| 399 | + </el-col> | ||
| 400 | + </el-row> | ||
| 401 | +</template> | ||
| 402 | +``` | ||
| 403 | + | ||
| 404 | +### 2. 触摸优化 | ||
| 405 | + | ||
| 406 | +#### 触摸事件 | ||
| 407 | +```javascript | ||
| 408 | +// 添加触摸支持 | ||
| 409 | +mounted() { | ||
| 410 | + if ('ontouchstart' in window) { | ||
| 411 | + this.isMobile = true | ||
| 412 | + this.initTouchEvents() | ||
| 413 | + } | ||
| 414 | +}, | ||
| 415 | + | ||
| 416 | +methods: { | ||
| 417 | + initTouchEvents() { | ||
| 418 | + // 触摸事件处理 | ||
| 419 | + } | ||
| 420 | +} | ||
| 421 | +``` | ||
| 422 | + | ||
| 423 | +## 🚀 性能优化 | ||
| 424 | + | ||
| 425 | +### 1. 代码分割 | ||
| 426 | + | ||
| 427 | +#### 路由懒加载 | ||
| 428 | +```javascript | ||
| 429 | +// 路由配置 | ||
| 430 | +{ | ||
| 431 | + path: '/room/list', | ||
| 432 | + component: () => import('@/views/room/roomList.vue') | ||
| 433 | +} | ||
| 434 | +``` | ||
| 435 | + | ||
| 436 | +#### 组件懒加载 | ||
| 437 | +```javascript | ||
| 438 | +// 组件注册 | ||
| 439 | +components: { | ||
| 440 | + RoomTree: () => import('@/components/room/roomTree.vue') | ||
| 441 | +} | ||
| 442 | +``` | ||
| 443 | + | ||
| 444 | +### 2. 缓存策略 | ||
| 445 | + | ||
| 446 | +#### 数据缓存 | ||
| 447 | +```javascript | ||
| 448 | +// 使用 localStorage 缓存 | ||
| 449 | +methods: { | ||
| 450 | + getCachedData(key) { | ||
| 451 | + const cached = localStorage.getItem(key) | ||
| 452 | + if (cached) { | ||
| 453 | + return JSON.parse(cached) | ||
| 454 | + } | ||
| 455 | + return null | ||
| 456 | + }, | ||
| 457 | + | ||
| 458 | + setCachedData(key, data) { | ||
| 459 | + localStorage.setItem(key, JSON.stringify(data)) | ||
| 460 | + } | ||
| 461 | +} | ||
| 462 | +``` | ||
| 463 | + | ||
| 464 | +#### 组件缓存 | ||
| 465 | +```vue | ||
| 466 | +<template> | ||
| 467 | + <keep-alive> | ||
| 468 | + <router-view /> | ||
| 469 | + </keep-alive> | ||
| 470 | +</template> | ||
| 471 | +``` | ||
| 472 | + | ||
| 473 | +## 📚 学习资源 | ||
| 474 | + | ||
| 475 | +### 1. 官方文档 | ||
| 476 | +- [Vue 2 官方文档](https://v2.vuejs.org/) | ||
| 477 | +- [Element UI 文档](https://element.eleme.cn/) | ||
| 478 | +- [Vue Router 文档](https://router.vuejs.org/) | ||
| 479 | + | ||
| 480 | +### 2. 社区资源 | ||
| 481 | +- [Vue.js 社区](https://vuejs.org/community/) | ||
| 482 | +- [Element UI 社区](https://github.com/ElemeFE/element) | ||
| 483 | +- [掘金 Vue 专栏](https://juejin.cn/tag/Vue.js) | ||
| 484 | + | ||
| 485 | +### 3. 工具推荐 | ||
| 486 | +- [Vue DevTools](https://github.com/vuejs/devtools) | ||
| 487 | +- [Vetur](https://marketplace.visualstudio.com/items?itemName=octref.vetur) | ||
| 488 | +- [Vue Snippets](https://marketplace.visualstudio.com/items?itemName=sdras.vue-vscode-snippets) | ||
| 489 | + | ||
| 490 | +--- | ||
| 491 | + | ||
| 492 | +**配置完成后,你就可以开始愉快的开发之旅了!** 🎉 | ||
| 493 | + | ||
| 494 | +如果遇到其他问题,请查看项目文档或联系团队成员。 | ||
| 0 | \ No newline at end of file | 495 | \ No newline at end of file |
docs/开发者快速上手指南.md
0 → 100644
| 1 | +# HC物业管理系统 - 开发者快速上手指南 | ||
| 2 | + | ||
| 3 | +## 📖 项目概述 | ||
| 4 | + | ||
| 5 | +**项目名称**: 物业管理系统 (MicroCommunityWeb) | ||
| 6 | +**技术栈**: Vue 2 + Element UI + Vue Router + Vuex + Axios | ||
| 7 | +**项目类型**: 企业级物业管理 Web 应用 | ||
| 8 | +**版本**: v1.9 | ||
| 9 | + | ||
| 10 | +这是一个基于 Vue 2 的物业管理系统,提供完整的物业管理功能,包括业主管理、费用管理、工单管理、设备管理等。 | ||
| 11 | + | ||
| 12 | +## 🚀 快速开始 | ||
| 13 | + | ||
| 14 | +### 环境要求 | ||
| 15 | +- Node.js >= 12.0.0 | ||
| 16 | +- npm >= 6.0.0 | ||
| 17 | +- Vue CLI >= 4.5.0 | ||
| 18 | + | ||
| 19 | +### 安装依赖 | ||
| 20 | +```bash | ||
| 21 | +# 安装项目依赖 | ||
| 22 | +npm install | ||
| 23 | + | ||
| 24 | +# 启动开发服务器 | ||
| 25 | +npm run dev | ||
| 26 | + | ||
| 27 | +# 构建生产版本 | ||
| 28 | +npm run build | ||
| 29 | +``` | ||
| 30 | + | ||
| 31 | +### 开发服务器配置 | ||
| 32 | +- 端口: 3000 | ||
| 33 | +- 自动打开浏览器: 是 | ||
| 34 | +- 代理配置: 已配置后端 API 代理 | ||
| 35 | + | ||
| 36 | +## 🏗️ 项目架构 | ||
| 37 | + | ||
| 38 | +### 目录结构 | ||
| 39 | +``` | ||
| 40 | +src/ | ||
| 41 | +├── api/ # API 接口层 | ||
| 42 | +├── components/ # 公共组件 | ||
| 43 | +├── conf/ # 配置文件 | ||
| 44 | +├── i18n/ # 国际化配置 | ||
| 45 | +├── router/ # 路由配置 | ||
| 46 | +├── utils/ # 工具函数 | ||
| 47 | +├── views/ # 页面组件 | ||
| 48 | +├── App.vue # 根组件 | ||
| 49 | +└── main.js # 入口文件 | ||
| 50 | +``` | ||
| 51 | + | ||
| 52 | +### 核心模块 | ||
| 53 | +- **用户管理**: 员工、角色、权限管理 | ||
| 54 | +- **社区管理**: 小区、楼栋、房屋管理 | ||
| 55 | +- **业主管理**: 业主信息、家庭成员、车辆管理 | ||
| 56 | +- **费用管理**: 物业费、水电费、停车费管理 | ||
| 57 | +- **工单管理**: 维修、投诉、巡检工单 | ||
| 58 | +- **设备管理**: 门禁、监控、充电桩管理 | ||
| 59 | +- **报表统计**: 各类数据统计和报表 | ||
| 60 | + | ||
| 61 | +## 🛠️ 技术特性 | ||
| 62 | + | ||
| 63 | +### 前端技术栈 | ||
| 64 | +- **Vue 2.6.14**: 渐进式 JavaScript 框架 | ||
| 65 | +- **Element UI 2.15.6**: 基于 Vue 的组件库 | ||
| 66 | +- **Vue Router 3.5.1**: 官方路由管理器 | ||
| 67 | +- **Axios 0.21.1**: HTTP 客户端 | ||
| 68 | +- **Vue I18n 8.26.7**: 国际化插件 | ||
| 69 | +- **ECharts 5.6.0**: 数据可视化图表库 | ||
| 70 | + | ||
| 71 | +### 开发工具 | ||
| 72 | +- **Vue CLI 4.5.0**: Vue 项目脚手架 | ||
| 73 | +- **ESLint**: 代码质量检查 | ||
| 74 | +- **Sass**: CSS 预处理器 | ||
| 75 | +- **Babel**: JavaScript 编译器 | ||
| 76 | + | ||
| 77 | +## 📱 页面结构 | ||
| 78 | + | ||
| 79 | +### 主要页面模块 | ||
| 80 | +``` | ||
| 81 | +views/ | ||
| 82 | +├── index/ # 首页仪表板 | ||
| 83 | +├── user/ # 用户登录相关 | ||
| 84 | +├── layout/ # 主布局框架 | ||
| 85 | +├── staff/ # 员工管理 | ||
| 86 | +├── community/ # 社区管理 | ||
| 87 | +├── room/ # 房屋管理 | ||
| 88 | +├── owner/ # 业主管理 | ||
| 89 | +├── fee/ # 费用管理 | ||
| 90 | +├── work/ # 工单管理 | ||
| 91 | +├── resource/ # 资源管理 | ||
| 92 | +├── system/ # 系统管理 | ||
| 93 | +├── report/ # 报表统计 | ||
| 94 | +└── ... | ||
| 95 | +``` | ||
| 96 | + | ||
| 97 | +### 路由配置 | ||
| 98 | +项目使用模块化路由配置,主要路由文件: | ||
| 99 | +- `src/router/index.js` - 主路由配置 | ||
| 100 | +- `src/router/feeRouter.js` - 费用管理路由 | ||
| 101 | +- `src/router/workRouter.js` - 工单管理路由 | ||
| 102 | +- `src/router/communityRouter.js` - 社区管理路由 | ||
| 103 | + | ||
| 104 | +## 🔧 开发规范 | ||
| 105 | + | ||
| 106 | +### 组件命名规范 | ||
| 107 | +- 页面组件: 使用 PascalCase,如 `RoomList.vue` | ||
| 108 | +- 公共组件: 使用 PascalCase,如 `RoomTree.vue` | ||
| 109 | +- 组件名: 使用 kebab-case,如 `room-list` | ||
| 110 | + | ||
| 111 | +### 文件命名规范 | ||
| 112 | +- 页面文件: 以 `List.vue`、`Detail.vue`、`Add.vue` 等结尾 | ||
| 113 | +- API 文件: 以 `Api.js` 结尾 | ||
| 114 | +- 语言文件: 以 `Lang.js` 结尾 | ||
| 115 | + | ||
| 116 | +### 代码风格 | ||
| 117 | +- 使用 ESLint 进行代码检查 | ||
| 118 | +- 遵循 Vue 官方风格指南 | ||
| 119 | +- 使用 2 空格缩进 | ||
| 120 | +- 使用单引号 | ||
| 121 | + | ||
| 122 | +## 🌐 国际化支持 | ||
| 123 | + | ||
| 124 | +### 多语言配置 | ||
| 125 | +项目支持中英文双语,语言文件位于 `src/i18n/` 目录: | ||
| 126 | +- `commonLang.js` - 通用语言包 | ||
| 127 | +- `feeI18n.js` - 费用管理语言包 | ||
| 128 | +- `workI18n.js` - 工单管理语言包 | ||
| 129 | +- 等等... | ||
| 130 | + | ||
| 131 | +### 使用方式 | ||
| 132 | +```javascript | ||
| 133 | +// 在模板中使用 | ||
| 134 | +{{ $t('common.save') }} | ||
| 135 | + | ||
| 136 | +// 在 JavaScript 中使用 | ||
| 137 | +this.$t('common.save') | ||
| 138 | +``` | ||
| 139 | + | ||
| 140 | +## 🔌 API 接口 | ||
| 141 | + | ||
| 142 | +### 接口配置 | ||
| 143 | +- 基础 URL: 通过代理配置到后端服务 | ||
| 144 | +- 超时时间: 15 秒 | ||
| 145 | +- 请求拦截器: 自动添加认证头信息 | ||
| 146 | +- 响应拦截器: 统一错误处理 | ||
| 147 | + | ||
| 148 | +### 接口调用示例 | ||
| 149 | +```javascript | ||
| 150 | +import { getDict } from '@/api/community/communityApi' | ||
| 151 | + | ||
| 152 | +// 获取字典数据 | ||
| 153 | +const data = await getDict('tableName', 'columnName') | ||
| 154 | +``` | ||
| 155 | + | ||
| 156 | +### 常用 API 模块 | ||
| 157 | +- `communityApi.js` - 社区相关接口 | ||
| 158 | +- `feeApi.js` - 费用相关接口 | ||
| 159 | +- `workApi.js` - 工单相关接口 | ||
| 160 | +- `userApi.js` - 用户相关接口 | ||
| 161 | + | ||
| 162 | +## 🎨 UI 组件使用 | ||
| 163 | + | ||
| 164 | +### Element UI 组件 | ||
| 165 | +项目大量使用 Element UI 组件,常用组件: | ||
| 166 | +- `el-table` - 数据表格 | ||
| 167 | +- `el-form` - 表单组件 | ||
| 168 | +- `el-dialog` - 对话框 | ||
| 169 | +- `el-select` - 下拉选择器 | ||
| 170 | +- `el-button` - 按钮组件 | ||
| 171 | + | ||
| 172 | +### 自定义组件 | ||
| 173 | +项目包含多个自定义组件: | ||
| 174 | +- `RoomTree` - 房屋树形选择器 | ||
| 175 | +- `UploadImage` - 图片上传组件 | ||
| 176 | +- `ChooseOrgTree` - 组织树选择器 | ||
| 177 | + | ||
| 178 | +## 📊 数据管理 | ||
| 179 | + | ||
| 180 | +### 状态管理 | ||
| 181 | +- 使用 Vue 的响应式数据管理 | ||
| 182 | +- 局部状态存储在组件内部 | ||
| 183 | +- 全局状态通过 Vue.prototype 挂载 | ||
| 184 | + | ||
| 185 | +### 数据流 | ||
| 186 | +1. 组件调用 API 接口 | ||
| 187 | +2. 接口返回数据 | ||
| 188 | +3. 组件更新本地状态 | ||
| 189 | +4. 视图自动更新 | ||
| 190 | + | ||
| 191 | +## 🔐 权限控制 | ||
| 192 | + | ||
| 193 | +### 权限检查 | ||
| 194 | +```javascript | ||
| 195 | +// 检查用户权限 | ||
| 196 | +if (this.hasPrivilege('502020082453087940')) { | ||
| 197 | + // 有权限的操作 | ||
| 198 | +} | ||
| 199 | +``` | ||
| 200 | + | ||
| 201 | +### 权限配置 | ||
| 202 | +权限通过后端接口返回,存储在 localStorage 中: | ||
| 203 | +- `hc_staff_privilege`: 用户权限列表 | ||
| 204 | +- `user`: 用户信息 | ||
| 205 | + | ||
| 206 | +## 🚨 常见问题 | ||
| 207 | + | ||
| 208 | +### 1. 下拉框不显示内容 | ||
| 209 | +**问题**: `el-select` 下拉选项不显示 | ||
| 210 | +**解决**: 检查数据格式,确保 `key` 和 `value` 属性一致 | ||
| 211 | + | ||
| 212 | +### 2. 表格选择功能不工作 | ||
| 213 | +**问题**: `el-table` 的 `type="selection"` 不工作 | ||
| 214 | +**解决**: 添加 `@selection-change` 事件处理 | ||
| 215 | + | ||
| 216 | +### 3. 路由跳转失败 | ||
| 217 | +**问题**: 页面跳转后显示空白 | ||
| 218 | +**解决**: 检查路由配置和组件导入路径 | ||
| 219 | + | ||
| 220 | +### 4. API 请求失败 | ||
| 221 | +**问题**: 接口调用返回错误 | ||
| 222 | +**解决**: 检查网络代理配置和接口地址 | ||
| 223 | + | ||
| 224 | +## 📝 开发流程 | ||
| 225 | + | ||
| 226 | +### 1. 创建新页面 | ||
| 227 | +```bash | ||
| 228 | +# 在 src/views/ 下创建新目录 | ||
| 229 | +mkdir src/views/newModule | ||
| 230 | + | ||
| 231 | +# 创建页面组件 | ||
| 232 | +touch src/views/newModule/NewModuleList.vue | ||
| 233 | +``` | ||
| 234 | + | ||
| 235 | +### 2. 配置路由 | ||
| 236 | +在对应的路由文件中添加新路由: | ||
| 237 | +```javascript | ||
| 238 | +{ | ||
| 239 | + path: '/views/newModule/newModuleList', | ||
| 240 | + name: 'NewModuleList', | ||
| 241 | + component: () => import('@/views/newModule/NewModuleList.vue') | ||
| 242 | +} | ||
| 243 | +``` | ||
| 244 | + | ||
| 245 | +### 3. 创建 API 接口 | ||
| 246 | +在 `src/api/` 下创建对应的 API 文件: | ||
| 247 | +```javascript | ||
| 248 | +import request from '@/utils/request' | ||
| 249 | + | ||
| 250 | +export function getNewModuleList(params) { | ||
| 251 | + return request({ | ||
| 252 | + url: '/newModule/list', | ||
| 253 | + method: 'get', | ||
| 254 | + params | ||
| 255 | + }) | ||
| 256 | +} | ||
| 257 | +``` | ||
| 258 | + | ||
| 259 | +### 4. 添加国际化支持 | ||
| 260 | +在对应的语言文件中添加翻译: | ||
| 261 | +```javascript | ||
| 262 | +export const messages = { | ||
| 263 | + zh: { | ||
| 264 | + newModule: { | ||
| 265 | + title: '新模块管理', | ||
| 266 | + add: '新增' | ||
| 267 | + } | ||
| 268 | + } | ||
| 269 | +} | ||
| 270 | +``` | ||
| 271 | + | ||
| 272 | +## 🎯 最佳实践 | ||
| 273 | + | ||
| 274 | +### 1. 组件设计 | ||
| 275 | +- 保持组件单一职责 | ||
| 276 | +- 合理使用 props 和 emit | ||
| 277 | +- 避免组件间过度耦合 | ||
| 278 | + | ||
| 279 | +### 2. 性能优化 | ||
| 280 | +- 使用 `v-if` 和 `v-show` 合理控制显示 | ||
| 281 | +- 避免在模板中使用复杂表达式 | ||
| 282 | +- 合理使用计算属性和监听器 | ||
| 283 | + | ||
| 284 | +### 3. 错误处理 | ||
| 285 | +- 添加 try-catch 错误捕获 | ||
| 286 | +- 提供用户友好的错误提示 | ||
| 287 | +- 记录错误日志便于调试 | ||
| 288 | + | ||
| 289 | +### 4. 代码复用 | ||
| 290 | +- 提取公共逻辑到 mixins | ||
| 291 | +- 创建可复用的工具函数 | ||
| 292 | +- 使用公共组件减少重复代码 | ||
| 293 | + | ||
| 294 | +## 📚 学习资源 | ||
| 295 | + | ||
| 296 | +### Vue 2 官方文档 | ||
| 297 | +- [Vue 2 指南](https://v2.vuejs.org/v2/guide/) | ||
| 298 | +- [Vue 2 API 参考](https://v2.vuejs.org/v2/api/) | ||
| 299 | + | ||
| 300 | +### Element UI 文档 | ||
| 301 | +- [Element UI 组件库](https://element.eleme.cn/#/zh-CN) | ||
| 302 | + | ||
| 303 | +### 项目相关 | ||
| 304 | +- 查看现有组件代码了解项目风格 | ||
| 305 | +- 参考相似功能的页面实现 | ||
| 306 | +- 阅读 API 接口文档 | ||
| 307 | + | ||
| 308 | +## 🤝 团队协作 | ||
| 309 | + | ||
| 310 | +### 代码提交 | ||
| 311 | +- 使用清晰的提交信息 | ||
| 312 | +- 提交前进行代码检查 | ||
| 313 | +- 及时同步最新代码 | ||
| 314 | + | ||
| 315 | +### 问题反馈 | ||
| 316 | +- 遇到问题先查看本文档 | ||
| 317 | +- 搜索现有 issue 避免重复 | ||
| 318 | +- 提供详细的错误信息和复现步骤 | ||
| 319 | + | ||
| 320 | +--- | ||
| 321 | + | ||
| 322 | +**祝您开发愉快!** 🎉 | ||
| 323 | + | ||
| 324 | +如有问题,请查看项目文档或联系团队成员。 | ||
| 0 | \ No newline at end of file | 325 | \ No newline at end of file |
docs/项目架构图.md
0 → 100644
| 1 | +# 物业管理系统 - 项目架构图 | ||
| 2 | + | ||
| 3 | +## 🏗️ 整体架构 | ||
| 4 | + | ||
| 5 | +``` | ||
| 6 | +┌─────────────────────────────────────────────────────────────┐ | ||
| 7 | +│ 前端应用层 │ | ||
| 8 | +├─────────────────────────────────────────────────────────────┤ | ||
| 9 | +│ Vue 2 + Element UI + Vue Router + Vuex + Axios │ | ||
| 10 | +├─────────────────────────────────────────────────────────────┤ | ||
| 11 | +│ 业务逻辑层 │ | ||
| 12 | +├─────────────────────────────────────────────────────────────┤ | ||
| 13 | +│ 用户管理 │ 社区管理 │ 费用管理 │ 工单管理 │ 设备管理 │ | ||
| 14 | +├─────────────────────────────────────────────────────────────┤ | ||
| 15 | +│ 数据访问层 │ | ||
| 16 | +├─────────────────────────────────────────────────────────────┤ | ||
| 17 | +│ HTTP 请求 │ 本地存储 │ 权限验证 │ 错误处理 │ | ||
| 18 | +├─────────────────────────────────────────────────────────────┤ | ||
| 19 | +│ 后端服务层 │ | ||
| 20 | +└─────────────────────────────────────────────────────────────┘ | ||
| 21 | +``` | ||
| 22 | + | ||
| 23 | +## 📁 目录结构详解 | ||
| 24 | + | ||
| 25 | +### 1. 源码目录 (src/) | ||
| 26 | + | ||
| 27 | +``` | ||
| 28 | +src/ | ||
| 29 | +├── api/ # API 接口层 | ||
| 30 | +│ ├── community/ # 社区管理接口 | ||
| 31 | +│ ├── fee/ # 费用管理接口 | ||
| 32 | +│ ├── work/ # 工单管理接口 | ||
| 33 | +│ ├── user/ # 用户管理接口 | ||
| 34 | +│ ├── room/ # 房屋管理接口 | ||
| 35 | +│ ├── owner/ # 业主管理接口 | ||
| 36 | +│ ├── resource/ # 资源管理接口 | ||
| 37 | +│ ├── system/ # 系统管理接口 | ||
| 38 | +│ └── ... | ||
| 39 | +├── components/ # 公共组件库 | ||
| 40 | +│ ├── common/ # 通用组件 | ||
| 41 | +│ ├── fee/ # 费用相关组件 | ||
| 42 | +│ ├── room/ # 房屋相关组件 | ||
| 43 | +│ ├── upload/ # 上传组件 | ||
| 44 | +│ └── ... | ||
| 45 | +├── views/ # 页面组件 | ||
| 46 | +│ ├── index/ # 首页仪表板 | ||
| 47 | +│ ├── layout/ # 主布局框架 | ||
| 48 | +│ ├── user/ # 用户相关页面 | ||
| 49 | +│ ├── community/ # 社区管理页面 | ||
| 50 | +│ ├── fee/ # 费用管理页面 | ||
| 51 | +│ ├── work/ # 工单管理页面 | ||
| 52 | +│ └── ... | ||
| 53 | +├── router/ # 路由配置 | ||
| 54 | +│ ├── index.js # 主路由配置 | ||
| 55 | +│ ├── feeRouter.js # 费用管理路由 | ||
| 56 | +│ ├── workRouter.js # 工单管理路由 | ||
| 57 | +│ └── ... | ||
| 58 | +├── i18n/ # 国际化配置 | ||
| 59 | +│ ├── index.js # 国际化主配置 | ||
| 60 | +│ ├── commonLang.js # 通用语言包 | ||
| 61 | +│ ├── feeI18n.js # 费用管理语言包 | ||
| 62 | +│ └── ... | ||
| 63 | +├── utils/ # 工具函数 | ||
| 64 | +│ ├── request.js # HTTP 请求封装 | ||
| 65 | +│ ├── dateUtil.js # 日期工具函数 | ||
| 66 | +│ ├── moneyUtil.js # 金额工具函数 | ||
| 67 | +│ └── ... | ||
| 68 | +├── conf/ # 配置文件 | ||
| 69 | +│ └── config.js # 应用配置 | ||
| 70 | +├── App.vue # 根组件 | ||
| 71 | +└── main.js # 应用入口 | ||
| 72 | +``` | ||
| 73 | + | ||
| 74 | +### 2. 配置文件 | ||
| 75 | + | ||
| 76 | +``` | ||
| 77 | +项目根目录/ | ||
| 78 | +├── package.json # 项目依赖配置 | ||
| 79 | +├── vue.config.js # Vue CLI 配置 | ||
| 80 | +├── .eslintrc.js # ESLint 配置 | ||
| 81 | +├── .gitignore # Git 忽略文件 | ||
| 82 | +└── README.md # 项目说明 | ||
| 83 | +``` | ||
| 84 | + | ||
| 85 | +## 🔄 数据流架构 | ||
| 86 | + | ||
| 87 | +### 1. 单向数据流 | ||
| 88 | + | ||
| 89 | +``` | ||
| 90 | +用户操作 → 组件事件 → API 调用 → 数据更新 → 视图渲染 | ||
| 91 | + ↓ ↓ ↓ ↓ ↓ | ||
| 92 | + 触发事件 事件处理 后端接口 状态变更 响应式更新 | ||
| 93 | +``` | ||
| 94 | + | ||
| 95 | +### 2. 组件通信 | ||
| 96 | + | ||
| 97 | +``` | ||
| 98 | +父组件 ←→ 子组件 | ||
| 99 | + ↓ ↓ | ||
| 100 | +Props Events | ||
| 101 | + ↓ ↓ | ||
| 102 | +数据传递 事件通知 | ||
| 103 | +``` | ||
| 104 | + | ||
| 105 | +### 3. 状态管理 | ||
| 106 | + | ||
| 107 | +``` | ||
| 108 | +组件内部状态 (data) ←→ 全局状态 (Vue.prototype) | ||
| 109 | + ↓ ↓ | ||
| 110 | + 响应式数据 全局方法/属性 | ||
| 111 | + ↓ ↓ | ||
| 112 | + 自动更新视图 权限检查/工具函数 | ||
| 113 | +``` | ||
| 114 | + | ||
| 115 | +## 🌐 网络架构 | ||
| 116 | + | ||
| 117 | +### 1. 请求流程 | ||
| 118 | + | ||
| 119 | +``` | ||
| 120 | +前端组件 → Axios 实例 → 请求拦截器 → 后端 API → 响应拦截器 → 组件 | ||
| 121 | + ↓ ↓ ↓ ↓ ↓ ↓ | ||
| 122 | + 发起请求 统一配置 添加认证头 处理业务 统一处理 更新状态 | ||
| 123 | +``` | ||
| 124 | + | ||
| 125 | +### 2. 代理配置 | ||
| 126 | + | ||
| 127 | +```javascript | ||
| 128 | +// vue.config.js | ||
| 129 | +proxy: { | ||
| 130 | + '/app': { | ||
| 131 | + target: 'http://demo.homecommunity.cn/app', | ||
| 132 | + changeOrigin: true, | ||
| 133 | + pathRewrite: { '^/app': '' } | ||
| 134 | + }, | ||
| 135 | + '/callComponent': { | ||
| 136 | + target: 'http://demo.homecommunity.cn/callComponent', | ||
| 137 | + changeOrigin: true, | ||
| 138 | + pathRewrite: { '^/callComponent': '' } | ||
| 139 | + } | ||
| 140 | +} | ||
| 141 | +``` | ||
| 142 | + | ||
| 143 | +## 🔐 权限架构 | ||
| 144 | + | ||
| 145 | +### 1. 权限控制流程 | ||
| 146 | + | ||
| 147 | +``` | ||
| 148 | +用户登录 → 获取权限列表 → 存储到 localStorage → 组件权限检查 → 功能控制 | ||
| 149 | + ↓ ↓ ↓ ↓ ↓ | ||
| 150 | + 身份验证 后端返回权限 本地缓存权限 调用 hasPrivilege 显示/隐藏 | ||
| 151 | +``` | ||
| 152 | + | ||
| 153 | +### 2. 权限检查实现 | ||
| 154 | + | ||
| 155 | +```javascript | ||
| 156 | +Vue.prototype.hasPrivilege = function(_privaleges) { | ||
| 157 | + const privilegesToCheck = Array.isArray(_privaleges) ? _privaleges : [_privaleges]; | ||
| 158 | + let userPrivileges = localStorage.getItem('hc_staff_privilege'); | ||
| 159 | + | ||
| 160 | + if (userPrivileges) { | ||
| 161 | + userPrivileges = userPrivileges.split(','); | ||
| 162 | + } else { | ||
| 163 | + return false; | ||
| 164 | + } | ||
| 165 | + | ||
| 166 | + return privilegesToCheck.some(item => userPrivileges.includes(item)); | ||
| 167 | +} | ||
| 168 | +``` | ||
| 169 | + | ||
| 170 | +## 🎨 UI 架构 | ||
| 171 | + | ||
| 172 | +### 1. 组件层次结构 | ||
| 173 | + | ||
| 174 | +``` | ||
| 175 | +App.vue (根组件) | ||
| 176 | + ↓ | ||
| 177 | +Layout.vue (主布局) | ||
| 178 | + ↓ | ||
| 179 | +Router View (路由视图) | ||
| 180 | + ↓ | ||
| 181 | +页面组件 (如 RoomList.vue) | ||
| 182 | + ↓ | ||
| 183 | +业务组件 (如 RoomTree.vue) | ||
| 184 | + ↓ | ||
| 185 | +Element UI 组件 (如 el-table, el-form) | ||
| 186 | +``` | ||
| 187 | + | ||
| 188 | +### 2. 样式架构 | ||
| 189 | + | ||
| 190 | +``` | ||
| 191 | +全局样式 (App.vue) | ||
| 192 | + ↓ | ||
| 193 | +Element UI 主题样式 | ||
| 194 | + ↓ | ||
| 195 | +页面级样式 (scoped) | ||
| 196 | + ↓ | ||
| 197 | +组件级样式 (scoped) | ||
| 198 | +``` | ||
| 199 | + | ||
| 200 | +## 📱 响应式架构 | ||
| 201 | + | ||
| 202 | +### 1. 移动端适配 | ||
| 203 | + | ||
| 204 | +- 使用 Element UI 的响应式栅格系统 | ||
| 205 | +- 媒体查询适配不同屏幕尺寸 | ||
| 206 | +- 触摸友好的交互设计 | ||
| 207 | + | ||
| 208 | +### 2. 浏览器兼容性 | ||
| 209 | + | ||
| 210 | +- 支持现代浏览器 (Chrome, Firefox, Safari, Edge) | ||
| 211 | +- 使用 Babel 转译 ES6+ 语法 | ||
| 212 | +- Polyfill 支持旧版本浏览器 | ||
| 213 | + | ||
| 214 | +## 🚀 性能优化架构 | ||
| 215 | + | ||
| 216 | +### 1. 代码分割 | ||
| 217 | + | ||
| 218 | +```javascript | ||
| 219 | +// 路由懒加载 | ||
| 220 | +component: () => import('@/views/room/roomList.vue') | ||
| 221 | + | ||
| 222 | +// 组件懒加载 | ||
| 223 | +components: { | ||
| 224 | + RoomTree: () => import('@/components/room/roomTree.vue') | ||
| 225 | +} | ||
| 226 | +``` | ||
| 227 | + | ||
| 228 | +### 2. 资源优化 | ||
| 229 | + | ||
| 230 | +- 图片懒加载 | ||
| 231 | +- CSS/JS 压缩 | ||
| 232 | +- 静态资源 CDN 加速 | ||
| 233 | +- 浏览器缓存策略 | ||
| 234 | + | ||
| 235 | +### 3. 运行时优化 | ||
| 236 | + | ||
| 237 | +- Vue 虚拟 DOM 优化 | ||
| 238 | +- 计算属性缓存 | ||
| 239 | +- 事件委托 | ||
| 240 | +- 防抖节流处理 | ||
| 241 | + | ||
| 242 | +## 🔧 开发工具架构 | ||
| 243 | + | ||
| 244 | +### 1. 构建工具 | ||
| 245 | + | ||
| 246 | +``` | ||
| 247 | +Vue CLI 4.5.0 | ||
| 248 | + ↓ | ||
| 249 | +Webpack 4 | ||
| 250 | + ↓ | ||
| 251 | +Babel + ESLint + Sass | ||
| 252 | + ↓ | ||
| 253 | +开发/生产环境构建 | ||
| 254 | +``` | ||
| 255 | + | ||
| 256 | +### 2. 代码质量 | ||
| 257 | + | ||
| 258 | +- ESLint: 代码规范检查 | ||
| 259 | +- Prettier: 代码格式化 | ||
| 260 | +- Git Hooks: 提交前检查 | ||
| 261 | +- 代码审查流程 | ||
| 262 | + | ||
| 263 | +### 3. 调试工具 | ||
| 264 | + | ||
| 265 | +- Vue DevTools: Vue 组件调试 | ||
| 266 | +- Chrome DevTools: 浏览器调试 | ||
| 267 | +- 控制台日志: 开发调试 | ||
| 268 | +- 网络面板: API 调试 | ||
| 269 | + | ||
| 270 | +## 📊 监控架构 | ||
| 271 | + | ||
| 272 | +### 1. 错误监控 | ||
| 273 | + | ||
| 274 | +```javascript | ||
| 275 | +// 全局错误处理 | ||
| 276 | +Vue.config.errorHandler = function(err, vm, info) { | ||
| 277 | + console.error('Vue Error:', err, info); | ||
| 278 | + // 上报错误信息 | ||
| 279 | +} | ||
| 280 | +``` | ||
| 281 | + | ||
| 282 | +### 2. 性能监控 | ||
| 283 | + | ||
| 284 | +- 页面加载时间 | ||
| 285 | +- API 响应时间 | ||
| 286 | +- 用户交互响应时间 | ||
| 287 | +- 内存使用情况 | ||
| 288 | + | ||
| 289 | +### 3. 用户行为监控 | ||
| 290 | + | ||
| 291 | +- 页面访问统计 | ||
| 292 | +- 功能使用统计 | ||
| 293 | +- 错误操作统计 | ||
| 294 | +- 用户反馈收集 | ||
| 295 | + | ||
| 296 | +## 🔄 部署架构 | ||
| 297 | + | ||
| 298 | +### 1. 开发环境 | ||
| 299 | + | ||
| 300 | +``` | ||
| 301 | +本地开发 → 热重载 → 代理转发 → 后端服务 | ||
| 302 | + ↓ ↓ ↓ ↓ | ||
| 303 | + npm run dev 实时更新 本地代理 测试环境 | ||
| 304 | +``` | ||
| 305 | + | ||
| 306 | +### 2. 生产环境 | ||
| 307 | + | ||
| 308 | +``` | ||
| 309 | +代码构建 → 资源优化 → 静态部署 → CDN 加速 | ||
| 310 | + ↓ ↓ ↓ ↓ | ||
| 311 | + npm run build 压缩优化 服务器部署 全球加速 | ||
| 312 | +``` | ||
| 313 | + | ||
| 314 | +### 3. 环境配置 | ||
| 315 | + | ||
| 316 | +```javascript | ||
| 317 | +// 环境变量配置 | ||
| 318 | +NODE_ENV=development // 开发环境 | ||
| 319 | +NODE_ENV=production // 生产环境 | ||
| 320 | + | ||
| 321 | +// API 地址配置 | ||
| 322 | +BASE_API=http://localhost:8008 // 开发环境 | ||
| 323 | +BASE_API=https://api.example.com // 生产环境 | ||
| 324 | +``` | ||
| 325 | + | ||
| 326 | +--- | ||
| 327 | + | ||
| 328 | +这个架构图展示了项目的整体结构和技术实现,帮助开发者快速理解项目的组织方式和各个模块之间的关系。 | ||
| 0 | \ No newline at end of file | 329 | \ No newline at end of file |