From 5e73d562bae941a7658c3c13fdb585461f1a24e4 Mon Sep 17 00:00:00 2001 From: zhongshujie <2862698242@qq.com> Date: 星期一, 28 四月 2025 21:21:07 +0800 Subject: [PATCH] Merge branch 'master' of http://182.92.203.7:2001/r/wyyDatabase --- src/views/achievements/index.vue | 475 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 351 insertions(+), 124 deletions(-) diff --git a/src/views/achievements/index.vue b/src/views/achievements/index.vue index 5042a2b..c5fd0fa 100644 --- a/src/views/achievements/index.vue +++ b/src/views/achievements/index.vue @@ -19,12 +19,17 @@ </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"> @@ -34,15 +39,31 @@ <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> @@ -53,25 +74,50 @@ <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> @@ -83,29 +129,48 @@ <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"> @@ -119,38 +184,56 @@ <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> <!-- 鍏眡x鏉� --> <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> <el-button @click="goPage(item.id)">璇︽儏</el-button> - <el-button>AI鏅鸿兘闃呰</el-button> + <el-button @click="openAiReading(item.AIReading, item.name)">AI鏅鸿兘闃呰</el-button> </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> @@ -158,24 +241,56 @@ <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"> + <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> </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-dialog v-model="dialogVisible" :title="aIName" width="60vw" top="3vh" bottom="2vh" + :visible.sync="dialogVisible" class="custom-dialog"> + <div class="AIReadingBox" element-loading-spinner="el-icon-loading" + element-loading-background="rgba(0, 0, 0, 0)"> + <div class="richTextInitBox" v-if="AIReading" v-html="AIReading"></div> + <div class="richTextInitError" v-else>缃戠粶绻佸繖锛岃绋嶅悗鍐嶈瘯銆�</div> + </div> + </el-dialog> <el-empty v-if="!loading && !resultList.length"></el-empty> </div> </div> @@ -198,6 +313,9 @@ }, data() { return { + dialogVisible: false, + aIName: "", + AIReading: "", relatedList: [], // 杈撳叆妗嗙殑鍐呭 inputValue: "", @@ -253,7 +371,7 @@ { type: "input", label: "鏍囥��棰�", - name: "title", + name: "Name", value: "", }, { @@ -271,7 +389,7 @@ { type: "input", label: "鍏抽敭璇�", - name: "keyword", + name: "keyWords", value: "", }, { @@ -330,37 +448,32 @@ 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, - check: false, - }, - { - years: "2025", - num: 20, + years: "2020", + num: 24, check: false, }, ], @@ -378,28 +491,23 @@ 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, - check: false, - }, - { - name: "鍖椾含涓尰鑽ぇ瀛﹀ぇ瀛﹀鎶�", - num: 190, - check: false, - }, - { - name: "鍖椾含涓尰鑽ぇ瀛﹀ぇ瀛﹀鎶�", - num: 190, + name: "骞垮窞涓尰鑽ぇ瀛�", + num: 25, check: false, }, ], @@ -450,13 +558,13 @@ resultList: [], total: 0, paginationPage: 1, - loading: false, + loading: true, labelList: { abstract: "鎽樿", author: "浣滆��", - keyword: "鍏抽敭璇�", + keyWords: "鍏抽敭璇�", source: "鏉ユ簮", - title: "鏍囬", + Name: "鏍囬", year: "骞翠唤", }, }; @@ -467,14 +575,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(); }, @@ -493,16 +608,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(); }, //閲嶇疆鎼滅储缁撴灉 @@ -534,7 +656,6 @@ //鑾峰彇涓嬫媺閫夋嫨妗嗙殑鍐呭 async getSelectData() { - this.loading = true; try { // 鍚屾椂鍙戣捣涓や釜寮傛璇锋眰锛屽苟绛夊緟瀹冧滑鐨勭粨鏋� const [subjectListResult, resourceListResult] = await Promise.all([ @@ -577,18 +698,21 @@ ); 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(); } @@ -596,20 +720,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 +749,28 @@ } } } + 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 if (item.value) { + searchData[item.value + "*"] = item.content; + } 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 +782,7 @@ ? this.categoryChecList : this.resourceTypeValueList, source: [], + isbn: [], year: [], abstract: [], keyWords: [], @@ -663,24 +810,27 @@ 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) => { + }) + .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", }); } }); @@ -691,11 +841,11 @@ 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", }); } }); @@ -704,6 +854,28 @@ 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"; + } + }, + + openAiReading(text, name) { + this.AIReading = text; + this.aIName = name; + this.dialogVisible = true; + } }, }; </script> @@ -744,7 +916,6 @@ ::v-deep .el-loading-spinner { .el-loading-text { - font-size: 14px; color: #937950; } @@ -754,7 +925,6 @@ color: #937950; } } - .page-main-father { flex: 1; @@ -812,10 +982,8 @@ font-family: Source Han Sans; font-size: 14px; font-weight: bold; - color: #2C2C2C; - + color: #2c2c2c; } - } .input-txt { @@ -868,7 +1036,6 @@ background-color: transparent; color: #937950; border: 1px solid #937950; - ; cursor: pointer; &:hover { @@ -996,12 +1163,15 @@ 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; } @@ -1128,10 +1298,34 @@ } } + .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; } @@ -1184,7 +1378,7 @@ overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; - -webkit-line-clamp: 4; + -webkit-line-clamp: 3; span { font-family: Source Han Sans; @@ -1224,6 +1418,23 @@ } } +.AIReadingBox { + height: 85vh; + min-height: 600px; + padding: 20px 10px; +} + +.richTextInitBox { + height: 100%; + overflow: auto; +} +.richTextInitError{ + height: 100%; + display: flex; + align-items: center; + justify-content: center; +} + .pagination { display: flex; justify-content: center; @@ -1258,12 +1469,30 @@ 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 { + color: #937950; +} + +:deep.el-button--primary { + background-color: #937950; + color: #937950; + border: 1px solid #937950; + cursor: pointer; + + &:hover { + background-color: #937950; + color: #fffdf8; + } } </style> @@ -1272,9 +1501,7 @@ color: #937950 !important; border-color: #937950 !important; font-weight: bold; - } - .el-select-dropdown__item.selected { color: #937950 !important; @@ -1285,4 +1512,4 @@ border-color: #937950; font-weight: bold; } -</style> \ No newline at end of file +</style> -- Gitblit v1.9.1