<template>
|
<div class="pc-scenes">
|
<div class="title flex items-center justify-between">
|
<div class="flex item-center">
|
<span>应用场景</span>
|
</div>
|
</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="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 { computed, reactive, ref } from 'vue';
|
import { activeGroupType, sceneGroupList, topGroupId } from '/@/stores/chatRoom';
|
let state = reactive({
|
applicationScenarios: [],
|
scenariosIds: [],
|
});
|
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 = (val) => {
|
let result = [];
|
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: 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;
|
height: 100px;
|
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>
|