杨磊
10 小时以前 de962e6331d7ebf3c660a3b0d7fa1dbdc81c645f
src/views/achievements/index.vue
@@ -19,17 +19,12 @@
        </ul>
        <!-- 高级搜索 -->
        <div v-if="isDisplay" class="page-search">
          <MyForm
            class="myfrom"
            @submit="
              (data) => {
                CurrentPage = 1;
                onSubmit(data);
              }
            "
            @reset="resetForm"
            :from="from"
          />
          <MyForm class="myfrom" @submit="
            (data) => {
              CurrentPage = 1;
              onSubmit(data);
            }
          " @reset="resetForm" :from="from" />
        </div>
        <!-- 搜索结果 -->
        <div class="page-content">
@@ -39,31 +34,15 @@
              <li class="left-title">
                <span>{{ category.title }}</span>
                <p @click="category.isDisplay = !category.isDisplay">
                  <img
                    :src="[category.isDisplay ? topIcon : bottomIcon]"
                    alt=""
                  />
                  <img :src="[category.isDisplay ? topIcon : bottomIcon]" alt="" />
                </p>
              </li>
              <li class="left-main" v-if="category.isDisplay">
                <div
                  class="category-main"
                  v-for="(item, index) in category.list"
                  :key="index"
                >
                  <el-checkbox
                    class="el-checkbox"
                    v-model="item.checked"
                    :title="item.name"
                    @change="categoryChange(item)"
                    style="display: inline-block; vertical-align: middle"
                    >{{ item.name }}</el-checkbox
                  >
                  <span
                    class=""
                    style="display: inline-block; vertical-align: middle"
                    >{{ item.num }}</span
                  >
                <div class="category-main" v-for="(item, index) in category.list" :key="index">
                  <el-checkbox class="el-checkbox" v-model="item.checked" :title="item.name"
                    @change="categoryChange(item)" style="display: inline-block; vertical-align: middle">{{ item.name
                    }}</el-checkbox>
                  <span class="" style="display: inline-block; vertical-align: middle">{{ item.num }}</span>
                </div>
              </li>
            </ul>
@@ -74,50 +53,25 @@
                  <span>{{ annual.title }}</span>
                  <span>
                    时间
                    <img
                      class="sort-Icon"
                      :src="[isDisplay ? sortTop : sortBottom]"
                      alt=""
                    />
                    <img class="sort-Icon" :src="[isDisplay ? sortTop : sortBottom]" alt="" />
                  </span>
                  <span
                    >文献量
                    <img
                      class="sort-Icon"
                      :src="[isDisplay ? sortBottom : sortTop]"
                      alt=""
                    />
                  <span>文献量
                    <img class="sort-Icon" :src="[isDisplay ? sortBottom : sortTop]" alt="" />
                  </span>
                </div>
                <p @click="annual.isDisplay = !annual.isDisplay">
                  <img
                    :src="[annual.isDisplay ? topIcon : bottomIcon]"
                    alt=""
                  />
                  <img :src="[annual.isDisplay ? topIcon : bottomIcon]" alt="" />
                </p>
              </li>
              <li class="left-main" v-if="annual.isDisplay">
                <div
                  class="annual-main"
                  :style="{
                    display: index + 1 > professionIndex ? 'none' : '',
                  }"
                  v-for="(item, index) in annual.list"
                  :key="index"
                >
                  <el-checkbox
                    class="el-checkbox"
                    v-model="item.checked"
                    :title="item.years"
                    >{{ item.years }}</el-checkbox
                  >
                <div class="annual-main" :style="{
                  display: index + 1 > professionIndex ? 'none' : '',
                }" v-for="(item, index) in annual.list" :key="index">
                  <el-checkbox class="el-checkbox" v-model="item.checked" :title="item.years">{{ item.years
                  }}</el-checkbox>
                  <span class="">{{ item.num }}</span>
                </div>
                <p
                  class="annual-footer"
                  v-if="annual.list && annual.list.length > 5"
                  @click="shrinkClick('a', '年度')"
                >
                <p class="annual-footer" v-if="annual.list && annual.list.length > 5" @click="shrinkClick('a', '年度')">
                  {{ activeBox !== "a" ? "更多 ∨" : "收起 ∧" }}
                </p>
              </li>
@@ -129,112 +83,65 @@
                  <span>{{ sources.title }}</span>
                  <span>
                    文献量
                    <img
                      class="sort-Icon"
                      :src="[isDisplay ? sortBottom : sortTop]"
                      alt=""
                    />
                    <img class="sort-Icon" :src="[isDisplay ? sortBottom : sortTop]" alt="" />
                  </span>
                </div>
                <p @click="sources.isDisplay = !sources.isDisplay">
                  <img
                    :src="[sources.isDisplay ? topIcon : bottomIcon]"
                    alt=""
                  />
                  <img :src="[sources.isDisplay ? topIcon : bottomIcon]" alt="" />
                </p>
              </li>
              <li class="left-main" v-if="sources.isDisplay">
                <div
                  class="sources-main"
                  v-for="(item, index) in sources.list"
                  :key="index"
                  :style="{
                    display: index + 1 > dynastyIndex ? 'none' : '',
                  }"
                >
                  <el-checkbox
                    class="el-checkbox"
                    :title="item.name"
                    v-model="item.checked"
                    >{{ item.name }}</el-checkbox
                  >
                <div class="sources-main" v-for="(item, index) in sources.list" :key="index" :style="{
                  display: index + 1 > dynastyIndex ? 'none' : '',
                }">
                  <el-checkbox class="el-checkbox" :title="item.name" v-model="item.checked">{{ item.name
                  }}</el-checkbox>
                  <span class="">{{ item.num }}</span>
                </div>
                <p
                  class="sources-footer"
                  v-if="sources.list && sources.list.length > 5"
                  @click="shrinkClick('b', '文献来源')"
                >
                <p class="sources-footer" v-if="sources.list && sources.list.length > 5"
                  @click="shrinkClick('b', '文献来源')">
                  {{ activeBox !== "b" ? "更多 ∨" : "收起 ∧" }}
                </p>
              </li>
            </ul>
            <!-- 学科 -->
            <ul>
            <!-- <ul>
              <li class="left-title">
                <span>{{ subject.title }}</span>
                <p @click="subject.isDisplay = !subject.isDisplay">
                  <img
                    :src="[subject.isDisplay ? topIcon : bottomIcon]"
                    alt=""
                  />
                  <img :src="[subject.isDisplay ? topIcon : bottomIcon]" alt="" />
                </p>
              </li>
              <li class="left-main" v-if="subject.isDisplay">
                <div
                  class="category-main"
                  v-for="(item, index) in subject.list"
                  :key="index"
                >
                  <el-checkbox
                    class="el-checkbox"
                    v-model="item.checked"
                    :title="item.name"
                    @change="subjectChange(item)"
                    >{{ item.name }}</el-checkbox
                  >
                <div class="category-main" v-for="(item, index) in subject.list" :key="index">
                  <el-checkbox class="el-checkbox" v-model="item.checked" :title="item.name"
                    @change="subjectChange(item)">{{ item.name }}</el-checkbox>
                  <span class="">{{ item.num }}</span>
                </div>
              </li>
            </ul>
            </ul> -->
          </div>
          <div
            class="content-right"
            v-loading="loading"
            element-loading-text="检索结果加载中"
            element-loading-spinner="el-icon-loading"
            element-loading-background="rgba(0, 0, 0, 0)"
          >
          <div class="content-right" v-loading="loading" element-loading-text="检索结果加载中"
            element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0)">
            <!-- title部分 -->
            <ul class="right-header">
              <li v-for="(item, index) in associationList" :key="index">
                <p>{{ item.type }} : {{ item.content }}</p>
                <img
                  @click="removeAssociationList(item.content)"
                  :src="errorIcon"
                  alt=""
                />
                <img @click="removeAssociationList(item.content)" :src="errorIcon" alt="" />
              </li>
            </ul>
            <!-- 共xx条 -->
            <ul class="right-number">
              <ul class="number-number">
                共找到<span>{{ this.total }}</span
                >条结果
                共找到<span>{{ this.total }}</span>条结果
              </ul>
              <ul class="number-time">
                发表时间
                <span @click="sortChange()"
                  ><img :src="!postedSortInfo ? sortBottom : sortTop" alt=""
                /></span>
                <span @click="sortChange()"><img :src="!postedSortInfo ? sortBottom : sortTop" alt="" /></span>
              </ul>
            </ul>
            <!-- 结果展示 -->
            <ul
              class="right-main"
              v-for="(item, index) in resultList"
              :key="index"
            >
            <ul class="right-main" v-for="(item, index) in resultList" :key="index">
              <li class="main-name">
                <p>{{ item.name }}</p>
                <p>
@@ -243,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>
@@ -251,46 +158,31 @@
              <li class="main-author">
                {{ item.author }}
              </li>
              <li
                class="main-title"
                :title="item.cleanAbstract"
                v-if="item.abstract"
              >
              <li class="main-title" :title="item.cleanAbstract" v-if="item.abstract">
                <span>摘要: </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: '关键词',
                      })
                  "
                >
                  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: '关键词',
                    })
                ">
                  {{ citem }}
                </span>
              </li>
            </ul>
            <!-- 分页 -->
            <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"
              >
              <el-pagination @current-change="handleCurrentChange" class="msg-pagination-container"
                :background="isBackground" layout="prev, pager, next" :total="total" :page-size="10">
              </el-pagination>
            </div>
            <el-empty v-if="!loading && !resultList.length"></el-empty>
@@ -325,7 +217,6 @@
        { value: "all", label: "全部" },
        { value: "Name", label: "标题" },
        { value: "author", label: "作者" },
        // { value: "year", label: "年份" },
        { value: "keyWords", label: "关键词" },
        { value: "abstract", label: "摘要" },
        { value: "source", label: "来源" },
@@ -371,7 +262,7 @@
          {
            type: "input",
            label: "标 题",
            name: "title",
            name: "Name",
            value: "",
          },
          {
@@ -448,39 +339,35 @@
        list: [
          {
            years: "2025",
            num: 20,
            num: 10,
            check: false,
          },
          {
            years: "2025",
            num: 20,
            years: "2024",
            num: 18,
            check: false,
          },
          {
            years: "2025",
            num: 20,
            years: "2023",
            num: 21,
            check: false,
          },
          {
            years: "2025",
            num: 20,
            years: "2022",
            num: 19,
            check: false,
          },
          {
            years: "2025",
            num: 20,
            years: "2021",
            num: 22,
            check: false,
          },
          {
            years: "2025",
            num: 20,
            years: "2020",
            num: 24,
            check: false,
          },
          {
            years: "2025",
            num: 20,
            check: false,
          },
        ],
      },
      // 文献来源
@@ -496,30 +383,26 @@
            check: false,
          },
          {
            name: "北京中医药大学大学学报",
            num: 190,
            name: "北京师范大学",
            num: 19,
            check: false,
          },
          {
            name: "中国中医科学院",
            num: 22,
            check: false,
          },
          {
            name: "北京中医药大学大学学报",
            num: 190,
            num: 31,
            check: false,
          },
          {
            name: "北京中医药大学大学学报",
            num: 190,
            name: "广州中医药大学",
            num: 25,
            check: false,
          },
          {
            name: "北京中医药大学大学学报",
            num: 190,
            check: false,
          },
          {
            name: "北京中医药大学大学学报",
            num: 190,
            check: false,
          },
        ],
      },
      // 学科
@@ -568,13 +451,13 @@
      resultList: [],
      total: 0,
      paginationPage: 1,
      loading: false,
      loading: true,
      labelList: {
        abstract: "摘要",
        author: "作者",
        keyword: "关键词",
        source: "来源",
        title: "标题",
        Name: "标题",
        year: "年份",
      },
    };
@@ -618,16 +501,23 @@
    },
    async onSubmit(val) {
      console.log(val, "val");
      console.log(this.associationList, "associationList");
      for (let key in val) {
        if (val[key] != "") {
          this.associationList.push({
            type: this.labelList[key],
            content: val[key],
            value: key,
          });
          const hasKey = this.associationList.find((item) => item.value == key);
          if (!hasKey) {
            this.associationList.push({
              type: this.labelList[key],
              content: val[key],
              value: key,
            });
          }else {
            hasKey.content = val[key]
          }
        }
      }
      console.log(this.associationList, "this.associationList");
      this.getItemList();
    },
    //重置搜索结果
@@ -659,7 +549,6 @@
    //获取下拉选择框的内容
    async getSelectData() {
      this.loading = true;
      try {
        // 同时发起两个异步请求,并等待它们的结果
        const [subjectListResult, resourceListResult] = await Promise.all([
@@ -707,13 +596,16 @@
    // 搜索
    handleSearch(isText) {
      console.log(isText, "isText");
      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();
      }
@@ -721,6 +613,7 @@
    // 请求数据
    getItemList() {
      this.loading = true;
      let searchData = {}; // 初始化一个空对象来存储搜索数据
      if (this.inputValue) {
        // 如果输入值存在
@@ -749,26 +642,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;
          }
        });
      }
      // 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",
@@ -780,6 +673,7 @@
                ? this.categoryChecList
                : this.resourceTypeValueList,
            source: [],
            isbn: [],
            year: [],
            abstract: [],
            keyWords: [],
@@ -815,18 +709,19 @@
          this.resultList = res.datas;
          this.total = res.total;
          this.loading = false;
        }).catch((error) => {
        })
        .catch((error) => {
          // 打印错误信息
          console.error("获取数据失败:", error);
        });
      // 滚动到页面顶部
      this.$nextTick(() => {
        const pageMain = document.querySelector('.page-main-father');
        const pageMain = document.querySelector(".page-main-father");
        if (pageMain) {
          pageMain.scrollTo({
            top: 0,
            behavior: 'smooth'
            behavior: "smooth",
          });
        }
      });
@@ -850,6 +745,22 @@
      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>
@@ -1137,15 +1048,12 @@
    border-color: #d1d1d1;
  }
  ::v-deep .el-checkbox .el-checkbox__input.is-checked + .el-checkbox__label {
  ::v-deep .el-checkbox .el-checkbox__input.is-checked+.el-checkbox__label {
    color: #2c2c2c;
  }
  ::v-deep .el-checkbox .el-checkbox__input.is-checked .el-checkbox__inner,
  ::v-deep
    .el-checkbox
    .el-checkbox__input.is-indeterminate
    .el-checkbox__inner {
  ::v-deep .el-checkbox .el-checkbox__input.is-indeterminate .el-checkbox__inner {
    border-color: #8f7a5a;
    background-color: #8f7a5a;
  }
@@ -1272,10 +1180,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;
        }
@@ -1402,16 +1331,15 @@
  border: 1px solid #cccccc;
}
:deep.msg-pagination-container.is-background
  .el-pager
  li:not(.disabled).active {
:deep.msg-pagination-container.is-background .el-pager li:not(.disabled).active {
  /*当前选中页数的样式进行修改*/
  background-color: #937950;
  color: #fff;
  border-radius: 5px;
  border: 1px solid #cccccc;
}
:deep.el-pagination.is-background .el-pager li:not(.disabled):hover{
:deep.el-pagination.is-background .el-pager li:not(.disabled):hover {
  color: #937950
}
</style>