低代码平台实践:打造高效动态表单解决方案的探索与思考

🔥需求背景

我司业务同事在抓取到候选人的简历之后,经常会出现,很多意向候选人简历信息不完整,一个个打电话确认的情况,严重影响了HR的工作效率,于是提出我们可以通过发送邮件、短信、H5链接的方式来提醒候选人完善自身简历信息和基本信息。

🔥如何实现

经过前期的技术调研,我们决定采用后台低代码方式结合H5动态表单,实现一次开发配置多次使用的目的。HR在后台配置完成之后,对应模板会进入集团模板池,其他同事也可快捷方便引用,大大提高工作效率。

🔥组件库设计

  • 输入框
  • 数字输入框
  • 单选框
  • 多选框
  • select选择器
  • 时间
  • 评分滑块
  • 省市区选择
  • 开关switch
  • 文本分割
  • 超链接

🔥部分界面

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🔥组件DSL配置基本介绍

{component_type:'base_com' ||  'assist_com',ui_type:input,input_number,selcet,radio,checkboxs....lable_name:label  标题,label_width:  lable宽度,label_tip: lable 提示,placeholder: 默认占位文本,show_clear_icon: 是否显示清除按钮,disable:是否只读,col_width: 布局宽度,8,12,24border_color: 边框颜色,border_radius: 圆角,required: 是否必填,rules:校验规则 Array ;required为 true 时候 触发eg:[{filed_type:字段类型(字符串、URL、邮箱、自定义)),change_type:blur,change, validate_type:验证方式,(长度,正则,最小值,最大值),error_msg:错误信息)}]is_dict_data: 是否字典取值dict_name: 字典取值 Namefiled__id: 字段id (uuid 生成唯一) - 后端数据库使用 filed_type: string,number,boolen,date  字段类型-后端数据库使用,filed_name:''  字段名称-后端数据库使用,
}

🔥Form DSL配置基本介绍

{form_title: 表单名称,form_size: lager、default、smalllabel_position:left,right,topis_line: 是否行内表单,show_require: 显示必填红色星号show_cancel:显示重置、取消按钮,show_save: 显示提交按钮
}

🔥H5端组件库部分代码

编写对应的组件库组件:(我们业务目前有 20个 组件,根据 不同的 ui_type 结合 Vue 动态组件 渲染我们所配置的动态表单页面)

import InputComponents from '@/components/InputComponents'
import InputNumberComponents from '@/components/InputNumberComponents'
import SelectComponents from '@/components/SelectComponents'
import DatePickerComponents from '@/components/DatePickerComponents'
import RadioComponents from '@/components/RadioComponents'
import CheckboxComponents from '@/components/CheckboxComponents'
import CascaderComponents from '@/components/CascaderComponents'
import RateComponents from '@/components/RateComponents'
import ColorPickerComponents from '@/components/ColorPickerComponents'
import SliderComponents from '@/components/SliderComponents'
import UploadComponents from '@/components/UploadComponents'
import SwitchComponents from '@/components/SwitchComponents'
import TextComponents from '@/components/TextComponents'
import PasswordComponents from '@/components/PasswordComponents'const componentsType = [{type:'input',components:InputComponents,},{type:'input_number',components:InputNumberComponents,},{type:'select',components:SelectComponents,},{type:'date_picker',components:DatePickerComponents,},{type:'radio',components:RadioComponents,},{type:'checkbox',components:CheckboxComponents,},{type:'cascader',components:CascaderComponents,},{type:'rate',components:RateComponents,},{type:'slider',components:SliderComponents,},{type:'upload',components:UploadComponents,},{type:'switch',components:SwitchComponents,},{type:'text',components:TextComponents,},{type:'password',components:PasswordComponents,},
]

🔥基础组件内部实现逻辑

<el-col :span="info.col_width" ><el-form-item :label="info.lable_name" :rules="info.rules"><el-input v-bind="$attrs"  v-model="ruleForm[filed_name]" :placeholder="info.placeholder" :disabled="info.disable" :clearable="info.show_clear_icon"/></el-form-item> 
</el-col>
const props = defineProps({info:{type:Object,default:{}}
})<style lang="scss">
.el-input {.el-input-group__prepend {.el-input__wrapper {border-radius:v-bind(info.border_radius);}}.el-input-border {background: v-bind(info.border_color);padding: 0 12px;}
}
</style>

🔥后端返回数据结构解析结构

pageSetting:{form_setting: {form_title: '表单名称',form_size: 'default',label_position: 'left',label_width:'125px',is_line: false,show_require: true,show_cancel: true,show_save: true},components_list: [{component_type: 'base_com',ui_type: 'input',lable_name: '姓名',label_width: '120px',label_tip: '请填写真实姓名',placeholder: '请输入姓名',show_clear_icon: true,disable: false,col_width: '12',border_color: "#fff",border_radius: '4px',required: true,rules: [{ reauired: true, filed_type: 'string', change_type: 'blur', validate_type: 'length', error_msg: '请输入姓名' }],is_dict_data: fasle,dict_name: '',filed__id: 'bcvssadas1sbx',filed_type: 'string',filed_name: 'customer_name',}...// 多个如此格式的对象]
}

🔥H5端页面渲染部分代码

<el-form:model="sizeForm":inline="data.form_setting.is_line"label-width="data.form_setting.label_width":label-position="data.form_setting.label_position":size="data.form_setting.form_size"><template v-for="(item,index) in data.components_list" :key="index"> <component :is="componentsType.find(i=>i.type == item.ui_type).components"   :info="item" /></template>
</form>

🔥反思优化

  1. 交互上:
    上线业务使用一段时间之后,反馈表单题目顺序调整比较困难,经过前端和产品的多次讨论决定按照“职责分离”的要求,在表单预览的时候,增加拖拽功能,业务可以按照自己的需求对表单所有的题目顺序进行自定义排列,实现“配置”,“预览",“产出”这样一个闭环的工作流程,并且不会相互影响。
  2. 数据结构上:
    和后端同学讨论进一步优化数据结构,每次保存数据时,前端增加逻辑校验,将未配置选项的冗余字段过滤,只保存配置的字段,未配置的字段一律设置默认值,前端的渲染逻辑也得到了大大的精简。渲染速度也得到了进一步提升
  3. 便捷性上:
    第一批完成的组件数量有限,不能够完全覆盖业务场景,有些组件还有些鸡肋,后续能不能完全实现组件自定义?
    引入全局组件库的概念,开始精细化区分“表单组件",“布局组件”,“辅助组件(分割线、提示文本)” ,“信息展示(播报栏、滚动展示)”,“页面美化(swipper,广告位,card卡片)” 等,进一步完善优化系统。

🔥后续扩展

基于此模块,二次开发 “候选人求职意向调查问卷“,“职业性格测评问卷“等模块, 新增(评分、跳题、一题一页、表格题目、)等功能,使得系统更加健壮,满足业务场景,实现业务需求

🔥结语

通过上述实践,我们不仅解决了业务上的燃眉之急,也为低代码平台的深度应用提供了宝贵经验。未来,我们计划继续深化低代码平台的建设,探索更多创新功能,如集成更多问卷元素(如评分、跳题)、支持多页面表单等,不断拓展平台的边界,为企业数字化转型赋能。

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

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

相关文章

.NET C# 操作Neo4j图数据库

.NET C# 操作Neo4j图数据库 目录 .NET C# 操作Neo4j图数据库环境Code 环境 VisualStudio2022 .NET 6 Neo4j.Driver 5.21 Code // 连接设置 var uri "bolt://localhost:7687"; var user "neo4j"; var password "password"; // 请替换为你的…

docker 配置与使用

目录 安装docker 作者遇到的问题1&#xff1a;安装docker 错误说明 解决方法&#xff1a; 作者遇到问题2&#xff1a;GPG密钥问题 问题说明 解决方法&#xff1a; 方法一&#xff1a;使用备用的GPG密钥服务器 方法二&#xff1a;使用国内镜像源 方法3&#xff1a;手动下…

使用lua开发apisix自定义插件并发布

接到老大需求&#xff1a;需要对cookie进行操作&#xff0c;遂查询apisix的自带插件&#xff0c;发现有&#xff0c;但不满足&#xff0c;于是自己开发了一个插件并部署&#xff0c;把开发部署流程写在这里打个日志怕以后忘掉。 一、需求 插件很简单&#xff0c;就是在reques…

什么是嵌入式,单片机又是什么,两者有什么关联又有什么区别?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;从科普的角度&#xff0c;…

HTTP 抓包工具——Fiddler项目实战

网络爬虫实质上是模拟浏览器向 Web 服务器发送请求。对于一些简单的网络请求&#xff0c;我们 可以通过查看 URL 地址来构造请求&#xff0c;但对于一些稍复杂的网络请求&#xff0c;仍然通过观察 URL 地 址将无法构造正确。因此我们需要对这些复杂的网络请求进行捕获分…

【总线】AXI4第二课时:深入AXI4总线的基础事务

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣&#xff0c;那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者&#xff0c;AXI4以其高性能和高度可扩展性&#xff0c;成为了现代电子系统中不可或缺的通信桥梁…

数字化和信息化的区别是什么?

市面上有些企业专门区分出了数字化和信息化的区别&#xff0c;认为数字化基于信息化的基础之上。但也有一些专家认为两者不是独立或前后的概念&#xff0c;属于近似概念&#xff0c;它到底应当怎样被定义&#xff1f; 其实之前已经写过好几篇这个类型的文章了&#xff0c;但是总…

express+vue在线im实现【四】

往期内容 expressvue在线im实现【一】 expressvue在线im实现【二】 expressvue在线im实现【三】 本期示例 本期总结 支持了音频的录制和发送&#xff0c;如果觉得对你有用&#xff0c;还请点个免费的收藏与关注 下期安排 在线语音 具体实现 <template><kl-dial…

Retrofit类型安全的HTTP客户端库

简介 Retrofit是Square公司开发的一个类型安全的HTTP客户端库&#xff0c;用于Android和Java平台&#xff0c;它使得与Web服务的交互变得更加简单快捷。Retrofit将HTTP API转换成Java接口&#xff0c;让你可以用更简洁的代码形式调用RESTful API&#xff0c;Android网络编程重点…

Vue与SpringSecurity认证整合-06

Vue与SpringSecurity整合 我们要知道springsecurity是一个安全框架,我们在后端的时候没有接触前端,springsecurity引入依赖之后,启动项目会对我们进行拦截,让我们登录,然后我们制定了一个登录页面,也是后端的,我们可以指向我们的登录页面,但是与Vue整合之后,登录页面肯定是在Vu…

贾英才主任受聘担任“两个中心”专家委员会委员

近日&#xff0c;第二届海峡两岸中西医结合肾脏病学术大会授牌仪式在北京隆重举行。 这一盛会吸引了众多医学领域的专家学者&#xff0c;共同探讨中西医结合治疗肾脏病的最新进展和未来发展方向。 在此次大会上&#xff0c;崇文门中医医院的贾英才主任凭借其在肾脏病领域的卓…

【C语言 || 数据结构】二叉树

文章目录 前言 二叉树1.树1.1树的定义1.2 树的结构 2.特殊的树&#xff08;二叉树&#xff09;2.1 二叉树的概念2.2 特殊的二叉树2.3 二叉树的储存2.3.1 顺序储存二叉树2.3.2 链表储存二叉树 2.4 二叉树的遍历2.4.1 二叉树的中序遍历2.4.2 二叉树的前序遍历2.4.3 二叉树的后序遍…

【React】使用Token做路由权限控制

在components/AuthRoute/index.js中 import { getToken } from /utils import { Navigate } from react-router-domconst AuthRoute ({ children }) > {const isToken getToken()if (isToken) {return <>{children}</>} else {return <Navigate to"/…

服务器主机托管服务内容科普

在现代信息技术快速发展的背景下&#xff0c;服务器主机托管服务已成为众多企业、机构和个人不可或缺的一部分。本文将为您详细科普服务器主机托管服务的内容&#xff0c;帮助您更好地理解和选择适合自己的托管方案。 一、硬件与基础设施 服务器主机托管服务首先提供了硬件和网…

艾公益 艾多美(中国)有限公司向烟台市捐赠爱心物资

2024年6月18日&#xff0c;艾多美&#xff08;中国&#xff09;有限公司&#xff0c;在烟台市高新区举办了2项爱心捐赠仪式。 在本次爱心捐赠活动中&#xff0c;艾多美&#xff08;中国&#xff09;有限公司携手烟台市慈善总会向烟台市贫困女童捐赠助学金、爱心物资&#xff0c…

【字符串验证】验证码

【字符串验证】验证码 【参考代码】 #include <iostream> #include <cstring> using namespace std; int main(){ string a "AV8d";string b; cin >> b;for(int i0; i<a.length(); i){if(a[i]>A && a[i] < Z){a[i]32;}if…

算法008:四数之合

四数之和. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/4sum/description/ 在前面的两个题中&#xff0c;我们已经完成了两数之和和三数之和&#xff0c;到本题四…

React 中的服务器渲染组件

在前后分离架构以前&#xff0c;所有的 Html 业务都是后端渲染&#xff0c;返回前前端显示&#xff0c;后端渲染把前后端逻辑耦合在一起&#xff0c;增大系统的复杂度&#xff0c;不易于扩展。React 中的 Server组件&#xff0c;准确的说是服务器进行渲染&#xff0c;无论是什么…

【Tello无人机】使用Matlab完成控制器的设计—建模

模型辨识篇 在实际的无人机系统中&#xff0c;控制器的设计至关重要&#xff0c;它直接影响无人机的稳定性和响应能力。然而&#xff0c;要设计出高效、可靠的控制器&#xff0c;首先必须准确理解无人机的动态行为&#xff0c;这就需要通过收集输入输出数据来辨识其运动学模型。…

Java面试八股之Mybatis和JPA的区别

Mybatis和JPA的区别 Mybatis 和 JPA&#xff08;Java Persistence API&#xff09;是两种在 Java 应用程序中用于数据持久化的框架&#xff0c;它们各有特点和适用场景。下面是它们之间的一些主要区别&#xff1a; 映射方式&#xff1a; Mybatis 是半自动的 ORM 框架&#xf…