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 相关文章推荐
JavaScript TO HTML 转换
Jun 26 Javascript
jQuery 插件仿百度搜索框智能提示(带Value值)
Jan 22 Javascript
Jquery实现由下向上展开效果的例子
Dec 08 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
Apr 30 Javascript
基于jquery实现左右按钮点击的图片切换效果
Jan 27 Javascript
js实现新年倒计时效果
Dec 10 Javascript
JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
Sep 23 Javascript
简单实现jQuery级联菜单
Jan 09 Javascript
Vue2 使用 Echarts 创建图表实例代码
May 18 Javascript
使用JavaScript生成罗马字符的实例代码
Jun 08 Javascript
详解SPA中前端路由基本原理与实现方式
Sep 12 Javascript
小程序如何支持使用 async/await详解
Sep 12 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
Syphon 使用方法
2021/03/03 冲泡冲煮
Memcache 在PHP中的使用技巧
2010/02/08 PHP
超小PHP小马小结(方便查找后门的朋友)
2012/05/05 PHP
Php header()函数语法及使用代码
2013/11/04 PHP
PHP输出一个等腰三角形的方法
2015/05/12 PHP
yii分页组件用法实例分析
2015/12/28 PHP
yii通过小物件生成view的方法
2016/10/08 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
JavaScript触发器详解
2007/03/10 Javascript
jQuery AJAX回调函数this指向问题
2010/02/08 Javascript
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
基于Flowplayer打造一款免费的WEB视频播放器附源码
2015/09/06 Javascript
angularjs 表单密码验证自定义指令实现代码
2016/10/27 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
微信小程序内拖动图片实现移动、放大、旋转的方法
2018/09/04 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
详解JavaScript的变量
2019/04/04 Javascript
python调用shell的方法
2013/11/20 Python
Python实现网站文件的全备份和差异备份
2014/11/30 Python
基于Python实现对PDF文件的OCR识别
2016/08/05 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
python实现简单飞行棋
2020/02/06 Python
python实现提取str字符串/json中多级目录下的某个值
2020/02/27 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
2020/05/26 Python
食品安全承诺书范文
2014/08/29 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
房屋所有权证明
2014/10/20 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
放假通知
2015/04/14 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
领导离职感言
2015/08/03 职场文书
八年级作文之感恩
2019/11/22 职场文书
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS
Js类的构建与继承案例详解
2021/09/15 Javascript
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis