diff --git a/README.md b/README.md
new file mode 100644
index 0000000..ede3dc0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,166 @@
+# Fauto Design - Vue页面可视化设计器
+
+
+
+
+
+
+
+
+
+
+ 🤖 本项目完全由 Qoder AI 开发,所有代码均为 AI 生成
+
+
+---
+
+## 📖 项目简介
+
+**Fauto Design** 是一个基于 Vue3 的**可视化页面设计器**,通过拖拽操作直接编辑真实的 Vue 源文件。与传统低代码平台不同,本项目直接操作 `.vue` 文件,生成的代码即是最终代码。
+
+### ✨ 核心特性
+
+- 🎯 **直接编辑源码** - 拖拽操作实时修改 Vue 文件,所见即所得
+- 🖱️ **智能拖拽交互** - 两阶段拖拽:先选源元素层级,再选目标位置
+- ⌨️ **键盘层级选择** - ↑↓ 键切换嵌套元素层级,精准定位
+- 🔄 **跨类型拖放** - 支持 el-row/el-col 之间的灵活布局调整
+- 📝 **保持代码格式** - AST 解析 + 智能缩进,保持源码整洁
+
+---
+
+## 🏗️ 技术架构
+
+```
+┌─────────────────────────────────────────────────┐
+│ 前端 (Vue3 + Vite) │
+│ ┌─────────────┐ ┌─────────────┐ ┌─────────┐ │
+│ │ PageManager │ │DesignCenter│ │DropZone │ │
+│ └─────────────┘ └─────────────┘ └─────────┘ │
+│ ↓ ↓ ↓ │
+│ ┌──────────────────────────────────────────┐ │
+│ │ dragStore (Pinia) │ │
+│ │ 两阶段拖拽 | 层级选择 | 跨类型判断 │ │
+│ └──────────────────────────────────────────┘ │
+└─────────────────────────────────────────────────┘
+ │ HTTP
+ ▼
+┌─────────────────────────────────────────────────┐
+│ 后端 (Node.js + Express) │
+│ ┌──────────────────────────────────────────┐ │
+│ │ templateService.js │ │
+│ │ @vue/compiler-sfc | AST解析 | 元素移动 │ │
+│ └──────────────────────────────────────────┘ │
+└─────────────────────────────────────────────────┘
+ │
+ ▼
+ Vue 源文件 (*.vue)
+```
+
+---
+
+## 🚀 快速开始
+
+### 环境要求
+
+- Node.js >= 18.x
+- npm >= 9.x
+
+### 安装依赖
+
+```bash
+# 前端
+cd draggable-panels
+npm install
+
+# 后端
+cd vue-template-service
+npm install
+```
+
+### 启动服务
+
+```bash
+# 终端1 - 启动前端 (端口 5173)
+cd draggable-panels
+npm run dev
+
+# 终端2 - 启动后端 (端口 3001)
+cd vue-template-service
+node src/index.js
+```
+
+### 访问
+
+打开浏览器访问:**http://localhost:5173/draggable**
+
+---
+
+## 📁 项目结构
+
+```
+fauto-design/
+├── 项目上下文.md # AI 协作上下文文档
+├── 项目设计文档.md # 详细技术设计文档
+├── README.md # 本文件
+│
+├── draggable-panels/ # 前端项目
+│ └── src/
+│ ├── fauto/ # 设计器核心
+│ │ ├── components/ # UI组件
+│ │ ├── materials/ # 物料组件
+│ │ ├── plugins/ # 核心插件 (dragStore等)
+│ │ └── stores/ # 状态管理
+│ └── views/ # 示例页面
+│
+└── vue-template-service/ # 后端服务
+ └── src/
+ └── services/
+ └── templateService.js # Vue模板解析修改
+```
+
+---
+
+## 🎮 使用方法
+
+1. **选择页面** - 在左侧面板选择要编辑的 Vue 页面
+2. **开始拖拽** - 点击页面中的 el-row 或 el-col 元素
+3. **选择源层级** - 按 ↑↓ 键切换要移动的层级
+4. **移动到目标** - 拖动到目标元素上
+5. **选择目标层级** - 按 ↑↓ 键切换目标层级
+6. **确认位置** - 松开鼠标,选择放置方向(上/下/左/右/内部)
+7. **自动保存** - 源文件自动更新,页面热刷新
+
+---
+
+## 🤖 关于 AI 开发
+
+本项目是一个 **AI 驱动开发**的实验性项目:
+
+- **开发工具**:Qoder AI(AI 编程助手)
+- **代码生成**:100% 由 AI 生成
+- **人工参与**:需求描述、测试反馈、方向指导
+
+这证明了 AI 辅助开发在复杂前端项目中的可行性,包括:
+- 状态管理设计
+- 拖拽交互实现
+- AST 解析与修改
+- 多阶段工作流
+
+---
+
+## 📄 相关文档
+
+- [项目上下文.md](./项目上下文.md) - AI 协作快速恢复上下文
+- [项目设计文档.md](./项目设计文档.md) - 详细技术设计
+
+---
+
+## 📜 License
+
+MIT License
+
+---
+
+
+ 🚀 Powered by Qoder AI
+
diff --git a/draggable-panels/README.md b/draggable-panels/README.md
deleted file mode 100644
index 33895ab..0000000
--- a/draggable-panels/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Vue 3 + TypeScript + Vite
-
-This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 `
-
-
-
-
-
-
- {{ header }}
-
-
-
-
-
- 单元格 {{ row }}-{{ col }}
-
-
-
-
-
-
-
-
diff --git a/draggable-panels/src/fauto/designComponents/GridTable/template.html b/draggable-panels/src/fauto/designComponents/GridTable/template.html
new file mode 100644
index 0000000..9405b27
--- /dev/null
+++ b/draggable-panels/src/fauto/designComponents/GridTable/template.html
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/draggable-panels/src/fauto/designComponents/RadioSelect/index.json b/draggable-panels/src/fauto/designComponents/RadioSelect/index.json
index 6369b36..ca7667a 100644
--- a/draggable-panels/src/fauto/designComponents/RadioSelect/index.json
+++ b/draggable-panels/src/fauto/designComponents/RadioSelect/index.json
@@ -1,7 +1,49 @@
{
+ "id": "RadioSelect",
"name": "单选器",
+ "icon": "⭕",
"description": "用于选择单个选项的表单组件",
- "props": {
- "options": ["选项1", "选项2", "选项3"]
+ "template": "template.html",
+ "defaultSpan": 12,
+ "metadata": {
+ "span": {
+ "label": "宽度",
+ "type": "number",
+ "min": 1,
+ "max": 24,
+ "target": "el-col",
+ "attr": ":span"
+ },
+ "label": {
+ "label": "标签",
+ "type": "text",
+ "target": "el-form-item",
+ "attr": "label"
+ },
+ "size": {
+ "label": "尺寸",
+ "type": "select",
+ "options": ["", "medium", "small", "mini"],
+ "target": "el-radio-group",
+ "attr": "size"
+ },
+ "disabled": {
+ "label": "禁用",
+ "type": "boolean",
+ "target": "el-radio-group",
+ "attr": "disabled"
+ },
+ "fill": {
+ "label": "填充色",
+ "type": "color",
+ "target": "el-radio-group",
+ "attr": "fill"
+ },
+ "textColor": {
+ "label": "文字颜色",
+ "type": "color",
+ "target": "el-radio-group",
+ "attr": "text-color"
+ }
}
}
diff --git a/draggable-panels/src/fauto/designComponents/RadioSelect/index.vue b/draggable-panels/src/fauto/designComponents/RadioSelect/index.vue
deleted file mode 100644
index e6c2b2a..0000000
--- a/draggable-panels/src/fauto/designComponents/RadioSelect/index.vue
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-
-
-
-
-
-
- {{ option }}
-
-
-
-
-
diff --git a/draggable-panels/src/fauto/designComponents/RadioSelect/template.html b/draggable-panels/src/fauto/designComponents/RadioSelect/template.html
new file mode 100644
index 0000000..57e6774
--- /dev/null
+++ b/draggable-panels/src/fauto/designComponents/RadioSelect/template.html
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/draggable-panels/src/fauto/designComponents/TextInput/index.json b/draggable-panels/src/fauto/designComponents/TextInput/index.json
index d63ffed..69cd3ed 100644
--- a/draggable-panels/src/fauto/designComponents/TextInput/index.json
+++ b/draggable-panels/src/fauto/designComponents/TextInput/index.json
@@ -1,9 +1,51 @@
{
- "name": "文本输入框",
+ "id": "TextInput",
+ "name": "输入框",
+ "icon": "✏️",
"description": "用于输入文本的表单组件",
- "props": {
- "label": "标签名称",
- "width": 200,
- "maxLength": 100
+ "template": "template.html",
+ "defaultSpan": 12,
+ "metadata": {
+ "span": {
+ "label": "宽度",
+ "type": "number",
+ "min": 1,
+ "max": 24,
+ "target": "el-col",
+ "attr": ":span"
+ },
+ "label": {
+ "label": "标签",
+ "type": "text",
+ "target": "el-form-item",
+ "attr": "label"
+ },
+ "type": {
+ "label": "类型",
+ "type": "select",
+ "options": ["", "text", "textarea"],
+ "target": "el-input",
+ "attr": "type"
+ },
+ "placeholder": {
+ "label": "占位文本",
+ "type": "text",
+ "target": "el-input",
+ "attr": "placeholder"
+ },
+ "minlength": {
+ "label": "最小长度",
+ "type": "number",
+ "min": 0,
+ "target": "el-input",
+ "attr": "minlength"
+ },
+ "maxlength": {
+ "label": "最大长度",
+ "type": "number",
+ "min": 0,
+ "target": "el-input",
+ "attr": "maxlength"
+ }
}
}
diff --git a/draggable-panels/src/fauto/designComponents/TextInput/index.vue b/draggable-panels/src/fauto/designComponents/TextInput/index.vue
deleted file mode 100644
index 968c1eb..0000000
--- a/draggable-panels/src/fauto/designComponents/TextInput/index.vue
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
- {{ label }}
-
-
-
-
-
diff --git a/draggable-panels/src/fauto/designComponents/TextInput/template.html b/draggable-panels/src/fauto/designComponents/TextInput/template.html
new file mode 100644
index 0000000..8e6da0e
--- /dev/null
+++ b/draggable-panels/src/fauto/designComponents/TextInput/template.html
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/draggable-panels/src/fauto/materials/DataTable/index.json b/draggable-panels/src/fauto/materials/DataTable/index.json
index 0a688bc..00e6a82 100644
--- a/draggable-panels/src/fauto/materials/DataTable/index.json
+++ b/draggable-panels/src/fauto/materials/DataTable/index.json
@@ -1,17 +1,4 @@
{
- "name": "数据表格",
- "description": "展示属性和值的简单表格组件",
- "props": {
- "columns": ["属性", "值"],
- "data": [
- { "property": "项目名称", "value": "draggable-panels" },
- { "property": "框架", "value": "Vue 3" },
- { "property": "语言", "value": "TypeScript" },
- { "property": "构建工具", "value": "Vite" },
- { "property": "状态管理", "value": "Pinia" },
- { "property": "版本", "value": "1.0.0" },
- { "property": "作者", "value": "Developer" },
- { "property": "许可证", "value": "MIT" }
- ]
- }
+ "name": "元数据",
+ "description": "展示和编辑设计组件的属性"
}
diff --git a/draggable-panels/src/fauto/materials/DataTable/index.vue b/draggable-panels/src/fauto/materials/DataTable/index.vue
index 0276445..efeec0f 100644
--- a/draggable-panels/src/fauto/materials/DataTable/index.vue
+++ b/draggable-panels/src/fauto/materials/DataTable/index.vue
@@ -1,125 +1,224 @@
-
-