<template>
  <!-- 整个页面容器 -->
  <div class="recharge-details-page">
    <!-- 整个页面的卡片容器 -->
    <el-card class="recharge-card">
      <!-- 搜索表单部分，使用卡片布局 -->
      <el-card class="search-card">
        <template #header>
          <div class="card-header">
            <span>搜索条件</span>
          </div>
        </template>
        <!-- 第一行搜索表单，内联布局 -->
        <el-form :inline="true" :model="searchForm" class="search-form">
          <el-form-item label="精网号">
            <!-- 绑定精网号输入值到 searchForm.jwcode -->
            <el-input v-model="searchForm.jwcode" placeholder="请输入精网号" />
          </el-form-item>
          <el-form-item label="地区">
            <!-- 使用 el-select 组件，支持筛选和创建新选项 -->
            <el-select
              v-model="searchForm.region"
              placeholder="请选择或输入地区"
              filterable
              allow-create
              default-first-option
            >
              <!-- 动态生成地区选项 -->
              <el-option
                v-for="region in regionList"
                :key="region"
                :label="region"
                :value="region"
              ></el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="订单号">
            <!-- 绑定订单号输入值到 searchForm.orderId -->
            <el-input v-model="searchForm.orderId" placeholder="请输入订单号" />
          </el-form-item>
          <el-form-item label="充值方式">
            <el-select
              v-model="searchForm.paymentMethod"
              placeholder="请选择充值方式"
              filterable
              allow-create
              default-first-option
            >
              <el-option label="微信" value="WECHAT"></el-option>
              <el-option label="支付宝" value="ALIPAY"></el-option>
              <el-option label="银行" value="BANK"></el-option>
            </el-select>
          </el-form-item>
        </el-form>
        <!-- 第二行搜索表单，内联布局 -->
        <el-form :inline="true" :model="searchForm" class="search-form">
          <!-- <el-form-item label="充值时间"> -->
            <!-- 绑定充值时间范围选择值到 searchForm.rechargeTime -->
            <!-- <el-date-picker
              v-model="searchForm.rechargeTime"
              type="daterange"
              range-separator="至"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
            />
          </el-form-item> -->
          <!-- 新增一个 div 包裹按钮组 -->
          <div class="button-group-wrapper">
            <el-form-item>
              <el-button type="primary" @click="handleSearch">查询</el-button>
              <el-button @click="resetSearch">重置</el-button>
            </el-form-item>
          </div>
        </el-form>
      </el-card>

      <!-- 搜索表单和明细表之间的分隔线 -->
      <el-divider />

      <!-- 明细表 -->
      <el-card class="detail-card">
        <template #header>
          <div class="card-header">
            <span>充值明细</span>
          </div>
        </template>
        <!-- 表格组件，绑定表格数据和加载状态 -->
        <el-table
          :data="rechargeDetailsList"
          style="width: 100%"
          :loading="isLoading"
          stripe
          border
        >
          <el-table-column prop="序号" label="序号" width="80" />
          <el-table-column prop="精网号" label="精网号" width="120" />
          <el-table-column prop="姓名" label="姓名" width="120" />
          <el-table-column prop="订单号" label="订单号" width="180" />
          <el-table-column prop="充值方式" label="充值方式" width="120" />
          <el-table-column prop="所属地区" label="所属地区" width="120" />
          <el-table-column prop="金币数量" label="金币数量" width="120" />
          <el-table-column prop="金额" label="金额" width="120" />
          <el-table-column prop="备注" label="备注" min-width="150"/>
          <el-table-column prop="充值时间" label="充值时间" width="180" />
        </el-table>

        <!-- 空状态提示 -->
        <template #empty>
          <el-empty description="暂无充值明细数据" />
        </template>

        <!-- 分页组件，绑定当前页码、每页显示数量和总数据量 -->
        <el-pagination
          class="pagination"
          :current-page="currentPage"
          :page-size="pageSize"
          :total="total"
          layout="prev, pager, next, jumper"
          @current-change="handlePageChange"
        />
      </el-card>
    </el-card>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import axios from 'axios'
import { Search } from '@element-plus/icons-vue'

// 定义充值明细数据，初始为空数组
const rechargeDetailsList = ref([])
// 加载状态
const isLoading = ref(false)
// 当前页码
const currentPage = ref(1)
// 每页显示数量
const pageSize = ref(8)
// 定义总数据量，初始为 0
const total = ref(0)

// 搜索表单数据
const searchForm = ref({
  jwcode: '', // 精网号，初始为空字符串
  region: '', // 地区，初始为空字符串
  orderId: '', // 订单号，初始为空字符串
  paymentMethod: '', // 充值方式，初始为空字符串
  rechargeTime: [] // 充值时间范围，初始为空数组
})

// 地区列表
const regionList = ref([])

/**
 * 获取地区数据的方法
 * 向服务器发送请求获取地区数据，并更新地区列表
 */
const fetchRegionList = async () => {
  try {
    // 请替换为实际的地区数据接口地址
    const response = await axios.post('http://192.168.8.94:5173/users/getRegion', {}); 
    if (response.data && Array.isArray(response.data)) {
      regionList.value = response.data;
    } else {
      throw new Error('后端返回的地区数据格式不正确');
    }
  } catch (error) {
    console.error('获取地区数据失败', error);
  }
};

/**
 * 获取充值明细数据的方法
 * 向服务器发送请求获取充值明细数据，并更新页面显示
 */
const fetchRechargeDetails = async () => {
  isLoading.value = true;
  try {
    const params = {
      page: currentPage.value,
      size: pageSize.value,
      jwcode: searchForm.value.jwcode,
      region: searchForm.value.region, // 修改为 region
      orderId: searchForm.value.orderId,
      paymentMethod: searchForm.value.paymentMethod,
    };
    console.log('发送的请求参数:', params);
    const response = await axios.post('http://192.168.8.94:5173/recharges/query', params, {
      headers: {
        'Content-Type': 'application/json'
      }
    });
    console.log('后端返回的数据:', response.data);
    const items = response.data.items || [];
    rechargeDetailsList.value = items.map((item, index) => ({
      ...item,
      序号: (currentPage.value - 1) * pageSize.value + index + 1
    }));
    total.value = response.data.total || 0;
  } catch (error) {
    console.error('获取充值明细数据失败', error);
    rechargeDetailsList.value = [];
    total.value = 0;
  } finally {
    isLoading.value = false;
  }
};

// 处理搜索
const handleSearch = () => {
  // 清除搜索表单中字符串类型字段的所有空格
  searchForm.value.jwcode = searchForm.value.jwcode.replace(/\s/g, '');
  searchForm.value.region = searchForm.value.region.replace(/\s/g, '');
  searchForm.value.orderId = searchForm.value.orderId.replace(/\s/g, '');
  console.log('搜索表单数据:', searchForm.value); // 打印搜索表单数据
  currentPage.value = 1;
  fetchRechargeDetails();
};

// 重置搜索
const resetSearch = () => {
  searchForm.value = {
    jwcode: '',
    region: '',
    orderId: '',
    paymentMethod: '',
    rechargeTime: []
  };
  currentPage.value = 1;
  fetchRechargeDetails();
};

// 处理分页变化
const handlePageChange = (page) => {
  currentPage.value = page
  fetchRechargeDetails()
}

// 组件挂载完成后，获取充值明细数据和地区数据
onMounted(() => {
  fetchRechargeDetails()
  fetchRegionList()
})
</script>

<style scoped>
/* 充值明细页面样式 */
.recharge-details-page {
  /* 假设导航栏宽度为 180px，根据实际情况修改 */
  margin-left: 180px; 
  /* 调整页面宽度，使用百分比适应剩余空间 */
  width: calc(100% - 250px); 
  min-width: auto; 
  margin-top: 2px;
  padding: 20px;
  /* 设置页面完全透明 */
  background-color: transparent; 
}

.recharge-card {
  margin: 1px;
  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
  min-height: 890px;
  /* 设置卡片半透明背景 */
  background-color: rgba(255, 255, 255, 0.4); 
}

.search-card,
.detail-card {
  margin-bottom: 20px;
  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
  /* 设置卡片半透明背景 */
  background-color: transparent; 
}

.card-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  color: #000; /* 假设背景较暗，设置文字颜色为白色以便查看 */
}

.search-form {
  margin-bottom: 20px;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
}

/* 输入框和选择框样式 */
.search-form .el-input__inner,
.search-form .el-select .el-input__inner {
  background-color: rgba(255, 255, 255, 0.5); 
  border: 1px solid #ccc;
  color: #000;
}

.button-group-wrapper {
  /* 让这个 div 占据剩余空间 */
  flex-grow: 1;
  display: flex;
  justify-content: flex-end;
}

/* 表格样式 */
.el-table {
  background-color: rgba(255, 255, 255, 0.5); 
}

.el-table th,
.el-table td {
  background-color: transparent; 
}

.pagination {
  margin-top: 20px;
  display: flex;
  justify-content: flex-end;
}
</style>