From bf3e0634ddd422751cedd99ef358dcae86babb9c Mon Sep 17 00:00:00 2001 From: yangyin <1850366751@qq.com> Date: 星期五, 18 十月 2024 10:29:39 +0800 Subject: [PATCH] 修改指标执行器输入框查询 --- src/views/project/yw/systemManage/metricMgr/MetricMgr.vue | 144 ++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 120 insertions(+), 24 deletions(-) diff --git a/src/views/project/yw/systemManage/metricMgr/MetricMgr.vue b/src/views/project/yw/systemManage/metricMgr/MetricMgr.vue index 883a55a..b621709 100644 --- a/src/views/project/yw/systemManage/metricMgr/MetricMgr.vue +++ b/src/views/project/yw/systemManage/metricMgr/MetricMgr.vue @@ -3,26 +3,30 @@ <template #header> <el-form ref="queryFormRef" :inline="true" :model="queryParams"> <el-form-item label="鍚嶇О" prop="title"> - <el-input v-model="queryParams.title" style="width: 226.4px" placeholder="鍚嶇О" clearable /> + <el-input v-model="queryParams.title" style="width: 226.4px" placeholder="鎸囨爣鍚嶇О" clearable @input="selectTitleChange" /> </el-form-item> - <el-form-item label="涓婚鍩�" prop="themeDomainID"> + <el-form-item label="涓婚鍩�" prop="metrics_group"> <el-tree-select filterable - style="width: 256.4px" + style="width: 206.4px" :props="{ id: 'group_id', label: 'group_name', children: 'Children', }" + v-model="queryParams.metrics_group" node-key="group_id" + clearable + defaultExpandAll :data="listTreeData" placeholder="璇烽�夋嫨涓婚鍩�" - @change="selectThemeChange" + check-strictly + @change="selectMetricsChange" > </el-tree-select> </el-form-item> <el-form-item label="閲嶈鎬�" prop="metrics_important"> - <el-select v-model="queryParams.metrics_important" style="width: 226.4px" clearable> + <el-select v-model="queryParams.metrics_important" style="width: 186.4px" clearable @change="selectImportantChange"> <el-option v-for="item in Object.keys(eMetrics_Ops)" :key="item" @@ -32,7 +36,6 @@ </el-select> </el-form-item> <el-form-item> - <el-button type="primary" icon="ele-Search" @click="handleQueryTable"> 鏌ヨ </el-button> <el-button icon="ele-Refresh" @click="resetQuery">閲嶇疆 </el-button> </el-form-item> </el-form> @@ -47,16 +50,15 @@ :row-class-name="isDragStatus ? 'cursor-move' : 'cursor-pointer'" :data="displayTableData" highlight-current-row - :cell-style="tableCellCenterExceptColumn()" :headerCellStyle="{ backgroundColor: 'var(--el-table-header-bg-color)', textAlign: 'center' }" > - <el-table-column prop="title" label="鎸囨爣鍚嶇О" width="120" fixed="left" show-overflow-tooltip> + <el-table-column prop="title" label="鎸囨爣鍚嶇О" width="150" fixed="left" show-overflow-tooltip> <template #default="scope"> <div class="text-[#1677ff]" @click="handleClickTitleRow(scope.row)">{{ scope.row.title }}</div> </template> </el-table-column> - <el-table-column prop="full_name" label="鎸囨爣鍏ㄧО" show-overflow-tooltip> </el-table-column> - <el-table-column label="閲嶈鎬�" prop="metrics_important" show-overflow-tooltip width="80"> + <el-table-column prop="full_name" label="鎸囨爣鍏ㄧО" show-overflow-tooltip width="280"> </el-table-column> + <el-table-column label="閲嶈鎬�" prop="metrics_important" show-overflow-tooltip width="80" align="center"> <template #default="scope"> <el-tag size="small" @@ -70,12 +72,12 @@ </template> </el-table-column> <el-table-column prop="metrics_define" label="鎸囨爣瀹氫箟" show-overflow-tooltip> </el-table-column> - <el-table-column prop="calcu_method" label="鎸囨爣璁$畻鍏紡" width="120" show-overflow-tooltip> </el-table-column> - <el-table-column prop="metrics_type" label="绫诲埆" show-overflow-tooltip width="120"> </el-table-column> + <el-table-column prop="calcu_method" label="鎸囨爣璁$畻鍏紡" width="180" show-overflow-tooltip> </el-table-column> + <el-table-column prop="metrics_type" label="绫诲埆" show-overflow-tooltip width="120" align="center"> </el-table-column> <el-table-column label="鎿嶄綔" width="80" fixed="right" show-overflow-tooltip> <template #default="scope"> <div class="space-x-3 items-center flex"> - <el-tooltip + <!-- <el-tooltip effect="dark" :content="scope.row.published === SupervisorPublished.Y ? '鍙栨秷鍙戝竷' : '鍙戝竷'" placement="top" @@ -93,32 +95,54 @@ ) " ></i> + </el-tooltip> --> + <el-tooltip effect="dark" content="瀵硅瘽娴嬭瘯" placement="top"> + <i class="ywifont ywicon-ceshi !text-[20px] text-blue-400 cursor-pointer" @click="openChatTest(scope.row)"></i> </el-tooltip> </div> </template> </el-table-column> </el-table> + <div + v-if="chatTestIsShow" + ref="draggableChatRef" + :style="style" + class="fixed z-50 w-[700px] h-[800px] flex flex-col bg-[rgb(239,244,253)] right-0 bottom-0 rounded-lg" + > + <div ref="chatDragHandlerRef" class="flex-0"> + <div class="flex items-center justify-between py-2 px-4"> + <div class="font-bold cursor-move"> + WI姘村姟鏅鸿兘绠″鈥斺�斻�恵{ chatTestMapRow?.title }}銆戞祴璇� + <!-- <img src="/static/images/logo/logo-mini.svg" width="10" height="10" /> --> + </div> + <i class="ywifont ywicon-guanbi font-[10px] font-bold cursor-pointer" @click="closeChatTest"></i> + </div> + </div> + <Chat ref="chatRef" class="flex-auto px-2" :questionApi="questionAi"> </Chat> + </div> </div> </template> - - <!-- <OptDlg v-model="optDlgIsShow" :item="optDlgMapRow" @insert="insertOpt" @update="updateOpt" :groupId="currentListID"></OptDlg> --> - <!-- <MetricPrompt v-model="infoDlgIsShow" :metricItem="infoDlgMapRow"></MetricPrompt> - <MetricName v-model="metricNameIsShow" :metricItem="metricNameMapRow"></MetricName> --> </HMContainer> </template> <script setup lang="ts"> -import { computed, onMounted, ref } from 'vue'; +import { useDraggable } from '@vueuse/core'; +import axios, { CancelTokenSource } from 'axios'; +import { debounce } from 'lodash'; +import { computed, nextTick, onMounted, ref } from 'vue'; import { useRouter } from 'vue-router'; import { SupervisorPublished } from '../../lowCode/sqlAmis/types'; import * as agentGroupApi from '/@/api/ai/agentGroup'; import * as metricApi from '/@/api/metrics'; +import Chat from '/@/components/chat/Chat.vue'; import HMContainer from '/@/components/layout/HMContainer.vue'; import { usePageDisplay } from '/@/hooks/usePageDisplay'; import { useQueryTable } from '/@/hooks/useQueryTable'; -import { convertListToTree, tableCellCenterExceptColumn } from '/@/utils/util'; -import { eMetrics_Ops, eMetrics_Ops_Color } from '/@/views/types/metrics'; +import { useCompRef } from '/@/utils/types'; +import { convertListToTree } from '/@/utils/util'; +import { OptClassificationMap, classificationEnum, eMetrics_Ops, eMetrics_Ops_Color } from '/@/views/types/metrics'; const router = useRouter(); + //#region ====================== 琛ㄦ牸鏁版嵁锛宼able init ====================== const tableLoading = ref(false); const tableData = ref([]); @@ -137,16 +161,41 @@ themeDomainData.value = res.groups || []; }; const listTreeData = computed(() => { - return convertListToTree(themeDomainData.value, { + const byParentData = convertListToTree(themeDomainData.value, { ID: 'group_id', Children: 'Children', ParentID: 'p_group_id', }); + const result = []; + byParentData.forEach((item) => { + if ( + item.group_type != OptClassificationMap[classificationEnum.Office] && + item.group_type != OptClassificationMap[classificationEnum.Knowledge] + ) { + result.push(item); + } + }); + return result; }); -const selectThemeChange = (value) => {}; +const debounceQuery = debounce(() => handleQueryTable(), 500); +//鎸夋寚鏍囧悕绉版煡璇� +const selectTitleChange = (val) => { + debounceQuery(); +}; +//鎸変富棰樺煙鏌ヨ +const selectMetricsChange = (val) => { + queryParams.value.metrics_group = val; + handleQueryTable(); +}; +//鎸夐噸瑕佹�ф煡璇� +const selectImportantChange = (val) => { + queryParams.value.metrics_important = val; + handleQueryTable(); +}; + const queryParams = ref({ title: '', - // themeDomainID: null, + metrics_group: '', metrics_important: '', }); const { resetQuery, handleQueryTable, displayTableData } = useQueryTable(tableData, queryParams, () => { @@ -178,8 +227,55 @@ } ); //#endregion -//#region ====================== 鎿嶄綔鎸夐挳 ====================== +//#region ====================== 鎿嶄綔鎸夐挳 娴嬭瘯 ====================== const publishStatusChange = async (status: SupervisorPublished, id: number, index: number) => {}; +const chatRef = useCompRef(Chat); +const chatTestMapRow = ref(null); +const chatTestIsShow = ref(false); +const openChatTest = (row) => { + chatTestMapRow.value = row; + chatTestIsShow.value = true; + nextTick(() => { + chatRef.value.clear(); + // setTimeout(() => { + // chatRef.value.autoSend(row.title); + // }, 30); + }); +}; + +const closeChatTest = () => { + chatTestMapRow.value = null; + chatTestIsShow.value = false; +}; + +const draggableChatRef = ref<HTMLElement | null>(null); +const chatDragHandlerRef = ref<HTMLDivElement>(null); +const chatDragContainerRef = ref<HTMLDivElement>(null); + +// `style` will be a helper computed for `left: ?px; top: ?px;` +const { x, y, style } = useDraggable(draggableChatRef, { + handle: chatDragHandlerRef, + initialValue: { + x: document.body.clientWidth / 2 - 350, + y: document.body.clientHeight / 2 - 400, + }, +}); + +const questionAi = async (text, sourceObj: { source: CancelTokenSource }) => { + const currentSource = axios.CancelToken.source(); + sourceObj.source = currentSource; + const res = await metricApi.checkMetricAgentValidateByPost( + { + agent_id: chatTestMapRow.value.id, + question: text, + }, + { + loading: false, + cancelToken: currentSource.token, + } + ); + return res; +}; //#endregion onMounted(() => { initThemeDomainData(); -- Gitblit v1.9.3