<template> 
 | 
<div id="getCatalog" > 
 | 
  
 | 
  <el-dialog title="选择要添加到的节点" v-if="showDialog"  width="50%" :append-to-body="true" :close-on-click-modal="false" :visible.sync="showDialog" :destroy-on-close="true" @close="close()" center> 
 | 
    <div> 
 | 
      <el-tree class="el-scrollbar" 
 | 
               ref="tree" 
 | 
               id="catalogTree" 
 | 
               empty-text="未知节点" 
 | 
               node-key="id" 
 | 
               default-expand-all 
 | 
               :highlight-current="false" 
 | 
               :expand-on-click-node="false" 
 | 
               :props="props" 
 | 
               :load="loadNode" 
 | 
               @node-click="nodeClickHandler" 
 | 
               lazy> 
 | 
       <span class="custom-tree-node" slot-scope="{ node, data }" style="width: 100%"> 
 | 
         <el-radio v-if="node.data.type === 0 || node.data.type === -1" style="margin-right: 0" v-model="chooseId" :label="node.data.id">{{''}}</el-radio> 
 | 
         <span v-if="node.data.type === -1 && node.level === 1" style="font-size: 12px" class="iconfont icon-ziyuan"></span> 
 | 
         <span v-if="node.data.type === 0 && node.level === 1" class="el-icon-s-home"></span> 
 | 
         <span v-if="node.data.type === 0 && node.level > 1"  class="el-icon-folder-opened"></span> 
 | 
         <span v-if="node.data.type === 1" class="iconfont icon-shexiangtou"></span> 
 | 
         <span v-if="node.data.type === 2" class="iconfont icon-zhibo"></span> 
 | 
        <span style=" padding-left: 1px">{{ node.label }}</span> 
 | 
        <span> 
 | 
          <i style="margin-left: 5rem; color: #9d9d9d; padding-right: 20px" v-if="node.data.id === defaultCatalogIdSign">默认</i> 
 | 
        </span> 
 | 
      </span> 
 | 
      </el-tree> 
 | 
    </div> 
 | 
    <div style="float: right; height: 13rem"> 
 | 
      <el-button type="primary" size="mini" @click="submit()" >确认</el-button> 
 | 
      <el-button @click="close()" size="mini">取消</el-button> 
 | 
    </div> 
 | 
  </el-dialog> 
 | 
  
 | 
</div> 
 | 
</template> 
 | 
  
 | 
  
 | 
<script> 
 | 
  
 | 
export default { 
 | 
    name: 'getCatalog', 
 | 
    beforeCreate(){ 
 | 
  
 | 
    }, 
 | 
    created() { 
 | 
        this.chooseId = this.defaultCatalogId; 
 | 
        this.defaultCatalogIdSign = this.defaultCatalogId; 
 | 
        this.initData(); 
 | 
        setTimeout(()=>{ 
 | 
          if (this.catalogIdChange)this.catalogIdChange(this.defaultCatalogId); 
 | 
        }, 100) 
 | 
  
 | 
    }, 
 | 
    props: ['platformId'], 
 | 
    data() { 
 | 
        return { 
 | 
          props: { 
 | 
            label: 'name', 
 | 
            children: 'children', 
 | 
            isLeaf: 'leaf' 
 | 
          }, 
 | 
          platformName: null, 
 | 
          defaultCatalogId: null, 
 | 
          catalogIdResult: null, 
 | 
          showDialog: false, 
 | 
          defaultCatalogIdSign: null, 
 | 
          chooseNode: null, 
 | 
          chooseId: "", 
 | 
          catalogTree: null, 
 | 
          contextmenuShow: false, 
 | 
  
 | 
        }; 
 | 
    }, 
 | 
    methods: { 
 | 
        openDialog(catalogIdResult) { 
 | 
          console.log(this.chooseId) 
 | 
          this.showDialog = true 
 | 
          this.catalogIdResult = catalogIdResult 
 | 
        }, 
 | 
        initData: function () { 
 | 
            this.getCatalog(); 
 | 
        }, 
 | 
  
 | 
        getCatalog: function(parentId, callback) { 
 | 
            let that = this; 
 | 
            this.$axios({ 
 | 
                    method:"get", 
 | 
                    url:`/api/platform/catalog`, 
 | 
                    params: { 
 | 
                        platformId: that.platformId, 
 | 
                        parentId: parentId 
 | 
                    } 
 | 
                }) 
 | 
                .then((res)=> { 
 | 
                  if (res.data.code === 0) { 
 | 
                    if (typeof(callback) === 'function') { 
 | 
                      callback(res.data.data) 
 | 
                    } 
 | 
                  } 
 | 
                }) 
 | 
                .catch(function (error) { 
 | 
                    console.log(error); 
 | 
                }); 
 | 
  
 | 
        }, 
 | 
        loadNode: function(node, resolve){ 
 | 
          if (node.level === 0) { 
 | 
            this.$axios({ 
 | 
              method:"get", 
 | 
              url:`/api/platform/info/` + this.platformId, 
 | 
            }) 
 | 
              .then((res)=> { 
 | 
                if (res.data.code === 0) { 
 | 
                  this.platformName = res.data.data.name; 
 | 
                  this.defaultCatalogId = res.data.data.catalogId; 
 | 
                  this.defaultCatalogIdSign = res.data.data.catalogId; 
 | 
                  this.chooseId = res.data.data.catalogId; 
 | 
                  resolve([ 
 | 
                   { 
 | 
                      name: this.platformName, 
 | 
                      id:   res.data.data.deviceGBId, 
 | 
                      type:  0 
 | 
                    } 
 | 
                  ]); 
 | 
                } 
 | 
              }) 
 | 
              .catch(function (error) { 
 | 
                console.log(error); 
 | 
              }); 
 | 
          } 
 | 
          if (node.level >= 1){ 
 | 
            this.getCatalog(node.data.id, resolve) 
 | 
          } 
 | 
        }, 
 | 
        nodeClickHandler: function (data, node, tree){ 
 | 
         this.chooseId = data.id; 
 | 
        }, 
 | 
        close: function() { 
 | 
          this.chooseId = null; 
 | 
          this.showDialog = false; 
 | 
        }, 
 | 
        submit: function() { 
 | 
          console.log(this.chooseId) 
 | 
          if (this.chooseId === null) { 
 | 
            this.$message({ 
 | 
              showClose: true, 
 | 
              message: '未选择任何节点,', 
 | 
              type: 'warning' 
 | 
            }); 
 | 
            return; 
 | 
          } 
 | 
          if (this.catalogIdResult)this.catalogIdResult(this.chooseId) 
 | 
          this.showDialog = false; 
 | 
        }, 
 | 
    } 
 | 
}; 
 | 
</script> 
 | 
  
 | 
<style> 
 | 
#catalogTree{ 
 | 
  display: inline-block; 
 | 
} 
 | 
</style> 
 |