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的闭包的一个示例说明
Nov 18 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
Nov 15 Javascript
JavaScript时间操作之年月日星期级联操作
Jan 15 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
Mar 01 Javascript
JavaScript reduce和reduceRight详解
Oct 24 Javascript
jQuery动态生成Bootstrap表格
Nov 01 Javascript
vue-awesome-swiper滑块插件使用方法详解
Nov 27 Javascript
vue.js根据代码运行环境选择baseurl的方法
Feb 28 Javascript
详解js创建对象的几种方法及继承
Apr 12 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
Sep 04 Javascript
vue-resourc发起异步请求的方法
Feb 11 Javascript
用js编写留言板
Mar 17 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将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
JS 实现可停顿的垂直滚动实例代码
2016/11/23 Javascript
vue实现简单实时汇率计算功能
2017/01/15 Javascript
原生js实现放大镜特效
2017/03/08 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
基于iScroll实现内容滚动效果
2018/03/21 Javascript
Vue.js进阶知识点总结
2018/04/01 Javascript
工作中常用到的ES6语法
2018/09/04 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
Python实现的金山快盘的签到程序
2013/01/17 Python
Python中使用PyQt把网页转换成PDF操作代码实例
2015/04/23 Python
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
2015/05/02 Python
Python实现简单的四则运算计算器
2016/11/02 Python
使用Python中的tkinter模块作图的方法
2017/02/07 Python
Python开发的实用计算器完整实例
2017/05/10 Python
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
python打包压缩、读取指定目录下的指定类型文件
2018/04/12 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
2019/06/25 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
python算法题 链表反转详解
2019/07/02 Python
Python 绘制酷炫的三维图步骤详解
2019/07/12 Python
python opencv调用笔记本摄像头
2019/08/28 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
2021/02/03 Python
html5 input输入实时检测以及延时优化
2018/07/18 HTML / CSS
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
小学生元旦感言
2014/02/26 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
企业爱心捐款倡议书
2015/04/27 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
如何写好闭幕词
2019/04/02 职场文书
阿里云日志过滤器配置日志服务
2022/04/09 Servers