初步接口测完
This commit is contained in:
parent
3f3c0095c8
commit
e6ec7ecd96
@ -18,10 +18,11 @@ export default {
|
||||
},
|
||||
|
||||
buildingList:(community_id,status)=>request.get('/api/order/community_building/count',{community_id,status}),
|
||||
list:(data)=>request.get('/api/order/deliveryman/list',data,true),
|
||||
list:(data)=>request.get('/api/order/deliveryman/list',data,{delayLoading:true}),
|
||||
detail:(orderid)=>request.get(`/api/order/${orderid}`),
|
||||
|
||||
statusDetail:(community_id)=>request.get('/api/order/status/count',{community_id}),
|
||||
receive:(orderid)=>request.post(`/api/order/${orderid}/deliveryman/receive`),
|
||||
pickup:(orderid)=>request.post(`/api/order/${orderid}/deliveryman/pickup`),
|
||||
complete:(orderid,images)=>request.post(`/api/order/${orderid}/deliveryman/complete`,{images:JSON.stringify(images)})
|
||||
complete:(orderid,images)=>request.post(`/api/order/${orderid}/deliveryman/complete`,{images:images})
|
||||
}
|
||||
@ -4,7 +4,7 @@ let app = getApp();
|
||||
const sendRequest = (options)=>{
|
||||
if(!app)app = getApp();
|
||||
let timer;
|
||||
if(options.delayLoading){
|
||||
if(options.options.delayLoading){
|
||||
timer = setTimeout(()=>{
|
||||
wx.showLoading({
|
||||
title: '加载中...',
|
||||
@ -23,16 +23,21 @@ const sendRequest = (options)=>{
|
||||
if(result.data.code==200){
|
||||
rs(result.data.data);
|
||||
}else{
|
||||
|
||||
if(!options.options.noTips){
|
||||
wx.showToast({
|
||||
icon:'error',
|
||||
title: result.data.message,
|
||||
});
|
||||
}
|
||||
rj(result.data);
|
||||
}
|
||||
}else if(result.statusCode==401){
|
||||
wx.navigateTo({
|
||||
url: '/pages/login/login',
|
||||
})
|
||||
}else{
|
||||
rj(result.data);
|
||||
}
|
||||
},
|
||||
|
||||
@ -54,16 +59,16 @@ const sendRequest = (options)=>{
|
||||
|
||||
export default {
|
||||
baseUrl:baseUrl,
|
||||
get(url,data,delayLoading){
|
||||
return sendRequest({url,method:'get',data,delayLoading});
|
||||
get(url,data,options){
|
||||
return sendRequest({url,method:'get',data,options:options||{}});
|
||||
},
|
||||
post(url,data){
|
||||
return sendRequest({url,method:'post',data});
|
||||
post(url,data,options){
|
||||
return sendRequest({url,method:'post',data,options:options||{}});
|
||||
},
|
||||
put(url,data){
|
||||
return sendRequest({url,method:'put',data});
|
||||
put(url,data,options){
|
||||
return sendRequest({url,method:'put',data,options:options||{}});
|
||||
},
|
||||
delete(url,data){
|
||||
return sendRequest({url,method:'delete',data});
|
||||
delete(url,data,options){
|
||||
return sendRequest({url,method:'delete',data,options:options||{}});
|
||||
}
|
||||
}
|
||||
17
api/user.js
17
api/user.js
@ -9,11 +9,26 @@ export default {
|
||||
login:(phone,password)=>request.post('/api/user/password-login',{phone,password,role:'deliveryman'}),
|
||||
userInfo:()=>request.get('/api/user/info'),
|
||||
summary:()=>request.get('/api/account/summary'),
|
||||
orderSummary:()=>request.get('/api/order/deliveryman/summary'),
|
||||
incomeList:(data)=>request.get('/api/account/details',data),
|
||||
getRNAuth:()=>request.get('/api/user/auth'),
|
||||
getRNAuth:()=>request.get('/api/user/auth',{noTips:true}),
|
||||
setRNAuth:(data)=>request.post('/api/user/auth',data),
|
||||
|
||||
bankCard:{
|
||||
list:()=>request.get('/api/bank-cards'),
|
||||
add:(data)=>request.post('/api/bank-cards',data),
|
||||
delete:(card_id)=>request.delete(`/api/bank-cards/${card_id}`)
|
||||
},
|
||||
verifyCode:(phone)=>request.post('/api/user/send-code',{phone}),
|
||||
modifyPassword:(new_password,verify_code)=>request.post('/api/user/change-password',{new_password,verify_code}),
|
||||
|
||||
withdraw:{
|
||||
add:(bank_card_id,amount)=>request.post('/api/withdraw',{bank_card_id,amount}),
|
||||
list:(status)=>request.get('/api/withdraw/user',status?{status}:{}),
|
||||
},
|
||||
|
||||
uploadImg(file,progress){
|
||||
if(!app)app = getApp();
|
||||
return new Promise((rs,rj)=>{
|
||||
const task = wx.uploadFile({
|
||||
filePath: file.tempFilePath,
|
||||
|
||||
46
app.js
46
app.js
@ -1,8 +1,9 @@
|
||||
import userApi from './api/user';
|
||||
const token = wx.getStorageSync('accessToken');
|
||||
|
||||
// console.log()
|
||||
const date = new Date();
|
||||
App({
|
||||
verifyCodeWaitingTime:60,
|
||||
onLaunch() {
|
||||
if(!token){
|
||||
wx.navigateTo({
|
||||
@ -47,6 +48,49 @@ App({
|
||||
this.globalData.summaryGetTime = new Date();
|
||||
return data;
|
||||
},
|
||||
validateForm(rules,page){
|
||||
const result = [];
|
||||
for(var key in rules){
|
||||
((rules[key] instanceof Array)?rules[key]:[rules[key]]).map((item)=>{
|
||||
let valid = true;
|
||||
//非空
|
||||
if(item.required){
|
||||
if(page.data[key].trim()==''){
|
||||
valid = false;
|
||||
}
|
||||
}else if(item.length){
|
||||
//绝对长度
|
||||
if(page.data[key].trim().length!=item.length){
|
||||
valid = false;
|
||||
}
|
||||
}
|
||||
if(valid){
|
||||
page.setData({
|
||||
[`${key}Message`]:''
|
||||
});
|
||||
}else{
|
||||
page.setData({
|
||||
[`${key}Message`]:item.message
|
||||
});
|
||||
result.push({
|
||||
[key]:item.message
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
return result;
|
||||
},
|
||||
validateInput(rule,page){
|
||||
if(rule.required){
|
||||
if(page.data[key].trim()==''){
|
||||
page.setData({
|
||||
[`${key}Message`]:rule.message
|
||||
});
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
globalData: {
|
||||
userInfo: null,
|
||||
accessToken:token,
|
||||
|
||||
4
app.json
4
app.json
@ -9,7 +9,9 @@
|
||||
"pages/user/income/index",
|
||||
"pages/user/rnAuth/index",
|
||||
"pages/user/bank/index/index",
|
||||
"pages/user/bank/editor/index"
|
||||
"pages/user/bank/editor/index",
|
||||
"pages/user/password/index",
|
||||
"pages/withdraw/list/index"
|
||||
],
|
||||
"window": {
|
||||
"navigationBarTextStyle": "black",
|
||||
|
||||
26
app.wxss
26
app.wxss
@ -39,7 +39,7 @@ button[plain]{
|
||||
border: 1rpx solid rgba(255, 195, 0, 0.5);
|
||||
color: #FFC300;
|
||||
}
|
||||
button:not([plain])[type=primary]:hover{
|
||||
button:not([plain]):not([disabled])[type=primary]:hover{
|
||||
background-color:var(--main-hover-color);
|
||||
}
|
||||
button[type=default]{
|
||||
@ -224,7 +224,6 @@ page-container .content{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding:0 40rpx;
|
||||
min-height: 116rpx;
|
||||
font-size: 30rpx;
|
||||
position: relative;
|
||||
}
|
||||
@ -251,13 +250,28 @@ page-container .content{
|
||||
}
|
||||
.cells .cell-bd{
|
||||
flex:1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
position:relative;
|
||||
min-height: 116rpx;
|
||||
}
|
||||
.cells .cell-bd .error{
|
||||
color:red;
|
||||
position: absolute;
|
||||
left:0;bottom:10rpx;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
.cells .cell-bd input{
|
||||
height:100rpx;
|
||||
}
|
||||
.cells .cell-ft{
|
||||
position: relative;
|
||||
padding-right:40rpx;
|
||||
color:#999;
|
||||
}
|
||||
.cells .cell-ft::after{
|
||||
.cells.cells-access .cell-ft{
|
||||
padding-right: 40rpx;
|
||||
}
|
||||
.cells.cells-access .cell-ft::after{
|
||||
content:" ";
|
||||
width:24rpx;height:48rpx;
|
||||
-webkit-mask-position:0 0;
|
||||
@ -309,6 +323,10 @@ page-container .content{
|
||||
navigator button{
|
||||
vertical-align: middle;
|
||||
}
|
||||
.navigator-hover{
|
||||
background-color: transparent;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
|
||||
.list-empty{
|
||||
|
||||
@ -22,6 +22,7 @@ Page({
|
||||
userInfo:{},
|
||||
userInfoTrigger:false,
|
||||
summary:{},
|
||||
orderSummary:{},
|
||||
statusDetail:{
|
||||
created:{
|
||||
key:'CREATED',value:0,text:"待接单"
|
||||
@ -55,10 +56,7 @@ Page({
|
||||
scrollViewHeight:windowInfo.windowHeight-windowInfo.statusBarHeight-44 - 125
|
||||
});
|
||||
|
||||
app.getUserInfo().then((data)=>{
|
||||
this.setData({
|
||||
userInfo:data
|
||||
});
|
||||
this.getUserInfo().then(()=>{
|
||||
return this.loadStatusDetail();
|
||||
}).then((data)=>{
|
||||
return this.loadBuilding();
|
||||
@ -71,20 +69,30 @@ Page({
|
||||
});
|
||||
});
|
||||
},
|
||||
getUserInfo(){
|
||||
app.forceGetUserInfo().then((data)=>{
|
||||
async getUserInfo(){
|
||||
await app.forceGetUserInfo().then((data)=>{
|
||||
this.setData({
|
||||
userInfo:data,
|
||||
userInfoTrigger:false
|
||||
})
|
||||
});
|
||||
userApi.orderSummary().then((data)=>{
|
||||
this.setData({
|
||||
orderSummary:data
|
||||
})
|
||||
});
|
||||
userApi.summary().then((data)=>{
|
||||
this.setData({
|
||||
summary:data
|
||||
})
|
||||
})
|
||||
},
|
||||
setStatus(event){
|
||||
const status = event.currentTarget.dataset.item;
|
||||
console.log(status);
|
||||
//先不setData 让加载出来之后再设置
|
||||
this.loadBuilding().then((data)=>{
|
||||
this.data.statusDetailKey = status.key.toLowerCase();
|
||||
this.loadBuilding().then((data)=>{
|
||||
this.data.pager.pageIndex = 0;
|
||||
this.data.pager.loadAll = false;
|
||||
this.loadList();
|
||||
@ -109,8 +117,8 @@ Page({
|
||||
},
|
||||
async loadStatusDetail(){
|
||||
const data = await orderApi.statusDetail(this.data.userInfo.community_id);
|
||||
data.map((item)=>{
|
||||
this.data.statusDetail.completed.value = 0;
|
||||
data.map((item)=>{
|
||||
if(item.status==this.data.orderStatus.unpaid||item.status==this.data.orderStatus.completed){
|
||||
this.data.statusDetail.completed.value += item.count;
|
||||
}else{
|
||||
@ -119,14 +127,19 @@ Page({
|
||||
}
|
||||
}
|
||||
});
|
||||
console.log(this.data.statusDetail);
|
||||
this.setData({
|
||||
statusDetail:this.data.statusDetail
|
||||
})
|
||||
},
|
||||
async loadBuilding(){
|
||||
const cid = this.data.userInfo.community_id;
|
||||
const status = this.data.statusDetailKey;
|
||||
const data = await orderApi.buildingList(cid,status);
|
||||
const status = this.data.statusDetail[this.data.statusDetailKey];
|
||||
let _status = status.key;
|
||||
if(status.key==this.data.orderStatus.completed){
|
||||
_status = `${this.data.orderStatus.unpaid},${this.data.orderStatus.completed}`;
|
||||
}
|
||||
const data = await orderApi.buildingList(cid,_status);
|
||||
this.setData({
|
||||
buildingList:data
|
||||
});
|
||||
@ -146,7 +159,7 @@ Page({
|
||||
if(this.data.statusDetailKey=='completed'){
|
||||
params.status = `${this.data.orderStatus.unpaid},${this.data.orderStatus.completed}`
|
||||
}else{
|
||||
params.status = this.data.statusDetailKey;
|
||||
params.status = this.data.statusDetail[this.data.statusDetailKey].key;
|
||||
}
|
||||
orderApi.list(params).then((data)=>{
|
||||
if(this.data.pager.pageIndex==0){
|
||||
@ -206,10 +219,6 @@ Page({
|
||||
placeholderText:'请输入退款原因',
|
||||
editable:true,
|
||||
complete: (res) => {
|
||||
if (res.cancel) {
|
||||
|
||||
}
|
||||
|
||||
if (res.confirm) {
|
||||
|
||||
}
|
||||
@ -219,6 +228,8 @@ Page({
|
||||
chooseImage(){
|
||||
wx.chooseMedia({
|
||||
count:this.data.maxChooseImgCount - this.data.tempImgs.length,
|
||||
mediaType:['image'],
|
||||
sourceType:['camera'],
|
||||
success:(res)=>{
|
||||
console.log(res);
|
||||
this.setData({
|
||||
@ -227,9 +238,10 @@ Page({
|
||||
}
|
||||
});
|
||||
},
|
||||
navToOrderDetail(){
|
||||
navToOrderDetail(event){
|
||||
const id = event.currentTarget.dataset.id;
|
||||
wx.navigateTo({
|
||||
url: '/pages/order-detail/index',
|
||||
url: `/pages/order-detail/index?id=${id}`,
|
||||
})
|
||||
},
|
||||
|
||||
@ -278,9 +290,11 @@ Page({
|
||||
this.data.tempImgs.map((item)=>{
|
||||
urls.push(item.serverUrl);
|
||||
})
|
||||
console.log('uploadAndConfirmSend',urls);
|
||||
// return;
|
||||
orderApi.complete(this.currentOrder.orderid,urls).then((data)=>{
|
||||
this.setData({
|
||||
isShowConfirm:false
|
||||
})
|
||||
this.refreshList();
|
||||
wx.showToast({
|
||||
icon:'success',
|
||||
title: '订单已完成',
|
||||
@ -330,9 +344,14 @@ Page({
|
||||
})
|
||||
}
|
||||
},
|
||||
navToUserInfo(){
|
||||
wx.navigateTo({
|
||||
url: '/pages/user/info/index',
|
||||
logout(){
|
||||
wx.removeStorage({
|
||||
key: 'accessToken',
|
||||
success(){
|
||||
wx.redirectTo({
|
||||
url: '/pages/login/index',
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
refresher-triggered="{{pager.refreshTrigger}}"
|
||||
show-load-more="{{!(list.length==0&&pager.loadAll)}}"
|
||||
loading="{{pager.loading}}" load-all="{{pager.loadAll}}">
|
||||
<view wx:for="{{list}}" wx:key="index" bind:tap="navToOrderDetail"
|
||||
<view wx:for="{{list}}" wx:key="index" bind:tap="navToOrderDetail" data-id="{{item.orderid}}"
|
||||
class="item {{item.status==orderStatus.unpaid||item.status==orderStatus.completed?'no-btns':''}}" >
|
||||
<view class="station-list">
|
||||
<view class="sl-item" wx:for="{{item.packages}}" wx:key="index" wx:for-item="pItem" wx:for-index="pIndex">
|
||||
@ -34,7 +34,10 @@
|
||||
<view class="package">
|
||||
<view class="key">{{pItem.pickup_codes.length}}件包裹:</view>
|
||||
<view class="value">
|
||||
<label wx:for="{{pItem.pickup_codes}}" wx:key="index" class="code-item">******</label>
|
||||
<label wx:for="{{pItem.pickup_codes}}" wx:key="index" class="code-item"
|
||||
wx:for-item="code">
|
||||
{{item.status==orderStatus.created?'******':code}}
|
||||
</label>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -117,35 +120,35 @@
|
||||
<view class="order-info">
|
||||
<view class="item">
|
||||
<view class="key">总量订单</view>
|
||||
<view class="value">{{summary.total}}</view>
|
||||
<view class="value">{{orderSummary.total_count}}</view>
|
||||
</view>
|
||||
<view class="item">
|
||||
<view class="key">昨日订单</view>
|
||||
<view class="value">{{summary.yesterday_total}}</view>
|
||||
<view class="value">{{orderSummary.yesterday_count}}</view>
|
||||
</view>
|
||||
<view class="item">
|
||||
<view class="key">今日订单</view>
|
||||
<view class="value">{{summary.today_total}}</view>
|
||||
<view class="value">{{orderSummary.today_count}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="page-container income">
|
||||
<view class="item" bind:tap="navToUserInfo">
|
||||
<navigator url="/pages/user/info/index" class="item">
|
||||
<view class="key">
|
||||
<label>账户余额</label>
|
||||
<image class="icon" src="/assets/icon/right-arrow-small.png"/>
|
||||
</view>
|
||||
<view class="value">{{summary.balance}}</view>
|
||||
</view>
|
||||
</navigator>
|
||||
<view class="spliter"></view>
|
||||
<view class="item">
|
||||
<navigator url="/pages/user/income/index" class="item">
|
||||
<view class="key">
|
||||
<label>今日收益</label>
|
||||
<image class="icon" src="/assets/icon/right-arrow-small.png"/>
|
||||
</view>
|
||||
<view class="value">{{summary.today_income}}</view>
|
||||
</view>
|
||||
</navigator>
|
||||
</view>
|
||||
|
||||
<view class="page-container actions">
|
||||
@ -153,17 +156,17 @@
|
||||
<image class="icon" src="/assets/icon/service.png"/>
|
||||
<view>在线客服</view>
|
||||
</view>
|
||||
<view class="item">
|
||||
<navigator url="/pages/user/password/index" class="item">
|
||||
<image class="icon" src="/assets/icon/password.png"/>
|
||||
<view>修改密码</view>
|
||||
</view>
|
||||
</navigator>
|
||||
<view class="item">
|
||||
<image class="icon" src="/assets/icon/agreement.png"/>
|
||||
<view>用户协议</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<button type="primary" class="logout-btn">退出登录</button>
|
||||
<button type="primary" class="logout-btn" bind:tap="logout">退出登录</button>
|
||||
</scroll-view>
|
||||
</movable-view>
|
||||
</movable-area>
|
||||
|
||||
@ -1,21 +1,79 @@
|
||||
// pages/order-detail/index.js
|
||||
import orderApi from '../../api/order';
|
||||
import userApi from '../../api/user';
|
||||
Page({
|
||||
|
||||
|
||||
orderId:'',
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
orderDetail:{},
|
||||
refreshTrigger:false,
|
||||
|
||||
|
||||
orderStatus:orderApi.status,
|
||||
orderStatusKV:orderApi.statusKV,
|
||||
|
||||
deliverStatusKV:orderApi.deliverStatusKV,
|
||||
|
||||
genderKV:userApi.genderKV,
|
||||
|
||||
orderStep:0,
|
||||
scrollViewHeight:0
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad(options) {
|
||||
|
||||
const windowInfo = wx.getWindowInfo();
|
||||
this.setData({
|
||||
scrollViewHeight:windowInfo.windowHeight
|
||||
});
|
||||
this.orderId = options.id;
|
||||
this.getOrderDetail();
|
||||
},
|
||||
getOrderDetail(){
|
||||
orderApi.detail(this.orderId).then((data)=>{
|
||||
let orderStep = 0;
|
||||
if(data.order.status==this.data.orderStatus.received){
|
||||
orderStep = 1;
|
||||
}else if(data.order.status==this.data.orderStatus.delivering){
|
||||
orderStep = 2;
|
||||
}else if(data.order.status==this.data.orderStatus.unpaid||data.order.status==this.data.orderStatus.completed){
|
||||
orderStep = 3;
|
||||
}
|
||||
data.order.complete_time = this.formatTime(data.order.complete_time);
|
||||
data.order.pickup_time = this.formatTime(data.order.pickup_time);
|
||||
data.order.received_time = this.formatTime(data.order.received_time);
|
||||
data.packages.map((item)=>{
|
||||
item.pickup_codes = item.pickup_codes.split(',')
|
||||
})
|
||||
this.setData({
|
||||
orderDetail:data,
|
||||
refreshTrigger:false,
|
||||
orderStep
|
||||
})
|
||||
}).catch(()=>{
|
||||
this.setData({
|
||||
refreshTrigger:false
|
||||
})
|
||||
})
|
||||
},
|
||||
copyOrderId(){
|
||||
wx.setClipboardData({
|
||||
data: 'data',
|
||||
data: this.data.orderDetail.order.orderid,
|
||||
})
|
||||
},
|
||||
formatTime(time){
|
||||
return (time||'').substr(5,11);
|
||||
},
|
||||
preview(event){
|
||||
const current = event.currentTarget.dataset.url;
|
||||
wx.previewImage({
|
||||
current:current,
|
||||
urls: this.data.orderDetail.order.complete_images,
|
||||
})
|
||||
},
|
||||
/**
|
||||
|
||||
@ -1,60 +1,73 @@
|
||||
<view class="page-container package-info">
|
||||
<scroll-view refresher-triggered="{{refreshTrigger}}" bindrefresherrefresh="getOrderDetail"
|
||||
refresher-enabled scroll-y style="height:{{scrollViewHeight*2}}rpx;">
|
||||
<view class="page-container package-info">
|
||||
<view class="station-list" bind:tap="navToOrderDetail">
|
||||
<view class="sl-item" wx:for="{{3}}" wx:key="index">
|
||||
<view class="name">菜鸟驿站(丽晶公馆)</view>
|
||||
<view class="sl-item" wx:for="{{orderDetail.packages}}" wx:key="index">
|
||||
<view class="name">{{item.station_name}}</view>
|
||||
<view class="package">
|
||||
<view class="key">4件包裹:</view>
|
||||
<view class="key">{{item.pickup_codes.length}} 件包裹:</view>
|
||||
<view class="value">
|
||||
<label wx:for="{{6}}" wx:key="index">****** </label>
|
||||
<label wx:for="{{item.pickup_codes}}" wx:key="index" wx:for-item="code">
|
||||
{{orderDetail.order.status==orderStatus.created?'******':code}}
|
||||
</label>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="address">
|
||||
<view class="title">佳兆业丽晶公馆3栋2单元2702</view>
|
||||
<view class="sub-title">冯先生:158****3822丨放在门口</view>
|
||||
<view class="title">
|
||||
{{orderDetail.order.community_name}}
|
||||
{{orderDetail.order.building_name}}
|
||||
{{orderDetail.order.address_detail}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="page-container steps">
|
||||
<view class="item night">
|
||||
<view class="sub-title">
|
||||
{{orderDetail.order.address_name}}
|
||||
{{genderKV[orderDetail.order.address_gender]}}:{{orderDetail.order.address_phone}}丨{{deliverStatusKV[orderDetail.order.delivery_method]}}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="page-container steps">
|
||||
<view class="item {{orderStep>0?'night':''}}">
|
||||
<view class="content">
|
||||
<view class="name">接单</view>
|
||||
<view class="time">07-01 14:23</view>
|
||||
<view class="time">{{orderDetail.order.received_time}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="item night">
|
||||
<view class="item {{orderStep>1?'night':(orderStep==1?'half-night':'')}}">
|
||||
<view class="content">
|
||||
<view class="name">取货</view>
|
||||
<view class="time">07-01 14:23</view>
|
||||
<view class="time">{{orderDetail.order.pickup_time}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="item half-night">
|
||||
<view class="item {{orderStep>2?'night':(orderStep==2?'half-night':'')}}">
|
||||
<view class="content">
|
||||
<view class="name">送达</view>
|
||||
<view class="time">07-01 14:23</view>
|
||||
<view class="time">{{orderDetail.order.complete_time}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="page-container photos">
|
||||
</view>
|
||||
<view class="page-container photos" wx:if="{{orderDetail.order.complete_images}}">
|
||||
<view class="title">拍照留证</view>
|
||||
<view class="imgs">
|
||||
<image class="image" src="/assets/icon/phone.png" wx:for="{{4}}" wx:key="index"/>
|
||||
<image class="image" src="{{item}}" wx:for="{{orderDetail.order.complete_images}}" wx:key="index" bind:tap="preview" data-url="{{item}}"/>
|
||||
</view>
|
||||
</view>
|
||||
<view class="page-container income">
|
||||
</view>
|
||||
<view class="page-container income">
|
||||
<label>订单收益:</label>
|
||||
<label class="money">3.0</label>
|
||||
</view>
|
||||
<view class="page-container order-info">
|
||||
<label class="money">{{orderDetail.order.deliveryman_share}}</label>
|
||||
</view>
|
||||
<view class="page-container order-info">
|
||||
<view class="row">
|
||||
<view class="key">订单编号</view>
|
||||
<view class="value">2024071166325555</view>
|
||||
<view class="value">{{orderDetail.order.orderid}}</view>
|
||||
<view class="copy-area" bind:tap="copyOrderId">
|
||||
<view class="copy-btn">复制</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="row">
|
||||
<view class="key">下单时间</view>
|
||||
<view class="value">2024071166325555</view>
|
||||
<view class="value">{{orderDetail.order.create_time}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
|
||||
|
||||
@ -55,6 +55,9 @@
|
||||
}
|
||||
.package-info .package .value{
|
||||
flex:1;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 16rpx;
|
||||
}
|
||||
|
||||
.package-info .address{
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
// pages/user/bank/editor/index.js
|
||||
import userApi from '../../../../api/user';
|
||||
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
|
||||
name:'',
|
||||
bankName:'',
|
||||
cardNumber:'',//16-19
|
||||
},
|
||||
|
||||
/**
|
||||
@ -15,6 +18,22 @@ Page({
|
||||
|
||||
},
|
||||
|
||||
addCard(){
|
||||
userApi.bankCard.add({
|
||||
name:this.data.name,
|
||||
card_number:this.data.cardNumber,
|
||||
bank_name:this.data.bankName
|
||||
}).then(()=>{
|
||||
wx.navigateBack({
|
||||
success(){
|
||||
wx.showToast({
|
||||
icon:'success',
|
||||
title: '添加成功',
|
||||
})
|
||||
}
|
||||
});
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
"usingComponents": {},
|
||||
"navigationBarTitleText": "添加银行卡"
|
||||
}
|
||||
@ -3,23 +3,23 @@
|
||||
<view class="cell">
|
||||
<view class="cell-hd">持卡姓名</view>
|
||||
<view class="cell-bd">
|
||||
<input placeholder="请输入持卡姓名"/>
|
||||
<input placeholder="请输入持卡姓名" model:value="{{name}}"/>
|
||||
</view>
|
||||
</view>
|
||||
<view class="cell">
|
||||
<view class="cell-hd">开户银行</view>
|
||||
<view class="cell-bd">
|
||||
<input placeholder="请输入开户银行"/>
|
||||
<input placeholder="请输入开户银行" model:value="{{bankName}}"/>
|
||||
</view>
|
||||
</view>
|
||||
<view class="cell">
|
||||
<view class="cell-hd">银行卡号</view>
|
||||
<view class="cell-bd">
|
||||
<input placeholder="请输入银行卡号"/>
|
||||
<input placeholder="请输入银行卡号" model:value="{{cardNumber}}"/>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="bottom-bar">
|
||||
<button type="primary" class="save-btn">提交并认证</button>
|
||||
<button type="primary" class="save-btn" bind:tap="addCard">提交并认证</button>
|
||||
</view>
|
||||
@ -1,24 +1,44 @@
|
||||
// pages/user/bank/index/index.js
|
||||
import userApi from '../../../../api/user';
|
||||
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
|
||||
cardList:[],
|
||||
listLoading:false
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad(options) {
|
||||
|
||||
},
|
||||
navToAdd(){
|
||||
wx.navigateTo({
|
||||
url: '/pages/user/bank/editor/index',
|
||||
})
|
||||
},
|
||||
deleteCard(event){
|
||||
const card = event.currentTarget.dataset.item;
|
||||
const endNumber = card.card_number.substr(card.card_number.length-4,card.card_number.length);
|
||||
wx.showModal({
|
||||
title: '是否确认删除此银行卡',
|
||||
content: `尾号(${endNumber})`,
|
||||
complete: (res) => {
|
||||
if (res.confirm) {
|
||||
userApi.cardList.delete(card.id).then((data)=>{
|
||||
wx.showToast({
|
||||
icon:'success',
|
||||
title: '删除成功',
|
||||
})
|
||||
this.getCardList();
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
@ -30,7 +50,21 @@ Page({
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow() {
|
||||
|
||||
this.getCardList();
|
||||
},
|
||||
getCardList(){
|
||||
if(this.data.listLoading)return;
|
||||
this.setData({
|
||||
listLoading:true
|
||||
});
|
||||
wx.showNavigationBarLoading();
|
||||
userApi.bankCard.list().then((data)=>{
|
||||
wx.hideNavigationBarLoading();
|
||||
this.setData({
|
||||
cardList:data,
|
||||
listLoading:false
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
@ -1,23 +1,27 @@
|
||||
<view class="bank-card">
|
||||
<view class="title">
|
||||
<view class="page-title">
|
||||
<label>提现用卡</label>
|
||||
<view class="tag">个人账户</view>
|
||||
</view>
|
||||
<view class="card">
|
||||
<view class="card" wx:for="{{cardList}}" wx:key="index">
|
||||
<view class="head">
|
||||
<image class="icon-card" src="/assets/icon/card.png"/>
|
||||
<view class="name">中国工商银行</view>
|
||||
<image class="icon-delete" src="/assets/icon/delete.png"/>
|
||||
<view class="name">{{item.bank_name}}</view>
|
||||
<image class="icon-delete" src="/assets/icon/delete.png" bind:tap="deleteCard" data-item="{{item}}"/>
|
||||
</view>
|
||||
<view class="spliter"></view>
|
||||
<view class="info-item">
|
||||
<view class="key">持卡人</view>
|
||||
<view class="value">仙人模斗</view>
|
||||
<view class="value">{{item.name}}</view>
|
||||
</view>
|
||||
<view class="info-item">
|
||||
<view class="key">银行卡号</view>
|
||||
<view class="value card-no">**** **** **** ***9 009</view>
|
||||
<view class="value card-no">{{item.card_number}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="list-empty" wx:if="{{cardList.length==0&&!listLoading}}">
|
||||
<image class="icon" src="/assets/icon/list-empty.png"/>
|
||||
<view class="title">暂无银行卡</view>
|
||||
</view>
|
||||
<button bind:tap="navToAdd" class="add-card-btn">添加银行卡</button>
|
||||
</view>
|
||||
@ -5,12 +5,12 @@
|
||||
padding:60rpx 30rpx;
|
||||
}
|
||||
|
||||
.title{
|
||||
.page-title{
|
||||
font-size: 40rpx;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
}
|
||||
.title .tag{
|
||||
.page-title .tag{
|
||||
font-size: 24rpx;
|
||||
background-color: rgba(255, 195, 0, 0.1);
|
||||
padding:5rpx 8rpx;
|
||||
@ -63,3 +63,10 @@
|
||||
margin-top:40rpx;
|
||||
background-color: rgba(153, 153, 153, 0.15);
|
||||
}
|
||||
|
||||
.list-empty{
|
||||
padding:200rpx 0;
|
||||
}
|
||||
.list-empty .icon{
|
||||
margin-top:0;
|
||||
}
|
||||
@ -7,16 +7,56 @@ Page({
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
|
||||
scrollViewHeight:0,
|
||||
pager:{limit:10,loading:false,loadAll:false,pageIndex:0,refreshTrigger:false},
|
||||
list:[]
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad(options) {
|
||||
userApi.incomeList();
|
||||
const windowInfo = wx.getWindowInfo();
|
||||
this.setData({
|
||||
scrollViewHeight:windowInfo.windowHeight
|
||||
})
|
||||
this.loadList();
|
||||
},
|
||||
refreshList(){
|
||||
this.data.pager.pageIndex = 0;
|
||||
this.data.pager.loadAll = false;
|
||||
this.setData({
|
||||
pager:this.data.pager
|
||||
});
|
||||
this.loadList();
|
||||
},
|
||||
loadList(){
|
||||
if(this.data.pager.loading||this.data.pager.loadAll){
|
||||
return;
|
||||
}
|
||||
this.setData({
|
||||
"pager.loading":true
|
||||
})
|
||||
|
||||
userApi.incomeList().then((data)=>{
|
||||
if(this.data.pager.pageIndex==0){
|
||||
this.data.list = data.items;
|
||||
}else{
|
||||
this.data.list = this.data.list.concat(data.items);
|
||||
}
|
||||
this.data.pager.loading = false;
|
||||
this.data.pager.pageIndex++;
|
||||
this.data.pager.refreshTrigger = false;
|
||||
if(data.items.length<this.data.pager.limit){
|
||||
this.data.pager.loadAll = true;
|
||||
}
|
||||
|
||||
this.setData({
|
||||
list:this.data.list,
|
||||
pager:this.data.pager
|
||||
})
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
{
|
||||
"usingComponents": {},
|
||||
"usingComponents": {
|
||||
"list-view":"/components/listView"
|
||||
},
|
||||
"navigationBarTitleText": "交易明细"
|
||||
}
|
||||
@ -1,9 +1,15 @@
|
||||
<view class="income-list">
|
||||
<view class="item" wx:for="{{3}}">
|
||||
<list-view bind:refresh="refreshList"
|
||||
bind:loadMore="loadList" height="{{scrollViewHeight}}"
|
||||
refresher-triggered="{{pager.refreshTrigger}}"
|
||||
show-load-more="{{!(list.length==0&&pager.loadAll)}}"
|
||||
loading="{{pager.loading}}" load-all="{{pager.loadAll}}">
|
||||
<view class="income-list">
|
||||
<view class="item" wx:for="{{list}}">
|
||||
<view class="content">
|
||||
<view class="title">订单编号6777跑腿收益</view>
|
||||
<view class="sub-title">2024.10.10 12:15:51</view>
|
||||
<view class="title">{{item.description}}</view>
|
||||
<view class="sub-title">{{item.create_time}}</view>
|
||||
</view>
|
||||
<view class="money">3.0</view>
|
||||
<view class="money">{{item.amount}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</list-view>
|
||||
@ -18,3 +18,7 @@
|
||||
margin-top:32rpx;
|
||||
color: #888888;
|
||||
}
|
||||
|
||||
.income-list .item .money{
|
||||
color:var(--main-color);
|
||||
}
|
||||
@ -15,7 +15,6 @@ Page({
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad(options) {
|
||||
this.refreshSummary();
|
||||
},
|
||||
|
||||
refreshSummary(){
|
||||
@ -37,7 +36,7 @@ Page({
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow() {
|
||||
|
||||
this.refreshSummary();
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
@ -6,9 +6,9 @@
|
||||
<view class="page-container user-info">
|
||||
<view class="title">账户余额 (元)</view>
|
||||
<view class="_money">{{summary.balance}}</view>
|
||||
<view class="today">今日收益(元) {{summary.today_total}}</view>
|
||||
<view class="today">今日收益(元) {{summary.today_income}}</view>
|
||||
<navigator url="/pages/withdraw/index/index">
|
||||
<button class="button" type="primary" disabled="{{summary.balance==0||true}}">提现</button>
|
||||
<button class="button" type="primary" disabled="{{summary.balance==0}}">提现</button>
|
||||
</navigator>
|
||||
</view>
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
</view>
|
||||
<view class="cell-ft"></view>
|
||||
</navigator>
|
||||
<navigator url="" class="cell" hover-class="cell-active">
|
||||
<navigator url="/pages/withdraw/list/index" class="cell" hover-class="cell-active">
|
||||
<view class="cell-bd">
|
||||
<view>提现记录</view>
|
||||
</view>
|
||||
|
||||
163
pages/user/password/index.js
Normal file
163
pages/user/password/index.js
Normal file
@ -0,0 +1,163 @@
|
||||
const app = getApp();
|
||||
import userApi from '../../../api/user';
|
||||
Page({
|
||||
|
||||
verifyCodeTimer:null,
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
phone:'',
|
||||
verifyCode:'',
|
||||
password:'',
|
||||
rePassword:'',
|
||||
codeLoading:false,
|
||||
getCodeBtnText:'获取验证码',
|
||||
waitingTime:app.verifyCodeWaitingTime,
|
||||
modifyLoading:false
|
||||
},
|
||||
validator:{
|
||||
verifyCode:[
|
||||
{required:true,message:'请输入验证码'},
|
||||
{length:6,message:'请输入 6 位数验证码'}
|
||||
],
|
||||
password:{required:true,message:'请输入新密码'},
|
||||
rePassword:{required:true,message:'请输入确认新密码'},
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad(options) {
|
||||
app.getUserInfo().then((data)=>{
|
||||
this.setData({
|
||||
phone:data.phone
|
||||
})
|
||||
});
|
||||
let time = wx.getStorageSync('password-verify-code-time');
|
||||
if(time){
|
||||
let remainTime = app.verifyCodeWaitingTime*1000 - ((new Date()).getTime() - time);
|
||||
if(remainTime>0){
|
||||
this.setData({
|
||||
waitingTime:parseInt(remainTime/1000),
|
||||
codeLoading:true
|
||||
})
|
||||
this.startTimer();
|
||||
}else{
|
||||
wx.removeStorageSync('password-verify-code-time')
|
||||
}
|
||||
}
|
||||
},
|
||||
getVerifyCode(){
|
||||
if(this.data.codeLoading)return;
|
||||
this.setData({
|
||||
codeLoading:true
|
||||
});
|
||||
userApi.verifyCode(this.data.phone).then((data)=>{
|
||||
this.setData({
|
||||
getCodeBtnText:`${this.data.waitingTime}S`
|
||||
});
|
||||
|
||||
const time = new Date();
|
||||
wx.setStorageSync('password-verify-code-time', time.getTime());
|
||||
this.startTimer();
|
||||
})
|
||||
},
|
||||
startTimer(){
|
||||
console.log(this.data.waitingTime);
|
||||
if(this.data.waitingTime<=0){
|
||||
this.setData({
|
||||
codeLoading:false,
|
||||
getCodeBtnText:'获取验证码',
|
||||
waitingTime:app.verifyCodeWaitingTime
|
||||
});
|
||||
wx.removeStorageSync('password-verify-code-time')
|
||||
}else{
|
||||
this.setData({
|
||||
getCodeBtnText:`${this.data.waitingTime--}S`
|
||||
});
|
||||
this.verifyCodeTimer = setTimeout(this.startTimer,1000);
|
||||
}
|
||||
},
|
||||
save(){
|
||||
if(this.data.modifyLoading)return;
|
||||
const valid = app.validateForm(this.validator,this);
|
||||
if(valid.length==0){
|
||||
if(this.data.password==this.data.rePassword){
|
||||
this.setData({
|
||||
rePasswordMessage:''
|
||||
});
|
||||
this.setData({
|
||||
modifyLoading:true
|
||||
});
|
||||
userApi.modifyPassword(this.data.rePassword,this.data.verifyCode).then((data)=>{
|
||||
wx.navigateBack({
|
||||
success(){
|
||||
wx.showToast({
|
||||
icon:'success',
|
||||
title: '修改成功',
|
||||
})
|
||||
}
|
||||
})
|
||||
}).catch(()=>{
|
||||
console.log(11111,'errro');
|
||||
this.setData({
|
||||
modifyLoading:false
|
||||
})
|
||||
})
|
||||
}else{
|
||||
this.setData({
|
||||
rePasswordMessage:'两次密码不一致'
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload() {
|
||||
clearTimeout(this.verifyCodeTimer);
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
onShareAppMessage() {
|
||||
|
||||
}
|
||||
})
|
||||
4
pages/user/password/index.json
Normal file
4
pages/user/password/index.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"usingComponents": {},
|
||||
"navigationBarTitleText": "修改密码"
|
||||
}
|
||||
34
pages/user/password/index.wxml
Normal file
34
pages/user/password/index.wxml
Normal file
@ -0,0 +1,34 @@
|
||||
<view class="cells">
|
||||
<view class="cell">
|
||||
<view class="cell-hd">手机号码</view>
|
||||
<view class="cell-bd">{{phone}}</view>
|
||||
</view>
|
||||
<view class="cell">
|
||||
<view class="cell-hd">验证码</view>
|
||||
<view class="cell-bd">
|
||||
<input placeholder="请输入验证码" model:value="{{verifyCode}}"/>
|
||||
<view class="error">{{verifyCodeMessage}}</view>
|
||||
</view>
|
||||
<view class="cell-ft">
|
||||
<button size="mini" type="primary" disabled="{{codeLoading}}"
|
||||
bind:tap="getVerifyCode" class="verify-btn">
|
||||
{{getCodeBtnText}}
|
||||
</button>
|
||||
</view>
|
||||
</view>
|
||||
<view class="cell">
|
||||
<view class="cell-hd">新密码</view>
|
||||
<view class="cell-bd">
|
||||
<input placeholder="请输入新密码" model:value="{{password}}"/>
|
||||
<view class="error">{{passwordMessage}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="cell">
|
||||
<view class="cell-hd">确认新密码</view>
|
||||
<view class="cell-bd">
|
||||
<input placeholder="请确认新密码" model:value="{{rePassword}}"/>
|
||||
<view class="error">{{rePasswordMessage}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<button type="primary" class="save-btn" bind:tap="save" loading="{{modifyLoading}}">修改并保存</button>
|
||||
</view>
|
||||
15
pages/user/password/index.wxss
Normal file
15
pages/user/password/index.wxss
Normal file
@ -0,0 +1,15 @@
|
||||
.verify-btn{
|
||||
font-weight: normal;
|
||||
}
|
||||
.verify-btn[disabled]{
|
||||
background-color: #fff;
|
||||
border: 2rpx solid var(--main-color);
|
||||
color:var(--main-color)!important;
|
||||
}
|
||||
|
||||
.cells .cell-hd{
|
||||
width:155rpx;
|
||||
}
|
||||
.save-btn{
|
||||
margin:60rpx 30rpx 30rpx!important;
|
||||
}
|
||||
@ -1,20 +1,38 @@
|
||||
// pages/user/rnAuth/index.js
|
||||
import user from '../../../api/user';
|
||||
import userApi from '../../../api/user';
|
||||
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
|
||||
name:'',
|
||||
idCard:'',
|
||||
already:false
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad(options) {
|
||||
|
||||
userApi.getRNAuth().then((data)=>{
|
||||
if(data&&data.id_number){
|
||||
this.setData({
|
||||
name:data.name,
|
||||
idCard:data.id_number,
|
||||
already:true
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
save(){
|
||||
userApi.setRNAuth({
|
||||
name:this.data.name,
|
||||
id_number:this.data.idCard
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
|
||||
@ -3,16 +3,18 @@
|
||||
<view class="cell">
|
||||
<view class="cell-hd">真实姓名</view>
|
||||
<view class="cell-bd">
|
||||
<input placeholder="请输入真实姓名"/>
|
||||
<label wx:if="{{already}}">{{name}}</label>
|
||||
<input placeholder="请输入真实姓名" model:value="{{name}}" wx:else/>
|
||||
</view>
|
||||
</view>
|
||||
<view class="cell">
|
||||
<view class="cell-hd">身份证号</view>
|
||||
<view class="cell-bd">
|
||||
<input placeholder="请输入身份证号"/>
|
||||
<label wx:if="{{already}}">{{idCard}}</label>
|
||||
<input placeholder="请输入身份证号" model:value="{{idCard}}" wx:else/>
|
||||
</view>
|
||||
</view>
|
||||
<view class="cell">
|
||||
<!-- <view class="cell">
|
||||
<view class="cell-hd">手机号码</view>
|
||||
<view class="cell-bd">
|
||||
<input placeholder="请输入手机号码"/>
|
||||
@ -26,9 +28,9 @@
|
||||
<view class="cell-bd">
|
||||
<input placeholder="请输入验证码"/>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
|
||||
<view class="bottom-bar">
|
||||
<button type="primary" class="save-btn">保存并使用</button>
|
||||
<view class="bottom-bar" wx:if="{{!already}}">
|
||||
<button type="primary" class="save-btn" bind:tap="save">保存并使用</button>
|
||||
</view>
|
||||
@ -1,29 +1,88 @@
|
||||
// pages/withdraw/index.js
|
||||
import userApi from '../../../api/user';
|
||||
const app = getApp();
|
||||
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
|
||||
bankList:[],
|
||||
amount:'',
|
||||
amountMessage:'',
|
||||
summary:{},
|
||||
inputFocus:false,
|
||||
bank:''
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad(options) {
|
||||
userApi.bankCard.list().then((data)=>{
|
||||
data.map((item)=>{
|
||||
item.endNumber = item.card_number.substr(item.card_number.length-4,item.card_number.length);
|
||||
});
|
||||
this.setData({
|
||||
bankList:data
|
||||
})
|
||||
});
|
||||
|
||||
this.getSummary();
|
||||
},
|
||||
getSummary(){
|
||||
app.forceGetSummary().then((data)=>{
|
||||
this.setData({
|
||||
summary:data
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady() {
|
||||
|
||||
},
|
||||
setAmountAll(){
|
||||
this.setData({
|
||||
amount:this.data.summary.balance
|
||||
})
|
||||
},
|
||||
widthdraw(){
|
||||
if(this.data.amount==''){
|
||||
this.setData({
|
||||
amountMessage:'请输入提现金额',
|
||||
inputFocus:true
|
||||
})
|
||||
return;
|
||||
}else{
|
||||
this.setData({
|
||||
amountMessage:''
|
||||
})
|
||||
}
|
||||
if(this.data.bank){
|
||||
userApi.withdraw.add(this.data.bank,this.data.amount).then((data)=>{
|
||||
this.getSummary();
|
||||
this.setData({
|
||||
amount:''
|
||||
})
|
||||
const bank = this.data.bankList.find((item)=>item.id==data.bank_card_id);
|
||||
console.log(bank,data.id);
|
||||
const showText = `${bank.bank_name}(${bank.endNumber})`;
|
||||
wx.navigateTo({
|
||||
url: '/pages/withdraw/success/index',
|
||||
url: `/pages/withdraw/success/index?amount=${data.amount}&bank=${showText}`,
|
||||
})
|
||||
});
|
||||
}else{
|
||||
wx.showToast({
|
||||
icon:'error',
|
||||
title: this.data.bankList.length==0?'请添加银行卡':'请选择银行卡',
|
||||
})
|
||||
}
|
||||
},
|
||||
navToAddCard(){
|
||||
wx.navigateTo({
|
||||
url: '/pages/user/bank/editor/index',
|
||||
})
|
||||
},
|
||||
/**
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
"usingComponents": {},
|
||||
"navigationBarTitleText": "账户提现"
|
||||
}
|
||||
@ -4,30 +4,26 @@
|
||||
<view class="value">24小时到账</view>
|
||||
</view>
|
||||
<view class="input-area">
|
||||
<input class="input" placeholder="请输入提现金额"/>
|
||||
<input class="input" placeholder="请输入提现金额" type="digit" focus="{{inputFocus}}" model:value="{{amount}}"/>
|
||||
<view class="error">{{amountMessage}}</view>
|
||||
</view>
|
||||
<view class="bottom">
|
||||
<view class="key">账户余额:4500.0</view>
|
||||
<view class="value">全部提现</view>
|
||||
<view class="key">账户余额:{{summary.balance}}</view>
|
||||
<view class="value" bind:tap="setAmountAll">全部提现</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="page-container banks">
|
||||
<view class="head">提现方式</view>
|
||||
<view class="spliter"></view>
|
||||
<radio-group class="bank-list">
|
||||
<label class="item">
|
||||
<radio-group class="bank-list" model:value="{{bank}}">
|
||||
<label class="item" wx:for="{{bankList}}" wx:key="index">
|
||||
<image class="icon" src="/assets/icon/card.png"/>
|
||||
<view class="name">中国工商银行(7726)</view>
|
||||
<checkbox class="checkbox"/>
|
||||
</label>
|
||||
<label class="item">
|
||||
<image class="icon" src="/assets/icon/card.png"/>
|
||||
<view class="name">中国工商银行(7726)</view>
|
||||
<checkbox class="checkbox"/>
|
||||
<view class="name">{{item.bank_name}}({{item.endNumber}})</view>
|
||||
<radio class="checkbox" value="{{item.id}}" checked="{{index==0}}"/>
|
||||
</label>
|
||||
|
||||
<view class="item">
|
||||
<view class="item" bind:tap="navToAddCard">
|
||||
<view class="icon plus">
|
||||
<image src="/assets/icon/plus.png" class="plus"/>
|
||||
</view>
|
||||
|
||||
@ -19,6 +19,13 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top:60rpx;
|
||||
position: relative;
|
||||
}
|
||||
.amount .input-area .error{
|
||||
position: absolute;
|
||||
bottom:-15rpx;left:55rpx;
|
||||
color:red;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
.amount .input-area::before{
|
||||
content: '¥';
|
||||
|
||||
115
pages/withdraw/list/index.js
Normal file
115
pages/withdraw/list/index.js
Normal file
@ -0,0 +1,115 @@
|
||||
import userApi from '../../../api/user';
|
||||
|
||||
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
scrollViewHeight:0,
|
||||
pager:{limit:10,loading:false,loadAll:false,pageIndex:0,refreshTrigger:false},
|
||||
list:[]
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad(options) {
|
||||
const windowInfo = wx.getWindowInfo();
|
||||
this.setData({
|
||||
scrollViewHeight:windowInfo.windowHeight
|
||||
})
|
||||
this.loadList();
|
||||
},
|
||||
refreshList(){
|
||||
this.data.pager.pageIndex = 0;
|
||||
this.data.pager.loadAll = false;
|
||||
this.setData({
|
||||
pager:this.data.pager
|
||||
});
|
||||
this.loadList();
|
||||
},
|
||||
loadList(){
|
||||
if(this.data.pager.loading||this.data.pager.loadAll){
|
||||
return;
|
||||
}
|
||||
this.setData({
|
||||
"pager.loading":true
|
||||
})
|
||||
|
||||
userApi.withdraw.list().then((data)=>{
|
||||
this.data.pager.loadAll = true;
|
||||
this.data.pager.loading = false;
|
||||
this.setData({
|
||||
list:data,
|
||||
pager:this.data.pager
|
||||
});
|
||||
return;
|
||||
if(this.data.pager.pageIndex==0){
|
||||
this.data.list = data.items;
|
||||
}else{
|
||||
this.data.list = this.data.list.concat(data.items);
|
||||
}
|
||||
this.data.pager.loading = false;
|
||||
this.data.pager.pageIndex++;
|
||||
this.data.pager.refreshTrigger = false;
|
||||
if(data.items.length<this.data.pager.limit){
|
||||
this.data.pager.loadAll = true;
|
||||
}
|
||||
|
||||
this.setData({
|
||||
list:this.data.list,
|
||||
pager:this.data.pager
|
||||
})
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
onShareAppMessage() {
|
||||
|
||||
}
|
||||
})
|
||||
6
pages/withdraw/list/index.json
Normal file
6
pages/withdraw/list/index.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"usingComponents": {
|
||||
"list-view":"/components/listView"
|
||||
},
|
||||
"navigationBarTitleText": "提现记录"
|
||||
}
|
||||
15
pages/withdraw/list/index.wxml
Normal file
15
pages/withdraw/list/index.wxml
Normal file
@ -0,0 +1,15 @@
|
||||
<list-view bind:refresh="refreshList"
|
||||
bind:loadMore="loadList" height="{{scrollViewHeight}}"
|
||||
refresher-triggered="{{pager.refreshTrigger}}"
|
||||
show-load-more="{{!(list.length==0&&pager.loadAll)}}"
|
||||
loading="{{pager.loading}}" load-all="{{pager.loadAll}}">
|
||||
<view class="income-list">
|
||||
<view class="item" wx:for="{{list}}">
|
||||
<view class="content">
|
||||
<view class="title">{{item.description}}</view>
|
||||
<view class="sub-title">{{item.create_time}}</view>
|
||||
</view>
|
||||
<view class="money">{{item.amount}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</list-view>
|
||||
24
pages/withdraw/list/index.wxss
Normal file
24
pages/withdraw/list/index.wxss
Normal file
@ -0,0 +1,24 @@
|
||||
.income-list{
|
||||
background-color: #ffffff;
|
||||
margin-top:20rpx;
|
||||
}
|
||||
.income-list .item{
|
||||
display: flex;
|
||||
padding:40rpx 30rpx;
|
||||
border-bottom: 1rpx solid rgba(153, 153, 153, 0.2);
|
||||
}
|
||||
.income-list .item .content{
|
||||
flex:1;
|
||||
|
||||
}
|
||||
.income-list .item .title{
|
||||
font-size: 32rpx;
|
||||
}
|
||||
.income-list .item .sub-title{
|
||||
margin-top:32rpx;
|
||||
color: #888888;
|
||||
}
|
||||
|
||||
.income-list .item .money{
|
||||
color:var(--main-color);
|
||||
}
|
||||
@ -5,14 +5,18 @@ Page({
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
|
||||
amount:'',
|
||||
bank:''
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad(options) {
|
||||
|
||||
this.setData({
|
||||
amount:options.amount,
|
||||
bank:options.bank
|
||||
})
|
||||
},
|
||||
done(){
|
||||
wx.navigateBack({
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
"usingComponents": {},
|
||||
"navigationBarTitleText": "账户提现"
|
||||
}
|
||||
@ -11,11 +11,11 @@
|
||||
</view>
|
||||
<view class="cell">
|
||||
<view class="cell-hd">提现金额</view>
|
||||
<view class="cell-bd money money-normal">8888.0</view>
|
||||
<view class="cell-bd money money-normal">{{amount}}</view>
|
||||
</view>
|
||||
<view class="cell">
|
||||
<view class="cell-hd">到账方式</view>
|
||||
<view class="cell-bd">中国工商银行(7726)</view>
|
||||
<view class="cell-bd">{{bank}}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user