vue3+ts动态表单渲染,antd的useForm改造

news2025/1/10 20:35:31
    let fieldList: any = getFormFields(
      fieldInfo.coreNavigationList[0].list[0].list,
      fieldInfo.positionCodeRespVO,
      isCanBeUpdateProcess.value,
      isDetail.value === '1'
    );

fieldInfo数据格式:

{
    "name": "默认模板",
    "status": "ENABLE",
    "remark": "默认模板描述",
    "coreNavigationList": [
        {
            "id": "113",
            "menuId": "10000001",
            "coreName": "职位基础字段",
            "isBuiltIn": true,
            "status": "ENABLE",
            "list": [
                {
                    "createTime": "2023-05-16 11:22:50",
                    "updateTime": "2023-11-06 09:09:41",
                    "id": "216",
                    "menuId": "10000001",
                    "coreNavigationId": "113",
                    "coreClass": "com.lirenkeji.prt.business.ats.dal.entity.position.AtsPosition",
                    "coreName": "职位基础字段",
                    "coreKey": "ats_position",
                    "status": "ENABLE",
                    "list": [
                        {
                            "createTime": "2023-05-16 11:22:50",
                            "updateTime": "2024-01-16 10:19:04",
                            "id": "29005",
                            "coreNavigationGroupId": "216",
                            "coreKey": "name",
                            "coreName": "职位名称",
                            "coreField": "职位名称",
                            "tips": "1234",
                            "htmlType": "INPUT",
                            "isBuiltIn": true,
                            "isRequired": true,
                            "status": "ENABLE",
                            "sort": 0,
                            "convertNameField": "name",
                            "convertNameFieldStructure": null,
                            "tableName": null,
                            "coreCondition": {
                                "maxSize": 100
                            },
                            "roleStatus": null,
                            "coreTable": null,
                            "tableKey": null,
                            "description": null,
                            "isVisible": false,
                            "isEncrypted": false,
                            "isAppVisible": false,
                            "isAppRead": false,
                            "isAppRequired": true,
                            "coreInductionNavigationId": null,
                            "coreNavigationGroupKey": null,
                            "coreNavigationGroupName": null,
                            "menuId": null,
                            "convertKeyField": null,
                            "doCellValues": null,
                            "isCustom": null,
                            "isMultiple": null,
                            "showNameForKey": null
                        },
                        {
                            "createTime": "2023-08-30 14:08:37",
                            "updateTime": "2024-01-16 10:19:04",
                            "id": "29008",
                            "coreNavigationGroupId": "216",
                            "coreKey": "type",
                            "coreName": "职能类型",
                            "coreField": "职能类型",
                            "tips": "1234",
                            "htmlType": "SELECT",
                            "isBuiltIn": true,
                            "isRequired": true,
                            "status": "ENABLE",
                            "sort": 1,
                            "convertNameField": "",
                            "convertNameFieldStructure": null,
                            "tableName": null,
                            "coreCondition": {
                                "data": 17,
                                "type": "DATA_SOURCE"
                            },
                            "roleStatus": null,
                            "coreTable": null,
                            "tableKey": null,
                            "description": null,
                            "isVisible": false,
                            "isEncrypted": false,
                            "isAppVisible": false,
                            "isAppRead": false,
                            "isAppRequired": true,
                            "coreInductionNavigationId": null,
                            "coreNavigationGroupKey": null,
                            "coreNavigationGroupName": null,
                            "menuId": null,
                            "convertKeyField": null,
                            "doCellValues": null,
                            "isCustom": null,
                            "isMultiple": null,
                            "showNameForKey": null
                        },
                        {
                            "createTime": "2023-08-30 14:08:37",
                            "updateTime": "2024-01-16 10:19:04",
                            "id": "29009",
                            "coreNavigationGroupId": "216",
                            "coreKey": "dept_id",
                            "coreName": "所属部门",
                            "coreField": "所属部门",
                            "tips": "1234",
                            "htmlType": "SELECT",
                            "isBuiltIn": true,
                            "isRequired": true,
                            "searchAuthJson": {
                                "isShowSearch": null,
                                "isShowField": true,
                                "isQuickSearch": false,
                                "isList": null
                            },
                            "sublistTableJson": {
                                "tableAlias": "p",
                                "tableFieldAlias": null,
                                "quickSearchFieldAlias": null
                            },
                            "status": "ENABLE",
                            "sort": 3,
                            "convertNameField": "deptName",
                            "convertNameFieldStructure": null,
                            "tableName": null,
                            "coreCondition": {
                                "type": "ORGANIZATION"
                            },
                            "roleStatus": null,
                            "coreTable": null,
                            "tableKey": null,
                            "description": null,
                            "isVisible": false,
                            "isEncrypted": false,
                            "isAppVisible": false,
                            "isAppRead": false,
                            "isAppRequired": true,
                            "coreInductionNavigationId": null,
                            "coreNavigationGroupKey": null,
                            "coreNavigationGroupName": null,
                            "menuId": null,
                            "convertKeyField": null,
                            "doCellValues": null,
                            "isCustom": null,
                            "isMultiple": null,
                            "showNameForKey": null
                        },
                    ]
                }
            ]
        }
    ],
    "templateScopeList": null
}

getFormFields方法,处理大量数据,生成动态表单

render函数的渲染

arr.push({
    field: `${field.coreKey == 'dept_id' ? 'deptId' : field.coreKey}`,
    component: typeSwicth(field.htmlType),
    label: field.coreName,
    ifShow: field.isShow,
    required: field.isRequired,
    colProps: {
      span: 12,
    },
    // slot: 'customSlot',
    render({ model, field: fieldValue }) {
      return h(AnewOrgSelect, {
        value: model[fieldValue],
        disabled: disabled,
        'onUpdate:value': (e) => {
          model[fieldValue] = e;
        },
        maxNumber: field.htmlType === 'CHECKBOX' ? 100 : 1,
        onChange: async (e) => {
          // 处理接口需要的字段数据格式
          const { values } = e;

          //根据所属部门回填编码
          if (values.length !== 0) {
            const res = await getCodeRules(values[0]);
            model['code'] = res?.code;
            model['ruleId'] = res?.ruleId;
          } else {
            model['code'] = '';
            model['ruleId'] = '';
          }

          //console.log('编码', res);

          if (field.htmlType === 'CHECKBOX') {
            model[field.coreKey] = values;
          } else {
            model[field.coreKey] = values?.join(',');
          }
        },
      });
    },
  });

得到的数据

render属性

render?: (renderCallbackParams: RenderCallbackParams) => VNode | VNode[] | string;

传参合返回值定义如上

return h函数,h函数是vue里面

文章中的h函数使用

    return h(AnewOrgSelect, {
                    value: model[fieldValue],
                    disabled: disabled,
                    'onUpdate:value': (e) => {
                      model[fieldValue] = e;
                    },
                    maxNumber: field.htmlType === 'CHECKBOX' ? 100 : 1,
                    onChange: async (e) => {
                      // 处理接口需要的字段数据格式
                      const { values } = e;

                      //根据所属部门回填编码
                      if (values.length !== 0) {
                        const res = await getCodeRules(values[0]);
                        model['code'] = res?.code;
                        model['ruleId'] = res?.ruleId;
                      } else {
                        model['code'] = '';
                        model['ruleId'] = '';
                      }

                      //console.log('编码', res);

                      if (field.htmlType === 'CHECKBOX') {
                        model[field.coreKey] = values;
                      } else {
                        model[field.coreKey] = values?.join(',');
                      }
                    },
                  });

友情连接

vue中的h函数_vue h函数-CSDN博客

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

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

相关文章

微信小程序-webview分享

项目背景 最近有个讨论区项目需要补充分享功能,希望可以支持在微信小程序进行分享,讨论区是基于react的h5项目,在小程序中是使用we-view进行承载的 可行性 目标是在打开web-view的页面进行分享,那就需要涉及h5和小程序的通讯问…

K8S CNI

OCI概念 OCI,Open Container Initiative,开放容器标准,是一个轻量级,开放的治理结构(项目),在 Linux 基金会的支持下成立,致力于围绕容器格式和运行时创建开放的行业标准。 OCI 项目…

虚拟机开机字体变大,进入系统后字体模糊

问题 虚拟机开机字体变大,进入系统后字体模糊。 原因 虚拟机配置问题。 解决办法 修改配置为如下:

【兆易创新GD32H759I-EVAL开发板】图像处理加速器(IPA)的应用

GD32H7系列的IPA(Image Pixel Accelerator)是一个高效的图像处理硬件加速器,专门设计用于加速图像处理操作,如像素格式转换、图像旋转、缩放等。它的优势在于能够利用硬件加速来实现这些操作,相比于软件实现&#xff0…

Ubuntu软件开发环境搭建

Ubuntu软件开发环境搭建 安装VMware Tools网络桥接更新软件源常用功能配置时间同步共享文件夹双向复制粘贴终端初始大小和字体设置安装必要的工具 常用指令 安装VMware Tools 点击虚拟机->安装VMware Tools… 打开终端,cd到/media/用户名/VMware Tools/下&#…

JS 事件捕获、事件冒泡、事件委托

js事件机制在开发中可以说时刻使用,例如dom绑定事件、监听其自身事件等。js事件机制有事件捕获、事件冒泡俩种机制,我们分别说下这俩种机制的使用场景。 一、概念 事件捕获顺序如下: window > document > body > div 事件冒泡顺序…

【一】【单片机】有关LED的实验

点亮一个LED灯 根据LED模块原理图,我们可以知道,通过控制P20、P21...P27这八个位置的高低电平,可以实现D1~D8八个LED灯的亮灭。VCC接的是高电平,如果P20接的是低电平,那么D1就可以亮。如果P20接的是高电平,…

14.矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2: 输入&…

Hello,Spider!入门第一个爬虫程序

在各大编程语言中,初学者要学会编写的第一个简单程序一般就是“Hello, World!”,即通过程序来在屏幕上输出一行“Hello, World!”这样的文字,在Python中,只需一行代码就可以做到。我们把这第一个爬虫就称之为“HelloSpider”&…

3.2_3 页面置换算法

3.2_3 页面置换算法 请求分页存储管理与基本分页存储管理的主要区别: 在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。 若内存空间不够,由操作系统负责将内存中…

Laravel Class ‘Facade\Ignition\IgnitionServiceProvider‘ not found 解决

Laravel Class Facade\Ignition\IgnitionServiceProvider not found 问题解决 问题 在使用laravel 更新本地依赖环境时,出现报错,如下: 解决 这时候需要更新本地的composer,然后在更新本地依赖环境。 命令如下: co…

Day43-2-企业级实时复制intofy介绍及实践

Day43-2-企业级实时复制intofy介绍及实践 1. 企业级备份方案介绍1.1 利用定时方式,实现周期备份重要数据信息。1.2 实时数据备份方案1.3 实时复制环境准备1.4 实时复制软件介绍1.5 实时复制inotify机制介绍1.6 项目部署实施1.6.1 部署环境准备1.6.2 检查Linux系统支…

Spring Cloud Gateway针对指定接口做响应超时时间限制

背景:我做的这个服务中存在要对大数据量做自定义统计的接口和大文件上传接口,接口响应用时会超过gateWay配置的全局用时,如果调整网关全局的超时时间和服务的全局超时时间是不合理的,故此想能否单独针对某个接口进行细粒度超时限制…

Spring boot java: 无效的目标发行版: 18

idea 搭建spring boot 报错java: 无效的目标发行版: 18 本人jdk 1.8 解决方案如下:

力扣L12--- 125验证回文串(java版)-2024年3月15日

1.题目 2.知识点 注1:在 Java 中,toString() 方法用于将对象转换为字符串表示形式。对于数组对象,toString() 方法将返回数组的字符串表示形式,其中包含数组中每个元素的字符串表示形式,以逗号分隔,并且包…

idea+vim+pycharm的块选择快捷键

平时开发的时候,有的时候我们想用矩形框住代码,或者想在某列上插入相同字符 例如下图所示,我想在22-24行的前面插入0000 1. Idea的快捷键:option 鼠标 2. Pycharm的快捷键:shift option 鼠标 2. Vim 块选择 v/V/c…

智能视频生产平台解决方案介绍

视频内容已经成为企业宣传、营销、培训等多维度沟通的重要媒介,美摄科技凭借其在智能视频生产领域的深厚积累和创新能力,推出了面向企业的智能视频生产平台解决方案,为企业提供多端多场景的智能化视频生产工具,助力企业轻松打造高…

单例设计模式,各种排序复习

1.单例设计模式 资料来源 1.1单例模式是什么? 单例模式,属于创建类型的一种常用的软件设计模式。 通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程…

git stash clear/drop 后如何恢复

git stash clear/drop 后代码如何恢复 事故经过 切换分支前有修改未提交的代码,使用 git stash 存储了当前的代码切换分支再返回自己开发的分支本来要进行 git stash pop 操作,然后 git stash list 发现有好几个 stash记录于是想清除没用的 stash 记录…

浅易理解:非极大抑制NMS

什么是非极大抑制NMS 非极大值抑制(Non-Maximum Suppression,简称NMS)是一种在计算机视觉和图像处理领域中广泛使用的后处理技术,特别是在目标检测任务中。它的主要目的是解决目标检测过程中出现的重复检测问题,即对于…