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