为小程序装修而设计
围绕物料拖拽、页面配置、设备预览、导航栏、Tab 栏和浮层等装修场景建模,而不是只提供一个通用拖拽容器。
dragcraft 适合用来建设小程序装修后台:运营或业务同学在设计器里拖拽物料、配置属性、预览不同设备形态,研发侧则把页面保存为稳定的 Schema,并在自己的运行时中解释和渲染。
它的重点不是把 DOM 任意拖来拖去,而是把装修页面拆成三件可治理的事情:
WidgetMeta 描述业务物料能不能创建、移动、删除、配置和展示。DesignerSchema 保存页面结构、属性、样式 DSL 和布局意图。LayoutPlan 把 root 节点投影到内容区、固定 chrome 和浮层,保证每个节点只渲染一次;外部容器单独管理自己的 region 子树。第一次接入时,从 @dragcraft/designer 开始最省心。它已经把核心引擎、画布渲染和属性表单组合成标准设计器入口。
import '@dragcraft/themes'
import { createDesigner, DcDesigner } from '@dragcraft/designer'
import { createAntDesignVueFields } from '@dragcraft/fields-ant-design-vue'
const designer = createDesigner({
widgetMetas: myWidgetMetas,
componentMap: myComponentMap,
fieldComponentMap: createAntDesignVueFields(),
globalConfigSchema: myGlobalConfigSchema,
})你需要准备三份业务输入:
| 输入 | 负责什么 | 常见来源 |
|---|---|---|
widgetMetas | 左侧能拖什么、节点有哪些行为约束、右侧表单 schema 怎么生成 | 业务物料定义或 @dragcraft/widgets 工具函数 |
componentMap | schema 节点的 type 渲染成哪个 Vue 组件 | 业务物料组件 |
fieldComponentMap | 表单字段使用哪个真实 UI 组件和值绑定协议 | @dragcraft/fields-ant-design-vue 或业务字段 adapter |
如果你只想先跑起来,直接阅读 快速开始。如果你要设计一套可长期演进的装修平台,建议先看 核心心智模型。
dragcraft 的架构边界刻意保持清晰:core 管状态和命令,designer 管产品化设计器交互,renderer 管 schema 到组件树的渲染,form-generator 管属性表单,themes 和 device-frames 分别承接工作台主题与设备外壳。
业务应用
-> @dragcraft/designer
-> @dragcraft/core
-> @dragcraft/renderer
-> @dragcraft/form-generator
-> @dragcraft/widgets
-> @dragcraft/fields-ant-design-vue
-> @dragcraft/themes
-> @dragcraft/device-frames这套分层带来几个关键结果:
engine.execute(),撤销重做、事件通知和命令校验不会散落在 UI 里。form-generator 不依赖 core,只负责字段渲染和值变更,字段到命令的翻译由 designer 承担。renderer 不持久化业务状态,只消费 schema、组件映射、扩展点和事件 hooks。themes 不改变组件逻辑,只聚合必要结构样式并通过公开 token 与 component/part/state 契约提供工作台视觉。device-frames 通过 renderer 的 containerShell 接入,让手机、平板、桌面预览成为可替换外壳。完整设计约束可以继续阅读 技术架构文档。
| 你的目标 | 建议下一页 |
|---|---|
| 把设计器挂到 Vue 应用里 | 快速开始 |
| 理解 schema、命令和包分层 | 核心心智模型 |
| 设计页面结构、chrome 和浮层 | Schema 与布局 |
| 接入业务物料和右侧属性表单 | 物料与字段 |
| 实现 flex、grid 或分栏等可承载子节点的物料 | 外部容器物料 |
| 自定义字段 adapter、联动与 Schema 绑定 | 配置表单与字段 |
| 替换面板、扩展 rail 或节点动作 | 动作与视图扩展 |
| 增加设备预览和工作台主题 | 主题与设备框架 |
| 接入编辑器语言包 | 编辑器国际化 |
| 保存草稿、处理版本冲突并发布 | 保存草稿与发布 |
| 确认生产运行时的消费边界 | 运行时集成边界 |
| 查某个 package 的入口 API | 参考总览 |