用Vue如何实现低代码开发平台?

news2024/11/25 2:50:12

前言

在众多开发技术中,Vue组件化开发技术以其卓越的灵活性和高效性备受瞩目。

低代码平台相信不少人知道它的存在,而且现在大部分公司都在开发自己的低代码平台,首先我们来看看低代码平台可视化界面:

官网:https://www.jnpfsoft.com/?csdn,感兴趣自行去体验。

可以看到,大多数的页面设计器都包含了几个区域:左边是组件、中间为画布、右边为属性配置区域。接下来我们分析它是怎么实现拖动形成一个表单页面的,这里我们对css布局不做研究,直接分析它是怎么实现的。

一、分析

首先大家来思考一下,我们从左侧组件列表中拖动一个想要的组件到中间画布上,然后形成我们预期的页面,并且点击画布上的某个组件时会有当前组件的属性配置区(每个组件都有唯一的属性区),并且在右侧修改属性值,页面也会接着变化。这到底时怎么实现的呢?

其实这里可以通过json来实现的,我们预先定义好描述组件的json,json包含了当前组件数据和当前组件的样式属性数据等,并通过组件生成器将将描述组件的json结合起来渲染出实际组件,当修改样式属性时,组件样式同步更新;下面我们一input组件为例,其大致json如下:

json:{
  fieldId: '',
  name: 'Input',
  label: '单行文本',
  icon:"input01"
  placeholder: '请输入',
  value: '',
  rules: {},
  makeStyle: { //制作表单的时候,页面的样式控制
    active: false
  },
  style: {}, // 组件的样式
  setting: {}, // 组件的其他属性设置,比如:rows: 2
}

知道了组件需要用json描述,接下来我就开始正式开发;

二、组件列表

左侧组件列表比较简单就是将所有组件的json放到一个数组中,在页面中进行遍历即可。

//components  组件列表
 <div
      v-for="(item, index) in components"
      :key="index"
    >
      <i class="iconfont" :class="item.icon"></i>//图标
      <span>{{ item.label }}</span>//列表显示的名字
    </div>

三、开发拖拽搭建面板

拖拽组件这里我们借助vuedraggable插件,相关API请自行查看官网文档了解,这里不再阐述。

组件区域

  <!--组件列表改进,外层包裹draggable标签 -->
  <draggable
    v-model="components"          // 拖拽列表数据源
    :options="{ 
      group:{ 
              name: 'itxst',   // 可拖拽列组,相同表名可相互推拽
              pull: 'clone'    // 拖拽模板物料,复制到目标列表
            }, 
            sort: false        // 是否可推拽排序
    }"  
    :clone="handleClone"       // 复制模板物料执行方法 ,比如克隆元素并产生全局唯一的fieldId
    animation="300"            // 动画延迟
  >
    <div
      v-for="(item, index) in components"
      :key="index"
    >
      <i class="iconfont" :class="item.icon"></i>
      <span>{{ item.label }}</span>
    </div>
  </draggable>


  //克隆的方法
  handleClone(obj) {
      const newObj = Object.assign(_.cloneDeep(obj), {
        fieldId: `${obj.name}_${new Date().getTime()}`,
      })
      return newObj
  }

页面

  <!-- 画布区域 -->
  <draggable
    v-model="list2"         // 拖拽列表数据源
    group="itxst"           // 可拖拽列组,相同表名可相互推拽
    ghostClass="ghost"      // 拖动元素的占位样式class
    chosenClass="chosen"    // 选中目标的样式class
    selector="selector"
    :animation="500"        // 动画延迟
    :sort="true"            // 是否可推拽排序
  >
    <component
      v-for="item in mList"
      :key="item.id"
      :is="item.name"
      v-bind="item"
    ></component>
  </draggable>

list2是我们画布中的组件json组成的数组,这里使用<component>标签来渲染对应的组件,接下来就是属性配置区域;

四、属性配置区域

属性配置区域其实也是根据不同的组件显示不同的配置组件,它其实就是一个组件。当我们点击画布区域的某个组件的时候配置区域就会显示它的属性和值,当我们修改值以后,页面也会随之变化。

五、组件删除和复制

其实的组件的删除很简单,还记得之前的拖动形成的唯一的fieldId,点击删除就是拿到fieldId在组件数组中是删除数组中对应的组件json即可。同理复制的时候也是在当前fieldId对应的组件后面插入一条数据,指得注意的是,复制也要生成唯一的fieldId;

六、后记

到这里基本拖拽实现了,认真想想,其实低代码平台万变不离其宗,都是围绕json来进行的,后续将出嵌套组件是如何实现,还有组件间通讯方式专题,代码将会开源,我将会出个简单的demo方便大家对照着文章的思路,自己琢磨;

带你从零实现vue 低代码平台 - 知乎 (zhihu.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/771881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UTM 4.3 发布:在 macOS 上优雅的使用 QEMU 虚拟化 Windows、Linux 和 macOS

UTM 4.3 发布&#xff1a;在 macOS 上优雅的使用 QEMU 虚拟化 Windows、Linux 和 macOS 在 iOS 中虚拟化 Windows、Linux 和 Unix 请访问原文链接&#xff1a;https://sysin.org/blog/utm-4/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xf…

Sql构建

Sql构建 SQL 构建对象介绍 之前通过注解开发时&#xff0c;相关 SQL 语句都是直接拼写的&#xff0c;一些关键字写起来比较麻烦、而且容易出错 MyBatis 提供了 org.apache.ibatis.jdbc.SQL 功能类&#xff0c;专门用于构建 SQL 语句 sql拼接测试&#xff1a; public class …

从制造到智造,安捷利的云数蝶变

伴随着新一轮科技革命和产业变革的兴起&#xff0c;制造业的数字化转型步入深水区&#xff0c;尤其是在5G、工业互联网、大数据等为代表的新技术推动下&#xff0c;制造业全方位、全链条的升级已是大势所趋。 南沙地处中国的南大门&#xff0c;既是国家面向世界的重要战略平台…

安达发|高级计划与智能排程APS软件的发展史进程

从泰勒的科学管理理论出发&#xff0c;率先追求科学的管理理论和管理工具&#xff0c;在计算机成为企业日常管理的基本工具之后&#xff0c;信息系统已经成为提高工厂管理水平的重要支柱。 在工厂计划领域&#xff0c;开始了从MRP到MRPII再到ERP的演变过程。MRPII指的是制造…

Appium+python自动化(十三)- 输入中文 - 一次填坑记(超详解)

简介 无论你在哪里&#xff0c;在做什么都会遇到很多坑&#xff0c;这些坑有些事别人挖的&#xff0c;有些是自己挖的。别人挖的叫坑人&#xff0c;自己挖的叫自杀&#xff0c;儿子挖的叫坑爹。因此在做app自动化道路上也不会是一帆风顺的&#xff0c;你会踩很多坑&#xff0c;…

异步fifo(1)

什么时异步fifo FIFO&#xff0c;即First In First Out &#xff0c;是一种先进先出的数据缓存器&#xff0c;异步FIFO 是指读写时钟不一致&#xff0c;读写时钟是互相独立的。数据从一个时钟域写入FIFO缓冲区&#xff0c;并从另一个时钟域的同一FIFO缓冲区中读取数据&#xf…

16. 存储过程和存储函数

文章目录 1.存储过程和存储函数2.创建和使用存储过程2.1 语法&#xff1a;2.2 第一个存储过程&#xff0c;打印hello world2.3 调用语法2.4 带参数的存储过程2.5 调试存储过程 3.创建和使用存储函数3.1 存储函数定义3.2 存储函数语法&#xff1a;3.3 存储函数案例&#xff1a; …

VR全景医疗:多渠道矩阵式使用,展现医疗实力

VR全景医疗的市场正在趋于成熟&#xff0c;医院将VR全景展示作为一种新颖的展示方式&#xff0c;在全景中嵌入官网&#xff0c;展现医院全貌&#xff0c;更可以凭借多渠道矩阵式使用&#xff0c;展现医疗实力&#xff0c;提高医院知名度。虽然这是一个全新的领域&#xff0c;但…

k8s1.18.20:cert-manager 1.8 安装部署

cert-manager 安装部署 一、官网安装文档 https://cert-manager.io/docs/installation/ 1.1、简介 cert-manager 在 Kubernetes 集群中增加了证书 (certificates) 和证书颁发者 (certificate issuers) 作为资源类型&#xff0c;并简化了获取、更新和应用这些证书的过程。 …

传统软件测试过程中的测试分工

最近看了点敏捷测试的东西&#xff0c;看得比较模糊。一方面是因为没有见真实的环境与流程&#xff0c;也许它跟本就没有固定的模式与流程&#xff0c;它就像告诉人们要“勇敢”“努力”。有的人在勇敢的面对生活&#xff0c;有些人在勇敢的挑战自我&#xff0c;有些人在勇敢的…

利用内存映射文件进行程序间通信2一代码

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 为了测试代码&#xff0c;需要分别创建两个应用程序文件。 窗体如下&#xff1a; 两个项目的代码在最前面添加&#xff1a; Impor…

新晋 Committer!来自复旦大学的帅哥一枚

点亮Star⭐️ 支持我们 https://github.com/apache/dolphinscheduler 最近&#xff0c;社区星力量又迎来一位新晋 Committer&#xff0c;这次是来自复旦大学研究生在读的王维饶同学&#xff0c;一起来认识一下吧&#xff01; 个人简介 姓名&#xff1a;王维饶职位&#xff1a…

从0到1构建证券行业组织级项目管理体系的探索与实践︱东吴证券PMO负责人娄鹏呈

东吴证券股份有限公司信息技术总部PMO负责人娄鹏呈先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;从0到1构建证券行业组织级项目管理体系的探索与实践。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&a…

简笔风和写实风的区别

现实主义和风格化 当我们谈论现实主义和风格化时&#xff0c;我们是什么意思&#xff1f;这看起来相当明显&#xff0c;现实主义指的是模仿逼真的逼真的图形。它不一定需要存在于现实世界中&#xff0c;但被传达为它属于我们的世界。10年前&#xff0c;我们认为现实的东西在今…

数据结构之vector的实现

数据结构之vector的实现 Vector类分为&#xff1a;构造函数、析构函数、只读函数、修改函数、私有函数、成员变量&#xff08;数据区和大小&#xff09; # include <iostream> # include <algorithm> # include <cstdlib># define DEFAULT_CAPACITY 3templat…

数学建模-图论 最短路径

作图 %% 注意&#xff1a;以下代码需要较新版本的matlab才能运行&#xff08;最好是2016版本及以上哦&#xff09; % 如果运行出错请下载新版的matlab代码再运行%% Matlab作无向图 % &#xff08;1&#xff09;无权重&#xff08;每条边的权重默认为1&#xff09; % 函数graph(…

SCT52A40,对标UCC27200、UCC27201半桥驱动IGBT/MOSFET栅极驱动器

特点&#xff1a; • 8-24V宽供电电压 • 驱动高侧和低侧N通道MOSFET • 4A峰值输出源电流和汇电流 • 升压电源电压范围可达120V • 集成阴极负载二极管 • TTL兼容输入&#xff0c;-10V输入 • 45ns传输延迟 • 1000pF负载下7ns上升和4.5ns下降时间 • 2ns延迟匹配时间 • 静…

[centos]安装mysql8.0.26

1、首先&#xff0c;根据自己的机子到MySQL官网下载对应的数据库https://dev.mysql.com/downloads/mysql/ 2、卸载mariadb&#xff0c;并解压Mysql 3、安装 rpm -ivh mysql-community-common-8.0.26-1.el7.x86_64.rpm --nodeps rpm -ivh mysql-community-libs-8.0.26-1.el7.x…

《向量数据库指南》:向量数据库Pinecone快速入门

目录 ⚠️警告 ℹ️注意 ⚠️警告 如何开始使用Pinecone向量数据库。 本指南介绍如何在几分钟内设置Pinecone向量数据库。 安装Pinecone客户端(可选)此步骤是可选的。只有在您想使用Python客户端时才执行此步骤。 使用以下shell命令安装Pinecone: Python pip insta…

potplayer放大画面,画面拖拽。备份

放大画面&#xff1a; 按住alt和鼠标左键&#xff0c;就可以拖动放大后的画面了 窗口化示图