Vue3+Elementplus 实现表格编辑和表单验证

上班写的文章,只能这样了

<template>
  <div>
      <el-form :model="info" ref="forms">
        <el-table
          ref="multipleTableRef"
          :data="info.data"
          style="width: 100%"
          @row-click="rowClickHandle"
          border
        >
          <el-table-column align="center" property="name" label="*姓名">
            <template #default="scope">
              <template v-if="isEdit && currentRow == scope.row.id">
                <el-form-item :prop="'data.' + scope.$index + '.name'" :rules="formRules.name">
                  <el-input placeholder="请输入姓名" v-model="info.data[scope.$index].name" />
                </el-form-item>
              </template>
              <template v-else>
                <div>
                  {{ scope.row.name }}
                </div>
              </template>
            </template>
          </el-table-column>
                  </el-table>
      </el-form>
  </div>
</template>
<script setup lang="ts">
import type { FormInstance } from 'element-plus'
// 信息
let info: any = reactive({
  data: [
    {
      id: 0,
      name: '小刘',
      role: '0',
      sex: '1',
      card_type: '2',
      card_id: '12345678912345678',
      phone: '12345678912',
      validity: ['2023-11-23', '2023-12-23'],
      remark: '备注'
    }
  ]
})

// 校验规则
const formRules = reactive({
  name: [{ required: true, message: '请输入姓名', trigger: 'change' }],
  sex: [{ required: true, message: '请选择性别', trigger: 'blur' }],
  role: [{ required: true, message: '请选择', trigger: 'blur' }]
})

// 是否可编辑
const isEdit = ref(false)
// 当前编辑的 行,我用id去判断是同一行
const currentRow = ref(0)

// 点击编辑某一行
const rowClickHandle = (row) => {
  isEdit.value = true
  currentRow.value = row.id
}
// 等你编辑完成后,可以给个确认按钮去完成编辑
// 然后把 isEdit.value = false 就可以了
const forms = ref<FormInstance>()
// 点击外围进行确认编辑完成
const finishEdit = () => {
  if (!forms) return
  forms.value?.validate((valid) => {
    if (valid) {
      console.log('submit!')
      isEdit.value = false
    } else {
      console.log('error submit!')
      return false
    }
  })
}

有问题再说把。。。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值