# AI Context — 模块设计器原型 ## 项目目标 这是一个 **FMS 模块管理系统的"字段设计器"交互原型**,用 React 实现,用于验证设计思路和交互方案。 解决的问题:原有系统将字段的列表、编辑、查询配置分散在 4 个 Tab 中,操作碎片化。目标是把所有配置围绕"字段"聚合,所见即所得。 ## 技术栈 | 项 | 值 | |---|-----| | 框架 | React 19 + TypeScript 6 | | 构建 | Vite 8 | | 样式 | Tailwind CSS v4 (`@tailwindcss/vite`) | | 拖拽 | `@dnd-kit/core` + `@dnd-kit/sortable` | | 包管理 | pnpm | ## 文件结构 ``` src/ ├── types/index.ts # 所有 TS 类型定义 + FieldTypeDef 常量 ├── data/moduleData.ts # Mock 数据 + 工厂函数 ├── components/ │ ├── ModuleSettings.tsx # 顶部模块设置面板(编码/名称/编辑模式等) │ ├── FormPreview.tsx # 左侧:表单预览(按分组排列,可拖拽排序) │ ├── TablePreview.tsx # 左侧:表格预览(可拖拽列排序 + 列宽调整) │ ├── FieldConfigList.tsx # 右侧:字段配置列表(L/E/Q 拨动开关 + 展开快捷编辑) │ └── DataSourceDrawer.tsx # 下拉数据源配置抽屉(视图/静态选项) ├── App.tsx # 主布局 + 全局状态 ├── main.tsx # 入口 └── index.css # Tailwind + 自定义 CSS(toggle、drawer 等) ``` ## 核心设计理念 1. **两栏布局**:左侧实时预览(表单/表格切换),右侧字段配置列表 2. **零点击高频操作**:列表/编辑/查询开关做成拨动开关(toggle),直接拨不用展开 3. **内联快捷编辑**:点击字段行 → 下方展开标签/编码/类型/分组/列宽等基础配置 4. **拖拽排序**:表单模式和表格模式都支持拖拽调整字段顺序 5. **表格列宽调整**:表格预览下拖拽列头右边缘可调整列宽 6. **数据源配置**:下拉字段才有的复杂配置,用右侧抽屉单独处理 ## 数据结构 ### ModuleField(核心) ```ts { id: number, code: string, label: string, type: string, groupId: string | null, order: number, // 列表 listOn: boolean, listW: number, listAlign: "left"|"center"|"right", // 编辑 editOn: boolean, editReq: boolean, editRO: boolean, // 查询 queryOn: boolean, queryOp: string, queryDef: string, // 数据源(下拉字段专用) ds: { type:"view"|"static", ... } | null } ``` ### FieldGroup ```ts { id: string, name: string } ``` ## 当前状态 - [ ] 基本功能:模块设置、表单预览、表格预览、字段配置列表、数据源抽屉 均已实现 - [ ] 无 lint 错误 - [ ] 表单预览可拖拽排序 - [ ] 表格预览可拖拽列排序 + 列宽调整 - [ ] 右侧 L/E/Q 拨动开关正常 - [x] 安装依赖 `pnpm install` - [x] 启动 `pnpm dev`(端口 3000) ## 注意事项 - `@dnd-kit/modifiers` 不可用,用本地 `Modifier` 函数替代了 `restrictToVerticalAxis` / `restrictToHorizontalAxis` - 所有样式在 `src/index.css` 中,使用 class 名而非 Tailwind 原子类的地方(toggle、drawer、field-row 等)是因为这些需要状态驱动的复杂样式 - 类型定义在 `src/types/index.ts`,修改字段结构时记得同步更新 `src/data/moduleData.ts` 中的 `makeField()` 工厂函数