以下是使用vxe-table进行多条数据编辑后统一保存的完整代码示例:

<template>
  <div>
    <vxe-table
      ref="table"
      :data="data"
      :edit-config="{ trigger: 'manual' }"
      :row-class-name="rowClassName"
      @cell-click="handleCellClick"
    >
      <vxe-table-column type="index" width="60" align="center"></vxe-table-column>
      <vxe-table-column field="name" title="Name"></vxe-table-column>
      <vxe-table-column field="age" title="Age"></vxe-table-column>
      <vxe-table-column field="address" title="Address"></vxe-table-column>
      <vxe-table-column title="Operation" align="center">
        <template #cell="{ row }">
          <button @click="handleSave(row)">Save</button>
          <button @click="handleCancel(row)">Cancel</button>
        </template>
      </vxe-table-column>
    </vxe-table>
    <button @click="handleSaveAll">Save All</button>
  </div>
</template>

<script>
import { VXETable } from 'vxe-table'
import 'vxe-table/lib/style.css'

export default {
  data() {
    return {
      data: [
        { name: 'John', age: 28, address: 'New York' },
        { name: 'Mike', age: 32, address: 'London' },
        { name: 'Amy', age: 25, address: 'Paris' }
      ],
      editingRows: []
    }
  },
  methods: {
    rowClassName({ row }) {
      return this.editingRows.includes(row) ? 'row-editing' : ''
    },
    handleCellClick({ row }) {
      if (!this.editingRows.includes(row)) {
        this.editingRows.push(row)
      }
      this.$refs.table.setActiveRow(row)
      this.$refs.table.setActiveColumn('name')
      this.$refs.table.editCell(row, 'name')
    },
    handleSave(row) {
      this.editingRows = this.editingRows.filter(item => item !== row)
      this.$refs.table.updateData(row)
      // 保存数据到服务器
      // 示例代码:axios.post('/api/save', row)
    },
    handleCancel(row) {
      this.editingRows = this.editingRows.filter(item => item !== row)
      // 取消编辑,还原数据
      this.$refs.table.revertData(row)
    },
    handleSaveAll() {
      const promises = this.editingRows.map(row => {
        return new Promise((resolve, reject) => {
          this.$refs.table.validateRow(row, valid => {
            if (valid) {
              this.handleSave(row)
              resolve()
            } else {
              reject(new Error('Validation failed'))
            }
          })
        })
      })
      Promise.all(promises)
        .then(() => {
          this.editingRows = []
          // 全部保存成功
        })
        .catch(error => {
          console.error(error)
          // 保存失败,处理错误
        })
    }
  },
  mounted() {
    VXETable.use(VXETable.Edit)
    VXETable.use(VXETable.Validate)
  }
}
</script>

<style>
.row-editing {
  background-color: #f1f1f1;
}
</style>

在上述代码中,我们使用了editingRows数组来跟踪正在编辑的行。当用户点击单元格时,我们将该行添加到editingRows数组中,并使用$refs.table.editCell方法启动单元格编辑模式。当用户点击"Save"按钮时,我们将行从editingRows数组中移除,并使用$refs.table.updateData方法更新表格数据,并可以将数据保存到服务器。当用户点击"Cancel"按钮时,我们将行从editingRows数组中移除,并使用$refs.table.revertData方法还原数据。

当用户点击"Save All"按钮时,我们遍历editingRows数组,并使用$refs.table.validateRow方法验证行数据。如果验证通过,则调用handleSave方法保存数据,并使用Promise.all等待所有保存操作完成。如果验证失败,则会显示验证错误信息。

以上是一个使用vxe-table进行多条数据编辑后统一保存的完整代码示例。您可以根据自己的需求进行修改和扩展

vxe-table 多条数据编辑后统一保存完整代码

原文地址: http://www.cveoy.top/t/topic/h5lv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录