AGENTS.md — shanxia2.0(山峡化工)
本仓库是三个应用共享后端与租户模型的单仓库,内部也使用 sanqiang 名称。
与用户交流时,用户使用简体中文则回复简体中文;业务文案与注释遵循现有语言习惯。
修改前必读
工程结构与当前边界
| 路径 |
职责 |
backend/ |
Python 3.9 / FastAPI / SQLAlchemy / Pydantic v2 后端 |
web-admin/ |
Vue 3 / Vite / Element Plus / Tailwind CSS 管理端 |
web-admin/src/views/m/ |
同一 Web 应用内的移动 H5 页面 |
miniprogram/ |
uni-app 微信小程序 |
docs/ |
UI 规范、SQL、业务资料、开发文档与计划 |
openspec/ |
变更配置、需求与设计规范 |
CRM、地磅(db)、报销(bx)、运输(pl)已有本仓库实现,维护时追踪本地调用链。
工作流已有后端引擎和设计器、待办、已办页面;不能据此假定全部目标能力已实现。
旧生态规范的外部 CRM / 独立地磅边界已不适合限制当前代码维护,见工程规则中的冲突说明。
外部系统仍须按实际接口与表归属确认集成范围,不能仅凭名称决定修改位置。
业务数据红线
- 所有业务查询按当前用户
tenant_no 隔离,写入使用当前租户,不信任客户端覆盖。
- 数据权限与菜单权限均取当前用户全部角色的并集,业务查询必须执行数据范围过滤。
- 业务数据软删除:
del_flag=1;默认查询排除删除记录,禁止物理删除。
- 无自定义排序时列表使用
create_time DESC。
- 子数据保存必须差量更新,保留已有有效明细 ID、创建信息和未提交业务字段。
- 遗漏集合保持不变,显式空集合才申请清空;校验与引用保护先于写入。
- 主单、子单和关系在同一事务内;严禁全删全增或通过客户端分步调用绕过。
- 编辑/复制 ID 往返、引用保护与例外范围以子数据专题文档为准,适用于所有客户端。
- 文件附件使用 MinIO,同字段多个附件使用逗号分隔 URL。
- 细胞存储样本关联规则仍适用于已有相关代码,详见后端规则,不推广到其他领域。
数据库、权限与 API
- MySQL 5.7 / utf8mb4;UUID 主键
id VARCHAR(64) NOT NULL。
- 字段顺序:id → 业务字段 → tenant_no、order_num、remark、create_by、create_dept_id、create_time、update_by、update_time、del_flag(默认 0)。
- 数据库变更同步维护
docs/sql/,同时评估 API、Pydantic、TypeScript 字段影响。
- 本库快照
docs/sql/shanxia2.0.sql;sx.sql / dibang.sql 是来源系统参考,不替代当前 schema 与迁移。
- 新路由同时注册
backend/app/api/__init__.py 和 backend/app/main.py;不得绕过认证、加密、审计。
- 角色选择子菜单自动包含祖先;Web / 小程序分别挂在各自
parent_id=0 虚拟根下。
- 租户管理仅
super_admin 可用;其他系统管理在租户上下文内执行。
- 自定义数据范围、工作流版本和审批策略等完整约束见工程规则。
UI 权威与共通要求
- Web:Fresh Mint 规范,主色
#10b981。
- 小程序:三墙规范,主色
#0a9f6d;跨端不得混用主色。
- Web 新页面按 界面模式索引 选 P01–P27;PR 写明模式编号和参考页路径。
- 树节点显示本级名称;输入框、表格、导出、查看态显示完整路径,分隔符
/。
- Web 弹窗顶部标签、无背景模糊;布局、按钮、表格、状态 Tag 和附件规则见 Web AGENTS。
- 小程序媒体比例、触达尺寸、拍照凭证上传规则见小程序 AGENTS。
- 不另造布局与色值;按已指定模板页和全局样式实现,保留各端约束。
常用开发入口
- 后端:在
backend/ 使用 ./start.sh --reload;参数先看 ./start.sh --help。
- 后端测试:启用项目虚拟环境后执行对应
pytest 测试;具体步骤见后端 AGENTS。
- 生产脚本是
backend/start-prod.sh;生产动作不属于默认本地检查。
- Web:在
web-admin/ 使用 pnpm dev、pnpm build、pnpm build:typecheck、pnpm lint。
- 小程序:遵循已有 HBuilderX / uni-app 流程和子目录 README;不要把占位 test 当成有效测试。
- 依赖、脚本与环境变量以当前文件为准;不要凭过时文档发明不存在的命令。
改动与验证
- 只做最小必要改动,不重构或格式化无关文件,不移动真实业务代码来整理工程。
- 路由保持薄层,业务放 services / crud;前端遵循周边命名、类型和导入风格。
- Web 使用 pnpm;Vue 和 Element Plus 自动导入规则见子目录,不重复手工导入。
- CRUD 可读字段以
_row_to_dict 为准;schema 与前端覆盖全部可写字段,排除计算和只读字段。
- 逐项核对字段并执行相关回归;不要调用或声称通过不存在的通用一致性脚本。
- 实际执行与变更风险匹配的验证,记录结果;未运行项明确说明,不能声称已通过。
- 提交遵循 Conventional Commits,以完整句子说明改了什么、为何;提交范围保持最小。
规范与文档维护
- 工程规则 汇总 API、数据库、权限、工作流及历史规范冲突的处理方式。
- OpenSpec 入口是 openspec/config.yaml,保留现有 changes 结构与能力命名约定。
- 实现和评审对照 Requirement / Scenario,并交叉核对 UI 权威文档。
- 历史规范未被本次目录清理改写或归档;未冲突的 SHALL 继续遵守。
- 验收与归档是独立动作,不能按文档日期、文件位置或清理需求自动判断已完成。
- 新设计与计划遵循所用技能指定路径,例如
docs/superpowers/specs/ 与 docs/superpowers/plans/。
- 文档索引记录原位置与状态,不为分类擅自移动历史资料或业务源码。
.cursorrules、Cursor mdc、OpenCode 入口引用上述共同规则,避免维护重复规范。
- graphify 已停用;旧计划中的图谱生成与更新步骤不再执行。