From 832f9fcacb83155dff74baaa8cbe17b1d3913247 Mon Sep 17 00:00:00 2001 From: yangyin <1850366751@qq.com> Date: 星期三, 09 十月 2024 17:51:17 +0800 Subject: [PATCH] 修改聊天室 --- src/views/project/ch/home/component/waterRight/center.vue | 169 ++++++++++++++++++++++++++------------------------------ 1 files changed, 78 insertions(+), 91 deletions(-) diff --git a/src/views/project/ch/home/component/waterRight/center.vue b/src/views/project/ch/home/component/waterRight/center.vue index 9a36a87..b711449 100644 --- a/src/views/project/ch/home/component/waterRight/center.vue +++ b/src/views/project/ch/home/component/waterRight/center.vue @@ -7,8 +7,8 @@ <span class="change cursor-pointer" @click="advanceExampleClick">楂樼骇绀轰緥 ></span> </div> <div class="cursor-pointer"> - <span class="mr-1 changeBatch">鎹竴鎵�</span> - <i class="iconfont icon-shuaxin"></i> + <span class="mr-1 changeBatch" @click="batchChange">鎹竴鎵�</span> + <i class="myiconfont icon-shuaxin"></i> </div> </div> @@ -16,93 +16,88 @@ <div class="main_item flex items-center cursor-pointer" v-for="(item, index) in state.exampleContent" - :key="item.ID" - :class="{ main_item_active: item.ID === state.exampleIndex }" + :key="index" + :class="{ main_item_active: item.sample_id === activeSampleId }" @click="changeExample(item)" > <div class="left flex items-center justify-center" :class="['color' + index]"> <img :src="item.Icon" alt="" /> </div> <div class="right"> - <h4>{{ item.Title }}</h4> - <p>{{ item.Content }}</p> + <h4>{{ item.sample_title }}</h4> + <p>{{ item.sample_question }}</p> </div> </div> </div> - <el-drawer v-model="state.isShowAdvanceExample" direction="rtl" size="30%"> - <div class="box-border w100 bg-[#e0e7fb] relative flex items-center justify-center" style="padding: 30px 20px 26px"> - <!-- <el-tabs v-model="state.activeName" type="card" @tab-click="handleClick" class="set-tabs"> - <el-tab-pane label="鎻愰棶绀轰緥" name="questionExample">鎻愰棶绀轰緥</el-tab-pane> - <el-tab-pane label="鎸囦护妯℃澘" name="instructionTemplate">鎸囦护妯℃澘</el-tab-pane> - </el-tabs> --> - <div - class="box-border flex w-[203px] h-[32px] rounded-md items-center justify-between cursor-pointer relative border border-solid border-[#2c2d33]" - > - <!-- <div class="w-[108px] h100 rounded-[5px] bg-transparent absolute left-0 transition-all"></div> --> - - <div - class="tabbar-item" - :class="state.activeName === item.ID ? 'set-tabbar-active' : ''" - @click="handleTabClick(item)" - v-for="item in state.tabNameList" - :key="item.ID" - > - {{ item.Name }} - </div> - </div> - </div> - </el-drawer> </div> </template> <script setup lang="ts"> -import { reactive } from 'vue'; +import { computed, onMounted, reactive, ref } from 'vue'; +import { getSelectSample } from '/@/api/ai/chat'; +import { activeRoomId, activeSampleId, activeSectionAId, setRoomConfig } from '/@/stores/chatRoom'; let state = reactive({ - exampleContent: [ - { - ID: 1, - Icon: '/static/images/wave/ChatImg.png', - Title: '瑙h鏉庡洓鐨勫弽搴�', - Content: '寮犱笁鎵撲簡鏉庡洓涓�宸存帉,鏉庡洓瀵瑰紶涓夎:"浣犳槸涓嶆槸娌″悆楗�",鏉庡洓璇磋繖鍙ヨ瘽鍚箟鏄�?', - }, - { - ID: 2, - Icon: '/static/images/wave/ChatImg.png', - Title: '瑙i噴鍔姏涓庡唴鍗风殑鍖哄埆', - Content: '鎬庝箞瑙i噴鍔姏鍜屽唴鍗风殑鍖哄埆?', - }, - { - ID: 3, - Icon: '/static/images/wave/ChatImg.png', - Title: '鍏朵粬闂', - Content: '璇锋悳绱綘鎯崇煡閬撶殑闂', - }, - { - ID: 4, - Icon: '/static/images/wave/ChatImg.png', - Title: '缁欏疂瀹濆彇鏈夋枃鍖栧唴娑电殑鍚嶅瓧', - Content: '璇蜂互璇楃粡涓殑鍏告晠缁欑敺瀹濆疂鍙栧悕锛屽椤撅紝鍚嶅瓧瑕佹眰3涓瓧锛岀粰5涓悕瀛椾緵鎴戦�夋嫨銆�', - }, - ], - tabNameList: [ - { ID: 1, Name: '鎻愰棶绀轰緥' }, - { ID: 2, Name: '鎸囦护妯℃澘' }, - ], - exampleIndex: 0, - isShowAdvanceExample: false, - activeName: 1, + exampleContent: [], + exampleRandomContent: [], }); +const exampleList = ref([]); //妯$増鍒楄〃 +const emits = defineEmits<{ + (event: 'advanceExampleClick', data): void; + (event: 'updateChatInput', val): void; +}>(); +onMounted(() => { + getSelectListSample(); +}); +const groupedArray = computed(() => { + const groups = []; + let i = 0; + while (state.exampleRandomContent.length > i) { + groups.push(state.exampleRandomContent.slice(i, (i += 4))); + } + return groups; +}); +//鑾峰彇妯$増鍒楄〃 +const getSelectListSample = async () => { + const res = await getSelectSample({}); + state.exampleRandomContent = res.samples; + + const array = []; + res.samples.forEach((sample, index) => { + sample.Icon = '/static/images/wave/ChatImg.png'; + sample.BgColor = randomHexColor(); + if (index < 4) { + array.push(sample); + } + }); + exampleList.value = res.samples; + state.exampleContent = array; +}; + const changeExample = (item) => { - state.exampleIndex = item.ID; + emits('updateChatInput', item.sample_question); + setRoomConfig(activeRoomId.value, 'isAnswerByLLM', false); + activeSampleId.value = item.sample_id; + activeSectionAId.value = item.section_a_id; }; -//楂樼骇绀轰緥 +//鎹竴鎵� +const batchChange = () => { + const index = Math.floor(Math.random() * groupedArray.value.length); + state.exampleContent = groupedArray.value[index]; +}; +//鎵撳紑楂樼骇绀轰緥 const advanceExampleClick = () => { - state.isShowAdvanceExample = true; + emits('advanceExampleClick', true); }; -const handleTabClick = (item) => { - console.log(item.ID); - state.activeName = item.ID; + +//闅忔満鐢熸垚棰滆壊 +const randomHexColor = () => { + return `#${Math.floor(Math.random() * 16777215) + .toString(16) + .padEnd(6, '0')}`; }; +defineExpose({ + getSelectListSample, +}); </script> <style scoped lang="scss"> .pc-prompts { @@ -205,28 +200,20 @@ } } } -.tabbar-item { - width: 108px; - height: 30px; - font-size: 13px; - font-weight: 400; - line-height: 30px; - text-align: center; - cursor: pointer; - // position: absolute; - -o-transition: color 0.2s; - transition: color 0.2s; - &:nth-child(3) { - top: 0; - left: 0; - } + +:deep(.el-drawer__header) { + padding: 30px 20px 26px !important; + box-sizing: border-box; + width: 100%; + background-color: #e0e7fb; + + position: relative; + + height: unset !important; + margin-bottom: unset !important; + border-bottom: unset !important; } -.tabbar-item-active { - color: #fff; -} -.set-tabbar-active { - left: 95px; - color: #fff; - background-color: #000; +:deep(.el-drawer__body) { + overflow-x: hidden; } </style> -- Gitblit v1.9.3