gongchunyi
17 小时以前 fe78a1e2f9fbca8f27d5d964bb4835da0666c542
src/components/PIMTable/PIMTable.vue
@@ -11,6 +11,7 @@
            :row-key="rowKey"
            :style="tableStyle"
            tooltip-effect="dark"
            :tooltip-options="{ appendTo: 'body' }"
            :expand-row-keys="expandRowKeys"
            :show-summary="isShowSummary"
            :summary-method="summaryMethod"
@@ -21,6 +22,7 @@
            class="lims-table">
    <el-table-column align="center"
                     type="selection"
                     :selectable="selectable"
                     width="55"
                     v-if="isSelection" />
    <el-table-column align="center"
@@ -116,8 +118,9 @@
          <template v-for="(o, key) in item.operation"
                    :key="key">
            <el-button v-show="o.type != 'upload'"
                       v-if="o.showHide ? o.showHide(scope.row) : true"
                       v-if="isOperationVisible(o, scope.row)"
                       :disabled="isOperationDisabled(o, scope.row)"
                       :loading="isOperationLoading(o, scope.row)"
                       :plain="o.plain"
                       type="primary"
                       :style="{
@@ -146,7 +149,7 @@
              "
                       v-if="o.type == 'upload'"
                       style="display: inline-block; width: 50px"
                       v-show="o.showHide ? o.showHide(scope.row) : true"
                       v-show="isOperationVisible(o, scope.row)"
                       :headers="uploadHeader"
                       :before-upload="(file) => beforeUpload(file, scope.$index)"
                       :on-change="
@@ -221,7 +224,9 @@
  };
  const formatters = (val, format) => {
    return typeof format === "function" ? format(val) : val;
    if (typeof format === "function") return format(val);
    if (format && typeof format === "object") return format[val] ?? val;
    return val;
  };
  // Props(使用 defineProps 的非 TS 形式)
@@ -257,6 +262,10 @@
    isSelection: {
      type: Boolean,
      default: false,
    },
    selectable: {
      type: Function,
      default: () => true,
    },
    isShowPagination: {
      type: Boolean,
@@ -367,6 +376,19 @@
      : !!operation.disabled;
  };
  const isOperationVisible = (operation, row) => {
    const visibleHandler = operation?.showHide ?? operation?.show;
    if (visibleHandler === undefined) return true;
    return typeof visibleHandler === "function" ? !!visibleHandler(row) : !!visibleHandler;
  };
  const isOperationLoading = (operation, row) => {
    if (!operation?.loading) return false;
    return typeof operation.loading === "function"
      ? !!operation.loading(row)
      : !!operation.loading;
  };
  const parseHexToRgb = hex => {
    const normalized = String(hex || "")
      .trim()
@@ -441,7 +463,7 @@
  // 文件上传前校验
  const beforeUpload = (rawFile, index) => {
    currentFiles.value[index] = {};
    if (rawfile.size > 1024 * 1024 * 10 * 10) {
    if (rawFile.size > 1024 * 1024 * 10 * 10) {
      ElMessage.error("上传文件不超过10M");
      return false;
    }