🪜 写在前面
可配置系统是从前端工程师到架构师的分水岭。 硬编码功能能跑,配置化功能能扩展,平台化功能能赚钱。
从业务角度看,你应该具备这样的能力:
- 不用改代码就能上线新活动、新表单、新逻辑
- 通过 JSON、平台配置、低代码表达业务需求
- 通用模块 + 配置渲染,即搭即用
本篇我们将设计一套表单/表格/页面/按钮等可配置系统的前端架构方案,并覆盖渲染引擎、配置结构、动态组件加载与平台对接等核心内容。
📦 一、常见可配置化场景
模块 | 可配置内容 |
---|---|
表单 | 字段列表、校验规则、联动逻辑、默认值 |
表格 | 列字段、格式化规则、操作按钮、嵌套配置 |
页面 | 区块布局、Tab、组件嵌套、内容模块 |
按钮 | 权限控制、事件类型、弹窗配置 |
活动运营 | 时间规则、奖品配置、条件组合表达式 |
🧱 二、配置驱动渲染的核心思想
把逻辑写死在 JS 里,不如让配置表达逻辑,让系统表达场景。
设计一套结构如下的 JSON 配置:
json
{
"type": "form",
"fields": [
{
"type": "input",
"label": "用户名",
"field": "username",
"required": true
},
{
"type": "select",
"label": "角色",
"field": "role",
"options": [
{ "label": "管理员", "value": "admin" },
{ "label": "普通用户", "value": "user" }
]
}
]
}
传入组件:<DynamicForm :config="formConfig" />
前端动态渲染 UI,并接入事件、校验、接口等逻辑。
✅ 三、统一组件渲染引擎设计
ts
// schema 类型定义(核心)
interface ConfigSchema {
type: 'form' | 'table' | 'page'
fields?: FieldSchema[]
columns?: ColumnSchema[]
layout?: LayoutSchema[]
}
组件映射表:
ts
const componentMap = {
input: InputField,
select: SelectField,
table: DynamicTable,
form: DynamicForm,
page: PageRenderer,
}
渲染器封装:
vue
<component :is="componentMap[schema.type]" v-bind="schema" />
🧩 四、平台化配置系统对接建议
后台配置管理:
- 配置 JSON 存入数据库(关联业务类型/版本)
- 页面加载时通过接口获取配置项:
ts
const config = await fetchConfig('user-create-form')
渲染方式:
vue
<ConfigRenderer :config="config" />
🔁 五、配置中支持联动/权限/表达式
能力 | 实现方式 |
---|---|
字段联动 | showWhen: (formModel) => formModel.role === 'admin' |
条件判断 | visible: "role == 'admin' && status == 'active'" |
权限控制 | permission: 'user.create' ,配合 v-permission 实现 |
动态值注入 | 使用变量模板:"label": "欢迎{{user.name}}" |
搭配 @vueuse/core
的 evaluateExpression()
、lodash.template
实现表达式解析。
📑 六、配置字段样例(支持功能扩展)
ts
{
type: 'select',
field: 'status',
label: '状态',
required: true,
options: [
{ label: '启用', value: 'active' },
{ label: '停用', value: 'disabled' }
],
disabledWhen: (model) => model.role !== 'admin'
}
🔄 七、平台编辑器建议(后期拓展)
模块 | 功能 |
---|---|
拖拽区 | 拖入组件、修改属性 |
属性区 | 表单配置字段编辑 |
JSON 模式 | 支持直接修改 Schema |
预览模式 | 右侧实时渲染 |
发布/保存 | JSON 存入数据库,可设版本 |
搭配 lowcode-engine
、form-builder-vue
可快速实现前端低代码配置器。
🧠 八、配置系统中的抽象思维
原业务 | 配置抽象 |
---|---|
创建用户页面 | 表单 Schema + 提交按钮组件 |
商品列表页 | 表格组件 + columns 配置 |
活动编辑页面 | 页面布局 Schema + 表单嵌套 |
公共弹窗 | 弹窗组件 + type/config 渲染具体组件 |
✅ 可配置化的关键不是写死功能,而是提供足够通用的 UI 容器 + 渲染引擎 + 插槽
🧲 九、常见陷阱与解决方案
问题 | 建议 |
---|---|
配置项太多太乱 | 分层设计:字段层 → 表单层 → 页面层 |
动态值注入太灵活 | 限制字段表达式语法,仅支持特定变量 |
过于依赖 JS 逻辑 | 配置只控制结构和 UI,逻辑用插件注入 |
多端配置复用困难 | 统一配置协议,组件库适配不同端 |
✅ 十、落地建议(适用于企业级系统)
-
所有业务页面结构、字段、操作尽量抽象为 Schema
-
表单 + 表格配置可共用字段抽象类型
-
配置支持后端拉取、动态切换、版本管理
-
用户操作记录/日志接入埋点系统
-
平台维护配置时建议增加:
- 配置校验器
- 配置版本快照
- 权限限制(谁能编辑、发布)
🧠 总结一句话
可配置系统是前端工程架构抽象能力的巅峰体现,让功能由工程师驱动,逐步转向由产品和数据平台驱动。
下一篇我们将开启性能与稳定性优化阶段的首篇 : 👉 《前端性能优化全景图与落地方案》