| | |
| | | <template> |
| | | <div class="relative h100" v-loading="loadingData" :style="`width: ${rightBox}px;transition: 0.7s ease-in;`"> |
| | | <div class="retract_icon" @click="toggleShow"> |
| | | <div class="retract_icon" @click="toggleShow" v-if="!isSharePage"> |
| | | <i class="text-[#fff] transition-all" :class="isShow ? 'ywifont ywicon-zuoyoujiantou1' : 'ywifont ywicon-zuoyoujiantou'"></i> |
| | | </div> |
| | | <div class="pc-mouldboard column exampleSlide"> |
| | |
| | | ></i> |
| | | </div> |
| | | |
| | | <div class="box-border w-[354px] flex-1 min-h-0 bg-[#e0e7fb]" v-show="activeGroupType == '业务场景'"> |
| | | <div class="box-border w-[354px] flex-1 min-h-0 bg-[#e0e7fb]" v-show="activeGroupType"> |
| | | <div class="flex flex-col w100 h100 pt-0 pr-[15px] pb-0 pl-[20px]"> |
| | | <div class="flex items-center w100 h-[30px] border border-solid border-[#b2b2b2] transition-[border-color 1s] rounded-2xl"> |
| | | <el-input v-model="queryParams.sample_title" placeholder="搜索更多" class="set-input" :prefix-icon="Search" clearable> |
| | | </el-input> |
| | | <el-input v-model="searchValue" placeholder="搜索更多" class="set-input" :prefix-icon="Search" clearable> </el-input> |
| | | </div> |
| | | <div class="mt10 w100 h100 relative" v-show="state.customBusinessList.length > 0"> |
| | | <div class="mt10 w100 h100 relative" v-show="allData[activeGroupType]"> |
| | | <div class="set_custom_label"> |
| | | <div class="chanel-tags"> |
| | | <div |
| | | v-for="(item, index) in state.customBusinessList" |
| | | v-for="(item, index) in allData[activeGroupType]" |
| | | :key="index" |
| | | :class="{ 'set-group-label-active': state.activeBusinessName === item.group_id }" |
| | | :class="{ 'set-group-label-active': activeMainScene[activeGroupType] === item.group_id }" |
| | | class="flex items-center border border-solid border-[#b2b2b2] rounded-xl mx-[3px] leading-6" |
| | | @click="handleBusinessClick(item)" |
| | | > |
| | |
| | | {{ itemChildren.group_name }} |
| | | </div> |
| | | </div> |
| | | <div class="mt10 overflow-auto set-height-custom" v-show="finalSampleList.length > 0"> |
| | | <div class="mt10 overflow-auto set-height-custom" v-if="activeGroupType !== '办公助手'"> |
| | | <div class="w100 pb-[20px]" v-for="item in finalSampleList" :key="item.sample_id"> |
| | | <div |
| | | class="cursor-pointer flex box-border p-[12px] w100 rounded bg-[#f5f7fd] transition-[background-color .2s]" |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="mt10 w100" v-show="finalSampleList.length == 0"><el-empty description="暂无数据" /></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="box-border w-[354px] flex-1 min-h-0 bg-[#e0e7fb]" v-show="activeGroupType == '办公助手'"> |
| | | <div class="flex flex-col w100 h100 pt-0 pr-[15px] pb-0 pl-[20px]"> |
| | | <div class="flex items-center w100 h-[30px] border border-solid border-[#b2b2b2] transition-[border-color 1s] rounded-2xl"> |
| | | <el-input v-model="officeParams.sample_title" placeholder="搜索更多" class="set-input" :prefix-icon="Search" clearable> |
| | | </el-input> |
| | | </div> |
| | | <div class="mt10 w100 relative h100" v-show="state.customOfficeList.length > 0"> |
| | | <div class="set_custom_label"> |
| | | <div class="chanel-tags"> |
| | | <div |
| | | v-for="(item, index) in state.customOfficeList" |
| | | :key="index" |
| | | :class="{ 'set-group-label-active': state.activeOfficeName === item.group_id }" |
| | | class="flex items-center border border-solid border-[#b2b2b2] rounded-xl mx-[3px] leading-6" |
| | | @click="handleOfficeClick(item)" |
| | | > |
| | | <span class="set-group-name">{{ item.group_name }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div |
| | | class="overflow-hidden min-h-[34px] transition-[max-height 0.2s] w100 flex flex-wrap text-xs leading-[14px] items-center bg-[#f5f7fd]" |
| | | > |
| | | <div |
| | | v-for="(itemChildren, index) in state.customOfficeChildList" |
| | | :key="index" |
| | | :class="{ 'set-label-active': state.activeOfficeChildName === itemChildren.group_id }" |
| | | @click="handleOfficeChildClick(itemChildren)" |
| | | class="cursor-pointer m-[5px] py-[5px] pl-[10px] text-[#999] transition-[background-color .1s, color .1s, border-color .1s]" |
| | | > |
| | | {{ itemChildren.group_name }} |
| | | </div> |
| | | </div> |
| | | <div class="mt10 w100 overflow-auto set-height-custom"> |
| | | <div class="w100 pb-[20px] flex flex-col" v-for="item in finalOfficeList" :key="item.sample_id"> |
| | | <div class="mt10 w100 overflow-auto set-height-custom" v-else> |
| | | <div class="w100 pb-[20px] flex flex-col" v-for="item in finalSampleList" :key="item.sample_id"> |
| | | <div class="bg-[#f5f7fd] p-[12px] transition-[background-color .2s] flex flex-col rounded-2xl"> |
| | | <div class="flex justify-between"> |
| | | <span class="set-title">{{ item.sample_title }}</span> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="box-border w-[354px] flex-1 min-h-0 bg-[#e0e7fb]" v-show="activeGroupType == '知识库'"> |
| | | <div class="flex flex-col w100 h100 pt-0 pr-[15px] pb-0 pl-[20px]"> |
| | | <div class="flex items-center w100 h-[30px] border border-solid border-[#b2b2b2] transition-[border-color 1s] rounded-2xl"> |
| | | <el-input v-model="knowledgeParams.sample_title" placeholder="搜索更多" class="set-input" :prefix-icon="Search" clearable> |
| | | </el-input> |
| | | </div> |
| | | <div class="mt10 w100 relative h100" v-show="state.knowledgeBaseList.length > 0"> |
| | | <div class="set_custom_label"> |
| | | <div class="chanel-tags"> |
| | | <div |
| | | v-for="(item, index) in state.knowledgeBaseList" |
| | | :key="index" |
| | | :class="{ 'set-group-label-active': state.activeKnowledgeName === item.group_id }" |
| | | class="flex items-center border border-solid border-[#b2b2b2] rounded-xl mx-[3px] leading-6" |
| | | @click="handleKnowledgeClick(item)" |
| | | > |
| | | <span class="set-group-name">{{ item.group_name }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div |
| | | class="overflow-hidden min-h-[34px] transition-[max-height 0.2s] w100 flex flex-wrap text-xs leading-[14px] items-center bg-[#f5f7fd]" |
| | | > |
| | | <div |
| | | v-for="(itemChildren, index) in state.customKnowledgeChildList" |
| | | :key="index" |
| | | :class="{ 'set-label-active': state.activeKnowledgeChildName === itemChildren.group_id }" |
| | | @click="handleKnowledgeChildClick(itemChildren)" |
| | | class="cursor-pointer m-[5px] py-[5px] pl-[10px] text-[#999] transition-[background-color .1s, color .1s, border-color .1s]" |
| | | > |
| | | {{ itemChildren.group_name }} |
| | | </div> |
| | | </div> |
| | | <div class="mt10 w100 overflow-auto set-height-custom" v-show="finalKnowledgeList.length > 0"> |
| | | <div class="w100 pb-[20px]" v-for="item in finalKnowledgeList" :key="item.sample_id"> |
| | | <div |
| | | class="cursor-pointer flex box-border p-[12px] w100 rounded bg-[#f5f7fd] transition-[background-color .2s]" |
| | | @click="changeExample(item)" |
| | | > |
| | | <i |
| | | class="myiconfont icon-chazhaobiaodanliebiao pl-[2px] w-[16px] h-[16px] font12 text-[#fff] transform-[scale(.85)] rounded-[50%]" |
| | | :style="`background-color:${item.BgColor}`" |
| | | ></i> |
| | | <div class="ml-6 flex-1 min-w-0"> |
| | | <div class="text-sm text-[#000] m-0 p-0 font-bold">{{ item.sample_title }}</div> |
| | | <div class="mt-[6px] text-[13px] text-[#666] h-[20px] whitespace-nowrap text-ellipsis overflow-hidden"> |
| | | {{ item.sample_question }} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="mt10 w100" v-show="finalKnowledgeList.length == 0"><el-empty description="暂无数据" /></div> |
| | | <div class="mt10 w100" v-show="finalSampleList?.length == 0"><el-empty description="暂无数据" /></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <script setup lang="ts"> |
| | | import { Search } from '@element-plus/icons-vue'; |
| | | import { computed, reactive, ref, watch } from 'vue'; |
| | | import { useSearch } from '/@/hooks/useSearch'; |
| | | import { |
| | | activeGroupType, |
| | | activeRoomId, |
| | | activeSampleId, |
| | | activeSectionAId, |
| | | exampleSceneList, |
| | | isSharePage, |
| | | sceneGroupList, |
| | | sectionAList, |
| | | setRoomConfig, |
| | | } from '/@/stores/chatRoom'; |
| | | import { convertListToTree, debounce } from '/@/utils/util'; |
| | | import { OptClassificationMap, classificationEnum } from '/@/views/types/processDrawing/index'; |
| | | import { convertListToTree } from '/@/utils/util'; |
| | | import { groupBy } from 'lodash-es'; |
| | | let state = reactive({ |
| | | activeBusinessName: '', //场景 |
| | | activeBusinessChildName: '', |
| | |
| | | exampleRandomContent: [], |
| | | exampleContent: [], |
| | | listSampleLoading: false, |
| | | sampleMap: {}, |
| | | }); |
| | | |
| | | //#region ====================== 传参 ====================== |
| | | const isShow = defineModel('isShow', { |
| | | type: Boolean, |
| | |
| | | const rightBox = computed(() => (isShow.value ? 354 : 0)); |
| | | const emit = defineEmits(['updateChatInput']); |
| | | //#endregion |
| | | //#region ====================== 业务场景/办公助手/知识库的list ====================== |
| | | const instructContentList = ref([]); //指令列表 |
| | | const exampleList = ref([]); //示例列表 |
| | | //获取模版列表 |
| | | const getSelectListSample = async () => { |
| | | exampleList.value = exampleSceneList.value; |
| | | }; |
| | | |
| | | //#region ====================== 业务场景/知识库的list ====================== |
| | | const loadingData = ref(false); |
| | | const changeExample = (item) => { |
| | | emit('updateChatInput', item.sample_question); |
| | | setRoomConfig(activeRoomId.value, 'isAnswerByLLM', false); |
| | | activeSampleId.value = item.sample_id; |
| | | activeSectionAId.value = item.group_id; |
| | | }; |
| | | //获取用户模板 |
| | | const getUserTemplate = async () => { |
| | | instructContentList.value = exampleSceneList.value; |
| | | //#endregion |
| | | //#region ====================== 办公助手使用 ====================== |
| | | const templateUseClick = (row) => { |
| | | state.useInstructDialog = true; |
| | | state.instructInfo = row; |
| | | state.inputInstruct = row.sample_question; |
| | | }; |
| | | const submitInstruct = () => { |
| | | setRoomConfig(activeRoomId.value, 'isAnswerByLLM', true); |
| | | emit('updateChatInput', state.inputInstruct); |
| | | handleClose(); |
| | | }; |
| | | //#endregion |
| | | //#region ====================== 默认选择第一个的场景的子场景 ====================== |
| | | |
| | | //场景子场景 |
| | | const handleBusinessClick = (item) => { |
| | | state.activeBusinessName = item.group_id; |
| | | state.customBusinessChildList = item.Children; |
| | | if (item.Children.length > 0) { |
| | | state.activeBusinessChildName = item.Children[0].group_id ?? ''; |
| | | } else { |
| | | state.activeBusinessChildName = ''; |
| | | state.customBusinessChildList = []; |
| | | } |
| | | }; |
| | | const handleLabelChildClick = (item) => { |
| | | state.activeBusinessChildName = item.group_id; |
| | | }; |
| | | //办公子场景 |
| | | const handleOfficeClick = (item) => { |
| | | state.activeOfficeName = item.group_id; |
| | | state.customOfficeChildList = item.Children; |
| | | if (item.Children.length > 0) { |
| | | state.activeOfficeChildName = item.Children[0].group_id ?? ''; |
| | | } else { |
| | | state.activeOfficeChildName = ''; |
| | | state.customOfficeChildList = []; |
| | | } |
| | | }; |
| | | const handleOfficeChildClick = (item) => { |
| | | state.activeOfficeChildName = item.group_id; |
| | | }; |
| | | //知识库子场景 |
| | | const handleKnowledgeClick = (item) => { |
| | | state.activeKnowledgeName = item.group_id; |
| | | state.customKnowledgeChildList = item.Children; |
| | | if (item.Children.length > 0) { |
| | | state.activeKnowledgeChildName = item.Children[0].group_id ?? ''; |
| | | } else { |
| | | state.activeKnowledgeChildName = ''; |
| | | state.customKnowledgeChildList = []; |
| | | } |
| | | }; |
| | | const handleKnowledgeChildClick = (item) => { |
| | | state.activeKnowledgeChildName = item.group_id; |
| | | }; |
| | | //#endregion |
| | | //#region ====================== 打开示例 ====================== |
| | | //打开高级示例 |
| | | const toggleShow = async () => { |
| | | isShow.value = !isShow.value; |
| | |
| | | const handleCloseTemplate = () => { |
| | | isShow.value = false; |
| | | }; |
| | | //获取主场景列表 |
| | | const getMainSectionList = async () => { |
| | | const iconList = [ |
| | | 'biaodan', |
| | | 'putong', |
| | | 'zhongduancanshuchaxun', |
| | | 'shidu', |
| | | 'fuwenbenkuang', |
| | | 'fuwenben', |
| | | 'jiliandongxuanzeqi', |
| | | 'jinridaiban', |
| | | 'gongju', |
| | | ]; |
| | | await sceneGroupList.value.forEach((sectionItem, index) => { |
| | | sectionItem.Icon = iconList[index]; |
| | | }); |
| | | sectionAList.value = sceneGroupList.value; |
| | | tagListClick(sectionAList.value); |
| | | }; |
| | | const loadingData = ref(false); |
| | | const getTableData = async () => { |
| | | if (!isShow.value) { |
| | | loadingData.value = true; |
| | | await getMainSectionList().finally(() => { |
| | | loadingData.value = false; |
| | | }); |
| | | if (activeGroupType.value == '业务场景' || activeGroupType.value == '知识库') { |
| | | await getSelectListSample(); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | //#region ====================== templateUseClick ====================== |
| | | const templateUseClick = (row) => { |
| | | state.useInstructDialog = true; |
| | | state.instructInfo = row; |
| | | state.inputInstruct = row.sample_question; |
| | | }; |
| | | const handleClose = () => { |
| | | state.useInstructDialog = false; |
| | | }; |
| | | const submitInstruct = () => { |
| | | setRoomConfig(activeRoomId.value, 'isAnswerByLLM', true); |
| | | emit('updateChatInput', state.inputInstruct); |
| | | handleClose(); |
| | | }; |
| | | //#endregion |
| | | //#region ====================== 搜索场景/办公/知识库 ====================== |
| | | const queryParams = ref({ |
| | | sample_title: '', |
| | | }); |
| | | const { query: querySample, queryData: showSampleList } = useSearch(exampleList, queryParams); |
| | | const debounceQuery = debounce(querySample); |
| | | const finalSampleList = computed(() => { |
| | | const result = showSampleList.value.filter((item) => item.group_id == state.activeBusinessChildName); |
| | | return result ?? []; |
| | | }); |
| | | watch( |
| | | () => queryParams.value.sample_title, |
| | | (val) => { |
| | | debounceQuery(); |
| | | } |
| | | ); |
| | | //办公 |
| | | const officeParams = ref({ |
| | | sample_title: '', |
| | | }); |
| | | const { query: queryInstruct, queryData: showInstructList } = useSearch(instructContentList, officeParams); |
| | | const finalOfficeList = computed(() => { |
| | | const result = showInstructList.value.filter((item) => item.group_id == state.activeOfficeChildName); |
| | | return result ?? []; |
| | | }); |
| | | const instructQuery = debounce(queryInstruct); |
| | | |
| | | watch( |
| | | () => officeParams.value.sample_title, |
| | | (val) => { |
| | | instructQuery(); |
| | | } |
| | | ); |
| | | //知识库 |
| | | const knowledgeParams = ref({ |
| | | sample_title: '', |
| | | }); |
| | | const { query: queryKnowledge, queryData: showKnowledgeList } = useSearch(exampleList, knowledgeParams); |
| | | const finalKnowledgeList = computed(() => { |
| | | const result = showKnowledgeList.value.filter((item) => item.group_id == state.activeKnowledgeChildName); |
| | | return result ?? []; |
| | | }); |
| | | const knowledgeQuery = debounce(queryKnowledge); |
| | | |
| | | watch( |
| | | () => knowledgeParams.value.sample_title, |
| | | (val) => { |
| | | knowledgeQuery(); |
| | | } |
| | | ); |
| | | //#endregion |
| | | |
| | | //#region ====================== 获取tag ====================== |
| | | |
| | | const tagListClick = (val) => { |
| | | if (val.length > 0) { |
| | | const selectTagList = []; |
| | | const officeList = []; |
| | | const businessList = []; |
| | | val.forEach((item) => { |
| | | if (item.group_type == OptClassificationMap[classificationEnum.Business]) { |
| | | businessList.push(item); |
| | | } else if (item.group_type == OptClassificationMap[classificationEnum.Knowledge]) { |
| | | selectTagList.push(item); |
| | | } else if ( |
| | | item.group_type != OptClassificationMap[classificationEnum.Business] && |
| | | item.group_type != OptClassificationMap[classificationEnum.Knowledge] |
| | | ) { |
| | | officeList.push(item); |
| | | } |
| | | }); |
| | | switch (activeGroupType.value) { |
| | | case '业务场景': |
| | | const treeBusinessList = convertListToTree(businessList, { |
| | | ID: 'group_id', |
| | | Children: 'Children', |
| | | ParentID: 'p_group_id', |
| | | }); |
| | | state.customBusinessList = treeBusinessList ?? []; //业务场景数据源 |
| | | state.activeBusinessName = treeBusinessList[0]?.group_id; //默认选中第一个业务场景 |
| | | state.customBusinessChildList = treeBusinessList[0]?.Children; //默认选中第一个业务场景的第一个子场景的数据源 |
| | | state.activeBusinessChildName = treeBusinessList[0]?.Children[0]?.group_id; |
| | | break; |
| | | case '办公助手': |
| | | const treeOfficeList = convertListToTree(officeList, { |
| | | ID: 'group_id', |
| | | Children: 'Children', |
| | | ParentID: 'p_group_id', |
| | | }); |
| | | state.customOfficeList = treeOfficeList ?? []; //办公助手数据源 |
| | | state.activeOfficeName = treeOfficeList[0]?.group_id; //默认选中第一个办公助手 |
| | | state.customOfficeChildList = treeOfficeList[0]?.Children; //默认选中第一个办公助手的第一个子场景的数据源 |
| | | state.activeOfficeChildName = treeOfficeList[0]?.Children[0]?.group_id; //默认选中第一个办公助手的第一个子场景 |
| | | break; |
| | | case '知识库': |
| | | const treeTagList = convertListToTree(selectTagList, { |
| | | ID: 'group_id', |
| | | Children: 'Children', |
| | | ParentID: 'p_group_id', |
| | | }); |
| | | state.knowledgeBaseList = treeTagList ?? []; //知识库数据源 |
| | | state.activeKnowledgeName = treeTagList[0]?.group_id; //默认选中第一个知识库 |
| | | state.customKnowledgeChildList = treeTagList[0]?.Children; //默认选中第一个知识库的第一个子场景的数据源 |
| | | state.activeKnowledgeChildName = treeTagList[0]?.Children[0]?.group_id; //默认选中第一个知识库的第一个子场景 |
| | | break; |
| | | } |
| | | const handleBusinessClick = (item) => { |
| | | activeMainScene.value[activeGroupType.value] = item.group_id; |
| | | state.customBusinessChildList = item.children; |
| | | state.activeBusinessChildName = item.children[0]?.group_id; |
| | | if (!state.activeBusinessChildName) { |
| | | finalSampleList.value = []; |
| | | } else { |
| | | state.customBusinessList = []; |
| | | state.customBusinessChildList = []; |
| | | state.customOfficeChildList = []; |
| | | state.customKnowledgeChildList = []; |
| | | state.activeBusinessName = ''; |
| | | state.activeBusinessChildName = ''; |
| | | state.activeOfficeName = ''; |
| | | state.activeOfficeChildName = ''; |
| | | state.activeKnowledgeName = ''; |
| | | state.activeKnowledgeChildName = ''; |
| | | state.customOfficeList = []; |
| | | state.knowledgeBaseList = []; |
| | | finalSampleList.value = searchFilterSampleList(state.sampleMap[state.activeBusinessChildName]); |
| | | } |
| | | }; |
| | | const handleLabelChildClick = (item) => { |
| | | state.activeBusinessChildName = item.group_id; |
| | | finalSampleList.value = searchFilterSampleList(state.sampleMap[state.activeBusinessChildName]); |
| | | }; |
| | | //#endregion |
| | | |
| | | watch( |
| | | () => activeGroupType.value, |
| | | async (val) => { |
| | | if (val == '办公助手') { |
| | | await getUserTemplate(); |
| | | } else { |
| | | await getSelectListSample(); |
| | | //#region ====================== 默认选择第一个的场景的子场景 ====================== |
| | | const allData = ref({}); |
| | | const activeMainScene = ref({}); |
| | | const activeSubScene = ref({}); |
| | | const allSubScene = ref([]); |
| | | const searchValue = ref(''); |
| | | const finalSampleList = ref([]); //搜索过滤后的示例列表 |
| | | const getTableData = async () => { |
| | | const res = await sceneGroupList.value; |
| | | let groupDataByType = groupBy(res ?? [], (item) => item.group_type); |
| | | for (const key in groupDataByType) { |
| | | if (Object.prototype.hasOwnProperty.call(groupDataByType, key)) { |
| | | const value = groupDataByType[key]; |
| | | const newValue = convertListToTree(value ?? [], { |
| | | ID: 'group_id', |
| | | ParentID: 'p_group_id', |
| | | Children: 'children', |
| | | }); |
| | | groupDataByType[key] = newValue; |
| | | } |
| | | tagListClick(sectionAList.value); |
| | | }, |
| | | { |
| | | immediate: true, |
| | | } |
| | | ); |
| | | const keys = Object.keys(groupDataByType); |
| | | if (keys.includes('业务场景')) { |
| | | const value = groupDataByType['业务场景']; |
| | | //有业务场景,业务场景放第一 |
| | | groupDataByType = { |
| | | 业务场景: value, |
| | | ...groupDataByType, |
| | | }; |
| | | } |
| | | allData.value = groupDataByType; |
| | | const typeArr = Object.keys(allData.value); |
| | | let subSceneList = []; |
| | | |
| | | if (activeGroupType.value) { |
| | | // 初始化激活 mainScene |
| | | activeMainScene.value = typeArr.reduce((preVal, curVal) => { |
| | | const mainSceneList = allData.value[curVal]; |
| | | // 设置第一个激活 |
| | | preVal[curVal] = mainSceneList?.[0]?.group_id; |
| | | // 初始化激活 subScene |
| | | mainSceneList.map((item, index, array) => { |
| | | if (item.children) { |
| | | subSceneList = subSceneList.concat(item.children); |
| | | } |
| | | // 设置第一个激活 |
| | | activeSubScene.value[item.group_id] = array[index].children?.[0]?.group_id; |
| | | }); |
| | | return preVal; |
| | | }, {}); |
| | | } |
| | | allSubScene.value = subSceneList; |
| | | const activeMainSceneData = allData.value[activeGroupType.value]; |
| | | const activeMainSceneId = activeMainScene.value[activeGroupType.value]; |
| | | state.activeBusinessChildName = activeSubScene.value[activeMainSceneId]; //初始化业务场景的子场景默认值 |
| | | state.customBusinessChildList = activeMainSceneData.filter((item) => item.group_id === activeMainSceneId)[0].children; |
| | | state.sampleMap = displaySampleMap(); |
| | | finalSampleList.value = searchFilterSampleList(state.sampleMap[state.activeBusinessChildName]); |
| | | }; |
| | | const displaySampleMap = () => { |
| | | const sampleMap = {}; |
| | | allSubScene.value.map(async (item) => { |
| | | const groupId = item.group_id; |
| | | sampleMap[groupId] = exampleSceneList.value.filter((item) => item.group_id === groupId); |
| | | }); |
| | | return sampleMap; |
| | | }; |
| | | |
| | | const searchFilterSampleList = (sampleList: any[]) => { |
| | | if (!searchValue.value) return sampleList; |
| | | const checkKey = ['sample_question', 'sample_title']; |
| | | const filterList = sampleList.filter((item) => { |
| | | return checkKey.some((subItem) => item[subItem].toLowerCase().trim().includes(searchValue.value.toLowerCase().trim())); |
| | | }); |
| | | return filterList; |
| | | }; |
| | | watch(activeGroupType, () => { |
| | | getTableData(); |
| | | }); |
| | | watch(searchValue, () => { |
| | | finalSampleList.value = searchFilterSampleList(state.sampleMap[state.activeBusinessChildName]); |
| | | }); |
| | | //#endregion |
| | | defineExpose({ getTableData }); |
| | | </script> |
| | | <style scoped lang="scss"> |