<template>
|
<div class="pc-scenes">
|
<div class="title flex items-center justify-between">
|
<div class="flex item-center">
|
<span>应用场景</span>
|
</div>
|
<div class="cursor-pointer">
|
<el-button link class="changeBatch" @click="lookMore"
|
>查看更多
|
<el-icon>
|
<ArrowRight />
|
</el-icon>
|
</el-button>
|
</div>
|
</div>
|
|
<div class="main" v-show="state.applicationScenarios && state.applicationScenarios.length < 3">
|
<div
|
class="main_item flex cursor-pointer"
|
v-for="item in state.applicationScenarios"
|
:key="item.section_id"
|
:class="{ main_item_active: item.section_id === activeSectionAId }"
|
@click="changeScenarios(item)"
|
>
|
<div :class="['iconfont icon-' + item.Icon]"></div>
|
|
<div class="right">
|
<h4>{{ item.section_name }}</h4>
|
<p>{{ item.section_title }}</p>
|
</div>
|
</div>
|
</div>
|
|
<div class="block main" v-show="state.applicationScenarios && state.applicationScenarios.length > 3">
|
<el-carousel height="80">
|
<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.section_id"
|
:class="{ main_item_active: item.section_id === activeSectionAId }"
|
@click="changeScenarios(item)"
|
>
|
<div :class="['iconfont icon-' + item.Icon]"></div>
|
<div class="right">
|
<h4>{{ item.section_name }}</h4>
|
<p>{{ item.section_title }}</p>
|
</div>
|
</div>
|
</el-carousel-item>
|
</el-carousel>
|
</div>
|
</div>
|
</template>
|
|
<script setup lang="ts">
|
import { computed, onMounted, reactive } from 'vue';
|
import { getSectionList } from '/@/api/ai/chat';
|
import router from '/@/router';
|
import { activeRoomId, activeSectionAId, setRoomConfig } from '/@/stores/chatRoom';
|
|
let state = reactive({
|
applicationScenarios: [],
|
scenariosIds: [],
|
});
|
const changeScenarios = async (item) => {
|
activeSectionAId.value = item.section_id;
|
setRoomConfig(activeRoomId.value, 'isAnswerByLLM', false);
|
};
|
const getMainSectionList = async () => {
|
const res = await getSectionList();
|
let result = [];
|
const iconList = [
|
'biaodan',
|
'putong',
|
'zhongduancanshuchaxun',
|
'shidu',
|
'fuwenbenkuang',
|
'fuwenben',
|
'jiliandongxuanzeqi',
|
'jinridaiban',
|
'gongju',
|
];
|
res.sections.forEach((sectionItem, index) => {
|
sectionItem.Icon = iconList[index];
|
});
|
state.applicationScenarios = res.sections;
|
res.sections?.[0] && changeScenarios(res.sections[0]);
|
};
|
const groupedArray = computed(() => {
|
const groups = [];
|
let i = 0;
|
while (state.applicationScenarios.length > i) {
|
groups.push(state.applicationScenarios.slice(i, (i += 4)));
|
}
|
return groups;
|
});
|
|
// 查看更多
|
const lookMore = () => {
|
router.push({
|
name: 'Scenario',
|
query: {
|
ID: activeSectionAId.value,
|
},
|
});
|
};
|
onMounted(() => {
|
getMainSectionList();
|
});
|
</script>
|
<style scoped lang="scss">
|
.pc-scenes {
|
-webkit-box-sizing: border-box;
|
box-sizing: border-box;
|
margin-top: 24px;
|
width: 760px;
|
padding: 0;
|
font-size: 14px;
|
|
.title {
|
color: #999;
|
line-height: 14px;
|
|
.split {
|
height: 12px;
|
width: 2px;
|
background-color: #ccc;
|
margin: 0 10px;
|
}
|
|
span {
|
color: rgb(32, 33, 35);
|
font-size: 14px;
|
}
|
|
.changeBatch {
|
color: #999;
|
font-size: 12px;
|
transition: color 0.2s ease-in-out;
|
}
|
|
.change {
|
color: #999;
|
transition: color 0.2s ease-in-out;
|
}
|
}
|
|
.main {
|
margin-top: 12px;
|
width: 100%;
|
border-radius: 5px;
|
border: 1px solid #d9dbde;
|
padding: 8px;
|
&_item {
|
width: 50%;
|
border-radius: 5px;
|
padding: 18px 12px;
|
-webkit-transition: background-color 0.1s ease-in-out;
|
-o-transition: background-color 0.1s ease-in-out;
|
transition: background-color 0.1s ease-in-out;
|
position: relative;
|
img {
|
width: 16px;
|
height: 16px;
|
border: none;
|
}
|
.left {
|
width: 50px;
|
height: 50px;
|
border-radius: 5px;
|
}
|
|
.color0 {
|
background: linear-gradient(180deg, #f63c8b, #fd216c);
|
}
|
|
.color1 {
|
background: linear-gradient(180deg, #0ebfe1, #0ab2d3);
|
}
|
|
.color2 {
|
background: linear-gradient(180deg, #9647fe, #7b5be8);
|
}
|
|
.color3 {
|
background: linear-gradient(180deg, #fb894c, #ff7958);
|
}
|
|
.right {
|
flex: 1;
|
min-width: 0;
|
margin-left: 12px;
|
|
h4 {
|
color: #202123;
|
font-size: 13px;
|
font-weight: 500;
|
height: 16px;
|
transition: background-color 0.2s;
|
}
|
|
p {
|
font-size: 12px;
|
margin-top: 6px;
|
height: 34px;
|
line-height: 17px;
|
color: #8d8e99;
|
overflow: hidden;
|
-o-text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
-webkit-line-clamp: 2;
|
-webkit-box-orient: vertical;
|
}
|
}
|
}
|
&_item_active {
|
background-color: #ebeef3;
|
.right {
|
h4 {
|
color: #007aff;
|
}
|
}
|
}
|
.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>
|