vue+Element中table表格实现可编辑(select下拉框)


Posted in Javascript onMay 21, 2020

最近在工作中遇到一个问题,需要在表格中实现数据可编辑状态,具体情况是需要在单元格里加入下拉框;并且每个下拉框的数组数据是不一样的,具体是根据当前行前面数据的id查询而来,前面的是数据是动态生成的,后面的下拉框数据也是根据id动态生成的,内容不同;有点类似于树形二级状态,后面的下拉框数据来源并没有在前面内容里,而是另外一个接口查询,具体操作如下:

vue+Element中table表格实现可编辑(select下拉框)

HTML代码:

1.在处理人列加入一个下拉框模板,其中v-model必须要scope.row.proJbruserValue来绑定,意思是这个值绑定到当前行所选中的人;如果直接绑定proJbruserValue,将不能进行差异化选择,(这里scope.row.proJbruserValue 相当于对象点属性,在本地临时添加了一个属性来存储不同行的选中处理人id)

2.通过点击当前行下拉框获取焦点,根据当前行id查询对应的下拉框数据,并赋值给data中我们设置的数组接收,

3.一个重要的注意点,:key=item.id 这个key尽量绑定id,不推荐使用Index, 因为在这里使用Index的时候,会让选中项出现数字bug,这是我在坑里呆了好久才通过我的一个朋友得到的答案,具体bug原因尚未深究,请重点注意;

4.最后点击按钮提交流程配置;

<el-table :data="processNodelist" style="width: 100%" border stripe>
 <el-table-column type="index" label="序号" width="50"></el-table-column>
 <el-table-column prop="nodename" label="流程节点名称"></el-table-column>
 <el-table-column label="处理人名称">
 <template slot-scope="scope">
 <el-select v-model="scope.row.proJbruserValue" @focus="getDatalist(scope.row)" placeholder="请选择" filterable allow-create>
 <el-option v-for="item in projectJbrUserlist " :key="item.id" :label="item.username" :value="item.id">
 </el-option>
 </el-select>
 </template>
 </el-table-column>
</el-table>
<el-button @click="submitConfigHandle" type="primary" size="mini" icon="el-icon-upload">提交配置</el-button>

js逻辑代码:

data() {
 return {
  processNodelist: [], // 流程节点数据
  projectJbrUserlist: [], // 处理人员数据
  nodeidlist: [], // 所有流程节点Id
  selectedUserlist: [], // 被选中的处理人员id数组
 }
},
created() {
 this.getProcessNodelist();
},
methods: {
 // 查询流程节点数据
  async getProcessNodelist() {
   const { data: res } = await this.$http.post('querynode', {
    userid: this.sessionInfo.userid,
    sid: this.sessionInfo.session,
    developerid: this.sessionInfo.companyId
   });
   if (res.code !== 0) {
    return this.$message.error('获取流程节点数据失败');
   }
   this.processNodelist = res.msg;
  },
  // select下拉框获取焦点的时候查询id对应的下拉框数据源
  async getDatalist(row) {
   const { data: res } = await this.$http.post('query', {
    userid: this.sessionInfo.userid,
    sid: this.sessionInfo.session,
    queryid: 9,
    nodeid: row.nodeid
   });
   if (res.code !== 0) {
    return this.$message.error('获取处理人数据失败');
   }
   this.projectJbrUserlist = res.msg;
  },
  // 提交流程配置接口
  async submitConfig() {
   const { data: res } = await this.$http.post('bindTask', {
    userid: this.sessionInfo.userid,
    sid: this.sessionInfo.session,
    flowid: 9,
    table_name: 'pt_base',
    key_value: this.sessionInfo.proId,
    nodeid: this.nodeidlist,
    uid: this.selectedUserlist
   });
   if (res.code !== 0) {
    return this.$message.error('流程节点配置失败');
   }
   this.$message.success('流程节点配置成功');
  },
  // 发起请求
  submitConfigHandle() {
   // 循环流程节点数组将所有nodeid取出添加到新数组
   for (let i = 0; i < this.processNodelist.length; i++) {
    this.nodeidlist.push(this.processNodelist[i].nodeid);
   }
   // 循环流程节点数组将所有被选择的处理人员id :proJbruserValue取出添加到新数组
   for (let i = 0; i < this.processNodelist.length; i++) {
    this.selectedUserlist.push(
     this.processNodelist[i].proJbruserValue
    );
   }
   // 调用接口函数
   this.submitConfig();
  }
}

这次实现表格可编辑功能(select下拉框),主要有两个注意点,一是v-model的绑定问题,而是:key的绑定问题;这次我的数据接口是通过id返回的不同数据源,可以借鉴上面代码,如果你的(select下拉框)数据源是多个接口查询而来,你需要在通过接口查询到各个数据源,保存到data里面,然后还要做一些改变:

1.将v-for循环的数据改成通过函数传递当前行数据(id):

<el-option v-for="item in getdatalist(scope.row) "> </el-option>

2.通过传递过来的id来判断当前行需要返回的数据源;

getdatalist(row) {
 const id = row.nodeid;
 if ( id === '1') {
  return this.data1 
 } else if (id === '2') {
  return this.data2
 }
}

希望我的方法能给大家一些帮助和思路

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS JavaScript获取Url参数,src属性参数
Mar 09 Javascript
escape、encodeURI、encodeURIComponent等方法的区别比较
Dec 27 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
Sep 16 Javascript
javascript避免数字计算精度误差的方法详解
Mar 05 Javascript
Jquery操作Ajax方法小结
Nov 29 Javascript
jQuery hover事件简单实现同时绑定2个方法
Jun 07 Javascript
浅谈struts1 &amp; jquery form 文件异步上传
May 25 jQuery
详解vue.js移动端导航navigationbar的封装
Jul 05 Javascript
Javascript中this关键字指向问题的测试与详解
Aug 11 Javascript
React组件内事件传参实现tab切换的示例代码
Jul 04 Javascript
node+express框架中连接使用mysql(经验总结)
Nov 10 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
Apr 23 Javascript
浅谈React中组件逻辑复用的那些事儿
May 21 #Javascript
记一次用ts+vuecli4重构项目的实现
May 21 #Javascript
JS实现图片幻灯片效果代码实例
May 21 #Javascript
Javascript实现秒表计时游戏
May 27 #Javascript
JavaScript实现猜数字游戏
May 20 #Javascript
Vue 打包体积优化方案小结
May 20 #Javascript
vue实现输入框自动跳转功能
May 20 #Javascript
You might like
PHP中UNIX时间戳和日期间的转换与计算实例
2014/11/19 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
Redis使用Eval多个键值自增的操作实例
2016/11/04 PHP
php静态成员方法和静态的成员属性的使用方法
2017/10/26 PHP
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
js原生appendChild的bug解决心得分享
2013/07/01 Javascript
JS代码同步文本框内容的实例方法
2013/07/12 Javascript
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
基于jQuery实现放大镜特效
2020/10/19 Javascript
深入理解bootstrap框架之第二章整体架构
2016/10/09 Javascript
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
使用vuex的state状态对象的5种方式
2018/04/19 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
2018/07/10 Javascript
Node.js assert断言原理与用法分析
2019/01/04 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
一个基于flask的web应用诞生(1)
2017/04/11 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
python生成n个元素的全组合方法
2018/11/13 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
2019/01/05 Python
Python修改文件往指定行插入内容的实例
2019/01/30 Python
详解python读取image
2019/04/03 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
CSS3色彩模式有哪些?CSS3 HSL色彩模式的定义
2016/04/26 HTML / CSS
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
求职简历自荐信范文
2013/10/21 职场文书
经销商年会策划方案
2014/05/29 职场文书
婚宴来宾致辞
2015/07/28 职场文书
创业计划书之酒店
2019/08/30 职场文书
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android