wangting
2024-05-08 923004d8ca3cb956d33f1990b34a5f221da30669
Source/ProjectWeb/src/components/dynamic-components/dynamic-tree.vue
@@ -1,7 +1,9 @@
<template>
  <div class="UI-dynamic" :id="'UI-dynamic-'+areasName+componentVO.oid">
    <dynamic-button v-if="componentVO.buttons && componentVO.buttons.length>0" :componentVO="componentVO"
                    :key="areasName+'buttons-'+componentVO.oid"
                    :butttonList="componentVO.buttons" :dataStore="checkDatas"
                    @afterMethod="handleRefresh"
                    :sourceData="sourceData" type="tree" style="margin-bottom: 5px;"></dynamic-button>
    <el-input
      placeholder="输入关键字进行过滤"
@@ -20,6 +22,7 @@
      node-key="oid"
      @check="checkNode"
      @current-change="changeNode"
      @node-click="clickNode"
      ref="tree">
    </el-tree>
  </div>
@@ -47,6 +50,15 @@
    inDialog: {
      type: Boolean,
      default: false
    },
    canEdit:{
      //内容是否可编辑
      type:Boolean,
      default:false
    },
    actionType:{
      //按钮操作类型
      default:""
    },
    areasName:{
      type:String,
@@ -97,7 +109,23 @@
            dataStore:newval
          });
        }
      }
      },
      deep: true,
      immediate: true
    },
    data:{
      handler(newval) {
        if(newval) {
          this.$emit("setData", {
            area: this.areasName,
            type:this.componentVO.uiComponentType,
            currentDefineVO:this.componentVO.treeDefineVO,
            data:newval
          });
        }
      },
      deep: true,
      immediate: true
    },
    sourceData:{
      handler(newval) {
@@ -105,7 +133,9 @@
        this.sourceDataMapParams=this.sourceDataMap();
        this.getParams();
        this.handleRefresh();
      }
      },
      deep: true,
      immediate: true
    }
  },
  data() {
@@ -119,13 +149,14 @@
      isMuti:false,
      data:[],
      checkDatas:[],
      currentClickNode:null,
      params:{},
      sourceDataMapParams:{}
    }
  },
  created() {
    this.getParams();
    if(!this.lazy){
    if (!this.lazy) {
      this.initData();
    }
  },
@@ -141,64 +172,62 @@
    },
    sourceDataMap: function () {
      const sourceDataMap = {};
      if (Object.keys(this.sourceData).length>0) {
        if(this.sourceData.oid ) {
      if (Object.keys(this.sourceData).length > 0) {
        if (this.sourceData.oid) {
          if (this.sourceData.oid.indexOf('@vcitreesep@') > -1) {
            this.sourceData.oid = this.sourceData.oid.split('@vcitreesep@')[1];
          }
          sourceDataMap.sourceBtmName = this.sourceBtmType;;
          sourceDataMap.sourceBtmName = this.sourceBtmType;
          sourceDataMap.sourceOid = this.sourceData.oid;
        }
        for (let i in this.sourceData) {
          let item = this.sourceData[i]
          if (item && item.constructor === Object) return;
          if (i == 'type' || i == 'context' || i == 'content') return;
          const item = this.sourceData[i]
          if (item && item.constructor === Object) continue;
          if (i == 'type' || i == 'context' || i == 'content') continue;
          sourceDataMap['sourceData["' + i + '"]'] = item
        }
      }
      if (Object.keys(this.paramVOS).length>0) {
        for (let i in this.paramVOS) {
          let item = this.paramVOS[i]
          if (item && item.constructor === Object) return;
          if (i == 'type' || i == 'context' || i == 'content') return;
          sourceDataMap['sourceData["' + i + '"]'] = item
      if (Object.keys(this.paramVOS).length > 0) {
        for (let j in this.paramVOS) {
          if (this.paramVOS[j] && this.paramVOS[j].constructor === Object) continue;
          if (j == 'type' || j == 'context' || j == 'content' || j == "getdataurl" || j == "getdatamethod" || j == "url" || j == "method" || j == "uploadfileurl" || j == "title") continue;
          sourceDataMap['sourceData["' + j + '"]'] = this.paramVOS[j]
        }
      }
      return sourceDataMap;
    },
    getParams: function () {
      let parentFieldName = "";
      if(this.componentVO.treeDefineVO.showLinkAbs){
      if (this.componentVO.treeDefineVO.showLinkAbs) {
        parentFieldName = this.componentVO.treeDefineVO.showLinkAbs.split(",")[0];
      }
      const treeParams={
        queryAllLevel:!this.lazy,
        loadType:this.componentVO.treeDefineVO.loadType,
        multipleSelect:this.isMuti,
      const treeParams = {
        queryAllLevel: !this.lazy,
        loadType: this.componentVO.treeDefineVO.loadType,
        multipleSelect: this.isMuti,
        isMuti: this.isMuti,
        isQueryAllColumn: true,
        btmname: this.componentVO.treeDefineVO.btmType,
        componentOid:this.componentVO.oid,
        uiDefineId:this.uiContext,
        valueField:this.componentVO.treeDefineVO.valueField || 'oid',
        parentFieldName:parentFieldName,
        textField:this.componentVO.treeDefineVO.treeNodeExpression,
        componentOid: this.componentVO.oid,
        uiDefineId: this.uiContext,
        valueField: this.componentVO.treeDefineVO.valueField || 'oid',
        parentFieldName: parentFieldName,
        textField: this.componentVO.treeDefineVO.treeNodeExpression,
        queryTemplate: this.sourceData.querytemplate,
        linkTypeFlag: validatenull(this.sourceData.queryType)?(validatenull(this.sourceData.linkType)?false:true):(this.sourceData.queryType==0?false:true),
        rootExpress:this.componentVO.treeDefineVO.rootExpress
        linkTypeFlag: validatenull(this.sourceData.queryType) ? (validatenull(this.sourceData.linkType) ? false : true) : (this.sourceData.queryType == 0 ? false : true),
        rootExpress: this.componentVO.treeDefineVO.rootExpress || ''
      }
      const sourceDataMapList = this.sourceDataMapParams;
      this.params = Object.assign({},treeParams, sourceDataMapList);
      this.params = Object.assign({}, treeParams, sourceDataMapList);
    },
    initData() {
      if (Object.keys(this.sourceData).length > 0 && this.isShow) {
        getTree(null,null,Object.assign({
        getTree(null, null, Object.assign({
          queryRoot: true
        }, this.params)).then(res => {
          this.data = res.data.treeData;
          this.checkDatas = [];
        }).catch(error => {
          this.$message.error(error);
        })
@@ -207,32 +236,64 @@
    loadNode(node, resolve) {
      //逐级加载
      let parentOid = (node.level === 0) ? 0 : node.data.oid;
      if (parentOid!=0 && parentOid.indexOf('@vcitreesep@') > -1) {
        parentOid= parentOid.split('@vcitreesep@')[1];
      if (parentOid != 0 && parentOid.indexOf('@vcitreesep@') > -1) {
        parentOid = parentOid.split('@vcitreesep@')[1];
      }
      const parentBtmName = (node.level === 0) ? '' : node.data.attributes.btmname;
      let params=this.params;
      if(parentOid===0){
        //params.queryRoot=true;
      const params = this.params;
      if (node.level === 0) {
        params.queryRoot = true;
      } else {
        delete params.queryRoot;
      }
      getTree(parentOid,parentBtmName,this.params).then(res => {
      getTree(parentOid, parentBtmName, params).then(res => {
        resolve(res.data.treeData)
        this.$nextTick(()=>{
          if (this.isRefresh) {
            this.$refs.tree.setCurrentKey(this.currentClickNode.data.oid);
            this.isRefresh=false;
          }
        })
      }).catch(error => {
        this.$message.error(error);
      })
    },
    checkNode(checkedNode, checkedData){
    checkNode(checkedNode, checkedData) {
      if (this.isMuti) {
        this.checkDatas=checkedData.checkedNodes;
        let checkDatas = [];
        checkedData.checkedNodes.forEach(item=>{
          checkDatas.push(item.attributes)
        })
        this.checkDatas=checkDatas;
      }
    },
    changeNode(data,node) {
    changeNode(data, node) {
      if (!this.isMuti) {
        this.checkDatas=[data];
        this.checkDatas = [data.attributes];
      }
    },
    handleRefresh(){
      this.initData();
    clickNode(data, node) {
      this.currentClickNode = node;
    },
    handleRefresh(type,data) {
      //type:add\edit\delete
      if(type=="delete" || type=="del"){
        this.$refs.tree.remove(this.currentClickNode);
        this.currentClickNode=null;
      }else{
        if (!this.lazy) {
          this.initData();
        } else {
          if (this.currentClickNode) {
            let node = this.currentClickNode.parent;
            node.loaded = false;
            node.expand();
            this.isRefresh=true;
          }
        }
      }
      this.checkDatas = [];
    }
  },
}