突發奇想,還未實踐,在Vben5的Antd模式下,將表單從「JS 配置化」改寫成「模板可視化」形式(豆包版)

在 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…