From c56ba92667b2b5dded272fb60ad0c2af4983cd43 Mon Sep 17 00:00:00 2001
From: wujingjing <gersonwu@qq.com>
Date: 星期三, 05 三月 2025 17:09:55 +0800
Subject: [PATCH] 修改意见

---
 src/components/chat/components/playBar/businessTable/index.vue |   88 ++++++++++++++++++++++++++++++++++++-------
 1 files changed, 73 insertions(+), 15 deletions(-)

diff --git a/src/components/chat/components/playBar/businessTable/index.vue b/src/components/chat/components/playBar/businessTable/index.vue
index 369b1d3..122c807 100644
--- a/src/components/chat/components/playBar/businessTable/index.vue
+++ b/src/components/chat/components/playBar/businessTable/index.vue
@@ -10,7 +10,7 @@
 		<template #header>
 			<div style="color: #fff">
 				<SvgIcon name="ele-Document" :size="16" style="margin-right: 3px; display: inline; vertical-align: middle" />
-				<span>涓氬姟琛ㄥ叧鑱�</span>
+				<span>閫夋嫨涓氬姟琛�</span>
 			</div>
 		</template>
 		<AHMContainer type="card" class="h100" v-loading="submitLoading">
@@ -28,7 +28,7 @@
 					}"
 					defaultExpandAll
 					:treedata="listTreeData"
-					title-name="闄勪欢琛�"
+					title-name="涓氬姟琛�"
 					:show-more-operate="false"
 					:show-add="false"
 					:current-node-key="currentListID"
@@ -39,16 +39,28 @@
 			</template>
 			<template #header>
 				<el-form ref="queryFormRef" :inline="true" class="relative">
-					<el-form-item :label="item.title" prop="title" v-for="item in filterColumns as any" :key="item.name">
+					<el-form-item :label="item.title" prop="title" v-for="item in filterColumns as any" :key="item.name" class="items-center">
 						<TableSearch v-model="item.values" :filter="item.filter" @input="debounceSearch()" />
 					</el-form-item>
 				</el-form>
 			</template>
 			<template #main>
 				<div class="w100 h100">
-					<div class="h-full flex-column">
-						<ColFilter class="flex-0 ml-auto mb-2" :column-list="tableCheckData" />
+					<div class="h-full flex-column gap-2">
+						<div class="flex-0 flex-items-center flex-wrap">
+							<div class="ml-auto space-x-2 flex-items-center">
+								<DisplayMode
+									v-if="isChart"
+									:order="modeChangeOrder"
+									v-model="showMode"
+									:modeTypeMap="displayModeTypeMap"
+									@change="displayModeChange"
+								/>
+								<ColFilter class="flex-0 ml-auto" :column-list="tableCheckData" />
+							</div>
+						</div>
 						<el-table
+							v-show="showTable"
 							v-loading="tableLoading"
 							ref="draggableTableRef"
 							class="flex-auto"
@@ -67,6 +79,14 @@
 							>
 							</el-table-column>
 						</el-table>
+						<template v-if="isRendered">
+							<ChartDisplay
+								class="flex-auto"
+								v-show="showMode === DisplayModeType.Chart"
+								:table-schema="currentNode"
+								:records="tableData"
+							/>
+						</template>
 					</div>
 				</div>
 			</template>
@@ -81,15 +101,19 @@
 </template>
 
 <script setup lang="ts" name="BusinessTable">
+import { ElMessage } from 'element-plus';
 import { computed, nextTick, ref, watch } from 'vue';
 import TableSearch from './search/index.vue';
 import * as attachApi from '/@/api/attach';
 import AHMContainer from '/@/components/layout/AHMContainer.vue';
+import ColFilter from '/@/components/table/colFilter/ColFilter.vue';
 import LeftTreeByMgr from '/@/components/tree/leftTreeByMgr.vue';
 import { useCompRef } from '/@/utils/types';
 import { convertListToTree, debounce, travelTree } from '/@/utils/util';
-import { ElMessage } from 'element-plus';
-import ColFilter from '/@/components/table/colFilter/ColFilter.vue';
+import { DisplayModeType } from '../../../chatComponents/summaryCom/components/recordSet/components/types';
+import { displayModeTypeMap } from '../../../chatComponents/summaryCom/components/recordSet/components/types';
+import DisplayMode from '/@/components/chat/chatComponents/summaryCom/components/recordSet/components/DisplayMode.vue';
+import ChartDisplay from './ChartDisplay.vue';
 const dialogIsShow = defineModel({
 	type: Boolean,
 });
@@ -98,6 +122,28 @@
 const closeDialog = () => {
 	dialogIsShow.value = false;
 };
+
+const isChart = computed(() => {
+	return !!currentNode.value?.is_chart;
+});
+
+const showTable = computed(() => {
+	return !isChart.value || (isChart.value && showMode.value === DisplayModeType.List);
+});
+
+//#region ====================== 妯″紡鍒囨崲 ======================
+const showMode = ref(DisplayModeType.List);
+const modeChangeOrder = [DisplayModeType.List, DisplayModeType.Chart];
+
+const isRendered = ref(false);
+const displayModeChange = (val: DisplayModeType) => {
+	if (val === DisplayModeType.Chart) {
+		nextTick(() => {
+			isRendered.value = true;
+		});
+	}
+};
+//#endregion
 const submitLoading = ref(false);
 const getSubmitData = async () => {
 	const checkedList = leftTreeRef.value?.treeRef.getCheckedNodes().filter((item) => item.type === 'item');
@@ -111,14 +157,16 @@
 		return {
 			title: item.title,
 			columns: item.columns
-				.filter((item) => item.isShow)
+				// .filter((item) => item.isShow)
 				.map((item) => {
 					return item.title;
 				}),
 			values: item.tableData.map((item) => {
-				return Object.values(item).filter((item, index) => {
-					return indexMapItem.get(index).isShow;
-				});
+				return Object.values(item);
+
+				// .filter((item, index) => {
+				// 	return indexMapItem.get(index).isShow;
+				// });
 			}),
 		};
 	});
@@ -190,6 +238,10 @@
 	}
 };
 
+const resetRight = () => {
+	showMode.value = DisplayModeType.List;
+};
+
 const handleClickNode = (data) => {
 	if (data.type === 'group') {
 		ElMessage.warning('璇烽�夋嫨涓氬姟琛�');
@@ -199,6 +251,8 @@
 		leftTreeRef.value?.treeRef.setCurrentKey(data.logicalId);
 	});
 	currentNode.value = data;
+	resetRight();
+
 	setOrderMap(data);
 	getTableData();
 };
@@ -275,7 +329,7 @@
 
 //#region ====================== 鏌ヨ ======================
 const getFilterColumns = (node) => {
-	return node?.columns?.filter((item) => item.filter && item.isShow) as any[];
+	return node?.columns?.filter((item) => item.filter) as any[];
 };
 const filterColumns = computed(() => {
 	return getFilterColumns(currentNode.value);
@@ -293,6 +347,8 @@
 		.filter((item) => {
 			if (item.filter === 'like') {
 				return item.values.every((item) => !!item);
+			} else if (item.filter === 'time_range') {
+				return !!item.values?.some((item) => !!item);
 			} else {
 				return true;
 			}
@@ -329,8 +385,10 @@
 	const indexMapItem = getIndexMapItem(columns);
 	return (res.values || []).map((item, index) => {
 		const row = {} as any;
-		item?.forEach((item, index) => {
-			row[indexMapItem.get(index).name] = item;
+		item?.forEach((item, index, array) => {
+			if (indexMapItem.get(index)) {
+				row[indexMapItem.get(index).name] = item;
+			}
 		});
 		return row;
 	});
@@ -366,7 +424,7 @@
 		orderMap.set(prop, order);
 		column.order = getEleOrder(order);
 	}
-	node.tableData = parseRecordData(res, tableColumns.value);
+	node.tableData = parseRecordData(res, node.columns ?? []);
 };
 
 const handleSearchInput = async (prop?, order?, column?) => {

--
Gitblit v1.9.3