在 Vben5 的 Antd 模式下,完全可以将表单从「JS 配置化」改写成「模板可视化」形式,把表单项直接写在 Vue 模板中,更直观且符合传统 Vue 开发习惯。以下是完整的改写示例,保留原功能但结构更清晰:

改写思路

  1. 放弃 JS 中的 schema 配置:将每个表单项(如 Input、Select、DatePicker)直接写在模板的 <Form> 标签内。
  2. FormItem 包裹表单项:通过 FormItemname(对应原 fieldName)、labelrules 等属性绑定字段信息和校验规则。
  3. 保留 useVbenForm 核心能力:仍用该钩子获取表单实例,实现提交、校验等功能,确保和原逻辑一致。

完整改写代码

<template><!-- 表单容器:绑定表单实例,配置布局和提交逻辑 --><Form:form="formInstance":layout="formLayout":scroll-to-first-error="true"@submit="onSubmit"class="grid-cols-1"><!-- 1. 字段1:Input(必填) --><FormItemname="field1"label="字段1":rules="[{ required: true, message: '请输入字段1' }]"><Input placeholder="请输入" class="w-full" /></FormItem><!-- 2. 字段2:Input(必填 + 默认值) --><FormItemname="field2"label="默认值(必填)":rules="[{ required: true, message: '请输入字段2' }]"initial-value="默认值" <!-- 对应原 defaultValue -->><Input placeholder="请输入" class="w-full" /></FormItem><!-- 3. 字段3:Input(非必填 + 默认值) --><FormItemname="field3"label="默认值(非必填)"initial-value="默认值"><Input placeholder="请输入" class="w-full" /></FormItem><!-- 4. 字段31:Input(自定义校验:最少1个字符) --><FormItemname="field31"label="自定义信息":rules="[{ required: true, min: 1, message: '最少输入1个字符' }]"><Input placeholder="请输入" class="w-full" /></FormItem><!-- 5. 字段4:邮箱Input(邮箱格式校验) --><FormItemname="field4"label="邮箱":rules="[{ required: true, type: 'email', message: '请输入正确的邮箱' }]"><Input placeholder="请输入" class="w-full" /></FormItem><!-- 6. 数字输入:InputNumber(必填) --><FormItemname="number"label="数字":rules="[{ required: true, message: '请输入数字' }]"><InputNumber placeholder="请输入" class="w-full" /></FormItem><!-- 7. 下拉选择:Select(必填) --><FormItemname="options"label="下拉选":rules="[{ required: true, message: '请选择选项' }]"><Selectallow-clearfilter-optionplaceholder="请选择"show-searchclass="w-full"><Select.Option value="1">选项1</Select.Option><Select.Option value="2">选项2</Select.Option></Select></FormItem><!-- 8. 单选组:RadioGroup(必填) --><FormItemname="radioGroup"label="单选组":rules="[{ required: true, message: '请选择一项' }]"><RadioGroup class="w-full"><Radio value="1">选项1</Radio><Radio value="2">选项2</Radio></RadioGroup></FormItem><!-- 9. 多选组:CheckboxGroup(必填) --><FormItemname="checkboxGroup"label="多选组":rules="[{ required: true, message: '请至少选择一项' }]"><CheckboxGroup name="cname" class="w-full"><Checkbox value="1">选项1</Checkbox><Checkbox value="2">选项2</Checkbox></CheckboxGroup></FormItem><!-- 10. 单独复选框:Checkbox(必填:同意协议) --><FormItemname="checkbox"label="" <!-- 空label,避免多余占位 -->:rules="[{ required: true, message: '请勾选同意协议' }]"><Checkbox class="w-full">我已阅读并同意</Checkbox></FormItem><!-- 11. 日期选择:DatePicker(必填) --><FormItemname="datePicker"label="日期选择框":rules="[{ required: true, message: '请选择日期' }]"><DatePicker class="w-full" /></FormItem><!-- 12. 区间选择:RangePicker(必填) --><FormItemname="rangePicker"label="区间选择框":rules="[{ required: true, message: '请选择区间' }]"><RangePicker class="w-full" /></FormItem><!-- 13. 密码输入:InputPassword(必填) --><FormItemname="password"label="密码":rules="[{ required: true, message: '请输入密码' }]"><InputPassword placeholder="请输入" class="w-full" /></FormItem><!-- 提交按钮 --><FormItem><Button type="primary" html-type="submit">提交表单</Button></FormItem></Form>
</template><script lang="ts" setup>
import { ref } from 'vue';
import { message } from 'ant-design-vue';
// 导入 Vben 表单核心组件和钩子
import { useVbenForm } from '#/adapter/form';
// 导入 Antd 基础组件(Vben 适配版)
import { Form, FormItem, Input, InputNumber, Select, RadioGroup, Radio, CheckboxGroup, Checkbox, DatePicker, RangePicker, InputPassword, Button 
} from '#/adapter/component';// 1. 初始化表单:获取表单实例(替代原 schema 配置)
const { form: formInstance } = useVbenForm();// 2. 表单布局(对应原 layout: 'horizontal')
const formLayout = ref('horizontal');// 3. 提交函数(和原逻辑完全一致)
const onSubmit = (values: Record<string, any>) => {message.success({content: `form values: ${JSON.stringify(values)}`,});
};
</script>

关键改动说明

  1. 模板结构更直观
    每个表单项都以「FormItem 包裹组件」的形式写在模板中,字段名(name)、标签(label)、校验规则(rules)一目了然,无需在 JS 中找 schema 配置。

  2. 保留原功能不变

    • 校验规则:通过 FormItemrules 属性直接绑定(如邮箱校验、必填校验),逻辑和原 schema 一致。
    • 默认值:用 FormIteminitial-value 替代原 defaultValue
    • 布局和提交:layout 用变量控制,提交函数 onSubmit 完全复用。
  3. 组件引入更清晰
    直接从 #/adapter/antd 导入需要的组件(如 SelectDatePicker),和模板中的使用一一对应,降低理解成本。

优势

  • 可视化强:表单项的层级、顺序、组件类型在模板中直接可见,便于快速修改(比如调整表单项顺序,只需拖动模板中的 FormItem)。
  • 调试方便:若某个表单项有问题,直接定位到模板中的对应位置,无需在 JS 的 schema 数组中查找。
  • 学习成本低:符合 Vue 开发者“模板写结构、JS 写逻辑”的习惯,新接手的同事更容易上手。

如果需要添加更复杂的逻辑(如动态表单项、联动校验),也只需在模板中通过 v-ifv-for 或组件事件实现,比在 JS 配置中写 renderwatch 更直观。

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

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

相关文章

【更新完毕】2025数学建模国赛E题思路代码文章高教社杯全国大学生数学建模-AI 辅助智能体测

全部更新完毕 包含完整的文章全部问题的代码、结果、图表 完整内容请看文末最后的推广群基于AI姿态识别的立定跳远运动分析与个性化训练优化研究 随着《国家学生体质健康标准》的颁布实施&#xff0c;通过AI技术辅助体育运动分析已成为提升学生体质健康水平的重要手段。本研究针…

小白友好,无需基础也能快速上手的AI部署工具,一键部署

AI大模型相信已经成为许多人工作和生活中的得力助手。然而&#xff0c;对于大多数普通用户而言&#xff0c;将强大的AI模型部署到自己的电脑上&#xff0c;似乎是一项遥不可及的技术活&#xff0c;往往涉及到复杂的命令行操作、环境配置和代码调试。那有没有一种工具&#xff0…

《Python复刻植物大战僵尸开源项目实战:Pygame框架+JSON关卡设计,解锁塔防游戏开发新技能》​

&#x1f4cc; 大家好&#xff0c;我是智界工具库&#xff0c;每天分享好用实用且智能的开源项目&#xff0c;以及在JAVA语言开发中遇到的问题&#xff0c;如果本篇文章对您有所帮助&#xff0c;请帮我点个小赞小收藏小关注吧&#xff0c;谢谢喲&#xff01;&#x1f618; 博主…

CCS——将工程中的 include / lib 修改为相对路径,方便工程分享

在使用 Code Composer Studio (CCS) 开发 DSP 或 ARM 工程时&#xff0c;经常会遇到这样一个问题&#xff1a;在 A 电脑上能正常编译的工程&#xff0c;拷贝到 B 电脑上后就报错。错误的原因通常是 工程使用了绝对路径&#xff0c;而不同电脑上的文件路径不一致&#xff0c;比如…

java解析网络大端、小端解析方法

文章目录一、背景介绍二、说明核心概念&#xff1a;什么是字节序&#xff08;Endianness&#xff09;&#xff1f;大端字节序 (Big-Endian)小端字节序 (Little-Endian)三、不同解析方式介绍一、背景介绍 中转台通过SNMP协议V1\V2上报中转台IP&#xff0c;然后程序解析入库&…

【数据分享】土地利用矢量shp数据分享-甘肃

今天要说明数据就是土地利用shp数据分享-甘肃。数据介绍▲ 1km土地利用数据&#xff08;2020年&#xff09;▲ 土地利用数据&#xff08;2025年&#xff09;▲土地利用数据&#xff08;2018年&#xff09;▲ 30m土地利用数据&#xff08;2023年&#xff09;▲ 公路铁路道路河流…

java log相关:Log4J、Log4J2、LogBack,SLF4J

目录测试maven依赖logback.xml测试主程序测试输出arthas查看logger总结使用参考文档测试 maven依赖 <dependencies><!-- SLF4J API --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>…

AES加密算法详细加密步骤代码实现--身份证号码加解密系统

系统概述 本系统是一个基于AES-256-CBC加密算法的身份证号码加解密工具&#xff08;手搓底层步骤&#xff09;&#xff0c;针对的是上一篇文章对的AES加密原理的讲解&#xff0c;虽说是演示&#xff0c;但功能完善&#xff0c;可单独提供接口给项目调用&#xff0c;采用Python…

LangChain: Models, Prompts 模型和提示词

获取openapikey #!pip install python-dotenv #!pip install openai import osimport openai ​ from dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv()) # read local .env file openai.api_key os.environ[OPENAI_API_KEY] # account for deprecat…

ACMESSL自动续签教程

目录 1、选择申请证书 ​编辑2、选择CA机构 ​编辑3、选择自动验签 ​编辑4、证书续签设置 5、自动发布设置 本教程实现ACMESSL自动续签&#xff0c;请按照此教程实现。 1、选择申请证书 点击快捷入口或者订单或证书列表中的【创建证书】按钮&#xff1a; 2、选择CA机构 …

基于飞算JavaAI的在线图书借阅平台设计实现

项目概述与需求分析 1.1 项目背景与意义 随着数字化时代的快速发展&#xff0c;传统图书馆管理模式已无法满足现代读者的需求。在线图书借阅平台通过互联网技术将图书资源数字化&#xff0c;为读者提供便捷的检索、借阅和管理服务&#xff0c;有效解决了传统图书馆开放时间有…

通过API接口管理企业微信通讯录案例

1.开始前需要登录企业微信管理员后台&#xff0c;开启通讯录同步&#xff0c;同时添加企业可信IP地址&#xff0c;记录下Secret信息和企业ID&#xff0c;后面的程序会用到这两个参数。2.下面是用python写的创建企业微信账号的具体案例。#!/usr/bin/env python3 # -*- coding: u…

硬件开发_基于物联网的自动售卖机系统

一.系统概述 物联网自动售卖机系统的主要功能如下&#xff1a; 核心控制器&#xff1a;采用STM32单片机作为系统核心&#xff0c;负责整体数据处理和各设备的统一控制。商品选择&#xff1a;支持语音识别及按键方式&#xff0c;方便用户在售卖机内选择商品。语音播报&#xff1…

AGENTS.md: AI编码代理的开放标准

每个项目都有一个 README.md 文件供人类阅读。但随着 AI 编码代理和 AI 辅助开发的兴起,我们需要一个新标准:AGENTS.md。这个 Markdown 文件定义了代理如何构建、测试和协作。 这就是 AGENTS.md 的作用。 它是一个简单的 Markdown 文件,告诉 AI 助手如何在你的项目中操作:…

如何解决 OutOfMemoryError 内存溢出 —— 原因、定位与解决方案

网罗开发&#xff08;小红书、快手、视频号同名&#xff09;大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…

阿里云服务器配置ssl-docker nginx

# 切换到您当前的目录 cd /AAAAAAAAAAAA# 创建存放nginx配置、证书和日志的目录结构 mkdir -p nginx-config/conf.d nginx-ssl nginx-logs# 为挂载做准备&#xff0c;您可能需要将当前dist目录内容移动到新的html目录 # 首先查看当前dist目录的内容 ls -la dist/# 如果html目录…

2025全球生成式引擎优化(GEO)服务商发展趋势与企业赋能白皮书

引言&#xff1a;人工智能技术的迅猛发展&#xff0c;特别是在生成式AI领域的突破&#xff0c;正以前所未有的力量重塑商业世界的竞争格局。对于寻求提升在线可见性、优化品牌互动及实现可持续增长的企业而言&#xff0c;生成式引擎优化&#xff08;GEO&#xff09;已然成为数字…

海康威视工业相机SDK开发实战:使用C/C++实现软件触发图像采集(含详细中文注释代码)

一、前言 在机器视觉、自动化检测、智能制造等领域&#xff0c;工业相机是获取图像数据的核心设备。海康威视作为国内领先的机器视觉厂商&#xff0c;其工业相机产品线丰富&#xff0c;广泛应用于各类工业场景。 本文将带你从零开始&#xff0c;使用 海康MVS SDK&#xff08;Ma…

Modbus RTU 协议介绍

Modbus RTU 协议介绍 异步串行传输方式&#xff0c;采用二进制格式&#xff0c;适用于串行通讯&#xff08;如RS-485&#xff09;&#xff0c;效率高&#xff0c;是工业现场的主流选择。 主站是Master&#xff0c;从站是Slave。 Modbus RTU 协议格式 帧结构 地址码&#xf…

TCP/IP函数——sendmsg

sendmsg() 是 POSIX 标准中一个高级套接字发送函数,属于系统调用(由操作系统内核实现),定义在 <sys/socket.h> 头文件中。它的核心特点是支持复杂消息结构,不仅能发送常规数据,还能附加控制信息(如辅助数据、IP 选项等),适用于 TCP、UDP 等多种协议,功能比 sen…