界面细节

This commit is contained in:
2025-02-23 02:10:03 +08:00
parent fa443237c7
commit 0695c3ab34
28 changed files with 463 additions and 226 deletions

View File

@ -24,7 +24,10 @@ export default {
withdraw:{
add:(bank_card_id,amount)=>request.post('/api/withdraw',{bank_card_id,amount}),
list:(status)=>request.get('/api/withdraw/user',status?{status}:{}),
list:(data)=>request.get('/api/withdraw/user',data),
statusKV:{
PENDING:"提现审核中",APPROVED:"平台受理成功",REJECTED:"被拒绝"
}
},
uploadImg(file,progress){

View File

@ -1,7 +1,7 @@
page{
font-size:32rpx;
line-height: 1;
--main-font-color:#222222;
--main-font-color:#000000;
--main-bgclolor:#F5F5F5;
--main-color:#FFC300;
--main-hover-color:#fcce39;
@ -26,7 +26,6 @@ button .icon,button label{
}
button:not([size=mini]){
width:auto;
/* height: 108rpx; */
padding:30rpx 25rpx;
font-size: 36rpx;
}
@ -38,28 +37,33 @@ button[type=primary]{
background-color:var(--main-color);
color:#222222;
}
button[type=primary]:not([disabled]).button-hover{
background-color: var(--main-hover-color);
color:var(--main-font-color);
}
button[plain]{
border: 1rpx solid rgba(255, 195, 0, 0.5);
color: #FFC300;
}
button:not([plain]):not([disabled])[type=primary]:hover{
background-color:var(--main-hover-color);
}
button[type=default]{
color: #333333;
font-size:32rpx;
line-height: 1;
}
button[type=default].button-hover{
color:#666;
}
button[type=primary][plain]{
border-color: var(--main-color);
color:var(--main-color);
padding:28rpx 25rpx;
}
button[type=primary][plain]:hover{
border-color:var(--main-color);
color:var(--main-color);
}
button[loading][type=primary] {
background-color:var(--main-color);
color: hsla(0,0%,100%,.6);
@ -194,12 +198,14 @@ page-container .content{
}
.bottom-bar{
border-radius: 24rpx 24rpx 0 0;
padding:34rpx 40rpx;
border-top: 0.5px solid rgba(153, 153, 153, 0.2);
padding:24rpx;
position:fixed;
bottom:0;
left:0;right:0;
background-color: #fff;
padding-bottom:calc(constant(safe-area-inset-bottom) + 24rpx);
padding-bottom:calc(env(safe-area-inset-bottom) + 24rpx);
}
.custom-scroll-view{
height:100vh;
@ -211,10 +217,12 @@ page-container .content{
overflow: auto;
}
.bottom-bar-v2{
border-radius: 24rpx 24rpx 0 0;
padding:34rpx 40rpx;
padding:24rpx;
background-color: #fff;
text-align: right;
border-top: 0.5px solid rgba(153, 153, 153, 0.2);
padding-bottom:calc(constant(safe-area-inset-bottom) + 24rpx);
padding-bottom:calc(env(safe-area-inset-bottom) + 24rpx);
}
.cells{
@ -351,3 +359,6 @@ navigator button{
.page-dispatch{
height:40rpx;
}
list-view{
display: block;
}

View File

@ -12,9 +12,7 @@ Component({
type:Boolean,
value:false
},
"height":{
type:Number
},
height:0,
loadMoreText:{
type:String,
value:'已经到底了'
@ -33,14 +31,15 @@ Component({
* 组件的初始数据
*/
data: {
defaultHeight:''
heightStyle:'',
scrollHeight:0
},
lifetimes:{
attached(){
this.createSelectorQuery().select('#scrollView').boundingClientRect((res)=>{
this.data.scrollHeight = res.height;
}).exec();
const windowInfo = wx.getWindowInfo();
this.setData({
defaultHeight:`calc(100vh)`
})
}
},
/**
@ -52,10 +51,26 @@ Component({
},
scrolling(event){
//scrollTop scrollHeight
const bottomHeight = event.detail.scrollHeight-event.detail.scrollTop-this.properties.height;
const bottomHeight = event.detail.scrollHeight-event.detail.scrollTop-this.data.scrollHeight;
if(bottomHeight<100){
this.triggerEvent('loadMore');
}
}
},
observers:{
height(h){
let heightStyle = '';
if(h){
if(typeof h == 'string'){
heightStyle = `height:${h}`
}else{
heightStyle = `height:${this.properties.height*2}rpx`
}
console.log(heightStyle);
this.setData({
heightStyle:heightStyle
})
}
}
}
})

View File

@ -1,4 +1,5 @@
{
"component": true,
"usingComponents": {}
"usingComponents": {},
"styleIsolation": "apply-shared"
}

View File

@ -1,5 +1,7 @@
<scroll-view scroll-y refresher-enabled="true" bindrefresherrefresh="refreshList" refresher-triggered="{{refresherTriggered}}" style="height:{{height}}px;" bindscroll="scrolling">
<slot/>
<scroll-view scroll-y refresher-enabled bindrefresherrefresh="refreshList" refresher-triggered="{{refresherTriggered}}" style="{{heightStyle}}" bindscroll="scrolling" class="scroll-view" id="scrollView">
<view class="scroll-view-content">
<slot/>
</view>
<view class="load-more" wx:if="{{showLoadMore}}">
<label class="text" wx:if="{{loadAll}}">{{loadMoreText}}</label>
<label class="text" wx:else>加载中...</label>

View File

@ -1,5 +1,8 @@
.scroll-view{
height:100%;
}
.load-more{
padding:100rpx 0;
padding:56rpx 0 80rpx 0;
text-align: center;
color: #888888;
font-size:24rpx;
@ -14,8 +17,8 @@
.load-more::before{
content: '';
position: absolute;
left:0;top:112rpx;
width:100%;height:1.5rpx;
left:0;top:68rpx;
width:100%;height:1rpx;
background-color: rgba(136, 136, 136, 0.25);
z-index: -1;
}

View File

@ -0,0 +1,103 @@
const app = getApp();
Component({
/**
* 组件的属性列表
*/
properties: {
titleText:{
type:String,
value:''
},
titleTextCenter:{
type:Boolean,
value:true
},
editable:{
type:Boolean,
value:false
},
editRequired:{
type:Boolean,
value:false
},
row:{
type:Number,
value:4
},
content:{
type:String,
value:''
},
contentPlaceholder:{
type:String,
value:'请输入内容'
},
isShowCancel:true,
cancelButtonText:{
type:String,
value:'取消'
},
okButtonText:{
type:String,
value:'确定'
},
show:{
type:Boolean,
value:false
}
},
/**
* 组件的初始数据
*/
data: {
dynamicsStyle:'',
textareaHeight:124
},
/**
* 组件的方法列表
*/
methods: {
cancelButtonTap(){
this.setData({
show:false
});
this.triggerEvent('cancel');
},
okButtonTap(){
if(this.properties.editRequired){
const valid = app.validateForm({
content:{
required:true,
message:this.properties.contentPlaceholder,
shake:true,
autoFocus:true
}
},this);
if(valid.length>0)return;
}
this.setData({
show:false
});
this.triggerEvent('ok',this.properties.content);
}
},
lifetimes:{
attached(){
console.log(this.properties.row);
const windowInfo = wx.getWindowInfo();
let viewHeight = 50+96+32+48;
const textareaHeight = this.properties.row*25+24;
if(this.properties.editable){
viewHeight+=textareaHeight;
}
this.setData({
textareaHeight:textareaHeight,
dynamicsStyle:`top:${(windowInfo.windowHeight-viewHeight)/2}px;height:${viewHeight}px;`
})
}
}
})

View File

@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

View File

@ -0,0 +1,17 @@
<page-container show="{{show}}" position="center" class="custom-modal-view"
custom-style="background-color:transparent;left:27px;width:calc(100vw - 54px);height:200px;{{dynamicsStyle}}">
<view class="modal-view-main">
<view class="title {{titleTextCenter?'center':''}}">{{titleText}}</view>
<textarea class="textarea {{contentMessage?'error':''}}" model:value="{{content}}" row="3" wx:if="{{editable}}"
placeholder="{{contentPlaceholder}}" style="height:{{textareaHeight*2}}rpx"
focus="{{contentFocus}}" animation="{{contentAnimation}}"></textarea>
<view class="text" wx:else>{{content}}</view>
<view class="btns">
<button class="button" plain vx:if="{{isShowCancel}}" bind:tap="cancelButtonTap">{{cancelButtonText}}</button>
<button class="button" type="primary" bind:tap="okButtonTap">{{okButtonText}}</button>
</view>
</view>
</page-container>

View File

@ -0,0 +1,44 @@
.custom-modal-view{
border-radius: 20px;
}
.custom-modal-view .title{
font-size: 34rpx;
font-weight: 500;
line-height: 50rpx;
padding:0 20rpx;
}
.custom-modal-view .title.center{
text-align: center;
}
.modal-view-main{
border-radius: 24rpx;
background-color: #fff;
padding:32rpx;
}
.custom-modal-view .textarea{
border: 1.2px solid rgba(85, 85, 85, 0.3);
border-radius: 18px;
margin:30rpx 0;
padding:24rpx 20rpx;
font-size: 34rpx;
width:100%;
box-sizing: border-box;
line-height:50rpx;
height: 248rpx;
}
.custom-modal-view .textarea.error{
border-color:red;
}
.modal-view-main .btns{
margin-top:32rpx;
display: flex;
gap: 18rpx;
}
.modal-view-main .btns .button{
flex:1;
font-size: 32rpx;
padding:32rpx;
line-height: 1;
font-weight: 500;
}

View File

@ -48,7 +48,9 @@ Page({
genderKV:userApi.genderKV,
completing:false
completing:false,
isShowRefundConfirm:false
},
onLoad(){
const windowInfo = wx.getWindowInfo();
@ -167,8 +169,11 @@ Page({
limit:this.data.pager.limit,
}
const buildingId = this.data.buildingList[this.data.buildingIndex].building_id;
//有buildingId 就传 没有(全部) buildingId就传community_id 因为要过滤小区
if(buildingId){
params.building_id = buildingId;
}else{
params.community_id = this.data.userInfo.community_id;
}
if(this.data.statusDetailKey=='completed'){
params.status = `${this.data.orderStatus.unpaid},${this.data.orderStatus.completed}`
@ -227,29 +232,29 @@ Page({
})
},400)
},
refund(event){
showRefundConfirm(event){
const item = event.currentTarget.dataset.item;
const index = event.currentTarget.dataset.index;
if(item.receiving)return;
wx.showModal({
title: '取消订单需联系客户说明原因',
content: '',
placeholderText:'请输入退款原因',
editable:true,
complete: (res) => {
if (res.confirm) {
this.setData({
[`list[${index}].receiving`]:true
})
orderApi.cancel(item.orderid,res.content).then((data)=>{
wx.showToast({
title: '取消成功',
icon:'success'
});
this.refreshList();
})
}
}
this.refundOrderIndex = index;
this.setData({
isShowRefundConfirm:true
})
},
refund(event){
const index = this.refundOrderIndex;
const item = this.data.list[index];
if(item.receiving)return;
this.setData({
[`list[${index}].receiving`]:true
})
orderApi.cancel(item.orderid,event.detail).then((data)=>{
wx.showToast({
title: '取消成功',
icon:'success'
});
this.refreshList();
})
},
chooseImage(){
@ -393,5 +398,11 @@ Page({
}
})
},
concatUser(event){
const item = event.currentTarget.dataset.item;
wx.makePhoneCall({
phoneNumber: item.address.phone,
})
},
emptyFun(){}
})

View File

@ -1,7 +1,8 @@
{
"usingComponents": {
"list-view":"/components/listView",
"swipe-button":"/components/swipeButton"
"swipe-button":"/components/swipeButton",
"modal-view":"/components/modalView"
},
"navigationStyle": "custom",
"navigationBarTextStyle": "white"

View File

@ -1,87 +1,90 @@
<view style="height:{{statusBarHeight}}px" class="status-bar"></view>
<view class="nav-bar">
<image src="/assets/icon/left-panel-btn.png" class="left-btn" bind:tap="openLeftPanel"/>
<view class="community">
<image class="icon" src="/assets/icon/community.png"/>
<label>{{userInfo.community_name}}</label>
</view>
</view>
<view class="custom-scroll-view">
<view>
<view style="height:{{statusBarHeight}}px" class="status-bar"></view>
<view class="nav-bar">
<image src="/assets/icon/left-panel-btn.png" class="left-btn" bind:tap="openLeftPanel"/>
<view class="community">
<image class="icon" src="/assets/icon/community.png"/>
<label>{{userInfo.community_name}}</label>
</view>
</view>
<view class="head {{pager.loading?'loading':''}}">
<view class="item {{statusDetailKey==key?'current':''}}" wx:for="{{statusDetail}}"
wx:for-index="key" wx:key="key" bind:tap="setStatus" data-item="{{item}}">
{{item.text}}({{item.value}})
<view class="head {{pager.loading?'loading':''}}">
<view class="item {{statusDetailKey==key?'current':''}}" wx:for="{{statusDetail}}"
wx:for-index="key" wx:key="key" bind:tap="setStatus" data-item="{{item}}">
{{item.text}}({{item.value}})
</view>
</view>
<view class="building {{pager.loading?'loading':''}}">
<view class="item {{index==buildingIndex?'current':''}}"
wx:for="{{buildingList}}" wx:key="index" bind:tap="setBuilding"
data-item="{{item}}" data-index="{{index}}">
{{item.building_name}}({{item.order_count}})
</view>
</view>
</view>
</view>
<view class="building {{pager.loading?'loading':''}}">
<view class="item {{index==buildingIndex?'current':''}}"
wx:for="{{buildingList}}" wx:key="index" bind:tap="setBuilding"
data-item="{{item}}" data-index="{{index}}">
{{item.building_name}}({{item.order_count}})
</view>
</view>
<view class="test"></view>
<list-view class="package-list" 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 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">
<view class="name">{{pItem.station_name}}</view>
<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"
wx:for-item="code">
{{item.status==orderStatus.created?'******':code}}
</label>
<list-view class="package-list main" bind:refresh="refreshList"
bind:loadMore="loadList" 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" data-id="{{item.orderid}}"
class="item {{item.status==orderStatus.unpaid||item.status==orderStatus.completed?'no-btns':''}} {{item.is_first_order?'is-new-order':''}}" >
<view class="station-list">
<view class="sl-item" wx:for="{{item.packages}}" wx:key="index" wx:for-item="pItem" wx:for-index="pIndex">
<view class="name">{{pItem.station_name}}</view>
<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"
wx:for-item="code">
{{item.status==orderStatus.created?'******':code}}
</label>
</view>
</view>
</view>
</view>
</view>
<view class="address">
<view class="title">
{{item.address.community_name}}
{{item.address.building_name}}
{{item.address.address_detail}}
<view class="address">
<view class="title">
{{item.address.community_name}}
{{item.address.building_name}}
{{item.address.address_detail}}
</view>
<view class="sub-title">
{{item.address.name}}{{genderKV[item.address.gender]}}{{item.address.phone}}丨{{deliverStatusKV[item.delivery_method]}}
</view>
</view>
<view class="sub-title">
{{item.address.name}}{{genderKV[item.address.gender]}}{{item.address.phone}}丨{{deliverStatusKV[item.delivery_method]}}
<view class="btns" wx:if="{{item.status==orderStatus.created}}">
<button disabled="{{item.receiving}}" class="button refund-btn" plain
capture-catch:tap="showRefundConfirm" data-item="{{item}}" data-index="{{index}}">退单</button>
<swipe-button class="swipe-button" loading="{{item.receiving}}" bind:done="getOrder"
data-item="{{item}}" data-index="{{index}}" button-text="我要接单"
button-loading-text="接单中..." capture-catch:tap="emptyFun"/>
</view>
<view class="btns" wx:if="{{item.status==orderStatus.received}}">
<button disabled="{{item.receiving}}" class="button refund-btn" capture-catch:tap="showRefundConfirm"
plain data-index="{{index}}" data-item="{{item}}">退单</button>
<swipe-button class="swipe-button" loading="{{item.receiving}}" bind:done="receivedOrder"
data-item="{{item}}" data-index="{{index}}" button-text="我已取货"
button-loading-text="取货中..." capture-catch:tap="emptyFun"/>
</view>
<view class="btns" wx:if="{{item.status==orderStatus.delivering}}">
<button class="button concat-user-btn" capture-catch:tap="concatUser"
data-item="{{item}}">
<image class="icon" src="/assets/icon/phone.png"></image>
<label>联系用户</label>
</button>
<button type="primary" class="confirm-send-btn"
capture-catch:tap="confirmSend" data-item="{{item}}">我已送达</button>
</view>
</view>
<view class="btns" wx:if="{{item.status==orderStatus.created}}">
<button disabled="{{item.receiving}}" class="button refund-btn" plain
capture-catch:tap="refund" data-item="{{item}}" data-index="{{index}}">退单</button>
<swipe-button class="swipe-button" loading="{{item.receiving}}" bind:done="getOrder"
data-item="{{item}}" data-index="{{index}}" button-text="我要接单"
button-loading-text="接单中..." capture-catch:tap="emptyFun"/>
<view class="list-empty" wx:if="{{list.length==0&&pager.loadAll}}">
<image class="icon" src="/assets/icon/list-empty.png"/>
<view class="title">暂无跑腿订单</view>
</view>
<view class="btns" wx:if="{{item.status==orderStatus.received}}">
<button disabled="{{item.receiving}}" class="button refund-btn" capture-catch:tap="refund"
plain data-index="{{index}}" data-item="{{item}}">退单</button>
<swipe-button class="swipe-button" loading="{{item.receiving}}" bind:done="receivedOrder"
data-item="{{item}}" data-index="{{index}}" button-text="我已取货"
button-loading-text="取货中..." capture-catch:tap="emptyFun"/>
</view>
<view class="btns" wx:if="{{item.status==orderStatus.delivering}}">
<button class="button concat-user-btn">
<image class="icon" src="/assets/icon/phone.png"></image>
<label>联系用户</label>
</button>
<button type="primary" class="confirm-send-btn"
capture-catch:tap="confirmSend" data-item="{{item}}">我已送达</button>
</view>
</view>
<view class="list-empty" wx:if="{{list.length==0&&pager.loadAll}}">
<image class="icon" src="/assets/icon/list-empty.png"/>
<view class="title">暂无跑腿订单</view>
</view>
</list-view>
</list-view>
</view>
<page-container show="{{isShowConfirm}}" position="bottom"
<page-container wx:if="{{isShowConfirm}}" show="{{isShowConfirm}}" position="bottom"
round class="confirm-sending" close-on-slide-down>
<view class="content" wx:if="{{isShowConfirm}}">
<view class="title">拍照留证</view>
@ -176,3 +179,6 @@
</scroll-view>
</movable-view>
</movable-area>
<modal-view titleText="取消订单需联系客户说明原因" editable content-placeholder="请输入退款原因" bind:ok="refund" show="{{isShowRefundConfirm}}" wx:if="{{isShowRefundConfirm}}" titleTextCenter="{{false}}" editRequired/>

View File

@ -55,6 +55,9 @@
margin:20rpx 16rpx;
position: relative;
}
.building::-webkit-scrollbar{
display: none;
}
.building.loading{
overflow: hidden;
}
@ -78,7 +81,6 @@
.package-list{
margin-top:30rpx;
}
.package-list .item{
margin:30rpx 16rpx;
@ -99,6 +101,19 @@
left:38.5rpx;top:90rpx;
bottom:250rpx;
}
.package-list .item.is-new-order::after{
content:'新';
position: absolute;
right:24rpx;top:0;
width:58rpx;height:58rpx;
line-height: 52rpx;
background-color: #FF0000;
border-radius: 0px 0px 40rpx 40rpx;
text-align: center;
color: #fff;
font-weight: 500;
}
.package-list .item.no-btns::before{
bottom:100rpx;
}
@ -200,7 +215,6 @@
}
.concat-user-btn .icon{
width:28rpx;height:28rpx;
border: 1.2rpx solid rgba(85, 85, 85, 0.5);
}
.confirm-send-btn{
flex:1;

View File

@ -19,34 +19,29 @@ Page({
genderKV:userApi.genderKV,
orderStep:0,
scrollViewHeight:0
orderStep: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){
if(data.status==this.data.orderStatus.received){
orderStep = 1;
}else if(data.order.status==this.data.orderStatus.delivering){
}else if(data.status==this.data.orderStatus.delivering){
orderStep = 2;
}else if(data.order.status==this.data.orderStatus.unpaid||data.order.status==this.data.orderStatus.completed){
}else if(data.status==this.data.orderStatus.unpaid||data.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.complete_time = this.formatTime(data.complete_time);
data.pickup_time = this.formatTime(data.pickup_time);
data.received_time = this.formatTime(data.received_time);
data.packages.map((item)=>{
item.pickup_codes = item.pickup_codes.split(',')
})
@ -63,7 +58,7 @@ Page({
},
copyOrderId(){
wx.setClipboardData({
data: this.data.orderDetail.order.orderid,
data: this.data.orderDetail.orderid,
})
},
formatTime(time){
@ -73,7 +68,7 @@ Page({
const current = event.currentTarget.dataset.url;
wx.previewImage({
current:current,
urls: this.data.orderDetail.order.complete_images,
urls: this.data.orderDetail.complete_images,
})
},
/**

View File

@ -1,5 +1,5 @@
<scroll-view refresher-triggered="{{refreshTrigger}}" bindrefresherrefresh="getOrderDetail"
refresher-enabled scroll-y style="height:{{scrollViewHeight*2}}rpx;">
refresher-enabled scroll-y class="order-detail">
<view class="page-container package-info">
<view class="station-list" bind:tap="navToOrderDetail">
<view class="sl-item" wx:for="{{orderDetail.packages}}" wx:key="index">
@ -8,7 +8,7 @@
<view class="key">{{item.pickup_codes.length}} 件包裹:</view>
<view class="value">
<label wx:for="{{item.pickup_codes}}" wx:key="index" wx:for-item="code">
{{orderDetail.order.status==orderStatus.created?'******':code}}
{{orderDetail.status==orderStatus.created?'******':code}}
</label>
</view>
</view>
@ -16,13 +16,13 @@
</view>
<view class="address">
<view class="title">
{{orderDetail.order.community_name}}
{{orderDetail.order.building_name}}
{{orderDetail.order.address_detail}}
{{orderDetail.community_name}}
{{orderDetail.building_name}}
{{orderDetail.address_detail}}
</view>
<view class="sub-title">
{{orderDetail.order.address_name}}
{{genderKV[orderDetail.order.address_gender]}}{{orderDetail.order.address_phone}}丨{{deliverStatusKV[orderDetail.order.delivery_method]}}
{{orderDetail.address_name}}
{{genderKV[orderDetail.address_gender]}}{{orderDetail.address_phone}}丨{{deliverStatusKV[orderDetail.delivery_method]}}
</view>
</view>
</view>
@ -30,43 +30,43 @@
<view class="item {{orderStep>0?'night':''}}">
<view class="content">
<view class="name">接单</view>
<view class="time">{{orderDetail.order.received_time}}</view>
<view class="time">{{orderDetail.received_time}}</view>
</view>
</view>
<view class="item {{orderStep>1?'night':(orderStep==1?'half-night':'')}}">
<view class="item {{orderStep>1?'night':''}}">
<view class="content">
<view class="name">取货</view>
<view class="time">{{orderDetail.order.pickup_time}}</view>
<view class="time">{{orderDetail.pickup_time}}</view>
</view>
</view>
<view class="item {{orderStep>2?'night':(orderStep==2?'half-night':'')}}">
<view class="item {{orderStep>2?'night':''}}">
<view class="content">
<view class="name">送达</view>
<view class="time">{{orderDetail.order.complete_time}}</view>
<view class="time">{{orderDetail.complete_time}}</view>
</view>
</view>
</view>
<view class="page-container photos" wx:if="{{orderDetail.order.complete_images&&orderDetail.order.complete_images.length>0}}">
<view class="page-container photos" wx:if="{{orderDetail.complete_images&&orderDetail.complete_images.length>0}}">
<view class="title">拍照留证</view>
<view class="imgs">
<image class="image" src="{{item}}" wx:for="{{orderDetail.order.complete_images}}" wx:key="index" bind:tap="preview" data-url="{{item}}"/>
<image class="image" src="{{item}}" wx:for="{{orderDetail.complete_images}}" wx:key="index" bind:tap="preview" data-url="{{item}}"/>
</view>
</view>
<view class="page-container income">
<label>订单收益:</label>
<label class="money">{{orderDetail.order.deliveryman_share}}</label>
<label class="money">{{orderDetail.deliveryman_share}}</label>
</view>
<view class="page-container order-info">
<view class="row">
<view class="key">订单编号</view>
<view class="value">{{orderDetail.order.orderid}}</view>
<view class="value">{{orderDetail.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">{{orderDetail.order.create_time}}</view>
<view class="value">{{orderDetail.create_time}}</view>
</view>
</view>
</scroll-view>

View File

@ -1,3 +1,7 @@
.order-detail{
height:100vh;
}
.package-info{
padding:56rpx 20rpx 40rpx 20rpx;
position: relative;

View File

@ -7,7 +7,8 @@ Page({
*/
data: {
cardList:[],
listLoading:false
listLoading:false,
isShowConfirm:false
},
/**
@ -20,24 +21,21 @@ Page({
url: '/pages/user/bank/editor/index',
})
},
deleteCard(event){
showConfirm(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();
});
}
}
})
this.currentCard = card;
this.setData({
isShowConfirm:true
});
},
deleteCard(){
userApi.cardList.delete(this.currentCard.id).then((data)=>{
wx.showToast({
icon:'success',
title: '删除成功',
})
this.getCardList();
});
},
/**
* 生命周期函数--监听页面初次渲染完成

View File

@ -1,4 +1,6 @@
{
"usingComponents": {},
"usingComponents": {
"modal-view":"/components/modalView"
},
"navigationBarTitleText": "银行卡管理"
}

View File

@ -7,7 +7,7 @@
<view class="head">
<image class="icon-card" src="/assets/icon/card.png"/>
<view class="name">{{item.bank_name}}</view>
<image class="icon-delete" src="/assets/icon/delete.png" bind:tap="deleteCard" data-item="{{item}}"/>
<image class="icon-delete" src="/assets/icon/delete.png" bind:tap="showConfirm" data-item="{{item}}"/>
</view>
<view class="spliter"></view>
<view class="info-item">
@ -25,3 +25,5 @@
</view>
<button bind:tap="navToAdd" class="add-card-btn">添加银行卡</button>
</view>
<modal-view show="{{isShowConfirm}}" titleText="是否确认删除此银行卡" bind:ok="deleteCard"/>

View File

@ -16,10 +16,6 @@ Page({
* 生命周期函数--监听页面加载
*/
onLoad(options) {
const windowInfo = wx.getWindowInfo();
this.setData({
scrollViewHeight:windowInfo.windowHeight
})
this.loadList();
},
refreshList(){
@ -38,7 +34,10 @@ Page({
"pager.loading":true
})
userApi.incomeList().then((data)=>{
userApi.incomeList({
skip:this.data.pager.limit*this.data.pager.pageIndex,
limit:this.data.pager.limit
}).then((data)=>{
if(this.data.pager.pageIndex==0){
this.data.list = data.items;
}else{
@ -61,14 +60,12 @@ Page({
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**

View File

@ -1,15 +1,12 @@
<list-view bind:refresh="refreshList"
bind:loadMore="loadList" height="{{scrollViewHeight}}"
refresher-triggered="{{pager.refreshTrigger}}"
<list-view bind:refresh="refreshList" bind:loadMore="loadList"
refresher-triggered="{{pager.refreshTrigger}}" class="income-list"
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 class="item" wx:for="{{list}}" wx:key="index">
<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>
</list-view>

View File

@ -1,8 +1,11 @@
.income-list{
background-color: #ffffff;
margin-top:20rpx;
height:100vh;
}
.income-list .scroll-view-content{
padding-top:20rpx;
}
.income-list .item{
background-color: #ffffff;
display: flex;
padding:40rpx 30rpx;
border-bottom: 1rpx solid rgba(153, 153, 153, 0.2);

View File

@ -117,6 +117,11 @@ Page({
url: '/pages/user/bank/editor/index',
})
},
bankChange(event){
this.setData({
bank:event.detail.value
})
},
/**
* 生命周期函数--监听页面显示
*/

View File

@ -16,7 +16,7 @@
<view class="page-container banks">
<view class="head">提现方式</view>
<view class="spliter"></view>
<radio-group class="bank-list" model:value="{{bank}}">
<radio-group bindchange="bankChange" class="bank-list">
<label class="item" wx:for="{{bankList}}" wx:key="index">
<image class="icon" src="/assets/icon/card.png"/>
<view class="name">{{item.bank_name}}({{item.endNumber}})</view>

View File

@ -7,20 +7,15 @@ Page({
* 页面的初始数据
*/
data: {
scrollViewHeight:0,
pager:{limit:10,loading:false,loadAll:false,pageIndex:0,refreshTrigger:false},
list:[]
list:[],
statusKV:userApi.withdraw.statusKV
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
const windowInfo = wx.getWindowInfo();
console.log(windowInfo);
this.setData({
scrollViewHeight:windowInfo.windowHeight - windowInfo.statusBarHeight - 44
})
this.loadList();
},
refreshList(){
@ -39,14 +34,14 @@ Page({
"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;
userApi.withdraw.list({
skip:this.data.pager.pageIndex*this.data.pager.limit,
limit:this.data.pager.limit
}).then((data)=>{
data.items.map((item)=>{
item.displayName = `${item.bank_name}(${item.bank_card_number.substr(item.bank_card_number.length-4,4)})`;
})
if(this.data.pager.pageIndex==0){
this.data.list = data.items;
}else{

View File

@ -1,18 +1,16 @@
<list-view bind:refresh="refreshList"
bind:loadMore="loadList" height="{{scrollViewHeight}}"
bind:loadMore="loadList" class="withdraw-list"
refresher-triggered="{{pager.refreshTrigger}}"
show-load-more="{{!(list.length==0&&pager.loadAll)}}"
loading="{{pager.loading}}" load-all="{{pager.loadAll}}">
<view class="withdraw-list">
<view class="item" wx:for="{{list}}" wx:key="index">
<view class="title">
<view class="left">{{item.description||"招商银行"}}</view>
<view class="right money">{{item.amount}}</view>
</view>
<view class="sub-title">
<view class="left">{{item.create_time}}</view>
<view class="status {{item.status}}">平台受理成功</view>
</view>
<view class="item" wx:for="{{list}}" wx:key="index">
<view class="title">
<view class="left">{{item.displayName}}</view>
<view class="right money">{{item.amount}}</view>
</view>
<view class="sub-title">
<view class="left">{{item.create_time}}</view>
<view class="status {{item.status}}">{{statusKV[item.status]}}</view>
</view>
</view>
</list-view>

View File

@ -1,9 +1,12 @@
.withdraw-list{
background-color: #ffffff;
margin-top:20rpx;
height:100vh;
}
.withdraw-list .scroll-view-content{
padding-top:20rpx;
}
.withdraw-list .item{
padding:40rpx 30rpx;
background-color: #ffffff;
border-bottom: 1rpx solid rgba(153, 153, 153, 0.2);
}
@ -30,3 +33,6 @@
.withdraw-list .item .status.PENDING{
color:var(--main-color);
}
.withdraw-list .item .status.APPROVED{
color: #00A643;
}