<template>
  <div
    v-if="props.visible"
    class="base-dialog-overlay"
    :style="{ zIndex: props.zIndex }"
    @click="handleOverlayClick"
  >
    <div
      class="base-dialog"
      @click.stop
      :style="{
        maxWidth: `${props.maxWidth}px`,
        maxHeight: `${props.maxHeight}px`,
      }"
    >
      <!-- 四个角的装饰 -->
      <div class="corner corner-top-left"></div>
      <div class="corner corner-top-right"></div>
      <div class="corner corner-bottom-left"></div>
      <div class="corner corner-bottom-right"></div>

      <!-- 标题栏 -->
      <div class="dialog-header">
        <div class="header-title">{{ props.title }}</div>
        <div class="close-btn" @click="handleClose">
          <el-icon><Close /></el-icon>
        </div>
      </div>

      <!-- 标题栏下方自定义插槽 -->
      <div class="header-slot">
        <slot name="header"></slot>
      </div>

      <!-- 筛选区域 -->
      <div class="filter-section" v-if="props.showFilter">
        <slot name="filter"></slot>
      </div>
      <!-- 数据表格 -->
      <div class="table-section" v-if="props.tableShow">
        <el-table
          v-if="props.tableData.length > 0"
          :data="props.tableData"
          :height="props.tableHeight"
          style="width: 100%; min-height: 300px"
          :header-cell-style="headerCellStyle"
          :cell-style="cellStyle"
          size="small"
        >
          <el-table-column
            v-for="column in props.tableColumns"
            :key="column.prop"
            :prop="column.prop"
            :label="column.label"
            :width="column.width"
            :min-width="column.width === 'auto' ? '100px' : undefined"
          >
            <template v-if="column.slot" #default="{ row }">
              <slot :name="column.slot" :row="row"></slot>
            </template>
          </el-table-column>
        </el-table>
      </div>

      <!-- 分页 -->
      <div class="pagination" v-if="props.tableShow">
        <el-pagination
          v-if="props.tableData.length > 0 && props.showPagination"
          :current-page="props.currentPage"
          :page-size="props.pageSize"
          :page-sizes="props.pageSizes"
          :total="props.total"
          layout="prev, pager, next, jumper, ->, total"
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
        />
      </div>
    </div>
  </div>
</template>

<script setup>
import { ref, watch } from "vue";
import { Close } from "@element-plus/icons-vue";

const props = defineProps({
  tableShow: { 
    // 是否显示表格
    type: Boolean,
    default: true,
  },
  visible: {
    // 是否显示弹窗
    type: Boolean,
    default: false,
  },
  title: {
    // 弹窗标题
    type: String,
    default: "弹窗标题",
  },
  zIndex: {
    // 弹窗z-index
    type: Number,
    default: 1000,
  },
  maxWidth: {
    // 弹窗最大宽度
    type: Number,
    default: 1000,
  },
  maxHeight: {
    // 弹窗最大高度
    type: Number,
    default: 800,
  },
  showFilter: {
    // 是否显示筛选区域
    type: Boolean,
    default: true,
  },
  showPagination: {
    // 是否显示分页
    type: Boolean,
    default: true,
  },
  tableData: {
    // 表格数据
    type: Array,
    default: () => [],
  },
  tableColumns: {
    // 表格列配置
    type: Array,
    default: () => [],
  },
  tableHeight: {
    // 表格高度
    type: Number,
    default: 300,
  },
  currentPage: {
    // 当前页码
    type: Number,
    default: 1,
  },
  pageSize: {
    // 每页显示条数
    type: Number,
    default: 10,
  },
  pageSizes: {
    // 分页选项
    type: Array,
    default: () => [10, 20, 30, 40],
  },
  total: {
    // 总条数
    type: Number,
    default: 0,
  },
});

const emit = defineEmits([
  "update:visible",
  "close",
  "size-change",
  "current-change",
  "update:current-page",
  "update:page-size",
]);

// 关闭对话框
const handleClose = () => {
  emit("update:visible", false);
  emit("close");
};

// 点击遮罩关闭
const handleOverlayClick = () => {
  handleClose();
};

// 监听visible变化
watch(
  () => props.visible,
  (newVal) => {
    if (newVal) {
      // 弹窗打开时的逻辑
    }
  },
);

// 分页操作
const handleSizeChange = (val) => {
  emit("update:page-size", val);
  emit("size-change", val);
};

const handleCurrentChange = (val) => {
  emit("update:current-page", val);
  emit("current-change", val);
};

// 表格样式
const headerCellStyle = () => {
  return {
    backgroundColor: "#1D5194",
    color: "#fff",
    fontSize: "14px",
    fontWeight: "500",
    textAlign: "center",
    padding: "5px 0px",
    border: "none",
  };
};

const cellStyle = () => {
  return {
    backgroundColor: "#16334E",
    color: "rgba(255, 255, 255, 0.85)",
    fontSize: "13px",
    textAlign: "center",
    padding: "5px 0px",
    border: "none",
  };
};
</script>

<style lang="scss" scoped>
.base-dialog-overlay {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: rgba(0, 0, 0, 0.6);
  display: flex;
  align-items: center;
  justify-content: center;
}
:deep(.el-table--small) {
  background: #16334e;
}

.base-dialog {
  width: 80vw;
  max-height: 80vh;
  position: relative;
  background: #16334e;
  border: 1px solid rgba(64, 169, 255, 0.3);
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
  // 四个角的装饰
  .corner {
    position: absolute;
    width: 20px;
    height: 20px;
    border: 1px solid #40a9ff;
    z-index: 100;
    pointer-events: none;

    &.corner-top-left {
      top: 0;
      left: 0;
      border-right: none;
      border-bottom: none;
    }

    &.corner-top-right {
      top: 0;
      right: 0;
      border-left: none;
      border-bottom: none;
    }

    &.corner-bottom-left {
      bottom: 0;
      left: 0;
      border-right: none;
      border-top: none;
    }

    &.corner-bottom-right {
      bottom: 0;
      right: 0;
      border-left: none;
      border-top: none;
    }
  }
}

// 标题栏
.dialog-header {
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  margin-bottom: 20px;
  width: 100%;

  .header-title {
    background-image: url("../../../assets/RiskWarning_img/标题@2x.png");
    background-size: 100% 100%;
    background-position: right;
    font-size: 18px;
    font-weight: 600;
    color: #fff;
    width: 50%;
    text-align: center;
    padding: 12px 0;
  }

  .close-btn {
    position: absolute;
    right: 0;
    top: 0;
    width: 32px;
    height: 32px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: rgba(255, 255, 255, 0.7);
    cursor: pointer;
    font-size: 20px;
    transition: color 0.3s;

    &:hover {
      color: #fff;
    }
  }
}

// 标题栏下方自定义插槽
.header-slot {
  margin-bottom: 20px;
  padding: 0 24px;
  // overflow-y: auto;
  max-height: 70vh;
  scrollbar-width: none;
  -ms-overflow-style: none;

  &::-webkit-scrollbar {
    display: none;
  }
}

// 筛选区域
.filter-section {
  margin-bottom: 16px;
  padding: 0 24px;
  :deep(.el-select__wrapper) {
    background: #122c46 !important;
  }
}

// 表格区域
.table-section {
  width: 100%;
  padding: 0 24px;
  min-height: 320px;
  background: #16334e;
}

:deep(.el-table__inner-wrapper:before) {
  width: 0% !important;
}

// 分页
.pagination {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  padding: 12px 24px;
  box-sizing: border-box;
  min-height: 56px;
  :deep(.btn-prev) {
    background: #19334b !important;
    color: #fff;
    border: 1px solid #1f4f80;
  }
  :deep(.btn-next) {
    background: #19334b !important;
    color: #fff;
    border: 1px solid #1f4f80;
  }
  :deep(.number) {
    background: #19334b !important;
    color: #2d90e3;
    border: 1px solid #2d90e3;
  }
  :deep(.el-pagination) {
    background: #16334e !important;
    gap: 10px;
  }
  :deep(.el-pager) {
    background: #16334e !important;
    gap: 10px;
  }
  :deep(.el-input__wrapper) {
    background: #16334e !important;
    .el-input__inner {
      color: #fff !important;
    }
  }

  :deep(.el-pagination__jump) {
    color: #fff !important;
  }
  :deep(.el-pagination__total) {
    color: #fff !important;
  }
}

// 下拉
.el-select {
  .el-select__wrapper {
    border-radius: 4px;
    box-shadow: 0 0 0 1px #c5c5c5 inset;
    height: 40px;
    line-height: 40px;
    background: #122c46;
    color: #fff;
  }
  .el-select__wrapper.is-hovering,
  .el-select__wrapper.is-focused {
    box-shadow: 0 0 0 1px #3380ec inset;
    // filter: brightness(1.3);
  }
}
:deep(.el-select__placeholder) {
  font-weight: 400;
  color: #40a9ff !important;
}
// 下拉选项浮窗
.el-popper {
  // 下拉选项
  .el-select-dropdown {
    background: #122c46;

    .el-select-dropdown__item {
      display: flex;
      align-items: center;
      color: #fff;
      background-color: #122c46;
      text-stroke: 0px #3a6fbf;
      -webkit-text-stroke: 0px #3a6fbf;
      height: 40px;

      &.is-hovering {
        background: #0f2e6d;
        font-weight: bold;
        color: #7bc8ef;
        text-stroke: 0px #7bc8ef;
        font-style: normal;
        text-transform: none;
        -webkit-text-stroke: 0px #7bc8ef;
      }
    }
  }
}

/* 修改小三角箭头的背景色和边框 */
:deep(.el-popper__arrow::before) {
  background-color: #122c46 !important;
}
:deep(.custom-select-popper) {
  background-color: #122c46 !important; /* 整体背景色 */
  border: 1px solid #122c46 !important; /* 边框颜色 */
  border-radius: 8px !important; /* 圆角 */
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3) !important; /* 阴影 */
}

/* 覆盖下拉框的白色边框 */
:deep(.el-popper.is-light .el-popper__arrow::before) {
  background-color: #122c46 !important;
  border-color: #122c46 !important;
}

:deep(.el-select-dropdown) {
  border: 1px solid #122c46 !important;
  background-color: #122c46 !important;
}

:deep(.el-popper[data-popper-placement^="bottom"]) {
  border: 1px solid #122c46 !important;
}

:deep(.el-popper[data-popper-placement^="top"]) {
  border: 1px solid #122c46 !important;
}

:deep(.el-popper__arrow) {
  border-color: #122c46 !important;
}

:deep(.el-popper__arrow::after) {
  border-color: #122c46 !important;
}

:deep(.el-pager li.is-active) {
  background-color: #2598ff !important;
  color: #fff !important;
}
</style>
