| | |
| | | </li> |
| | | </ul> |
| | | <!-- 学科 --> |
| | | <ul> |
| | | <!-- <ul> |
| | | <li class="left-title"> |
| | | <span>{{ subject.title }}</span> |
| | | <p @click="subject.isDisplay = !subject.isDisplay"> |
| | |
| | | <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)"> |
| | |
| | | </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> |
| | |
| | | </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> |
| | |
| | | <!-- 分页 --> |
| | | <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> |
| | |
| | | { |
| | | type: "input", |
| | | label: "标 题", |
| | | name: "title", |
| | | name: "Name", |
| | | value: "", |
| | | }, |
| | | { |
| | |
| | | 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, |
| | | }, |
| | | |
| | | ], |
| | | }, |
| | | // 文献来源 |
| | |
| | | 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, |
| | | }, |
| | | |
| | | ], |
| | | }, |
| | | // 学科 |
| | |
| | | resultList: [], |
| | | total: 0, |
| | | paginationPage: 1, |
| | | loading: false, |
| | | loading: true, |
| | | labelList: { |
| | | abstract: "摘要", |
| | | author: "作者", |
| | | keyword: "关键词", |
| | | source: "来源", |
| | | title: "标题", |
| | | Name: "标题", |
| | | year: "年份", |
| | | }, |
| | | }; |
| | |
| | | |
| | | 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(); |
| | | }, |
| | |
| | | }, |
| | | |
| | | 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(); |
| | | }, |
| | | //重置搜索结果 |
| | |
| | | |
| | | //获取下拉选择框的内容 |
| | | async getSelectData() { |
| | | this.loading = true; |
| | | try { |
| | | // 同时发起两个异步请求,并等待它们的结果 |
| | | const [subjectListResult, resourceListResult] = await Promise.all([ |
| | |
| | | ); |
| | | this.inputValue = ""; |
| | | // 通知父组件数据已改变 |
| | | this.getItemList() |
| | | this.getItemList(); |
| | | }, |
| | | |
| | | // 搜索 |
| | | handleSearch(isText) { |
| | | this.associationList = [] |
| | | 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(); |
| | | } |
| | |
| | | |
| | | // 请求数据 |
| | | 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; |
| | |
| | | } |
| | | } |
| | | } |
| | | // 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", |
| | |
| | | ? this.categoryChecList |
| | | : this.resourceTypeValueList, |
| | | source: [], |
| | | isbn: [], |
| | | year: [], |
| | | abstract: [], |
| | | keyWords: [], |
| | |
| | | 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); |
| | | }); |
| | | |
| | | // 滚动到页面顶部 |
| | | this.$nextTick(() => { |
| | | const pageMain = document.querySelector(".page-main-father"); |
| | | if (pageMain) { |
| | | pageMain.scrollTo({ |
| | | top: 0, |
| | | behavior: "smooth", |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | // 处理页码变化 |
| | | handleCurrentChange(newPage) { |
| | |
| | | this.getItemList(); // 重新获取数据 |
| | | // 滚动到页面顶部 |
| | | 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", |
| | | }); |
| | | } |
| | | }); |
| | |
| | | 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> |
| | |
| | | |
| | | ::v-deep .el-loading-spinner { |
| | | .el-loading-text { |
| | | |
| | | font-size: 14px; |
| | | color: #937950; |
| | | } |
| | |
| | | color: #937950; |
| | | } |
| | | } |
| | | |
| | | |
| | | .page-main-father { |
| | | flex: 1; |
| | |
| | | font-family: Source Han Sans; |
| | | font-size: 14px; |
| | | font-weight: bold; |
| | | color: #2C2C2C; |
| | | |
| | | color: #2c2c2c; |
| | | } |
| | | |
| | | } |
| | | |
| | | .input-txt { |
| | |
| | | background-color: transparent; |
| | | color: #937950; |
| | | border: 1px solid #937950; |
| | | ; |
| | | cursor: pointer; |
| | | |
| | | &:hover { |
| | |
| | | color: #937950; |
| | | margin-bottom: 5px; |
| | | |
| | | p { |
| | | overflow: hidden; |
| | | } |
| | | |
| | | ::v-deep .el-button { |
| | | font-size: 14px; |
| | | background-color: transparent; |
| | |
| | | } |
| | | } |
| | | |
| | | .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; |
| | | } |
| | |
| | | border-left: 1px solid #2c2c2c; |
| | | } |
| | | |
| | | margin-bottom: 10px; |
| | | margin-bottom: 15px; |
| | | } |
| | | |
| | | .main-author { |
| | |
| | | overflow: hidden; |
| | | display: -webkit-box; |
| | | -webkit-box-orient: vertical; |
| | | -webkit-line-clamp: 4; |
| | | -webkit-line-clamp: 3; |
| | | |
| | | span { |
| | | font-family: Source Han Sans; |
| | |
| | | border-radius: 5px; |
| | | border: 1px solid #cccccc; |
| | | } |
| | | |
| | | :deep.el-pagination.is-background .el-pager li:not(.disabled):hover { |
| | | color: #937950 |
| | | } |
| | | </style> |
| | | |
| | | <style> |
| | |
| | | color: #937950 !important; |
| | | border-color: #937950 !important; |
| | | font-weight: bold; |
| | | |
| | | } |
| | | |
| | | |
| | | .el-select-dropdown__item.selected { |
| | | color: #937950 !important; |
| | |
| | | border-color: #937950; |
| | | font-weight: bold; |
| | | } |
| | | </style> |
| | | </style> |