vue+element-ui下拉框--下拉table

news/2024/7/10 22:43:05 标签: vue.js, es6, css, html

项目中有一个需求,用户点击下拉框,下拉列表为一个表格,但是element里面没有这个组件,于是组装一个,效果如下:
在这里插入图片描述
选择后:
在这里插入图片描述
.vue:

<el-form-item label="请选择用户" prop="member" style="width: 100%;">
     <el-input
         style="width:400%;"
         placeholder="选择用户"
         v-model="formInline.member"      //  选择后的结果
         :suffix-icon="showTree?'el-icon-arrow-up':'el-icon-arrow-down'"   //  input框上下箭头
         @click.native="deptogglePanel($event)"      // table显示隐藏
         size="medium"
         readonly="readonly"  // input只读
     ></el-input>
     <div v-if="showTree" class="treeDiv" ref="tableList">
         <el-table 
             @row-click="handleRegionNodeClick"     // 点击table获取点击行信息后及关闭table
             ref="moviesTable" 
             :data="memberList"      // table数据源
             border
             :cell-style="getCellStyle"      // table单元格样式
             :header-cell-style="getHeaderCellStyle"      // table头部单元格样式
             >
             <el-table-column
                 v-for="(item, index) in Columns"    // table列数据
                 :key="index"
                 :prop="item.prop"
                 :label="item.label"
                 :show-overflow-tooltip="true"      // 超出显示提示框
                 >
             </el-table-column>
         </el-table>
     </div>
</el-form-item>

.js:

<script type="text/ecmascript-6">
export default {
  data() {
    return {
        formInline: {
            member: '',
        },
        memberList: [],      // 用户list
        showTree: false,
        selectTableId: '',   //  table选中行id
        Columns: [
            {
                prop: 'memberName',
                label: '用户名'
            },
            {
                prop: 'tel',
                label: '手机号码'
            },
            {
                prop: 'code',
                label: '编码'
            },
        ]
    }
  },
  mounted () {
      this.getMemberList()
  },
  methods: {
      // 用户
      getMemberList () {
          this.$get('/xxx/xxx', {page: 1, rows:10000}).then(res => {
              this.memberList = res.rows
          })
      },
      // 表格html" title=css>css
      getCellStyle () {
            return "text-align:center; "
      },
      getHeaderCellStyle () {
            return "background: rgba(9, 37, 56,0.1);text-align:center; background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%);padding: 4px 5px;"
      },
      // 点击input 阻止冒泡 控制table显示隐藏
        deptogglePanel (event) {
            event || (event = window.event)
            event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = true)
            this.showTree ? this.tableHide() : this.tableShow()
        },
        tableShow() {
            this.showTree = true
            document.addEventListener('click', this.tableHideList, false)
        },
        tableHide() {
            this.showTree = false
            document.addEventListener('click', this.tableHideList, false)
        },
        tableHideList(e) {
            if (this.$refs.tableList&& !this.$refs.tableList.contains(e.target)) {
                this.tableHide()
            }
        },
        // 点击table节点
        handleRegionNodeClick (data) {
            this.selectTableId = data.id
            this.formInline.member = data.memberName // 用户名字
            this.showTree = false
        },
  }
}
</script>

.html" title=css>css:

.treeDiv{
      position:absolute;
      top:40px;
      left:-1px;
      z-index:1000;
      width: 868px;
      overflow: auto;
      max-height: 400px;
      .el-table{
          border: 1px solid #ccc;
          border-radius: 6px;
      }
      .el-table /deep/ td{
            padding: 4px 0;
      }
  }

http://www.niftyadmin.cn/n/1845596.html

相关文章

iOS 接入支付宝SDK 流程

2019独角兽企业重金招聘Python工程师标准>>> iOS 接入支付宝SDK 流程 1&#xff1a;先与支付宝签约&#xff0c;获得商户ID&#xff08;partner&#xff09;和账号ID&#xff08;seller&#xff09; 2&#xff1a;下载相应的公钥私钥文件&#xff08;加密签名用&…

【Flutter 实战】动画序列、共享动画、路由动画

老孟导读&#xff1a;此篇文章是 Flutter 动画系列文章第四篇&#xff0c;本文介绍动画序列、共享动画、路由动画。 动画序列 Flutter中组合动画使用Interval&#xff0c;Interval继承自Curve&#xff0c;用法如下&#xff1a; Animation _sizeAnimation Tween(begin: 100.0…

前端浏览器兼容性问题解决

前端浏览器兼容问题总结 前端解决不同浏览器及不同版本的兼容性问题 浏览器兼容问题一 &#xff1a;不同浏览器的标签默认的外补丁和内补丁不同 问题症状&#xff1a;随便写几个标签&#xff0c;不加样式控制的情况下&#xff0c;各自的margin和padding差异较大。 解决方案&a…

【Flutter 实战】自定义动画-涟漪和雷达扫描

老孟导读&#xff1a;此篇文章是 Flutter 动画系列文章第五篇&#xff0c;本文介绍2个自定义动画&#xff1a;涟漪和雷达扫描效果。 涟漪 实现涟漪动画效果如下&#xff1a; 此动画通过 CustomPainter 绘制配合 AnimationController 动画控制实现&#xff0c;定义动画控制部分…

移动端h5兼容ios和Android

viewport <meta charset"utf-8"> <!--主要I是强制让文档的宽度与设备宽度保持1:1&#xff0c;最大宽度1.0&#xff0c;禁止屏幕缩放。--> <meta content"widthdevice-width,initial-scale1.0,maximum-scale1.0,user-scalableno" name"…

【Flutter 实战】17篇动画系列文章带你走进自定义动画

老孟导读&#xff1a;Flutter 动画系列文章分为三部分&#xff1a;基础原理和核心概念、系统动画组件、8篇自定义动画案例&#xff0c;共17篇。 动画核心概念 在开发App的过程中&#xff0c;自定义动画必不可少&#xff0c;Flutter 中想要自定义动画&#xff0c;首先要理解 Fl…

关于事件冒泡、事件捕获和事件委托

在javascript里&#xff0c;事件委托是很重要的一个东西&#xff0c;事件委托依靠的就是事件冒泡和捕获的机制&#xff0c;我先来解释一下事件冒泡和事件捕获&#xff1a; 事件冒泡会从当前触发的事件目标一级一级往上传递&#xff0c;依次触发&#xff0c;直到document为止。 …

js的原型和原型链

构造函数创建对象&#xff1a; function Person() {} var person new Person(); person.name Kevin; console.log(person.name) // KevinPerson 就是一个构造函数&#xff0c;我们使用 new 创建了一个实例对象 person prototype 每个函数都有一个 prototype 属性 每一个Ja…