From dd511658a80514fef129800129ba24a5ceb9c878 Mon Sep 17 00:00:00 2001
From: 杨磊 <505174330@qq.com>
Date: 星期三, 30 四月 2025 11:02:25 +0800
Subject: [PATCH] 首页搜索

---
 src/views/achievements/index.vue |  273 ++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 193 insertions(+), 80 deletions(-)

diff --git a/src/views/achievements/index.vue b/src/views/achievements/index.vue
index 186b937..9a81e8e 100644
--- a/src/views/achievements/index.vue
+++ b/src/views/achievements/index.vue
@@ -170,33 +170,21 @@
               </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"
@@ -239,11 +227,15 @@
                 <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>
@@ -257,7 +249,10 @@
                 v-if="item.abstract"
               >
                 <span>鎽樿: </span>
-                <span class="page-main-abstract" v-html="item.cleanAbstract"></span>
+                <span
+                  class="page-main-abstract"
+                  v-html="item.cleanAbstract"
+                ></span>
               </li>
               <li
                 class="main-keyword"
@@ -289,10 +284,34 @@
                 :background="isBackground"
                 layout="prev, pager, next"
                 :total="total"
-                :page-size="6"
+                :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>
@@ -315,6 +334,9 @@
   },
   data() {
     return {
+      dialogVisible: false,
+      aIName: "",
+      AIReading: "",
       relatedList: [],
       // 杈撳叆妗嗙殑鍐呭
       inputValue: "",
@@ -370,7 +392,7 @@
           {
             type: "input",
             label: "鏍囥��棰�",
-            name: "title",
+            name: "Name",
             value: "",
           },
           {
@@ -388,7 +410,7 @@
           {
             type: "input",
             label: "鍏抽敭璇�",
-            name: "keyword",
+            name: "keyWords",
             value: "",
           },
           {
@@ -447,37 +469,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,
           },
         ],
@@ -495,28 +512,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,
           },
         ],
@@ -567,18 +579,21 @@
       resultList: [],
       total: 0,
       paginationPage: 1,
-      loading: false,
+      loading: true,
       labelList: {
         abstract: "鎽樿",
         author: "浣滆��",
-        keyword: "鍏抽敭璇�",
+        keyWords: "鍏抽敭璇�",
         source: "鏉ユ簮",
-        title: "鏍囬",
+        Name: "鏍囬",
         year: "骞翠唤",
       },
     };
   },
   mounted() {
+    console.log(this.$route.query, "query");
+    this.inputType = this.$route.query.type;
+    this.inputValue = this.$route.query.value;
     this.getSelectData();
   },
 
@@ -617,16 +632,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();
     },
     //閲嶇疆鎼滅储缁撴灉
@@ -705,9 +727,9 @@
 
     // 鎼滅储
     handleSearch(isText) {
+      console.log(isText, "isText");
       this.associationList = [];
       console.log(isText, "isText");
-      
       if (isText.text != "") {
         this.inputValue = isText.text;
         this.inputType = isText.type;
@@ -723,7 +745,10 @@
     // 璇锋眰鏁版嵁
     getItemList() {
       this.loading = true;
+      console.log(this.inputValue, " inputValue");
+      console.log(this.inputType, " inputType");
       let searchData = {}; // 鍒濆鍖栦竴涓┖瀵硅薄鏉ュ瓨鍌ㄦ悳绱㈡暟鎹�
+      debugger;
       if (this.inputValue) {
         // 濡傛灉杈撳叆鍊煎瓨鍦�
         if (this.inputType != "all") {
@@ -735,6 +760,8 @@
           // 閬嶅巻杈撳叆閫夐」
           for (let index = 0; index < this.inputOptions.length; index++) {
             const item = this.inputOptions[index]; // 鑾峰彇褰撳墠閫夐」
+
+            debugger;
             if (item.value !== "all") {
               // 濡傛灉褰撳墠閫夐」鐨勫�间笉鏄�"all"
               if (!Object.keys(searchData).length) {
@@ -751,26 +778,34 @@
           }
         }
       }
+
+      console.log(this.associationList, "searchData11111");
+
       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 (item.value !== "all") {
+            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",
@@ -782,6 +817,7 @@
                 ? this.categoryChecList
                 : this.resourceTypeValueList,
             source: [],
+            isbn: [],
             year: [],
             abstract: [],
             keyWords: [],
@@ -817,18 +853,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",
           });
         }
       });
@@ -851,6 +888,28 @@
     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";
+      }
+    },
+
+    openAiReading(text, name) {
+      this.AIReading = text;
+      this.aIName = name;
+      this.dialogVisible = true;
     },
   },
 };
@@ -1274,10 +1333,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;
         }
@@ -1370,6 +1453,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;
@@ -1413,8 +1513,21 @@
   border-radius: 5px;
   border: 1px solid #cccccc;
 }
-:deep.el-pagination.is-background .el-pager li:not(.disabled):hover{
-  color: #937950
+
+: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>
 

--
Gitblit v1.9.1