From 38f1a80365e366ca4c0ca17a9daeaa22c4db8670 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B2=A9=E4=BB=9488?= <>
Date: Mon, 15 Dec 2025 10:06:48 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BB=B4=E6=8A=A4=E6=94=B6?=
=?UTF-8?q?=E6=AC=BE=E5=9B=BE=E7=89=87=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../API/Admin/YeWu/MemberController.php | 43 ++++
Laravel/routes/api.php | 2 +
admin/src/api/api.js | 8 +-
admin/src/views/YeWu/MemberMngr.vue | 219 +++++++++++++++++-
4 files changed, 266 insertions(+), 6 deletions(-)
diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/MemberController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/MemberController.php
index 01a8050..e3525e5 100644
--- a/Laravel/app/Http/Controllers/API/Admin/YeWu/MemberController.php
+++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/MemberController.php
@@ -24,4 +24,47 @@ class MemberController
->get();
return \Yz::Return(true,'获取成功',['list'=>$list,'count'=>$count]);
}
+ public function GetDetail()
+ {
+ $id = request('memberId');
+ if(empty($id)){
+ return \Yz::Return(false, '请输入会员ID');
+ }
+ $detail = DB::table('members')
+ ->select('members.*')
+ ->where(['members.id'=>$id,'members.is_del'=>0])
+ ->first();
+ if(empty($detail)){
+ return \Yz::Return(false, '会员不存在');
+ }
+ return \Yz::Return(true,'获取成功',$detail);
+ }
+ public function Update()
+ {
+ $info = request('info');
+ if(empty($info['id'])){
+ return \Yz::Return(false, '请输入会员ID');
+ }
+ $detail = DB::table('members')
+ ->select('members.*')
+ ->where(['members.id'=>$info['id'],'members.is_del'=>0])
+ ->first();
+ if(empty($detail)){
+ return \Yz::Return(false, '会员不存在');
+ }
+
+ if(empty($info)){
+ return \Yz::Return(false, '请输入会员信息');
+ }
+ $u_data=[
+ 'res_bank_img'=>$info['res_bank_img']
+ ];
+ $u=DB::table('members')
+ ->where(['id'=>$info['id']])
+ ->update($u_data);
+ if(empty($u)){
+ return \Yz::Return(false, '更新失败');
+ }
+ return \Yz::Return(true,'更新成功');
+ }
}
diff --git a/Laravel/routes/api.php b/Laravel/routes/api.php
index f2c8a0c..34d94ad 100644
--- a/Laravel/routes/api.php
+++ b/Laravel/routes/api.php
@@ -58,6 +58,8 @@ Route::group(['middleware'=>['checktoken','log'],'prefix'=>'v1'],function () {
Route::post('admin/TransactionRecharge','App\Http\Controllers\API\Admin\YeWu\TransactionController@Recharge'); //admin充值
Route::post('admin/TransactionDelete','App\Http\Controllers\API\Admin\YeWu\TransactionController@Delete'); //删除交易记录
Route::post('admin/MemberGetList','App\Http\Controllers\API\Admin\YeWu\MemberController@GetList'); //会员列表
+ Route::post('admin/MemberGetDetail','App\Http\Controllers\API\Admin\YeWu\MemberController@GetDetail'); //会员详情
+ Route::post('admin/MemberUpdate','App\Http\Controllers\API\Admin\YeWu\MemberController@Update'); //会员详情
Route::post('admin/LoanGetList','App\Http\Controllers\API\Admin\YeWu\LoanController@GetList'); //借款列表
Route::post('admin/LoanVerify','App\Http\Controllers\API\Admin\YeWu\LoanController@Verify'); //借款列表
Route::post('admin/GetCutDay','App\Http\Controllers\API\Admin\YeWu\DayCutController@GetCutDay'); //获取日切日期
diff --git a/admin/src/api/api.js b/admin/src/api/api.js
index d3410e5..c259aec 100644
--- a/admin/src/api/api.js
+++ b/admin/src/api/api.js
@@ -158,4 +158,10 @@ export const WeixinUserUpdateStatus = (data={}) => {
export const TransactionDelete = (data={}) => {
return axios({url:import.meta.env.VITE_APP_API+'v1/admin/TransactionDelete',data:data})
}
-
\ No newline at end of file
+
+export const MemberGetDetail = (data={}) => {
+ return axios({url:import.meta.env.VITE_APP_API+'v1/admin/MemberGetDetail',data:data})
+}
+export const UpdateMemberInfo = (data={}) => {
+ return axios({url:import.meta.env.VITE_APP_API+'v1/admin/MemberUpdate',data:data})
+}
\ No newline at end of file
diff --git a/admin/src/views/YeWu/MemberMngr.vue b/admin/src/views/YeWu/MemberMngr.vue
index ce1eb00..d4a71b4 100644
--- a/admin/src/views/YeWu/MemberMngr.vue
+++ b/admin/src/views/YeWu/MemberMngr.vue
@@ -6,7 +6,7 @@
查询
-
+
@@ -24,10 +24,11 @@
-
+
充值
+ 详情
@@ -54,7 +55,7 @@
验证码
-
+
@@ -71,6 +72,89 @@
+
+
+
+
+
+
+
+
+
+ {{ detailInfo.tel || '--' }}
+
+
+ {{ detailInfo.name || '--' }}
+
+
+ {{ detailInfo.sfz || '--' }}
+
+
+ {{ detailInfo.bank_name || '--' }}
+
+
+ {{ detailInfo.card_number || '--' }}
+
+
+
+
+
+ {{ detailInfo.balance || '--' }}
+
+
+ {{ detailInfo.total_interest || '--' }}
+
+
+ {{ detailInfo.outstanding_loan_amount || '--' }}
+
+
+ {{ detailInfo.withdraw_amount || '--' }}
+
+
+ {{ detailInfo.created_at || '--' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存
+ 关闭
+
+
+
@@ -84,18 +168,26 @@
ElMessage
} from 'element-plus'
import {
- MemberGetList,ImageVerificationGetCode,ImageVerificationCheckCode,TransactionRecharge
+ MemberGetList,ImageVerificationGetCode,ImageVerificationCheckCode,TransactionRecharge,MemberGetDetail,UpFileUrl,UpdateMemberInfo
} from '@/api/api.js'
import {
Edit
} from '@element-plus/icons-vue'
let loading = ref(false)
+ let fileUrlPrefix = ref(import.meta.env.VITE_APP_FILE) //文件URL前缀
+ let upfileurl = UpFileUrl() //上传文件URL
+ let headerObj = { //上传文件头信息
+ Authorization: 'Bearer ' + sessionStorage.getItem("token")
+ }
let tableData = ref([])
let currentPage = ref(1) //当前页码
let pageSize = ref(15) //每页数量
let total = 0 //总数量
let dialogVisible = ref(false)
+ let detailDialogVisible = ref(false) //详情弹窗可见性
+ let detailLoading = ref(false) //详情弹窗加载状态
+ let detailInfo = ref({}) //详情信息
let SelectedInfo = ref(0) //选中的row
let Note = ref('')
let RechargeAmount = ref('')
@@ -142,7 +234,7 @@
const previewSrcList = ref([''])
const imageRef = ref()
const ShowImage = async (img_url) => {
- previewSrcList.value[0] = import.meta.env.VITE_APP_FILE + img_url
+ previewSrcList.value[0] = fileUrlPrefix.value + img_url
nextTick(() => {
const imgElement = imageRef.value?.$el.querySelector('img')
if (imgElement) {
@@ -160,6 +252,69 @@
dialogVisible.value = true
}
+
+ const DetailFunc = async(row) => {
+ SelectedInfo.value = row
+ await getMemberDetail(row.id)
+ detailDialogVisible.value = true
+ }
+
+ const getMemberDetail = async(memberId) => {
+ detailLoading.value = true
+ try {
+ const res = await MemberGetDetail({ memberId })
+ if (res.status) {
+ detailInfo.value = res.data
+ } else {
+ ElMessage.error(res.msg)
+ }
+ } catch (error) {
+ ElMessage.error('获取用户详情失败')
+ } finally {
+ detailLoading.value = false
+ }
+ }
+
+ //上传成功钩子
+ const onUploadSuccess = (res) => {
+ if (res.status) {
+ // 更新详情信息中的收款图片
+ const imagePath = res.data
+ detailInfo.value.res_bank_img = imagePath
+ console.log(res)
+ ElMessage.success('图片上传成功')
+ } else {
+ ElMessage.error(res.msg || '图片上传失败')
+ }
+ }
+
+ //保存详情信息
+ const SaveDetail = async () => {
+ if (!detailInfo.value.id) {
+ ElMessage.error('用户信息错误')
+ return
+ }
+
+ detailLoading.value = true
+ try {
+ // 调用更新用户信息接口,按照要求的参数格式
+ const updateRes = await UpdateMemberInfo({info:detailInfo.value})
+
+ if (updateRes.status) {
+ ElMessage.success('保存成功')
+ detailDialogVisible.value = false
+ // 重新获取列表数据,刷新页面
+ GetList()
+ } else {
+ ElMessage.error(updateRes.msg || '保存失败')
+ }
+ } catch (error) {
+ ElMessage.error('保存失败')
+ } finally {
+ detailLoading.value = false
+ }
+ }
+
const RechargeSubmit = () => {
if(RechargeAmount.value<1){
ElMessage.error('金额不能小于1元')
@@ -229,4 +384,58 @@
color: #00aaff;
font-weight: 900;
}
+
+ /* 详情弹窗样式 */
+ .detail-content {
+ max-height: 600px;
+ overflow-y: auto;
+ }
+
+ .detail-form-item {
+ margin-bottom: 20px;
+ }
+
+ .bank-image-container {
+ display: flex;
+ flex-direction: column;
+ gap: 15px;
+ padding: 15px;
+ background-color: #fff;
+ border-radius: 8px;
+ border: 1px solid #ebeef5;
+ }
+
+ .image-preview {
+ width: 100%;
+ border-radius: 6px;
+ overflow: hidden;
+ }
+
+ .upload-btn-container {
+ display: flex;
+ justify-content: center;
+ padding: 10px 0;
+ }
+
+ /* 表单样式优化 */
+ :deep(.el-form-item__label) {
+ font-weight: 600;
+ color: #303133;
+ margin-bottom: 8px;
+ }
+
+ :deep(.el-input__wrapper) {
+ border-radius: 4px;
+ box-shadow: none;
+ transition: all 0.3s;
+ }
+
+ :deep(.el-input__wrapper:hover) {
+ box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
+ }
+
+ :deep(.el-input.is-disabled .el-input__wrapper) {
+ background-color: #f5f7fa;
+ border-color: #e4e7ed;
+ }
\ No newline at end of file