yangyin
2024-11-29 ae25a95132dd9d9ec2968cc27241c40ddabd4305
src/layout/component/sidebar/SidebarOther.vue
@@ -41,6 +41,30 @@
                  <span class="use_name">登</span>
               </div>
            </div>
            <div class="agent_line mt-4"></div>
            <el-popover placement="right-start" :width="136" trigger="hover">
               <template #reference>
                  <div class="nav__chat">
                     <div class="nav__chat-icon">
                        <span class="chat_img ywifont ywicon-shouji !text-[20px] text-[#fff]"></span>
                     </div>
                  </div>
               </template>
               <template #default>
                  <div class="relative">
                     <div class="p-0 box-shadow-none rounded-[10px]">
                        <p class="text-center text-[#5e6772] m-0 p-0 leading-5 text-[12px]">温馨提示:请使用手机浏览器扫描二维码</p>
                        <p class="text-center text-[red] m-0 p-0 leading-5 text-[12px]">(不支持微信扫描)</p>
                        <div ref="setPhoneQRCode" class="mt-[8px] mb-[8px]"></div>
                        <p class="text-center text-[#5e6772] m-0 p-0 leading-5">
                           扫码下载 <br />
                           WI 水务智能助手
                        </p>
                     </div>
                  </div>
               </template>
            </el-popover>
         </div>
      </div>
      <div class="nav_history_list bg-[#1c1e1d]" v-show="isShowHistoryChatRoom" ref="historyChatRoomRef">
@@ -81,7 +105,7 @@
                  <div class="ywifont ywicon-xiaoxi1 flex-0 mr-2.5"></div>
                  <div class="flex-auto text-ellipsis text-nowrap text-sm group-hover:text-[#0084ff]">{{ item.title }}</div>
                  <div class="text-gray-100 flex items-center space-x-2 ml-1">
                     <div class="ywifont invisible ywicon-bianji group-hover:visible" @click.stop="editChat(item)"></div>
                     <div class="ywifont invisible ywicon-bianji group-hover:visible !text-sm" @click="editChat(item)"></div>
                     <el-popconfirm title="确定删除聊天记录?" @confirm.stop="confirmDeleteChatRoom(item)" width="180">
                        <template #reference>
                           <div class="ywifont invisible ywicon-shanchu3 group-hover:visible"></div>
@@ -104,15 +128,6 @@
            </div>
         </template>
      </el-dialog>
      <!-- <el-dialog v-model="userRenameVisible" title="重命名" width="500" :before-close="handleCloseRename" class="el-dialog-rename">
         <el-input v-model="userRenameText" :rows="8" type="textarea" />
         <template #footer>
            <div class="dialog-footer">
               <el-button @click="handleCloseRename">取消</el-button>
               <el-button type="primary" @click="confirmRename"> 确 定 </el-button>
            </div>
         </template>
      </el-dialog> -->
   </div>
</template>
@@ -120,9 +135,11 @@
import { onClickOutside } from '@vueuse/core';
import { ElMessage, ElMessageBox } from 'element-plus';
import moment from 'moment';
import { computed, onMounted, ref, watch, watchEffect } from 'vue';
import QRCode from 'qrcodejs2-fixes';
import { computed, nextTick, onMounted, ref, watch, watchEffect } from 'vue';
import type { ChatRoomItem } from './components/types';
import { DeleteHistoryGroups } from '/@/api/ai/chat';
import { DeleteHistoryGroups, setHistoryGroupTitle } from '/@/api/ai/chat';
import { SERVE_URL } from '/@/constants';
import { useSearch } from '/@/hooks/useSearch';
import { DateFilter, dateFilterMap } from '/@/model/types/date';
import {
@@ -133,6 +150,7 @@
   isSharePage,
   isShowLogin,
   newChatRoomClick,
   selectFirstRoom,
} from '/@/stores/chatRoom';
import emitter from '/@/utils/mitt';
import { accessSessionKey, userNameKey } from '/@/utils/request';
@@ -155,8 +173,6 @@
const queryParams = ref({
   title: '',
});
const userRenameVisible = ref(false);
const userRenameText = ref('');
const historyChatRoomClick = () => {
   isShowHistoryChatRoom.value = true;
};
@@ -186,10 +202,16 @@
      inputValue: room.title,
      inputErrorMessage: '请输入新的名称',
   })
      .then((value) => {
         const foundIndex = chatRoomList.value.findIndex((item) => item.id === activeRoomId.value);
         chatRoomList.value[foundIndex].title = userRenameText.value;
         userRenameVisible.value = false;
      .then(async (edit) => {
         const res = await setHistoryGroupTitle({
            history_group_id: room.id,
            title: edit.value,
         });
         if (res.json_ok) {
            const foundIndex = chatRoomList.value.findIndex((item) => item.id === activeRoomId.value);
            chatRoomList.value[foundIndex].title = edit.value;
            chatRoomRef.value.firstElementChild?.scrollIntoView();
         }
      })
      .catch(({ value }) => {
         ElMessage({
@@ -204,7 +226,7 @@
      isShowHistoryChatRoom.value = false;
   },
   {
      ignore: ['.el-message-box'],
      ignore: ['.el-message-box', '.el-popper'],
   }
);
//#endregion
@@ -286,6 +308,23 @@
   }
});
//#endregion
//#region ====================== 扫码手机端下载 ======================
const setPhoneQRCode = ref<HTMLElement | null>(null);
// 初始化生成二维码
const initQrcode = () => {
   const url = `${SERVE_URL}ai_html/views/mobileDownload/index.html`;
   nextTick(() => {
      (<HTMLElement>setPhoneQRCode.value).innerHTML = '';
      new QRCode(setPhoneQRCode.value, {
         text: url,
         width: 126,
         height: 126,
         colorDark: '#000000',
         colorLight: '#ffffff',
      });
   });
};
//#endregion
//#region ====================== 搜索聊天室 ======================
const { query, queryData } = useSearch(filteredChatRoomList, queryParams);
const debounceQuery = debounce(query);
@@ -301,6 +340,8 @@
   userName.value = Local.get(userNameKey);
});
onMounted(async () => {
   selectFirstRoom();
   emitter.on('openLoginDlg', () => {
      if (isShowLogin.value || isLoginStatus.value) return;
      openLoginDlg();
@@ -308,6 +349,7 @@
   emitter.on('logout', () => {
      logoutClick();
   });
   initQrcode();
});
</script>