前端开发可视化数据前端开发

Vue 前端可视化活动编辑器

2020-08-11  本文已影响0人  lljj_x

先看效果,为一个可视化活动编辑器。


9759194b0cce40f59c39a0b004008454_tplv-k3u1fbpfcp-zoom-1.png

演示地址:https://form.lljj.me/vue-editor.html#/editor

项目地址:https://github.com/lljj-x/vue-json-schema-form/

基于 JSON Schema 开箱即用的简单活动可视化编辑器。

背景

在做生成一个可视化店铺装修系统的时候,需要解决配置数据表单的通用性,参阅了一些现用的解决方案,最终通过 JSON Schema 来生成对应的表单和校验规则。

参考资料:https://github.com/CntChen/cntchen.github.io/issues/15

JSON Schema 主要运用在如下几点:

实现

首先可视化编辑器需要做到板块的管理,这些板块支持可视化的编辑配置和效果展示,最终相互组装为一个页面。

每个板块我们不可避免的需要一个 View组件 来做展示,因为每个板块都长得不一样。板块配置表单和数据校验都通过 JSON Schema 来实现,然后再通过一个拖动的容器来承载这些板块以及一些其它的数据配置。

如下图:


52ec87b534aa4ecaa7da3a38e17c6f7d_tplv-k3u1fbpfcp-zoom-1.jpg

这样当我们在添加新的板块时,只需要开发一个 View组件 ,和书写一份 JSON Schema 来定义数据即可。

功能介绍

基于Vue,依赖 ElementUi、vuedraggable、@lljj/vue-json-schema-form

添加新的板块只需要在 config/tools.js 导入新增的板块,并且配置好工具栏即可,如:

import * as componentPackFlashSaleGoodsList from '../viewComponents/FlashSaleGoodsList';

const tools = [
    {
        groupName: '图文类',
        componentList: [{
            // 比如这里添加新增的模块
            title: '秒杀商品', // 板块标题
            maxNum: 3, // 最多可添加次数
            icon: 'el-icon-picture', // 工具栏图标类名
            componentPack: componentPackFlashSaleGoodsList, // 重点是这个当前板块的组件包
            additional: {
                bottomDisplay: true, // 是否置底显示
                topDisplay: true, // 是否置顶显示
                unRemove: true // 是否为不可移除
            }
        }]
    }
]

新增板块文件结构如下:( viewComponents/FlashSaleGoodsList/index.js 这里对应上面工具栏配置导入的组件包文件)

import propsSchema from './schema.json';
import uiSchema from './uiSchema.js';
import errorSchema from './errorSchema.js';

// 这里可以异步导入
const View = () => import('./View.vue');

const NAME = propsSchema.id;
const componentViewName = `${NAME}View`;

export {
    propsSchema, // JSON Schema 定义数据结构和生成表单 vue-json-schema-form 参数    
    componentViewName,  // 视图View组件name,需要自己保持唯一
    View, // 视图View组件
    uiSchema, // uiSchema 辅助增强表单样式 不必须 vue-json-schema-form 参数
    errorSchema, // 辅助增强表单校验错误提示 不必须 vue-json-schema-form 参数
    // customRule, // 自定义的校验规则 vue-json-schema-form 参数 (需要更多的vue-json-schema-form 参数参数可自己添加)
};

导出模块解释如下:

如果需要更多 vue-json-schema-form 参数可直接在 packages/demo/src/vue-editor/views/editor/Editor.vue 渲染 VueElementForm 组件时添加即可。

  • 新增板块可参见 /packages/demo/src/vue-editor/views/editor/viewComponents 内现有板块
  • 工具栏和默认数据配置在 /packages/demo/src/vue-editor/views/editor/config 文件夹内

整个实现相对比较简单,感兴趣的可以花上两个小时看下源码,欢迎讨论提问。

上一篇 下一篇

猜你喜欢

热点阅读