# aiot-uniapp - AIoT 移动端管理系统 ## 项目愿景 基于 UniApp + Vue 3 + TypeScript 的 AIoT(人工智能物联网)移动端管理应用。项目源自 [unibest](https://unibest.tech) 模板(v4.1.0),二次开发适配 [芋道管理系统](https://www.iocoder.cn/)(yudao-version: 2026.01.0-snapshot)后端。支持 H5、微信/支付宝小程序、Android/iOS APP 多端运行。 ## 架构总览 - **前端框架**: Vue 3.4 + TypeScript 5.8 - **跨端框架**: UniApp (DCloudio 3.0) - **构建工具**: Vite 5.2 - **状态管理**: Pinia 2.0 + pinia-plugin-persistedstate(uni.storage 持久化) - **UI 组件库**: wot-design-uni(Wot Design) - **CSS 方案**: UnoCSS(@uni-helper/unocss-preset-uni)+ SCSS - **路由**: @uni-helper/vite-plugin-uni-pages(约定式路由,基于文件系统) - **HTTP**: 自封装 uni.request,支持双 Token 无感刷新、API 加解密(AES/RSA) - **国际化**: vue-i18n 9 - **分包**: @uni-ku/bundle-optimizer(分包优化 + 异步跨包调用) - **代码规范**: ESLint(@uni-helper/eslint-config)+ Husky + lint-staged + commitlint - **包管理器**: pnpm 10+ ## 模块结构图 ```mermaid graph TD A["aiot-uniapp (Root)"] --> B["src/pages - 主包页面"] A --> C["src/pages-core - 核心分包"] A --> D["src/pages-system - 系统管理分包"] A --> E["src/pages-infra - 基础设施分包"] A --> F["src/pages-bpm - 工作流程分包"] A --> G["src/api - API 接口层"] A --> H["src/store - 状态管理"] A --> I["src/http - HTTP 请求封装"] A --> J["src/hooks - 组合式函数"] A --> K["src/utils - 工具函数"] A --> L["src/tabbar - 底部导航配置"] A --> M["docs - VitePress 文档站"] click C "./src/pages-core/CLAUDE.md" "查看 pages-core 模块文档" click D "./src/pages-system/CLAUDE.md" "查看 pages-system 模块文档" click E "./src/pages-infra/CLAUDE.md" "查看 pages-infra 模块文档" click F "./src/pages-bpm/CLAUDE.md" "查看 pages-bpm 模块文档" ``` ## 模块索引 | 模块路径 | 职责 | 语言 | 页面/文件数 | |---------|------|------|-----------| | `src/pages/` | 主包:工作台、审批、通讯录、消息、个人中心(5 个 Tab 页) | Vue/TS | ~21 vue | | `src/pages-core/` | 核心分包:登录/注册/忘记密码、用户资料/安全/设置、404 | Vue/TS | ~17 vue | | `src/pages-system/` | 系统管理分包:用户、角色、菜单、部门、岗位、字典、租户、通知、日志、邮件、短信、OAuth2、社交 | Vue/TS | ~90+ vue | | `src/pages-infra/` | 基础设施分包:API 日志、配置管理、数据源、文件管理、定时任务、WebSocket | Vue/TS | ~20 vue | | `src/pages-bpm/` | 工作流程分包:流程分类、流程实例、任务审批、用户组、OA 请假、流程表达式/监听器 | Vue/TS | ~40 vue | | `src/api/` | API 接口层:按后端模块组织,封装所有 HTTP 请求 | TS | ~45 ts | | `src/store/` | Pinia 状态管理:token、user、dict、theme | TS | 5 ts | | `src/http/` | HTTP 封装:请求/响应拦截、双 Token 刷新、类型定义 | TS | 5 ts | | `src/hooks/` | 组合式函数:useAccess、useDict、useRequest、useScroll、useUpload | TS | 5 ts | | `src/utils/` | 工具函数:加解密、日期、防抖、下载、校验、树操作、常量/枚举 | TS | ~15 ts | | `src/components/` | 全局业务组件:DictTag(字典标签)、UserPicker(用户选择器) | Vue/TS | 4 files | | `src/tabbar/` | 底部导航栏配置与状态管理 | TS | 3 ts | | `docs/` | VitePress 文档站 | MD/Vue/TS | ~20 files | ## 运行与开发 ### 环境要求 - Node.js >= 20 - pnpm >= 9(项目强制使用 pnpm,`preinstall` 脚本会检查) ### 安装依赖 ```bash pnpm install ``` ### 开发命令 | 命令 | 说明 | |------|------| | `pnpm dev` / `pnpm dev:h5` | 开发 H5 版本(默认端口 9000) | | `pnpm dev:mp` / `pnpm dev:mp-weixin` | 开发微信小程序 | | `pnpm dev:mp-alipay` | 开发支付宝小程序 | | `pnpm dev:app` | 开发 APP 版本 | | `pnpm dev:h5:test` | 开发 H5(test 环境) | | `pnpm dev:h5:prod` | 开发 H5(production 环境) | | `pnpm build` / `pnpm build:h5` | 构建 H5 生产版本 | | `pnpm build:mp` | 构建微信小程序 | | `pnpm build:app` | 构建 APP | | `pnpm lint` | ESLint 检查 | | `pnpm lint:fix` | ESLint 自动修复 | | `pnpm type-check` | TypeScript 类型检查 | ### 环境变量 环境变量文件位于 `env/` 目录: | 文件 | 用途 | |------|------| | `env/.env` | 通用配置(后端地址、AppID、认证模式等) | | `env/.env.development` | 开发环境覆盖 | | `env/.env.test` | 测试环境覆盖 | | `env/.env.production` | 生产环境覆盖 | 关键变量: - `VITE_SERVER_BASEURL` - 后端 API 基地址(默认 `http://localhost:48080/admin-api`) - `VITE_AUTH_MODE` - 认证模式:`single`(单 Token)/ `double`(双 Token,默认) - `VITE_APP_TENANT_ENABLE` - 多租户开关(默认 `true`) - `VITE_APP_CAPTCHA_ENABLE` - 验证码开关(默认 `false`) - `VITE_APP_API_ENCRYPT_ENABLE` - API 加解密开关 - `VITE_WX_APPID` - 微信小程序 AppID ### 后端对接 后端为芋道(yudao)管理系统,API 前缀为 `/admin-api`。登录接口 `/system/auth/login`,支持账号密码、短信验证码、微信三方登录。 ## 测试策略 - 当前项目**未配置单元测试**和端到端测试框架。 - 依赖 `@dcloudio/uni-automator` 已安装(devDependencies),但未发现测试用例文件。 - 代码质量依赖 ESLint + TypeScript 类型检查 + lint-staged。 ## 编码规范 ### 文件组织 - 页面文件使用约定式路由,`src/pages/` 为主包,`src/pages-*` 为分包 - 每个页面通过 `definePage({...})` 宏声明路由元信息(标题、样式等) - 分包页面必须放在 `src/pages-*` 目录(不能放在 `src/pages` 下) - API 按后端模块分目录组织(如 `src/api/system/user/index.ts`) ### 代码风格 - Vue SFC 使用 `