| | |
| | | <div class="flex item-center"> |
| | | <span>应用场景</span> |
| | | </div> |
| | | <div class="cursor-pointer"> |
| | | <el-button link class="changeBatch" |
| | | >查看更多 |
| | | <el-icon> |
| | | <ArrowRight /> |
| | | </el-icon> |
| | | </el-button> |
| | | </div> |
| | | |
| | | <div class="main" v-show="state.applicationScenarios && state.applicationScenarios.length <= 3"> |
| | | <div class="flex flex-wrap items-center"> |
| | | <div |
| | | class="main_item flex cursor-pointer" |
| | | v-for="item in state.applicationScenarios" |
| | | :key="item.group_id" |
| | | :class="{ main_item_active: item.group_id === topGroupId }" |
| | | @click="changeScenarios(item)" |
| | | > |
| | | <div :class="['ywifont ywicon-' + item.Icon]"></div> |
| | | |
| | | <div class="right"> |
| | | <h4>{{ item.group_name }}</h4> |
| | | <p>{{ item.group_title }}</p> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="main"> |
| | | <div |
| | | class="main_item flex cursor-pointer" |
| | | v-for="(item, index) in state.applicationScenarios" |
| | | :key="item.ID" |
| | | :class="{ main_item_active: item.ID === state.scenariosIndex }" |
| | | @click="changeScenarios(item)" |
| | | > |
| | | <div :class="['iconfont icon-' + item.Icon]"></div> |
| | | |
| | | <div class="right"> |
| | | <h4>{{ item.Title }}</h4> |
| | | <p>{{ item.Content }}</p> |
| | | </div> |
| | | </div> |
| | | <div class="block main" v-show="state.applicationScenarios && state.applicationScenarios.length > 3"> |
| | | <el-carousel height="80" :interval="5000" indicator-position="none"> |
| | | <el-carousel-item v-for="group in groupedArray" :key="group" class="set-carousel-item"> |
| | | <div |
| | | class="main_item flex cursor-pointer" |
| | | v-for="item in group" |
| | | :key="item.group_id" |
| | | :class="{ main_item_active: item.group_id === topGroupId }" |
| | | @click="changeScenarios(item)" |
| | | > |
| | | <div :class="['ywifont ywicon-' + item.Icon]"></div> |
| | | <div class="right"> |
| | | <h4>{{ item.group_name }}</h4> |
| | | <p>{{ item.group_title }}</p> |
| | | </div> |
| | | </div> |
| | | </el-carousel-item> |
| | | </el-carousel> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { reactive } from 'vue'; |
| | | import { computed, reactive, ref } from 'vue'; |
| | | import { activeGroupType, sceneGroupList, topGroupId } from '/@/stores/chatRoom'; |
| | | let state = reactive({ |
| | | applicationScenarios: [ |
| | | { |
| | | ID: 1, |
| | | Icon: 'biaodan', |
| | | Title: '解读李四的反应', |
| | | Content: '张三打了李四一巴掌,李四对张三说:"你是不是没吃饭",李四说这句话含义是?', |
| | | }, |
| | | { |
| | | ID: 2, |
| | | Icon: 'putong', |
| | | Title: '解释努力与内卷的区别', |
| | | Content: '怎么解释努力和内卷的区别?', |
| | | }, |
| | | { |
| | | ID: 3, |
| | | Icon: 'zhongduancanshuchaxun', |
| | | Title: '其他问题', |
| | | Content: '请搜索你想知道的问题', |
| | | }, |
| | | { |
| | | ID: 4, |
| | | Icon: 'tuichuquanping', |
| | | Title: '给宝宝取有文化内涵的名字', |
| | | Content: '请以诗经中的典故给男宝宝取名,姓顾,名字要求3个字,给5个名字供我选择。', |
| | | }, |
| | | ], |
| | | scenariosIndex: 0, |
| | | applicationScenarios: [], |
| | | scenariosIds: [], |
| | | }); |
| | | const changeScenarios = (item) => { |
| | | state.scenariosIndex = item.ID; |
| | | const emits = defineEmits<{ |
| | | (event: 'tagListClick', data): void; |
| | | }>(); |
| | | const changeScenarios = async (item) => { |
| | | topGroupId.value = item.group_id; |
| | | const curGroupID = item.p_group_id; |
| | | const curID = item.group_id; |
| | | let curGroupIDs = []; |
| | | //判断当前为父级 |
| | | if (!curGroupID) { |
| | | state.applicationScenarios.forEach((item) => { |
| | | if (curID == item.p_group_id) { |
| | | curGroupIDs.push(item.group_id); |
| | | } |
| | | }); |
| | | } else { |
| | | curGroupIDs.push(curID); |
| | | } |
| | | emits('tagListClick', curGroupIDs); |
| | | // setRoomConfig(activeRoomId.value, 'isAnswerByLLM', false); |
| | | }; |
| | | const iconList = ref([ |
| | | 'duoweidu', |
| | | 'zhibiao', |
| | | 'shujuzhongxin', |
| | | 'shujuguanli', |
| | | 'wendang', |
| | | 'grid', |
| | | 'liebiao', |
| | | 'wentifankui', |
| | | 'cedian', |
| | | 'shuzhuangtu', |
| | | 'bengzhan', |
| | | 'gerenxinxi_o', |
| | | 'bengzhan1', |
| | | 'yingyongzhongxin', |
| | | ]); |
| | | const getIconByIndex = (index) => { |
| | | const iconCount = iconList.value.length; |
| | | return iconList.value[index % iconCount]; |
| | | }; |
| | | const getMainSectionList = async () => { |
| | | let result = []; |
| | | await sceneGroupList.value.forEach((sectionItem, index) => { |
| | | sectionItem.Icon = getIconByIndex(index); |
| | | if (activeGroupType.value == sectionItem.group_type) { |
| | | result.push(sectionItem); |
| | | } |
| | | }); |
| | | state.applicationScenarios = result; |
| | | result?.[0] && changeScenarios(result[0]); |
| | | }; |
| | | const groupedArray = computed(() => { |
| | | const groups = []; |
| | | let i = 0; |
| | | while (state.applicationScenarios.length > i) { |
| | | groups.push(state.applicationScenarios.slice(i, (i += 4))); |
| | | } |
| | | return groups; |
| | | }); |
| | | defineExpose({ |
| | | getMainSectionList, |
| | | }); |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | .pc-scenes { |
| | | -webkit-box-sizing: border-box; |
| | | box-sizing: border-box; |
| | | margin-top: 40px; |
| | | margin-top: 24px; |
| | | width: 760px; |
| | | padding: 0; |
| | | font-size: 14px; |
| | |
| | | width: 100%; |
| | | border-radius: 5px; |
| | | border: 1px solid #d9dbde; |
| | | display: flex; |
| | | padding: 8px; |
| | | flex-wrap: wrap; |
| | | |
| | | &_item { |
| | | width: 50%; |
| | | border-radius: 5px; |
| | | height: 100px; |
| | | padding: 18px 12px; |
| | | -webkit-transition: background-color 0.1s ease-in-out; |
| | | -o-transition: background-color 0.1s ease-in-out; |
| | |
| | | } |
| | | } |
| | | } |
| | | .set-carousel-item { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | } |
| | | } |
| | | .set-page { |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | margin: 10px 0px; |
| | | } |
| | | } |
| | | :deep(.el-carousel__container) { |
| | | height: 200px !important; |
| | | } |
| | | </style> |