表单代码示例

html 复制代码
<template>
  <el-form ref="form" :model="formData" :rules="formRules" label-width="100px">
    <el-form-item label="姓名" prop="name">
      <el-input v-model="formData.name"></el-input>
    </el-form-item>
    <el-form-item label="手机号" prop="phone">
      <el-input v-model="formData.phone"></el-input>
    </el-form-item>
    <el-form-item label="年龄" prop="age">
      <el-input v-model.number="formData.age"></el-input>
    </el-form-item>
    <el-form-item label="学校" prop="school">
      <el-input v-model="formData.school"></el-input>
    </el-form-item>
    <el-form-item label="性别" prop="gender">
      <el-radio-group v-model="formData.gender">
        <el-radio label="male">男</el-radio>
        <el-radio label="female">女</el-radio>
      </el-radio-group>
    </el-form-item>
    <el-form-item label="地点" prop="location">
      <el-radio-group v-model="locationType">
        <el-radio label="province">选择省市区</el-radio>
        <el-radio label="custom">手填地点</el-radio>
      </el-radio-group>
      <el-collapse v-model="collapseVisible" v-if="locationType === 'province'">
        <!-- 省市区组件,这里使用Element Plus的级联选择器 -->
        <el-cascader
          v-model="formData.location"
          :options="options"
          placeholder="请选择省市区"
          clearable
          :props="{ value: 'code', label: 'name', children: 'children' }"
        ></el-cascader>
      </el-collapse>
      <el-input v-model="formData.location" v-else placeholder="请输入手填地点"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm">提交</el-button>
    </el-form-item>
  </el-form>
</template>

<script>
import { ref } from 'vue';
import axios from 'axios';
import { ElForm, ElFormItem, ElInput, ElRadioGroup, ElRadio, ElButton, ElCollapse, ElCascader } from 'element-plus';

export default {
  components: {
    ElForm,
    ElFormItem,
    ElInput,
    ElRadioGroup,
    ElRadio,
    ElButton,
    ElCollapse,
    ElCascader,
  },
  data() {
    return {
      formData: {
        name: '',
        phone: '',
        age: '',
        school: '',
        gender: '',
        location: '',
      },
      formRules: {
        name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
        phone: [
          { required: true, message: '请输入手机号', trigger: 'blur' },
          { pattern: /^[1][3,4,5,7,8][0-9]{9}$/, message: '手机号格式不正确', trigger: 'blur' },
        ],
        age: [{ required: true, message: '请输入年龄', trigger: 'blur' }],
        school: [{ required: true, message: '请输入学校', trigger: 'blur' }],
        gender: [{ required: true, message: '请选择性别', trigger: 'change' }],
        location: [{ required: true, message: '请选择或输入地点', trigger: 'blur' }],
      },
      locationType: 'province', // 默认选择省市区
      collapseVisible: false,
      options: [
        // 省市区数据,根据实际情况填写
        { code: '110000', name: '北京市', children: [...] },
        { code: '120000', name: '天津市', children: [...] },
        // 其他省市区数据
      ],
    };
  },
  methods: {
    submitForm() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          // 表单验证通过,可以提交数据
          axios.post('/api/submit', this.formData)
            .then(response => {
              console.log('提交成功', response);
              // 根据实际需求处理提交成功后的逻辑
            })
            .catch(error => {
              console.error('提交失败', error);
              // 根据实际需求处理提交失败后的逻辑
            });
        } else {
          return false;
        }
      });
    },
  },
};
</script>

<style>
/* 可选:自定义样式 */
</style>
相关推荐
xiaofeichaichai1 小时前
Webpack
前端·webpack·node.js
问心无愧05131 小时前
ctf show web入门111
android·前端·笔记
唐某人丶1 小时前
模型越来越强,我们还需要 Agent 工程吗?—— 从价值重估到 Harness 实践
前端·agent·ai编程
智码看视界2 小时前
现代Web开发基础:全栈工程师的起航点
前端·后端·c5全栈
JS菌2 小时前
手写一个 AI Agent 全栈项目:从沙箱执行到子智能体的完整实现
前端·人工智能·后端
excel3 小时前
HLS TS 文件损坏的元凶:Git 提交与拉取
前端
Aphasia3113 小时前
https连接传输流程
前端·面试
徐小夕3 小时前
万字长文!千万级文档 RAG 知识库系统落地实践
前端·算法·github
梦梦代码精3 小时前
2026年PHP开源商城系统实测对比:架构、多商户、商用授权,谁才是真·省心?
vue.js·docker·架构·开源·代码规范