| | |
| | | <template> |
| | | <div class="relative h100" :style="`width: ${rightBox}px;transition: 0.7s ease-in;`"> |
| | | <div class="relative h100" v-loading="loadingData" :style="`width: ${rightBox}px;transition: 0.7s ease-in;`"> |
| | | <div class="retract_icon" @click="toggleShow"> |
| | | <i class="text-[#fff] transition-all" :class="isShow ? 'ywicon icon-zuoyoujiantou1' : 'ywicon icon-zuoyoujiantou'"></i> |
| | | <i class="text-[#fff] transition-all" :class="isShow ? 'ywifont ywicon-zuoyoujiantou1' : 'ywifont ywicon-zuoyoujiantou'"></i> |
| | | </div> |
| | | <div class="pc-mouldboard column exampleSlide"> |
| | | <div class="header flex items-center justify-center"> |
| | | <div |
| | | class="box-border flex w-[203px] h-[32px] rounded-md items-center justify-between cursor-pointer relative border border-solid border-[#2c2d33]" |
| | | class="box-border flex w-[234px] h-[32px] rounded-md items-center justify-between cursor-pointer relative border border-solid border-[#2c2d33]" |
| | | > |
| | | <div |
| | | class="tabbar-item" |
| | |
| | | </div> |
| | | </div> |
| | | <i |
| | | class="ywicon icon-guanbi text-[#999] text-[18px] absolute right-[14px] top-5 cursor-pointer" |
| | | class="ywifont ywicon-guanbi text-[#999] text-[18px] absolute right-[14px] top-5 cursor-pointer" |
| | | @click="handleCloseTemplate" |
| | | ></i> |
| | | </div> |
| | | |
| | | <div class="box-border w-[354px] flex-1 min-h-0 bg-[#e0e7fb]" v-show="state.activeName == 1"> |
| | | <div class="flex flex-col w100 h100 pt-0 pr-[15px] pb-0 pl-[20px] overflow-auto"> |
| | | <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> |
| | | </div> |
| | | <div class="mt20 w100 relative" v-show="customTagList.length > 0"> |
| | | <div |
| | | class="overflow-hidden max-h-[36px] transition-[max-height 0.2s] w100 flex flex-wrap text-xs leading-[14px] m-[-5px]" |
| | | :class="{ 'set-expand-active': state.isShowExpand }" |
| | | > |
| | | <div |
| | | v-for="item in customTagList" |
| | | :key="item.section_id" |
| | | :class="{ 'set-label-active': state.activeLabelName === item.section_id }" |
| | | @click="handleLabelClick(item)" |
| | | class="cursor-pointer m-[5px] py-[5px] px-[10px] rounded-xl border border-solid border-[#b2b2b2] bg-[#e0e7f] text-[#4c4c4c] transition-[background-color .1s, color .1s, border-color .1s]" |
| | | > |
| | | {{ item.section_name }} |
| | | <div class="mt10 w100 h100 relative" v-show="state.customBusinessList.length > 0"> |
| | | <div class="set_custom_label"> |
| | | <div class="chanel-tags"> |
| | | <div |
| | | v-for="(item, index) in state.customBusinessList" |
| | | :key="index" |
| | | :class="{ 'set-group-label-active': state.activeBusinessName === item.group_id }" |
| | | class="flex items-center border border-solid border-[#b2b2b2] rounded-xl mx-[3px] leading-6" |
| | | @click="handleBusinessClick(item)" |
| | | > |
| | | <span class="set-group-name">{{ item.group_name }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="bg-[#e0e7fb] absolute right-0 top-0 text-[#131313] w-[30px] h-[26px] cursor-pointer flex items-center"> |
| | | <i class="iconfont icon-bolangneng" title="展开" @click="handleExpandClick(1)" v-show="!state.isShowExpand"></i> |
| | | <i class="iconfont icon-zhongduancanshu" title="收缩" @click="handleExpandClick(2)" v-show="state.isShowExpand"></i> |
| | | <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.customBusinessChildList" |
| | | :key="index" |
| | | :class="{ 'set-label-active': state.activeBusinessChildName === itemChildren.group_id }" |
| | | @click="handleLabelChildClick(itemChildren)" |
| | | class="cursor-pointer m-[5px] py-[5px] pl-[10px] rounded-xl border transition-[background-color .1s, color .1s, border-color .1s] text-[#999]" |
| | | > |
| | | {{ itemChildren.group_name }} |
| | | </div> |
| | | </div> |
| | | <div class="mt20 w100"> |
| | | <div class="w100 pb-[20px]" v-for="item in queryData" :key="item.sample_id"> |
| | | <div class="mt10 overflow-auto set-height-custom" v-show="finalSampleList.length > 0"> |
| | | <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]" |
| | | @click="changeExample(item)" |
| | | > |
| | | <i |
| | | class="iconfont icon-chazhaobiaodanliebiao pl-[2px] w-[16px] h-[16px] font12 text-[#fff] transform-[scale(.85)] rounded-[50%]" |
| | | 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> |
| | | </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="state.activeName == 2"> |
| | | <div class="flex flex-col w100 h100 pt-0 pr-[15px] pb-0 pl-[20px] overflow-auto"> |
| | | <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="instructParams.template_title" placeholder="搜索更多" class="set-input" :prefix-icon="Search" clearable> |
| | | <el-input v-model="officeParams.template_title" placeholder="搜索更多" class="set-input" :prefix-icon="Search" clearable> |
| | | </el-input> |
| | | </div> |
| | | <div class="mt20 w100 relative" v-show="customOfficeList.length > 0"> |
| | | <div |
| | | class="overflow-hidden max-h-[36px] transition-[max-height 0.2s] w100 flex flex-wrap text-xs leading-[14px] m-[-5px]" |
| | | :class="{ 'set-expand-active': state.isShowExpand }" |
| | | > |
| | | <div |
| | | v-for="item in customOfficeList" |
| | | :key="item.section_id" |
| | | :class="{ 'set-label-active': state.activeInstructName === item.section_id }" |
| | | @click="handleInstructClick(item)" |
| | | class="cursor-pointer m-[5px] py-[5px] px-[10px] rounded-xl border border-solid border-[#b2b2b2] bg-[#e0e7f] text-[#4c4c4c] transition-[background-color .1s, color .1s, border-color .1s]" |
| | | > |
| | | {{ item.section_name }} |
| | | <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="bg-[#e0e7fb] absolute right-0 top-0 text-[#131313] w-[30px] h-[26px] cursor-pointer flex items-center"> |
| | | <i class="iconfont icon-bolangneng" title="展开" @click="handleExpandClick(1)" v-show="!state.isShowExpand"></i> |
| | | <i class="iconfont icon-zhongduancanshu" title="收缩" @click="handleExpandClick(2)" v-show="state.isShowExpand"></i> |
| | | <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="mt20 w100"> |
| | | <div class="w100 pb-[20px] flex overflow-auto flex-col" v-for="item in showInstructList" :key="item.template_id"> |
| | | <div class="mt10 w100 overflow-auto set-height-custom"> |
| | | <div class="w100 pb-[20px] flex flex-col" v-for="item in finalOfficeList" :key="item.group_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.template_title }}</span> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="box-border w-[354px] flex-1 min-h-0 bg-[#e0e7fb]" v-show="state.activeName == 3"> |
| | | <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> |
| | | </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> |
| | | </div> |
| | | </div> |
| | | <el-dialog v-model="state.useInstructDialog" :title="state.instructInfo?.template_title" width="500" :before-close="handleClose"> |
| | | <el-input v-model="state.inputInstruct" :rows="10" type="textarea"></el-input> |
| | | <template #footer> |
| | |
| | | |
| | | <script setup lang="ts"> |
| | | import { Search } from '@element-plus/icons-vue'; |
| | | import { computed, onMounted, reactive, ref, toRefs, watch } from 'vue'; |
| | | import { getSelectSample, getUserTemplateList } from '/@/api/ai/chat'; |
| | | import { computed, reactive, ref, watch } from 'vue'; |
| | | import { getSectionList, getSelectSample, getUserTemplateList } from '/@/api/ai/chat'; |
| | | import { useSearch } from '/@/hooks/useSearch'; |
| | | import { activeRoomId, activeSampleId, setRoomConfig } from '/@/stores/chatRoom'; |
| | | import { debounce } from '/@/utils/util'; |
| | | import { activeRoomId, activeSampleId, activeSectionAId, sectionAList, setRoomConfig } from '/@/stores/chatRoom'; |
| | | import { convertListToTree, debounce } from '/@/utils/util'; |
| | | import { OptClassificationMap, classificationEnum } from '/@/views/types/processDrawing/index'; |
| | | let state = reactive({ |
| | | tabNameList: [ |
| | | { ID: 1, Name: '提问示例' }, |
| | | { ID: 2, Name: '指令模板' }, |
| | | { ID: 1, Name: '业务场景' }, |
| | | { ID: 2, Name: '办公助手' }, |
| | | { ID: 3, Name: '知识库' }, |
| | | ], |
| | | activeName: 1, |
| | | exampleTabList: [], |
| | | instructList: [], |
| | | activeLabelName: 0, |
| | | activeInstructName: 0, |
| | | isShowExpand: false, |
| | | activeBusinessName: '', //场景 |
| | | activeBusinessChildName: '', |
| | | customBusinessList: [], |
| | | customBusinessChildList: [], |
| | | activeOfficeName: '', //办公 |
| | | activeOfficeChildName: '', |
| | | customOfficeList: [], |
| | | customOfficeChildList: [], |
| | | activeKnowledgeName: '', //知识库 |
| | | activeKnowledgeChildName: '', |
| | | knowledgeBaseList: [], |
| | | customKnowledgeChildList: [], |
| | | useInstructDialog: false, |
| | | instructInfo: {}, |
| | | inputInstruct: '', //可修改指令 |
| | |
| | | listSampleExpand: false, |
| | | listInstructExpand: false, |
| | | }); |
| | | const instructContentList = ref([]); //指令列表 |
| | | const exampleList = ref([]); //示例列表 |
| | | |
| | | //#region ====================== 传参 ====================== |
| | | const isShow = defineModel('isShow', { |
| | | type: Boolean, |
| | | }); |
| | | const props = defineProps({ |
| | | customTagList: { |
| | | type: Array, |
| | | default: () => [], |
| | | }, |
| | | customOfficeList: { |
| | | type: Array, |
| | | default: () => [], |
| | | }, |
| | | }); |
| | | let { customTagList, customOfficeList } = toRefs(props); |
| | | const emit = defineEmits(['updateChatInput']); |
| | | const rightBox = computed(() => (isShow.value ? 354 : 0)); |
| | | onMounted(() => {}); |
| | | |
| | | const emit = defineEmits(['updateChatInput']); |
| | | //#endregion |
| | | //#region ====================== 业务场景/办公助手/知识库的list ====================== |
| | | const instructContentList = ref([]); //指令列表 |
| | | const exampleList = ref([]); //示例列表 |
| | | //获取模版列表 |
| | | const getSelectListSample = async () => { |
| | | state.listSampleLoading = true; |
| | | const res = await getSelectSample({ |
| | | section_b_id: '', |
| | | }).finally(() => { |
| | | const res = await getSelectSample({}).finally(() => { |
| | | state.listSampleLoading = false; |
| | | }); |
| | | // console.log(res, 63); |
| | | state.exampleRandomContent = res.samples; |
| | | |
| | | const array = []; |
| | | res.samples.forEach((sample, index) => { |
| | | sample.Icon = '/static/images/wave/ChatImg.png'; |
| | |
| | | }); |
| | | exampleList.value = res.samples; |
| | | state.exampleContent = array; |
| | | state.listSampleExpand = true; |
| | | }; |
| | | //随机生成颜色 |
| | | const randomHexColor = () => { |
| | |
| | | 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 = res.templates; |
| | | }; |
| | | //切换到指令/提问 |
| | | const handleTabClick = (item) => { |
| | | //#endregion |
| | | //#region ====================== 默认选择第一个的场景的子场景 ====================== |
| | | //tags标签切换 |
| | | const handleTabClick = async (item) => { |
| | | state.activeName = item.ID; |
| | | getTableData(); |
| | | }; |
| | | //标签点击事件(提问示例) |
| | | const handleLabelClick = (item) => { |
| | | state.activeLabelName = item.section_id; |
| | | }; |
| | | //标签点击事件(指令模板) |
| | | const handleInstructClick = (item) => { |
| | | state.activeInstructName = item.section_id; |
| | | }; |
| | | |
| | | //展开收起 |
| | | const handleExpandClick = (type) => { |
| | | if (type == 1) { |
| | | state.isShowExpand = true; |
| | | } else { |
| | | state.isShowExpand = false; |
| | | } |
| | | }; |
| | | const toggleShow = () => { |
| | | isShow.value = !isShow.value; |
| | | if (!isShow.value) { |
| | | getTableData(); |
| | | } |
| | | }; |
| | | const getTableData = () => { |
| | | if (state.activeName == 1) { |
| | | if (state.listSampleExpand) return; |
| | | getSelectListSample(); |
| | | state.listSampleExpand = true; |
| | | } |
| | | if (state.activeName == 2) { |
| | | if (state.listInstructExpand) return; |
| | | getUserTemplate(); |
| | | await getUserTemplate(); |
| | | state.listInstructExpand = true; |
| | | } |
| | | tagListClick(sectionAList.value); |
| | | }; |
| | | //场景子场景 |
| | | 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 |
| | | //打开高级示例 |
| | | const toggleShow = async () => { |
| | | isShow.value = !isShow.value; |
| | | getTableData(); |
| | | }; |
| | | //关闭高级示例 |
| | | const handleCloseTemplate = () => { |
| | | isShow.value = false; |
| | | }; |
| | | //获取主场景列表 |
| | | const getMainSectionList = async () => { |
| | | const res = await getSectionList(); |
| | | const iconList = [ |
| | | 'biaodan', |
| | | 'putong', |
| | | 'zhongduancanshuchaxun', |
| | | 'shidu', |
| | | 'fuwenbenkuang', |
| | | 'fuwenben', |
| | | 'jiliandongxuanzeqi', |
| | | 'jinridaiban', |
| | | 'gongju', |
| | | ]; |
| | | res.groups.forEach((sectionItem, index) => { |
| | | sectionItem.Icon = iconList[index]; |
| | | }); |
| | | sectionAList.value = res.groups; |
| | | tagListClick(sectionAList.value); |
| | | }; |
| | | const loadingData = ref(false); |
| | | const getTableData = async () => { |
| | | if (!isShow.value) { |
| | | loadingData.value = true; |
| | | await getMainSectionList().finally(() => { |
| | | loadingData.value = false; |
| | | }); |
| | | if (state.activeName == 1 || state.activeName == 3) { |
| | | if (state.listSampleExpand) return; |
| | | await getSelectListSample(); |
| | | state.listSampleExpand = true; |
| | | } |
| | | } |
| | | }; |
| | | |
| | | //#region ====================== templateUseClick ====================== |
| | | const templateUseClick = (row) => { |
| | | state.useInstructDialog = true; |
| | |
| | | handleClose(); |
| | | }; |
| | | //#endregion |
| | | //#region ====================== 搜索模板/指令 ====================== |
| | | //#region ====================== 搜索场景/办公/知识库 ====================== |
| | | const queryParams = ref({ |
| | | sample_title: '', |
| | | }); |
| | | const { query, queryData } = useSearch(exampleList, queryParams); |
| | | |
| | | const debounceQuery = debounce(query); |
| | | |
| | | 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 instructParams = ref({ |
| | | //办公 |
| | | const officeParams = ref({ |
| | | template_title: '', |
| | | }); |
| | | const { query: queryInstruct, queryData: showInstructList } = useSearch(instructContentList, instructParams); |
| | | |
| | | const { query: queryInstruct, queryData: showInstructList } = useSearch(instructContentList, officeParams); |
| | | const finalOfficeList = computed(() => { |
| | | const result = showInstructList.value.filter((item) => item.template_group == state.activeOfficeChildName); |
| | | return result ?? []; |
| | | }); |
| | | const instructQuery = debounce(queryInstruct); |
| | | |
| | | watch( |
| | | () => instructParams.value.template_title, |
| | | () => officeParams.value.template_title, |
| | | (val) => { |
| | | instructQuery(); |
| | | } |
| | | ); |
| | | //知识库 |
| | | const knowledgeParams = ref({ |
| | | template_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( |
| | | () => officeParams.value.template_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 (state.activeName) { |
| | | case 1: |
| | | 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 2: |
| | | 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 3: |
| | | 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; |
| | | } |
| | | } 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 = []; |
| | | } |
| | | }; |
| | | //#endregion |
| | | |
| | | defineExpose({ getTableData }); |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | .exampleSlide { |
| | | // position: absolute; |
| | | right: 0; |
| | | top: 0; |
| | | height: 100%; |
| | | -webkit-box-sizing: border-box; |
| | | box-sizing: border-box; |
| | | z-index: 100; |
| | | } |
| | | .set_custom_label { |
| | | min-height: 32px; |
| | | box-sizing: border-box; |
| | | // background-color: #f2f4f8; |
| | | border-bottom: 1px solid #eee; |
| | | .chanel-tags { |
| | | width: 100%; |
| | | position: relative; |
| | | overflow: hidden; |
| | | font-size: 12px; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | line-height: 26px; |
| | | color: #999; |
| | | cursor: pointer; |
| | | box-sizing: border-box; |
| | | height: 100%; |
| | | .set-group-name { |
| | | margin: 0px 7px; |
| | | white-space: nowrap; |
| | | // border: 1px solid #999; |
| | | // border-radius: 0.75rem; |
| | | // padding: 0 6px; |
| | | // line-height: 22px; |
| | | } |
| | | } |
| | | } |
| | | .retract_icon { |
| | | width: 20px; |
| | |
| | | font-size: 14px; |
| | | -webkit-animation: right-c650b75e 0.2s; |
| | | animation: right-c650b75e 0.2s; |
| | | |
| | | overflow: hidden; |
| | | .header { |
| | | box-sizing: border-box; |
| | | width: 100%; |
| | |
| | | position: relative; |
| | | } |
| | | .tabbar-item { |
| | | width: 108px; |
| | | width: 78px; |
| | | height: 30px; |
| | | font-size: 13px; |
| | | font-weight: 400; |
| | |
| | | .set-expand-active { |
| | | max-height: 180px; |
| | | } |
| | | .set-group-label-active { |
| | | border-color: #161616; |
| | | color: #000; |
| | | } |
| | | .set-label-active { |
| | | border-color: #1c86ff; |
| | | background-color: #ccdcfb; |
| | | // background-color: #ccdcfb; |
| | | color: #1c86ff; |
| | | } |
| | | .example-body { |
| | |
| | | -webkit-box-pack: justify; |
| | | -ms-flex-pack: justify; |
| | | justify-content: space-between; |
| | | overflow: hidden; |
| | | .example-item { |
| | | background-color: #f0f2f3; |
| | | color: #8b939e; |
| | |
| | | -webkit-box-direction: normal; |
| | | -ms-flex-direction: column; |
| | | flex-direction: column; |
| | | overflow: hidden; |
| | | } |
| | | .set-height-custom { |
| | | height: calc(100% - 120px); |
| | | } |
| | | </style> |