为减少仓库噪声和重复规则,整理当前开发入口并移除已废弃资料。 - 精简根 AGENTS,补充四个应用规则与 README,统一规范入口 - 归整部署文件、SOP 原稿和参考资源,修正迁移后的脚本路径 - 取消虚拟环境、工具状态、业务导出及备份的跟踪,本机所需原件保留 - 移除停用的 graphify 配置、脚本与产物 - 删除历史业务文档、执行计划、OpenSpec 业务变更和移动 UI 原型 - 清理失效引用,历史细胞产品导入改为必须显式指定 --file 验证:git diff --cached --check、OpenSpec 严格校验、导入参数隔离检查 3/3 通过; 迁移文件完整性和现行链接已核对。未执行部署、业务数据导入或服务启停。
4.8 KiB
4.8 KiB
Web 管理端开发约束
适用 web-admin/,与根规则同时生效。运行方式见 README。
实现与视觉入口
- Vue 3、TypeScript、Vite、Element Plus、Tailwind CSS、SCSS;使用 pnpm。
- Vue、vue-router、Pinia、VueUse API 和 Element Plus 组件由插件自动导入,不手动重复导入;
@element-plus/icons-vue图标显式导入。 - 格式遵循仓库 Prettier:单引号、无分号、2 空格、不加尾逗号,Vue script/style 缩进按配置。
- Fresh Mint 规范与视觉参考为设计依据:主色
#10b981、深色#059669、浅底#ecfdf5。不得使用#0a9f6d作为 Web 主色。 - 新页面先按模式索引选 P01–P27;PR 写明模式编号及参考源码路径。详细 SHALL 要求见 ui-conventions。
参考页(保留,不作为闲置 Demo 删除)
| 用途 | 源码 |
|---|---|
| 标准列表 | src/views/system/unit/index.vue |
| 复杂列表 | src/views/system/order/index.vue |
| 商品列表与详情 | src/views/system/product/index.vue、src/components/business/product-view-dialog/index.vue |
| 树形主数据 | src/views/system/category/index.vue |
| 用户 CRUD | src/views/system/user/index.vue |
| 工作台 | src/views/dashboard/console/index.vue |
列表与展示
- 单一
panel-top主标题使用h2.title-bar-heading与主色::before竖条;需要竖条的标题完整登记到src/App.vue的panelTitleBarTextRules,避免短正则误匹配。 - 工具栏顺序为“已选 N 项”→ 主操作 → 其他操作;同一行仅一个
type="primary",禁止用space-between把按钮组推到行末。 - 所有
el-table-column使用min-width,不使用固定width;操作列fixed="right",min-width不小于 260px。 - 主表按参考页使用
list-table、stripe,不要随意加border;分页与表格同放在list-body list-wrap,外层pagination list-pager-bar,避免重复边框和标题。 - 树下拉只显示节点名;选中输入、表格、导出、查看显示完整祖先路径,分隔符为
/。复用src/utils/tree-path.ts。 - 状态、结论、类型用
el-tag,表格size="small",SystemViewDialog 使用ViewField.tagType;禁止纯文本或自造 span 标签替代。 - Tag 语义:success=正常/启用/完成/通过;warning=进行中/待确认/过期;danger=异常/作废/拒绝/不通过/质检待执行/质检待结论;info=待生效/停用/默认;primary=特殊分类/来源类型。
- 一级侧栏菜单有图标,二级及以下仅文字(
SidebarSubmenu.vue的level === 0);WorkTab 只显示文字,meta.icon仅用于侧栏。 - 列表及新增、编辑弹窗默认不展示
sort_order/orderNum,按业务明确需要添加。
表单、弹窗与上传
- 表单
label-position="top";遮罩backdrop-filter: none。 - 弹窗使用
dialog-form-layout,max-height: calc(100vh - 100px),只有 body 滚动;遵循全局定位和align-center/ElConfigProvider,不在页面自行覆盖。 - 默认
form-grid-2,最多 5 列,窄屏减少列数;通栏form-col-span-2或grid-column: 1 / -1。 - 复用
src/assets/styles/core/app.scss中全局网格、sort-field、form-tip,禁止在 scoped 样式重复定义。网格内纵向间隔优先由 gap 控制。 - 字段少时弹窗约 560~720px,复杂表单按参考页加宽。参考
ProtocolFormDialog.vue的append-to-body、modal-class="protocol-dialog-mask";遵守全局遮罩定位。 - 字段注释放在 label 插槽后的
.form-label-tip(12px,--mint-text-muted),不放在输入控件旁。 - 所有有可见文字的
el-button必须有前置el-icon;取消/确定使用 Close/Check,图文间距 6px。 - 长表单校验按现有页使用
scroll-to-error、scroll-into-view-options与错误提示。 - 附件触发器为 140×96px、
#a7f3d0虚线边框卡片,作为同一 flex 行的首项,与附件卡片并排;选择即通过fetchUploadAttachment上传;卡片支持预览/下载/删除,提示放行下。 - 附件完整模板以
src/views/cell-storage/protocol/ProtocolFormDialog.vue“协议附件”和 UI OpenSpec 为准,保留其交互规则。
验证
- 使用
package.json中构建和检查命令;只对改动范围格式化,不运行全仓库自动修复来掩盖差异。 - 字段、枚举、树路径改动同时核对 API 与 TypeScript;后端契约按根规则与后端 AGENTS。
public/tinymce/、SOP 静态资源和参考页不能仅因源于第三方或 Demo 就删除;clean:dev当前仅输出维护提示。- 不得自行启动、停止或重启开发服务。