wesmiler 1 Minggu lalu
induk
melakukan
8e9e5a5c63

+ 696 - 0
addons/admin/src/views/system/financial/ptAccountLog.vue

@@ -0,0 +1,696 @@
+<template>
+	<div class="ele-body">
+		<el-card shadow="never">
+			<!-- 状态 Tab -->
+			<el-tabs v-model="activeTab" @tab-click="handleTabClick" class="ele-tabs-card">
+				<el-tab-pane label="全部" name="all">
+					<template slot="label">
+						<span><i class="el-icon-s-order"></i> 全部</span>
+					</template>
+				</el-tab-pane>
+				<el-tab-pane label="已完成" name="1">
+					<template slot="label">
+						<span><i class="el-icon-success"></i> 已完成</span>
+					</template>
+				</el-tab-pane>
+				<el-tab-pane label="待处理" name="2">
+					<template slot="label">
+						<span><i class="el-icon-loading"></i> 待处理</span>
+					</template>
+				</el-tab-pane>
+				<el-tab-pane label="失败/取消" name="3">
+					<template slot="label">
+						<span><i class="el-icon-circle-close"></i> 失败/取消</span>
+					</template>
+				</el-tab-pane>
+			</el-tabs>
+
+			<!-- 搜索表单 -->
+			<el-form :model="table.where" label-width="90px" class="ele-form-search"
+				@keyup.enter.native="$refs.table.reload()" @submit.native.prevent>
+				<el-row :gutter="15">
+					<el-col :md="4" :sm="12" v-if="user.account_type<=0">
+						<el-form-item label="交易类型:">
+							<el-select v-model="table.where.type" placeholder="请选择交易类型" clearable class="ele-fluid">
+								<el-option v-for="(v,k) in getTypes()" :key="k" :label="v.name" :value="v.id" />
+							</el-select>
+						</el-form-item>
+					</el-col>
+					<el-col :md="5" :sm="12" v-if="user.id<=0">
+						<el-form-item label="关键词:">
+							<el-input v-model="table.where.keyword" placeholder="用户昵称/手机号" clearable />
+						</el-form-item>
+					</el-col>
+					<el-col :md="4" :sm="12">
+						<el-form-item label="订单号:">
+							<el-input v-model="table.where.order_no" placeholder="请输入订单号" clearable />
+						</el-form-item>
+					</el-col>
+          <el-col :md="5" :sm="12">
+            <el-form-item label="起止日期:" prop="date">
+              <el-date-picker
+                  v-model="table.where.date"
+                  type="daterange"
+                  placeholder="选择起止日期"
+                  size="small"
+                  style="width: 180px;"
+                  value-format="yyyy-MM-dd"
+                  format="yyyy-MM-dd">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+					<el-col :md="6" :sm="12">
+						<div class="ele-form-actions">
+							<el-button type="primary" @click="$refs.table.reload()" icon="el-icon-search"
+								class="ele-btn-icon">查询</el-button>
+							<el-button @click="handleReset">重置</el-button>
+
+              <el-button type="warning" @click="showRecharge">账户充值</el-button>
+						</div>
+					</el-col>
+				</el-row>
+			</el-form>
+
+			<!-- 统计信息 -->
+			<div class="stat-cards" v-if="counts">
+				<el-row :gutter="15">
+					<el-col :span="12">
+						<div class="stat-card">
+							<div class="stat-label">总记录数</div>
+							<div class="stat-value">{{ counts.count || 0 }}笔</div>
+						</div>
+					</el-col>
+					<el-col :span="12">
+						<div class="stat-card">
+							<div class="stat-label">总金额</div>
+							<div class="stat-value amount">{{ counts.total || 0 }}</div>
+						</div>
+					</el-col>
+				</el-row>
+			</div>
+
+			<!-- 数据表格 -->
+			<ele-data-table ref="table" :config="table" :choose.sync="selection" @loaded="parseData"
+				height="calc(100vh - 400px)">
+				<template slot-scope="{index}">
+					<el-table-column type="selection" width="45" align="center" fixed="left" />
+					<el-table-column prop="id" label="ID" width="60" align="center" sortable="custom" />
+					<el-table-column prop="source_order_no" label="订单号" min-width="170" align="center" show-overflow-tooltip />
+					<el-table-column prop="nickname" :label="$store.state.user.user.type==2?'来源用户':'用户昵称'" min-width="130" align="center">
+            <template slot-scope="{row}">
+              <span class="ele-text-primary" v-if="$store.state.user.user.type==2">{{row.bill && row.bill.user? row.bill.user.nickname+'('+row.bill.user.mobile+')':'-'}}</span>
+              <span class="ele-text-primary" v-else>{{row.nickname}}</span>
+            </template>
+          </el-table-column>
+					<el-table-column prop="mobile" v-if="$store.state.user.user.type!=2" label="手机号" min-width="110" align="center">
+          </el-table-column>
+          <!-- 金额 -->
+          <el-table-column label="金额" width="100" align="center">
+            <template slot-scope="{row}">
+              <span v-if="row.money>=0" class="ele-text-success" style="font-weight: bold;">{{ row.money }}{{row.account_type==1?'元':'个'}}</span>
+              <span v-else class="ele-text-danger" style="font-weight: bold;">{{ row.money }}{{row.account_type==1?'元':'个'}}</span>
+            </template>
+          </el-table-column>
+
+          <!-- 变更前金额 -->
+          <el-table-column label="变更后金额" width="100" align="center">
+            <template slot-scope="{row}">
+              <span style="color: #909399;">{{ row.after_money }}{{row.account_type==1?'元':'个'}}</span>
+            </template>
+          </el-table-column>
+					<!-- 交易类型 -->
+					<el-table-column label="交易类型" width="90" align="center">
+						<template slot-scope="{row}">
+							<el-tag :type="['','success','primary','info','warning','danger','success','warning','info','success','paimary'][row.type]" size="mini">{{row.type_name}}</el-tag>
+						</template>
+					</el-table-column>
+
+					<!-- 状态 -->
+          <el-table-column label="状态" width="90" align="center">
+						<template slot-scope="{row}">
+							<el-tag v-if="row.status === 1" type="success" size="mini">已完成</el-tag>
+							<el-tag v-else-if="row.status === 2" type="warning" size="mini">待处理</el-tag>
+							<el-tag v-else-if="row.status === 3" type="danger" size="mini">失败/取消</el-tag>
+						</template>
+          </el-table-column>
+
+
+					<el-table-column prop="create_time" label="创建时间" min-width="160" align="center" show-overflow-tooltip />
+          <el-table-column prop="remark" label="备注" min-width="150" align="center">
+          </el-table-column>
+
+					<!-- 操作 -->
+					<el-table-column label="操作" width="100" align="center" fixed="right">
+						<template slot-scope="{row}">
+							<el-link @click="viewDetail(row)" icon="el-icon-view" type="primary" :underline="false">查看</el-link>
+						</template>
+					</el-table-column>
+				</template>
+			</ele-data-table>
+		</el-card>
+
+		<!-- 查看详情弹窗 -->
+		<el-dialog title="财务明细详情" :visible.sync="detailVisible" width="700px" :destroy-on-close="true"
+			:close-on-click-modal="false" custom-class="account-detail-dialog">
+
+			<!-- 头部信息卡片 -->
+			<div class="detail-header">
+				<div class="header-item">
+					<div class="header-label">记录ID</div>
+					<div class="header-value">#{{ detailData.id }}</div>
+				</div>
+				<div class="header-item">
+					<div class="header-label">交易类型</div>
+					<div class="header-value">
+						<el-tag  type="success" size="medium">{{detailData.type_name}}</el-tag>
+					</div>
+				</div>
+				<div class="header-item">
+					<div class="header-label">状态</div>
+					<div class="header-value">
+						<el-tag v-if="detailData.status === 1" type="success" size="medium">已完成</el-tag>
+						<el-tag v-else-if="detailData.status === 2" type="warning" size="medium">待处理</el-tag>
+						<el-tag v-else-if="detailData.status === 3" type="danger" size="medium">失败/取消</el-tag>
+					</div>
+				</div>
+			</div>
+
+			<!-- 金额信息 -->
+			<div class="amount-section">
+				<div class="amount-card main-amount">
+					<div class="amount-label">交易金额</div>
+					<div class="amount-value">
+						¥{{ detailData.money }}
+					</div>
+				</div>
+				<div class="amount-card">
+					<div class="amount-label">变更后金额</div>
+					<div class="amount-value secondary">¥{{ detailData.after_money }}</div>
+				</div>
+			</div>
+
+			<!-- 详细信息 -->
+			<div class="detail-section">
+				<div class="section-title">
+					<i class="el-icon-user"></i> 基本信息
+				</div>
+				<el-descriptions :column="2" border size="medium">
+					<el-descriptions-item label="关联订单号" :span="2">
+						<span class="order-no">{{ detailData.source_order_no || '-' }}</span>
+					</el-descriptions-item>
+          <template v-if="$store.state.user.user.type==2">
+            <el-descriptions-item label="来源用户">{{ detailData.bill && detailData.bill.user?detailData.bill.nickname+'(ID:'+detailData.bill.id+'-'+detailData.bill.mobile+')':'-'}}</el-descriptions-item>
+          </template>
+					<template v-else>
+            <el-descriptions-item label="用户ID">{{ detailData.user_id || '-' }}</el-descriptions-item>
+            <el-descriptions-item label="用户昵称">{{ detailData.nickname || '-' }}</el-descriptions-item>
+            <el-descriptions-item label="手机号">{{ detailData.mobile || '-' }}</el-descriptions-item>
+          </template>
+					<el-descriptions-item label="交易类型" :span="2">
+						<span>{{ detailData.type_name }}</span>
+					</el-descriptions-item>
+				</el-descriptions>
+			</div>
+
+			<div class="detail-section">
+				<div class="section-title">
+					<i class="el-icon-time"></i> 时间信息
+				</div>
+				<el-descriptions :column="2" border size="medium">
+					<el-descriptions-item label="创建时间">
+						<i class="el-icon-time"></i> {{ detailData.create_time_text }}
+					</el-descriptions-item>
+					<el-descriptions-item label="更新时间">
+						<i class="el-icon-time"></i> {{ detailData.update_time_text }}
+					</el-descriptions-item>
+				</el-descriptions>
+			</div>
+
+			<div class="detail-section" v-if="detailData.remark">
+				<div class="section-title">
+					<i class="el-icon-document"></i> 备注
+				</div>
+				<el-descriptions :column="1" border size="medium">
+					<el-descriptions-item label="备注" :span="1">
+						<div class="remark-text">{{ detailData.remark }}</div>
+					</el-descriptions-item>
+				</el-descriptions>
+			</div>
+
+			<div slot="footer" class="dialog-footer">
+				<el-button type="primary" size="medium" @click="detailVisible = false">
+					<i class="el-icon-check"></i> 关闭
+				</el-button>
+			</div>
+		</el-dialog>
+
+    <!-- 账户充值 -->
+    <el-dialog title="账户充值/扣除" :visible.sync="showRechargeEdit" width="600px" zIndex="1020" @closed="form = {account_type:1}"
+               :destroy-on-close="true" custom-class="ele-dialog-form" :lock-scroll="false" :close-on-click-modal="false">
+      <el-form :model="form" ref="editForm" :rules="rules" label-width="90px" @keyup.enter.native="save"
+               @submit.native.prevent>
+        <el-form-item label="账户类型:" prop="account_type">
+          <el-select v-model="form.account_type" :disabled="user.account_type?true:false" placeholder="请选择账户类型" class="ele-fluid">
+            <el-option label="余额" :value="1" />
+            <el-option label="报单积分" :value="3" />
+            <el-option label="数字资产" :value="2" disabled/>
+            <el-option label="绿色积分" :value="4" disabled/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="用户账户:" prop="user_id">
+          <el-select v-model="form.user_id" filterable
+                     remote
+                     reserve-keyword
+                     placeholder="请选择用户账户"
+                     :remote-method="getUsers"
+                     :disabled="user.id?true:false"
+                     :loading="loading" class="ele-fluid">
+            <el-option v-for="(v,k) in users" :key="k" :label="v.nickname+'-'+v.mobile" :value="v.id">
+              <span style="float: left">{{ v.nickname }}</span>
+              <span style="float: right;color: #999;">{{ v.mobile }}</span>
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="调整类型:" prop="change_type">
+          <el-select v-model="form.change_type" placeholder="请选择调整类型" clearable class="ele-fluid">
+            <el-option label="充值" :value="1" />
+            <el-option label="扣除" :value="2" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="金额:" prop="money">
+          <el-input v-model="form.money" controls-position="right" placeholder="请输入调整金额"
+                           class="ele-fluid ele-text-left" >
+            <template slot="append">{{form.account_type==1?'元':'个'}}</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="调整备注:">
+          <el-input v-model="form.remark" placeholder="请输入备注" :rows="3" type="textarea" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer">
+        <el-button @click="showRechargeEdit = false">取消</el-button>&nbsp;
+        <el-button type="primary" @click="recharge">确定调整</el-button>
+      </div>
+    </el-dialog>
+	</div>
+</template>
+
+<script>
+import { mapGetters } from "vuex";
+
+export default {
+	name: "AccountLog",
+	computed: {
+		...mapGetters(["permission"]),
+		// 判断是否为商户用户
+		isStoreUser() {
+			return this.$store.state.user.user && this.$store.state.user.user.store_id > 0;
+		}
+	},
+  props: {
+    user: {
+      type: Object,
+      default() {
+        return {id:0,account_type:0, mobile: ''};
+      }
+    },
+  },
+	data() {
+		return {
+			activeTab: 'all', // 当前激活的 Tab
+			// 表格配置
+			table: {
+				url: '/account/index',
+				where: {
+					type: '',
+          account_type: this.user.account_type,
+					status: '',
+          user_id: this.user.id,
+					keyword: '',
+					order_no: ''
+				}
+			},
+      loading: false,
+			selection: [], // 表格选中数据
+			counts: null, // 统计数据
+			detailVisible: false, // 是否显示详情弹窗
+      showRechargeEdit: false,
+      form: {
+			  user_id: '',
+        money:'',
+        change_type: 1,
+        account_type:1,
+      },
+      users:[],
+			detailData: {}, // 详情数据
+      rules: {  // 表单验证规则
+        account_type: [
+          {required: true, message: '请选择账户类型', trigger: 'blur'}
+        ],
+        user_id: [
+          {required: true, message: '请选择账号', trigger: 'blur'}
+        ],
+        money: [
+          {required: true, message: '请输入金额', trigger: 'blur'}
+        ]
+      },
+		};
+	},
+	methods: {
+		/* 解析表格数据 */
+		parseData(data,counts) {
+			if (data && counts) {
+				this.counts = counts;
+			}
+			return data;
+		},
+
+		/* Tab 切换 */
+		handleTabClick(tab) {
+			// 根据 Tab 设置状态
+			if (tab.name === 'all') {
+				this.table.where.status = '';
+			} else {
+				this.table.where.status = parseInt(tab.name);
+			}
+			// 重新加载数据
+			this.$refs.table.reload();
+		},
+
+		/* 重置搜索 */
+		handleReset() {
+			this.activeTab = 'all';
+			this.table.where = {
+				type: '',
+				status: '',
+        account_type: this.user.account_type,
+        user_id: this.user.id,
+				keyword: '',
+				order_no: ''
+			};
+			this.$refs.table.reload();
+		},
+
+		/* 查看详情 */
+		viewDetail(row) {
+			this.detailData = Object.assign({}, row);
+			this.detailVisible = true;
+		},
+    showRecharge() {
+		  this.getUsers('');
+      this.form = {
+        user_id: this.user.id?this.user.id:'',
+        account_type: this.user.account_type?this.user.account_type:3,
+        change_type: 1,
+        money: '',
+        remark: '',
+      };
+      this.showRechargeEdit = true;
+    },
+
+		/* 获取交易类型文本 */
+		getTypes() {
+			const typeMap =[
+        {id: 1,name: '订单付款'},
+        {id: 2,name: '账户充值'},
+        {id: 3,name: '订单退款'},
+        {id: 4,name: '账户提现'},
+        {id: 5,name: '提现驳回'},
+        {id: 6,name: '平台调整'},
+        {id: 7,name: '商家结算'},
+        {id: 8,name: '收益奖励'},
+        {id: 10,name: '账户转账'},
+        {id: 9,name: '其他'},
+      ];
+			return this.$store.state.user.user.type==2? [{id: 7,name:'商家结算'}] : typeMap;
+		},
+    getUsers(keyword) {
+      this.$http.post('/member/options', {keyword: keyword}).then(res => {
+        if (res.data.code === 0) {
+          this.users = res.data.data;
+        }
+      })
+    },
+    /* 充值 */
+    recharge() {
+      this.$message.closeAll();
+      if(this.form.money<=0){
+        this.$message.error('请输入金额');
+        return false;
+      }
+      this.$confirm('确定要给该用户'+'账户'+(this.form.change_type==1?'充值':'扣除')+this.form.money+(['','余额','数字资产','报单积分','绿色积分'][this.form.account_type])+'?', '提示', {type: 'warning'}).then(() => {
+      this.$refs['editForm'].validate((valid) => {
+          if (valid) {
+            const loading = this.$loading({lock: true});
+            this.$http.post('/member/recharge', this.form).then(res => {
+              loading.close();
+              if (res.data.code === 0) {
+                this.showRechargeEdit = false;
+                this.$message({type: 'success', message: res.data.msg});
+                this.$refs.table.reload();
+              } else {
+                this.$message.error(res.data.msg);
+              }
+            }).catch(e => {
+              loading.close();
+              this.$message.error(e.message);
+            });
+          } else {
+            return false;
+          }
+        });
+      }).catch(() => 0);
+    },
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+// Tab 标签页样式
+::v-deep .ele-tabs-card {
+	margin-bottom: 20px;
+
+	.el-tabs__header {
+		margin: 0;
+		border-bottom: 2px solid #e4e7ed;
+	}
+
+	.el-tabs__nav-wrap::after {
+		height: 0;
+	}
+
+	.el-tabs__item {
+		height: 50px;
+		line-height: 50px;
+		font-size: 14px;
+
+		i {
+			margin-right: 5px;
+			font-size: 16px;
+		}
+
+		&:hover {
+			color: #409eff;
+		}
+
+		&.is-active {
+			color: #409eff;
+			font-weight: bold;
+		}
+	}
+
+	.el-tabs__active-bar {
+		height: 3px;
+		background: linear-gradient(90deg, #409eff 0%, #66b1ff 100%);
+	}
+}
+
+.stat-cards {
+	margin-bottom: 15px;
+
+	.stat-card {
+		background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+		border-radius: 8px;
+		padding: 20px;
+		color: white;
+
+		.stat-label {
+			font-size: 14px;
+			opacity: 0.9;
+			margin-bottom: 8px;
+		}
+
+		.stat-value {
+			font-size: 28px;
+			font-weight: bold;
+
+			&.amount {
+				color: #ffd700;
+			}
+		}
+	}
+}
+
+// 详情弹窗样式
+::v-deep .account-detail-dialog {
+	.el-dialog__header {
+		background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+		padding: 20px;
+
+		.el-dialog__title {
+			color: white;
+			font-size: 18px;
+			font-weight: bold;
+		}
+
+		.el-dialog__headerbtn .el-dialog__close {
+			color: white;
+			font-size: 20px;
+
+			&:hover {
+				color: #f0f0f0;
+			}
+		}
+	}
+
+	.el-dialog__body {
+		padding: 20px;
+		background: #f5f7fa;
+	}
+
+	.el-dialog__footer {
+		padding: 15px 20px;
+		background: #fff;
+		border-top: 1px solid #e4e7ed;
+	}
+}
+
+.detail-header {
+	display: flex;
+	justify-content: space-around;
+	margin-bottom: 20px;
+	background: white;
+	border-radius: 8px;
+	padding: 20px;
+	box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+
+	.header-item {
+		text-align: center;
+		flex: 1;
+
+		&:not(:last-child) {
+			border-right: 1px solid #e4e7ed;
+		}
+
+		.header-label {
+			font-size: 13px;
+			color: #909399;
+			margin-bottom: 10px;
+		}
+
+		.header-value {
+			font-size: 16px;
+			font-weight: bold;
+			color: #303133;
+		}
+	}
+}
+
+.amount-section {
+	display: flex;
+	gap: 15px;
+	margin-bottom: 20px;
+
+	.amount-card {
+		flex: 1;
+		background: white;
+		border-radius: 8px;
+		padding: 20px;
+		box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+
+		&.main-amount {
+			background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
+
+			.amount-label {
+				color: rgba(255, 255, 255, 0.9);
+			}
+
+			.amount-value {
+				color: white !important;
+			}
+		}
+
+		.amount-label {
+			font-size: 13px;
+			color: #909399;
+			margin-bottom: 10px;
+		}
+
+		.amount-value {
+			font-size: 28px;
+			font-weight: bold;
+
+			&.secondary {
+				color: #606266;
+				font-size: 24px;
+			}
+		}
+	}
+}
+
+.detail-section {
+	margin-bottom: 20px;
+
+	.section-title {
+		font-size: 15px;
+		font-weight: bold;
+		color: #303133;
+		margin-bottom: 12px;
+		padding-left: 10px;
+		border-left: 3px solid #409eff;
+
+		i {
+			margin-right: 5px;
+			color: #409eff;
+		}
+	}
+
+	::v-deep .el-descriptions {
+		background: white;
+		border-radius: 8px;
+		overflow: hidden;
+		box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+
+		.el-descriptions__label {
+			background: #fafafa;
+			font-weight: 500;
+			color: #606266;
+		}
+
+		.el-descriptions__content {
+			color: #303133;
+		}
+	}
+
+	.order-no {
+		font-family: 'Courier New', monospace;
+		color: #409eff;
+		font-weight: 500;
+	}
+
+	.remark-text {
+		line-height: 1.6;
+		color: #606266;
+		white-space: pre-wrap;
+		word-break: break-all;
+	}
+}
+
+.dialog-footer {
+	text-align: center;
+
+	.el-button {
+		min-width: 120px;
+	}
+}
+</style>

+ 3 - 10
app/Http/Controllers/Admin/AccountController.php

@@ -51,16 +51,9 @@ class AccountController extends Backend
     /**
      * 获取详情
      */
-    public function read()
+    public function ptAccount()
     {
-        $id = request()->input('id');
-        if (empty($id)) {
-            return showJson('参数错误', false);
-        }
-
-        $service = new AccountService();
-        $result = $service->getInfo($id);
-
-        return showJson($result['msg'], $result['code'] == 0, $result['data'] ?? []);
+        $info = $this->service->getPtAccount();
+        return message(1010, true, $info);
     }
 }

+ 10 - 0
app/Services/Common/AccountService.php

@@ -13,6 +13,7 @@ namespace App\Services\Common;
 
 use App\Models\AccountLogModel;
 use App\Models\ActionLogModel;
+use App\Models\PtAccountModel;
 use App\Services\BaseService;
 use Illuminate\Support\Facades\DB;
 
@@ -482,4 +483,13 @@ class AccountService extends BaseService
             return ['code' => 0, 'msg' => '删除成功'];
         }
     }
+
+    /**
+     * 平台账户
+     * @return mixed
+     */
+    public function ptAccount()
+    {
+        return PtAccountModel::where(['mark'=>1])->first();
+    }
 }

+ 1 - 1
routes/web.php

@@ -229,7 +229,7 @@ Route::post('/account/add', [\App\Http\Controllers\Admin\AccountController::clas
 Route::post('/account/edit', [\App\Http\Controllers\Admin\AccountController::class, 'edit']);
 Route::post('/account/status', [\App\Http\Controllers\Admin\AccountController::class, 'status']);
 Route::post('/account/delete', [\App\Http\Controllers\Admin\AccountController::class, 'delete']);
-Route::post('/account/count', [\App\Http\Controllers\Admin\AccountController::class, 'count']);
+Route::post('/account/ptAccount', [\App\Http\Controllers\Admin\AccountController::class, 'ptAccount']);
 
 // 提现记录
 Route::get('/withdraw/index', [\App\Http\Controllers\Admin\WithdrawController::class, 'index']);