# 餐饮小程序 **Repository Path**: a412239441/ca ## Basic Information - **Project Name**: 餐饮小程序 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-08 - **Last Updated**: 2026-10-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 餐饮 SaaS · 每店一个小程序 同一套 Java 后端 + Taro 模板,按租户隔离数据。顾客搜到的是各店自己的小程序;平台超管负责开户、套餐到期和代发布。 当前演示租户是「百味轩·精品湘菜」(`tenant_id=1`)。未配置微信第三方平台时,仍可用这一个 AppId,靠桌码 `T{租户}-S{门店}-TBL{桌号}` 进店。 ## 技术栈 | 端 | 技术 | | --- | --- | | 小程序 | Taro 3 + React + TypeScript,读 `ext.json` / `getExtConfigSync` | | 管理后台 | Vue 3 + Vite + Element Plus | | 后端 | Spring Boot 2.7.18 + JDK 8 + MyBatis | | 数据库 | MySQL 8.0,账号 `root`,密码为空 | ## 目录 ``` sql/init.sql 建库与商业演示数据(含 tenant) server/ Java 后端,默认 8080;启动时自动补 SaaS 表结构 admin/ 商家中台 + 平台超管 miniapp/ Taro 模板,发布时注入 tenantId ``` ## 启动顺序 ### 1. 初始化数据库 ```bash mysql -uroot --default-character-set=utf8mb4 < sql/init.sql ``` 已有库再启动后端即可:`SchemaMigrator` 会加 `tenant` 表、业务表 `tenant_id`、平台账号。 ### 2. 启动后端(JDK 8) ```bash cd server mvn spring-boot:run ``` 启动后会把未加密的密码重置为 BCrypt。 ### 3. 启动管理后台 ```bash cd admin npm install npm run dev ``` 浏览器打开 http://127.0.0.1:5173 | 角色 | 账号 | 说明 | | --- | --- | --- | | 平台超管 | xhy / admin123 | 开户、停用、续费;右上角可改密码 | | 商家店长 | admin / admin123 | 只看本租户(百味轩)菜品/订单 | | 演示会员 | 微信一键登录 | 未配 AppSecret 时进入林晚秋(仅 tenant=1) | ### 4. 启动小程序 ```bash cd miniapp npm install npm run dev:weapp ``` 用微信开发者工具导入 `miniapp` 目录。请求会带 `X-Tenant-Id`、`X-App-Id`。本地 `ext.json` 默认 `tenantId=1`。 正式发布前,在微信公众平台把图片下载域名配成 `xhyfile.oss-cn-hangzhou.aliyuncs.com`。OSS 路径按租户分目录:`catering/{tenantId}/...`。 ## SaaS 约定 - **租户 tenant**:一家签约饭店,对应一个被授权的小程序 AppId - **门店 store**:租户下的分店;桌码格式 `T{tenantId}-S{storeId}-TBL{id}` - **会员**:唯一键 `(tenant_id, openid)`,A 店用户不是 B 店用户 - **到期关停**:租户 `status=0` 或 `expire_time` 已过,小程序和商家后台返回 403 ## 微信第三方平台(每店一个小程序) 授权事件 URL: `https://你的域名/api/open/wechat/callback` 填写 `application.yml`:`catering.wechat.component-app-id / component-app-secret / template-id`,以及 `catering.saas.api-base`。 登录走 `sns/component/jscode2session`。平台后台「代发布」调用 `wxa/commit`,`ext_json` 注入 `tenantId`、`apiBase`、店名导航栏。 没有第三方资质时,继续用当前 AppId `wx0842b4b3ebe774af` 做过渡。 ## 微信支付(服务商) `/api/mini/pay/wechat/{orderId}` 返回 `spMchid`(平台服务商)+ `subMchid`(租户子商户号)。默认仍是模拟支付;真实统一下单需配置服务商商户号并改 `catering.pay.channel=wechat`。 ## 核心业务 点菜、会员折扣、优惠券、积分抵现、占座、预约、排队、模拟支付履约,均按当前租户过滤。