vue elementui table编辑表单时弹框增加编辑明细数据的实现

 更新时间:2024年10月17日 11:22:54   作者:weixin_45616483  
在Vue项目中,通过使用Element UI框架实现表单及其明细数据的新增和编辑操作,主要通过弹窗形式进行明细数据的增加和编辑,有效提升用户交互体验,本文详细介绍了相关实现方法和代码,适合需要在Vue项目中处理复杂表单交互的开发者参考

需求:
前端进行新增表单时,同时增加表单的明细数据。明细数据部分,通过弹框方式增加或者编辑。
效果图:

代码:

   <!-- 新增主表弹窗 Begin -->
    <el-dialog
      :title="titleInfo"
      top="5vh"
      center
      width="85%"
      :close-on-click-modal="false"
      :close-on-press-escape="false"
      :visible.sync="dialogVisible"
    >
      <span>
        <el-form
          ref="form"
          :rules="formRules"
          :model="form"
          style="margin: 0 auto"
          label-width="32%"
        >
          <el-row :gutter="24">
            <el-col :span="12">
              <el-form-item label="申请日期:" prop="applyDate">
                <el-date-picker
                  v-model="form.applyDate"
                  style="width: 80%"
                  clearable
                  type="date"
                  value-format="yyyy-MM-dd"
                  placeholder="请选择申请日期"
                />
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-col :span="14">
                <el-form-item
                  prop="applyDept"
                  label="申请部门:"
                  label-width="30%"
                >
                  <el-select
                    v-model="form.applyDept"
                    style="width: 80%"
                    :disabled="true"
                  >
                    <el-option
                      v-for="item in deptLists"
                      :key="item.id"
                      :label="item.departName"
                      :value="item.orgCode"
                    />
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="10">
                <el-form-item
                  prop="applyUsername"
                  label="申请人:"
                  label-width="30%"
                >
                  <el-input
                    v-model="form.applyUsername"
                    style="width: 70%"
                    :disabled="true"
                  />
                </el-form-item>
              </el-col>
            </el-col>
          </el-row>
        </el-form>
        <el-card>
          <div slot="header">
            <span style="font-weight: bold">外来人员名单</span>
            <el-button
              style="float: right"
              type="primary"
              @click="insertExterRow"
              >添加</el-button
            >
          </div>
          <el-table
            ref="exterTable"
            align="center"
            highlight-cell
            keep-source
            stripe
            border
            style="width: 100%"
            max-height="400"
            :data="exterTableData"
            :edit-config="{ trigger: 'click', mode: 'row', showStatus: true }"
          >
            <el-table-column prop="useUser" label="姓名" align="center" />
            <el-table-column prop="idCard" label="身份证号" align="center" />
            <el-table-column prop="phone" label="手机号" align="center" />
            <el-table-column label="操作" align="center" width="220">
              <template slot-scope="scope">
                <el-button
                  mode="text"
                  icon="el-icon-edit"
                  @click="editExterRow(scope.$index, scope.row)"
                />
                <el-button
                  mode="text"
                  icon="el-icon-delete"
                  @click="removeExterRow(scope.$index, scope.row)"
                />
              </template>
            </el-table-column>
          </el-table>
        </el-card>
      </span>
      <span slot="footer" class="dialog-footer">
        <el-button @click="cancel">取消</el-button>
        <el-button type="success" :loading="saveLoading" @click="save"
          >保存</el-button
        >
      </span>
    </el-dialog>
    <!-- 新增主表弹窗 End -->
    <!-- 外来人员弹窗 Start-->
    <el-dialog
      :title="exterTitleInfo"
      top="5vh"
      center
      width="50%"
      :close-on-click-modal="false"
      :close-on-press-escape="false"
      :visible.sync="exterDialogVisible"
    >
      <span>
        <el-form
          ref="exterForm"
          :rules="exterFormRules"
          :model="exterForm"
          style="margin: 0 auto"
          label-width="25%"
        >
          <el-row :gutter="24">
            <el-col :span="24">
              <el-form-item label="姓名:" prop="useUser">
                <el-input
                  v-model="exterForm.useUser"
                  placeholder="请输入姓名"
                  style="width: 80%"
                />
              </el-form-item>
            </el-col>
          </el-row>
          <el-row :gutter="24">
            <el-col :span="24">
              <el-form-item label="身份证号:" prop="idCard">
                <el-input
                  v-model="exterForm.idCard"
                  placeholder="请输入身份证号"
                  style="width: 80%"
                />
              </el-form-item>
            </el-col>
          </el-row>
          <el-row :gutter="24">
            <el-col :span="24">
              <el-form-item label="手机号:" prop="phone">
                <el-input
                  v-model="exterForm.phone"
                  placeholder="请输入手机号"
                  style="width: 80%"
                />
              </el-form-item>
            </el-col>
          </el-row>
        </el-form>
      </span>
      <span slot="footer" class="dialog-footer">
        <el-button @click="cancelExter">取消</el-button>
        <el-button type="success" :loading="exterSaveLoading" @click="saveExter"
          >保存</el-button
        >
      </span>
    </el-dialog>
    <!--外来人员弹窗 End-->
export default {
  data() {
    return {
      // 表单
      form: {},
      exterForm: {},
      exterTableData: [],
      //form表单验证规则
      exterFormRules: {}
    }
  },
  methods: {
   // 添加一行,外来人员信息
    insertExterRow() {
      this.exterTitleInfo = '外来人员信息新增'
      this.exterForm = {}
      this.exterDialogVisible = true
      this.selectExterRow = null
      this.$nextTick(() => {
        this.$refs.exterForm.clearValidate() // 移除校验结果
      })
    },
    // 编辑一行,外来人员信息
    editExterRow(index, row) {
      this.exterTitleInfo = '外来人员信息编辑'
      this.exterDialogVisible = true
      this.selectExterRow = row
      this.exterForm = Object.assign({}, row)
      this.$nextTick(() => {
        this.$refs.exterForm.clearValidate() // 移除校验结果
      })
    },
    // 删除一行,外来人员信息
    removeExterRow(index, row) {
      this.$confirm('此操作将永久删除当前信息, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
        center: true
      })
        .then(() => {
          this.exterTableData.splice(index, 1)
        })
        .catch(() => {
          this.$message({
            type: 'info',
            message: '已取消删除'
          })
        })
    },
    // 保存外来人员信息
    saveExter() {
      this.$refs.exterForm.validate((valid) => {
        if (valid) {
          this.exterSaveLoading = true
          if (this.selectExterRow) {
            Object.assign(this.selectExterRow, this.exterForm)
          } else {
            this.exterTableData.push(this.exterForm)
          }
          this.exterSaveLoading = false
          this.exterDialogVisible = false
        } else {
          return false
        }
      })
    },
    cancelExter() {
      this.exterForm = {}
      this.exterDialogVisible = false
    }
  }
}

到此这篇关于vue elementui table编辑表单时弹框增加编辑明细数据的文章就介绍到这了,更多相关vue elementui table编辑表单内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 全面详解vue种数组去重的12种方法示例

    全面详解vue种数组去重的12种方法示例

    这篇文章主要介绍了vue数组去重的12种方法示例全面详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Vue响应式原理与虚拟DOM实现步骤详细讲解

    Vue响应式原理与虚拟DOM实现步骤详细讲解

    在Vue中最重要、最核心的概念之一就是响应式系统。这个系统使得Vue能够自动追踪数据变化,并在数据发生变化时自动更新相关的DOM元素。本文将会探讨Vue响应式系统的实现原理及其底层实现
    2023-03-03
  • vue-cli3自动消除console.log()的调试信息方式

    vue-cli3自动消除console.log()的调试信息方式

    这篇文章主要介绍了vue-cli3自动消除console.log()的调试信息方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Vue 框架之键盘事件、健值修饰符、双向数据绑定

    Vue 框架之键盘事件、健值修饰符、双向数据绑定

    这篇文章主要介绍了Vue 框架之键盘事件、健值修饰符、双向数据绑定问题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-11-11
  • vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作

    vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作

    这篇文章主要介绍了vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • vue中el-dialog打开与关闭的几种方式

    vue中el-dialog打开与关闭的几种方式

    本文主要介绍了vue中el-dialog打开与关闭的几种方式,包括 update:visible, ref和兄弟 bus这三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • vue.js学习之UI组件开发教程

    vue.js学习之UI组件开发教程

    前端开发中,随着业务的增多,出于效率的考虑,我们对于组件化开发的需求也越来越迫切。下面这篇文章主要给大家介绍了关于vue.js之UI组件开发的相关资料,文中介绍的非常详细,需要的朋友们下面来一起看看吧。
    2017-07-07
  • vue 3.0 使用ref获取dom元素的示例

    vue 3.0 使用ref获取dom元素的示例

    这篇文章主要介绍了vue 3.0 使用ref获取dom元素,包括vue2.x获取dom和vue3.0获取单个dom,通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • vue中数据字典dicts的简单说明和用法介绍

    vue中数据字典dicts的简单说明和用法介绍

    这篇文章主要给大家介绍了关于vue中数据字典dicts的简单说明和用法的相关资料,如果您想在Vue中使用字典查询,您可以使用Vue的计算属性和方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • vue使用json最简单的两种方式分享

    vue使用json最简单的两种方式分享

    这篇文章主要介绍了vue使用json最简单的两种方式分享,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03

最新评论