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

演示地址:form.lljj.me/vue-editor.… 项目地址:github.com/lljj-x/vue-…

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

参考资料:github.com/CntChen/cnt…

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

基于 JSON Schema 来动态生成数据配置表单和数据校验 结合发布流程同步 JSON Schema 到后端系统做接口数据校验 一个活动版块对应一个 JSON Schema 和一份视图 View组件 即可

实现 首先可视化编辑器需要做到板块的管理,这些板块支持可视化的编辑配置和效果展示,最终相互组装为一个页面。 每个板块我们不可避免的需要一个 View组件 来做展示,因为每个板块都长得不一样。板块配置表单和数据校验都通过 JSON Schema 来实现,然后再通过一个拖动的容器来承载这些板块以及一些其它的数据配置。 如下图:

这样当我们在添加新的板块时,只需要开发一个 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 参数参数可自己添加) }; 复制代码 导出模块解释如下:

propsSchema: required JSON Schema配置,必须包含一个 id 的属性,并且要保证唯一,在保存和编辑数据时用来标识当前组件。传递给 vue-json-schema-form 生成表单; componentViewName: required 板块View组件名,唯一,建议通过 id + View 拼接,只是为了在注册组件时的组件名,其实我也可以帮你生成,但是我没有; View: required required 板块View组件,需要异步导入就 () => import(’./xxx.vue’),View 组件必须包含一个名为 formData 的props接受当前表单数据; uiSchema: 传递给 vue-json-schema-form 生成表单,用于增强生成表单的样式,可选; errorSchema: 传递给 vue-json-schema-form 生成表单,用于增强表单的校验提示信息 customRule: 传递给 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 文件夹内

如果你现在也想学习前端开发技术,在学习前端的过程当中有遇见任何关于学习方法,学习路线,学习效率等方面的问题,你都可以申请加入我的Q群:前114中6649后671,里面有许多前端学习资料 大厂面试真题免费获取,希望能够对你们有所帮助。

基于JSON Schema的前端可视化活动编辑器相关推荐

  1. Vue基于JSON Schema生成表单和数据校验

    基于 Vue.js.JSON Schema 和 ElementUi 快速生成表单,支持自定义组件,支持自定义错误提示配置和校验规则... 源码:vue-json-schema-form github ...

  2. 前端可视化开发-编辑器

    draw.io 原型图设计编辑器:https://github.com/jgraph/drawio method draw svg绘制编辑器:https://github.com/methodofac ...

  3. JSON Schema的应用(具体的使用场景)

    什么是JSON Schema JSON Schema 是用于验证 JSON 数据结构的强大工具,Schema可以理解为模式或者规则. 要定义 JSON Schema 是什么,我们可能应该首先定义 JS ...

  4. json schema多种形式_什么是JSON Schema?

    什么是JSON Schema? 如果你曾经使用过XML Schema,RelaxNG或ASN.1,那么你很可能已经知道什么是JSON Schema,并且可以跳过本文的阅读.如果你是头一次听说,或者听过 ...

  5. json schema多种形式_什么是JSON Schema?及其应用方式......

    如果你曾经使用过XML Schema,RelaxNG或ASN.1,那么你很可能已经知道什么是JSON Schema,并且可以跳过本文的阅读.如果你是头一次听说,或者听过过这个词汇但不了解,那么你来对地 ...

  6. JSON Schema 详解

    简介 要真正理解 JSON Schema,首先需要知道什么是 JSON. JSON 代表 "JavaScript对象表示法",是一种简单的数据交换格式.它最初是万维网的一个符号.因 ...

  7. 走近 JSON Schema

    JSON Schema 用于描述 JSON 数据的声明性格式.比如表示一个人的信息 的 JSON: {"first_name": "George"," ...

  8. 前端可视化搭建的拖拽平台

    前端可视化拖拽平台 简介 技术栈采用dva+hooks+umi+antd-mobile+sortable.js+react-color.基于sortable.js的前端可视化搭建的拖拽平台,ui组件采 ...

  9. npm 可视化html编辑器,超给力 Vue.js 可视化H5拖拽编辑器Quark-H5

    前两天有分享一个鲁班H5移动端页面生成器.今天再给大家推荐一款超优秀的Vue H5可视化布局编辑器QuarkH5. quark-h5 基于 vue.js 开源的H5可视化拖放编辑器,star高达1.7 ...

最新文章

  1. VTK:Rendering之Shadows
  2. 计算机漫游用户的工作原理,深入理解计算机系统——计算机系统漫游
  3. Android Studio导入 jar包的方法
  4. 使用任意数量的关键字实参
  5. MATLAB里面的filter和filtfilt的C语言源代码
  6. linux tar order
  7. 计算器c语言源代码全,C语言的计算器源代码
  8. 2019人工智能写作软件
  9. xscan运行xscan_gui.exe无法打开
  10. 计算机网络期末复习要点(谢希仁第8版)抱佛脚通用
  11. 伴风网易博客linux,伙伴 - 成凹的日志 - 网易博客
  12. 寒江独钓第3章——串口过滤
  13. 使用gcc编译报错:/tmp/ccoLTk4o.o:在函数‘main’中: main1.c:(.text+0x9c):对‘pirnt1’未定义的引用 collect2: 错误:ld 返回 1
  14. 男程序员写代码的样子 VS 女程序员写代码的样子
  15. 复制网页上不能复制的文章的方法
  16. Fisher线性判别 模式识别 例题
  17. php 微擎钻石投票二开,[模块插件]微擎钻石投票男神女神公众号投票系统完美运营版其他-(微信)小程序...
  18. 常见的八种典型知识变现场景
  19. H323plus的分析
  20. PPTP,L2TP和IPsec的区别及优缺点

热门文章

  1. Oracle数据库(二)多表联合查询
  2. flutter调用android 原生TextView
  3. 冰箱有哪些尺寸 冰箱尺寸的选择 冰箱尺寸大小标准对照表
  4. 五分钟JAVA代码教会你:FFmpeg实现视频试看(Centos7版本)
  5. Jexus for linux 安装说明
  6. sqlserver 链接服务器 sql
  7. 【NB-Iot自我学习之路_3】NB平台介绍【电信篇】+【移动篇】
  8. S4 HANA中新增公司代码AS01创建资产报错,消息号AA821 “公司代码***没有在资产会计核算模块中定义“
  9. python爬取笔趣阁小说的代码微小调整修改
  10. Android 千变万化 TextView:神奇的 SpannableString