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 相关文章推荐
Exjs 入门篇
Apr 07 Javascript
JavaScript中使用自然对数ln的方法
Jun 14 Javascript
前端jquery部分很精彩
May 03 Javascript
最常见的左侧分类菜单栏jQuery实现代码
Nov 28 Javascript
微信小程序 template模板详解及实例代码
Mar 09 Javascript
PHP实现记录代码运行时间封装类实例教程
May 08 Javascript
微信小程序canvas实现刮刮乐效果
Jul 09 Javascript
详解vue中的computed的this指向问题
Dec 05 Javascript
Vue render函数实战之实现tabs选项卡组件
Apr 22 Javascript
js实现提交前对列表数据的增删改查
Jan 16 Javascript
如何优雅地取消 JavaScript 异步任务
Mar 22 Javascript
如何在 Vue 中使用 JSX
Feb 14 Vue.js
浅谈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遍历XML文档所有节点的方法
2015/03/12 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
33种Javascript 表格排序控件收集
2009/12/03 Javascript
jQuery $.each的用法说明
2010/03/22 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
jquery 日期控件datepicker属性详细解析
2013/11/08 Javascript
jquery跟js初始化加载的多种方法及区别介绍
2014/04/02 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
Angular2 组件通信的实例代码
2017/06/23 Javascript
Node.js  REPL (交互式解释器)实例详解
2017/08/06 Javascript
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
基于javascript中的typeof和类型判断(详解)
2017/10/27 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
JavaScript基于遍历操作实现对象深拷贝功能示例
2019/03/05 Javascript
vue搜索和vue模糊搜索代码实例
2019/05/07 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
Python根据成绩分析系统浅析
2019/02/11 Python
python目标检测给图画框,bbox画到图上并保存案例
2020/03/10 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
Lancer Skincare官方网站:抗衰老皮肤护理
2020/11/20 全球购物
高中生学习的自我评价
2013/12/14 职场文书
教师绩效工资方案
2014/02/01 职场文书
社团个人总结范文
2015/03/05 职场文书
2016年国陪研修感言
2015/11/18 职场文书
CSS3 制作的书本翻页特效
2021/04/13 HTML / CSS
python tkinter实现定时关机
2021/04/21 Python