Files
workspace/code/test-demo/AI_CONTEXT.md
T
2026-08-12 22:12:01 +08:00

83 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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()` 工厂函数