源码

https://github.com/naturefwvue/nf-vue3-ant

特点

  • 只需要更改meta,既可以切换表单
  • 可以统一修改样式,统一升级,以最小的代价,应对UI的升级、切换,应对框架(比如vue)的升级
  • 需要的代码非常少,甚至可以认为是Low Code
  • 可以自动创建model,也可以直接读取model

长啥样?

还是antdv那个样子,只是没有直接使用Form组件,而是用了几个class。(验证功能还在研究中)

表单一 公司信息

表单二 员工信息,简化版,只是为了演示表单的切换。以后会出复杂版

不用改代码,也不用复制粘贴,只需要换meta即可

代码

不写代码,是如何实现表单切换地呢,其实也很简单。

首先要使用基于antdv封装的表单元素组件,然后for循环出来tr,再把组件加到td里面就可以了,操控感十足。

因为都是for出来的,所以表单再大,代码也还是那几行,不会增加。

<template>
<div class="home">
<h1>表单演示</h1>
<div style="background-color:#dddddd;height:600px;width:100px;float:left;">
<a href="#" @click="myClick('companyForm')">公司信息</a> <br>
<a href="#" @click="myClick('personForm')">员工信息</a>
</div>
<div style="background-color:#eee;height:600px;width:400px;float:left;">
<div class="ant-table ant-table-body ant-table-default ant-table-bordered" >
<table>
<colgroup><col style="width: 30%; min-width: 30%;"><col>
</colgroup>
<tbody class="ant-table-tbody">
<tr v-for="(item,index) in metaInfo" :key="index">
<td align="right" style="padding:10px 10px;height:20px">
{{item.title}}:
</td>
<td align="left" style="padding:10px 10px;height:20px">
<nfInput v-model="modelValue[item.colName]" :meta="item" />
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div align="left" style="background-color:#EEEEFF;height:600px;width:300px;float:left;">
{<br>
<span v-for="(item, key, index) in modelValue" :key="index">
<span v-if="typeof item === 'number' && !isNaN(item)">&nbsp;&nbsp;"{{key}}": {{item}}, <br></span>
<span v-if="typeof item === 'string'">&nbsp;&nbsp;"{{key}}": "{{item}}", <br></span>
<span v-if="typeof(item) ==='boolean'">&nbsp;&nbsp;"{{key}}": {{item}}, <br></span>
<span v-if="typeof(item) ==='object'">
&nbsp;&nbsp;"{{key}}": [<br>
<span v-for="(opt, index) in item" :key="'opt'+index">&nbsp;&nbsp;&nbsp;&nbsp;{{opt}}, <br></span>
&nbsp;&nbsp;]
</span>
</span>
}
</div>
<div style="clear:both">
{{modelValue}}
</div>
</div>
</template>
<script>
import { ref } from 'vue'
import nfInput from '@/components/nf-form/nf-form-item.vue' export default {
name: 'FormDemo',
components: {
// nfHelp,
nfInput
},
setup () {
const json = require('./FormDemo.json') // 加载meta信息,json格式
const modelValue = ref({}) // 放数据的model
const metaInfo = ref(json.companyForm) // 表单需要的meta信息
const myClick = (key) => {
// 更换表单的meta
metaInfo.value = json[key]
// 创建model
modelValue.value = {}
for (var k in metaInfo.value) {
var item = metaInfo.value[k]
modelValue.value[item.colName] = ''
}
}
myClick('companyForm') // 设置默认表单
return {
modelValue,
metaInfo,
myClick
}
}
}
</script>

看,代码是不是非常少。两个表单是这些代码,一百个表单也还是这些代码。

增加表单,只需要增加meta即可,再也不用写代码了

后续

查询控件正在完善中

特殊布局的表单组件也在构思中

......

最新文章

  1. 两种常用的C语言排序算法
  2. [No000023]为何没有更多人从事程序员的工作?程序员常有,优秀程序员不常有!
  3. 攻城狮在路上(叁)Linux(二十三)--- linux磁盘参数修改(设备代码、设备名)
  4. Calling / Running a report in Oracle forms 10g / 11g
  5. cordova /phonegap 自定义插件
  6. OK - A byte of python - 读书笔记
  7. system.exit(0) vs system.exit(1)
  8. iOS中的字符串NSString
  9. [您有新的未分配科技点]无旋treap:从好奇到入门(例题:bzoj3224 普通平衡树)
  10. MVC、MVP、MVVM 模式对比
  11. web 自定义标签
  12. DNS区域传送漏洞实验以及二级域名爆破
  13. Web登录其实没那么简单
  14. bzoj 4816
  15. (素材源代码)猫猫学IOS(四)UI之半小时搞定Tom猫
  16. 为何串口dma发送数据可能不完整
  17. code=exited,status=1/failure;failed to start LSB:Bring up/down networking
  18. C++ 派生类成员的访问属性
  19. BZOJ4553: [Tjoi2016&amp;Heoi2016]序列 树套树优化DP
  20. mysql数据库从删库到跑路之mysql基础

热门文章

  1. java.lang.NoSuchFieldError: No static field XXX of type I in class Lcom/XX/R$id; or its superclasses
  2. 【译】New experimental Razor editor for Visual Studio
  3. 使用 codeblocks 编写C++ udp组播程序遇到的问题
  4. Kubernetes 多集群在开源项目 KubeSphere 的应用
  5. 逆流而上,7月阿里最新出炉的三面面经,年薪50W,我行您也行
  6. RabbitMQ高级之如何保证消息可靠性?
  7. Docker 镜像的备份恢复迁移
  8. win10安装JDK cmd中可以运行java,但不能用javac,解决方案
  9. 每日JS逆向练习之斗鱼登录密码加密,今天你练了吗?
  10. Python 爬虫+tkinter界面 实现历史天气查询