1.搭+页面新增:银行卡页面

2.搭+钱包接口对接:新增,编辑银行卡,提现,提现列表
搭+提现功能完成度(100%)
3.搭+身份认证功能页面制作接口对接
搭+身份认证功能完成度(100%)
This commit is contained in:
王创世 2025-06-06 18:30:30 +08:00
parent 094e5a693d
commit 5c3b736c51
15 changed files with 2435 additions and 1814 deletions

View File

@ -57,55 +57,115 @@
</span>
</view>
</view>
<view class="third flex flex-column" style="justify-content: flex-start;background: linear-gradient( 180deg, #EFFFD6 0%, #FFFFFF 30%);">
<view class="flex align-items" style="padding: 30rpx;justify-content: space-between;">
<view class="third-top flex align-items" style="margin: 0px;">
<span>报名信息
<image class="icons" src="/static/detail/xiangqing.png"></image>
</span>
</view>
</view>
<view style="font-size: 24rpx;color: #999999;margin-left: 30rpx;">请填写真实的报名人认证信息</view>
<view style="padding: 30rpx;margin-top: 20rpx;">
<view style="display: flex;align-items: center;justify-content: space-between;">
<view>
<view style="font-size: 28rpx;color: #323232;">李明</view>
<view style="color: #9C9C9C;font-size: 24rpx;margin-top: 10rpx;">身份证 410305200001012025</view>
</view>
<view>
<image src="/static/fabu/nocheck.png" style="width: 40rpx;height: 40rpx"></image>
</view>
</view>
<view style="height: 1px;background-color: #F0F0F0;width: 100%;margin-top: 20rpx;"></view>
</view>
<view style="padding: 30rpx;">
<view style="padding: 15rpx 0rpx;display: flex;align-items: center;border-radius: 118rpx;width: 323rpx;background: #F7F7F7;margin: 0 auto;justify-content: center;">
<view>
<image src="/static/order_add.png" style="width: 30rpx;height: 30rpx"></image>
</view>
<view style="font-size: 28rpx;margin-left: 20rpx;">添加/删除报名人</view>
</view>
</view>
</view>
<view class="third flex flex-column" style="justify-content: flex-start;" v-if="priceGem > 0">
<view class="third-top flex align-items">
<view @click="tipsShow= true" class="flex align-items" style="padding: 30rpx;justify-content: space-between;">
<view class="third-top flex align-items" style="margin: 0px;">
<span>退款政策
<image class="icons" src="/static/detail/xiangqing.png"></image>
</span>
</view>
<view class="third-center">
<view style="display: flex;align-items: center;">
<view style="background: #323232;border-radius: 8rpx;text-align: center;padding: 2rpx 10rpx 10rpx 10rpx;">
<text style="font-size: 22rpx;color: #BBFC5B;">{{detail.refund_info.title}}</text>
</view>
<view style="margin-left: 10rpx;"><u-icon name="arrow-right"></u-icon></view>
</view>
</view>
<!-- <view class="third-center">
<uni-table border stripe emptyText="暂无更多数据" >
<!-- 表头行 -->
<uni-tr>
<uni-th width="160" align="left">申请退款时间</uni-th>
<uni-th width="80" align="left">退款比例</uni-th>
<uni-th width="80" align="left">退款金额</uni-th>
</uni-tr>
<!-- 表格数据行 -->
<uni-tr v-if="detail.refund_info.status == 1">
<uni-td>报名开始后</uni-td>
<uni-td>0%</uni-td>
<uni-td>0</uni-td>
</uni-tr>
<uni-tr v-if="detail.refund_info.status == 5">
<uni-td>报名开始至{{ fomartertime }}</uni-td>
<uni-td>需协商</uni-td>
<uni-td>需协商</uni-td>
</uni-tr>
</uni-table>
</view> -->
</view>
<u-popup @touchmove.native.stop.prevent :custom-style="{
width: '690rpx',
height: '450rpx',
margin: '0 auto',
display: 'flex',
justifyContent: 'flex-start',
alignItems: 'center'}" :closeable="false" :show="tipsShow" :round="10" mode="center"
:closeOnClickOverlay="false">
<view style="font-size: 32rpx;font-weight: 400;margin: 12rpx 0 24rpx 0;">退款政策</view>
<view class="third-center">
<uni-table border stripe emptyText="暂无更多数据" >
<uni-tr>
<uni-th width="160" align="left">申请退款时间</uni-th>
<uni-th width="70" align="left">退款比例</uni-th>
<uni-th width="70" align="left">退款金额</uni-th>
</uni-tr>
<uni-tr v-if="detail.refund_info.status == 1">
<uni-td>报名开始后</uni-td>
<uni-td>0%</uni-td>
<uni-td>0</uni-td>
</uni-tr>
<uni-tr v-if="detail.refund_info.status == 5">
<uni-td>报名开始至{{ fomartertime }}</uni-td>
<uni-td>需协商</uni-td>
<uni-td>需协商</uni-td>
</uni-tr>
</uni-table>
</view>
<view class="popup-footer">
<view class="zhixiao shows_zhidao" @click="tipsShow = false">我已知晓</view>
</view>
<view class="third flex flex-column" style="justify-content: flex-start;">
</u-popup>
<view class="third flex flex-column" style="justify-content: flex-start;margin-bottom: 300rpx;">
<view class="third-top flex align-items">
<span>免责声明
<image class="icons" src="/static/detail/xiangqing.png"></image>
</span>
</view>
<view class="third-center mgbot">
<view class="third-center">
<span style="color: #9C9C9C; font-size: 24rpx;">
活动均为主理人自行发布并组织的活动请您注意粗门仅为活动提供平台技术支持活动后续事项有主理人负责组织费用均为主理人收取
如您因活动发起组织撤销下线退款等引起的纠纷须由主理人自行解决并承担后果
活动均为主理人自行发布并组织的活动请您注意粗门仅为活动提供平台技术支持活动后续事项有主理人负责组织费用均为主理人收取
如您因活动发起组织撤销下线退款等引起的纠纷须由主理人自行解决并承担后果
活动均为主理人自行发布并组织的活动请您注意粗门仅为活动提供平台技术支持活动后续事项有主理人负责组织费用均为主理人收取
如您因活动发起组织撤销下线退款等引起的纠纷须由主理人自行解决并承担后果
</span>
</view>
@ -231,6 +291,7 @@
img: 'width: 100%'
},
tipsShow:false,
nummoney:1,
priceGem:null,
Negotiate: null, //
@ -758,7 +819,6 @@
<style lang="scss" scoped>
.detail_all{
background-color: #f7f7f7;
height: 100vh;
}
.w-100 {
width: 100%;
@ -1039,7 +1099,7 @@
.footer {
width: 100%;
height: 200rpx;
height: 250rpx;
background: #ffffff;
border-radius: 0rpx 0rpx 0rpx 0rpx;
position: fixed;
@ -1053,14 +1113,15 @@
.footer-right {
position: absolute;
right: 30rpx;
width: 690rpx;
width: 100%;
height: 102rpx;
background: #C1C1C1;
border-radius: 200rpx;
margin: 0 auto;
left: 0;
right: 0;
span {
width: 690rpx;
width: 94%;
height: 102rpx;
line-height: 102rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;

View File

@ -32,7 +32,8 @@
<span class="first-image flex align-items" style="margin-top: 25rpx;width: 100%;">
<image :src="detail.user.avatar" mode="" style="width: 36rpx;height: 36rpx;margin-right: 12rpx;border-radius: 80rpx;">
<image :src="detail.user.avatar" mode=""
style="width: 36rpx;height: 36rpx;margin-right: 12rpx;border-radius: 80rpx;">
</image>
<span style="color: #9C9C9C ;width: 32%;">{{ detail.user.nickname }}</span>
<span class="flex justify-center align-items xieyi">
@ -60,8 +61,8 @@
</image>
</span>
<span class="line" style="margin-bottom: 0rpx;"></span>
<view class="second-box flex align-items space-between">
<view class="flex align-items">
<view class="second-box flex align-items space-between" v-if="detail.join_info">
<view class="flex align-items" v-if="detail.join_info.users">
<u-avatar-group :urls="detail.join_info.users" keyName="avatar" size="30" gap="0.3"
:maxCount="3"></u-avatar-group>
<image src="/static/index/dian.png"
@ -194,88 +195,45 @@
</view>
</view>
</u-popup>
<u-overlay zIndex="5555" :show="overlay"></u-overlay>
<!-- 分享海报 -->
<u-overlay :show="overlay" class="pos">
<view v-if="overlay" class="pos">
<image @click="closeoo" src="/static/center/close.png" mode="" style="z-index: 10000;width: 64rpx;height: 64rpx;position: absolute;top: 200rpx;right: 45rpx;"></image>
<image @click="closeoo" src="/static/center/close.png" mode=""
style="z-index: 10000;width: 64rpx;height: 64rpx;position: absolute;top: 200rpx;right: 45rpx;">
</image>
<!-- <view class="Poster" id="Poster">
<span class="posterClose" @click="closeoo">
<image src="../../static/center/close.png" mode="" style="width: 64rpx;height: 64rpx;"></image>
</span>
<view ref="painter" class="title_top">
<view class="toutop">
<image class="toutu" :src="detail.user.avatar" />
<view class="toututt">{{ detail.user.nickname }}的邀请</view>
</view>
<view class="center_con">
<image v-if="detail.images" :src="detail.images[0]" class="cenimg" />
<view class="center_text">
<view>
<view class="c1t1 white-space">{{ detail.title }}</view>
<view class="c2t2">{{ detail.price }}</view>
<view class="c3t3 white-space">地址{{ detail.address }}</view>
</view>
<view style="background: #ffffff;border-radius: 18rpx;">
<l-painter render-type="2d" is-render-image custom-style="width: 200rpx; height: 200rpx;">
<l-painter-view css="margin:20rpx;">
<l-painter-qrcode css="width: 160rpx; height: 160rpx;margin:0 auto;"
:text="qrUrl"></l-painter-qrcode>
</l-painter-view>
</l-painter>
</view>
</view>
</view>
</view>
</view> -->
<!-- <image :src="path" mode="widthFix" style="width: 750rpx;height: 1000rpx;"></image> -->
<l-painter
isCanvasToTempFilePath
@success="sunccessimg"
<l-painter isCanvasToTempFilePath :after-delay="500" @success="sunccessimg"
css="width:661rpx;height: 1072rpx;background-image:url(https://naweigetetest2.hschool.com.cn/dyqc/fenxiang.png);"
custom-style="position:absolute;left:45rpx;right:44rpx;top:200rpx;"
>
<l-painter-image
:src="detail.user.avatar"
css="margin-left: 15rpx; margin-top: 120rpx;border: 2rpx solid #FFFFFF; width: 60rpx; height: 60rpx; border-radius: 50%;"
/>
<l-painter-view
css="margin-top: 130rpx; padding-left: 20rpx; display: inline-block"
>
<l-painter-text
:text="detail.user.nickname+'的邀请'"
css="display: block; height: 36rpx;color: #3D3D3D; font-size: 28rpx; fontWeight: 400;"
/>
custom-style="position:absolute;left:45rpx;right:44rpx;top:200rpx;z-index:100">
<l-painter-image :src="detail.user.avatar"
css="z-index:300;margin-left: 15rpx; margin-top: 120rpx;border: 2rpx solid #FFFFFF; width: 60rpx; height: 60rpx; border-radius: 50%;" />
<l-painter-view css="margin-top: 130rpx; padding-left: 20rpx; display: inline-block">
<l-painter-text :text="detail.user.nickname+'的邀请'"
css="display: block; height: 36rpx;color: #3D3D3D; font-size: 28rpx; fontWeight: 400;" />
</l-painter-view>
<l-painter-view
css="margin-left: 20rpx; margin-top: 20rpx; margin-bottom: 20rpx; box-sizing: border-box;width: 100%;"
>
<l-painter-image
:src="detail.images[0]"
css="width: 620rpx; height: 620rpx; border-radius: 24rpx;object-fit: cover;"
/>
css="margin-left: 20rpx; margin-top: 20rpx; margin-bottom: 20rpx; box-sizing: border-box;width: 100%;">
<l-painter-image :src="detail.images[0]"
css="width: 620rpx; height: 620rpx; border-radius: 24rpx;object-fit: cover;" />
<l-painter-view css="margin-top: 30rpx;display: flex;justify-content: space-between;width:100%;">
<l-painter-view
css="margin-top: 30rpx;display: flex;justify-content: space-between;width:100%;">
<l-painter-view css="display: flex;flex-direction: column;width: 420rpx;">
<l-painter-text
css="line-clamp: 1;font-weight: bold;color:#202020;font-size: 32rpx;width:400rpx;box-sizing:border-box;line-height: 42rpx;"
:text="detail.title"
></l-painter-text>
:text="detail.title"></l-painter-text>
<l-painter-text
css="line-clamp: 1; color:#FF4810;font-size: 28rpx;width:220rpx;margin-top: 20rpx;line-height: 38rpx;"
:text="'¥'+detail.price"
></l-painter-text>
:text="'¥'+detail.price"></l-painter-text>
<l-painter-text
css="line-clamp: 2; color:#9C9C9C;font-size: 26rpx;margin-top: 20rpx;line-height: 36rpx;width: 360rpx;"
:text="'地址:'+detail.address"
></l-painter-text>
:text="'地址:'+detail.address"></l-painter-text>
</l-painter-view>
<l-painter-view css="background: #ffffff;border-radius: 18rpx;width: 200rpx; height: 200rpx;margin-right: 50rpx;">
<l-painter-qrcode
css="width: 160rpx; height: 160rpx;margin:20rpx;"
:text="qrUrl"
></l-painter-qrcode>
<l-painter-view
css="background: #ffffff;border-radius: 18rpx;width: 200rpx; height: 200rpx;margin-right: 50rpx;">
<l-painter-qrcode css="width: 160rpx; height: 160rpx;margin:20rpx;"
:text="qrUrl"></l-painter-qrcode>
</l-painter-view>
</l-painter-view>
@ -284,7 +242,8 @@
<view class="btnList">
<button open-type="share" class="no-border-button" plain="true">
<image src="/static/detail/savewec.png" mode="" style="width: 88rpx;height: 88rpx;margin-bottom: 15rpx;"></image>
<image src="/static/detail/savewec.png" mode=""
style="width: 88rpx;height: 88rpx;margin-bottom: 15rpx;"></image>
微信
</button>
<!-- <view class="save" @click.stop="sharePoster()">
@ -292,16 +251,17 @@
朋友圈
</view> -->
<view class="save" @click="save()">
<image src="/static/detail/donwload.png" mode="" style="width: 88rpx;height: 88rpx;margin-bottom: 15rpx;"></image>
<image src="/static/detail/donwload.png" mode=""
style="width: 88rpx;height: 88rpx;margin-bottom: 15rpx;"></image>
保存图片
</view>
</view>
<canvas canvas-id="myCanvas"
<!-- <canvas canvas-id="myCanvas"
style="position: absolute;top:256rpx;left: 48rpx; width: 661rpx;height:1075rpx; visibility: hidden;z-index: 10;">
</canvas>
</u-overlay>
</canvas> -->
</view>
</view>
</view>
@ -481,7 +441,9 @@ export default {
// },
//
goHome() {
if (this.isShare == 1) {
if (getCurrentPages().length > 1) {
uni.navigateBack()
} else {
uni.switchTab({
url: "/pages/index/index"
})
@ -491,13 +453,12 @@ export default {
this.overlay = false;
},
overlayShow() {
const token = uni.getStorageSync('token')
const token = uni.getStorageSync('token');
if (token) {
if(this.path == ''){
let that = this;
uni.showToast({
title: '海报生成中,请稍等',
title: '海报生成中...',
icon: 'none',
duration: 2000,
complete: function() {
@ -505,13 +466,10 @@ export default {
setTimeout(() => {
//
that.overlay = true;
}, 1000);
}, 2000);
}
});
}else{
this.overlay = true;
}
} else {
@ -772,7 +730,7 @@ export default {
sharePoster() { //
let that = this
this.base64ToFilePath(this.path, (filePath) => {
console.log(filePath);
//console.log(filePath);
wx.showShareImageMenu({ //
path: filePath,
success: (res) => {
@ -1575,9 +1533,10 @@ export default {
}
.pos {
position: relative;
position: fixed;
width: 100%;
height: 100%;
z-index: 99999;
.posterClose {
position: absolute;
// right: 8rpx;
@ -1699,6 +1658,7 @@ export default {
font-family: PingFang SC Regular, PingFang SC Regular;
font-weight: 400;
font-size: 28rpx;
.save {
margin-top: 60rpx;
display: flex;
@ -1788,9 +1748,11 @@ export default {
width: 30rpx;
color: #323232;
&::after { content: '%';
&::after {
content: '%';
}
}
// #endif
}
</style>

View File

@ -68,7 +68,7 @@
:urls="item.join_info.users"
keyName="avatar"
size="30"
maxCount="5"
maxCount="1"
gap="0.4"
></u-avatar-group>
<image
@ -79,9 +79,9 @@
margin-left: -20rpx;
"
></image>
<view style="margin-left: 20rpx;vertical-align: middle;font-size: 26rpx;">{{ Number(item.join_info.people_number) + "人已上车" }}</view>
<view style="margin-left: 20rpx;vertical-align: middle;font-size: 24rpx;">{{ Number(item.join_info.people_number) + "人已上车" }}</view>
</view>
<view style="font-size: 26rpx; width: 40%;">
<view style="font-size: 26rpx; width: 24%;">
<text>核销</text>
<text style="color: orangered;">{{item.verification_num}}</text>
<text>/{{item.stock}}</text>
@ -246,7 +246,8 @@
//
getHotList(val) {
let auth_status = val == '0' ? this.auth_status : '';
console.log(val);
let auth_status = val == '0' ? 0 : '1';
let vals = val == '0' ? '' : val;
uni.$u.http
.get("/api/school.new_activity/activity_list", {

View File

@ -6,19 +6,42 @@
<view class="list">
<view class="list-item">
<view class="left">
<u-avatar :src="avatar" shape="circle" size="59"></u-avatar>
头像设置
</view>
<view class="right" @click="upload">
更换头像
<u-icon name="arrow-right" color="#babdc7"></u-icon>
<u-avatar :src="avatar" shape="circle" size="35"></u-avatar>
<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="list-item">
<view class="left">
昵称
昵称设置
</view>
<view class="right">
<u--input v-model="niName" placeholder="请输入昵称" border="none" inputAlign="right"></u--input>
<u--input color="#9C9C9C" v-model="niName" placeholder="请输入昵称" border="none"
inputAlign="right"></u--input>
</view>
</view>
<view class="list-item" @click="openUrl('/packageB/wallet/add_bank')">
<view class="left">
银行卡
</view>
<view class="right">
<view>
<u-icon name="arrow-right"></u-icon>
</view>
</view>
</view>
<view class="list-item" @click="openSfz()">
<view class="left">
身份信息
</view>
<view class="right">
<view>
<text v-if="sfInfo.status==-1">未认证</text>
<text v-if="sfInfo.status==1">已认证</text>
</view>
<view><u-icon name="arrow-right"></u-icon></view>
</view>
</view>
<!-- <view class="list-item">
@ -195,7 +218,8 @@
}, {
name: '综合管理'
}]
]
],
sfInfo: {}
}
},
onLoad(options) {
@ -211,13 +235,34 @@
// this.handelData()
this.getDetail()
},
onShow() {
this.getSfInfo();
},
methods: {
openSfz(){
if(this.sfInfo.status==-1){
uni.navigateTo({
url:'/packageB/card/index'
})
}
},
getSfInfo() {
uni.$u.http.get('/api/school.real_name/info').then(res => {
console.log(res);
this.sfInfo = res.data;
})
},
out() {
uni.clearStorageSync()
uni.reLaunch({
url: '/pages/my/index'
})
},
openUrl(url) {
uni.navigateTo({
url: url
})
},
submit() {
console.log(this.avatar, 'this.avatar')
uni.$u.http.post('/api/user/profile', {
@ -378,7 +423,10 @@
type: 'success',
message: '修改成功'
})
uni.setStorageSync('userInfo', { ...uni.getStorageSync('userInfo'), avatar: avatar });
uni.setStorageSync('userInfo', {
...uni.getStorageSync('userInfo'),
avatar: avatar
});
this.show5 = false
this.getDetail()
}
@ -487,11 +535,11 @@
min-height: calc(100vh - 166rpx - 88rpx - 44rpx);
.card {
width: 690rpx;
width: 100%;
background: #fff;
border-radius: 30rpx;
box-sizing: border-box;
padding: 40rpx 30rpx;
padding: 0rpx 30rpx 30rpx 30rpx;
.list {
.list-item {
@ -500,52 +548,15 @@
justify-content: space-between;
font-size: 30rpx;
color: #181818;
height: 91rpx;
line-height: 91rpx;
height: 105rpx;
line-height: 105rpx;
border-bottom: 1rpx solid #f5f6fa;
&:nth-child(1) {
height: 148rpx;
line-height: 148rpx;
.right {
display: flex;
align-items: center;
font-size: 30rpx;
color: #babdc7;
}
}
&:nth-child(4) {
.right {
display: flex;
align-items: center;
}
}
&:nth-child(5) {
.right {
display: flex;
align-items: center;
}
}
&:nth-child(6) {
.right {
display: flex;
align-items: center;
}
}
&:nth-child(7) {
.right {
display: flex;
align-items: center;
}
}
&:last-child {
border-bottom: none;
color: #202020;
}
}
}
@ -583,6 +594,7 @@
align-items: center;
justify-content: center;
margin: 0 10rpx;
img {
width: 150rpx;
height: 150rpx;

173
packageB/card/index.vue Normal file
View File

@ -0,0 +1,173 @@
<template>
<view style="page">
<view style="padding: 30rpx;">
<view>
<text style="color: #FF4810;font-size: 28rpx;">*</text>
<text>上传身份证</text>
</view>
<view
style="display: flex;justify-content: space-between;align-items: center;gap: 30rpx;margin-top: 30rpx;">
<view style="width: 50%;text-align: center;">
<u-upload @afterRead="afterRead($event,0)" :previewFullImage="true"
@delete="deletePic" @oversize="oversize" :maxSize="1 * 1024 * 1024"
:maxCount="1">
<view style="width: 330rpx;height: 100px;">
<image v-if="form.positive_img==''" src="/static/index/zheng.png" style="width: 100%;" mode="widthFix"></image>
<image v-else :src="imgUrl+form.positive_img" style="width: 330rpx;height: 100px;" mode="aspectFit"></image>
</view>
</u-upload>
<view style="font-size: 24rpx;margin-top: 30rpx;">点击上传身份证正面</view>
</view>
<view style="width: 50%;text-align: center;">
<u-upload @afterRead="afterRead($event,1)" :previewFullImage="true"
@delete="deletePic" @oversize="oversize" :maxSize="1 * 1024 * 1024"
:maxCount="1">
<view style="width: 330rpx;height: 100px;">
<image v-if="form.back_img==''" src="/static/index/bei.png" style="width: 100%;" mode="widthFix"></image>
<image v-else :src="imgUrl+form.back_img" style="width: 330rpx;height: 100px;" mode="aspectFit"></image>
</view>
</u-upload>
<view style="font-size: 24rpx;margin-top: 30rpx;">点击上传身份证反面</view>
</view>
</view>
</view>
<view style="height: 10rpx;width: 100%;background: #F8F8F8;margin-top: 20rpx;"></view>
<view style="padding: 30rpx;">
<view>
<text style="color: #FF4810;font-size: 28rpx;">*</text>
<text>身份证信息</text>
</view>
<view>
<view style="display: flex;justify-content: space-between;align-items: center;padding: 40rpx 0px;">
<view>
姓名
</view>
<view>
<input type="number" placeholder="请填写真实姓名" class="input" v-model="form.name" />
</view>
</view>
<view style="height: 1px;width: 100%;background-color: #F0F0F0;"></view>
<view style="display: flex;justify-content: space-between;align-items: center;padding: 40rpx 0px 0px 0px;">
<view>
身份证号
</view>
<view>
<input type="number" placeholder="请填写身份证号" class="input" v-model="form.idnum" />
</view>
</view>
</view>
</view>
<view style="height: 10rpx;width: 100%;background: #F8F8F8;"></view>
<view class="btn_1" @click="save()">提交信息</view>
</view>
</template>
<script>
export default {
data() {
return {
imgUrl:uni.$u.http.config.baseURL,
form:{
name:'',
idnum:'',
positive_img:'',
back_img:'',
}
}
},
onShow() {
this.getInfo();
},
methods: {
getInfo(){
uni.$u.http.get('/api/school.real_name/info').then(res=>{
console.log(res);
if(res.data.card_info!='' && res.data.card_info!=null){
this.form.name = res.data.card_info.name;
this.form.idnum = res.data.card_info.idnum;
this.form.positive_img = res.data.card_info.positive_img;
this.form.back_img = res.data.card_info.back_img;
}
})
},
save(){
if(this.form.positive_img=='' || this.form.back_img==''){
uni.$u.toast('请上传身份证照片');
return;
}
if(this.form.name=='' || this.form.idnum==''){
uni.$u.toast('请填写身份证信息');
return;
}
uni.$u.http.post('/api/school.real_name/save',this.form).then(res=>{
console.log(res);
if(res.code==1){
uni.$u.toast('提交成功');
}else{
uni.$u.toast(res.data.msg);
}
})
},
async afterRead(item,index){
console.log(item);
const result = await this.uploadFilePromise(item.file.url, 'user');
if(index == 0){
this.form.positive_img = result;
}else{
this.form.back_img = result;
}
},
uploadFilePromise(url, category,index) {
console.log('category', category)
return new Promise((resolve, reject) => {
let a = uni.uploadFile({
url: 'https://naweigetetest2.hschool.com.cn/api/common/upload', //
filePath: url,
name: 'file',
formData: {
user: 'test',
category: category
},
header: {
"token": uni.getStorageSync("token")
},
success: (res) => {
resolve(JSON.parse(res.data).data.url);
},
fail: (err) => {
reject(err);
}
});
});
},
}
}
</script>
<style scoped lang="scss">
.page {
font-family: PingFang SC, PingFang SC;
}
.input {
text-align: right;
font-size: 26rpx;
color: #343434;
line-height: 32rpx;
width: 450rpx;
}
.btn_1 {
width: 95%;
height: 90rpx;
background: #323232;
border-radius: 198rpx 198rpx 198rpx 198rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
font-weight: 400;
font-size: 32rpx;
color: #BBFC5B;
line-height: 90rpx;
text-align: center;
margin: 0 auto;
margin-top: 50rpx;
}
</style>

View File

@ -0,0 +1,174 @@
<template>
<view class="page">
<view style="margin-top: 20rpx;padding: 0 30rpx;">
<view style="display: flex;align-items: center;justify-content: space-between;padding: 20rpx 0;">
<view style="font-size: 32rpx;font-weight: 600;">
开户名
</view>
<view style="width: 80%;">
<input placeholder-class="plasty" placeholder="请输入您的姓名" class="input" v-model="form.name" />
</view>
</view>
<view style="height: 1px;background-color: #F0F0F0;margin: 20rpx 0;"></view>
<view style="display: flex;align-items: center;justify-content: space-between;padding: 20rpx 0;">
<view style="font-size: 32rpx;font-weight: 600;">
身份证
</view>
<view style="width: 80%;">
<input placeholder-class="plasty" placeholder="请输入您的身份证号" class="input" v-model="form.id_number" />
</view>
</view>
<view style="height: 1px;background-color: #F0F0F0;margin: 20rpx 0;"></view>
<view style="display: flex;align-items: center;justify-content: space-between;padding: 20rpx 0;">
<view style="font-size: 32rpx;font-weight: 600;">
开户行
</view>
<view style="width: 80%;">
<input placeholder-class="plasty" placeholder="请输入开户行例:(工商银行南昌路支行)" class="input"
v-model="form.bank_name" />
</view>
</view>
<view style="height: 1px;background-color: #F0F0F0;margin: 20rpx 0;"></view>
<view style="display: flex;align-items: center;justify-content: space-between;padding: 20rpx 0;">
<view style="font-size: 32rpx;font-weight: 600;">
卡号
</view>
<view style="width: 80%;">
<input placeholder-class="plasty" placeholder="银行卡号" class="input" v-model="form.bank_user_name" />
</view>
</view>
<view style="height: 1px;background-color: #F0F0F0;margin: 20rpx 0;"></view>
</view>
<view class="btn_1" @click="save()">保存</view>
</view>
</template>
<script>
export default {
data() {
return {
form: {
name: '',
bank_name: '',
bank_user_name: '',
id_number: '',
},
}
},
onLoad() {
this.getBankList();
},
methods: {
getBankList() {
uni.$u.http
.get("/api/school.newactivity.settle_log/detail")
.then((res) => {
console.log(res);
if(res.data.withdrawal!=''&&res.data.withdrawal!=null){
this.form.name = res.data.withdrawal.name;
this.form.id_number = res.data.withdrawal.id_number;
this.form.bank_name = res.data.withdrawal.bank_name;
this.form.bank_user_name = res.data.withdrawal.bank_user_name;
}
});
},
save() {
if (this.form.name == '') {
uni.showToast({
title: '请输入开户名',
icon: "none",
duration: 1500,
});
return;
}
if (this.form.bank_name == '') {
uni.showToast({
title: '请输入开户行',
icon: "none",
duration: 1500,
});
return;
}
if (this.form.bank_user_name == '') {
uni.showToast({
title: '请输入银行卡号',
icon: "none",
duration: 1500,
});
return;
}
if (this.form.id_number == '') {
uni.showToast({
title: '请输入身份证号',
icon: "none",
duration: 1500,
});
return;
}
uni.$u.http
.post("/api/school.newactivity.settle_log/save", {
name: this.form.name,
bank_name: this.form.bank_name,
bank_user_name: this.form.bank_user_name,
id_number: this.form.id_number,
})
.then((res) => {
console.log(res);
if (res.code == 1) {
uni.showToast({
title: '保存成功',
icon: "none",
duration: 1500,
complete: function () {
setTimeout(function () {
uni.navigateBack();
}, 1500);
}
});
} else {
uni.showToast({
title: res.msg,
icon: "none",
duration: 2000,
});
}
})
}
}
}
</script>
<style lang="scss" scoped>
.page {
font-family: PingFang SC Bold, PingFang SC Bold;
}
.input {
text-align: right;
width: 100%;
}
.plasty {
font-weight: 300;
font-size: 28rpx;
color: #9C9C9C;
}
.btn_1 {
width: 95%;
height: 90rpx;
background: #323232;
border-radius: 198rpx 198rpx 198rpx 198rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
font-weight: 400;
font-size: 32rpx;
color: #BBFC5B;
line-height: 90rpx;
text-align: center;
margin: 0 auto;
position: fixed;
bottom: 5%;
left: 0;
right: 0;
}
</style>

View File

@ -1,6 +1,41 @@
<template>
<view>
123
<view class="bank-container">
<view style="background-color: #ffffff;border-radius: 0rpx 0rpx 44rpx 44rpx;padding:40rpx 30rpx;">
<view @click="addBank()"
style="display: flex;justify-content: space-between;align-items: center;background: #323232;height: 220rpx;width: 100%;border-radius: 18rpx;">
<view v-if="bankInfo == ''" style="display: flex;align-items: center;padding-left: 30rpx;">
<image src="/static/add.png" style="width: 40rpx;height: 40rpx;"></image>
<view style="color: #ffffff;font-size: 32rpx;margin-left: 20rpx;">添加银行卡</view>
</view>
<view v-if="bankInfo != ''" style="padding-left: 30rpx;">
<view style="color: #ffffff;font-size: 32rpx;">{{ bankInfo.bank_name }}</view>
<view
style="color: #ffffff;font-size: 32rpx;margin-top: 20rpx;font-family: PingFang SC, PingFang SC;">
{{ formatBankCard(bankInfo.bank_user_name) }}</view>
</view>
<view style="padding-right: 20rpx;">
<u-icon color="#BBFC5B" name="arrow-right"></u-icon>
</view>
</view>
</view>
<view style="background-color: #ffffff;border-radius:44rpx;padding:40rpx 30rpx;margin-top: 20rpx;">
<view style="font-size: 28rpx;color: #3D3D3D;font-weight: 400;">
提现金额
</view>
<view style="margin-top: 20rpx;font-family: D-DIN-PRO, D-DIN-PRO;">
<text style="font-size: 28rpx;color: #3D3D3D;font-weight: 700;"></text>
<text style="font-size: 70rpx;color: #3D3D3D;font-weight: 700;margin-left: 20rpx;">{{
settleInfo.settled_amount }}</text>
</view>
<view style="background-color: #F0F0F0;height: 1px;width: 100%;margin-top: 20rpx;"></view>
<view style="font-size: 24rpx;color: #9C9C9C;font-weight: 400;margin-top: 30rpx;">
默认全部提现具体到账时间以银行为准
</view>
<view style="color: #FF4810;font-size: 24rpx;font-weight: 400;margin-top: 30rpx;">
若您的提现账户为跨行或跨区域的对公账户银行会收取额外 手续费具体金额以实际到账为准
</view>
<view class="btn_1" @click="withdraw()">确认提现</view>
</view>
</view>
</template>
@ -8,15 +43,133 @@
export default {
data() {
return {
bankInfo: '',
settleInfo: {},
}
},
onShow() {
this.getBankList();
this.getUserInfo();
},
methods: {
getBankList() {
uni.$u.http
.get("/api/school.newactivity.settle_log/detail")
.then((res) => {
console.log(res);
this.bankInfo = res.data.withdrawal==''||res.data.withdrawal==null?'':res.data.withdrawal;
});
},
//4252 **** **** **** 2563
formatBankCard(cardNumber) {
//
const cleaned = cardNumber.toString().replace(/\D/g, '');
// 84
if (cleaned.length < 8) return cardNumber;
// 44
const firstPart = cleaned.substring(0, 4);
const lastPart = cleaned.substring(cleaned.length - 4);
//
return `${firstPart}${'*'.repeat(12)}${lastPart}`;
},
withdraw() {
if(this.bankInfo==''||this.bankInfo==null){
uni.showToast({
title: '请先添加银行卡',
icon: 'none',
duration: 2000
})
return;
}
//
uni.showModal({
title: '提示',
content: '确认提现?',
success: (res) => {
if (res.confirm) {
this.withdrawDo();
}
}
});
},
withdrawDo() {
//
uni.$u.http
.post("/api/school.newactivity.settle_log/withdrawal")
.then((res) => {
console.log(res);
if(res.code==1){
uni.showToast({
title: '提现成功',
icon: 'success',
duration: 2000,
complete: function () {
setTimeout(function () {
uni.navigateBack();
}, 1500);
}
})
}else{
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
}
});
},//
getUserInfo() {
uni.$u.http.get('/api/user/index', {}).then(res => {
if (res.code == 1) {
uni.setStorageSync('userInfo', res.data.user_info)
uni.setStorageSync('settleInfo', res.data.settle_info)
uni.setStorageSync('activityInfo', res.data.activity_info)
this.settleInfo = res.data.settle_info;
} else {
uni.showToast({
title: '登陆失败',
icon: 'error',
duration: 2000
})
}
}).catch(error => {
console.log('error', error);
this.showPopup = false
uni.showToast({
title: '登陆失败',
icon: 'error',
duration: 2000
})
})
},
addBank(){
uni.navigateTo({
url: '/packageB/wallet/add_bank'
})
},
}
}
</script>
<style>
<style scoped lang="scss">
.bank-container {
font-family: PingFang SC, PingFang SC;
background: #F7F7F7;
min-height: 100vh;
}
.btn_1 {
width: 100%;
height: 90rpx;
background: #323232;
border-radius: 198rpx 198rpx 198rpx 198rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
font-weight: 400;
font-size: 32rpx;
color: #BBFC5B;
line-height: 90rpx;
text-align: center;
margin-top: 70rpx;
}
</style>

View File

@ -5,17 +5,19 @@
<view style="color: #FFFFFF;font-size: 26rpx;padding: 30rpx 30rpx 0rpx 30rpx;">当前余额</view>
<view style="display: flex;justify-content: space-between;align-items: center;padding: 30rpx;">
<view style="color: #FFFFFF;font-size: 60rpx;font-weight: 900;">
{{settleInfo.settled_amount?settleInfo.settled_amount:0}}</view>
{{settleInfo.settled_amount?settleInfo.settled_amount:0}}
</view>
<view @click="openUrl('/packageB/wallet/bank')">
<view
style="text-align: center;width: 169rpx;height: 70rpx;background: #BBFC5B;line-height: 70rpx;color: #3D3D3D;font-size: 32rpx;border-radius: 70rpx;">
提现</view>
</view>
</view>
<view style="color: #FFFFFF;font-weight: 400;font-size: 26rpx;padding-left: 30rpx;">
<view style="display: flex;align-items: center;color: #FFFFFF;font-weight: 400;font-size: 26rpx;padding-left: 30rpx;">
<text>预计待入账</text>
<text
style="padding-left: 20rpx;">{{settleInfo.expected_incoming_amount?settleInfo.expected_incoming_amount:0}}</text>
<image @click="tipsShow = true" src="/static/tips.png" style="width: 25rpx;height: 25rpx;margin-left: 10rpx;"></image>
<text style="padding: 0rpx 20rpx;">|</text>
<text>累计收益</text>
<text
@ -23,8 +25,7 @@
</view>
</view>
</view>
<view
style="background-color: #FFFFFF;border-radius:44rpx;padding:45rpx 30rpx;margin-top: 30rpx;">
<view style="background-color: #FFFFFF;border-radius:44rpx;padding:45rpx 30rpx;margin-top: 30rpx;">
<view style="display: flex;gap: 70rpx;padding-bottom: 40rpx;">
<view @click="openTab(0)">
<view :class="tabIndex==0?'act':'no_act'">收益明细</view>
@ -47,7 +48,8 @@
<text v-if="item.status==3">{{formatTimestamp(item.settletime)}}</text>
<text v-if="item.status==2">{{formatTimestamp(item.createtime)}}</text>
</view>
<view style="font-size: 25rpx;color: #FF4810;font-weight: 400;">[ 活动订单总金额x{{item.fee_scale*100}}%平台费率=待入账金额 ]
<view style="font-size: 25rpx;color: #FF4810;font-weight: 400;">[
活动订单总金额x{{item.fee_scale*100}}%平台费率=待入账金额 ]
</view>
</view>
<view style="text-align: center;">
@ -67,12 +69,17 @@
<view v-if="tabIndex==1" v-for="item in list">
<view style="display: flex;justify-content: space-between;align-items: center;">
<view>
<view style="font-size: 30rpx;color: #3D3D3D;font-weight: 600;">工商银行0514</view>
<view style="font-size: 26rpx;color: #9C9C9C;font-weight: 400;margin: 30rpx 0rpx;">2025.05.25
14:35:36</view>
<view style="font-size: 30rpx;color: #3D3D3D;font-weight: 600;">
{{item.bank_name}}{{cardSlice(item.bank_user_name)}}</view>
<view style="font-size: 26rpx;color: #9C9C9C;font-weight: 400;margin: 30rpx 0rpx;">
<text v-if="item.status==1">{{formatTimestamp(item.createtime)}}</text>
<text
v-if="item.status==3 || item.withdrawal_status==2">{{formatTimestamp(item.examinetime)}}</text>
<text v-if="item.withdrawal_status==3">{{formatTimestamp(item.paytime)}}</text>
</view>
</view>
<view style="text-align: center;">
<view>+55.00</view>
<view style="margin-bottom: 20rpx;">+{{item.real_price}}</view>
<view v-if="item.status==1"
style="background: #E6EEFF;width: 90rpx;height: 32rpx;border-radius: 4rpx 4rpx 4rpx 4rpx;text-align: center;margin: 0 auto;">
<view style="color: #2F78CD;font-size: 22rpx;line-height: 32rpx;">审核中</view>
@ -81,23 +88,47 @@
style="background: #F8EAEA;width: 90rpx;height: 32rpx;border-radius: 4rpx 4rpx 4rpx 4rpx;text-align: center;margin: 0 auto;">
<view style="color: #A62B2B;font-size: 22rpx;line-height: 32rpx;">失败</view>
</view>
<view v-if="item.status==2 && item.withdrawal_status==3"
<view v-if="item.withdrawal_status==3"
style="background: #EAF8EB;width: 90rpx;height: 32rpx;border-radius: 4rpx 4rpx 4rpx 4rpx;text-align: center;margin: 0 auto;">
<view style="color: #2BA635;font-size: 22rpx;line-height: 32rpx;">已打款</view>
</view>
<view v-if="item.status==2 && item.withdrawal_status==2"
<view v-if="item.withdrawal_status==2"
style="background: #FFF3ED;width: 90rpx;height: 32rpx;border-radius: 4rpx 4rpx 4rpx 4rpx;text-align: center;margin: 0 auto;">
<view style="color: #FF783A;font-size: 22rpx;line-height: 32rpx;">打款中</view>
</view>
</view>
</view>
<view style="font-weight: 400;color: #3D3D3D;font-size: 24rpx;background: #EEEEEE;border-radius: 6rpx;padding: 30rpx 20rpx;">
银行卡异常无法打款金额已返还账户
<view v-if="item.status==3"
style="font-weight: 400;color: #3D3D3D;font-size: 24rpx;background: #EEEEEE;border-radius: 6rpx;padding: 30rpx 20rpx;">
{{ item.reason }}
</view>
<view style="background: #F0F0F0;width: 100%;height: 1px;margin: 40rpx 0rpx;"></view>
</view>
<u-loadmore style="margin-bottom: 60rpx;" :status="loadStatus" />
</view>
<u-popup @touchmove.native.stop.prevent :custom-style="popupStyle" :closeable="false" :show="tipsShow" :round="10" mode="center"
:closeOnClickOverlay="false">
<view style="font-size: 32rpx;font-weight: 400;margin: 12rpx 0 24rpx 0;">预计待入账金额说明</view>
<view style="font-size: 26rpx;color: #3D3D3D;padding-bottom: 20px;line-height: 20px;">
<text style="font-weight: 600;">1. 活动结束时:</text>
<text>您的可入账金额会显示为"预计待入账金额</text>
</view>
<view style="font-size: 26rpx;color: #3D3D3D;padding-bottom: 20px;line-height: 20px;">
<text style="font-weight: 600;">2. 7天售后期:</text>
<text>活动结束后7天内若发生售后问题(如退款)对应金额将从预计待入账"中扣除您的可入账金额会显示为"预计待入账金额</text>
</view>
<view style="font-size: 26rpx;color: #3D3D3D;padding-bottom: 20px;line-height: 20px;">
<text style="font-weight: 600;">3. 查看售后进度:</text>
<text>您可在我发布的-已售后中查询具体售后单详情</text>
</view>
<view style="font-size: 26rpx;color: #3D3D3D;padding-bottom: 20px;line-height: 20px;">
<text style="font-weight: 600;">4. 最终可提现金额</text>
<text>7天售后期结束后剩余未扣除的金额即可全额提现</text>
</view>
<view class="popup-footer">
<view class="zhixiao shows_zhidao" @click="tipsShow = false">我已知晓</view>
</view>
</u-popup>
</view>
</template>
@ -110,16 +141,25 @@
list: [],
settleInfo: {},
loadStatus: 'loading',
}
tipsShow:false,
popupStyle: {
width: '600rpx',
padding: '24rpx 24rpx 42rpx 24rpx',
height: '660rpx',
margin: '0 auto', //
display: 'flex',
justifyContent: 'start',
alignItems: 'center',
flexColumn: 'column'
},
onLoad() {
this.getSyList();
}
},
onShow() {
this.token = uni.getStorageSync('token');
if (this.token) {
this.getUserInfo();
}
this.openTab(0);
},
onReachBottom() {
this.page += 1;
@ -224,6 +264,9 @@
const seconds = String(date.getSeconds()).padStart(2, "0");
return `${year}.${month}.${day} ${hours}:${minutes}:${seconds}`;
},
cardSlice(str) {
return str.slice(-4); // 4
},
openUrl(url) {
uni.navigateTo({
url: url
@ -258,4 +301,36 @@
color: #323232;
font-weight: 600;
}
.popup-footer {
display: flex;
justify-content: center;
align-items: center;
// margin: 30rpx 0;
height: 146rpx;
.zhixiao {
height: 100rpx;
background: #E8E8E8;
//border-radius: 401rpx 401rpx 401rpx 401rpx;
font-family: YouSheBiaoTiHei;
font-weight: 400;
font-size: 36rpx;
color: #9C9C9C;
line-height: 32rpx;
display: flex;
justify-content: center;
align-items: center;
position: absolute;
width: 100%;
bottom: 0;
border-radius: 0rpx 0rpx 20rpx 20rpx;
}
.shows_zhidao {
background-color: #323232;
color: #BBFC5B;
font-weight: 400;
font-size: 36rpx;
}
}
</style>

View File

@ -306,8 +306,19 @@
"style": {
"navigationBarTitleText": "提现"
}
}, {
"path": "wallet/add_bank",
"style": {
"navigationBarTitleText": "银行卡信息"
}
}, {
"path": "card/index",
"style": {
"navigationBarTitleText": "身份信息"
}
}]
}],
}
],
"preloadRule": { //
"pages/index/index": { // pages/indexAB
"network": "all",

BIN
static/add.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
static/order_add.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

BIN
static/tips.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 737 B

View File

@ -6,7 +6,7 @@
<view v-for="(item, index) in protocolArr" :key="index">
<!-- <text @click="protocolClick(index)">{{protocolArr[index]}}</text> -->
<text>免责声明</text>
<text style="color: #0CA013;"> 免责声明 </text>
<span v-if="index < (protocolArr.length - 1)">{{" "}}</span>
@ -57,19 +57,18 @@
<style lang="scss" scoped>
// #008CFF
$themeColor: #0CA013;
$themeColor: #323232;
.protocol_box {
display: flex;
flex-wrap:nowrap;
justify-content: flex-start;
justify-content: center;
align-items: center;
margin-top: 20rpx;
//margin-top: 20rpx;
// margin-left: 40rpx;
width: 90%;
font-size: 28rpx;
color: $themeColor;
font-size: 13px;