You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

160 lines
7.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# slake-school-service · 本地环境
## 1. 环境要求
| 项 | 说明 |
| -------- | -------------------------------------------------------------------------------------- |
| PHP | **8.1+**(当前锁定 Laravel 10,与 `composer.json` 一致;若本机为 PHP 8.2+ 可考虑后续升级到 Laravel 11+) |
| 扩展 | `openssl`、`pdo_mysql`、`mbstring`、`tokenizer`、`xml`、`ctype`、`json`、`bcmath`(Laravel 常规) |
| Composer | 2.x |
| MySQL | 5.7+ 或 8.0+(开发推荐 8.0) |
## 2. 配置方式
项目根目录的 `**.env`** 为本地实际配置(已加入 `.gitignore`,勿提交秘钥)。仓库内 `**.env.example`** 为模板,可执行:
```bash
cp .env.example .env
php artisan key:generate
```
当前默认约定与 `**.env.example**` 一致:
| 变量 | 默认值 | 说明 |
| ----------------------------- | ---------------------------------------------- | ------------------------------------------------------------------ |
| `APP_NAME` | Slake School Service | 应用名 |
| `APP_URL` | [http://127.0.0.1:8000](http://127.0.0.1:8000) | 与 `php artisan serve` 一致 |
| `DB_HOST` | 127.0.0.1 | 数据库地址 |
| `DB_PORT` | **3307** | 与下方 Docker MySQL 映射一致;若使用本机已有 MySQL 的 **3306**,请改为 `3306` 并调整库名/账号 |
| `DB_DATABASE` | slake_school | 库名 |
| `DB_USERNAME` / `DB_PASSWORD` | `root` / **`root_local`** | 与 `docker-compose.yml` 中 **`MYSQL_ROOT_PASSWORD`** 一致;应用账号也可用 `slake` / `slake_local` |
**若登录接口或任意接口报 `SQLSTATE[HY000] [2002] Connection refused`**:表示 **MySQL 未在本机监听**(常见为未启动 Docker 容器或端口不一致)。请先启动数据库(见下文 Docker),或改用本机已安装的 MySQL 并同步修改 `DB_HOST`、`DB_PORT`、账号密码。
## 3. 使用 Docker 启动 MySQL(可选)
若本机未安装 MySQL,可在项目根目录执行:
```bash
docker compose up -d
```
会启动容器 `slake-school-mysql`,将容器 **3306** 映射到本机 **3307**,与默认 `.env` 对齐。
- **root 密码**(仅本机调试用):`root_local`
- 建库、账号在 `docker-compose.yml` 的 `environment` 中已定义,与 `DB_`* 默认一致。
## 4. 使用本机已安装的 MySQL
1. 手动创建数据库:`CREATE DATABASE slake_school CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;`
2. 创建用户并授权,或沿用 `root`;在 `**.env`** 中修改 `DB_PORT`(如 `3306`)、`DB_USERNAME`、`DB_PASSWORD`。
3. 与 Docker 不要同时占用同一端口。
## 5. 初始化与启动
```bash
cd /path/to/slake-school-service
composer install
# 已存在 .env 且含 APP_KEY 时可跳过
cp -n .env.example .env && php artisan key:generate
php artisan migrate
php artisan db:seed
php artisan serve
```
> **已有数据库**仅需增量挂载「运营管理」侧栏:`php artisan db:seed --class=OperationsMenusSeeder`。仅补课程用字典:`php artisan db:seed --class=CourseDictionarySeeder`。
> **工作台菜单**(驾驶舱 + 雷达地图归组):`php artisan db:seed --class=WorkbenchMenusSeeder`(见 `docs/工作台驾驶舱与雷达地图.md`)。
> **数据资产 · Banner 图管理菜单**:`php artisan db:seed --class=DataAssetsMenusSeeder`(见 `docs/后台菜单目录结构.md` §7)。
`php artisan db:seed`(默认 `DatabaseSeeder`)会依次执行 **`AdminInitSeeder`**(RBAC、菜单、管理员)与 **`CourseDictionarySeeder`**(`course_system` / `course_type` / `yes_no`,对齐 `prototype/pages/course-create.html`)。
浏览器访问:`http://127.0.0.1:8000` 应出现 Laravel 欢迎页。
`AdminInitSeeder` 会初始化 **RBAC、菜单(含工作台、运营管理、系统管理)、默认超级管理员账号**:
| 项目 | 值 |
| --- | --- |
| 用户名 | `admin` |
| 初始密码 | `Admin@123456`(登录后请立即修改) |
管理端 API 前缀为 **`/api/admin/v1`**(见 `routes/admin.php`)。
## 6. 与 `slake-school-web` 联调(Vite)
在仓库 `code/slake-school-web`:
```bash
cp .env.example .env.development
npm install
npm run dev
```
默认 `VITE_API_BASE_URL=/api`,Vite 将 `/api` 代理到 `VITE_PROXY_TARGET`(与 `php artisan serve` 的 `127.0.0.1:8000` 一致)。
**高校雷达网地图**使用腾讯地图,请在 `.env.development` 中配置 `VITE_TENCENT_MAP_KEY`(Key 申请后填入,见 `docs/工作台驾驶舱与雷达地图.md`)。
后端需在 `.env` 中配置 **`SANCTUM_STATEFUL_DOMAINS`**(模板见 `.env.example`),包含本机前端地址(如 `localhost:5173`),以便后续若启用 Cookie 会话与 Sanctum 协同。
## 7. 说明
- **Sanctum**:管理端当前使用 **Bearer Token**(`Authorization: Bearer <token>`),由登录接口签发;`personal_access_tokens` 表由框架维护。
- 生产环境务必将 `APP_DEBUG=false`、使用强密码与独立 `APP_KEY`。
## 8. 修订记录
| 日期 | 说明 |
| ---------- | ---------------------------------------- |
| 2026-05-18 | 初始化改为 `php artisan db:seed`;补充 `CourseDictionarySeeder` 与增量说明。 |
| 2026-05-29 | 新增 §9 小程序 H5 本地调试与 `dev-login` 说明。 |
## 9. 小程序 H5 本地调试(`slake-school-wx`)
目标:**在浏览器中调试 UniApp 页面并调用真实后端**,无需微信开发者工具;小程序真机/开发者工具仍走微信登录。
### 9.1 后端
1. 按 §5 启动 MySQL 与 `php artisan serve`(`http://127.0.0.1:8000`)。
2. `.env` 关键项:
| 变量 | 说明 |
| --- | --- |
| `APP_ENV=local` | 启用 `POST /api/miniapp/v1/auth/dev-login` |
| `WX_APPID` / `WX_SECRET` | 微信小程序 `code2session`(H5 调试可不测此项) |
3. 验证接口:
```bash
curl -X POST http://127.0.0.1:8000/api/miniapp/v1/auth/dev-login \
-H 'Content-Type: application/json' \
-d '{"nickname":"本地调试"}'
```
应返回 `token` 与 `user`。
### 9.2 前端(H5)
```bash
cd code/slake-school-wx
cp .env.development .env.development.local # 可选,覆盖 API 地址
npm install
npm run dev:h5
```
浏览器打开 **`http://localhost:5174`** 或 **`http://127.0.0.1:5174`**(`vite.config.ts` 已设置 `host: 0.0.0.0`)。Vite 将 `/api` 代理到 `127.0.0.1:8000`(见 `vite.config.ts`)。
- 登录页在 H5 环境自动走 **开发登录**,无需 `wx.login`。
- 报名、我的课程/活动、资料、需求等需登录接口会携带 Bearer Token。
### 9.3 微信小程序
```bash
npm run dev:mp-weixin
```
微信开发者工具导入 `dist/dev/mp-weixin`,勾选「不校验合法域名」。API 直连 `VITE_MP_API_BASE`(默认 `http://127.0.0.1:8000/api/miniapp/v1`)。
更多 API 清单见 `docs/小程序UniApp开发方案.md` §8。