elementui table expand 修改数据

11 篇文章 0 订阅
4 篇文章 0 订阅

1.我的设计思路是当点击expand箭头后显示出来内容,然后双击(单击也可以,根据自己想法来)某个区域,然后弹窗进行数据修改,然后双向绑定进行数据渲染,点击保存按钮后数据传输到后台进行数据修改

2.看下效果图

3.然后双击其中的字段进行弹窗,然后进行值的修改 

点击确定后,将数据渲染到页面上,然后点击保存按钮进行后端交互

4.下面是具体的代码,首先给expand里的参数添加点击事件 

<el-table-column type="expand">
        <template slot-scope="props">
          <el-form
            label-position="left"
            inline
            class="demo-table-expand"
            style="background-color:pink"
          >
            <el-form-item label="项目名称:">
              <span
                @dblclick="
                  updateInfo(
                    '项目名称',
                    'name',
                    props.$index,
                    props.row.name,
                    'plainInput'
                  )
                "
                >{{ props.row.name }}</span
              >
            </el-form-item>
            <el-form-item label="项目版本:">
              <span
                @dblclick="
                  updateInfo(
                    '项目版本',
                    'version',
                    props.$index,
                    props.row.version,
                    'plainInput'
                  )
                "
                >{{ props.row.version }}</span
              >
            </el-form-item>
            <el-form-item label="运行状态:">
              <span
                @dblclick="
                  updateInfo(
                    '运行状态',
                    'runStatus',
                    props.$index,
                    props.row.runStatus,
                    'select'
                  )
                "
                >{{ props.row.runStatus }}</span
              >
            </el-form-item>
            <el-form-item label="开发状态:">
              <span
                @dblclick="
                  updateInfo(
                    '开发状态',
                    'devStatus',
                    props.$index,
                    props.row.devStatus,
                    'select'
                  )
                "
                >{{ props.row.devStatus }}</span
              >
            </el-form-item>
            <el-form-item label="需 求 方 :">
              <span
                @dblclick="
                  updateInfo(
                    '需 求 方',
                    'demand',
                    props.$index,
                    props.row.demand,
                    'plainInput'
                  )
                "
                >{{ props.row.demand }}</span
              >
            </el-form-item>
            <el-form-item label="项目类型:">
              <span
                @dblclick="
                  updateInfo(
                    '项目类型',
                    'type',
                    props.$index,
                    props.row.type,
                    'select'
                  )
                "
                >{{ props.row.type }}</span
              >
            </el-form-item>
            <el-form-item label="推 送 人 :">
              <span
                @dblclick="
                  updateInfo(
                    '推 送 人',
                    'pusher',
                    props.$index,
                    props.row.pusher,
                    'select'
                  )
                "
                >{{ props.row.pusher }}</span
              >
            </el-form-item>
            <el-form-item label="负 责 人 :">
              <span
                @dblclick="
                  updateInfo(
                    '负 责 人',
                    'principal',
                    props.$index,
                    props.row.principal,
                    'plainInput'
                  )
                "
                >{{ props.row.principal }}</span
              >
            </el-form-item>
            <el-form-item label="计划开始时间:">
              <span
                @dblclick="
                  updateInfo(
                    '计划开始时间',
                    'planStartTime',
                    props.$index,
                    props.row.planStartTime,
                    'timePicker'
                  )
                "
                >{{ props.row.planStartTime }}</span
              >
            </el-form-item>
            <el-form-item label="计划结束时间:">
              <span
                @dblclick="
                  updateInfo(
                    '计划结束时间',
                    'planEndTime',
                    props.$index,
                    props.row.planEndTime,
                    'timePicker '
                  )
                "
                >{{ props.row.planEndTime }}</span
              >
            </el-form-item>
            <el-form-item label="创建时间:">
              <span>{{ props.row.createTime }}</span>
            </el-form-item>
            <el-form-item label="最后修改时间:">
              <span>{{ props.row.updateTime }}</span>
            </el-form-item>
            <el-form-item label="项目描述:">
              <span
                @dblclick="
                  updateInfo(
                    '项目描述',
                    'description',
                    props.$index,
                    props.row.description,
                    'textArea'
                  )
                "
                >{{ props.row.description }}</span
              >
            </el-form-item>
            <el-form-item label="">
              <el-button type="primary" @click="savePane(props)" size="mini"
                >保存</el-button
              >
            </el-form-item>
          </el-form>
        </template>
      </el-table-column>

5.下面是对应的参数初始化,和点击事件方法

  data() {
    return {
      ...
      updateDialog: false,
      updateDialogFieldCn: "", // 要修改的属性名-中文
      updateDialogFieldEn: "", // 要修改的属性名-英文
      updateDialogDefaultValue: "", // 修改弹窗中默认的值
      updateDialogFieldType: "", // 弹窗中组件的类型
      updateDialogRowIndex: 0 // 修改的值所在的行索引
    };
  },

6.弹窗的部分代码,主要通过updateDialogFieldType进行区分

 <!-- 双击属性事件的弹窗 -->
    <el-dialog
      :title="'修改' + updateDialogFieldCn"
      :visible.sync="updateDialog"
    >
      <el-form v-if="updateDialogFieldType=== 'plainInput'">
        <el-form-item :label="updateDialogFieldCn" label-width="120px">
          <el-input v-model="updateDialogDefaultValue"></el-input>
        </el-form-item>

       .... 后面为updateDialogFieldType='select',updateDialogFieldType='timePicker'等其他的布局

        
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="updateDialog = false">取 消</el-button>
        <el-button type="primary" @click="saveUpdateDialog">确 定</el-button>
      </div>
    </el-dialog>

7.双击expand中属性值触发的事件

    // 定义pane中部件的点击事件
    updateInfo(cn, en, index, originValue, type) {
      // cn:要修改的属性值中文名,作为弹窗表单中组件的label和弹窗的title
      // en:要修改的属性值英文名,用在点击保存后给对象的某个属性设值的时候用
      // index:为修改的值所在tabData的行索引,用来进行值修改
      // originValue为该字段对应的原始默认值,用来进行渲染
      // type为弹窗中的组件类型,plainInput,select,timePicker,textArea等,根据需求名字自己定
      this.updateDialog = true;
      this.updateDialogFieldCn = cn;
      this.updateDialogFieldEn = en;
      this.updateDialogRowIndex = index;
      this.updateDialogDefaultValue = originValue;
      this.updateDialogFieldType = type;
    },

8.然后是弹窗确定按钮的点击事件

  // 修改弹窗的确定按钮的点击事件
    saveUpdateDialog() {
      this.updateDialog = false;
      let obj = this.tableData[this.updateDialogRowIndex]; // 获取tableData中该行的对象
      obj[this.updateDialogFieldEn] = this.updateDialogDefaultValue; // 修改该对象中指定属性的值
      // 属性值还原初始化
      (this.updateDialogFieldCn = ""), // 要修改的属性名-中文
        (this.updateDialogFieldEn = ""), // 要修改的属性名-英文
       (this.updateDialogFieldType = ""), // 弹窗中组件的类型
        (this.updateDialogFieldType = 1), // 弹窗中组件的类型
        (this.updateDialogRowIndex = 0); // 修改的值所在的索引
    },

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值