☰
Claude Code提示词案例:用Element Plus el-form搭建联系我们页面表单校验骨架
2026/9/26 10:40:25 网站建设 项目流程

1. 从 Figma 到 el-form:联系我们页面为什么容易写歪

Vue 项目里做「联系我们」页面,看起来只是几个输入框加一个按钮,但真正落地时经常出现三类问题:字段布局和设计稿对不上、校验规则写了却拦不住脏数据、提交前验证没做导致空表单也能点。尤其是用 Element Plus 的 el-form 时,很多人只把rules挂上去就以为完事,结果validate回调没处理、prop和model字段名不一致、选填字段的校验触发时机不对,最后表单看着能填,实际提交时全是坑。

这篇用一个真实场景来拆:Vue 项目里开发「联系我们」页面,表单用 Element Plus 的 el-form 组件实现,覆盖字段布局、rules 校验、提交前验证三块。我会给出可复制的 el-form 配置骨架、校验规则片段,以及本地运行验证步骤。适合正在用 Vue + Element Plus 做后台或官网表单的同学,也适合想用 Claude Code 这类编码助手来驱动组件搭建、但不确定提示词该怎么写的人。

核心检索词先摆出来:Claude Code 提示词、Element Plus、el-form、Vue 表单校验。这几个词贯穿全文,后面每一步都会落到具体代码上。我试过把需求直接丢给编码助手,如果提示词里不写清楚字段、校验、提交行为,它给出来的骨架往往缺ref、缺validate、缺 loading 状态,所以下面会把这些都补齐。

2. TaoToken 前置:把模型对话和 API Key 准备好

在开始写 el-form 之前,先把驱动编码助手的通道准备好。TaoToken 官网是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 入口是 https://taotoken.net/api 。如果你只是想让模型帮你分析需求、生成 el-form 骨架,用模型对话就够了;如果你要把编码助手接进本地工程做长期开发,那就走 Coding Plan。

具体操作分两步。第一步,打开模型对话页面,把「联系我们页面 + el-form + 校验规则」这段需求贴进去,让它先给结构建议,别急着让它改代码。第二步,如果你要接 API,去控制台创建 API Key,然后在接入文档里找到对应语言的调用方式。API Key 页面和接入文档都在官网导航里,路径分别是 console 和 doc。

这里有个细节:很多人一上来就让模型直接写完整index.vue,结果它把样式、校验、提交逻辑全塞在一起,后面很难维护。更稳的做法是先让它输出字段清单和校验规则表,确认无误再让它生成代码。TaoToken 的模型对话适合做这一步,Coding Plan 则适合后面反复迭代组件。

注意:API Key 只用于本地开发调试,不要写进前端代码提交到仓库。前端调用要走自己的后端代理,这一点在接入文档里有说明。

3. 可复制配置:el-form 骨架与 rules 校验片段

下面直接给可复制的骨架。假设文件路径是src/views/contactUs/index.vue,字段有五个:称呼、手机、公司名称、行业、邮箱。其中称呼、手机、公司名称必填,行业和邮箱选填但格式要校验。

先看模板部分的 el-form 配置:

<template> <div class="contact-us"> <div class="form-card"> <h2 class="form-title">联系我们</h2> <p class="form-subtitle">填写以下信息,我们的专家将尽快与您联系</p> <el-form ref="formRef" :model="formData" :rules="formRules" label-position="top" size="large" > <el-form-item label="您的称呼" prop="name"> <el-input v-model="formData.name" placeholder="请输入您的称呼" clearable /> </el-form-item> <el-form-item label="联系手机" prop="phone"> <el-input v-model="formData.phone" placeholder="请输入11位手机号" clearable /> </el-form-item> <el-form-item label="公司名称" prop="company"> <el-input v-model="formData.company" placeholder="请输入公司名称" clearable /> </el-form-item> <el-form-item label="行业" prop="industry"> <el-input v-model="formData.industry" placeholder="请输入所属行业(选填)" clearable /> </el-form-item> <el-form-item label="邮箱" prop="email"> <el-input v-model="formData.email" placeholder="请输入邮箱(选填)" clearable /> </el-form-item> <el-form-item> <el-button type="primary" class="submit-btn" :loading="submitting" @click="handleSubmit" > 提交申请 </el-button> </el-form-item> </el-form> <p class="privacy"> 提交即表示同意 <a href="javascript:void(0)">《隐私声明》</a> </p> </div> </div> </template>

脚本部分,重点是formData、formRules和handleSubmit三块。校验规则用validator自定义,比单纯写pattern更可控:

<script setup lang="ts"> import { reactive, ref } from 'vue' import { ElMessage, type FormInstance, type FormRules } from 'element-plus' const formRef = ref<FormInstance>() const submitting = ref(false) const formData = reactive({ name: '', phone: '', company: '', industry: '', email: '' }) const validatePhone = (_rule: any, value: string, callback: any) => { if (!value) { callback(new Error('请输入联系手机')) } else if (!/^1\d{10}$/.test(value)) { callback(new Error('手机号格式不正确,请输入11位数字')) } else { callback() } } const validateEmail = (_rule: any, value: string, callback: any) => { if (!value) { callback() } else if (!/^[\w.-]+@[\w-]+(\.[\w-]+)+$/.test(value)) { callback(new Error('邮箱格式不正确')) } else { callback() } } const formRules: FormRules = { name: [ { required: true, message: '请输入您的称呼', trigger: 'blur' }, { min: 2, max: 20, message: '称呼长度为2到20个字符', trigger: 'blur' } ], phone: [{ required: true, validator: validatePhone, trigger: 'blur' }], company: [ { required: true, message: '请输入公司名称', trigger: 'blur' }, { min: 2, max: 50, message: '公司名称长度为2到50个字符', trigger: 'blur' } ], email: [{ validator: validateEmail, trigger: 'blur' }] } const handleSubmit = async () => { if (!formRef.value) return try { await formRef.value.validate() } catch { ElMessage.warning('请检查表单填写是否正确') return } submitting.value = true try { console.log('表单数据:', { ...formData }) await new Promise((resolve) => setTimeout(resolve, 800)) ElMessage.success('提交成功!我们的专家将尽快与您联系') formRef.value.resetFields() } finally { submitting.value = false } } </script>

这里有几个关键点值得单独说。第一,prop必须和formData的字段名完全一致,否则validate找不到对应字段,校验会静默失效。第二,选填字段的validator里要先判断空值直接callback(),不然空邮箱也会被拦。第三,handleSubmit里用try/catch包住validate,因为 Element Plus 的validate在失败时是 reject 而不是返回 false,不 catch 会报未捕获的 Promise 错误。

样式部分单独放index.css,背景色用#F0F3F5,主色#3489EB,提交按钮#F19D28,卡片圆角 12px。客户 logo 用background-image引用assets/images/contactUs/logo.png,不要用img标签,这样和设计稿的卡片背景更贴合。

4. 验证请求:本地跑起来看校验是否真的生效

配置写完,必须本地验证。启动项目后打开联系我们页面,按下面几步走一遍,确认校验和提交都正常。

第一步,什么都不填直接点提交。预期结果是称呼、手机、公司名称三个字段下方出现红色错误提示,同时弹出「请检查表单填写是否正确」的 warning。如果没反应,先检查formRef有没有绑定,以及prop是否写对。

第二步,手机号填12345,其他必填项填正常值,点提交。预期是手机字段提示「手机号格式不正确」。这一步验证自定义validator是否被触发。

第三步,邮箱留空,其他填正常,点提交。预期是校验通过,控制台打印表单数据,按钮进入 loading,约 800ms 后弹出成功提示,表单重置。这一步验证选填字段的空值分支。

第四步,邮箱填abc,点提交。预期是邮箱字段提示格式错误,提交被拦截。

如果你要把请求真正发出去,可以在handleSubmit里把console.log换成fetch或axios调用,但注意后端接口地址不要硬编码在前端,走环境变量。验证阶段先用console.log确认数据收集正确,再接接口。

提示:Element Plus 的validate是异步的,如果你在handleSubmit里直接写if (formRef.value.validate()),判断永远为真,因为返回的是 Promise。必须用await或.then。

5. 本篇常见错排查

实际调这个表单时,下面几个错出现频率最高,逐个说清楚。

第一个,校验规则不生效。九成原因是el-form-item的prop和formData字段名不一致,或者el-form的:model没绑对。检查方法:在handleSubmit里打印formRef.value.fields,看每个字段的prop是否和预期一致。

第二个,选填字段空值报错。这是因为validator里没做空值判断。正确写法是先if (!value) { callback(); return },再走格式校验。必填字段则相反,先判断空值报 required 错误。

第三个,提交时按钮重复点击。原因是没加loading状态。submitting为 true 时按钮自动禁用,finally里再置回 false,保证异常时也能恢复。

第四个,resetFields没清空。resetFields重置的是prop绑定的字段,如果某个字段没写prop,它不会被重置。另外resetFields会重置到初始值,如果初始值是空字符串,重置后就是空。

第五个,手机号正则写成^1[3-9]\d{9}$后,某些号段被误拦。如果业务不要求严格号段,用^1\d{10}$更宽松,避免误伤。这个取舍看你的实际需求。

第六个,样式错位。常见于label-position和size没统一,或者卡片宽度用了固定 px 没做响应式。建议桌面端固定 1440px 容器,平板和移动端用媒体查询改上下布局。

6. 语义一致 CTA:按你的下一步选入口

如果你现在卡在校验不生效、提交拦截失败这类排障问题上,直接去 API Keys 页面创建 Key,再对照接入文档把本地调试通道打通,路径是 https://taotoken.net/api-keys 和 https://taotoken.net/doc 。如果你只是想先让模型帮你把字段和规则表理清楚,用模型对话最快,地址是 https://taotoken.net/chat 。如果你打算把编码助手长期接进这个 Vue 工程,反复迭代 el-form 组件和后续页面,那就走 Coding Plan,地址是 https://taotoken.net/coding-plan 。

最后补一个实用技巧:把这份 el-form 骨架里的formRules单独抽成rules.ts,字段多的时候维护起来会轻松很多。提交逻辑里的console.log换成接口调用时,记得把submitting的finally保留,不然接口报错按钮会一直转。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询