feat: 结算管理3个页面的样式
This commit is contained in:
		
							parent
							
								
									446dcf9579
								
							
						
					
					
						commit
						60ecd8015d
					
				| 
						 | 
					@ -464,6 +464,59 @@ export default {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      menuId: getUUID(),
 | 
				
			||||||
 | 
					      parentId: 0,
 | 
				
			||||||
 | 
					      parentName: null,
 | 
				
			||||||
 | 
					      name: '结算管理',
 | 
				
			||||||
 | 
					      url: 'settle',
 | 
				
			||||||
 | 
					      perms: 'settle',
 | 
				
			||||||
 | 
					      type: 0,
 | 
				
			||||||
 | 
					      elIcon: 'el-icon-office-building',
 | 
				
			||||||
 | 
					      orderNum: 0,
 | 
				
			||||||
 | 
					      open: null,
 | 
				
			||||||
 | 
					      list: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          menuId: getUUID(),
 | 
				
			||||||
 | 
					          parentId: 0,
 | 
				
			||||||
 | 
					          parentName: null,
 | 
				
			||||||
 | 
					          name: '待结算管理',
 | 
				
			||||||
 | 
					          url: 'settle/unsettle',
 | 
				
			||||||
 | 
					          perms: 'settle:unsettle',
 | 
				
			||||||
 | 
					          type: 1,
 | 
				
			||||||
 | 
					          elIcon: 'el-icon-document-checked',
 | 
				
			||||||
 | 
					          orderNum: 0,
 | 
				
			||||||
 | 
					          open: null,
 | 
				
			||||||
 | 
					          list: []
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          menuId: getUUID(),
 | 
				
			||||||
 | 
					          parentId: 0,
 | 
				
			||||||
 | 
					          parentName: null,
 | 
				
			||||||
 | 
					          name: '金额管理',
 | 
				
			||||||
 | 
					          url: 'settle/money',
 | 
				
			||||||
 | 
					          perms: 'settle:money',
 | 
				
			||||||
 | 
					          type: 1,
 | 
				
			||||||
 | 
					          elIcon: 'el-icon-coin',
 | 
				
			||||||
 | 
					          orderNum: 0,
 | 
				
			||||||
 | 
					          open: null,
 | 
				
			||||||
 | 
					          list: []
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          menuId: getUUID(),
 | 
				
			||||||
 | 
					          parentId: 0,
 | 
				
			||||||
 | 
					          parentName: null,
 | 
				
			||||||
 | 
					          name: '钱包管理',
 | 
				
			||||||
 | 
					          url: 'settle/wallet',
 | 
				
			||||||
 | 
					          perms: 'settle:wallet',
 | 
				
			||||||
 | 
					          type: 1,
 | 
				
			||||||
 | 
					          elIcon: 'el-icon-wallet',
 | 
				
			||||||
 | 
					          orderNum: 0,
 | 
				
			||||||
 | 
					          open: null,
 | 
				
			||||||
 | 
					          list: []
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      menuId: getUUID(),
 | 
					      menuId: getUUID(),
 | 
				
			||||||
      parentId: 0,
 | 
					      parentId: 0,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,808 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div class="page-container">
 | 
				
			||||||
 | 
					    <!-- 统计数据区域 -->
 | 
				
			||||||
 | 
					    <el-row :gutter="16" class="stats-row">
 | 
				
			||||||
 | 
					      <el-col :span="8">
 | 
				
			||||||
 | 
					        <el-card class="stat-card" shadow="hover">
 | 
				
			||||||
 | 
					          <div class="stat-content">
 | 
				
			||||||
 | 
					            <div class="stat-label">冻结金额</div>
 | 
				
			||||||
 | 
					            <div class="stat-value stat-frozen">
 | 
				
			||||||
 | 
					              ¥ {{ statsInfo.frozenAmount.toFixed(2) }}
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </el-card>
 | 
				
			||||||
 | 
					      </el-col>
 | 
				
			||||||
 | 
					      <el-col :span="8">
 | 
				
			||||||
 | 
					        <el-card class="stat-card" shadow="hover">
 | 
				
			||||||
 | 
					          <div class="stat-content">
 | 
				
			||||||
 | 
					            <div class="stat-label">可用金额</div>
 | 
				
			||||||
 | 
					            <div class="stat-value stat-available">
 | 
				
			||||||
 | 
					              ¥ {{ statsInfo.availableAmount.toFixed(2) }}
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </el-card>
 | 
				
			||||||
 | 
					      </el-col>
 | 
				
			||||||
 | 
					      <el-col :span="8">
 | 
				
			||||||
 | 
					        <el-card class="stat-card" shadow="hover">
 | 
				
			||||||
 | 
					          <div class="stat-content">
 | 
				
			||||||
 | 
					            <div class="stat-label">钱包余额</div>
 | 
				
			||||||
 | 
					            <div class="stat-value stat-balance">
 | 
				
			||||||
 | 
					              ¥ {{ statsInfo.walletBalance.toFixed(2) }}
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </el-card>
 | 
				
			||||||
 | 
					      </el-col>
 | 
				
			||||||
 | 
					    </el-row>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- 标签页区域 -->
 | 
				
			||||||
 | 
					    <el-card class="tabs-card" shadow="never">
 | 
				
			||||||
 | 
					      <el-tabs v-model="activeTab" @tab-click="handleTabClick">
 | 
				
			||||||
 | 
					        <!-- 收入Tab -->
 | 
				
			||||||
 | 
					        <el-tab-pane label="收入" name="income">
 | 
				
			||||||
 | 
					          <!-- 搜索区域 -->
 | 
				
			||||||
 | 
					          <div class="search-section">
 | 
				
			||||||
 | 
					            <el-form
 | 
				
			||||||
 | 
					              :model="incomeSearchForm"
 | 
				
			||||||
 | 
					              :inline="true"
 | 
				
			||||||
 | 
					              ref="incomeSearchForm"
 | 
				
			||||||
 | 
					              class="search-form"
 | 
				
			||||||
 | 
					              size="small"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <el-form-item label="订单ID" prop="orderId">
 | 
				
			||||||
 | 
					                <el-input
 | 
				
			||||||
 | 
					                  v-model="incomeSearchForm.orderId"
 | 
				
			||||||
 | 
					                  placeholder="请输入订单ID"
 | 
				
			||||||
 | 
					                  clearable
 | 
				
			||||||
 | 
					                  @clear="handleIncomeSearchClear"
 | 
				
			||||||
 | 
					                  style="width: 200px"
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
 | 
					              </el-form-item>
 | 
				
			||||||
 | 
					              <el-form-item label="订单时间" prop="dateRange">
 | 
				
			||||||
 | 
					                <el-date-picker
 | 
				
			||||||
 | 
					                  v-model="incomeSearchForm.dateRange"
 | 
				
			||||||
 | 
					                  type="daterange"
 | 
				
			||||||
 | 
					                  range-separator="至"
 | 
				
			||||||
 | 
					                  start-placeholder="开始日期"
 | 
				
			||||||
 | 
					                  end-placeholder="结束日期"
 | 
				
			||||||
 | 
					                  value-format="yyyy-MM-dd"
 | 
				
			||||||
 | 
					                  style="width: 340px"
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
 | 
					              </el-form-item>
 | 
				
			||||||
 | 
					              <el-form-item>
 | 
				
			||||||
 | 
					                <el-button
 | 
				
			||||||
 | 
					                  type="primary"
 | 
				
			||||||
 | 
					                  @click="handleIncomeSearch"
 | 
				
			||||||
 | 
					                  icon="el-icon-search"
 | 
				
			||||||
 | 
					                  size="small"
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                  搜索
 | 
				
			||||||
 | 
					                </el-button>
 | 
				
			||||||
 | 
					                <el-button
 | 
				
			||||||
 | 
					                  @click="handleIncomeReset"
 | 
				
			||||||
 | 
					                  icon="el-icon-refresh"
 | 
				
			||||||
 | 
					                  size="small"
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                  重置
 | 
				
			||||||
 | 
					                </el-button>
 | 
				
			||||||
 | 
					              </el-form-item>
 | 
				
			||||||
 | 
					            </el-form>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          <!-- 表格区域 -->
 | 
				
			||||||
 | 
					          <el-table
 | 
				
			||||||
 | 
					            ref="incomeTable"
 | 
				
			||||||
 | 
					            :data="incomeDataList"
 | 
				
			||||||
 | 
					            border
 | 
				
			||||||
 | 
					            style="width: 100%"
 | 
				
			||||||
 | 
					            v-loading="incomeLoading"
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              type="index"
 | 
				
			||||||
 | 
					              width="60"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              label="序号"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="orderId"
 | 
				
			||||||
 | 
					              label="订单ID"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              min-width="150"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="orderAmount"
 | 
				
			||||||
 | 
					              label="订单金额"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              width="130"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <template slot-scope="scope">
 | 
				
			||||||
 | 
					                <span style="font-weight: 600">
 | 
				
			||||||
 | 
					                  ¥{{ scope.row.orderAmount.toFixed(2) }}
 | 
				
			||||||
 | 
					                </span>
 | 
				
			||||||
 | 
					              </template>
 | 
				
			||||||
 | 
					            </el-table-column>
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="orderTime"
 | 
				
			||||||
 | 
					              label="订单时间"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              min-width="160"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="incomeAmount"
 | 
				
			||||||
 | 
					              label="收入金额"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              width="130"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <template slot-scope="scope">
 | 
				
			||||||
 | 
					                <span style="color: #52c41a; font-weight: 600">
 | 
				
			||||||
 | 
					                  + ¥{{ scope.row.incomeAmount.toFixed(2) }}
 | 
				
			||||||
 | 
					                </span>
 | 
				
			||||||
 | 
					              </template>
 | 
				
			||||||
 | 
					            </el-table-column>
 | 
				
			||||||
 | 
					          </el-table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          <!-- 分页 -->
 | 
				
			||||||
 | 
					          <el-pagination
 | 
				
			||||||
 | 
					            @size-change="handleIncomeSizeChange"
 | 
				
			||||||
 | 
					            @current-change="handleIncomeCurrentChange"
 | 
				
			||||||
 | 
					            :current-page="incomePageInfo.pageNumber"
 | 
				
			||||||
 | 
					            :page-sizes="[10, 20, 50, 100]"
 | 
				
			||||||
 | 
					            :page-size="incomePageInfo.pageSize"
 | 
				
			||||||
 | 
					            layout="total, sizes, prev, pager, next, jumper"
 | 
				
			||||||
 | 
					            :total="incomePageInfo.total"
 | 
				
			||||||
 | 
					            class="pagination-container"
 | 
				
			||||||
 | 
					          />
 | 
				
			||||||
 | 
					        </el-tab-pane>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <!-- 支出Tab -->
 | 
				
			||||||
 | 
					        <el-tab-pane label="支出" name="expense">
 | 
				
			||||||
 | 
					          <!-- 搜索区域 -->
 | 
				
			||||||
 | 
					          <div class="search-section">
 | 
				
			||||||
 | 
					            <el-form
 | 
				
			||||||
 | 
					              :model="expenseSearchForm"
 | 
				
			||||||
 | 
					              :inline="true"
 | 
				
			||||||
 | 
					              ref="expenseSearchForm"
 | 
				
			||||||
 | 
					              class="search-form"
 | 
				
			||||||
 | 
					              size="small"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <el-form-item label="结算明细ID" prop="settlementId">
 | 
				
			||||||
 | 
					                <el-input
 | 
				
			||||||
 | 
					                  v-model="expenseSearchForm.settlementId"
 | 
				
			||||||
 | 
					                  placeholder="请输入结算明细ID"
 | 
				
			||||||
 | 
					                  clearable
 | 
				
			||||||
 | 
					                  @clear="handleExpenseSearchClear"
 | 
				
			||||||
 | 
					                  style="width: 180px"
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
 | 
					              </el-form-item>
 | 
				
			||||||
 | 
					              <el-form-item label="清算明细ID" prop="clearingId">
 | 
				
			||||||
 | 
					                <el-input
 | 
				
			||||||
 | 
					                  v-model="expenseSearchForm.clearingId"
 | 
				
			||||||
 | 
					                  placeholder="请输入清算明细ID"
 | 
				
			||||||
 | 
					                  clearable
 | 
				
			||||||
 | 
					                  @clear="handleExpenseSearchClear"
 | 
				
			||||||
 | 
					                  style="width: 180px"
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
 | 
					              </el-form-item>
 | 
				
			||||||
 | 
					              <el-form-item label="支出对象ID" prop="targetId">
 | 
				
			||||||
 | 
					                <el-input
 | 
				
			||||||
 | 
					                  v-model="expenseSearchForm.targetId"
 | 
				
			||||||
 | 
					                  placeholder="请输入支出对象ID"
 | 
				
			||||||
 | 
					                  clearable
 | 
				
			||||||
 | 
					                  @clear="handleExpenseSearchClear"
 | 
				
			||||||
 | 
					                  style="width: 180px"
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
 | 
					              </el-form-item>
 | 
				
			||||||
 | 
					              <el-form-item label="支出时间" prop="dateRange">
 | 
				
			||||||
 | 
					                <el-date-picker
 | 
				
			||||||
 | 
					                  v-model="expenseSearchForm.dateRange"
 | 
				
			||||||
 | 
					                  type="daterange"
 | 
				
			||||||
 | 
					                  range-separator="至"
 | 
				
			||||||
 | 
					                  start-placeholder="开始日期"
 | 
				
			||||||
 | 
					                  end-placeholder="结束日期"
 | 
				
			||||||
 | 
					                  value-format="yyyy-MM-dd"
 | 
				
			||||||
 | 
					                  style="width: 340px"
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
 | 
					              </el-form-item>
 | 
				
			||||||
 | 
					              <el-form-item>
 | 
				
			||||||
 | 
					                <el-button
 | 
				
			||||||
 | 
					                  type="primary"
 | 
				
			||||||
 | 
					                  @click="handleExpenseSearch"
 | 
				
			||||||
 | 
					                  icon="el-icon-search"
 | 
				
			||||||
 | 
					                  size="small"
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                  搜索
 | 
				
			||||||
 | 
					                </el-button>
 | 
				
			||||||
 | 
					                <el-button
 | 
				
			||||||
 | 
					                  @click="handleExpenseReset"
 | 
				
			||||||
 | 
					                  icon="el-icon-refresh"
 | 
				
			||||||
 | 
					                  size="small"
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                  重置
 | 
				
			||||||
 | 
					                </el-button>
 | 
				
			||||||
 | 
					              </el-form-item>
 | 
				
			||||||
 | 
					            </el-form>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          <!-- 表格区域 -->
 | 
				
			||||||
 | 
					          <el-table
 | 
				
			||||||
 | 
					            ref="expenseTable"
 | 
				
			||||||
 | 
					            :data="expenseDataList"
 | 
				
			||||||
 | 
					            border
 | 
				
			||||||
 | 
					            style="width: 100%"
 | 
				
			||||||
 | 
					            v-loading="expenseLoading"
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              type="index"
 | 
				
			||||||
 | 
					              width="60"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              label="序号"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="settlementId"
 | 
				
			||||||
 | 
					              label="结算明细ID"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              min-width="140"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="clearingId"
 | 
				
			||||||
 | 
					              label="清算明细ID"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              min-width="140"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="settlementAmount"
 | 
				
			||||||
 | 
					              label="结算金额"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              width="130"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <template slot-scope="scope">
 | 
				
			||||||
 | 
					                <span style="color: #ff4d4f; font-weight: 600">
 | 
				
			||||||
 | 
					                  - ¥{{ scope.row.settlementAmount.toFixed(2) }}
 | 
				
			||||||
 | 
					                </span>
 | 
				
			||||||
 | 
					              </template>
 | 
				
			||||||
 | 
					            </el-table-column>
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="settlementTime"
 | 
				
			||||||
 | 
					              label="结算时间"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              min-width="160"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="targetId"
 | 
				
			||||||
 | 
					              label="支出对象ID"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              min-width="120"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="targetRole"
 | 
				
			||||||
 | 
					              label="支出对象角色"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              width="120"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="expenseTime"
 | 
				
			||||||
 | 
					              label="支出时间"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              min-width="160"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					          </el-table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          <!-- 分页 -->
 | 
				
			||||||
 | 
					          <el-pagination
 | 
				
			||||||
 | 
					            @size-change="handleExpenseSizeChange"
 | 
				
			||||||
 | 
					            @current-change="handleExpenseCurrentChange"
 | 
				
			||||||
 | 
					            :current-page="expensePageInfo.pageNumber"
 | 
				
			||||||
 | 
					            :page-sizes="[10, 20, 50, 100]"
 | 
				
			||||||
 | 
					            :page-size="expensePageInfo.pageSize"
 | 
				
			||||||
 | 
					            layout="total, sizes, prev, pager, next, jumper"
 | 
				
			||||||
 | 
					            :total="expensePageInfo.total"
 | 
				
			||||||
 | 
					            class="pagination-container"
 | 
				
			||||||
 | 
					          />
 | 
				
			||||||
 | 
					        </el-tab-pane>
 | 
				
			||||||
 | 
					      </el-tabs>
 | 
				
			||||||
 | 
					    </el-card>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "MoneyManagement",
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      // 当前激活的标签页
 | 
				
			||||||
 | 
					      activeTab: "income",
 | 
				
			||||||
 | 
					      // 统计信息
 | 
				
			||||||
 | 
					      statsInfo: {
 | 
				
			||||||
 | 
					        frozenAmount: 5280.0,
 | 
				
			||||||
 | 
					        availableAmount: 23450.5,
 | 
				
			||||||
 | 
					        walletBalance: 28730.5
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      // 收入搜索表单
 | 
				
			||||||
 | 
					      incomeSearchForm: {
 | 
				
			||||||
 | 
					        orderId: "",
 | 
				
			||||||
 | 
					        dateRange: null
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      // 收入表格数据
 | 
				
			||||||
 | 
					      incomeDataList: [],
 | 
				
			||||||
 | 
					      // 收入分页信息
 | 
				
			||||||
 | 
					      incomePageInfo: {
 | 
				
			||||||
 | 
					        pageNumber: 1,
 | 
				
			||||||
 | 
					        pageSize: 10,
 | 
				
			||||||
 | 
					        total: 0
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      // 收入加载状态
 | 
				
			||||||
 | 
					      incomeLoading: false,
 | 
				
			||||||
 | 
					      // 支出搜索表单
 | 
				
			||||||
 | 
					      expenseSearchForm: {
 | 
				
			||||||
 | 
					        settlementId: "",
 | 
				
			||||||
 | 
					        clearingId: "",
 | 
				
			||||||
 | 
					        targetId: "",
 | 
				
			||||||
 | 
					        dateRange: null
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      // 支出表格数据
 | 
				
			||||||
 | 
					      expenseDataList: [],
 | 
				
			||||||
 | 
					      // 支出分页信息
 | 
				
			||||||
 | 
					      expensePageInfo: {
 | 
				
			||||||
 | 
					        pageNumber: 1,
 | 
				
			||||||
 | 
					        pageSize: 10,
 | 
				
			||||||
 | 
					        total: 0
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      // 支出加载状态
 | 
				
			||||||
 | 
					      expenseLoading: false
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  created() {
 | 
				
			||||||
 | 
					    this.fetchStatsInfo();
 | 
				
			||||||
 | 
					    this.fetchIncomeData();
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    // 获取统计信息
 | 
				
			||||||
 | 
					    async fetchStatsInfo() {
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        // TODO: 调用实际的API接口获取统计信息
 | 
				
			||||||
 | 
					        // const res = await this.$api.mer_admin.getMoneyStats();
 | 
				
			||||||
 | 
					        // this.statsInfo = res.data.data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 模拟数据
 | 
				
			||||||
 | 
					        this.statsInfo = {
 | 
				
			||||||
 | 
					          frozenAmount: 5280.0,
 | 
				
			||||||
 | 
					          availableAmount: 23450.5,
 | 
				
			||||||
 | 
					          walletBalance: 28730.5
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					      } catch (error) {
 | 
				
			||||||
 | 
					        console.error("获取统计信息失败:", error);
 | 
				
			||||||
 | 
					        this.$message.error("获取统计信息失败");
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 标签页切换
 | 
				
			||||||
 | 
					    handleTabClick(tab) {
 | 
				
			||||||
 | 
					      if (tab.name === "income") {
 | 
				
			||||||
 | 
					        this.fetchIncomeData();
 | 
				
			||||||
 | 
					      } else if (tab.name === "expense") {
 | 
				
			||||||
 | 
					        this.fetchExpenseData();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // ==================== 收入相关方法 ====================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 获取收入数据
 | 
				
			||||||
 | 
					    fetchIncomeData() {
 | 
				
			||||||
 | 
					      this.incomeLoading = true;
 | 
				
			||||||
 | 
					      const marketId = this.marketId;
 | 
				
			||||||
 | 
					      if (!marketId) {
 | 
				
			||||||
 | 
					        this.$message.error("获取市场ID失败,请重新登录");
 | 
				
			||||||
 | 
					        this.$router.push("/login");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const params = {
 | 
				
			||||||
 | 
					        pageNumber: this.incomePageInfo.pageNumber,
 | 
				
			||||||
 | 
					        pageSize: this.incomePageInfo.pageSize,
 | 
				
			||||||
 | 
					        marketId,
 | 
				
			||||||
 | 
					        ...this.buildIncomeSearchParams()
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // TODO: 调用实际的API接口获取收入列表
 | 
				
			||||||
 | 
					      // this.$api.mer_admin
 | 
				
			||||||
 | 
					      //   .getIncomeList(params)
 | 
				
			||||||
 | 
					      //   .then(res => {
 | 
				
			||||||
 | 
					      //     if (res.data && res.data.data) {
 | 
				
			||||||
 | 
					      //       this.incomeDataList = res.data.data.data || [];
 | 
				
			||||||
 | 
					      //       this.incomePageInfo.total = Number(res.data.data.total) || 0;
 | 
				
			||||||
 | 
					      //     }
 | 
				
			||||||
 | 
					      //   })
 | 
				
			||||||
 | 
					      //   .catch(err => {
 | 
				
			||||||
 | 
					      //     console.error("获取收入数据失败:", err);
 | 
				
			||||||
 | 
					      //     this.$message.error("获取收入数据失败");
 | 
				
			||||||
 | 
					      //   })
 | 
				
			||||||
 | 
					      //   .finally(() => {
 | 
				
			||||||
 | 
					      //     this.incomeLoading = false;
 | 
				
			||||||
 | 
					      //   });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // 模拟数据
 | 
				
			||||||
 | 
					      setTimeout(() => {
 | 
				
			||||||
 | 
					        const mockData = [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            orderId: "ORD202501310001",
 | 
				
			||||||
 | 
					            orderAmount: 1280.0,
 | 
				
			||||||
 | 
					            orderTime: "2025-01-31 10:30:25",
 | 
				
			||||||
 | 
					            incomeAmount: 1280.0
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            orderId: "ORD202501310002",
 | 
				
			||||||
 | 
					            orderAmount: 850.5,
 | 
				
			||||||
 | 
					            orderTime: "2025-01-31 11:15:42",
 | 
				
			||||||
 | 
					            incomeAmount: 850.5
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            orderId: "ORD202501310003",
 | 
				
			||||||
 | 
					            orderAmount: 2100.0,
 | 
				
			||||||
 | 
					            orderTime: "2025-01-31 14:20:18",
 | 
				
			||||||
 | 
					            incomeAmount: 2100.0
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            orderId: "ORD202501300001",
 | 
				
			||||||
 | 
					            orderAmount: 560.0,
 | 
				
			||||||
 | 
					            orderTime: "2025-01-30 09:45:33",
 | 
				
			||||||
 | 
					            incomeAmount: 560.0
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            orderId: "ORD202501300002",
 | 
				
			||||||
 | 
					            orderAmount: 1450.0,
 | 
				
			||||||
 | 
					            orderTime: "2025-01-30 16:28:56",
 | 
				
			||||||
 | 
					            incomeAmount: 1450.0
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 应用搜索过滤
 | 
				
			||||||
 | 
					        let filteredData = mockData;
 | 
				
			||||||
 | 
					        const searchParams = this.buildIncomeSearchParams();
 | 
				
			||||||
 | 
					        if (searchParams.orderId) {
 | 
				
			||||||
 | 
					          filteredData = filteredData.filter(item =>
 | 
				
			||||||
 | 
					            item.orderId.includes(searchParams.orderId)
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.incomeDataList = filteredData;
 | 
				
			||||||
 | 
					        this.incomePageInfo.total = 127; // 模拟总数
 | 
				
			||||||
 | 
					        this.incomeLoading = false;
 | 
				
			||||||
 | 
					      }, 500);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 构建收入搜索参数
 | 
				
			||||||
 | 
					    buildIncomeSearchParams() {
 | 
				
			||||||
 | 
					      const params = {};
 | 
				
			||||||
 | 
					      if (this.incomeSearchForm.orderId) {
 | 
				
			||||||
 | 
					        params.orderId = this.incomeSearchForm.orderId;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      if (
 | 
				
			||||||
 | 
					        this.incomeSearchForm.dateRange &&
 | 
				
			||||||
 | 
					        this.incomeSearchForm.dateRange.length === 2
 | 
				
			||||||
 | 
					      ) {
 | 
				
			||||||
 | 
					        params.startDate = this.incomeSearchForm.dateRange[0];
 | 
				
			||||||
 | 
					        params.endDate = this.incomeSearchForm.dateRange[1];
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return params;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 收入搜索
 | 
				
			||||||
 | 
					    handleIncomeSearch() {
 | 
				
			||||||
 | 
					      this.incomePageInfo.pageNumber = 1;
 | 
				
			||||||
 | 
					      this.fetchIncomeData();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 收入清除搜索
 | 
				
			||||||
 | 
					    handleIncomeSearchClear() {
 | 
				
			||||||
 | 
					      this.handleIncomeSearch();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 收入重置
 | 
				
			||||||
 | 
					    handleIncomeReset() {
 | 
				
			||||||
 | 
					      this.incomeSearchForm = {
 | 
				
			||||||
 | 
					        orderId: "",
 | 
				
			||||||
 | 
					        dateRange: null
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      this.incomePageInfo.pageNumber = 1;
 | 
				
			||||||
 | 
					      this.fetchIncomeData();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 收入分页大小改变
 | 
				
			||||||
 | 
					    handleIncomeSizeChange(val) {
 | 
				
			||||||
 | 
					      this.incomePageInfo.pageSize = val;
 | 
				
			||||||
 | 
					      this.incomePageInfo.pageNumber = 1;
 | 
				
			||||||
 | 
					      this.fetchIncomeData();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 收入当前页改变
 | 
				
			||||||
 | 
					    handleIncomeCurrentChange(val) {
 | 
				
			||||||
 | 
					      this.incomePageInfo.pageNumber = val;
 | 
				
			||||||
 | 
					      this.fetchIncomeData();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // ==================== 支出相关方法 ====================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 获取支出数据
 | 
				
			||||||
 | 
					    fetchExpenseData() {
 | 
				
			||||||
 | 
					      this.expenseLoading = true;
 | 
				
			||||||
 | 
					      const marketId = this.marketId;
 | 
				
			||||||
 | 
					      if (!marketId) {
 | 
				
			||||||
 | 
					        this.$message.error("获取市场ID失败,请重新登录");
 | 
				
			||||||
 | 
					        this.$router.push("/login");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const params = {
 | 
				
			||||||
 | 
					        pageNumber: this.expensePageInfo.pageNumber,
 | 
				
			||||||
 | 
					        pageSize: this.expensePageInfo.pageSize,
 | 
				
			||||||
 | 
					        marketId,
 | 
				
			||||||
 | 
					        ...this.buildExpenseSearchParams()
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // TODO: 调用实际的API接口获取支出列表
 | 
				
			||||||
 | 
					      // this.$api.mer_admin
 | 
				
			||||||
 | 
					      //   .getExpenseList(params)
 | 
				
			||||||
 | 
					      //   .then(res => {
 | 
				
			||||||
 | 
					      //     if (res.data && res.data.data) {
 | 
				
			||||||
 | 
					      //       this.expenseDataList = res.data.data.data || [];
 | 
				
			||||||
 | 
					      //       this.expensePageInfo.total = Number(res.data.data.total) || 0;
 | 
				
			||||||
 | 
					      //     }
 | 
				
			||||||
 | 
					      //   })
 | 
				
			||||||
 | 
					      //   .catch(err => {
 | 
				
			||||||
 | 
					      //     console.error("获取支出数据失败:", err);
 | 
				
			||||||
 | 
					      //     this.$message.error("获取支出数据失败");
 | 
				
			||||||
 | 
					      //   })
 | 
				
			||||||
 | 
					      //   .finally(() => {
 | 
				
			||||||
 | 
					      //     this.expenseLoading = false;
 | 
				
			||||||
 | 
					      //   });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // 模拟数据
 | 
				
			||||||
 | 
					      setTimeout(() => {
 | 
				
			||||||
 | 
					        const mockData = [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            settlementId: "SET202501310001",
 | 
				
			||||||
 | 
					            clearingId: "CLR202501310001",
 | 
				
			||||||
 | 
					            settlementAmount: 320.0,
 | 
				
			||||||
 | 
					            settlementTime: "2025-01-31 15:30:20",
 | 
				
			||||||
 | 
					            targetId: "SUP100256",
 | 
				
			||||||
 | 
					            targetRole: "供应商",
 | 
				
			||||||
 | 
					            expenseTime: "2025-01-31 15:30:25"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            settlementId: "SET202501310002",
 | 
				
			||||||
 | 
					            clearingId: "CLR202501310002",
 | 
				
			||||||
 | 
					            settlementAmount: 580.5,
 | 
				
			||||||
 | 
					            settlementTime: "2025-01-31 16:15:35",
 | 
				
			||||||
 | 
					            targetId: "DRV100128",
 | 
				
			||||||
 | 
					            targetRole: "配送员",
 | 
				
			||||||
 | 
					            expenseTime: "2025-01-31 16:15:40"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            settlementId: "SET202501310003",
 | 
				
			||||||
 | 
					            clearingId: "CLR202501310003",
 | 
				
			||||||
 | 
					            settlementAmount: 1200.0,
 | 
				
			||||||
 | 
					            settlementTime: "2025-01-31 17:20:18",
 | 
				
			||||||
 | 
					            targetId: "SUP100328",
 | 
				
			||||||
 | 
					            targetRole: "供应商",
 | 
				
			||||||
 | 
					            expenseTime: "2025-01-31 17:20:22"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            settlementId: "SET202501300001",
 | 
				
			||||||
 | 
					            clearingId: "CLR202501300001",
 | 
				
			||||||
 | 
					            settlementAmount: 450.0,
 | 
				
			||||||
 | 
					            settlementTime: "2025-01-30 10:45:33",
 | 
				
			||||||
 | 
					            targetId: "PLT100045",
 | 
				
			||||||
 | 
					            targetRole: "平台",
 | 
				
			||||||
 | 
					            expenseTime: "2025-01-30 10:45:38"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            settlementId: "SET202501300002",
 | 
				
			||||||
 | 
					            clearingId: "CLR202501300002",
 | 
				
			||||||
 | 
					            settlementAmount: 280.0,
 | 
				
			||||||
 | 
					            settlementTime: "2025-01-30 14:28:56",
 | 
				
			||||||
 | 
					            targetId: "DRV100089",
 | 
				
			||||||
 | 
					            targetRole: "配送员",
 | 
				
			||||||
 | 
					            expenseTime: "2025-01-30 14:29:00"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 应用搜索过滤
 | 
				
			||||||
 | 
					        let filteredData = mockData;
 | 
				
			||||||
 | 
					        const searchParams = this.buildExpenseSearchParams();
 | 
				
			||||||
 | 
					        if (searchParams.settlementId) {
 | 
				
			||||||
 | 
					          filteredData = filteredData.filter(item =>
 | 
				
			||||||
 | 
					            item.settlementId.includes(searchParams.settlementId)
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (searchParams.clearingId) {
 | 
				
			||||||
 | 
					          filteredData = filteredData.filter(item =>
 | 
				
			||||||
 | 
					            item.clearingId.includes(searchParams.clearingId)
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (searchParams.targetId) {
 | 
				
			||||||
 | 
					          filteredData = filteredData.filter(item =>
 | 
				
			||||||
 | 
					            item.targetId.includes(searchParams.targetId)
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.expenseDataList = filteredData;
 | 
				
			||||||
 | 
					        this.expensePageInfo.total = 85; // 模拟总数
 | 
				
			||||||
 | 
					        this.expenseLoading = false;
 | 
				
			||||||
 | 
					      }, 500);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 构建支出搜索参数
 | 
				
			||||||
 | 
					    buildExpenseSearchParams() {
 | 
				
			||||||
 | 
					      const params = {};
 | 
				
			||||||
 | 
					      if (this.expenseSearchForm.settlementId) {
 | 
				
			||||||
 | 
					        params.settlementId = this.expenseSearchForm.settlementId;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      if (this.expenseSearchForm.clearingId) {
 | 
				
			||||||
 | 
					        params.clearingId = this.expenseSearchForm.clearingId;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      if (this.expenseSearchForm.targetId) {
 | 
				
			||||||
 | 
					        params.targetId = this.expenseSearchForm.targetId;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      if (
 | 
				
			||||||
 | 
					        this.expenseSearchForm.dateRange &&
 | 
				
			||||||
 | 
					        this.expenseSearchForm.dateRange.length === 2
 | 
				
			||||||
 | 
					      ) {
 | 
				
			||||||
 | 
					        params.startDate = this.expenseSearchForm.dateRange[0];
 | 
				
			||||||
 | 
					        params.endDate = this.expenseSearchForm.dateRange[1];
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return params;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 支出搜索
 | 
				
			||||||
 | 
					    handleExpenseSearch() {
 | 
				
			||||||
 | 
					      this.expensePageInfo.pageNumber = 1;
 | 
				
			||||||
 | 
					      this.fetchExpenseData();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 支出清除搜索
 | 
				
			||||||
 | 
					    handleExpenseSearchClear() {
 | 
				
			||||||
 | 
					      this.handleExpenseSearch();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 支出重置
 | 
				
			||||||
 | 
					    handleExpenseReset() {
 | 
				
			||||||
 | 
					      this.expenseSearchForm = {
 | 
				
			||||||
 | 
					        settlementId: "",
 | 
				
			||||||
 | 
					        clearingId: "",
 | 
				
			||||||
 | 
					        targetId: "",
 | 
				
			||||||
 | 
					        dateRange: null
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      this.expensePageInfo.pageNumber = 1;
 | 
				
			||||||
 | 
					      this.fetchExpenseData();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 支出分页大小改变
 | 
				
			||||||
 | 
					    handleExpenseSizeChange(val) {
 | 
				
			||||||
 | 
					      this.expensePageInfo.pageSize = val;
 | 
				
			||||||
 | 
					      this.expensePageInfo.pageNumber = 1;
 | 
				
			||||||
 | 
					      this.fetchExpenseData();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 支出当前页改变
 | 
				
			||||||
 | 
					    handleExpenseCurrentChange(val) {
 | 
				
			||||||
 | 
					      this.expensePageInfo.pageNumber = val;
 | 
				
			||||||
 | 
					      this.fetchExpenseData();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  computed: {
 | 
				
			||||||
 | 
					    // 获取当前市场的ID
 | 
				
			||||||
 | 
					    marketId() {
 | 
				
			||||||
 | 
					      return this.$store.state.userData.marketId;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					.page-container {
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 统计数据区域
 | 
				
			||||||
 | 
					.stats-row {
 | 
				
			||||||
 | 
					  margin-bottom: 16px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.stat-card {
 | 
				
			||||||
 | 
					  border-radius: 8px;
 | 
				
			||||||
 | 
					  transition: all 0.3s;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  &:hover {
 | 
				
			||||||
 | 
					    transform: translateY(-2px);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ::v-deep .el-card__body {
 | 
				
			||||||
 | 
					    padding: 24px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.stat-content {
 | 
				
			||||||
 | 
					  text-align: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.stat-label {
 | 
				
			||||||
 | 
					  font-size: 14px;
 | 
				
			||||||
 | 
					  color: #666;
 | 
				
			||||||
 | 
					  margin-bottom: 12px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.stat-value {
 | 
				
			||||||
 | 
					  font-size: 28px;
 | 
				
			||||||
 | 
					  font-weight: 600;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  &.stat-frozen {
 | 
				
			||||||
 | 
					    color: #fa8c16;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  &.stat-available {
 | 
				
			||||||
 | 
					    color: #52c41a;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  &.stat-balance {
 | 
				
			||||||
 | 
					    color: #1890ff;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 标签页卡片
 | 
				
			||||||
 | 
					.tabs-card {
 | 
				
			||||||
 | 
					  border-radius: 8px;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ::v-deep .el-card__body {
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ::v-deep .el-tabs__header {
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 0 24px;
 | 
				
			||||||
 | 
					    background: #fafafa;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ::v-deep .el-tabs__nav-wrap::after {
 | 
				
			||||||
 | 
					    height: 1px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ::v-deep .el-tabs__item {
 | 
				
			||||||
 | 
					    height: 48px;
 | 
				
			||||||
 | 
					    line-height: 48px;
 | 
				
			||||||
 | 
					    font-size: 15px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ::v-deep .el-tabs__content {
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 搜索区域
 | 
				
			||||||
 | 
					.search-section {
 | 
				
			||||||
 | 
					  padding: 24px;
 | 
				
			||||||
 | 
					  border-bottom: 1px solid #f0f0f0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.search-form .el-form-item {
 | 
				
			||||||
 | 
					  margin-bottom: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 表格区域
 | 
				
			||||||
 | 
					::v-deep .el-table {
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 分页
 | 
				
			||||||
 | 
					.pagination-container {
 | 
				
			||||||
 | 
					  padding: 20px 24px;
 | 
				
			||||||
 | 
					  text-align: right;
 | 
				
			||||||
 | 
					  border-top: 1px solid #f0f0f0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style>
 | 
				
			||||||
 | 
					.search-form .el-form-item__label {
 | 
				
			||||||
 | 
					  padding-bottom: 0px !important;
 | 
				
			||||||
 | 
					  font-size: 14px;
 | 
				
			||||||
 | 
					  line-height: 32px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,594 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div class="page-container">
 | 
				
			||||||
 | 
					    <!-- 资金概览卡片 -->
 | 
				
			||||||
 | 
					    <el-row :gutter="16" class="info-cards-row">
 | 
				
			||||||
 | 
					      <el-col :span="8">
 | 
				
			||||||
 | 
					        <el-card class="info-card info-card-purple" shadow="hover">
 | 
				
			||||||
 | 
					          <div class="info-card-content">
 | 
				
			||||||
 | 
					            <div class="info-card-label">当前冻结金额</div>
 | 
				
			||||||
 | 
					            <div class="info-card-value">
 | 
				
			||||||
 | 
					              <span>{{ accountInfo.totalAmount.toFixed(2) }}</span>
 | 
				
			||||||
 | 
					              <span class="info-card-unit">元</span>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </el-card>
 | 
				
			||||||
 | 
					      </el-col>
 | 
				
			||||||
 | 
					      <el-col :span="8">
 | 
				
			||||||
 | 
					        <el-card class="info-card info-card-pink" shadow="hover">
 | 
				
			||||||
 | 
					          <div class="info-card-content">
 | 
				
			||||||
 | 
					            <div class="info-card-label">当前可用金额</div>
 | 
				
			||||||
 | 
					            <div class="info-card-value">
 | 
				
			||||||
 | 
					              <span>{{ accountInfo.availableAmount.toFixed(2) }}</span>
 | 
				
			||||||
 | 
					              <span class="info-card-unit">元</span>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </el-card>
 | 
				
			||||||
 | 
					      </el-col>
 | 
				
			||||||
 | 
					      <el-col :span="8">
 | 
				
			||||||
 | 
					        <el-card class="info-card info-card-blue" shadow="hover">
 | 
				
			||||||
 | 
					          <div class="info-card-content">
 | 
				
			||||||
 | 
					            <div class="info-card-label">当前钱包余额</div>
 | 
				
			||||||
 | 
					            <div class="info-card-value">
 | 
				
			||||||
 | 
					              <span>{{ accountInfo.walletBalance.toFixed(2) }}</span>
 | 
				
			||||||
 | 
					              <span class="info-card-unit">元</span>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </el-card>
 | 
				
			||||||
 | 
					      </el-col>
 | 
				
			||||||
 | 
					    </el-row>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- 搜索区域 -->
 | 
				
			||||||
 | 
					    <el-card class="search-card" shadow="never">
 | 
				
			||||||
 | 
					      <el-form
 | 
				
			||||||
 | 
					        :model="searchForm"
 | 
				
			||||||
 | 
					        :inline="true"
 | 
				
			||||||
 | 
					        ref="searchForm"
 | 
				
			||||||
 | 
					        class="search-form"
 | 
				
			||||||
 | 
					        size="small"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <el-form-item label="待结算明细ID" prop="settlementId">
 | 
				
			||||||
 | 
					          <el-input
 | 
				
			||||||
 | 
					            v-model="searchForm.settlementId"
 | 
				
			||||||
 | 
					            placeholder="请输入待结算明细ID"
 | 
				
			||||||
 | 
					            clearable
 | 
				
			||||||
 | 
					            @clear="handleSearchClear"
 | 
				
			||||||
 | 
					            style="width: 200px"
 | 
				
			||||||
 | 
					          />
 | 
				
			||||||
 | 
					        </el-form-item>
 | 
				
			||||||
 | 
					        <el-form-item label="关联清算明细ID" prop="clearingId">
 | 
				
			||||||
 | 
					          <el-input
 | 
				
			||||||
 | 
					            v-model="searchForm.clearingId"
 | 
				
			||||||
 | 
					            placeholder="请输入关联清算明细ID"
 | 
				
			||||||
 | 
					            clearable
 | 
				
			||||||
 | 
					            @clear="handleSearchClear"
 | 
				
			||||||
 | 
					            style="width: 200px"
 | 
				
			||||||
 | 
					          />
 | 
				
			||||||
 | 
					        </el-form-item>
 | 
				
			||||||
 | 
					        <el-form-item label="结算目标对象ID" prop="targetId">
 | 
				
			||||||
 | 
					          <el-input
 | 
				
			||||||
 | 
					            v-model="searchForm.targetId"
 | 
				
			||||||
 | 
					            placeholder="请输入结算目标对象ID"
 | 
				
			||||||
 | 
					            clearable
 | 
				
			||||||
 | 
					            @clear="handleSearchClear"
 | 
				
			||||||
 | 
					            style="width: 200px"
 | 
				
			||||||
 | 
					          />
 | 
				
			||||||
 | 
					        </el-form-item>
 | 
				
			||||||
 | 
					        <el-form-item>
 | 
				
			||||||
 | 
					          <el-button
 | 
				
			||||||
 | 
					            type="primary"
 | 
				
			||||||
 | 
					            @click="handleSearch"
 | 
				
			||||||
 | 
					            icon="el-icon-search"
 | 
				
			||||||
 | 
					            size="small"
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
 | 
					            查询
 | 
				
			||||||
 | 
					          </el-button>
 | 
				
			||||||
 | 
					          <el-button @click="handleReset" icon="el-icon-refresh" size="small">
 | 
				
			||||||
 | 
					            重置
 | 
				
			||||||
 | 
					          </el-button>
 | 
				
			||||||
 | 
					          <el-button
 | 
				
			||||||
 | 
					            @click="handleRefreshAccount"
 | 
				
			||||||
 | 
					            icon="el-icon-refresh-right"
 | 
				
			||||||
 | 
					            size="small"
 | 
				
			||||||
 | 
					            :loading="refreshLoading"
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
 | 
					            刷新账户信息
 | 
				
			||||||
 | 
					          </el-button>
 | 
				
			||||||
 | 
					        </el-form-item>
 | 
				
			||||||
 | 
					      </el-form>
 | 
				
			||||||
 | 
					    </el-card>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- 表格区域 -->
 | 
				
			||||||
 | 
					    <div class="table-container">
 | 
				
			||||||
 | 
					      <el-table
 | 
				
			||||||
 | 
					        ref="multipleTable"
 | 
				
			||||||
 | 
					        :data="dataList"
 | 
				
			||||||
 | 
					        border
 | 
				
			||||||
 | 
					        style="width: 100%"
 | 
				
			||||||
 | 
					        v-loading="loading"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <el-table-column type="index" width="60" align="center" label="序号" />
 | 
				
			||||||
 | 
					        <el-table-column
 | 
				
			||||||
 | 
					          prop="id"
 | 
				
			||||||
 | 
					          label="待结算明细ID"
 | 
				
			||||||
 | 
					          align="center"
 | 
				
			||||||
 | 
					          min-width="140"
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					        <el-table-column
 | 
				
			||||||
 | 
					          prop="clearingId"
 | 
				
			||||||
 | 
					          label="关联清算明细ID"
 | 
				
			||||||
 | 
					          align="center"
 | 
				
			||||||
 | 
					          min-width="150"
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					        <el-table-column
 | 
				
			||||||
 | 
					          prop="targetId"
 | 
				
			||||||
 | 
					          label="结算目标对象ID"
 | 
				
			||||||
 | 
					          align="center"
 | 
				
			||||||
 | 
					          min-width="140"
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					        <el-table-column
 | 
				
			||||||
 | 
					          prop="targetRole"
 | 
				
			||||||
 | 
					          label="结算目标角色"
 | 
				
			||||||
 | 
					          align="center"
 | 
				
			||||||
 | 
					          width="120"
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					        <el-table-column
 | 
				
			||||||
 | 
					          prop="amount"
 | 
				
			||||||
 | 
					          label="结算金额(元)"
 | 
				
			||||||
 | 
					          align="center"
 | 
				
			||||||
 | 
					          width="130"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          <template slot-scope="scope">
 | 
				
			||||||
 | 
					            <span style="color: #f56c6c; font-weight: 600">
 | 
				
			||||||
 | 
					              ¥{{ scope.row.amount.toFixed(2) }}
 | 
				
			||||||
 | 
					            </span>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </el-table-column>
 | 
				
			||||||
 | 
					        <el-table-column
 | 
				
			||||||
 | 
					          prop="clearingTime"
 | 
				
			||||||
 | 
					          label="清算时间"
 | 
				
			||||||
 | 
					          align="center"
 | 
				
			||||||
 | 
					          min-width="160"
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					        <el-table-column label="结算状态" align="center" width="100">
 | 
				
			||||||
 | 
					          <template slot-scope="scope">
 | 
				
			||||||
 | 
					            <el-tag
 | 
				
			||||||
 | 
					              v-if="scope.row.status === 'pending'"
 | 
				
			||||||
 | 
					              type="warning"
 | 
				
			||||||
 | 
					              size="small"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              未结算
 | 
				
			||||||
 | 
					            </el-tag>
 | 
				
			||||||
 | 
					            <el-tag
 | 
				
			||||||
 | 
					              v-else-if="scope.row.status === 'processing'"
 | 
				
			||||||
 | 
					              type="primary"
 | 
				
			||||||
 | 
					              size="small"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              执行中
 | 
				
			||||||
 | 
					            </el-tag>
 | 
				
			||||||
 | 
					            <el-tag v-else type="success" size="small">已完成</el-tag>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </el-table-column>
 | 
				
			||||||
 | 
					        <el-table-column label="操作" fixed="right" align="center" width="150">
 | 
				
			||||||
 | 
					          <template slot-scope="scope">
 | 
				
			||||||
 | 
					            <el-button
 | 
				
			||||||
 | 
					              v-if="scope.row.status === 'pending'"
 | 
				
			||||||
 | 
					              size="mini"
 | 
				
			||||||
 | 
					              type="primary"
 | 
				
			||||||
 | 
					              @click="handleSettlement(scope.row, false)"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              开始结算
 | 
				
			||||||
 | 
					            </el-button>
 | 
				
			||||||
 | 
					            <el-button
 | 
				
			||||||
 | 
					              v-else-if="scope.row.status === 'processing'"
 | 
				
			||||||
 | 
					              size="mini"
 | 
				
			||||||
 | 
					              type="warning"
 | 
				
			||||||
 | 
					              @click="handleSettlement(scope.row, true)"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              重新执行
 | 
				
			||||||
 | 
					            </el-button>
 | 
				
			||||||
 | 
					            <span v-else style="color: #909399">-</span>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </el-table-column>
 | 
				
			||||||
 | 
					      </el-table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <el-pagination
 | 
				
			||||||
 | 
					        @size-change="handleSizeChange"
 | 
				
			||||||
 | 
					        @current-change="handleCurrentChange"
 | 
				
			||||||
 | 
					        :current-page="pageInfo.pageNumber"
 | 
				
			||||||
 | 
					        :page-sizes="[10, 20, 50, 100]"
 | 
				
			||||||
 | 
					        :page-size="pageInfo.pageSize"
 | 
				
			||||||
 | 
					        layout="total, sizes, prev, pager, next, jumper"
 | 
				
			||||||
 | 
					        :total="pageInfo.total"
 | 
				
			||||||
 | 
					        class="pagination-container"
 | 
				
			||||||
 | 
					      />
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "UnsettleManagement",
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      // 账户信息
 | 
				
			||||||
 | 
					      accountInfo: {
 | 
				
			||||||
 | 
					        totalAmount: 0,
 | 
				
			||||||
 | 
					        availableAmount: 0,
 | 
				
			||||||
 | 
					        walletBalance: 0
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      // 搜索表单
 | 
				
			||||||
 | 
					      searchForm: {
 | 
				
			||||||
 | 
					        settlementId: "",
 | 
				
			||||||
 | 
					        clearingId: "",
 | 
				
			||||||
 | 
					        targetId: ""
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      // 表格数据
 | 
				
			||||||
 | 
					      dataList: [],
 | 
				
			||||||
 | 
					      // 分页信息
 | 
				
			||||||
 | 
					      pageInfo: {
 | 
				
			||||||
 | 
					        pageNumber: 1,
 | 
				
			||||||
 | 
					        pageSize: 10,
 | 
				
			||||||
 | 
					        total: 0
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      // 加载状态
 | 
				
			||||||
 | 
					      loading: false,
 | 
				
			||||||
 | 
					      refreshLoading: false
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  created() {
 | 
				
			||||||
 | 
					    this.fetchAccountInfo();
 | 
				
			||||||
 | 
					    this.fetchData();
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    // 获取账户信息
 | 
				
			||||||
 | 
					    async fetchAccountInfo() {
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        // TODO: 调用实际的API接口获取账户信息
 | 
				
			||||||
 | 
					        // const res = await this.$api.mer_admin.getAccountInfo();
 | 
				
			||||||
 | 
					        // this.accountInfo = res.data.data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 模拟数据
 | 
				
			||||||
 | 
					        this.accountInfo = {
 | 
				
			||||||
 | 
					          totalAmount: 8770.5,
 | 
				
			||||||
 | 
					          availableAmount: 6420.25,
 | 
				
			||||||
 | 
					          walletBalance: 15230.75
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					      } catch (error) {
 | 
				
			||||||
 | 
					        console.error("获取账户信息失败:", error);
 | 
				
			||||||
 | 
					        this.$message.error("获取账户信息失败");
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 刷新账户信息
 | 
				
			||||||
 | 
					    async handleRefreshAccount() {
 | 
				
			||||||
 | 
					      this.refreshLoading = true;
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        await this.fetchAccountInfo();
 | 
				
			||||||
 | 
					        this.$message.success("刷新成功");
 | 
				
			||||||
 | 
					      } catch (error) {
 | 
				
			||||||
 | 
					        console.error("刷新失败:", error);
 | 
				
			||||||
 | 
					      } finally {
 | 
				
			||||||
 | 
					        this.refreshLoading = false;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 获取待结算列表数据
 | 
				
			||||||
 | 
					    fetchData() {
 | 
				
			||||||
 | 
					      this.loading = true;
 | 
				
			||||||
 | 
					      const marketId = this.marketId;
 | 
				
			||||||
 | 
					      if (!marketId) {
 | 
				
			||||||
 | 
					        this.$message.error("获取市场ID失败,请重新登录");
 | 
				
			||||||
 | 
					        this.$router.push("/login");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const params = {
 | 
				
			||||||
 | 
					        pageNumber: this.pageInfo.pageNumber,
 | 
				
			||||||
 | 
					        pageSize: this.pageInfo.pageSize,
 | 
				
			||||||
 | 
					        marketId,
 | 
				
			||||||
 | 
					        ...this.buildSearchParams()
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // TODO: 调用实际的API接口获取待结算列表
 | 
				
			||||||
 | 
					      // this.$api.mer_admin
 | 
				
			||||||
 | 
					      //   .getUnsettleList(params)
 | 
				
			||||||
 | 
					      //   .then(res => {
 | 
				
			||||||
 | 
					      //     if (res.data && res.data.data) {
 | 
				
			||||||
 | 
					      //       this.dataList = res.data.data.data || [];
 | 
				
			||||||
 | 
					      //       this.pageInfo.total = Number(res.data.data.total) || 0;
 | 
				
			||||||
 | 
					      //     }
 | 
				
			||||||
 | 
					      //   })
 | 
				
			||||||
 | 
					      //   .catch(err => {
 | 
				
			||||||
 | 
					      //     console.error("获取数据失败:", err);
 | 
				
			||||||
 | 
					      //     this.$message.error("获取数据失败");
 | 
				
			||||||
 | 
					      //   })
 | 
				
			||||||
 | 
					      //   .finally(() => {
 | 
				
			||||||
 | 
					      //     this.loading = false;
 | 
				
			||||||
 | 
					      //   });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // 模拟数据
 | 
				
			||||||
 | 
					      setTimeout(() => {
 | 
				
			||||||
 | 
					        const mockData = [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            id: "SET2024010001",
 | 
				
			||||||
 | 
					            clearingId: "CLR2024010001",
 | 
				
			||||||
 | 
					            targetId: "TGT001",
 | 
				
			||||||
 | 
					            targetRole: "商家",
 | 
				
			||||||
 | 
					            amount: 1580.5,
 | 
				
			||||||
 | 
					            clearingTime: "2024-01-15 14:30:25",
 | 
				
			||||||
 | 
					            status: "pending"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            id: "SET2024010002",
 | 
				
			||||||
 | 
					            clearingId: "CLR2024010002",
 | 
				
			||||||
 | 
					            targetId: "TGT002",
 | 
				
			||||||
 | 
					            targetRole: "供应商",
 | 
				
			||||||
 | 
					            amount: 2350.0,
 | 
				
			||||||
 | 
					            clearingTime: "2024-01-15 15:20:10",
 | 
				
			||||||
 | 
					            status: "processing"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            id: "SET2024010003",
 | 
				
			||||||
 | 
					            clearingId: "CLR2024010003",
 | 
				
			||||||
 | 
					            targetId: "TGT003",
 | 
				
			||||||
 | 
					            targetRole: "平台",
 | 
				
			||||||
 | 
					            amount: 890.75,
 | 
				
			||||||
 | 
					            clearingTime: "2024-01-15 16:45:30",
 | 
				
			||||||
 | 
					            status: "completed"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            id: "SET2024010004",
 | 
				
			||||||
 | 
					            clearingId: "CLR2024010004",
 | 
				
			||||||
 | 
					            targetId: "TGT004",
 | 
				
			||||||
 | 
					            targetRole: "商家",
 | 
				
			||||||
 | 
					            amount: 3200.0,
 | 
				
			||||||
 | 
					            clearingTime: "2024-01-16 09:15:40",
 | 
				
			||||||
 | 
					            status: "pending"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            id: "SET2024010005",
 | 
				
			||||||
 | 
					            clearingId: "CLR2024010005",
 | 
				
			||||||
 | 
					            targetId: "TGT005",
 | 
				
			||||||
 | 
					            targetRole: "供应商",
 | 
				
			||||||
 | 
					            amount: 1750.25,
 | 
				
			||||||
 | 
					            clearingTime: "2024-01-16 10:30:55",
 | 
				
			||||||
 | 
					            status: "processing"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 应用搜索过滤
 | 
				
			||||||
 | 
					        let filteredData = mockData;
 | 
				
			||||||
 | 
					        const searchParams = this.buildSearchParams();
 | 
				
			||||||
 | 
					        if (searchParams.settlementId) {
 | 
				
			||||||
 | 
					          filteredData = filteredData.filter(item =>
 | 
				
			||||||
 | 
					            item.id.includes(searchParams.settlementId)
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (searchParams.clearingId) {
 | 
				
			||||||
 | 
					          filteredData = filteredData.filter(item =>
 | 
				
			||||||
 | 
					            item.clearingId.includes(searchParams.clearingId)
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (searchParams.targetId) {
 | 
				
			||||||
 | 
					          filteredData = filteredData.filter(item =>
 | 
				
			||||||
 | 
					            item.targetId.includes(searchParams.targetId)
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.dataList = filteredData;
 | 
				
			||||||
 | 
					        this.pageInfo.total = filteredData.length;
 | 
				
			||||||
 | 
					        this.loading = false;
 | 
				
			||||||
 | 
					      }, 500);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 构建搜索参数
 | 
				
			||||||
 | 
					    buildSearchParams() {
 | 
				
			||||||
 | 
					      const params = {};
 | 
				
			||||||
 | 
					      if (this.searchForm.settlementId) {
 | 
				
			||||||
 | 
					        params.settlementId = this.searchForm.settlementId;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      if (this.searchForm.clearingId) {
 | 
				
			||||||
 | 
					        params.clearingId = this.searchForm.clearingId;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      if (this.searchForm.targetId) {
 | 
				
			||||||
 | 
					        params.targetId = this.searchForm.targetId;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return params;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 搜索
 | 
				
			||||||
 | 
					    handleSearch() {
 | 
				
			||||||
 | 
					      this.pageInfo.pageNumber = 1;
 | 
				
			||||||
 | 
					      this.fetchData();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 清除搜索
 | 
				
			||||||
 | 
					    handleSearchClear() {
 | 
				
			||||||
 | 
					      this.handleSearch();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 重置
 | 
				
			||||||
 | 
					    handleReset() {
 | 
				
			||||||
 | 
					      this.searchForm = {
 | 
				
			||||||
 | 
					        settlementId: "",
 | 
				
			||||||
 | 
					        clearingId: "",
 | 
				
			||||||
 | 
					        targetId: ""
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      this.pageInfo.pageNumber = 1;
 | 
				
			||||||
 | 
					      this.fetchData();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 分页大小改变
 | 
				
			||||||
 | 
					    handleSizeChange(val) {
 | 
				
			||||||
 | 
					      this.pageInfo.pageSize = val;
 | 
				
			||||||
 | 
					      this.pageInfo.pageNumber = 1;
 | 
				
			||||||
 | 
					      this.fetchData();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 当前页改变
 | 
				
			||||||
 | 
					    handleCurrentChange(val) {
 | 
				
			||||||
 | 
					      this.pageInfo.pageNumber = val;
 | 
				
			||||||
 | 
					      this.fetchData();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 处理结算操作
 | 
				
			||||||
 | 
					    handleSettlement(row, isRetry) {
 | 
				
			||||||
 | 
					      const action = isRetry ? "重新执行" : "开始结算";
 | 
				
			||||||
 | 
					      const message = `确认${action}该笔待结算明细吗?\n待结算明细ID: ${
 | 
				
			||||||
 | 
					        row.id
 | 
				
			||||||
 | 
					      }\n结算金额: ¥${row.amount.toFixed(2)}`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      this.$confirm(message, "提示", {
 | 
				
			||||||
 | 
					        confirmButtonText: "确定",
 | 
				
			||||||
 | 
					        cancelButtonText: "取消",
 | 
				
			||||||
 | 
					        type: "warning"
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					        .then(() => {
 | 
				
			||||||
 | 
					          this.executeSettlement(row, isRetry);
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .catch(() => {
 | 
				
			||||||
 | 
					          this.$message.info("已取消操作");
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 执行结算
 | 
				
			||||||
 | 
					    async executeSettlement(row, isRetry) {
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        this.loading = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // TODO: 调用实际的API接口执行结算
 | 
				
			||||||
 | 
					        // const params = {
 | 
				
			||||||
 | 
					        //   settlementId: row.id,
 | 
				
			||||||
 | 
					        //   isRetry: isRetry
 | 
				
			||||||
 | 
					        // };
 | 
				
			||||||
 | 
					        // await this.$api.mer_admin.executeSettlement(params);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 模拟API调用
 | 
				
			||||||
 | 
					        await new Promise(resolve => setTimeout(resolve, 1000));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 更新状态为执行中
 | 
				
			||||||
 | 
					        row.status = "processing";
 | 
				
			||||||
 | 
					        this.$message.success("结算任务已提交");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 模拟结算完成
 | 
				
			||||||
 | 
					        setTimeout(() => {
 | 
				
			||||||
 | 
					          row.status = "completed";
 | 
				
			||||||
 | 
					          this.$message.success("结算完成");
 | 
				
			||||||
 | 
					          this.fetchAccountInfo(); // 刷新账户信息
 | 
				
			||||||
 | 
					        }, 2000);
 | 
				
			||||||
 | 
					      } catch (error) {
 | 
				
			||||||
 | 
					        console.error("结算失败:", error);
 | 
				
			||||||
 | 
					        this.$message.error("结算失败,请重试");
 | 
				
			||||||
 | 
					      } finally {
 | 
				
			||||||
 | 
					        this.loading = false;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  computed: {
 | 
				
			||||||
 | 
					    // 获取当前市场的ID
 | 
				
			||||||
 | 
					    marketId() {
 | 
				
			||||||
 | 
					      return this.$store.state.userData.marketId;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					.page-container {
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 资金概览卡片
 | 
				
			||||||
 | 
					.info-cards-row {
 | 
				
			||||||
 | 
					  margin-bottom: 16px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.info-card {
 | 
				
			||||||
 | 
					  border-radius: 8px;
 | 
				
			||||||
 | 
					  overflow: hidden;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  &::before {
 | 
				
			||||||
 | 
					    content: "";
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: -50%;
 | 
				
			||||||
 | 
					    right: -20%;
 | 
				
			||||||
 | 
					    width: 200px;
 | 
				
			||||||
 | 
					    height: 200px;
 | 
				
			||||||
 | 
					    background: rgba(255, 255, 255, 0.1);
 | 
				
			||||||
 | 
					    border-radius: 50%;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  &.info-card-purple {
 | 
				
			||||||
 | 
					    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  &.info-card-pink {
 | 
				
			||||||
 | 
					    background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  &.info-card-blue {
 | 
				
			||||||
 | 
					    background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ::v-deep .el-card__body {
 | 
				
			||||||
 | 
					    padding: 20px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.info-card-content {
 | 
				
			||||||
 | 
					  color: white;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  z-index: 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.info-card-label {
 | 
				
			||||||
 | 
					  font-size: 14px;
 | 
				
			||||||
 | 
					  opacity: 0.9;
 | 
				
			||||||
 | 
					  margin-bottom: 8px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.info-card-value {
 | 
				
			||||||
 | 
					  font-size: 28px;
 | 
				
			||||||
 | 
					  font-weight: 700;
 | 
				
			||||||
 | 
					  line-height: 1.2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  span {
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.info-card-unit {
 | 
				
			||||||
 | 
					  font-size: 16px;
 | 
				
			||||||
 | 
					  margin-left: 4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 搜索卡片
 | 
				
			||||||
 | 
					.search-card {
 | 
				
			||||||
 | 
					  margin-bottom: 16px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.search-form .el-form-item {
 | 
				
			||||||
 | 
					  margin-bottom: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 表格容器
 | 
				
			||||||
 | 
					.table-container {
 | 
				
			||||||
 | 
					  background: white;
 | 
				
			||||||
 | 
					  padding: 20px;
 | 
				
			||||||
 | 
					  border-radius: 8px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.pagination-container {
 | 
				
			||||||
 | 
					  margin-top: 20px;
 | 
				
			||||||
 | 
					  text-align: right;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style>
 | 
				
			||||||
 | 
					.search-form .el-form-item__label {
 | 
				
			||||||
 | 
					  padding-bottom: 0px !important;
 | 
				
			||||||
 | 
					  font-size: 14px;
 | 
				
			||||||
 | 
					  line-height: 32px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,738 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div class="page-container">
 | 
				
			||||||
 | 
					    <!-- 统计数据区域 -->
 | 
				
			||||||
 | 
					    <el-row :gutter="16" class="stats-row">
 | 
				
			||||||
 | 
					      <el-col :span="12">
 | 
				
			||||||
 | 
					        <el-card class="stat-card stat-card-available" shadow="hover">
 | 
				
			||||||
 | 
					          <div class="stat-content">
 | 
				
			||||||
 | 
					            <div class="stat-label">可用金额</div>
 | 
				
			||||||
 | 
					            <div class="stat-value">
 | 
				
			||||||
 | 
					              ¥ {{ walletInfo.availableAmount.toFixed(2) }}
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </el-card>
 | 
				
			||||||
 | 
					      </el-col>
 | 
				
			||||||
 | 
					      <el-col :span="12">
 | 
				
			||||||
 | 
					        <el-card class="stat-card stat-card-balance" shadow="hover">
 | 
				
			||||||
 | 
					          <div class="stat-content">
 | 
				
			||||||
 | 
					            <div class="stat-label">钱包余额</div>
 | 
				
			||||||
 | 
					            <div class="stat-value">
 | 
				
			||||||
 | 
					              ¥ {{ walletInfo.walletBalance.toFixed(2) }}
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </el-card>
 | 
				
			||||||
 | 
					      </el-col>
 | 
				
			||||||
 | 
					    </el-row>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- 操作按钮区域 -->
 | 
				
			||||||
 | 
					    <el-card class="action-card" shadow="never">
 | 
				
			||||||
 | 
					      <div class="button-group">
 | 
				
			||||||
 | 
					        <el-button type="primary" size="medium" @click="openDepositDialog">
 | 
				
			||||||
 | 
					          提取可用金额到钱包余额
 | 
				
			||||||
 | 
					        </el-button>
 | 
				
			||||||
 | 
					        <el-button size="medium" @click="openWithdrawDialog">
 | 
				
			||||||
 | 
					          提现钱包金额到银行卡
 | 
				
			||||||
 | 
					        </el-button>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </el-card>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- 标签页区域 -->
 | 
				
			||||||
 | 
					    <el-card class="tabs-card" shadow="never">
 | 
				
			||||||
 | 
					      <el-tabs v-model="activeTab" @tab-click="handleTabClick">
 | 
				
			||||||
 | 
					        <!-- 提取到钱包Tab -->
 | 
				
			||||||
 | 
					        <el-tab-pane label="提取到钱包" name="deposit">
 | 
				
			||||||
 | 
					          <el-table
 | 
				
			||||||
 | 
					            ref="depositTable"
 | 
				
			||||||
 | 
					            :data="depositDataList"
 | 
				
			||||||
 | 
					            border
 | 
				
			||||||
 | 
					            style="width: 100%"
 | 
				
			||||||
 | 
					            v-loading="depositLoading"
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              type="index"
 | 
				
			||||||
 | 
					              width="60"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              label="序号"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="amount"
 | 
				
			||||||
 | 
					              label="操作金额"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              width="150"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <template slot-scope="scope">
 | 
				
			||||||
 | 
					                <span style="color: #52c41a; font-weight: 600">
 | 
				
			||||||
 | 
					                  ¥{{ scope.row.amount.toFixed(2) }}
 | 
				
			||||||
 | 
					                </span>
 | 
				
			||||||
 | 
					              </template>
 | 
				
			||||||
 | 
					            </el-table-column>
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="afterAvailableAmount"
 | 
				
			||||||
 | 
					              label="提取后可用金额余额"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              width="180"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <template slot-scope="scope">
 | 
				
			||||||
 | 
					                <span style="font-weight: 600">
 | 
				
			||||||
 | 
					                  ¥{{ scope.row.afterAvailableAmount.toFixed(2) }}
 | 
				
			||||||
 | 
					                </span>
 | 
				
			||||||
 | 
					              </template>
 | 
				
			||||||
 | 
					            </el-table-column>
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="afterWalletBalance"
 | 
				
			||||||
 | 
					              label="提取后钱包余额"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              width="160"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <template slot-scope="scope">
 | 
				
			||||||
 | 
					                <span style="font-weight: 600">
 | 
				
			||||||
 | 
					                  ¥{{ scope.row.afterWalletBalance.toFixed(2) }}
 | 
				
			||||||
 | 
					                </span>
 | 
				
			||||||
 | 
					              </template>
 | 
				
			||||||
 | 
					            </el-table-column>
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="time"
 | 
				
			||||||
 | 
					              label="操作时间"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              min-width="160"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					          </el-table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          <!-- 分页 -->
 | 
				
			||||||
 | 
					          <el-pagination
 | 
				
			||||||
 | 
					            @size-change="handleDepositSizeChange"
 | 
				
			||||||
 | 
					            @current-change="handleDepositCurrentChange"
 | 
				
			||||||
 | 
					            :current-page="depositPageInfo.pageNumber"
 | 
				
			||||||
 | 
					            :page-sizes="[10, 20, 50, 100]"
 | 
				
			||||||
 | 
					            :page-size="depositPageInfo.pageSize"
 | 
				
			||||||
 | 
					            layout="total, sizes, prev, pager, next, jumper"
 | 
				
			||||||
 | 
					            :total="depositPageInfo.total"
 | 
				
			||||||
 | 
					            class="pagination-container"
 | 
				
			||||||
 | 
					          />
 | 
				
			||||||
 | 
					        </el-tab-pane>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <!-- 提现到银行卡Tab -->
 | 
				
			||||||
 | 
					        <el-tab-pane label="提现到银行卡" name="withdraw">
 | 
				
			||||||
 | 
					          <el-table
 | 
				
			||||||
 | 
					            ref="withdrawTable"
 | 
				
			||||||
 | 
					            :data="withdrawDataList"
 | 
				
			||||||
 | 
					            border
 | 
				
			||||||
 | 
					            style="width: 100%"
 | 
				
			||||||
 | 
					            v-loading="withdrawLoading"
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              type="index"
 | 
				
			||||||
 | 
					              width="60"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              label="序号"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="amount"
 | 
				
			||||||
 | 
					              label="操作金额"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              width="150"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <template slot-scope="scope">
 | 
				
			||||||
 | 
					                <span style="color: #ff4d4f; font-weight: 600">
 | 
				
			||||||
 | 
					                  ¥{{ scope.row.amount.toFixed(2) }}
 | 
				
			||||||
 | 
					                </span>
 | 
				
			||||||
 | 
					              </template>
 | 
				
			||||||
 | 
					            </el-table-column>
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="afterWalletBalance"
 | 
				
			||||||
 | 
					              label="提现后钱包余额"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              width="160"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <template slot-scope="scope">
 | 
				
			||||||
 | 
					                <span style="font-weight: 600">
 | 
				
			||||||
 | 
					                  ¥{{ scope.row.afterWalletBalance.toFixed(2) }}
 | 
				
			||||||
 | 
					                </span>
 | 
				
			||||||
 | 
					              </template>
 | 
				
			||||||
 | 
					            </el-table-column>
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              prop="time"
 | 
				
			||||||
 | 
					              label="操作时间"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              min-width="160"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					          </el-table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          <!-- 分页 -->
 | 
				
			||||||
 | 
					          <el-pagination
 | 
				
			||||||
 | 
					            @size-change="handleWithdrawSizeChange"
 | 
				
			||||||
 | 
					            @current-change="handleWithdrawCurrentChange"
 | 
				
			||||||
 | 
					            :current-page="withdrawPageInfo.pageNumber"
 | 
				
			||||||
 | 
					            :page-sizes="[10, 20, 50, 100]"
 | 
				
			||||||
 | 
					            :page-size="withdrawPageInfo.pageSize"
 | 
				
			||||||
 | 
					            layout="total, sizes, prev, pager, next, jumper"
 | 
				
			||||||
 | 
					            :total="withdrawPageInfo.total"
 | 
				
			||||||
 | 
					            class="pagination-container"
 | 
				
			||||||
 | 
					          />
 | 
				
			||||||
 | 
					        </el-tab-pane>
 | 
				
			||||||
 | 
					      </el-tabs>
 | 
				
			||||||
 | 
					    </el-card>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- 提取到钱包弹窗 -->
 | 
				
			||||||
 | 
					    <el-dialog
 | 
				
			||||||
 | 
					      title="提取可用金额到钱包余额"
 | 
				
			||||||
 | 
					      :visible.sync="depositDialogVisible"
 | 
				
			||||||
 | 
					      width="500px"
 | 
				
			||||||
 | 
					      :close-on-click-modal="false"
 | 
				
			||||||
 | 
					    >
 | 
				
			||||||
 | 
					      <el-form
 | 
				
			||||||
 | 
					        ref="depositForm"
 | 
				
			||||||
 | 
					        :model="depositForm"
 | 
				
			||||||
 | 
					        :rules="depositRules"
 | 
				
			||||||
 | 
					        label-width="100px"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <el-form-item label="提取金额" prop="amount">
 | 
				
			||||||
 | 
					          <el-input-number
 | 
				
			||||||
 | 
					            v-model="depositForm.amount"
 | 
				
			||||||
 | 
					            :min="0.01"
 | 
				
			||||||
 | 
					            :max="walletInfo.availableAmount"
 | 
				
			||||||
 | 
					            :precision="2"
 | 
				
			||||||
 | 
					            :step="0.01"
 | 
				
			||||||
 | 
					            controls-position="right"
 | 
				
			||||||
 | 
					            style="width: 100%"
 | 
				
			||||||
 | 
					            placeholder="请输入提取金额"
 | 
				
			||||||
 | 
					          />
 | 
				
			||||||
 | 
					          <div style="margin-top: 8px; font-size: 12px; color: #999">
 | 
				
			||||||
 | 
					            当前可用金额:¥{{ walletInfo.availableAmount.toFixed(2) }}
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </el-form-item>
 | 
				
			||||||
 | 
					      </el-form>
 | 
				
			||||||
 | 
					      <div slot="footer" class="dialog-footer">
 | 
				
			||||||
 | 
					        <el-button @click="depositDialogVisible = false">取消</el-button>
 | 
				
			||||||
 | 
					        <el-button
 | 
				
			||||||
 | 
					          type="primary"
 | 
				
			||||||
 | 
					          @click="handleDepositSubmit"
 | 
				
			||||||
 | 
					          :loading="depositSubmitLoading"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          确定
 | 
				
			||||||
 | 
					        </el-button>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </el-dialog>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- 提现到银行卡弹窗 -->
 | 
				
			||||||
 | 
					    <el-dialog
 | 
				
			||||||
 | 
					      title="提现钱包金额到银行卡"
 | 
				
			||||||
 | 
					      :visible.sync="withdrawDialogVisible"
 | 
				
			||||||
 | 
					      width="500px"
 | 
				
			||||||
 | 
					      :close-on-click-modal="false"
 | 
				
			||||||
 | 
					    >
 | 
				
			||||||
 | 
					      <el-form
 | 
				
			||||||
 | 
					        ref="withdrawForm"
 | 
				
			||||||
 | 
					        :model="withdrawForm"
 | 
				
			||||||
 | 
					        :rules="withdrawRules"
 | 
				
			||||||
 | 
					        label-width="100px"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <el-form-item label="提现金额" prop="amount">
 | 
				
			||||||
 | 
					          <el-input-number
 | 
				
			||||||
 | 
					            v-model="withdrawForm.amount"
 | 
				
			||||||
 | 
					            :min="0.01"
 | 
				
			||||||
 | 
					            :max="walletInfo.walletBalance"
 | 
				
			||||||
 | 
					            :precision="2"
 | 
				
			||||||
 | 
					            :step="0.01"
 | 
				
			||||||
 | 
					            controls-position="right"
 | 
				
			||||||
 | 
					            style="width: 100%"
 | 
				
			||||||
 | 
					            placeholder="请输入提现金额"
 | 
				
			||||||
 | 
					          />
 | 
				
			||||||
 | 
					          <div style="margin-top: 8px; font-size: 12px; color: #999">
 | 
				
			||||||
 | 
					            当前钱包余额:¥{{ walletInfo.walletBalance.toFixed(2) }}
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </el-form-item>
 | 
				
			||||||
 | 
					      </el-form>
 | 
				
			||||||
 | 
					      <div slot="footer" class="dialog-footer">
 | 
				
			||||||
 | 
					        <el-button @click="withdrawDialogVisible = false">取消</el-button>
 | 
				
			||||||
 | 
					        <el-button
 | 
				
			||||||
 | 
					          type="primary"
 | 
				
			||||||
 | 
					          @click="handleWithdrawSubmit"
 | 
				
			||||||
 | 
					          :loading="withdrawSubmitLoading"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          确定
 | 
				
			||||||
 | 
					        </el-button>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </el-dialog>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "WalletManagement",
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    // 自定义验证规则
 | 
				
			||||||
 | 
					    const validateDepositAmount = (rule, value, callback) => {
 | 
				
			||||||
 | 
					      if (!value || value <= 0) {
 | 
				
			||||||
 | 
					        callback(new Error("请输入有效的金额"));
 | 
				
			||||||
 | 
					      } else if (value > this.walletInfo.availableAmount) {
 | 
				
			||||||
 | 
					        callback(new Error("可用金额不足"));
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        callback();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const validateWithdrawAmount = (rule, value, callback) => {
 | 
				
			||||||
 | 
					      if (!value || value <= 0) {
 | 
				
			||||||
 | 
					        callback(new Error("请输入有效的金额"));
 | 
				
			||||||
 | 
					      } else if (value > this.walletInfo.walletBalance) {
 | 
				
			||||||
 | 
					        callback(new Error("钱包余额不足"));
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        callback();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      // 当前激活的标签页
 | 
				
			||||||
 | 
					      activeTab: "deposit",
 | 
				
			||||||
 | 
					      // 钱包信息
 | 
				
			||||||
 | 
					      walletInfo: {
 | 
				
			||||||
 | 
					        availableAmount: 0,
 | 
				
			||||||
 | 
					        walletBalance: 0
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      // 提取弹窗
 | 
				
			||||||
 | 
					      depositDialogVisible: false,
 | 
				
			||||||
 | 
					      depositSubmitLoading: false,
 | 
				
			||||||
 | 
					      depositForm: {
 | 
				
			||||||
 | 
					        amount: null
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      depositRules: {
 | 
				
			||||||
 | 
					        amount: [
 | 
				
			||||||
 | 
					          { required: true, message: "请输入提取金额", trigger: "blur" },
 | 
				
			||||||
 | 
					          { validator: validateDepositAmount, trigger: "blur" }
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      // 提现弹窗
 | 
				
			||||||
 | 
					      withdrawDialogVisible: false,
 | 
				
			||||||
 | 
					      withdrawSubmitLoading: false,
 | 
				
			||||||
 | 
					      withdrawForm: {
 | 
				
			||||||
 | 
					        amount: null
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      withdrawRules: {
 | 
				
			||||||
 | 
					        amount: [
 | 
				
			||||||
 | 
					          { required: true, message: "请输入提现金额", trigger: "blur" },
 | 
				
			||||||
 | 
					          { validator: validateWithdrawAmount, trigger: "blur" }
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      // 提取记录表格数据
 | 
				
			||||||
 | 
					      depositDataList: [],
 | 
				
			||||||
 | 
					      // 提取记录分页信息
 | 
				
			||||||
 | 
					      depositPageInfo: {
 | 
				
			||||||
 | 
					        pageNumber: 1,
 | 
				
			||||||
 | 
					        pageSize: 10,
 | 
				
			||||||
 | 
					        total: 0
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      // 提取记录加载状态
 | 
				
			||||||
 | 
					      depositLoading: false,
 | 
				
			||||||
 | 
					      // 提现记录表格数据
 | 
				
			||||||
 | 
					      withdrawDataList: [],
 | 
				
			||||||
 | 
					      // 提现记录分页信息
 | 
				
			||||||
 | 
					      withdrawPageInfo: {
 | 
				
			||||||
 | 
					        pageNumber: 1,
 | 
				
			||||||
 | 
					        pageSize: 10,
 | 
				
			||||||
 | 
					        total: 0
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      // 提现记录加载状态
 | 
				
			||||||
 | 
					      withdrawLoading: false
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  created() {
 | 
				
			||||||
 | 
					    this.fetchWalletInfo();
 | 
				
			||||||
 | 
					    this.fetchDepositData();
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    // 获取钱包信息
 | 
				
			||||||
 | 
					    async fetchWalletInfo() {
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        // TODO: 调用实际的API接口获取钱包信息
 | 
				
			||||||
 | 
					        // const res = await this.$api.mer_admin.getWalletInfo();
 | 
				
			||||||
 | 
					        // this.walletInfo = res.data.data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 模拟数据
 | 
				
			||||||
 | 
					        this.walletInfo = {
 | 
				
			||||||
 | 
					          availableAmount: 5000.0,
 | 
				
			||||||
 | 
					          walletBalance: 2000.0
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					      } catch (error) {
 | 
				
			||||||
 | 
					        console.error("获取钱包信息失败:", error);
 | 
				
			||||||
 | 
					        this.$message.error("获取钱包信息失败");
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 标签页切换
 | 
				
			||||||
 | 
					    handleTabClick(tab) {
 | 
				
			||||||
 | 
					      if (tab.name === "deposit") {
 | 
				
			||||||
 | 
					        this.fetchDepositData();
 | 
				
			||||||
 | 
					      } else if (tab.name === "withdraw") {
 | 
				
			||||||
 | 
					        this.fetchWithdrawData();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // ==================== 提取到钱包相关方法 ====================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 打开提取弹窗
 | 
				
			||||||
 | 
					    openDepositDialog() {
 | 
				
			||||||
 | 
					      this.depositForm.amount = null;
 | 
				
			||||||
 | 
					      this.depositDialogVisible = true;
 | 
				
			||||||
 | 
					      this.$nextTick(() => {
 | 
				
			||||||
 | 
					        if (this.$refs.depositForm) {
 | 
				
			||||||
 | 
					          this.$refs.depositForm.clearValidate();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 提交提取
 | 
				
			||||||
 | 
					    handleDepositSubmit() {
 | 
				
			||||||
 | 
					      this.$refs.depositForm.validate(valid => {
 | 
				
			||||||
 | 
					        if (valid) {
 | 
				
			||||||
 | 
					          this.executeDeposit();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 执行提取
 | 
				
			||||||
 | 
					    async executeDeposit() {
 | 
				
			||||||
 | 
					      this.depositSubmitLoading = true;
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        const amount = this.depositForm.amount;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // TODO: 调用实际的API接口执行提取
 | 
				
			||||||
 | 
					        // const params = {
 | 
				
			||||||
 | 
					        //   amount: amount
 | 
				
			||||||
 | 
					        // };
 | 
				
			||||||
 | 
					        // await this.$api.mer_admin.depositToWallet(params);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 模拟API调用
 | 
				
			||||||
 | 
					        await new Promise(resolve => setTimeout(resolve, 1000));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 更新本地钱包信息
 | 
				
			||||||
 | 
					        this.walletInfo.availableAmount -= amount;
 | 
				
			||||||
 | 
					        this.walletInfo.walletBalance += amount;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.$message.success("提取成功");
 | 
				
			||||||
 | 
					        this.depositDialogVisible = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 刷新数据
 | 
				
			||||||
 | 
					        this.fetchWalletInfo();
 | 
				
			||||||
 | 
					        this.fetchDepositData();
 | 
				
			||||||
 | 
					      } catch (error) {
 | 
				
			||||||
 | 
					        console.error("提取失败:", error);
 | 
				
			||||||
 | 
					        this.$message.error("提取失败,请重试");
 | 
				
			||||||
 | 
					      } finally {
 | 
				
			||||||
 | 
					        this.depositSubmitLoading = false;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 获取提取记录数据
 | 
				
			||||||
 | 
					    fetchDepositData() {
 | 
				
			||||||
 | 
					      this.depositLoading = true;
 | 
				
			||||||
 | 
					      const marketId = this.marketId;
 | 
				
			||||||
 | 
					      if (!marketId) {
 | 
				
			||||||
 | 
					        this.$message.error("获取市场ID失败,请重新登录");
 | 
				
			||||||
 | 
					        this.$router.push("/login");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const params = {
 | 
				
			||||||
 | 
					        pageNumber: this.depositPageInfo.pageNumber,
 | 
				
			||||||
 | 
					        pageSize: this.depositPageInfo.pageSize,
 | 
				
			||||||
 | 
					        marketId
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // TODO: 调用实际的API接口获取提取记录列表
 | 
				
			||||||
 | 
					      // this.$api.mer_admin
 | 
				
			||||||
 | 
					      //   .getDepositList(params)
 | 
				
			||||||
 | 
					      //   .then(res => {
 | 
				
			||||||
 | 
					      //     if (res.data && res.data.data) {
 | 
				
			||||||
 | 
					      //       this.depositDataList = res.data.data.data || [];
 | 
				
			||||||
 | 
					      //       this.depositPageInfo.total = Number(res.data.data.total) || 0;
 | 
				
			||||||
 | 
					      //     }
 | 
				
			||||||
 | 
					      //   })
 | 
				
			||||||
 | 
					      //   .catch(err => {
 | 
				
			||||||
 | 
					      //     console.error("获取提取记录失败:", err);
 | 
				
			||||||
 | 
					      //     this.$message.error("获取提取记录失败");
 | 
				
			||||||
 | 
					      //   })
 | 
				
			||||||
 | 
					      //   .finally(() => {
 | 
				
			||||||
 | 
					      //     this.depositLoading = false;
 | 
				
			||||||
 | 
					      //   });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // 模拟数据
 | 
				
			||||||
 | 
					      setTimeout(() => {
 | 
				
			||||||
 | 
					        const mockData = [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            amount: 1000.0,
 | 
				
			||||||
 | 
					            time: "2025-10-30 10:15:42",
 | 
				
			||||||
 | 
					            afterAvailableAmount: 4000.0,
 | 
				
			||||||
 | 
					            afterWalletBalance: 2000.0
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            amount: 1500.0,
 | 
				
			||||||
 | 
					            time: "2025-10-29 09:45:33",
 | 
				
			||||||
 | 
					            afterAvailableAmount: 3500.0,
 | 
				
			||||||
 | 
					            afterWalletBalance: 3500.0
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            amount: 2000.0,
 | 
				
			||||||
 | 
					            time: "2025-10-28 14:22:18",
 | 
				
			||||||
 | 
					            afterAvailableAmount: 3000.0,
 | 
				
			||||||
 | 
					            afterWalletBalance: 2000.0
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.depositDataList = mockData;
 | 
				
			||||||
 | 
					        this.depositPageInfo.total = mockData.length;
 | 
				
			||||||
 | 
					        this.depositLoading = false;
 | 
				
			||||||
 | 
					      }, 500);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 提取记录分页大小改变
 | 
				
			||||||
 | 
					    handleDepositSizeChange(val) {
 | 
				
			||||||
 | 
					      this.depositPageInfo.pageSize = val;
 | 
				
			||||||
 | 
					      this.depositPageInfo.pageNumber = 1;
 | 
				
			||||||
 | 
					      this.fetchDepositData();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 提取记录当前页改变
 | 
				
			||||||
 | 
					    handleDepositCurrentChange(val) {
 | 
				
			||||||
 | 
					      this.depositPageInfo.pageNumber = val;
 | 
				
			||||||
 | 
					      this.fetchDepositData();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // ==================== 提现到银行卡相关方法 ====================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 打开提现弹窗
 | 
				
			||||||
 | 
					    openWithdrawDialog() {
 | 
				
			||||||
 | 
					      this.withdrawForm.amount = null;
 | 
				
			||||||
 | 
					      this.withdrawDialogVisible = true;
 | 
				
			||||||
 | 
					      this.$nextTick(() => {
 | 
				
			||||||
 | 
					        if (this.$refs.withdrawForm) {
 | 
				
			||||||
 | 
					          this.$refs.withdrawForm.clearValidate();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 提交提现
 | 
				
			||||||
 | 
					    handleWithdrawSubmit() {
 | 
				
			||||||
 | 
					      this.$refs.withdrawForm.validate(valid => {
 | 
				
			||||||
 | 
					        if (valid) {
 | 
				
			||||||
 | 
					          this.executeWithdraw();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 执行提现
 | 
				
			||||||
 | 
					    async executeWithdraw() {
 | 
				
			||||||
 | 
					      this.withdrawSubmitLoading = true;
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        const amount = this.withdrawForm.amount;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // TODO: 调用实际的API接口执行提现
 | 
				
			||||||
 | 
					        // const params = {
 | 
				
			||||||
 | 
					        //   amount: amount
 | 
				
			||||||
 | 
					        // };
 | 
				
			||||||
 | 
					        // await this.$api.mer_admin.withdrawToBank(params);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 模拟API调用
 | 
				
			||||||
 | 
					        await new Promise(resolve => setTimeout(resolve, 1000));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 更新本地钱包信息
 | 
				
			||||||
 | 
					        this.walletInfo.walletBalance -= amount;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.$message.success("提现成功");
 | 
				
			||||||
 | 
					        this.withdrawDialogVisible = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 刷新数据
 | 
				
			||||||
 | 
					        this.fetchWalletInfo();
 | 
				
			||||||
 | 
					        this.fetchWithdrawData();
 | 
				
			||||||
 | 
					      } catch (error) {
 | 
				
			||||||
 | 
					        console.error("提现失败:", error);
 | 
				
			||||||
 | 
					        this.$message.error("提现失败,请重试");
 | 
				
			||||||
 | 
					      } finally {
 | 
				
			||||||
 | 
					        this.withdrawSubmitLoading = false;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 获取提现记录数据
 | 
				
			||||||
 | 
					    fetchWithdrawData() {
 | 
				
			||||||
 | 
					      this.withdrawLoading = true;
 | 
				
			||||||
 | 
					      const marketId = this.marketId;
 | 
				
			||||||
 | 
					      if (!marketId) {
 | 
				
			||||||
 | 
					        this.$message.error("获取市场ID失败,请重新登录");
 | 
				
			||||||
 | 
					        this.$router.push("/login");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const params = {
 | 
				
			||||||
 | 
					        pageNumber: this.withdrawPageInfo.pageNumber,
 | 
				
			||||||
 | 
					        pageSize: this.withdrawPageInfo.pageSize,
 | 
				
			||||||
 | 
					        marketId
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // TODO: 调用实际的API接口获取提现记录列表
 | 
				
			||||||
 | 
					      // this.$api.mer_admin
 | 
				
			||||||
 | 
					      //   .getWithdrawList(params)
 | 
				
			||||||
 | 
					      //   .then(res => {
 | 
				
			||||||
 | 
					      //     if (res.data && res.data.data) {
 | 
				
			||||||
 | 
					      //       this.withdrawDataList = res.data.data.data || [];
 | 
				
			||||||
 | 
					      //       this.withdrawPageInfo.total = Number(res.data.data.total) || 0;
 | 
				
			||||||
 | 
					      //     }
 | 
				
			||||||
 | 
					      //   })
 | 
				
			||||||
 | 
					      //   .catch(err => {
 | 
				
			||||||
 | 
					      //     console.error("获取提现记录失败:", err);
 | 
				
			||||||
 | 
					      //     this.$message.error("获取提现记录失败");
 | 
				
			||||||
 | 
					      //   })
 | 
				
			||||||
 | 
					      //   .finally(() => {
 | 
				
			||||||
 | 
					      //     this.withdrawLoading = false;
 | 
				
			||||||
 | 
					      //   });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // 模拟数据
 | 
				
			||||||
 | 
					      setTimeout(() => {
 | 
				
			||||||
 | 
					        const mockData = [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            amount: 500.0,
 | 
				
			||||||
 | 
					            time: "2025-10-30 15:30:25",
 | 
				
			||||||
 | 
					            afterWalletBalance: 1500.0
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            amount: 800.0,
 | 
				
			||||||
 | 
					            time: "2025-10-29 16:20:10",
 | 
				
			||||||
 | 
					            afterWalletBalance: 1200.0
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.withdrawDataList = mockData;
 | 
				
			||||||
 | 
					        this.withdrawPageInfo.total = mockData.length;
 | 
				
			||||||
 | 
					        this.withdrawLoading = false;
 | 
				
			||||||
 | 
					      }, 500);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 提现记录分页大小改变
 | 
				
			||||||
 | 
					    handleWithdrawSizeChange(val) {
 | 
				
			||||||
 | 
					      this.withdrawPageInfo.pageSize = val;
 | 
				
			||||||
 | 
					      this.withdrawPageInfo.pageNumber = 1;
 | 
				
			||||||
 | 
					      this.fetchWithdrawData();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 提现记录当前页改变
 | 
				
			||||||
 | 
					    handleWithdrawCurrentChange(val) {
 | 
				
			||||||
 | 
					      this.withdrawPageInfo.pageNumber = val;
 | 
				
			||||||
 | 
					      this.fetchWithdrawData();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  computed: {
 | 
				
			||||||
 | 
					    // 获取当前市场的ID
 | 
				
			||||||
 | 
					    marketId() {
 | 
				
			||||||
 | 
					      return this.$store.state.userData.marketId;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					.page-container {
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 统计数据区域
 | 
				
			||||||
 | 
					.stats-row {
 | 
				
			||||||
 | 
					  margin-bottom: 16px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.stat-card {
 | 
				
			||||||
 | 
					  border-radius: 8px;
 | 
				
			||||||
 | 
					  transition: all 0.3s;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  &:hover {
 | 
				
			||||||
 | 
					    transform: translateY(-2px);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ::v-deep .el-card__body {
 | 
				
			||||||
 | 
					    padding: 24px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  &.stat-card-available {
 | 
				
			||||||
 | 
					    border-left: 4px solid #52c41a;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  &.stat-card-balance {
 | 
				
			||||||
 | 
					    border-left: 4px solid #1890ff;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.stat-content {
 | 
				
			||||||
 | 
					  text-align: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.stat-label {
 | 
				
			||||||
 | 
					  font-size: 14px;
 | 
				
			||||||
 | 
					  color: #666;
 | 
				
			||||||
 | 
					  margin-bottom: 12px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.stat-value {
 | 
				
			||||||
 | 
					  font-size: 32px;
 | 
				
			||||||
 | 
					  font-weight: 600;
 | 
				
			||||||
 | 
					  color: #1890ff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 操作按钮区域
 | 
				
			||||||
 | 
					.action-card {
 | 
				
			||||||
 | 
					  margin-bottom: 16px;
 | 
				
			||||||
 | 
					  border-radius: 8px;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ::v-deep .el-card__body {
 | 
				
			||||||
 | 
					    padding: 20px 24px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.button-group {
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  gap: 12px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 标签页卡片
 | 
				
			||||||
 | 
					.tabs-card {
 | 
				
			||||||
 | 
					  border-radius: 8px;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ::v-deep .el-card__body {
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ::v-deep .el-tabs__header {
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 0 24px;
 | 
				
			||||||
 | 
					    background: #fafafa;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ::v-deep .el-tabs__nav-wrap::after {
 | 
				
			||||||
 | 
					    height: 1px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ::v-deep .el-tabs__item {
 | 
				
			||||||
 | 
					    height: 48px;
 | 
				
			||||||
 | 
					    line-height: 48px;
 | 
				
			||||||
 | 
					    font-size: 15px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ::v-deep .el-tabs__content {
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 表格区域
 | 
				
			||||||
 | 
					::v-deep .el-table {
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 分页
 | 
				
			||||||
 | 
					.pagination-container {
 | 
				
			||||||
 | 
					  padding: 20px 24px;
 | 
				
			||||||
 | 
					  text-align: right;
 | 
				
			||||||
 | 
					  border-top: 1px solid #f0f0f0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 弹窗
 | 
				
			||||||
 | 
					.dialog-footer {
 | 
				
			||||||
 | 
					  text-align: right;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
		Loading…
	
		Reference in New Issue