# paoding **Repository Path**: odin1994/paoding ## Basic Information - **Project Name**: paoding - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-10 - **Last Updated**: 2026-07-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 凑布布厨房 · 家庭点餐小程序 > 微信小程序 + 云开发,给自家人的点餐系统 ## 项目状态 - 设计主题:**D 鲜活小厨**(5 色马卡龙 + 26px 圆角 + 3 色渐变按钮) - 主题切换:B/A/D/E 已实现(开发调试用,最终锁定 D) - 架构:纯云开发(云函数 + 云数据库),无独立后端 ## 项目结构 ``` paoding/ ├── miniprogram/ # 微信小程序前端 │ ├── app.js # 全局入口:云开发初始化 │ ├── app.json # 全局配置 + tabBar │ ├── app.wxss # 全局样式(D 主题 tokens) │ ├── sitemap.json │ ├── pages/ # 4 Tab + 2 详情 │ │ ├── menu/ # 菜单(首页) │ │ ├── dishes/ # 菜品库 │ │ ├── history/ # 历史 │ │ ├── profile/ # 我的 │ │ ├── diancan/ # 点餐详情 │ │ └── analytics/ # 我的分析 │ ├── components/ # 复用组件 │ │ ├── diancan-card/ # 点餐卡(菜单首页用) │ │ ├── member-strip/ # 成员横滑切换 │ │ ├── dish-row/ # 菜品行 │ │ ├── kpi-card/ # KPI 卡片 │ │ ├── bar-chart/ # 柱状图 │ │ └── donut/ # 甜甜圈 │ └── utils/ # 工具 │ ├── cloud.js # 云函数调用封装 │ └── format.js # 日期/数字格式化 │ ├── cloudfunctions/ # 云函数(Node.js) │ ├── login/ # 登录 + 用户档案 │ ├── dishes/ # 菜品库 CRUD │ ├── diancan/ # 点餐核心(getCurrent/create/addDish/...) │ ├── history/ # 历史记录 │ └── analytics/ # 个人分析 │ ├── docs/ # 文档 │ ├── database-schema.md # 云数据库 schema │ └── seed-data.js # 初始数据 │ ├── designs/paoding-ordering/ # 之前的 HTML 原型(保留作参考) │ ├── project.config.json # 微信开发者工具配置 ├── cloudbaserc.json # 云开发环境配置 └── README.md # 本文件 ``` ## 4 个 Tab + 2 详情 | 页面 | 路径 | 功能 | |---|---|---| | 菜单 | `pages/menu/menu` | 当前点餐、快捷入口、我的数据、最近点餐 | | 菜品 | `pages/dishes/dishes` | 菜品库 CRUD + 搜索 + 分类 | | 历史 | `pages/history/history` | 已完成的点餐,按月分组 | | 我的 | `pages/profile/profile` | 微信账号、偏好、数据、设置 | | 点餐详情 | `pages/diancan/diancan` | 加菜 / 删菜 / 改量 / 成员筛选 | | 我的分析 | `pages/analytics/analytics` | KPI + 趋势 + Top 菜 + 口味分布 | ## 数据模型 4 个 collection: - `users` — WeChat 用户档案(_openid 自动维护) - `dishes` — 菜品库(共享) - `diancans` — 当前进行中的点餐(每用户最多 1 条 active) - `history` — 已完成的点餐(点餐 confirm 时自动生成) 详细见 `docs/database-schema.md` ## 云函数 API | 函数 | Action | 用途 | |---|---|---| | `login` | `getOpenId` / `getProfile` / `updateProfile` | 登录 + 用户档案 | | `dishes` | `list` / `add` / `update` / `remove` / `seed` | 菜品库 CRUD | | `diancan` | `getCurrent` / `create` / `join` / `addDish` / `removeDish` / `updateQty` / `confirm` / `archive` | 点餐核心 | | `history` | `list` / `get` | 历史 | | `analytics` | `getMine` | 个人分析(实时聚合) | ## 本地开发 ### 前置 - 微信开发者工具 https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html - 已注册微信小程序 AppID(云开发需要) - 已在微信开发者工具中开通云开发 ### 步骤 #### 1. 用微信开发者工具打开项目 - 打开 `paoding/` 根目录 - 填入 AppID - 顶部菜单「云开发」→ 开通云开发 → 创建环境(**记下环境 ID**) - 在「云开发」面板 → 「环境」列 → 把刚创建的环境设为「默认」 #### 2. (可选)锁定具体环境 如果想让小程序在所有环境都跑指定环境 ID(包括真机预览),编辑 `miniprogram/app.js`: ```js ENV_ID: 'paoding-1gxxxxxx', // 改成你的环境 ID ``` 留空 = 走开发者工具的「默认环境」(推荐用于本地开发)。 #### 3. 创建 4 个 collection 在云开发控制台 → 「数据库」→ 创建以下 4 个 collection: - `users` - `dishes` - `diancans` - `history` 权限建议: - `users`:所有用户可读,仅创建者可写 - `dishes`:所有用户可读可写(创建者可删) - `diancans` / `history`:仅参与者可读,不可直接写(通过云函数) #### 4. 上传并部署云函数 - 右键 `cloudfunctions/login` → 「上传并部署:云端安装依赖」→ 等待完成 - 对 `dishes` / `diancan` / `history` / `analytics` 重复此操作 #### 5. 初始化菜品数据 有 3 种方式(任选其一): **(a) 微信开发者工具云函数调试** - 右键 `cloudfunctions/dishes` → 「云端测试」 - 输入 `{ "action": "seed" }` → 「确定」 **(b) 模拟器内触发** - 在 `pages/dishes/dishes.js` 的 `loadDishes()` 末尾加上: ```js wx.cloud.callFunction({ name: 'dishes', data: { action: 'seed' } }); ``` - 重启模拟器,再删掉这段代码 **(c) 云开发控制台直接写** - 数据库 → `dishes` → 「导入」→ 上传 13 道菜的 JSON(见 `docs/seed-data.js`) #### 6. 验证 - 重启模拟器 - 应该看到菜单 Tab 正常加载,没有"云开发错误"提示 - 「菜品」Tab 应该有 13 道菜 ### 常见错误 | 错误 | 原因 | 修复 | |---|---|---| | `[100003] Env Not Exists` | 环境 ID 不对 / 默认环境未设 | 在「云开发」面板把对应环境设为默认 | | `FunctionNotFound` | 云函数未部署 | 右键对应 cloudfunctions 目录 → 上传并部署 | | `collection not exists` | collection 未创建 | 在云数据库手动创建 | | `permission denied` | 安全规则限制 | 见上文权限建议;或临时设「所有用户可读写」调试 | ## 主题(D 鲜活小厨) | Token | 值 | 用途 | |---|---|---| | `--accent` | `#FF7B5B` | 主色(peach) | | `--cta-bg` | `linear-gradient(135deg, #FF9B7B, #B8A4E3, #92C5F5)` | 主按钮 | | `--bg` | `#FFF8F2` | 页面背景 | | `--text` | `#2D2A3E` | 主文字(深蓝紫) | | `--radius` | `26px` | 主圆角 | | `--cat-1` ~ `--cat-5` | 5 个分类色 | 菜品分类 chip | 完整 token 在 `miniprogram/app.wxss` ## 与 HTML 原型关系 `designs/paoding-ordering/` 是早期 HTML 原型(React + Babel Standalone),保留作为视觉参考。所有真实开发在 `miniprogram/` 下进行。原型已锁定 D 方案,与小程序保持视觉一致。