zhongshujie
10 小时以前 8bffcbb7f5fca4e1e7a308f6f786b63d0773704c
src/views/achievements/index.vue
@@ -150,7 +150,7 @@
                </p>
              </li>
              <li class="main-sources">
                <span>{{ item.resourceTypeName }}</span>
                <span :class="getResourceTypeClass(item.cmsItemType)">{{ item.resourceTypeName }}</span>
                <span>{{ item.source }}</span>
                <span>{{ item.year }}</span>
                <span v-if="item.DOI">doi:{{ item.DOI }}</span>
@@ -160,12 +160,18 @@
              </li>
              <li class="main-title" :title="item.cleanAbstract" v-if="item.abstract">
                <span>摘要: </span>
                <span class="page-main-abstract" v-html="item.abstract"></span>
                <span class="page-main-abstract" v-html="item.cleanAbstract"></span>
              </li>
              <li class="main-keyword" v-if="item.keyWords && item.keyWords.length > 0">
                <span>关键词:</span>
                <span class="keyWord" v-for="(citem, cindex) in item.keyWords" :key="cindex"
                  @click="() => handleSearch({ text: citem, type: 'keyWords', label: '关键词' })">
                <span class="keyWord" v-for="(citem, cindex) in item.keyWords" :key="cindex" @click="
                  () =>
                    handleSearch({
                      text: citem,
                      type: 'keyWords',
                      label: '关键词',
                    })
                ">
                  {{ citem }}
                </span>
              </li>
@@ -173,7 +179,7 @@
            <!-- 分页 -->
            <div class="pagination" v-if="total > 6">
              <el-pagination @current-change="handleCurrentChange" class="msg-pagination-container"
                :background="isBackground" layout="prev, pager, next" :total="total" :page-size="6">
                :background="isBackground" layout="prev, pager, next" :total="total" :page-size="10">
              </el-pagination>
            </div>
            <el-empty v-if="!loading && !resultList.length"></el-empty>
@@ -450,7 +456,7 @@
      resultList: [],
      total: 0,
      paginationPage: 1,
      loading: false,
      loading: true,
      labelList: {
        abstract: "摘要",
        author: "作者",
@@ -467,14 +473,21 @@
  methods: {
    categoryChange(val) {
      console.log(val, "val");
      if (val.checked) {
        this.categoryChecList.push(val.value);
        this.associationList.push({
          type: "类型",
          content: val.name,
        });
      } else {
        const index = this.categoryChecList.findIndex(
          (item) => item === val.value
        );
        const index2 = this.associationList.findIndex(
          (item) => item.name === val.name
        );
        this.categoryChecList.splice(index, 1);
        this.associationList.splice(index2, 1);
      }
      this.getItemList();
    },
@@ -534,7 +547,6 @@
    //获取下拉选择框的内容
    async getSelectData() {
      this.loading = true;
      try {
        // 同时发起两个异步请求,并等待它们的结果
        const [subjectListResult, resourceListResult] = await Promise.all([
@@ -577,18 +589,20 @@
      );
      this.inputValue = "";
      // 通知父组件数据已改变
      this.getItemList()
      this.getItemList();
    },
    // 搜索
    handleSearch(isText) {
      this.associationList = []
      this.associationList = [];
      console.log(isText, "isText");
      if (isText.text != "") {
        this.inputValue = isText.text;
        this.inputType = isText.type;
        this.associationList.push({
          type: isText.label,
          content: isText.text,
          value: isText.type,
        });
        this.getItemList();
      }
@@ -596,20 +610,27 @@
    // 请求数据
    getItemList() {
      this.loading = true;
      let searchData = {}; // 初始化一个空对象来存储搜索数据
      if (this.inputValue) { // 如果输入值存在
        if (this.inputType != "all") { // 如果输入类型不是"all"
      if (this.inputValue) {
        // 如果输入值存在
        if (this.inputType != "all") {
          // 如果输入类型不是"all"
          // 将输入值与输入类型关联,并添加一个星号(*)作为后缀
          searchData[this.inputType + "*"] = this.inputValue;
        } else { // 如果输入类型是"all"
        } else {
          // 如果输入类型是"all"
          // 遍历输入选项
          for (let index = 0; index < this.inputOptions.length; index++) {
            const item = this.inputOptions[index]; // 获取当前选项
            if (item.value !== "all") { // 如果当前选项的值不是"all"
              if (!Object.keys(searchData).length) { // 如果searchData是空的
            if (item.value !== "all") {
              // 如果当前选项的值不是"all"
              if (!Object.keys(searchData).length) {
                // 如果searchData是空的
                // 将第一个选项的值与输入值关联,并添加一个星号(*)作为后缀
                searchData[item.value + "*"] = this.inputValue;
              } else { // 如果searchData不是空的
              } else {
                // 如果searchData不是空的
                // 使用"||"作为前缀,将后续选项的值与输入值关联,并添加一个星号(*)作为后缀
                // 这通常用于构建一个逻辑或(OR)查询
                searchData["||" + item.value + "*"] = this.inputValue;
@@ -618,13 +639,26 @@
          }
        }
      }
      // if (this.associationList && this.associationList.length) {
      //   this.associationList.forEach((item) => {
      //     if (item.value == "year") {
      //       const endDate = item.content.split("/")[0] + "/12/31 23:59:59";
      //       const startDate = item.content.split("/")[0] + "/01/01 00:00:00";
      //       searchData[item.value + ">="] = startDate;
      //       searchData[item.value + "<="] = endDate;
      //     } else {
      //       searchData["||" + item.value + "*"] = item.content;
      //     }
      //   });
      // }
      console.log(searchData, "searchData");
      MG.resource
        .getItem({
          path: "*",
          queryType: "*",
          paging: {
            start: (this.paginationPage - 1) * 6,
            size: 6,
            start: (this.paginationPage - 1) * 10,
            size: 10,
          },
          sort: {
            year: this.postedSortInfo ? "Desc" : "Asc",
@@ -636,6 +670,7 @@
                ? this.categoryChecList
                : this.resourceTypeValueList,
            source: [],
            isbn: [],
            year: [],
            abstract: [],
            keyWords: [],
@@ -663,18 +698,19 @@
              item.cleanAbstract = item.abstract.replace(/<[^>]+>/g, "");
            }
            const foundItem = this.category.list.find((citem) => citem.value == item.cmsItemType);
            item.resourceTypeName = foundItem ? foundItem.name : '';
          })
          this.resultList = res.datas
            const foundItem = this.category.list.find(
              (citem) => citem.value == item.cmsItemType
            );
            item.resourceTypeName = foundItem ? foundItem.name : "";
          });
          this.resultList = res.datas;
          this.total = res.total;
          this.loading = false;
        }).catch((error) => {
          // 打印错误信息
          console.error("获取数据失败:", error);
        });
    },
    // 处理页码变化
    handleCurrentChange(newPage) {
      this.paginationPage = newPage;
      this.getItemList(); // 重新获取数据
      // 滚动到页面顶部
      this.$nextTick(() => {
        const pageMain = document.querySelector('.page-main-father');
@@ -686,10 +722,41 @@
        }
      });
    },
    // 处理页码变化
    handleCurrentChange(newPage) {
      this.paginationPage = newPage;
      this.getItemList(); // 重新获取数据
      // 滚动到页面顶部
      this.$nextTick(() => {
        const pageMain = document.querySelector(".page-main-father");
        if (pageMain) {
          pageMain.scrollTo({
            top: 0,
            behavior: "smooth",
          });
        }
      });
    },
    sortChange() {
      this.postedSortInfo = !this.postedSortInfo;
      this.getItemList();
    },
    getResourceTypeClass(typeName) {
      switch (typeName) {
        case 'journal':
          return 'journal-color';
        case 'books':
          return 'books-color';
        case 'video':
          return 'video-color';
        case 'audio':
          return 'audio-color';
        case 'newspaper':
          return 'newspaper-color';
        default:
          return 'other-color';
      }
    }
  },
};
</script>
@@ -730,7 +797,6 @@
::v-deep .el-loading-spinner {
  .el-loading-text {
    font-size: 14px;
    color: #937950;
  }
@@ -740,7 +806,6 @@
    color: #937950;
  }
}
.page-main-father {
  flex: 1;
@@ -798,10 +863,8 @@
      font-family: Source Han Sans;
      font-size: 14px;
      font-weight: bold;
      color: #2C2C2C;
      color: #2c2c2c;
    }
  }
  .input-txt {
@@ -854,7 +917,6 @@
        background-color: transparent;
        color: #937950;
        border: 1px solid #937950;
        ;
        cursor: pointer;
        &:hover {
@@ -1096,6 +1158,10 @@
        color: #937950;
        margin-bottom: 5px;
        p {
          overflow: hidden;
        }
        ::v-deep .el-button {
          font-size: 14px;
          background-color: transparent;
@@ -1110,10 +1176,31 @@
        }
      }
      .journal-color {
        background-color: #87a8b9;
      }
      .books-color {
        background-color: #C48787;
      }
      .video-color {
        background-color: #6F8F5A;
      }
      .audio-color {
        background-color: #937950;
      }
      .newspaper-color {
        background-color: #8D77B3;
      }
      .other-color {
        background-color: #009F9F;
      }
      .main-sources {
        span:nth-child(1) {
          padding: 3px 5px;
          background-color: #87a8b9;
          color: #fff;
          margin-right: 10px;
        }
@@ -1145,7 +1232,7 @@
          border-left: 1px solid #2c2c2c;
        }
        margin-bottom: 10px;
        margin-bottom: 15px;
      }
      .main-author {
@@ -1166,7 +1253,7 @@
        overflow: hidden;
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 4;
        -webkit-line-clamp: 3;
        span {
          font-family: Source Han Sans;
@@ -1247,6 +1334,10 @@
  border-radius: 5px;
  border: 1px solid #cccccc;
}
:deep.el-pagination.is-background .el-pager li:not(.disabled):hover {
  color: #937950
}
</style>
<style>
@@ -1254,9 +1345,7 @@
  color: #937950 !important;
  border-color: #937950 !important;
  font-weight: bold;
}
.el-select-dropdown__item.selected {
  color: #937950 !important;
@@ -1267,4 +1356,4 @@
  border-color: #937950;
  font-weight: bold;
}
</style>
</style>