From ba65f3383951a27ee44163aea36d48f5c22b8fff Mon Sep 17 00:00:00 2001
From: 张诺 <zhang_12370@163.com>
Date: 星期五, 24 四月 2026 15:37:43 +0800
Subject: [PATCH] feat(PIMTable): 支持列动态显示控制

---
 src/components/PIMTable/PIMTable.vue |   34 ++++++++++++++++++++++++++++------
 1 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/src/components/PIMTable/PIMTable.vue b/src/components/PIMTable/PIMTable.vue
index 01462f0..bfb3c4e 100644
--- a/src/components/PIMTable/PIMTable.vue
+++ b/src/components/PIMTable/PIMTable.vue
@@ -30,7 +30,7 @@
     <el-table-column align="center" label="搴忓彿" type="index" width="60" />
 
     <el-table-column
-      v-for="(item, index) in column"
+      v-for="(item, index) in visibleColumns"
       :key="index"
       :column-key="item.columnKey"
       :filter-method="item.filterHandler"
@@ -40,11 +40,12 @@
       :fixed="item.fixed"
       :label="item.label"
       :prop="item.prop"
-      :show-overflow-tooltip="item.dataType !== 'action'"
+      :show-overflow-tooltip="item.dataType !== 'action' && item.dataType !== 'slot'"
       :align="item.align"
       :sortable="!!item.sortable"
       :type="item.type"
       :width="item.width"
+      :minWidth="item.minWidth"
     >
       <template #header="scope">
         <div class="pim-table-header-cell">
@@ -130,7 +131,7 @@
         </div>
 
         <!-- 鎸夐挳 -->
-        <div v-else-if="item.dataType == 'action'">
+        <div v-else-if="item.dataType == 'action'" @click.stop>
           <template v-for="(o, key) in item.operation" :key="key">
             <el-button
               v-show="o.type != 'upload'"
@@ -145,7 +146,7 @@
                     : o.color,
               }"
               link
-              @click="o.clickFun(scope.row)"
+              @click.stop="o.clickFun(scope.row)"
               :key="key"
             >
               {{ o.name }}
@@ -225,7 +226,7 @@
 
 <script setup>
 import pagination from "./Pagination.vue";
-import { ref, inject, getCurrentInstance } from "vue";
+import { ref, inject, getCurrentInstance, computed, unref } from "vue";
 import { ElMessage } from "element-plus";
 
 // 鑾峰彇鍏ㄥ眬鐨� uploadHeader
@@ -233,7 +234,7 @@
 const uploadHeader = proxy.uploadHeader;
 const javaApi = proxy.javaApi;
 
-const emit = defineEmits(["pagination", "expand-change", "selection-change"]);
+const emit = defineEmits(["pagination", "expand-change", "selection-change", "row-click"]);
 
 // Filters
 const typeFn = (val, row) => {
@@ -333,6 +334,23 @@
   },
 });
 
+const resolveColumnVisible = (visible) => {
+  if (visible === undefined) return true;
+  if (typeof visible === "function") {
+    try {
+      return !!visible();
+    } catch (error) {
+      console.warn("PIMTable column visible function error:", error);
+      return true;
+    }
+  }
+  return !!unref(visible);
+};
+
+const visibleColumns = computed(() => {
+  return (props.column || []).filter((item) => resolveColumnVisible(item?.visible));
+});
+
 // Data
 const uploadRefs = ref([]);
 const currentFiles = ref({});
@@ -427,6 +445,10 @@
   emit("pagination", { page: page, limit: limit });
 };
 
+const rowClick = (row) => {
+  emit("row-click", row);
+};
+
 const expandChange = (row, expandedRows) => {
   emit("expand-change", row, expandedRows);
 };

--
Gitblit v1.9.3