SmartCampus/
│
├── 📁 src/ # 源代码主目录
│ │
│ ├── 📁 pages/ # 页面模块(业务逻辑)
│ │ ├── 📁 index/ # 首页
│ │ │ ├── index.js # 页面逻辑
│ │ │ ├── index.json # 页面配置
│ │ │ ├── index.wxml # 页面模板
│ │ │ └── index.wxss # 页面样式
│ │ │
│ │ ├── 📁 login/ # 登录页面
│ │ │ └── (同上结构)
│ │ │
│ │ ├── 📁 alarm/ # 告警管理模块
│ │ │ ├── alarm.js/json/wxml/wxss
│ │ │ ├── detail.js # 告警详情
│ │ │ └── detail.json/wxml/wxss
│ │ │
│ │ ├── 📁 chart/ # 图表展示模块
│ │ │ ├── chart.js/json/wxml/wxss
│ │ │ ├── detail.js
│ │ │ └── detail.json/wxml/wxss
│ │ │
│ │ ├── 📁 chart-detail/ # 图表详情(扩展页面)
│ │ │ └── chart-detail.js/json/wxml/wxss
│ │ │
│ │ ├── 📁 ticket/ # 工单管理模块
│ │ │ ├── list.js # 工单列表
│ │ │ ├── detail.js # 工单详情
│ │ │ ├── create.js # 创建工单
│ │ │ └── (对应的 json/wxml/wxss)
│ │ │
│ │ └── 📁 profile/ # 个人中心
│ │ └── profile.js/json/wxml/wxss
│ │
│ ├── 📁 components/ # 可复用组件库
│ │ ├── 📁 chart-card/ # 图表卡片组件
│ │ │ ├── index.js # 组件逻辑
│ │ │ ├── index.json # 组件配置 {"component": true}
│ │ │ ├── index.wxml # 组件模板
│ │ │ └── index.wxss # 组件样式
│ │ │
│ │ ├── 📁 chart-selector/ # 图表选择器组件
│ │ │ └── (同上结构)
│ │ │
│ │ └── 📁 ec-canvas/ # ECharts 画布组件
│ │ ├── index.js
│ │ ├── ec-canvas.js # 核心 canvas 逻辑
│ │ ├── wx-canvas.js # 微信 Canvas 适配
│ │ ├── echarts.js # ECharts 库
│ │ └── (json/wxml/wxss)
│ │
│ ├── 📁 services/ # API 服务层
│ │ ├── api.js # API 接口定义(userApi, chartApi 等)
│ │ ├── api-config.js # API 地址和配置(可扩展)
│ │ ├── request.js # HTTP 请求拦截器(可扩展)
│ │ └── index.js # 服务入口(可扩展)
│ │
│ ├── 📁 utils/ # 工具函数库
│ │ ├── common.js # 通用工具
│ │ ├── date.js # 日期处理(可添加)
│ │ ├── storage.js # 本地存储(可添加)
│ │ └── validators.js # 验证函数(可添加)
│ │
│ ├── 📁 stores/ # 全局状态管理(仅框架)
│ │ ├── user.js # 用户状态
│ │ ├── settings.js # 应用设置状态
│ │ └── index.js # 状态管理入口
│ │
│ ├── 📁 constants/ # 常量定义(仅框架)
│ │ ├── api.js # API 常量
│ │ ├── config.js # 应用配置常量
│ │ └── enums.js # 枚举定义
│ │
│ ├── 📁 styles/ # 全局样式(仅框架)
│ │ ├── colors.wxss # 颜色定义
│ │ ├── typography.wxss # 排版规范
│ │ └── common.wxss # 通用样式
│ │
│ ├── 📁 mockdata/ # 测试/模拟数据
│ │ └── campus-energy.js # 校园能源数据
│ │
│ ├── app.js # ⭐ 应用程序主文件(副本)
│ └── app.json # ⭐ 应用程序配置(副本)
│
│
├── 📁 docs/ # 📚 项目文档
│ ├── DEVELOPMENT.md # 开发指南
│ ├── API.md # API 文档
│ ├── PROJECT_STRUCTURE.md # 本文件 - 结构说明
│ └── CHANGELOG.md # 版本更新日志
│
├── 📁 requirements/ # 📋 需求文档(已迁移)
│ ├── 需求拆解/ # 功能需求分解
│ ├── 方案/ # 技术方案和设计
│ └── 团队流程/ # 团队工作流程
│
├── ⚙️ 配置文件
│ ├── app.js # ⭐ 小程序入口(根目录)
│ ├── app.json # ⭐ 小程序配置(根目录)
│ ├── project.config.json # 微信开发者工具配置
│ ├── project.private.config.json # 私密配置(勿提交)
│ ├── package.json # NPM 项目配置
│ ├── .eslintrc.json # ESLint 代码检查规则
│ ├── .prettierrc.json # Prettier 代码格式化规则
│ ├── .gitignore # Git 忽略文件列表
│ └── .env.example # 环境变量模板
│
├── 📄 其他文件
│ ├── README.md # 项目概览
│ ├── package-lock.json # NPM 依赖锁定文件
│ └── .git/ # Git 版本控制目录
职责: 业务逻辑实现和 UI 交互
特点:
- 一个页面一个文件夹
- 包含四个文件:
.js,.json,.wxml,.wxss - 直接计入小程序大小,不可复用
- 对应应用的一条业务流程或功能模块
示例:
pages/alarm/
├── alarm.js # 列表逻辑
├── detail.js # 详情逻辑(嵌套路由)
└── (配置和样式文件)
职责: 提供可复用的 UI 和功能组件
特点:
- 一个组件一个文件夹
- 通常不用于业务逻辑,只处理展示和交互
- 可在多个页面和组件中复用
- 减少代码重复,提高开发效率
示例:
components/chart-card/
├── index.js # Component 定义
├── index.json # {"component": true}
├── index.wxml # 模板(prop: title, value 等)
└── index.wxss # 卡片样式
职责: 封装所有 API 调用和网络请求
特点:
- 统一管理 API 地址
- 处理请求和响应拦截
- 提供标准化的接口
- 便于 API 版本管理和切换
结构:
// api.js
export const userApi = { /* 用户相关接口 */ };
export const chartApi = { /* 图表相关接口 */ };
export const alarmApi = { /* 告警相关接口 */ };职责: 提供通用的工具函数
示例工具:
formatDate()- 日期格式化debounce()- 防抖throttle()- 节流deepClone()- 深拷贝storage- 本地存储操作
使用方式:
import { formatDate, storage } from '/src/utils/common';职责: 管理全局应用状态
说明: 当前项目在 app.js 中使用 getApp().globalData 管理状态,此文件夹为扩展准备。
未来升级: 可迁移到状态管理库(如 Redux、Zustand 等)
职责: 集中管理常量值
示例:
// constants/config.js
export const API_TIMEOUT = 5000;
export const MAX_RETRY = 3;
// constants/enums.js
export const ALARM_STATUS = {
ACTIVE: 'active',
RESOLVED: 'resolved',
IGNORED: 'ignored'
};职责: 定义应用级别的样式规范
内容:
- 颜色定义和调色板
- 排版规范和字体大小
- 通用的布局和间距规范
职责: 提供开发和测试时的模拟数据
用途:
- 开发阶段无法连接真实后端
- 前后端并行开发
- 测试和演示
| 文件类型 | 用途 | 示例 |
|---|---|---|
.js |
页面或组件的业务逻辑 | page.js, index.js |
.json |
配置文件(页面样式、权限等) | page.json |
.wxml |
页面或组件的模板语言 | 类似 HTML |
.wxss |
样式文件 | 类似 CSS |
页面配置(page.json):
{
"navigationBarTitleText": "页面标题",
"navigationBarBackgroundColor": "#00539C",
"enablePullDownRefresh": true
}组件配置(component.json):
{
"component": true,
"usingComponents": {}
}app.json 作用:
{
"pages": [...], // 注册所有页面
"window": {...}, // 全局窗口配置
"tabBar": {...} // 底部导航栏配置
}┌─────────────────────────────────────┐
│ app.js (入口) │
├─────────────────────────────────────┤
│ globalData / 初始化逻辑 │
└────────────┬────────────────────────┘
│
├─→ Pages (各业务模块)
│ ├─→ Services (API 调用)
│ ├─→ Components (UI 组件)
│ └─→ Utils (工具函数)
│
├─→ Stores (全局状态) ← Utils
│
└─→ Constants (常量定义)
// 使用相对路径或绝对路径
import { api } from '/src/services/api';
import { formatDate } from '/src/utils/common';
import { COLORS } from '/src/constants/config';
// 页面 JSON 中的引用
{
"usingComponents": {
"chart-card": "/src/components/chart-card/index"
}
}// 避免深度相对路径
import { api } from '../../../../services/api';- 主包大小限制: 2MB (体验版)
- 分包大小限制: 2MB
- 总大小限制: 20MB
-
减少图片体积
- 使用 WebP 格式
- 压缩图片大小
- 考虑使用 Base64 内联小图
-
代码分离
- 使用分包加载(subpackages)
- 延迟加载数据
-
组件优化
- 避免不必要的重新渲染
- 合理使用
wx:ifvshidden
✅ 基础结构搭建
- ✅ 页面模块化
- ✅ 组件复用库
- ✅ API 服务层
- ✅ 工具函数库
📋 增强开发体验
- TypeScript 支持
- 单元测试框架
- 自动化构建流程
- 状态管理库集成
🚀 高级功能
- 云开发集成
- 分包加载
- 离线缓存策略
- 灰度发布系统
Q: 为什么 app.js 和 app.json 同时在根目录和 src 下? A: 微信小程序要求这两个文件在项目根目录。src 下的副本用于逻辑备份和版本控制。
Q: 如何在多个页面中共享数据?
A: 推荐使用 getApp().globalData 或独立的 store 文件。
Q: 组件和页面的区别是什么? A: 组件可复用,页面不可复用;组件不占用路由,页面占用。
最后更新: 2026 年 2 月 5 日