From c30e07c9797f7dc15788277397f064aeb18185da Mon Sep 17 00:00:00 2001
From: wujingjing <gersonwu@qq.com>
Date: 星期五, 11 十月 2024 16:56:32 +0800
Subject: [PATCH] 指定列显示

---
 customer_list/common/static/fonts/ywiconfont/iconfont.ttf   |    0 
 customer_list/common/static/fonts/ywiconfont/iconfont.woff  |    0 
 vite.config.ts                                              |    2 
 src/components/table/colFilter/ColFilter.vue                |   87 +++++++++++++++++
 src/components/table/colFilter/types.ts                     |   18 +++
 src/views/project/yw/lowCode/sqlAmis/SqlAmis.vue            |  154 ++++++++++++++++--------------
 customer_list/common/static/fonts/ywiconfont/iconfont.css   |   14 ++
 customer_list/common/static/fonts/ywiconfont/iconfont.woff2 |    0 
 8 files changed, 201 insertions(+), 74 deletions(-)

diff --git a/customer_list/common/static/fonts/ywiconfont/iconfont.css b/customer_list/common/static/fonts/ywiconfont/iconfont.css
index 7574a2f..3aad7fd 100644
--- a/customer_list/common/static/fonts/ywiconfont/iconfont.css
+++ b/customer_list/common/static/fonts/ywiconfont/iconfont.css
@@ -1,8 +1,8 @@
 @font-face {
   font-family: "ywifont"; /* Project id 4655417 */
-  src: url('iconfont.woff2?t=1727078460397') format('woff2'),
-       url('iconfont.woff?t=1727078460397') format('woff'),
-       url('iconfont.ttf?t=1727078460397') format('truetype');
+  src: url('iconfont.woff2?t=1728635307432') format('woff2'),
+       url('iconfont.woff?t=1728635307432') format('woff'),
+       url('iconfont.ttf?t=1728635307432') format('truetype');
 }
 
 .ywifont {
@@ -13,6 +13,14 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
+.ywicon-grid:before {
+  content: "\eaa2";
+}
+
+.ywicon-tag22:before {
+  content: "\e66b";
+}
+
 .ywicon-duoweidu:before {
   content: "\e669";
 }
diff --git a/customer_list/common/static/fonts/ywiconfont/iconfont.ttf b/customer_list/common/static/fonts/ywiconfont/iconfont.ttf
index de60672..e9f1d18 100644
--- a/customer_list/common/static/fonts/ywiconfont/iconfont.ttf
+++ b/customer_list/common/static/fonts/ywiconfont/iconfont.ttf
Binary files differ
diff --git a/customer_list/common/static/fonts/ywiconfont/iconfont.woff b/customer_list/common/static/fonts/ywiconfont/iconfont.woff
index ad5a87b..08eecc8 100644
--- a/customer_list/common/static/fonts/ywiconfont/iconfont.woff
+++ b/customer_list/common/static/fonts/ywiconfont/iconfont.woff
Binary files differ
diff --git a/customer_list/common/static/fonts/ywiconfont/iconfont.woff2 b/customer_list/common/static/fonts/ywiconfont/iconfont.woff2
index d790ce6..093e311 100644
--- a/customer_list/common/static/fonts/ywiconfont/iconfont.woff2
+++ b/customer_list/common/static/fonts/ywiconfont/iconfont.woff2
Binary files differ
diff --git a/src/components/table/colFilter/ColFilter.vue b/src/components/table/colFilter/ColFilter.vue
new file mode 100644
index 0000000..e113291
--- /dev/null
+++ b/src/components/table/colFilter/ColFilter.vue
@@ -0,0 +1,87 @@
+<template>
+	<el-dropdown trigger="click" placement="bottom-end" :hideOnClick="false">
+		<span
+			title="鐐瑰嚮閫夋嫨鏄剧ず鍒�"
+			class="rounded-full p-1.5 border-[1.5px] hover:text-blue-400 border-gray-200 border-solid cursor-pointer ywifont ywicon-grid !text-[13px] mb-3"
+		></span>
+
+		<template #dropdown>
+			<div class="flex-column px-2 py-2">
+				<el-checkbox
+					class="hover:bg-[#edf3f8] w-full"
+					v-for="item in checkOptionList"
+					:key="item.key"
+					v-model="item.value"
+					:label="item.label"
+					size="small"
+					@change="colCheckChange(item)"
+					:indeterminate="item.indeterminate"
+				/>
+			</div>
+		</template>
+	</el-dropdown>
+</template>
+
+<script lang="ts" setup>
+import { PropType, computed, ref } from 'vue';
+import { CheckOption, TableCol, allCheckKey } from './types';
+
+const props = defineProps({
+	columnList: {
+		type: Array as PropType<TableCol[]>,
+		default: () => [],
+	},
+});
+
+const colCheckChange = (option: CheckOption) => {
+	const { key, value } = option;
+	if (key === allCheckKey) {
+		if (option.indeterminate) {
+			option.indeterminate = false;
+			option.value = true;
+		}
+		checkOptionList.value.map((item) => {
+			item.value = option.value;
+		});
+	} else {
+		const options = checkOptionList.value.filter((item) => item.key !== allCheckKey);
+		const len = options.length;
+		const checkedLen = options.filter((item) => item.value).length;
+
+		const checkAllOption = checkOptionList.value.find((item) => item.key === allCheckKey);
+		if (!checkAllOption) return;
+		if (checkedLen === 0 || len === checkedLen) {
+			checkAllOption.indeterminate = false;
+			if (checkedLen === 0) {
+				checkAllOption.value = false;
+			} else {
+				checkAllOption.value = true;
+			}
+		} else {
+			checkAllOption.indeterminate = true;
+		}
+	}
+};
+const checkOptionList = ref<CheckOption[]>(
+	(
+		[
+			{
+				key: allCheckKey,
+				label: '鍏ㄩ��/涓嶉��',
+				value: true,
+			},
+		] as CheckOption[]
+	).concat(
+		props.columnList.map((item) => ({
+			key: item.prop,
+			label: item.label,
+			get value() {
+				return item.isShow == undefined ? true : !!item.isShow;
+			},
+			set value(val) {
+				item.isShow = val;
+			},
+		}))
+	)
+);
+</script>
diff --git a/src/components/table/colFilter/types.ts b/src/components/table/colFilter/types.ts
new file mode 100644
index 0000000..2155d51
--- /dev/null
+++ b/src/components/table/colFilter/types.ts
@@ -0,0 +1,18 @@
+export type CheckOption = {
+	key: string;
+	label: string;
+	value: boolean;
+	indeterminate?: boolean;
+};
+
+
+export type TableCol = {
+	prop: string;
+	label: string;
+	width?: number;
+	isShow?:boolean
+    fixed?:'left' | 'right' | boolean,
+    showOverflowTooltip?:boolean
+};
+
+export const allCheckKey = '-999';
\ No newline at end of file
diff --git a/src/views/project/yw/lowCode/sqlAmis/SqlAmis.vue b/src/views/project/yw/lowCode/sqlAmis/SqlAmis.vue
index d83725c..3544210 100644
--- a/src/views/project/yw/lowCode/sqlAmis/SqlAmis.vue
+++ b/src/views/project/yw/lowCode/sqlAmis/SqlAmis.vue
@@ -35,84 +35,86 @@
 			</el-form>
 		</template>
 		<template #main>
-			<div class="h-full" ref="chatDragContainerRef">
+			<div class="h-full flex-column">
+				<div class="flex-0 flex">
+					<ColFilter class="ml-auto" :columnList="columnList" />
+				</div>
 				<el-table
 					v-loading="tableLoading"
 					ref="draggableTableRef"
-					class="h100"
+					class="flex-auto"
 					border
 					:row-class-name="isDragStatus ? 'cursor-move' : 'cursor-pointer'"
 					:data="displayTableData"
 					highlight-current-row
 				>
-					<el-table-column prop="title" label="鏍囬" width="300" fixed="left" show-overflow-tooltip> </el-table-column>
-					<el-table-column label="鍙戝竷鐘舵��" prop="published" width="85" show-overflow-tooltip>
-						<template #default="scope">
-							<el-tag :type="scope.row.published === SupervisorPublished.Y ? 'primary' : 'info'">{{
-								supervisorPublishedMap[scope.row.published]
-							}}</el-tag>
-						</template>
-					</el-table-column>
-					<el-table-column prop="prompt" label="鎻愮ず璇�" width="300" show-overflow-tooltip> </el-table-column>
-					<el-table-column prop="question" label="闂" width="300" show-overflow-tooltip> </el-table-column>
+					<template v-for="item in columnList" :key="item.prop">
+						<el-table-column
+							v-if="item.isShow ?? true"
+							:prop="item.prop"
+							:label="item.label"
+							:fixed="item.fixed"
+							:width="item.width"
+							showOverflowTooltip
+						>
+							<template #default="scope" v-if="item.prop === 'published'">
+								<el-tag :type="scope.row.published === SupervisorPublished.Y ? 'primary' : 'info'">{{
+									supervisorPublishedMap[scope.row.published]
+								}}</el-tag>
+							</template>
 
-					<el-table-column label="鍒涘缓浜�" prop="creator" width="100" show-overflow-tooltip> </el-table-column>
-					<el-table-column label="鍒涘缓鏃堕棿" prop="create_time" width="105" show-overflow-tooltip> </el-table-column>
-					<el-table-column label="鏇存柊鏃堕棿" prop="update_time" width="105" show-overflow-tooltip> </el-table-column>
+							<template #default="scope" v-else-if="item.prop === 'operate'">
+								<div class="space-x-3 items-center flex">
+									<el-tooltip effect="dark" content="AMIS浣庝唬鐮佺紪杈�" placement="top">
+										<i class="ywifont ywicon-didaima !text-[21px] text-blue-400 cursor-pointer" @click="gotoAmisPage(scope.row)"></i>
+									</el-tooltip>
+									<el-tooltip effect="dark" content="鏁版嵁瀵规帴" placement="top">
+										<i class="ywifont ywicon-sjdj !text-[17px] text-blue-400 cursor-pointer" @click="editSqlClick(scope.row)"></i>
+									</el-tooltip>
 
-					<el-table-column label="澶囨敞" prop="note" show-overflow-tooltip> </el-table-column>
-					<el-table-column label="鎿嶄綔" width="200" fixed="right" show-overflow-tooltip>
-						<template #default="scope">
-							<div class="space-x-3 items-center flex">
-								<el-tooltip effect="dark" content="AMIS浣庝唬鐮佺紪杈�" placement="top">
-									<i class="ywifont ywicon-didaima !text-[21px] text-blue-400 cursor-pointer" @click="gotoAmisPage(scope.row)"></i>
-								</el-tooltip>
-								<el-tooltip effect="dark" content="鏁版嵁瀵规帴" placement="top">
-									<i class="ywifont ywicon-sjdj !text-[17px] text-blue-400 cursor-pointer" @click="editSqlClick(scope.row)"></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>
 
-								<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>
-
-								<el-tooltip
-									effect="dark"
-									:content="scope.row.published === SupervisorPublished.Y ? '鍙栨秷鍙戝竷' : '鍙戝竷'"
-									placement="top"
-								>
-									<i
-										class="ywifont !text-[20px] cursor-pointer"
-										:class="[
-											scope.row.published === SupervisorPublished.Y ? 'ywicon-quxiaofabu text-red-400' : 'ywicon-fabu text-blue-400',
-										]"
-										@click="
-											publishStatusChange(
-												scope.row.published === SupervisorPublished.Y ? SupervisorPublished.N : SupervisorPublished.Y,
-												scope.row.id,
-												scope.$index
-											)
-										"
-									></i>
-								</el-tooltip>
-								<el-tooltip effect="dark" content="缂栬緫" placement="top">
-									<i class="ywifont ywicon-bianji !text-[15px] text-blue-400 cursor-pointer" @click="openOptDlg(scope.row)"></i>
-								</el-tooltip>
-								<el-tooltip effect="dark" content="鍒犻櫎" placement="top">
-									<i
-										class="ywifont ywicon-shanchu !text-[17px] text-red-400 cursor-pointer"
-										@click="
-											() => {
-												deleteCurrentRow(scope.row, '椤甸潰', supervisorAdminApi.deleteSupervisor, () => {
-													const foundIndex = tableData.findIndex((item) => item === scope.row);
-													foundIndex > -1 && tableData.splice(foundIndex, 1);
-												});
-											}
-										"
-									></i>
-								</el-tooltip>
-							</div>
-						</template>
-					</el-table-column>
+									<el-tooltip
+										effect="dark"
+										:content="scope.row.published === SupervisorPublished.Y ? '鍙栨秷鍙戝竷' : '鍙戝竷'"
+										placement="top"
+									>
+										<i
+											class="ywifont !text-[20px] cursor-pointer"
+											:class="[
+												scope.row.published === SupervisorPublished.Y ? 'ywicon-quxiaofabu text-red-400' : 'ywicon-fabu text-blue-400',
+											]"
+											@click="
+												publishStatusChange(
+													scope.row.published === SupervisorPublished.Y ? SupervisorPublished.N : SupervisorPublished.Y,
+													scope.row.id,
+													scope.$index
+												)
+											"
+										></i>
+									</el-tooltip>
+									<el-tooltip effect="dark" content="缂栬緫" placement="top">
+										<i class="ywifont ywicon-bianji !text-[15px] text-blue-400 cursor-pointer" @click="openOptDlg(scope.row)"></i>
+									</el-tooltip>
+									<el-tooltip effect="dark" content="鍒犻櫎" placement="top">
+										<i
+											class="ywifont ywicon-shanchu !text-[17px] text-red-400 cursor-pointer"
+											@click="
+												() => {
+													deleteCurrentRow(scope.row, '椤甸潰', supervisorAdminApi.deleteSupervisor, () => {
+														const foundIndex = tableData.findIndex((item) => item === scope.row);
+														foundIndex > -1 && tableData.splice(foundIndex, 1);
+													});
+												}
+											"
+										></i>
+									</el-tooltip>
+								</div>
+							</template>
+						</el-table-column>
+					</template>
 				</el-table>
 				<div
 					v-if="chatTestIsShow"
@@ -222,7 +224,20 @@
 import AHMContainer from '/@/components/layout/AHMContainer.vue';
 import LeftTreeByMgr from '/@/components/tree/leftTreeByMgr.vue';
 import { useUpdateData } from '/@/hooks/useUpdateData';
+import ColFilter from '/@/components/table/colFilter/ColFilter.vue';
+import { TableCol } from '/@/components/table/colFilter/types';
 
+const columnList = ref<TableCol[]>([
+	{ prop: 'title', label: '鏍囬', width: 300, fixed: 'left' },
+	{ prop: 'published', label: '鍙戝竷鐘舵��', width: 85 },
+	{ prop: 'prompt', label: '鎻愮ず璇�', width: 300 },
+	{ prop: 'question', label: '闂', width: 300 },
+	{ prop: 'creator', label: '鍒涘缓浜�', width: 100 },
+	{ prop: 'create_time', label: '鍒涘缓鏃堕棿', width: 105 },
+	{ prop: 'update_time', label: '鏇存柊鏃堕棿', width: 105 },
+	{ prop: 'note', label: '澶囨敞' },
+	{ prop: 'operate', label: '鎿嶄綔', width: 200, fixed: 'right' },
+]);
 //#region ====================== 宸︿晶鏍戞暟鎹紝tree init ======================
 const leftTreeRef = useCompRef(LeftTreeByMgr);
 const treeLoading = ref(false);
@@ -231,12 +246,12 @@
 const currentNode = ref(null);
 
 const listTreeData = computed(() => {
-	const result =  convertListToTree(listData.value, {
+	const result = convertListToTree(listData.value, {
 		ID: 'group_id',
 		ParentID: 'p_group_id',
 		Children: 'children',
 	});
-	return result
+	return result;
 });
 
 const updateRelatedType = (extendType) => {
@@ -516,7 +531,6 @@
 
 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, {
diff --git a/vite.config.ts b/vite.config.ts
index 91ced05..5b25f9d 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -39,7 +39,7 @@
 			host: '0.0.0.0',
 			port: env.VITE_PORT as unknown as number,
 			open: JSON.parse(env.VITE_OPEN),
-			hmr: false,
+			hmr: true,
 			proxy: {
 				'/gitee': {
 					target: 'https://gitee.com',

--
Gitblit v1.9.3