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(),
|
||||
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