文章目录

  • 需求
  • 官网说明
  • 实现效果
  • 具体步骤
  • 附加需求:调节穿梭框高宽度


需求

穿梭框中显示的内容是包含多个字段的数据(把表格的几个字段在穿梭框中展示)以及修改相应的样式,查看 Element UI 官网 不足以满足我们的需求,根据需求我们自定义实现穿梭框。

官网说明

官网提供了基础的穿梭框,和自定义在搜索条件的穿梭框,但是都是显示一个字段值。

element 穿梭框 如何保存值 element ui穿梭框分页_element 穿梭框 如何保存值

自定义数据项,除了基本的el-transfer使用方法,还需要使用Scoped Slot。

element 穿梭框 如何保存值 element ui穿梭框分页_element 穿梭框 如何保存值_02

实现效果

element 穿梭框 如何保存值 element ui穿梭框分页_穿梭框内容显示不全_03


支持查询条件,显示多个字段数据的穿梭框;数据中间用---分割区分。

具体步骤

这是我们从数据库查询出来的数据,主要展示我红色框圈起来的三个字段。

element 穿梭框 如何保存值 element ui穿梭框分页_element_04

代码实现的效果:代码只展示穿梭框的内容

<el-transfer v-model="checked" :data="transferData" filterable
             filter-placeholder="请输入规则名称"
            :titles="['未选中规则', '选中规则']" @change="getObject">
  <span slot-scope="{ option }">{{ option.key }} - {{ option.label }}
    <span> ---- {{ option.ruleDesc }}</span>
  </span>
</el-transfer>
<script>
import { getSelectList } from '@/api/reqm/reqmdocchkrule'

export default {
  name: 'reqmdocchkrulealc',
  data() {
    return {
  	  // 穿梭框左侧的数据
      transferData: [],
      // 穿梭框绑定的数据,选定到右侧框中的数据项的value组成的数组
      checked: [],
    }
  },
  create() {
    this.getList()
  },
  methods: {
    // 查询列表数据
    getList() {
      getSelectList(this.queryParams).then(response => {
        if (response.data != null){
          // 有数据
          const allData = response.data
          const data = []
          for(let i = 0; i < allData.length; i++) {
            data.push({
              key: allData[i].ruleCod,
              label: allData[i].ruleNam,
              ruleDesc: allData[i].ruleDesc,
            })
          }
          this.transferData = data
        }else {
          // 无数据
        }
      }).catch(() => {
      })
    },
    // 右侧列表元素变化时触发
    getObject(value, direction, movedKeys) {
      console.log(value, direction, movedKeys, '********')
      console.log('选中的数据有:' + this.checked)
    },
  }
}
</script>

改变穿梭框中间移动的位置,如下代码是将按钮放在正中间:

style="text-align: left; display: inline-block"

穿梭框内容显示不全解决方法:

加上这个属性:render-content="renderFunc"

在 data 中定义即可:

renderFunc(h,option){
  return <span title={option.label}>{option.label}</span>
},

附加需求:调节穿梭框高宽度

由于我们显示的字段是比较长的内容,官网提供的大小不足以满足我们需求,所以想要把穿梭框的大小变大,具体实现如下:

<style scoped lang="less">
  /* 穿梭框外框高宽度 */
  /deep/ .el-transfer-panel{
    width: 600px;
    height: 400px;
  }
  /* 穿梭框内部展示列表的高宽度 */
  /deep/ .el-transfer-panel__list{
    height: 375px;
  }
</style>

效果图在文章开始已经展示了,这里就不重复展示。