ludc
2024-03-25 d1b82bdc296e7bf882f50015a56c99b05b5ff9fd
Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue
@@ -4,7 +4,7 @@
    <!--    左侧菜单-->
    <el-aside>
      <basic-container>
        <div style="height: calc(100vh - 142px);!important;">
        <div ref="TreeBox" style="height: calc(100vh - 144px);!important;">
          <div class="headerCon" style="display: flex; flex-wrap: wrap;margin-bottom: 5px">
            <el-button v-if="permissionList.TreeAddStatus" plain size="small" type="primary" @click="TreeAdd">添加
            </el-button>
@@ -44,25 +44,25 @@
            </el-button>
          </div>
          <!-- 左侧树-->
          <avue-tree ref="tree" v-model="CloneTreeAvueform" v-loading="loading" :data="CloneTreedata"
                     :defaultExpandAll="false"
                     :option="Treeoption"
                     class="classifyTree"
                     style="height: 690px"
                     @node-click="nodeClick"
          >
            <template slot-scope="{ node, data }" class="el-tree-node__label">
              <el-tooltip :content="$createElement('div', { domProps: { innerHTML: node.label } })" class="item"
                          effect="dark"
                          open-delay="500"
                          placement="right-start">
          <div style="height:  calc(100vh - 242px);overflow: auto">
            <avue-tree ref="tree" v-model="CloneTreeAvueform" v-loading="loading" :data="CloneTreedata"
                       :defaultExpandAll="false"
                       :option="Treeoption"
                       class="classifyTree"
                       @node-click="nodeClick"
            >
              <template slot-scope="{ node, data }" class="el-tree-node__label">
                <el-tooltip :content="$createElement('div', { domProps: { innerHTML: node.label } })" class="item"
                            effect="dark"
                            open-delay="500"
                            placement="right-start">
                <span style="font-size: 14px;">
                {{ (node || {}).label }}
              </span>
              </el-tooltip>
            </template>
          </avue-tree>
                </el-tooltip>
              </template>
            </avue-tree>
          </div>
        </div>
        <!-- 树节点添加对话框-->
@@ -136,7 +136,7 @@
      </basic-container>
    </el-aside>
    <el-main>
      <basic-container style="height: calc(100vh - 150px);">
      <basic-container>
        <!--        右侧表格-->
        <avue-tabs :option="tabOption" @change="handleChange"></avue-tabs>
        <span v-if="type.prop==='tab1'">
@@ -164,31 +164,19 @@
                         @click="TemRefresh">刷新</el-button>
              <el-button v-if="permissionList.CloneBtnStuatus" plain size="small" type="primary" @click="CloneBtn">从其它模板克隆</el-button>
              <!--              查询对话框-->
           <el-dialog :visible.sync="FindFormVisible" append-to-body title="高级查询">
              <div>
                <el-button size="small" type="primary" @click="AdvQueries">查询</el-button>
                <el-button size="small" type="primary">重置</el-button>
              </div>
             <div style="padding-left: 80px;margin-top: 15px;">
               <template v-for="(value, key) in FindSelect">
                <div style="display: flex; justify-content: space-around; width: 85%; margin-bottom: 15px">
                <el-select v-model="FindSelect[key]" placeholder="请选择" style="width: 28%"
                           @change="handleSelectChange(key)">
                  <el-option label="模板编号" value="0"></el-option>
                  <el-option label="模板名称" value="1"></el-option>
                  <el-option label="模板描述" value="2"></el-option>
                  <el-option label="版本号" value="3"></el-option>
                  <el-option label="状态" value="4"></el-option>
                 </el-select>
                <el-select v-model="condition[0]" placeholder="请选择" style="width: 15%">
                  <el-option label="包含" value="0"></el-option>
                  <el-option label="等于" value="1"></el-option>
                </el-select>
              <el-input v-model="QueryArray[key]" style="width: 49%"></el-input>
          <span> <i class="el-icon-delete" style="font-size: 22px;margin-top:8px;margin-left: 10px"/></span>
           <el-dialog :visible.sync="FindFormVisible" append-to-body title="高级查询" width="30%" @close="searchReset">
             <div style="text-align: center; margin-top: 5px;">
              <el-select v-model="searchSelect" style="width: 35%">
                <el-option v-for="item in crudFindTreeArray" :key="item.field" :label="item.title"
                           :value="item.queryField"></el-option>
              </el-select>
                <el-input v-model="SearchValue"
                          placeholder="请输入关键字进行查询" style="width: 45%; margin-left: 5px;"></el-input>
             </div>
          </template>
        </div>
                  <span slot="footer" class="dialog-footer">
                <el-button type="primary" @click="advQueries">查询</el-button>
                <el-button type="danger" @click="searchReset">重置</el-button>
                  </span>
           </el-dialog>
              <!--            模板克隆  -->
                <el-dialog :before-close="cloneClose" :visible.sync="CloneVisible" append-to-body title="克隆模板">
@@ -350,7 +338,6 @@
  TreeSave,
  TreeDel,
  TreeCheckDel,
  TreeObjcet,
  TreeEnable,
  TreeDeactivate,
  gridCodeClassifyTemplate,
@@ -379,6 +366,40 @@
  name: "classifyTrees.vue",
  data() {
    return {
      crudFindTreeArray: [
        {
          title: '模板编号',
          field: 'id',
          fieldType: 'text',
          queryField: 'id'
        },
        {
          title: '模板名称',
          field: 'name',
          fieldType: 'text',
          queryField: 'name'
        },
        {
          title: '模板描述',
          field: 'description',
          fieldType: 'text',
          queryField: 'description'
        },
        {
          title: '版本号',
          field: 'revisionSeq',
          fieldType: 'text',
          queryField: 'revisionSeq'
        },
        {
          title: '状态',
          field: 'lcStatusText',
          fieldType: 'text',
          queryField: 'lcStatusText'
        },
      ],
      searchSelect: 'id',
      SearchValue: '',
      allButtons: Boolean,
      btnAuthList: [],
      activeName: 'first',
@@ -513,7 +534,7 @@
      Treedata: [],
      CloneTreedata: [],
      Treeoption: {
        height:'auto',
        height: 'auto',
        addBtn: false,
        editBtn: false,
        delBtn: false,
@@ -564,7 +585,7 @@
          },
          {
            label: '描述',
            prop: 'desc',
            prop: 'description',
            type: 'textarea',
            span: 24
          }
@@ -670,22 +691,31 @@
      showEditBtn: false,
      //传递给分类授权子组件对话框的当前选中的分类节点信息
      classifyData: "",
    }
  },
  watch: {},
  mounted() {
    this.type = this.tabOption.column[0];
    this.type = this.tabOption.column[0] || {label: '基本信息', prop: 'tab1'};
    this.getAttr();
    const treeEle = this.$refs.tree.$el
    treeEle.addEventListener('click', (e) => {
      if (e.target.nodeName !== 'SPAN') {
    // const treeEle = this.$refs.tree.$el;
    const TreeBox = this.$refs.TreeBox;
    // console.log(this.$refs.TreeBox)
    // treeEle.addEventListener('click', (e) => {
    //   console.log('2')
    //   if (e.target.nodeName !== 'SPAN') {
    //     this.$refs.tree.setCurrentKey(null);
    //     this.nodeClickList = {};
    //     this.TreeFlagCode = true;
    //     this.allButtons = false;
    //   }
    // }, true)
    TreeBox.addEventListener('click', (e) => {
      if (e.target.nodeName !== 'SPAN' && e.target.nodeName !== 'BUTTON') {
        this.$refs.tree.setCurrentKey(null);
        this.nodeClickList = {};
        this.TreeFlagCode = true;
        this.allButtons = false;
        // this.$nextTick(()=>{
        //   this.btnAuthList = [];
        // })
      }
    }, true)
  },
@@ -710,7 +740,7 @@
    },
    treeStyle() {
      return {
        height: this.btnAuthList.length > 0 ? '620px' : '785px',
        height: this.allButtons ? '610px' : '690px',
      };
    },
    crudTreeOption() {
@@ -769,7 +799,7 @@
          codeClassifyOid: ''
        }
      }
    }
    },
  },
  created() {
  },
@@ -1108,7 +1138,6 @@
        this.loading = false;
      }
    },
    async Deactivate() {
      if (Object.keys(this.nodeClickList).length < 1) {
        this.$message.warning('请先从树上选择一条数据');
@@ -1153,7 +1182,7 @@
    },
    //树点击事件
    async nodeClick(data) {
      const response = this.findTheTopLevelNode(data,this.Treedata)
      const response = this.findTheTopLevelNode(data, this.Treedata)
      this.classifyData = response;
      // console.log(response)
      // console.log('response',response.attributes.id)
@@ -1171,10 +1200,9 @@
      this.crudArray = []
      try {
        this.requestCount += 1;
        const [res1, res2, res3] = await Promise.all([
          TreeObjcet(data.oid),
        const [res1, res2] = await Promise.all([
          getObjectByOid(data.oid),
          gridCodeClassifyTemplate({'conditionMap[codeclassifyoid]': data.oid}),
          getObjectByOid(data.oid)
        ]);
        this.FlagObj = res1.data.data;
        this.Formlist = res2.data.data.filter(item => {
@@ -1192,7 +1220,7 @@
          this.ProData = [];
          this.crudOid = ''
        }
        this.TreeEditObj = res3.data.data;
        this.TreeEditObj = res1.data.data;
        if (this.TreeEditObj.isParticipateCheck === null || this.TreeEditObj.isParticipateCheck === undefined || this.TreeEditObj.isParticipateCheck === "") {
          this.$set(this.TreeEditObj, "isParticipateCheck", 1)
          return
@@ -1201,10 +1229,9 @@
        this.$message.error(error);
      }
    },
    // 递归查找顶层节点Id
    findTheTopLevelNode(data,TreeData){
      if(data.parentId === ""){
    findTheTopLevelNode(data, TreeData) {
      if (data.parentId === "") {
        return data;
      }
      const parentNode = this.findParentNode(data.parentId, TreeData);
@@ -1213,7 +1240,7 @@
      }
    },
    // 递归查找出来多层节点的父节点
    findParentNode(parentId, TreeData){
    findParentNode(parentId, TreeData) {
      for (const node of TreeData) {
        if (node.oid === parentId) {
          return node;
@@ -1278,34 +1305,28 @@
    handleChange(column) {
      this.type = column;
    },
    AdvQueries() {
      this.FindFormVisible = false
      //如果全部为空 allEmpty为true
      const allEmpty = Object.values(this.QueryArray).every(value => !value);
      //如果全部为空,点击查询出现所有数据
      if (allEmpty) {
        gridCodeClassifyTemplate().then(res => {
          this.Formlist = res.data.data
        })
    advQueries() {
      if (this.SearchValue === "") {
        this.$message.warning('请输入要查询的内容!');
      } else {
        //默认是等于
        gridCodeClassifyFindTemplate({'conditionMap[id]': this.QueryArray.id},
          {'conditionMap[name]': this.QueryArray.name},
          {'conditionMap[description]': this.QueryArray.description},
          {'conditionMap[revisionValue]': this.QueryArray.revisionValue},
          {'conditionMap[lcStatus]': this.QueryArray.lcStatus}
        ).then(res => {
          this.Formlist = res.data.data
        })
        const condition = {
          'conditionMap[codeclassifyoid]': this.nodeClickList.oid,
          [`conditionMap[${this.searchSelect}]`]: this.SearchValue
        };
        gridCodeClassifyFindTemplate(condition).then(res => {
          if (res.data.data.length > 0) {
            this.Formlist = res.data.data;
          } else {
            this.$message.error('暂未查询到相关模板!')
          }
          this.FindFormVisible = false;
        });
      }
    },
    //模板管理渲染
    CrudRend() {
      gridCodeClassifyTemplate({'conditionMap[codeclassifyoid]': this.nodeClickList.oid}).then(res => {
        this.Formlist = res.data.data
      })
    searchReset() {
      this.SearchValue = "";
      this.searchSelect = 'id'
    },
    //模板管理表格添加
    CrudRowSave(row, done) {
      if (this.nodeClickList.length <= 0) {
@@ -1503,9 +1524,9 @@
</script>
<style lang="scss" scoped>
.el-container {
  height: 100%;
}
//.el-container {
//  height: 100%;
//}
.el-aside {
  //height: calc(100% - 30px);
@@ -1550,4 +1571,9 @@
.headerCon > .el-button:nth-child(9) {
  margin-left: 0;
}
///deep/.el-scrollbar__bar.is-vertical{
//  width: 8px;
//}
</style>