张诺
2 天以前 195770f92f7d739ffba6447fdbf3a3d5b9e009fa
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 }}
@@ -214,6 +215,7 @@
    </el-table-column>
  </el-table>
  <pagination
      v-if="isShowPagination"
    :total="page.total"
    :layout="page.layout"
    :page="page.current"
@@ -224,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
@@ -232,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) => {
@@ -276,6 +278,10 @@
  isSelection: {
    type: Boolean,
    default: false,
  },
   isShowPagination: {
    type: Boolean,
    default: true,
  },
  isShowSummary: {
    type: Boolean,
@@ -326,6 +332,23 @@
    type: [String, Object],
    default: () => ({ width: "100%" }),
  },
});
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
@@ -422,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);
};
@@ -438,19 +465,6 @@
  text-overflow: ellipsis;
  padding-right: 0 !important;
  padding-left: 0 !important;
}
.pim-table-header-cell {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  text-align: center;
}
.pim-table-header-title {
  font-weight: 500;
}
.pim-table-header-extra :deep(.el-input),