From 96793ed66832fbeb253338a9949c7e5824f87bdd Mon Sep 17 00:00:00 2001
From: zhangxiao <898441624@qq.com>
Date: 星期五, 09 八月 2024 14:26:25 +0800
Subject: [PATCH] fix: 修改登录会话管理样式

---
 src/views/session/sessionRecordsManager/index.vue |  809 ++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 488 insertions(+), 321 deletions(-)

diff --git a/src/views/session/sessionRecordsManager/index.vue b/src/views/session/sessionRecordsManager/index.vue
index 2ac9a46..4b5ca1c 100644
--- a/src/views/session/sessionRecordsManager/index.vue
+++ b/src/views/session/sessionRecordsManager/index.vue
@@ -1,17 +1,21 @@
 <template>
   <div class="container">
-    <AddSession :modalObj="modalObj" @addSession="addSession"></AddSession>
+    <AddSession
+      :modalObj="modalObj"
+      @addSession="addSession"
+      :dialogId="dialogId"
+    ></AddSession>
     <a-card class="top-title">AI浼氳瘽璁板綍</a-card>
     <a-row :gutter="[5, 5]" style="margin-top: 3px">
-      <a-col :span="4">
-        <a-card>
-              <a-select
-                v-model="selectValue"
-                :options="dialogs"
-                :field-names="fieldNames"
-                @change="dialogChange"
-              >
-              </a-select>
+      <a-col :span="6">
+        <a-card class="left-select">
+          <a-select
+            v-model="selectValue"
+            :options="dialogs"
+            :field-names="fieldNames"
+            @change="dialogChange"
+          >
+          </a-select>
         </a-card>
         <a-card style="height: 50px">
           <template #cover>
@@ -24,9 +28,9 @@
               >
                 +鏂板缓浼氳瘽
               </a-button>
-              <a-button type="text" shape="circle" class="card-btn-2">
+              <!-- <a-button type="text" shape="circle" class="card-btn-2">
                 <icon-search />
-              </a-button>
+              </a-button> -->
             </div>
           </template>
         </a-card>
@@ -34,24 +38,24 @@
           <a-scrollbar
             class="left-list"
             style="
-              height: calc(100vh - 160px);
+              height: calc(100vh - 350px);
               overflow-y: auto;
               overflow-x: hidden;
             "
           >
             <div
-              class="item"
+              class="item left-list-item"
               v-for="session in sessionList"
               @click="querySessionDetail(session)"
               :class="{ isLeftActive: activeSessionId === session.id }"
             >
-              <div class="text" :class="{ light: theme === 'dark' }">{{
-                  session.name
-                }}
+              <div class="text" :class="{ light: theme === 'dark' }"
+                >{{ session.name }}
               </div>
-              <div class="time">{{
+              <div class="time"
+                >{{
                   moment(new Date(session.create_time)).format(
-                    "YYYY-MM-DD HH:mm:ss"
+                    'YYYY-MM-DD HH:mm:ss'
                   )
                 }}
               </div>
@@ -59,9 +63,17 @@
           </a-scrollbar>
         </a-card>
       </a-col>
-      <a-col :span="15">
+      <a-col :span="18">
         <a-card class="center">
-          <div v-if="sessionDetailList.length === 0">
+          <div
+            v-if="sessionDetailList.length === 0"
+            style="
+              width: 90%;
+              overflow: auto;
+              height: 65vh;
+              margin: 0px auto 20px;
+            "
+          >
             <div class="center-title">鏅鸿兘闂瓟</div>
             <div class="center-content">
               鎴戝彲浠ョ悊瑙e拰瀛︿範浜虹被鐨勮瑷�锛屽叿澶囧杞璇濈殑鑳藉姏锛岀幇鍦ㄥ拰鎴戝紑濮嬩氦娴佸惂~
@@ -134,56 +146,71 @@
             id="home"
             v-else
             class="chat-list"
-            style="width: 90%; overflow: auto; height: 60vh; margin: 0px auto"
+            style="
+              width: 90%;
+              overflow: auto;
+              height: 65vh;
+              margin: 0px auto 20px;
+            "
           >
             <div class="chat-item" v-for="sessionDetail in sessionDetailList">
-              <a-comment
-                v-if="sessionDetail.role === 'user'"
-                avatar="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp"
-              >
+              <a-comment v-if="sessionDetail.role === 'user'">
+                <template #avatar>
+                  <img
+                    class="icon-user-jpg"
+                    src="../../../assets/images/icon-user.jpg"
+                    alt="鏈湴鍥剧墖"
+                  />
+                </template>
                 <template #content>
-                  <div :class="{ light: theme === 'light' }">{{
-                      sessionDetail.content
-                    }}
+                  <div class="chart-user-text"
+                    >{{ sessionDetail.content }}
                   </div>
                 </template>
               </a-comment>
-              <a-comment
-                v-else-if="sessionDetail.role === 'assistant'"
-                avatar="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/9eeb1800d9b78349b24682c3518ac4a3.png~tplv-uwbnlip3yd-webp.webp"
-              >
+              <a-comment v-else-if="sessionDetail.role === 'assistant'">
+                <template #avatar>
+                  <img
+                    class="icon-user-jpg"
+                    src="../../../assets/images/icon-chart.png"
+                    alt="鏈湴鍥剧墖"
+                  />
+                </template>
                 <template #content>
-                  <a-card
-                    class="chat-item-answer"
-                    style="background-color: rgba(63, 64, 79, 1)"
-                  >
-                    <div :class="{ light: theme === 'light' }">{{
-                        sessionDetail.content
-                      }}
+                  <a-card class="chat-item-answer">
+                    <div :class="{ light: theme === 'light' }"
+                      >{{ sessionDetail.content }}
                     </div>
                   </a-card>
                 </template>
               </a-comment>
-              <a-comment
-                v-else-if="sessionDetail.role === 'last'"
-                avatar="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/9eeb1800d9b78349b24682c3518ac4a3.png~tplv-uwbnlip3yd-webp.webp"
-              >
+              <a-comment v-else-if="sessionDetail.role === 'last'">
+                <template #avatar>
+                  <img
+                    class="icon-user-jpg"
+                    src="../../../assets/images/icon-chart.png"
+                    alt="鏈湴鍥剧墖"
+                  />
+                </template>
                 <template #content>
                   <a-textarea
                     readonly
                     auto-size
                     v-model="displayedText"
                     class="chat-item-answer"
-                    style="background-color: rgba(63, 64, 79, 1)"
                   >
                   </a-textarea>
                 </template>
               </a-comment>
             </div>
+            <!-- <div class="chartStart" v-if="isStart" @click="startChat"
+              >鍋滄鐢熸垚</div
+            >
+            <div class="chartStart v-else" @click="stopChat">閲嶆柊鐢熸垚</div> -->
           </a-scrollbar>
-
-          <div class="center-bottom">
-            <a-textarea
+          <div class="chat_bottom">
+            <div class="center-bottom">
+              <!-- <a-textarea
               v-model="inputMsg"
               @keydown.shift.enter="sendMessage"
               style="height: 180px"
@@ -192,11 +219,36 @@
               allow-clear
               show-word-limit
             >
-            </a-textarea>
+            </a-textarea> -->
+              <a-textarea
+                v-model="inputMsg"
+                @keydown.enter="sendMessage"
+                placeholder="杈撳叆鎮ㄦ兂浜嗚В鐨勫唴瀹癸紝Shift+Enter鎹㈣锛孍nter鍙戦��"
+                allow-clear
+                show-word-limit
+                :disabled="chatDis"
+                :auto-size="{
+                  minRows: 12,
+                  maxRows: 5,
+                }"
+              />
+              <div class="btn-send">
+                <!-- <icon-send size="32" /> -->
+                <a-button
+                  :disabled="chatDis"
+                  @click="sentClick"
+                  type="primary"
+                  style="border-radius: 24px"
+                  :loading="loading"
+                  size="large"
+                  >鍙戦��</a-button
+                >
+              </div>
+            </div>
           </div>
         </a-card>
       </a-col>
-      <a-col :span="5">
+      <!-- <a-col :span="5">
         <a-card class="right">
           <div class="right-top">
             <div class="right-title">鏁版櫤搴�</div>
@@ -214,26 +266,16 @@
             </div>
           </div>
           <div class="right-tag">
-            <a-space>
-              <a-button type="primary" shape="round" size="mini" class="btn"
-              >鍏ㄩ儴
-              </a-button
-              >
-              <a-button type="outline" shape="round" size="mini" class="btn"
+            <a-button type="primary" size="mini" class="btn">鍏ㄩ儴 </a-button>
+            <a-button type="outline" size="mini" class="btn"
               >鏂囨。鍒涗綔
-              </a-button
-              >
-              <a-button type="outline" shape="round" size="mini" class="btn"
+            </a-button>
+            <a-button type="outline" size="mini" class="btn"
               >鐭ヨ瘑瀛︿範
-              </a-button
-              >
-            </a-space>
-            <a-space style="margin-top: 10px">
-              <a-button type="outline" shape="round" size="mini" class="btn"
+            </a-button>
+            <a-button type="outline" size="mini" class="btn"
               >鏁堢巼鎻愬崌
-              </a-button
-              >
-            </a-space>
+            </a-button>
           </div>
           <div class="right-list">
             <div class="right-item">
@@ -265,293 +307,418 @@
             </div>
           </div>
         </a-card>
-      </a-col>
+      </a-col> -->
     </a-row>
   </div>
 </template>
 <script setup lang="ts">
-import { IconClose, IconSearch, IconTiktokColor } from "@arco-design/web-vue/es/icon";
-import { useAppStore } from "@/store";
-import { computed, nextTick, onMounted, reactive, ref } from "vue";
-import { Message } from "@arco-design/web-vue";
-import moment from "moment";
-import AddSession from "@/views/session/sessionManager/components/addSession.vue";
-import { chatApi, getDialogListApi, getSessionDetailsApi, sessionListApi } from "@/api/session";
+  import {
+    IconClose,
+    IconSearch,
+    IconTiktokColor,
+  } from '@arco-design/web-vue/es/icon';
+  import { useAppStore } from '@/store';
+  import { computed, nextTick, onMounted, reactive, ref } from 'vue';
+  import { Message } from '@arco-design/web-vue';
+  import { EventSourceParserStream } from 'eventsource-parser/stream';
+  import moment from 'moment';
+  import AddSession from '@/views/session/sessionManager/components/addSession.vue';
+  import {
+    chatApi,
+    getDialogListApi,
+    getSessionDetailsApi,
+    sessionListApi,
+  } from '@/api/session';
+  import { getAuthorization } from '@/utils/auth';
 
-const sessionDetailList = ref([]); //鏍规嵁浼氳瘽id鍑烘潵鐨勪細璇濊鎯�
-const sessionList = ref([]); //浼氳瘽鍒楄〃
-const modalObj = reactive({ add: false });
+  const sessionDetailList = ref([]); //鏍规嵁浼氳瘽id鍑烘潵鐨勪細璇濊鎯�
+  const sessionList = ref([]); //浼氳瘽鍒楄〃
+  const modalObj = reactive({ add: false });
+  const dialogId = ref('');
+  const chatDis = ref(false);
+  const loading = ref(false);
 
-const currIndex = ref(0);
-const displayedText = ref(""); // 姝e湪鏄剧ず鐨勬枃瀛�
-let timer: number | null = null;
-const streamStr = ref("");
-const inputMsg = ref("");
-const activeSessionId = ref("");
-const fieldNames = { value: "id", label: "name" };
-const dialogs = ref([]);
-const selectValue = ref("");
-const DialogList = async () => {
-  const { code, data } = await getDialogListApi();
-  if (code === 200) {
-    if (data) {
-      selectValue.value = data[0].id;
-      dialogs.value = data;
-      querySessionList()
+  const currIndex = ref(0);
+  const displayedText = ref(''); // 姝e湪鏄剧ず鐨勬枃瀛�
+  let timer: number | null = null;
+  const streamStr = ref('');
+  const inputMsg = ref('');
+  const activeSessionId = ref('');
+  const fieldNames = { value: 'id', label: 'name' };
+  const dialogs = ref([]);
+  const selectValue = ref('');
+  const sectionList = ref({});
+  const DialogList = async () => {
+    const { code, data } = await getDialogListApi();
+    if (code === 200) {
+      if (data) {
+        selectValue.value = data[0].id;
+        dialogs.value = data;
+        querySessionList();
+      }
     }
-  }
-};
-const dialogChange = (value) => {
-  querySessionList()
-};
-const sendMessage = async (event) => {
-  event.preventDefault();
-  if (!activeSessionId.value) {
-    Message.warning("璇烽�夋嫨浼氳瘽");
-    return;
-  }
-  if (inputMsg.value) {
-    const { code, data } = await chatApi({
-      conversation_id: activeSessionId.value,
-      messages: inputMsg.value
-    });
-    const res = await getSessionDetailsApi(activeSessionId.value);
-    if (res.code === 200) {
-      sessionDetailList.value = res.data.message.map((item, index) => {
-        if (index === res.data.message.length - 1) {
-          item.role = "last";
-          displayedText.value = "";
-          currIndex.value = 0;
-          streamStr.value = item.content;
-          startDisplayStr();
-        }
-        return item;
-      });
+  };
+  const dialogChange = (val) => {
+    dialogId.value = val;
+    querySessionList();
+  };
+  const sentClick = (event) => {
+    sendMessage(event);
+  };
+  const sendMessage = async (event) => {
+    event.preventDefault();
+    chatDis.value = true;
+    loading.value = true;
+    if (!activeSessionId.value) {
+      Message.warning('璇烽�夋嫨浼氳瘽');
+      chatDis.value = false;
+      loading.value = false;
+      return;
+    }
+
+    // if (displayedText.value) {
+    //   querySessionList();
+    // }
+
+    if (inputMsg.value) {
+      sessionDetailList.value.push({ content: inputMsg.value, role: 'user' });
+      sessionDetailList.value.push({ role: 'last' });
       refreshScroll();
+      const response = await fetch(
+        '/api/tech/cloudminds/query?modeltype=localragflow',
+        {
+          method: 'POST',
+          headers: {
+            'Authorization': getAuthorization(),
+            'Content-Type': 'application/json',
+          },
+          body: JSON.stringify({
+            conversation_id: activeSessionId.value,
+            messages: inputMsg.value,
+          }),
+        }
+      );
+
+      const reader = response?.body
+        ?.pipeThrough(new TextDecoderStream())
+        .pipeThrough(new EventSourceParserStream())
+        .getReader();
+      currIndex.value = 0;
+      while (true) {
+        const x = await reader?.read();
+        if (x) {
+          const { done, value } = x;
+          console.log(x, 999);
+          try {
+            const val = JSON.parse(value?.data || '');
+            const d = val?.data;
+            if (typeof d !== 'boolean') {
+              console.info('data:', d);
+              streamStr.value = d.content;
+              startDisplayStr();
+            }
+          } catch (e) {
+            console.warn(e);
+          }
+          if (done) {
+            console.info('done');
+            displayedText.value = '';
+            querySessionDetail(sectionList.value);
+            break;
+          }
+        }
+      }
+      chatDis.value = false;
+      loading.value = false;
+      inputMsg.value = '';
+    } else {
+      Message.warning('娑堟伅涓嶈兘涓虹┖');
+      chatDis.value = false;
+      loading.value = false;
     }
-    inputMsg.value = "";
-  } else {
-    Message.warning("娑堟伅涓嶈兘涓虹┖");
-  }
-};
-const querySessionDetail = async (session) => {
-  activeSessionId.value = session.id;
-  const { code, data } = await getSessionDetailsApi(session.id);
-  if (code === 200) {
-    sessionDetailList.value = data.message;
-    refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
-  }
-};
-const scrollbar = ref(null);
-const refreshScroll = () => {
-  nextTick(() => {
-    const container = document.getElementById("home");
-    scrollbar.value.scrollTop(container.scrollHeight);
+  };
+  const querySessionDetail = async (session) => {
+    sectionList.value = session;
+    activeSessionId.value = session.id;
+    const { code, data } = await getSessionDetailsApi(session.id);
+    if (code === 200) {
+      sessionDetailList.value = data.message;
+      refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
+    }
+  };
+  const scrollbar = ref(null);
+  const refreshScroll = () => {
+    nextTick(() => {
+      const container = document.getElementById('home');
+      scrollbar.value.scrollTop(container.scrollHeight);
+    });
+  };
+  // 鏌ヨ浼氳瘽鍒楄〃
+  const querySessionList = async () => {
+    const { code, data } = await sessionListApi(selectValue.value);
+    if (code === 200) {
+      sessionList.value = data;
+      activeSessionId.value = data[0].id; //榛樿閫夋嫨绗竴涓�
+      querySessionDetail(data[0]);
+    } else {
+      Message.warning('鏌ヨ澶辫触');
+    }
+  };
+  //鏂板浼氳瘽涔嬪悗鍒锋柊浼氳瘽鍒楄〃
+  const addSession = () => {
+    querySessionList();
+  };
+  onMounted(() => {
+    DialogList();
   });
-};
-// 鏌ヨ浼氳瘽鍒楄〃
-const querySessionList = async () => {
-  const { code, data } = await sessionListApi(selectValue.value);
-  if (code === 200) {
-    sessionList.value = data;
-  } else {
-    Message.warning("鏌ヨ澶辫触");
-  }
-};
-//鏂板浼氳瘽涔嬪悗鍒锋柊浼氳瘽鍒楄〃
-const addSession = () => {
-  querySessionList();
-};
-onMounted(() => {
-  DialogList();
-});
-const appStore = useAppStore();
-const theme = computed(() => {
-  return appStore.theme;
-});
-//鏂囧瓧鍔ㄦ�佽緭鍑�
-const startDisplayStr = () => {
-  if (timer) {
-    clearTimeout(timer!);
-  }
-  const res = streamStr.value;
-  // 灏嗘暟缁勪腑鐨勫瓧绗︿覆鎷兼帴璧锋潵
-  if (currIndex.value < res.length) {
-    displayedText.value += res[currIndex.value];
-    currIndex.value++;
-    setTimeout(startDisplayStr, 100);
-  } else {
-    clearTimeout(timer!);
-    timer = null;
-  }
-};
+  const appStore = useAppStore();
+  const theme = computed(() => {
+    return appStore.theme;
+  });
+  //鏂囧瓧鍔ㄦ�佽緭鍑�
+  const startDisplayStr = () => {
+    if (timer) {
+      clearTimeout(timer!);
+    }
+    const res = streamStr.value;
+    // 灏嗘暟缁勪腑鐨勫瓧绗︿覆鎷兼帴璧锋潵
+    if (currIndex.value < res.length) {
+      displayedText.value += res[currIndex.value];
+      currIndex.value++;
+      setTimeout(startDisplayStr, 100);
+      refreshScroll();
+    } else {
+      clearTimeout(timer!);
+      timer = null;
+    }
+  };
 </script>
 <style scoped lang="scss">
-.isLeftActive {
-  background-color: lightgrey;
-}
+  .isLeftActive {
+    background-color: #ededf5;
+  }
+  .left-list-item {
+    margin-bottom: 2px;
+  }
+  .left-list-item:hover {
+    background-color: #ededf5;
+  }
 
-.light {
-  color: white !important;
-}
+  .dark {
+    color: gray !important;
+  }
 
-.dark {
-  color: gray !important;
-}
+  .container {
+    .top-title {
+      line-height: 32px;
+      font-size: 16px;
+      color: #333;
+    }
+    .left-select {
+      :deep(.arco-select-view-single) {
+        border-radius: 5px;
+      }
+    }
 
-.container {
+    .center,
+    .right {
+      box-sizing: border-box;
+      height: calc(100vh - 200px);
+    }
 
-.top-title {
-  line-height: 60px;
-  font-size: 25px;
-  font-family: 榛戜綋;
-}
-
-.center,
-.right {
-  box-sizing: border-box;
-  height: calc(100vh - 100px);
-}
-
-.left {
-  /* height: calc(100vh - 160px);
+    .left {
+      /* height: calc(100vh - 160px);
         overflow-y: auto;
         overflow-x: hidden;*/
-  border: 0px;
+      border: 0px;
 
-.left-list {
+      .left-list {
+        .item {
+          cursor: pointer;
 
-.item {
-  cursor: pointer;
+          .text,
+          .time {
+            line-height: 30px;
+          }
 
-.text,
-.time {
-  line-height: 30px;
-}
+          .text {
+            color: black;
+            padding-left: 10px;
+          }
 
-.text {
-  color: black;
-  padding-left: 10px;
-}
+          .time {
+            color: gray;
+            font-size: 12px;
+            padding-left: 10px;
+          }
+        }
+      }
+    }
+    .card-btn-1 {
+      margin: 8px 15px;
+      width: 100%;
+      border-radius: 5px;
+    }
 
-.time {
-  color: gray;
-  font-size: 12px;
-  padding-left: 10px;
-}
+    .card-btn-2 {
+      margin: 10px 10px;
+    }
+    .chat-item-answer {
+      box-sizing: border-box;
+      background: #f1f1f1;
+      border-radius: 14px;
+      .light {
+        box-sizing: border-box;
+        background: #f1f1f1;
+        border-radius: 14px;
+      }
+    }
 
-}
-}
-}
-.card-btn-1 {
-  margin: 10px;
-  width: 75%;
-}
+    .center {
+      position: relative;
 
-.card-btn-2 {
-  margin: 10px 10px;
-}
+      .center-title {
+        line-height: 60px;
+        font-size: 25px;
+        font-family: 榛戜綋;
+        color: deepskyblue;
+      }
 
-.center {
-  position: relative;
+      .center-content {
+        font-size: 14px;
+        color: gray;
+      }
 
-.center-title {
-  line-height: 60px;
-  font-size: 25px;
-  font-family: 榛戜綋;
-  color: deepskyblue;
-}
+      .center-question {
+        margin-top: 20px;
+        display: flex;
+        justify-content: space-between;
 
-.center-content {
-  font-size: 14px;
-  color: gray;
-}
+        .center-question-left {
+          margin-top: 5px;
+          margin-left: 20px;
+        }
 
-.center-question {
-  margin-top: 20px;
-  display: flex;
-  justify-content: space-between;
+        .center-question-right {
+          margin-right: 20px;
+        }
+      }
+      .center-list {
+        margin-top: 10px;
 
-.center-question-left {
-  margin-top: 5px;
-  margin-left: 20px;
-}
+        .item {
+          border-radius: 10px;
+          margin-top: 10px;
+          padding: 10px;
+          min-height: 120px;
+          background-color: #e9f3ff;
+          .item-content {
+            color: #666;
+          }
+          .item-title {
+            text-align: center;
+            line-height: 40px;
+            font-size: 20px;
+            font-family: 榛戜綋;
+            color: #333;
+          }
+        }
+      }
+      .chartStart {
+        color: #4955f5;
+        cursor: pointer;
+        font-family: PingFangSC-Medium;
+        font-size: 12px;
+        font-weight: 500;
+      }
+      .chat_bottom {
+        display: flex;
+        align-items: center;
+        .center-bottom {
+          // position: absolute;
+          // width: 90%;
+          // bottom: 20px;
+          // left: 5%;
+          background: #fff;
+          border: 1px solid #00000014;
+          border-radius: 24px;
+          display: flex;
+          flex: 1 1;
+          flex-direction: column;
+          overflow: hidden;
+          position: relative;
+          :deep(.arco-textarea-wrapper) {
+            border-radius: 24px;
+          }
 
-.center-question-right {
-  margin-right: 20px;
-}
+          .btn-send {
+            position: absolute !important;
+            right: 5px;
+            bottom: 5px;
+            z-index: 10;
+          }
+        }
+      }
+    }
+    .chat-item {
+      padding: 10px 0;
+      .chart-user-text {
+        font-weight: 600;
+        font-size: 14px;
+        color: #333;
+        margin-top: 4px;
+      }
+      .icon-user-jpg {
+        border: 1px solid #d9d9d9;
+      }
+    }
+    .right {
+      .right-top {
+        display: flex;
+        justify-content: space-between;
 
-}
-.center-list {
-  margin-top: 10px;
+        .right-title {
+          font-size: 25px;
+          color: black;
+        }
 
-.item {
-  border-radius: 10px;
-  margin-top: 10px;
-  padding: 10px;
-  height: 120px;
-  background-color: lightcyan;
+        .right-btn {
+          position: relative;
+          left: 20px;
+          top: 0px;
+        }
+      }
+      .right-tag {
+        margin-top: 20px;
+        display: flex;
+        justify-content: space-between;
+        flex-wrap: wrap;
+        :deep(.arco-btn-primary) {
+          margin-bottom: 10px !important;
+          &:hover {
+            background-color: #e9f3ff;
+            color: rgb(22, 93, 255);
+          }
+        }
+      }
 
-.item-title {
-  text-align: center;
-  line-height: 40px;
-  font-size: 20px;
-  font-family: 榛戜綋;
-  color: black;
-}
+      .right-list {
+        .right-item {
+          border-radius: 10px;
+          margin-top: 10px;
+          padding: 10px;
+          min-height: 120px;
+          background-color: #e9f3ff;
 
-}
-}
-.center-bottom {
-  position: absolute;
-  width: 90%;
-  bottom: 20px;
-  left: 5%;
-}
-
-}
-.right {
-
-.right-top {
-  display: flex;
-  justify-content: space-between;
-
-.right-title {
-  font-size: 25px;
-  font-family: 榛戜綋;
-  color: black;
-}
-
-.right-btn {
-  position: relative;
-  left: 20px;
-  top: 0px;
-}
-
-}
-.right-tag {
-  margin-top: 20px;
-}
-
-.right-list {
-
-.right-item {
-  border-radius: 10px;
-  margin-top: 10px;
-  padding: 10px;
-  height: 120px;
-  background-color: lightcyan;
-
-.item-title {
-  text-align: center;
-  line-height: 40px;
-  font-size: 20px;
-  font-family: 榛戜綋;
-  color: black;
-}
-
-}
-}
-}
-}
+          .item-title {
+            text-align: center;
+            line-height: 40px;
+            font-size: 20px;
+            font-family: 榛戜綋;
+            color: #333;
+          }
+        }
+      }
+    }
+  }
 </style>

--
Gitblit v1.8.0