下拉树理论开发中应用场景很多,然而组件并非肯定满足我的项目开发的需要,所以本人封装了一个。

阐明:该下拉树在一个table中一列展现
片段代码不能失常运行,所以次要传播的是一种解决形式的思路,有问题请斧正。

template:

<el-select                  v-model="scope.row.deptname"                  placeholder="请抉择"                  class="select-with-tree"                  filterable                  :filter-method="($event)=> filterdeptTree($event,scope.$index)">                  <el-option                  :value="scope.row.deptname"                  class="swt-option">                    <el-tree                      :ref="'deptselectree'+scope.$index"                      highlight-current                      @node-click="($event)=> changeChoosedDept($event,scope.row,scope.$index)"                      :indent="10"                      node-key="code"                      :expand-on-click-node="false"                      accordion                      :filter-node-method="filterdeptNode"                      :data="depttreelist">                      <div class="role-dept-tree-node clearfix" slot-scope="{ data }">                        <div class="tree-title-code" v-show="data.name">{{data.code}}</div>                        <div class="tree-title">{{data.name?data.name:data.code}}</div>                      </div>                    </el-tree>                  </el-option>                </el-select>

js:

/**       * select-tree搜寻联动       * filterTree为selectfilter,获取输出的内容触发filteNode       * filterNode为treefilter       * **/      filterdeptTree(val,index) {        this.$nextTick(() => {          if (this.$refs['deptselectree' + index] && this.$refs['deptselectree' + index][0]) {            this.$refs['deptselectree' + index][0].filter(val)          }        })      },      filterdeptNode(value, data) {        if (!value) return true;        var dataarr = []        if (data.name) {          dataarr.push(data.name)        }        if (data.code) {          dataarr.push(data.code)        }        var datastring = JSON.stringify(dataarr)        return datastring.indexOf(value) !== -1;      },/**       * 点击部门后即触发行对应的dept和deptname的变动       * 参数别离为:点击节点,行数据,行index       * **/      changeChoosedDept(deptdata,data,index) {        let that = this;        this.$nextTick(() => {          this.$set(data, 'dept', deptdata.code)          this.$set(data, 'deptname', deptdata.name)        })      },

css
因为相当于在select外面嵌了一个tree,所以在款式上须要本人复写原组件款式

.select-with-tree {  width: 100%;}.swt-option {  &.el-select-dropdown__item {    height: auto;    padding: 0;    &.selected {      font-weight: normal;    }  }}.role-dept-tree-node{  .tree-title-code{    float:right;    // width:150px;    text-align: right;    margin-right: 20px;  }  .tree-title{    margin-right:170px;  }}

展现成果