element穿梭框transfer与进度条组件绑定(代码片段)

白瑕 白瑕     2023-01-04     608

关键词:

Transfer与进度条组件绑定


前言

最近做的后台管理系统里使用了Element组件Transfer做了一个工作表,然后加了一个进度条来表示工作进度,我希望能将两者绑定起来;


一、实现原理

利用Element穿梭框提供的change事件来触发特定方法handleChange(),

向方法内传入参数event来获取:
发生改变的是哪边工作表( ‘right’ / ‘left’ );

传入参数tab来获取:
发生改变后关于右侧列表项的数组[ ];

使用公式进行值转换,将成品值赋值给用于决定进度条进度的data()里的this.percentage,来实时改变进度条进度.

二、实现流程

为工作表绑定change事件,绑定事件函数handleChange();
为工作表绑定v-model来绑定已经完成的事项,即右边工作表中的事项;
为工作表绑定:data来绑定全部事项,即左右工作表内的所有事项;

                <el-transfer
                  style="text-align: left; display: inline-block"
                  v-model="finishedTask"
                  :props=" key: 'id', label: 'name' "
                  :titles="['待办', '待提交']"
                  @change="handleChange"
                  :data="allTask"
                >
                </el-transfer>

data()中加入属性"percentage",赋给数字类型值,绑定到进度条组件:

              <el-progress
                :percentage="percentage"
                :color="customColors"
              ></el-progress>

data()中加入allTask数组和finishedTask数组,表示左右所有事项和右边已完成事项:

//这是10个任务,修改任务数量请连携修改进度条驱动数值;
      allTask: [
         id: 1, name: "Task1" ,
         id: 2, name: "Task2" ,
         id: 3, name: "Task3" ,
         id: 4, name: "Task4" ,
         id: 5, name: "Task5" ,
         id: 6, name: "Task6" ,
         id: 7, name: "Task7" ,
         id: 8, name: "Task8" ,
         id: 9, name: "Task9" ,
         id: 10, name: "Task10" ,
      ],
      finishedTask: [1, 3],

在methods中定义increase方法和decrease方法来实现进度条"能走"

    increase() 
      this.percentage += 10;
      if (this.percentage > 100) 
      //大于100不再相加
        this.percentage = 100;
      
    ,

    decrease() 
      this.percentage -= 10;
      if (this.percentage < 0) 
      //小于0不再减少
        this.percentage = 0;
      
    ,

定义handleChange方法来规定工作表左右比例和进度条进度的绑定规则:

     handleChange(tab, event) 
     console.log(tab,event); //输出格式: 'left', array(4)[1,2,3,4];
      this.percentage = (tab.length / this.allTask.length) * 100;
      
      //if (this.percentage == 100) 
      //  this.$message.success(
      //   "工作表已验收, " + this.userName + " , 请注意休息 ."
      // );
      
    ,

然后就可以了,最下面是进度条:

三、完整代码

我已经减掉那些无关代码了:

<template>
                <el-transfer
                  style="text-align: left; display: inline-block"
                  v-model="finishedTask"
                  :props=" key: 'id', label: 'name' "
                  :titles="['待办', '待提交']"
                  @change="handleChange"
                  :data="allTask"
                >
                </el-transfer>
                
              <el-progress
                :percentage="percentage"
                :color="customColors"
              ></el-progress>
</template>

<script>
export default 
  name: "Home",
  data() 
    return 
      percentage: 20,
      customColor: "#409eff",
      customColors: [
      //5个阶段的颜色
         color: "#6f7ad3", percentage: 20 ,
         color: "#f56c6c", percentage: 40 ,
         color: "#e6a23c", percentage: 60 ,
         color: "#1989fa", percentage: 80 ,
         color: "#5cb87a", percentage: 100 ,
      ],
      //根据各个一级菜单的id将不同图标写入一级菜单
      allTask: [
      //所有任务
         id: 1, name: "Task1" ,
         id: 2, name: "Task2" ,
         id: 3, name: "Task3" ,
         id: 4, name: "Task4" ,
         id: 5, name: "Task5" ,
         id: 6, name: "Task6" ,
         id: 7, name: "Task7" ,
         id: 8, name: "Task8" ,
         id: 9, name: "Task9" ,
         id: 10, name: "Task10" ,
      ],
      //初始已完成的任务;
      finishedTask: [1, 3],
    ;
  ,
  methods: 
  //这是规定进度条变色的方法;
    customColorMethod(percentage) 
      if (percentage < 30) 
        return "#909399";
       else if (percentage < 70) 
        return "#e6a23c";
       else 
        return "#67c23a";
      
    ,

    increase() 
      this.percentage += 10;
      if (this.percentage > 100) 
        this.percentage = 100;
      
    ,

    decrease() 
      this.percentage -= 10;
      if (this.percentage < 0) 
        this.percentage = 0;
      
    ,

    handleChange(tab, event) 
      this.percentage = (tab.length / this.allTask.length) * 100;
      if (this.percentage == 100) 
        this.$message.success(
          "工作表已验收, " + this.userName + " , 请注意休息 ."
        );
      
    ,
  ,
;
</script>

<style lang="less" scoped>
</style>

总结

transfer穿梭框组件-基于layui

在线体验github:https://github.com/9499574/layui-transfer  查看详情

ivew穿梭框transfer组件高亮显示操作值(代码片段)

项目场景:Transfer(穿梭框),双栏穿梭选择框,常用于将多个项目从一边移动到另一边。这个组件在多个数据之间选择时非常方便。所有的控制都由组件完成,只需要最后保存组件目标值即可。问题描述&... 查看详情

elementui组件中穿梭框内容显示不全解决方式

...方式有两种:1.改变穿梭框的宽度,在工程中全文搜索.el-transfer-panel,找到定义这个类的地方,修改宽度。2.鼠标移入数据时显示完整数据,用穿梭框的render-content属性。<new-transfer ref="quickbom 查看详情

vue+element树形穿梭框组件

  <divclass="organizational"><el-dialog:title="dialogTitle":visible.sync="addDialogVisible"v-if="addDialogVisible":before-close="handleClose":close-on-click-modal="false"width="80%" 查看详情

element穿梭框点击后异步

对于您这个element穿梭框点击后异步问题解答,Element穿梭框点击后异步,一般有如下几种实现方式:1.使用Ajax异步请求:将穿梭框的点击事件进行绑定,触发后发起Ajax异步请求,请求后台接口获取数据,再做相应的处理,用于展... 查看详情

数据量庞大的分页穿梭框实现(代码片段)

...,从而解决数据量庞大的问题我之前写过一篇博客:关于Element组件的穿梭框的重构介绍并实现的方法但是第二个分页的demo没有,在上一家公司匆匆解决后,没有写入自己的GitHub,有点可惜...当时可是在上班,而且太忙了,不过... 查看详情

element-ui修改源码实践--tranfer(代码片段)

....2(请选择和项目相对应的版本)3.修改内容:穿梭框组件(transfer),实现上下移动排序4.效果:        步骤从github上把项目克隆到本地全局安装yarn:npm 查看详情

element穿梭框自定义数据记录

参考技术A因为上方还有选项,实现当选择时间的时候出餐日期就会显示,没有的话就隐藏出餐日期列,所以需要根据条件判断一下是否显示,所以就用到了<spanslot-scope="option"></span>来自定义数据项,我本来想用el... 查看详情

如何在vue+element中实现选择框和穿梭框的根据拼音以及拼音首字母以及汉字的模糊搜索

1.汉字:直接添加对应的 filterable2.拼音:穿梭框和选择器的实现方式有所不同 选择器:<1>下载pinyin-match:  npmi--savepinyin-match<2>在main.js引入并注册为全局属性    importPinyinMatchfrom‘pinyin-match‘;... 查看详情

解决element弹框组件导致页面抖动问题(代码片段)

问题描述问题描述图通过上图我们可以很明显的看出来,页面会随着弹框的出现和关闭一直抖动,这是为什么呢?原因分析:其实发生该问题的原因非常简单,当弹框出现时,会导致页面的滚动条隐藏࿰... 查看详情

解决element弹框组件导致页面抖动问题(代码片段)

问题描述问题描述图通过上图我们可以很明显的看出来,页面会随着弹框的出现和关闭一直抖动,这是为什么呢?原因分析:其实发生该问题的原因非常简单,当弹框出现时,会导致页面的滚动条隐藏࿰... 查看详情

vuetransfer穿梭框(代码片段)

ElementTransfer组件默认支持单个list的穿梭现业务需要支持两个list,效果如下 实现思路:  1、有选中才可穿梭  2、已穿梭源数据减少、目标增加(双向)  边界条件:    存储旧List((用于已穿梭后切换下拉框重置... 查看详情

el-transfer高度(element版本2.13.0)

参考技术A包含关系:css:采坑:按百分比设置高度后,el-transfer选择框列表的高度显示总是有问题,原因为本例中el-transfer置于el-drawer中,需要设置el-drawer__body的高度 查看详情

element-ui环形进度条设置大小

使用绑定  :width="20"  :height="20"  这种方式  直接写样式没有效果 查看详情

codepush自定义更新弹框及下载进度条(代码片段)

CodePush热更新之自定义更新弹框及下载进度先来几张弹框效果图非强制更新场景image强制更新场景image更新包下载进度效果image核心代码这里的热更新Modal框,是封装成一个功能独立的组件来使用的,需不需要更新以及是否为强制... 查看详情

progress组件(进度条)

  progress组件:进度条  progress组件的属性:    percent:类型:number  设置百分比(0~100)    show-info:类型:布尔  在进度条右侧显示百分比    border-radius:类型:number  圆角大小    font-size:类... 查看详情

vue使用directive指令实现element中dialog等弹框组件的移动与缩放(代码片段)

前言在使用ElementUI的Dialog等弹框组件中,我们一定有这样的困扰,我们的弹框无法移动,导致下面遮罩的内容不能看到,或者我们的弹框的内容显示不完整,都会影响组件的使用体验。本小节我们通过vue的direc... 查看详情

ngFor 无法通过与 @Input 的组件绑定来迭代另一个组件

】ngFor无法通过与@Input的组件绑定来迭代另一个组件【英文标题】:ngFornotabletoiterateinanothercomponentthroughcomponentbindingwith@Input【发布时间】:2021-07-0311:58:09【问题描述】:app.component.tsimportComponentfrom\'@angular/core\';@Component(selector:\'app- 查看详情