低代码平台工具 —— 公式编辑器

导读

公式编辑器:公式编辑用于字段值来源于其他字段或是来源于函数计算结果都可由公式编辑来完成

在这里插入图片描述

公式编辑器主要需要解决三件事:

  • 合适的编辑器
  • 强大的函数库
  • 合适的事件监听

技术选型

  • excel函数库 formulajs,这个函数库可以让JavaScript支持绝大部分的excel函数
  • 框架ReactVue都可进行开发,这里我采用Vue2进行快速开发
  • 编辑器 codemirror,定制程度高支持代码高亮、文档描述清晰,适合的公式编辑器的技术选型,因为采用Vue所以最终使用的是vue-codemirror; 不过值得注意的是,由于Vue2与Vue3的区别,vue-codemirror最终使用的是4.0.6

效果展示

案例:计算结果由Form表单中的名称和描述组成

例如:名称=张三;描述=13岁,结果显示:张三 - 13岁

在这里插入图片描述

步骤1 —— 公式配置

在这里插入图片描述

步骤2 —— 数据监听 & 自动计算结果

在这里插入图片描述

组件开源

本次组件也开源到了Github于npm中,欢迎前往查看Star & 讨论
demo & 源码

安装

$ npm i vue-formula-editor -S

example地址

在线体验

使用方式

import { calculate, formulaWatcher, FormulaEditor } from 'vue-formula-editor'

主要导出三个对象

  • calculate计算结果函数
  • formulaWatcher自动监听表单变化计算结果
  • FormulaEditor组件

FormulaEditor组件 Props 参数说明

参数说明类型可选值默认值
fieldList表单字段Array必填-
formulaList公式函数列表Array必填-
formulaConf公式编辑配置 / 回显值Object必填-
fieldList 数据格式
[{fullName: '名称',value: 'string',enCode: 'name',},
]
formulaList 数据格式
[{name: '常用函数',enCode: 'frequentlyUse',formula: [{name: 'SUM',enCode: 'SUM',tip: '求和',example: 'SUM(数学成绩,语文成绩,英语成绩,...) = 各科总成绩',usage: 'SUM(数值1,数值2,...)。',},],},
]
formulaConf 数据格式

其中 marks 为可选参数,因为不一定有变量参与计算

{"text": "CONCATENATE(名称,描述)","marks": [{"from": {"line": 0,"ch": 12},"to": {"line": 0,"ch": 14},"enCode": "name"},{"from": {"line": 0,"ch": 15,"sticky": null},"to": {"line": 0,"ch": 17,"sticky": null},"enCode": "desc"}]
}

FormulaEditor组件 Methods 方法说明

方法名说明参数
getData获取公式编辑配置
reset重置公式编辑器

自动监听数据变化 - formulaWatcher

自动监听数据变化,并实时计算结果

formulaWatcher Params 参数说明
参数说明
vm当前 Vue 实例
formData计算公式所需的数据; key:监听的名称、value:监听的表单数据
formulaConf计算公式配置
fn回调函数
使用示例
/*** 动态监听并返回计算结果* @param {VueContentInstance} vm 当前Vue实例* @param {Object} formData 计算公式所需的数据* @param {Object} formulaConf 计算公式配置* @param {Function} fn 回调函数* @returns {Function} 取消监听函数*/
this.watchData = formulaWatcher(this,{ key: 'formData', value: this.formData },this.formulaConf,data => {this.result = data}
)

计算结果方法 - calculate

/*** 计算公式结果* @param {Object} formulaConf 计算公式配置 */
this.result = calculate({text: 'SUM(1,2,3,4,5,6,7,8,9,10)',
})

最终代码

jcode

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++:string类篇

string类的介绍 概念: std::string是C 标准库中用于处理字符串的类,它封装了对字符序列的操作,使得字符串处理更加便捷和安全。 特点: 1.动态内存管理:std::string会自动分配和释放内存,避免了手动管理内存…

Leetcode 283 移动零

引言 今天,看到了一个双指针算法,构思非常巧妙。这里特来记录一下。 正文 本题,我们使用两个指针,一左一右,右侧指针不断向右侧移动,如果右侧指针所指向的数据值不为 0,那么我们就交换右侧指针…

jmeter引入jar包的三种方式

示例 实现对登录密码进行MD5加密 pom文件依赖 <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.12&l…

90. UE5 RPG 实现技能的装配

在上一篇里&#xff0c;我们实现了在技能面板&#xff0c;点击技能能够显示出技能的相关描述以及下一级的技能的对应描述。 在这一篇里&#xff0c;我们实现一下技能的装配。 在之前&#xff0c;我们实现了点击按钮时&#xff0c;在技能面板控制器里存储了当前选中的技能的相关…

阿里云搜索专家实操:如何高效构建企业级 AI 搜索?

作者&#xff1a;来自阿里云搜索产品专家牛俊 本文由阿里云搜索产品专家牛俊在【AI 搜索 TechDay】上的分享【阿里云 AI 搜索 Demo 展示和动手实践】整理而成。 阿里云 AI 搜索的产品能力与业务价值 阿里云 AI 搜索的方案&#xff0c;基于阿里云 Elasticsearch Inference API…

Java巅峰之路---进阶篇---面向对象(一)

static关键字 介绍 static表示静态&#xff0c;是java中的一个修饰符&#xff0c;可以修饰成员方法&#xff0c;成员变量。 其中&#xff0c;被static修饰的成员变量&#xff0c;叫做静态变量&#xff1b;被static修饰的成员方法&#xff0c;叫做静态方法。 静态变量 调用…

牛客面经学习笔记(四)

这种拨码开关在PLC里面很是常用&#xff1a; 这种弧型线就很漂亮&#xff1a; 这个白色按键很漂亮&#xff1a; 快恢复保险丝&#xff1a; 继电器电路&#xff1a; 这里的续流二极管很重要&#xff0c;因为继电器是感性元件&#xff1a; 【【必考】5招搞清楚&#xff01;单点接…

【轻松拿捏】Java中ArrayList 和 LinkedList 的区别是什么?

ArrayList 和 LinkedList 的区别是什么&#xff1f; 1. ArrayList 2. LinkedList 3.总结 &#x1f388;边走、边悟&#x1f388;迟早会好 ArrayList 和 LinkedList 都是 Java 中常用的 List 接口的实现类&#xff0c;但它们在内部结构和操作性能上有所不同。 1. ArrayLis…

SpringBoot+Vue实现大文件上传(分片上传)

SpringBootVue实现大文件上传&#xff08;分片上传&#xff09; 1 环境 SpringBoot 3.2.1&#xff0c;Vue 2&#xff0c;ElementUI 2 问题 前几篇文章&#xff0c;可以用于较小文件的上传&#xff0c;对于较大文件来说&#xff0c;为了提高上传效率和可靠性&#xff0c;可以采…

【1-4】设计模式概述

目录 一.设计模式产生背景 二.软件设计模式的概念 三.学习设计模式的必要性 四.设计模式分类 一.设计模式产生背景 二.软件设计模式的概念 软件设计模式&#xff0c;又称设计模式&#xff0c;是一套被反复使用、多人知晓的、经过分类编目的、代码设计经验的总结。它描述了…

Python爬虫使用实例

IDE&#xff1a;大部分是在PyCharm上面写的 解释器装的多 → 环境错乱 → error&#xff1a;没有配置&#xff0c;no model 爬虫可以做什么&#xff1f; 下载数据【文本/二进制数据&#xff08;视频、音频、图片&#xff09;】、自动化脚本【自动抢票、答题、采数据、评论、点…

深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)

目录 &#x1f354; 前言 &#x1f354; 图像基础知识 1. 像素和通道的理解 2. 小节 &#x1f354; 卷积层 1. 卷积计算 2. Padding 3. Stride 4. 多通道卷积计算 5. 多卷积核卷积计算 6. 特征图大小 7. PyTorch 卷积层 API 7. 小节 &#x1f354; 池化层 1. 池…

代码随想录算法训练营第十六天(二叉树 四)

力扣题部分: 513.找树左下角的值 题目链接:. - 力扣&#xff08;LeetCode&#xff09; 题面: 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 思路(层序遍历): 应该是这道题最简单的方法了&#xff0…

C++ 设计模式——建造者模式

建造者模式 建造者模式组成部分建造者模式使用步骤1. 定义产品类2. 创建具体产品类3. 创建建造者接口4. 实现具体建造者5. 创建指挥者类6. 客户端代码 建造者模式 UML 图建造者模式 UML 图解析建造者模式的优缺点建造者模式的适用场景完整代码 建造者模式 建造者模式&#xff…

C语言—指针(1)

目录 一、内存和地址 &#xff08;1.1&#xff09;内存 &#xff08;1.2&#xff09;编址的理解 二、指针变量和地址 &#xff08;2.1&#xff09;取地址操作符&#xff08;&&#xff09; &#xff08;2.2&#xff09;指针变量和解引用操作符 &#xff08;2.2.1&…

XSS复现

目录 XSS简单介绍 一、反射型 1、漏洞逻辑&#xff1a; 为什么有些标签可以触发&#xff0c;有些标签不能触发 可以触发的标签 不能触发的标签 为什么某些标签能触发而某些不能 二、DOM型 1、Ma Spaghet! 要求&#xff1a; 分析&#xff1a; 结果&#xff1a; 2、J…

Unity项目优化记录

背景&#xff1a;测试反馈项目组游戏存在内存泄露&#xff0c;来找到中台这边协调排查。好家伙&#xff0c;跑了两次看了内存快照&#xff0c;再看资源组织和管理方式&#xff0c;存在的问题确实比较多。 1、修复内存泄露&#xff1a;结算界面由于资源引用丢失导致整个面板不会…

44.【C语言】指针(重难点)(G)

目录 19.字符指针变量 *定义 *简单说明 *如果是字符串 *像数组一样指定访问常量字符串的字符 *练习 20.数组指针变量 *定义 *格式 *例子 问题1 问题2 *利用指针打印 21.二维数组传参的本质 *回顾 往期推荐 19.字符指针变量 *定义 指向字符的指针变量&#xff0c;用于存储字符…

使用Python实现B站自动答题机器人

文章目录 1. 写在前面2. 接口分析3. 点选验证分析4. Python程序实现 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长…

什么是OpenTiny?

OpenTiny 是一套企业级的 Web 前端开发解决方案&#xff0c;提供跨端、跨框架的 UI 组件库和低代码引擎&#xff0c;帮助开发者高效构建 Web 应用 。企业运用开发中&#xff0c;可以利用 OpenTiny 的以下核心组件和优势&#xff1a; TinyVue 组件库&#xff1a;一个丰富的组件库…