| | |
| | | <template> |
| | | <div class="flex items-center"> |
| | | <img src="/static/images/logo/logo-mini.svg" alt="logo" class="layout-logo-medium-img" /> |
| | | <p class="set-waterTitle"><strong>水务 AI</strong>汇聚全球 AI 精髓</p> |
| | | <p class="set-waterTitle"><strong>WI 水务智能专家</strong>智慧水务助手</p> |
| | | </div> |
| | | <div class="flex items-center pc-roleList"> |
| | | <div v-for="(item, index) in state.roleList" :key="index" class="flex items-center pl-6" @click="handleClick(item)"> |
| | | <el-tooltip :content="item.Content" placement="top" effect="light" popper-class="my-pop"> |
| | | <div class="modelItem cursor-pointer flex items-center" :class="{ modelItemActive: item.ID === state.activeRole }"> |
| | | <div v-for="(item, index) in llmList" :key="item.logicId" class="flex items-center pl-6" @click="handleClick(item)"> |
| | | <div class="modelItem cursor-pointer flex items-center" :class="{ modelItemActive: item.logicId === activeLLMId }"> |
| | | <img :src="item.icon" alt="icon" class="set-icon box-border" /> |
| | | <span>{{ item.logicTitle }}</span> |
| | | </div> |
| | | <!-- <el-tooltip :content="item.Content" placement="top" effect="light" popper-class="my-pop"> |
| | | <div class="modelItem cursor-pointer flex items-center " :class="{ modelItemActive: item.ID === state.activeRole }"> |
| | | <img :src="item.Icon" alt="icon" class="set-icon box-border" /> |
| | | <span>{{ item.Title }}</span> |
| | | </div> |
| | | </el-tooltip> |
| | | </el-tooltip> --> |
| | | </div> |
| | | <div class="flex items-center cursor-pointer pl-5"> |
| | | <div class="modelItem cursor-pointer flex items-center"> |
| | | <img src="/static/images/wave/More.png" alt="icon" class="set-icon box-border" /> |
| | | <img src="/static/images/wave/More.png" alt="icon" class="set-icon-more box-border" /> |
| | | <span>更多</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="playInput hl_input"> |
| | | <div class="assembly flex"> |
| | | <el-button title="插件菜单" class="label flex items-center cursor-pointer" link> |
| | | <img src="/static/images/wave/PlugIn.png" class="set-icon box-border" /> |
| | | </el-button> |
| | | </div> |
| | | <div class="set-input"> |
| | | <el-input v-model="state.inputAnswer" placeholder="在这里输入您的问题开始和AI对话" class="set-inputAnswer" /> |
| | | </div> |
| | | <div class="h100 flex items-center"> |
| | | <div class="upload_img"> |
| | | <div class="imgbox cursor-pointer flex items-center"> |
| | | <el-button title="AI看图" class="cursor-pointer" link style="margin-left: unset"> |
| | | <img src="/static/images/wave/LookImg.png" class="set-img-icon box-border" /> |
| | | </el-button> |
| | | <el-button title="AI语音对话" class="cursor-pointer" link style="margin-left: unset"> |
| | | <img src="/static/images/wave/HeadImg.png" class="set-img-icon box-border" /> |
| | | </el-button> |
| | | |
| | | <el-button title="AI看图" class="cursor-pointer" link> |
| | | <div class="send"> |
| | | <img src="/static/images/wave/QueryImg.png" /> |
| | | </div> |
| | | </el-button> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <PlayBar v-model="inputValue" @send-click="sendClick" /> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { reactive } from 'vue'; |
| | | import { onMounted, reactive, ref } from 'vue'; |
| | | import { GetLLMList, SetLLM } from '/@/api/ai/chat'; |
| | | import PlayBar from '/@/components/chat/components/playBar/PlayBar.vue'; |
| | | import router from '/@/router'; |
| | | import { activeChatRoom } from '/@/stores/chatRoom'; |
| | | const emits = defineEmits(['sendClick']); |
| | | const inputValue = ref(''); |
| | | |
| | | const sendClick = () => { |
| | | if (!inputValue.value) return; |
| | | activeChatRoom.value.title = inputValue.value; |
| | | router.push({ |
| | | name: 'AskAnswer', |
| | | }); |
| | | }; |
| | | let state = reactive({ |
| | | roleList: [ |
| | | { |
| | |
| | | }, |
| | | ], |
| | | activeRole: 0, |
| | | inputAnswer: '', |
| | | }); |
| | | const handleClick = (item) => { |
| | | state.activeRole = item.id; |
| | | |
| | | const activeLLMId = ref(); |
| | | const llmList = ref([]); |
| | | const iconList = ['/static/images/wave/Glm.jpg', '/static/images/wave/Glm.jpg', '/static/images/wave/Glm.jpg']; |
| | | const getLLMList = async () => { |
| | | const res = await GetLLMList(); |
| | | |
| | | const resData = (res?.llm_list || []) as any[]; |
| | | llmList.value = resData.map((item, index) => ({ |
| | | get logicId() { |
| | | return this.logicModel.id; |
| | | }, |
| | | get logicTitle() { |
| | | return this.logicModel.title; |
| | | }, |
| | | icon: iconList[index], |
| | | logicModel: { |
| | | ...item, |
| | | }, |
| | | })); |
| | | const first = llmList.value?.[0]; |
| | | first && setLLm(first.logicId); |
| | | }; |
| | | |
| | | const setLLm = async (llmId: string) => { |
| | | |
| | | // const res = await SetLLM({ |
| | | // llm: llmId, |
| | | // }); |
| | | activeLLMId.value = llmId; |
| | | |
| | | return true; |
| | | }; |
| | | const handleClick = (item) => { |
| | | setLLm(item.logicId); |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | getLLMList(); |
| | | }); |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | .set-waterTitle { |
| | |
| | | height: 20px; |
| | | position: relative; |
| | | } |
| | | .set-icon-more { |
| | | width: 16px; |
| | | height: 16px; |
| | | position: relative; |
| | | } |
| | | span { |
| | | margin-left: 8px; |
| | | font-weight: 500; |