vue3编写带提示的表格组件功能

 更新时间:2025年02月20日 11:19:31   作者:weixin_44165996  
本文介绍了如何使用Vue 3编写一个带提示的表格组件,并假设每行都有一个保存按钮,如果需要全部保存,还会加上验证,感兴趣的朋友一起看看吧

1、假设每行都有一个保存按钮

<template>
  <el-table :data="tableData" class="w100">
    <!-- 姓名列 -->
    <el-table-column prop="name" label="姓名">
      <template #default="{ row }">
        <el-form :model="row" :rules="rules" ref="form">
          <el-form-item prop="name">
            <el-input v-model="row.name" class="w100"/>
          </el-form-item>
        </el-form>
      </template>
    </el-table-column>
    <!-- 年龄列 -->
    <el-table-column prop="age" label="年龄">
      <template #default="{ row }">
        <el-form :model="row" :rules="rules" ref="form">
          <el-form-item prop="age">
            <el-input v-model="row.age" type="number" class="w100"/>
          </el-form-item>
        </el-form>
      </template>
    </el-table-column>
    <el-table-column prop="phone" label="电话号码">
      <template #default="{ row }">
        <el-form :model="row" :rules="rules" ref="form">
          <el-form-item prop="phone">
            <el-input v-model="row.phone" maxlength="11" class="w100"/>
          </el-form-item>
        </el-form>
      </template>
    </el-table-column>
    <!-- 操作列 -->
    <el-table-column label="操作">
      <template #default="{ row }">
        <el-button type="primary" @click="handleSave(row)">保存</el-button>
      </template>
    </el-table-column>
  </el-table>
</template>
<script  setup>
import { ref } from 'vue';
    // 表格数据
    const tableData = ref([
      { name: '张三', age: 25 },
      { name: '李四', age: 30 },
    ]);
    // 验证规则
    const rules = {
      name: [
        { required: true, message: '姓名不能为空', trigger: 'blur' },
        { min: 2, max: 5, message: '姓名长度在 2 到 5 个字符', trigger: 'blur' },
      ],
      age: [
        { required: true, message: '年龄不能为空', trigger: 'blur' },
        { type: 'number', min: 0, max: 120, message: '年龄必须在 0 到 120 之间', 
         trigger:'blur' },
      ],
      phone: [
        { required: false, message: '电话号码不能为空', trigger: 'blur' },
        { pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号码', trigger: 'blur' },
      ],
    };
    // 保存操作
    const handleSave = (row) => {
      // 这里可以调用后端接口保存数据
      console.log('保存数据:', row);
    };
</script>
<style scoped>
/* .el-input {
  width: 100px;
} */
 .w100{width: 100%;}
 /* .w200{width: 200px;} */
</style>

2、如果需要全部保存时加上验证

<template>
  <div>
    <el-table :data="tableData" class="w100">
      <!-- 姓名列 -->
      <el-table-column prop="name" label="姓名">
        <template #default="{ row, $index }">
          <el-form :model="row" :rules="rules" :ref="(el) => setFormRef(el, $index)">
            <el-form-item prop="name">
              <el-input v-model="row.name"  class="w100"/>
            </el-form-item>
          </el-form>
        </template>
      </el-table-column>
      <!-- 年龄列 -->
      <el-table-column prop="age" label="年龄">
        <template #default="{ row, $index }">
          <el-form :model="row" :rules="rules" :ref="(el) => setFormRef(el, $index)">
            <el-form-item prop="age">
              <el-input v-model="row.age" type="number"  class="w100"/>
            </el-form-item>
          </el-form>
        </template>
      </el-table-column>
      <!--电话号码 -->
      <el-table-column prop="phone" label="电话号码">
      <template #default="{ row }">
        <el-form :model="row" :rules="rules" :ref="(el) => setFormRef(el, $index)">
          <el-form-item prop="phone">
            <el-input v-model="row.phone" maxlength="11" class="w100"/>
          </el-form-item>
        </el-form>
      </template>
    </el-table-column>
    </el-table>
    <!-- 全部保存按钮 -->
    <el-button type="primary" @click="handleSaveAll">全部保存</el-button>
  </div>
</template>
<script setup>
import { ref } from 'vue';
    // 表格数据
    const tableData = ref([
      { name: '张三', age: 25 },
      { name: '李四', age: 30 },
    ]);
    // 表单引用
    const formRefs = ref([]);
    // 设置表单引用
    const setFormRef = (el, index) => {
      if (el) {
        // 根据索引更新对应的form ref
        formRefs.value[index] = el;
        console.log(el,index)
      }
    };
    // 验证规则
    const rules = {
      name: [
        { required: true, message: '姓名不能为空', trigger: 'blur' },
        { min: 2, max: 5, message: '姓名长度在 2 到 5 个字符', trigger: 'blur' },
      ],
      age: [
        { required: true, message: '年龄不能为空', trigger: 'blur' },
        { type: 'number', min: 0, max: 120, message: '年龄必须在 0 到 120 之间', trigger: 'blur' },
      ],
      phone: [
        { required: false, message: '电话号码不能为空', trigger: 'blur' },
        { pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号码', trigger: 'blur' },
      ],
    };
    // 全部保存操作
    const handleSaveAll = async () => {
      let isValid = true;
      // 遍历所有表单并触发验证
      for (let i = 0; i < formRefs.value.length; i++) {
        const formRef = formRefs.value[i];
        console.log(formRef, 222);
        if (formRef) {
          try {
            await formRef.validate();
          } catch (error) {
            isValid = false;
            console.error(`第 ${i + 1} 行数据验证失败:`, error);
          }
        }
      }
      // 如果所有表单验证通过,保存数据
      if (isValid) {
        console.log('全部数据验证通过,保存数据:', tableData.value);
        // 这里可以调用后端接口保存数据
      } else {
        console.log('部分数据验证失败,请检查输入');
      }
    };
</script>
<style scoped>
.w100 {
  width: 100%;
}
</style>

到此这篇关于vue3编写带提示的表格组件的文章就介绍到这了,更多相关vue3提示表格组件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解vue或uni-app的跨域问题解决方案

    详解vue或uni-app的跨域问题解决方案

    这篇文章主要介绍了详解vue或uni-app的跨域问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 关于找到任意组件实例的方法

    关于找到任意组件实例的方法

    这篇文章主要介绍了关于找到任意组件实例的方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • 安装Vue+webpack出现的问题及解决方案

    安装Vue+webpack出现的问题及解决方案

    这篇文章主要介绍了安装Vue+webpack出现的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Vue router 路由安装及使用过程

    Vue router 路由安装及使用过程

    vue-router 是 Vue 的一个插件库,适用于构建单页面应用,这篇文章主要介绍了Vue router 路由安装以及使用,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • 关于vue-admin-template模板连接后端改造登录功能

    关于vue-admin-template模板连接后端改造登录功能

    这篇文章主要介绍了关于vue-admin-template模板连接后端改造登录功能,登陆方法根据账号密码查出用户信息,根据用户id与name生成token并返回,userinfo则是对token进行获取,在查出对应值进行返回,感兴趣的朋友一起看看吧
    2022-05-05
  • vue单选按钮,选中如何改变其当前按钮颜色

    vue单选按钮,选中如何改变其当前按钮颜色

    这篇文章主要介绍了vue单选按钮,选中如何改变其当前按钮颜色。具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Vue打包后页面出现空白解决办法

    Vue打包后页面出现空白解决办法

    本文主要介绍了Vue打包后页面出现空白解决办法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • vue3 使用socket的完整代码

    vue3 使用socket的完整代码

    这篇文章主要介绍了vue3 使用socket的完整代码,包括vue3客户端和服务端的实例讲解,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • vue3生成随机密码的示例代码

    vue3生成随机密码的示例代码

    本文主要介绍了vue3生成随机密码的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • vue中的for循环以及自定义指令解读

    vue中的for循环以及自定义指令解读

    这篇文章主要介绍了vue中的for循环以及自定义指令,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08

最新评论