初始化

缺陷:主题配色需要优化整体的同风格
This commit is contained in:
2026-08-14 23:21:21 +08:00
parent 6e2769c528
commit bcf54c2727
152 changed files with 13521 additions and 141 deletions

View File

@@ -19,6 +19,15 @@ alwaysApply: true
4. 小程序端的抽屉全部需要用 page-container 来防止用户意外退出页面(本仓库为 API此项约束 uniapp
5. 数据库的created_at、updated_at、deleted_at统一使用时间戳不要使用字符串并且我在查询器中一级格式化成字符串了无需再次格式化
# 数据库变更(强制 SQL禁止新建 PHP Migration
- **禁止**为业务/系统表 DDL 新建 `database/migrations/*.php`Laravel migrate 不作变更载体)
- **一律**写到 `database/sql/<YYYY-MM-DD>/`,文件名:`01_简短英文名.sql`、`02_...`(当天序号递增)
- 例:`database/sql/2026-08-14/01_cc_carousel_add_status.sql`
- 脚本尽量幂等(`information_schema` + `PREPARE`,风格对齐已有 `rbac_migrate_ddl.sql`
- 系统表结构若影响全新安装,同步回写 `public/nl_admin.sql`;业务表 `cc_*` 只放 `database/sql/`,不进 `nl_admin.sql`
- 运维在目标库手动执行对应日期目录下的 SQL不要指望 `php artisan migrate` 补列/补表
# 全局架构规范
## 分层架构Controller → Service → Model禁止跨层

View File

@@ -0,0 +1,40 @@
---
description: LGP 新后端开发约定与全项目群已知陷阱
alwaysApply: true
---
# 开发约定与已知陷阱
## 新后端 lgp-admin-plus-api
- 路由由 `UtilsService::autoRouteRegister()` **反射注册**,继承自 `BaseController` 的方法也会被注册成路由。不需要暴露的继承方法必须用 `@Method NO` 覆盖,否则每个控制器白送一套 `create/update/delete`
- 方法名 camelCase 会转成 kebab-case 路径:`myInfo` → `my-info`
- 缺 `@Method` 注解会注册成 `ANY`,务必显式写 `@Method GET` 或 `@Method POST`
- 响应统一走 `jok` / `jerr`,结构固定 `{code, message, result}`,成功 `code=0`。前端拦截器按 `result` 取数据,**不要用 `data`**
- 业务表 Model 覆盖 `$connection = 'business'`;系统表沿用默认 `mysql`
- 免鉴权 Service 继承 `BaseNotAuthService`,不要像老项目那样硬编码路径白名单
- 鉴权真正发生在 `BaseService::__construct`,绕过 BaseService 的方法就没有鉴权。新代码一律走 BaseService
- `nl_menu` 的 `keep_alive` 与 `affix_tab` 输出到 meta 时是**取反**的,插数据别弄反
- 第三方凭据用 `FieldEncryptService` 加密入库,不回显明文
- **库表变更禁止新建 PHP Migration**:写 `database/sql/<YYYY-MM-DD>/01_名字.sql`(当天序号递增、尽量幂等);系统表同步 `public/nl_admin.sql`,业务表 `cc_*` 只放 sql 目录
## 老项目只读
`lgp-api` / `lgp-wx-api` / `lgp-vben` / `lgp-vben-new` 处于迁移期,除安全修复外不要改动。
查业务逻辑可以读,新功能一律写在 `lgp-admin-plus-api` + `lgp-admin-plus`。
## 已知陷阱
- 老 `lgp-wx-api` 把微信 `session_key` 当 token 直接返回客户端,且 `AuthMiddleware` 先执行控制器再检查 token、只判空不验签。归并时必须改成服务端自签 token
- 老 `lgp-api` 密码是**无盐 sha1**,新后端是 bcrypt靠 `nl_admin.legacy_password` 惰性升级,遗留列有过期时间
- 老 `cc_role.id=1` 不是超管,而新 `nl_role.id=1` 是超管且代码硬判断全量放行。角色迁移必须做 ID 偏移
- 老前端 10 个模块的批量删除在静默 404后端只有 `template` 注册了 `delete-batch`
- `cc_price_sheet` 的 6 个材质列是死 schema`create()` 从不赋值、前端已注释,实际只有 `routine` 在用
- 图片水印不是后端接口,是前端拼 OSS URL 参数 `?watermark/2/text/...`
- 小程序 `baseURL` 硬编码在 `api/interceptor.js` 且靠注释切换,极易把测试地址发上线
- 小程序无分包配置uview-plus 全量进主包
## 安全红线
不要把任何密钥写进源码。老项目里七牛 AK/SK`UploadService.php`)、微信 AppSecret`WeChatService.php`)明文硬编码,
`.env.example` 里还提交了真实数据库密码——这些是待清理的历史欠账,不要照抄这个做法。

View File

@@ -0,0 +1,46 @@
---
description: LGP 项目群架构、各仓库角色与双品牌对应关系
alwaysApply: true
---
# LGP 项目地图
两个家具品牌共用一套代码,正从老架构迁往新架构。
## 新架构(开发主战场)
- `lgp-admin-plus` — 后台前端vben **5.7.0** monorepo主应用 `apps/web-antd`,上游是自研 `nl-admin-view`
- `lgp-admin-plus-api` — 后端,**Laravel 13**,位于 `sites/lgp-api/index/lgp-admin-plus-api`
## 老架构(迁移期只读,迁完归档)
- `lgp-vben` — 老后台前端vben 2.11.5
- `lgp-api` — 老后台后端Laravel 10
- `lgp-wx-api` — 老小程序后端Laravel 12本期归并进新后端的 `wx` 路由组
- `lgp-vben-new` — **已弃用**,与 `lgp-vben` 同源克隆,不要在里面做任何改动
## 小程序uni-app + Vue3 + uview-plus
- `lgp-wx` — 佛山铂尔曼AppID `wx679d36842570cea7`API `brm.wx.api.borman.top`
- `lgp-wx-new` — 维伦家具AppID `wx57b54060a579c31a`API `wx.api.borman.top`
两者页面与业务代码基本一致,差异只有 AppID、`baseURL` 与首页视觉。改一边通常要同步另一边。
## 双品牌
同一套后台代码部署两份,靠构建模式区分:`build:brm`(佛山铂尔曼)/ `build:wl`(维伦家具)。
两个品牌共用一套代码与数据库,任何业务改动会同时影响两家客户,上线前按品牌分别回归。
## 数据库
同一个库、两个连接(`config/database.php`
- `mysql`,前缀 `nl_` — 脚手架系统表admin / role / menu / oss_config / file / api_endpoint 等)
- `business`,前缀 `cc_` — 业务表catalogue / category / image / price_sheet / list / wx_user / enterprise 等)
业务数据零迁移,只迁账号与角色。业务 Model 必须覆盖 `protected $connection = 'business'`。
## 迁移范围
老后端注册 171 条路由但前端只调用 **79** 条;老小程序后端注册 35 条但小程序只调用 **14** 条。
迁移目标是这 93 条,其余是反射自动注册出来的死路由,不要跟着迁。