3 changed files with 441 additions and 4 deletions
			
			
		- 
					13src/views/archiveUtilize/archiveSearch/index.vue
 - 
					425src/views/archiveUtilize/archiveSearch/module/resultList.vue
 - 
					7src/views/system/archivesClassify/module/tableList.vue
 
@ -0,0 +1,425 @@ | 
				
			|||
<template> | 
				
			|||
  <div class="result-main"> | 
				
			|||
    <div class="result-left"> | 
				
			|||
      <el-collapse v-model="activeNames" @change="handleChange"> | 
				
			|||
        <el-collapse-item title="全宗" name="1"> | 
				
			|||
          <el-input | 
				
			|||
            v-model="filterFondsText" | 
				
			|||
            class="quick-search" | 
				
			|||
            placeholder="快速检索" | 
				
			|||
            suffix-icon="el-icon-search" | 
				
			|||
          /> | 
				
			|||
          <el-tree | 
				
			|||
            ref="tree" | 
				
			|||
            :data="fondsOptions" | 
				
			|||
            show-checkbox | 
				
			|||
            default-expand-all | 
				
			|||
            node-key="id" | 
				
			|||
            :props="{children: 'children', label: 'fondsName'}" | 
				
			|||
            :filter-node-method="filterFondsNode" | 
				
			|||
            @check-change="getFondsCheckedKeys" | 
				
			|||
          /> | 
				
			|||
        </el-collapse-item> | 
				
			|||
        <el-collapse-item title="档案门类" name="2"> | 
				
			|||
          <el-input | 
				
			|||
            v-model="filterCategoryText" | 
				
			|||
            class="quick-search" | 
				
			|||
            placeholder="快速检索" | 
				
			|||
            suffix-icon="el-icon-search" | 
				
			|||
          /> | 
				
			|||
          <el-tree | 
				
			|||
            ref="treeCategory" | 
				
			|||
            :data="categoryOptions" | 
				
			|||
            show-checkbox | 
				
			|||
            default-expand-all | 
				
			|||
            node-key="id" | 
				
			|||
            :props="{children: 'children', label: 'cnName'}" | 
				
			|||
            :filter-node-method="filterCategoryNode" | 
				
			|||
            @check-change="getCategoryCheckedKeys" | 
				
			|||
          /> | 
				
			|||
        </el-collapse-item> | 
				
			|||
        <el-collapse-item title="档案分类" name="3"> | 
				
			|||
          <el-input | 
				
			|||
            v-model="filterClassifyText" | 
				
			|||
            class="quick-search" | 
				
			|||
            placeholder="快速检索" | 
				
			|||
            suffix-icon="el-icon-search" | 
				
			|||
          /> | 
				
			|||
          <el-tree | 
				
			|||
            ref="treeClassify" | 
				
			|||
            :data="classifyOptions" | 
				
			|||
            show-checkbox | 
				
			|||
            default-expand-all | 
				
			|||
            node-key="id" | 
				
			|||
            :props="{children: 'children', label: 'name'}" | 
				
			|||
            :filter-node-method="filterClassifyNode" | 
				
			|||
            @check-change="getClassifyCheckedKeys" | 
				
			|||
          /> | 
				
			|||
        </el-collapse-item> | 
				
			|||
        <el-collapse-item title="档案层级" name="4"> | 
				
			|||
          <el-input | 
				
			|||
            v-model="filterLevelText" | 
				
			|||
            class="quick-search" | 
				
			|||
            placeholder="快速检索" | 
				
			|||
            suffix-icon="el-icon-search" | 
				
			|||
          /> | 
				
			|||
          <el-tree | 
				
			|||
            ref="treeLevel" | 
				
			|||
            :data="levelOptions" | 
				
			|||
            show-checkbox | 
				
			|||
            default-expand-all | 
				
			|||
            node-key="id" | 
				
			|||
            :props="{children: 'children', label: 'label'}" | 
				
			|||
            :filter-node-method="filterLevelNode" | 
				
			|||
            @check-change="getLevelCheckedKeys" | 
				
			|||
          /> | 
				
			|||
        </el-collapse-item> | 
				
			|||
      </el-collapse> | 
				
			|||
    </div> | 
				
			|||
    <div class="result-right"> | 
				
			|||
      <div class="right-header"> | 
				
			|||
        <div class="head-search"> | 
				
			|||
          <el-select | 
				
			|||
            v-model="status" | 
				
			|||
            multiple | 
				
			|||
            collapse-tags | 
				
			|||
            placeholder="状态(支持多选)" | 
				
			|||
          > | 
				
			|||
            <el-option | 
				
			|||
              v-for="item in statusOptions" | 
				
			|||
              :key="item.value" | 
				
			|||
              :label="item.label" | 
				
			|||
              :value="item.value" | 
				
			|||
            /> | 
				
			|||
          </el-select> | 
				
			|||
          <div class="search-input"> | 
				
			|||
            <el-input v-model="keyword" placeholder="请输入检索关键字" class="input-with-select"> | 
				
			|||
              <el-button slot="append" icon="el-icon-search">搜索</el-button> | 
				
			|||
            </el-input> | 
				
			|||
          </div> | 
				
			|||
          <span class="change-search">高级搜索</span> | 
				
			|||
        </div> | 
				
			|||
        <div class="search-tip"> | 
				
			|||
          检索 “<span>合同</span>” 成功获得<i>30</i>条结果 | 
				
			|||
        </div> | 
				
			|||
      </div> | 
				
			|||
      <div class="result-list"> | 
				
			|||
        <div class="result-item">1</div> | 
				
			|||
      </div> | 
				
			|||
    </div> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
 | 
				
			|||
<script > | 
				
			|||
import { FetchFondsAll } from '@/api/system/fonds' | 
				
			|||
import { FetchCategoryMenu } from '@/api/system/category/category' | 
				
			|||
export default { | 
				
			|||
  name: 'ResultList', | 
				
			|||
  data() { | 
				
			|||
    return { | 
				
			|||
      activeNames: ['1'], | 
				
			|||
      filterFondsText: '', | 
				
			|||
      fondsOptions: [], | 
				
			|||
      filterCategoryText: '', | 
				
			|||
      categoryOptions: [], | 
				
			|||
      filterLevelText: '', | 
				
			|||
      levelOptions: [ | 
				
			|||
        { | 
				
			|||
          label: '原文', | 
				
			|||
          value: '4' | 
				
			|||
        }, | 
				
			|||
        { | 
				
			|||
          label: '文件', | 
				
			|||
          value: '3' | 
				
			|||
        }, | 
				
			|||
        { | 
				
			|||
          label: '案卷', | 
				
			|||
          value: '2' | 
				
			|||
        }, | 
				
			|||
        { | 
				
			|||
          label: '项目', | 
				
			|||
          value: '1' | 
				
			|||
        } | 
				
			|||
      ], | 
				
			|||
      filterClassifyText: '', | 
				
			|||
      classifyOptions: [], | 
				
			|||
      statusOptions: [], | 
				
			|||
      status: null, | 
				
			|||
      keyword: '' | 
				
			|||
    } | 
				
			|||
  }, | 
				
			|||
  watch: { | 
				
			|||
    filterFondsText(val) { | 
				
			|||
      this.$refs.tree.filter(val) | 
				
			|||
    }, | 
				
			|||
    filterCategoryText(val) { | 
				
			|||
      this.$refs.treeCategory.filter(val) | 
				
			|||
    }, | 
				
			|||
    filterLevelText(val) { | 
				
			|||
      this.$refs.treeLevel.filter(val) | 
				
			|||
    }, | 
				
			|||
    filterClassifyText(val) { | 
				
			|||
      this.$refs.treeClassify.filter(val) | 
				
			|||
    } | 
				
			|||
  }, | 
				
			|||
  mounted() { | 
				
			|||
    // 延迟模拟请求数据 | 
				
			|||
    setTimeout(() => { | 
				
			|||
      this.getFondsDatas() | 
				
			|||
      this.getCategoryDataTree() | 
				
			|||
    }, 300) | 
				
			|||
  }, | 
				
			|||
  methods: { | 
				
			|||
    getFondsDatas() { | 
				
			|||
      FetchFondsAll().then(res => { | 
				
			|||
        this.fondsOptions = res | 
				
			|||
      }) | 
				
			|||
    }, | 
				
			|||
    filterData(data) { | 
				
			|||
      const result = [] | 
				
			|||
      for (const node of data) { | 
				
			|||
        if (node.isType === 2) { | 
				
			|||
          const filteredChildren = node.children.filter(child => child.isType !== 3) | 
				
			|||
          node.children = filteredChildren | 
				
			|||
          result.push(node) | 
				
			|||
        } else if (node.children && node.children.length > 0) { | 
				
			|||
          const filteredChildren = this.filterData(node.children) | 
				
			|||
          result.push(...filteredChildren) | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
      return result | 
				
			|||
    }, | 
				
			|||
    filterArchivesClasses(data, result = []) { | 
				
			|||
      if (data && data.length > 0) { | 
				
			|||
        for (let i = 0; i < data.length; i++) { | 
				
			|||
          const archivesClasses = data[i].archivesClasses | 
				
			|||
          if (archivesClasses && archivesClasses.length > 0) { | 
				
			|||
            result.push(...archivesClasses) | 
				
			|||
          } | 
				
			|||
          this.filterArchivesClasses(data[i].children, result) | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
      return result | 
				
			|||
    }, | 
				
			|||
    getCategoryDataTree() { | 
				
			|||
      FetchCategoryMenu().then(res => { | 
				
			|||
        this.categoryOptions = this.filterData(res) | 
				
			|||
        this.classifyOptions = this.filterArchivesClasses(res) | 
				
			|||
      }) | 
				
			|||
    }, | 
				
			|||
    handleChange(val) { | 
				
			|||
      console.log(val) | 
				
			|||
    }, | 
				
			|||
    filterFondsNode(value, data) { | 
				
			|||
      if (!value) return true | 
				
			|||
      return data.fondsName.indexOf(value) !== -1 | 
				
			|||
    }, | 
				
			|||
    filterCategoryNode(value, data) { | 
				
			|||
      if (!value) return true | 
				
			|||
      return data.cnName.indexOf(value) !== -1 | 
				
			|||
    }, | 
				
			|||
    filterLevelNode(value, data) { | 
				
			|||
      if (!value) return true | 
				
			|||
      return data.label.indexOf(value) !== -1 | 
				
			|||
    }, | 
				
			|||
    filterClassifyNode(value, data) { | 
				
			|||
      if (!value) return true | 
				
			|||
      return data.name.indexOf(value) !== -1 | 
				
			|||
    }, | 
				
			|||
    getFondsCheckedKeys() { | 
				
			|||
      const checkedKeys = this.$refs.tree.getCheckedNodes() | 
				
			|||
      console.log('fondsKeys', checkedKeys) | 
				
			|||
    }, | 
				
			|||
    getCategoryCheckedKeys() { | 
				
			|||
      const checkedKeys = this.$refs.treeCategory.getCheckedNodes() | 
				
			|||
      console.log('categoryKeys', checkedKeys) | 
				
			|||
    }, | 
				
			|||
    getClassifyCheckedKeys() { | 
				
			|||
      const checkedKeys = this.$refs.treeClassify.getCheckedNodes() | 
				
			|||
      console.log('classifysKeys', checkedKeys) | 
				
			|||
    }, | 
				
			|||
    getLevelCheckedKeys() { | 
				
			|||
      const checkedKeys = this.$refs.treeLevel.getCheckedNodes() | 
				
			|||
      console.log('levelsKeys', checkedKeys) | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
</script> | 
				
			|||
 | 
				
			|||
<style lang='scss' scoped> | 
				
			|||
.result-main{ | 
				
			|||
  display: flex; | 
				
			|||
  justify-content: space-between; | 
				
			|||
  height: calc(100vh - 140px); | 
				
			|||
  .result-left{ | 
				
			|||
    position: relative; | 
				
			|||
    width: 265px; | 
				
			|||
    height: calc(100%); | 
				
			|||
    padding: 20px; | 
				
			|||
    background-color: #fff; | 
				
			|||
    box-shadow: 4px 0px 4px 0px rgba(0,0,0,0.04); | 
				
			|||
    z-index: 9999; | 
				
			|||
    ::v-deep .el-collapse{ | 
				
			|||
      border: none; | 
				
			|||
      height: calc(100%); | 
				
			|||
      overflow: hidden; | 
				
			|||
      overflow-y: scroll; | 
				
			|||
      .el-collapse-item__header{ | 
				
			|||
        padding-left: 13px; | 
				
			|||
        height: 32px; | 
				
			|||
        background-color: #F3F6FA; | 
				
			|||
        border-radius: 3px 3px 3px 3px; | 
				
			|||
        opacity: 1; | 
				
			|||
        border: 1px solid #CBD1DC; | 
				
			|||
        .el-collapse-item__arrow{ | 
				
			|||
          // margin: 0; | 
				
			|||
          // text-align: right; | 
				
			|||
        } | 
				
			|||
        .el-icon-arrow-right:before{ | 
				
			|||
          font-family: "iconfont" !important; | 
				
			|||
          font-style: normal; | 
				
			|||
          -webkit-font-smoothing: antialiased; | 
				
			|||
          -moz-osx-font-smoothing: grayscale; | 
				
			|||
          content: "\e629"; | 
				
			|||
          font-size: 6px; | 
				
			|||
          color: #545B65; | 
				
			|||
        } | 
				
			|||
        .el-collapse-item__arrow.is-active{ | 
				
			|||
          transform: rotate(180deg); | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
      .el-collapse-item{ | 
				
			|||
        margin-bottom: 16px; | 
				
			|||
        .el-collapse-item__wrap{ | 
				
			|||
          padding: 12px; | 
				
			|||
          margin-top: -1px; | 
				
			|||
          border: 1px solid #CBD1DC; | 
				
			|||
          // border-top: none; | 
				
			|||
          border-radius: 0 0 3px 3px; | 
				
			|||
 | 
				
			|||
        } | 
				
			|||
        .el-collapse-item__content{ | 
				
			|||
          padding-bottom: 0; | 
				
			|||
          .quick-search{ | 
				
			|||
            margin-bottom: 16px; | 
				
			|||
          } | 
				
			|||
          .el-tree{ | 
				
			|||
            max-height: calc(100vh/4 - 25px); | 
				
			|||
            overflow: hidden; | 
				
			|||
            overflow-y: scroll; | 
				
			|||
            .el-tree-node__content { | 
				
			|||
              height: 30px; | 
				
			|||
            } | 
				
			|||
            .el-tree-node__expand-icon{ | 
				
			|||
              font-size: 12px; | 
				
			|||
              display: none; | 
				
			|||
            } | 
				
			|||
            .el-tree-node__label{ | 
				
			|||
              font-size: 14px; | 
				
			|||
            } | 
				
			|||
          } | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
  .result-right{ | 
				
			|||
    flex: 1; | 
				
			|||
    // background-color: #fff; | 
				
			|||
    .right-header{ | 
				
			|||
      padding: 20px 20px 14px 20px; | 
				
			|||
      background-color: #fff; | 
				
			|||
      .head-search{ | 
				
			|||
        margin-bottom: 10px; | 
				
			|||
        .search-input{ | 
				
			|||
          margin-left: 10px; | 
				
			|||
          .input-with-select{ | 
				
			|||
            ::v-deep .el-input__inner{ | 
				
			|||
              width: 320px; | 
				
			|||
            } | 
				
			|||
          } | 
				
			|||
          ::v-deep .el-input-group__append{ | 
				
			|||
            width: auto; | 
				
			|||
            padding: 0 20px 0 0 !important; | 
				
			|||
            border-color: #0348F3; | 
				
			|||
 | 
				
			|||
            .el-button{ | 
				
			|||
              background-color: #0348F3 !important; | 
				
			|||
              color: #fff; | 
				
			|||
            } | 
				
			|||
          } | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
      .change-search{ | 
				
			|||
        margin-left: 12px; | 
				
			|||
        font-size: 14px; | 
				
			|||
        color: #0348F3; | 
				
			|||
        line-height: 32px; | 
				
			|||
      } | 
				
			|||
      .search-tip{ | 
				
			|||
        font-size: 14px; | 
				
			|||
        color: #545B65; | 
				
			|||
        span{ | 
				
			|||
          color: #ED4A41; | 
				
			|||
        } | 
				
			|||
        i{ | 
				
			|||
          font-style: normal; | 
				
			|||
          padding: 0 4px; | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
    .result-list{ | 
				
			|||
      padding: 20px; | 
				
			|||
      .result-item{ | 
				
			|||
        padding: 16px 16px 10px 16px; | 
				
			|||
        margin-bottom: 16px; | 
				
			|||
        background-color: #fff; | 
				
			|||
        border-radius: 3px; | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
::v-deep .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{ | 
				
			|||
  background-color: transparent !important; | 
				
			|||
} | 
				
			|||
::v-deep .el-tree .el-tree-node.is-current>.el-tree-node__content .el-tree-node__label{ | 
				
			|||
  background-color: transparent !important; | 
				
			|||
  color: #0C0E1E !important; | 
				
			|||
} | 
				
			|||
::v-deep .el-tree .is-current>.el-tree-node__content{ | 
				
			|||
  background-color: transparent !important; | 
				
			|||
  color: #0C0E1E !important; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
::v-deep .el-collapse::-webkit-scrollbar, | 
				
			|||
::v-deep .el-collapse-item__content::-webkit-scrollbar, | 
				
			|||
::v-deep .el-tree::-webkit-scrollbar { | 
				
			|||
  width: 5px !important; | 
				
			|||
  height: 5px !important; | 
				
			|||
  background-color: #fff !important; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
::v-deep .el-collapse::-webkit-scrollbar-thumb{ | 
				
			|||
  border-radius: 3px; | 
				
			|||
  background-color: #fff !important; | 
				
			|||
} | 
				
			|||
::v-deep .el-collapse-item__content::-webkit-scrollbar-thumb, | 
				
			|||
::v-deep .el-tree::-webkit-scrollbar-thumb { | 
				
			|||
  border-radius: 3px; | 
				
			|||
  background-color: #4578F6 !important; | 
				
			|||
  // background-color: #fff !important; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
::v-deep .el-collapse::-webkit-scrollbar-thumb:hover, | 
				
			|||
::v-deep .el-collapse-item__content::-webkit-scrollbar-thumb:hover, | 
				
			|||
::v-deep .el-tree::-webkit-scrollbar-thumb:hover { | 
				
			|||
  // background-color: #4578F6 !important; | 
				
			|||
  background-color: #fff !important; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
::v-deep .el-collapse::-webkit-scrollbar-corner, | 
				
			|||
::v-deep .el-collapse-item__content::-webkit-scrollbar-corner, | 
				
			|||
::v-deep .el-tree::-webkit-scrollbar-corner { | 
				
			|||
  background-color: #DDE8FB !important; | 
				
			|||
} | 
				
			|||
</style> | 
				
			|||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue