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