@@ -137,6 +137,10 @@ let config = { | |||||
* 预约确认 | * 预约确认 | ||||
*/ | */ | ||||
appointConfirm: "/api/wxCouponOrderReservation/updateStatus", | appointConfirm: "/api/wxCouponOrderReservation/updateStatus", | ||||
/** | |||||
* 预约确认 | |||||
*/ | |||||
appointSetDate: "/api/wxCouponOrderReservation/update", | |||||
/** | /** | ||||
* 获得openId | * 获得openId | ||||
*/ | */ | ||||
@@ -23,7 +23,7 @@ Page({ | |||||
const that = this | const that = this | ||||
const data = { | const data = { | ||||
pageNum: this.data.pageNum, | pageNum: this.data.pageNum, | ||||
pageSize: 20, | |||||
pageSize: 200, | |||||
} | } | ||||
if (startTime && endTime) { | if (startTime && endTime) { | ||||
@@ -31,7 +31,7 @@ Page({ | |||||
data.serchEndDate = endTime | data.serchEndDate = endTime | ||||
} | } | ||||
if (status) { | |||||
if (status || status === 0) { | |||||
data.status = status | data.status = status | ||||
} | } | ||||
@@ -44,7 +44,12 @@ Page({ | |||||
res.data.list.forEach(item => { | res.data.list.forEach(item => { | ||||
const appointStart = util.timestampToTime(item.startDate, 'YYYY-MM-DD hh:mm:ss') | const appointStart = util.timestampToTime(item.startDate, 'YYYY-MM-DD hh:mm:ss') | ||||
const appointEnd = util.timestampToTime(item.endDate, 'hh:mm:ss') | const appointEnd = util.timestampToTime(item.endDate, 'hh:mm:ss') | ||||
item.appointTime = appointStart + ' - ' + appointEnd | |||||
if (item.startDate && item.endDate) { | |||||
item.appointTime = appointStart + ' - ' + appointEnd | |||||
} else { | |||||
item.appointTime = "暂无"; | |||||
} | |||||
}) | }) | ||||
that.setData({ | that.setData({ | ||||
list: res.data.list, | list: res.data.list, | ||||
@@ -64,11 +69,21 @@ Page({ | |||||
}, | }, | ||||
setType(e) { | setType(e) { | ||||
const type = e.currentTarget.dataset.type * 1 | |||||
const type = e.currentTarget.dataset.type | |||||
this.setData({ | this.setData({ | ||||
currentID: '', | currentID: '', | ||||
}) | }) | ||||
this.getList(type) | |||||
if (type === 'X') { | |||||
this.getList(false) | |||||
} else if (type === 'Y') { | |||||
this.getList(0) | |||||
} else { | |||||
this.getList(type * 1) | |||||
} | |||||
}, | }, | ||||
setStartTime(e) { | setStartTime(e) { | ||||
@@ -12,8 +12,9 @@ | |||||
</view> | </view> | ||||
<view class="{{ currentID == 1 ? 'type active' : 'type' }}"> | <view class="{{ currentID == 1 ? 'type active' : 'type' }}"> | ||||
<view class="item" bindtap="setType" data-type="">全部</view> | |||||
<view class="item" bindtap="setType" data-type="0">未确认</view> | |||||
<view class="item" bindtap="setType" data-type="X">全部</view> | |||||
<view class="item" bindtap="setType" data-type="Y">待确认</view> | |||||
<view class="item" bindtap="setType" data-type="-1">未预约</view> | |||||
<view class="item" bindtap="setType" data-type="5">已确认</view> | <view class="item" bindtap="setType" data-type="5">已确认</view> | ||||
<view class="item" bindtap="setType" data-type="8">已完成</view> | <view class="item" bindtap="setType" data-type="8">已完成</view> | ||||
</view> | </view> | ||||
@@ -27,19 +28,20 @@ | |||||
<view class="{{ currentID != 1 ? 'list active' : 'list' }}"> | <view class="{{ currentID != 1 ? 'list active' : 'list' }}"> | ||||
<view tt:if="{{ list.length > 0 }}" class="item" tt:for="{{ list }}"> | <view tt:if="{{ list.length > 0 }}" class="item" tt:for="{{ list }}"> | ||||
<view class="head"> | <view class="head"> | ||||
<view>订单编号:{{ item.couponOrderId }}</view> | |||||
<view tt:if="{{ item.status == 0 }}" class="notice noAppoint">未确认</view> | |||||
<view>券码:{{ item.couponOrderId }}</view> | |||||
<view tt:if="{{ item.status == 0 }}" class="notice noAppoint">待确认</view> | |||||
<view tt:if="{{ item.status == 1 }}" class="notice noAppoint">已取消</view> | <view tt:if="{{ item.status == 1 }}" class="notice noAppoint">已取消</view> | ||||
<view tt:if="{{ item.status == 3 }}" class="notice refund">已退款</view> | <view tt:if="{{ item.status == 3 }}" class="notice refund">已退款</view> | ||||
<view tt:if="{{ item.status == 5 }}" class="notice confirm">已确认</view> | <view tt:if="{{ item.status == 5 }}" class="notice confirm">已确认</view> | ||||
<view tt:if="{{ item.status == '-1' }}" class="notice confirm">未预约</view> | |||||
<view tt:if="{{ item.status == 8 }}" class="notice complete">已完成</view> | <view tt:if="{{ item.status == 8 }}" class="notice complete">已完成</view> | ||||
<view tt:if="{{ item.status == 9 }}" class="notice complete">已评价</view> | <view tt:if="{{ item.status == 9 }}" class="notice complete">已评价</view> | ||||
</view> | </view> | ||||
<view class="body"> | <view class="body"> | ||||
<view class="items">商品名称:{{ item.couponTitle }}</view> | <view class="items">商品名称:{{ item.couponTitle }}</view> | ||||
<view class="items">用户手机号码:{{ item.userPhone }}</view> | <view class="items">用户手机号码:{{ item.userPhone }}</view> | ||||
<view class="items">服务预约时间:</view> | |||||
<view class="items">{{ item.appointTime }}</view> | |||||
<view class="items">服务预约时间:<text tt:if="{{ item.appointTime == '暂无' }}">暂无</text></view> | |||||
<view tt:if="{{ item.appointTime != '暂无' }}" class="items">{{ item.appointTime }}</view> | |||||
</view> | </view> | ||||
<view class="footer"> | <view class="footer"> | ||||
<button type="primary" bindtap="goDetail" data-id="{{ item.id }}">详情</button> | <button type="primary" bindtap="goDetail" data-id="{{ item.id }}">详情</button> | ||||
@@ -54,13 +54,14 @@ | |||||
.pickedTime { | .pickedTime { | ||||
position: relative; | position: relative; | ||||
bottom: 480rpx; | |||||
bottom: 590rpx; | |||||
text-align: center; | text-align: center; | ||||
} | } | ||||
.pickedTime .picker { | .pickedTime .picker { | ||||
display: inline-block; | display: inline-block; | ||||
background-color: #529ffd86; | background-color: #529ffd86; | ||||
font-size: 30rpx; | |||||
padding: 10rpx; | padding: 10rpx; | ||||
border-radius: 10rpx; | border-radius: 10rpx; | ||||
color: #ffffff; | color: #ffffff; | ||||
@@ -70,14 +71,14 @@ | |||||
display: inline-block; | display: inline-block; | ||||
width: 120rpx; | width: 120rpx; | ||||
height: 60rpx; | height: 60rpx; | ||||
line-height: 60rpx; | |||||
line-height: 50rpx; | |||||
padding: 5rpx; | padding: 5rpx; | ||||
margin-left: 40rpx; | margin-left: 40rpx; | ||||
} | } | ||||
.list { | .list { | ||||
position: relative; | position: relative; | ||||
bottom: 480rpx; | |||||
bottom: 590rpx; | |||||
margin-top: 20rpx; | margin-top: 20rpx; | ||||
z-index: -1; | z-index: -1; | ||||
} | } | ||||
@@ -8,7 +8,15 @@ var app = getApp() | |||||
Page({ | Page({ | ||||
data: { | data: { | ||||
id: "", | id: "", | ||||
detail: null | |||||
detail: null, | |||||
isShowBtns: true, | |||||
isSetTime: false, | |||||
isSetAddress: false, | |||||
pickedDate: "请选择日期", | |||||
pickedStartTime: "请选择", | |||||
pickedEndTime: "请选择", | |||||
startTime: "", | |||||
endTime: "" | |||||
}, | }, | ||||
onLoad(options) { | onLoad(options) { | ||||
@@ -34,9 +42,17 @@ Page({ | |||||
console.log(res, 'res'); | console.log(res, 'res'); | ||||
const appointStart = util.timestampToTime(res.data.startDate, 'YYYY-MM-DD hh:mm:ss') | const appointStart = util.timestampToTime(res.data.startDate, 'YYYY-MM-DD hh:mm:ss') | ||||
const appointEnd = util.timestampToTime(res.data.endDate, 'hh:mm:ss') | const appointEnd = util.timestampToTime(res.data.endDate, 'hh:mm:ss') | ||||
res.data.appointTime = appointStart + ' - ' + appointEnd | |||||
if (res.data.startDate && res.data.endDate) { | |||||
res.data.appointTime = appointStart + ' - ' + appointEnd | |||||
} else { | |||||
res.data.appointTime = "暂无"; | |||||
} | |||||
that.setData({ | that.setData({ | ||||
detail: res.data | |||||
detail: res.data, | |||||
pickedDate: util.timestampToTime(res.data.startDate, 'YYYY-MM-DD') || '请选择日期', | |||||
pickedStartTime: util.timestampToTime(res.data.startDate, 'hh:mm') || '请选择', | |||||
pickedEndTime: util.timestampToTime(res.data.endDate, 'hh:mm') || '请选择', | |||||
}) | }) | ||||
}).catch(err => { | }).catch(err => { | ||||
console.log(err, 'err'); | console.log(err, 'err'); | ||||
@@ -47,11 +63,32 @@ Page({ | |||||
tt.navigateBack(); | tt.navigateBack(); | ||||
}, | }, | ||||
chooseDate(e) { | |||||
console.log(e.detail.value, 'e'); | |||||
this.setData({ | |||||
pickedDate: e.detail.value | |||||
}) | |||||
}, | |||||
chooseStartTime(e) { | |||||
console.log(e.detail.value, 'e'); | |||||
this.setData({ | |||||
pickedStartTime: e.detail.value | |||||
}) | |||||
}, | |||||
chooseEndTime(e) { | |||||
console.log(e.detail.value, 'e'); | |||||
this.setData({ | |||||
pickedEndTime: e.detail.value | |||||
}) | |||||
}, | |||||
cancel() { | cancel() { | ||||
const that = this | const that = this | ||||
tt.showModal({ | tt.showModal({ | ||||
title: "提示", | title: "提示", | ||||
content: "是否与用户取得联系并取消预约?", | |||||
content: "是否与用户取得联系并取消确认?", | |||||
showCancel: true, | showCancel: true, | ||||
confirmText: "确认取消", | confirmText: "确认取消", | ||||
confirmColor: "#52a0fd", | confirmColor: "#52a0fd", | ||||
@@ -87,6 +124,87 @@ Page({ | |||||
}); | }); | ||||
}, | }, | ||||
setDate() { | |||||
const isSetTime = !this.data.isSetTime | |||||
this.setData({ | |||||
isSetTime, | |||||
isSetAddress: false | |||||
}) | |||||
}, | |||||
confirmDate() { | |||||
const isSetTime = !this.data.isSetTime | |||||
this.setData({ | |||||
isSetTime, | |||||
isSetAddress: false | |||||
}) | |||||
if (!isSetTime) { | |||||
const tempData = this.data | |||||
if (tempData.pickedDate == '请选择日期') { | |||||
tt.showToast({ | |||||
title: '请请选择日期!', | |||||
icon: 'fail' | |||||
}); | |||||
return | |||||
} | |||||
if (tempData.pickedStartTime == '请选择') { | |||||
tt.showToast({ | |||||
title: '请起始时间!', | |||||
icon: 'fail' | |||||
}); | |||||
return | |||||
} | |||||
if (tempData.pickedEndTime == '请选择') { | |||||
tt.showToast({ | |||||
title: '请结束时间!', | |||||
icon: 'fail' | |||||
}); | |||||
return | |||||
} | |||||
const data = { | |||||
id: this.data.detail.id, | |||||
couponOrderId: this.data.detail.couponOrderId, | |||||
startDate: tempData.pickedDate + " " + tempData.pickedStartTime + ":00", | |||||
endDate: tempData.pickedDate + " " + tempData.pickedEndTime + ":00" | |||||
} | |||||
this.goSetDate(data) | |||||
console.log(data, 'data'); | |||||
} | |||||
}, | |||||
setAddress() { | |||||
const isSetAddress = !this.data.isSetAddress | |||||
this.setData({ | |||||
isSetAddress, | |||||
isSetTime: false | |||||
}) | |||||
}, | |||||
settingAddress(e) { | |||||
const detail = this.data.detail | |||||
detail.detailedAddress = e.detail.value | |||||
this.setData({ | |||||
detail | |||||
}) | |||||
}, | |||||
confirmAddress() { | |||||
const isSetAddress = !this.data.isSetAddress | |||||
this.setData({ | |||||
isSetAddress, | |||||
isSetTime: false | |||||
}) | |||||
const data = { | |||||
id: this.data.detail.id, | |||||
couponOrderId: this.data.detail.couponOrderId, | |||||
detailedAddress: this.data.detail.detailedAddress, | |||||
} | |||||
this.goSetDate(data) | |||||
}, | |||||
goChange(id, status) { | goChange(id, status) { | ||||
const data = { | const data = { | ||||
id, | id, | ||||
@@ -113,5 +231,28 @@ Page({ | |||||
icon: "none" | icon: "none" | ||||
}); | }); | ||||
}) | }) | ||||
}, | |||||
goSetDate(data) { | |||||
const that = this | |||||
HttpBasics.post({ | |||||
url: config.api.appointSetDate, | |||||
data | |||||
}) | |||||
.then(res => { | |||||
console.log(res, 'res'); | |||||
tt.showToast({ | |||||
title: '修改成功!', | |||||
icon: "success", | |||||
duration: 2000 | |||||
}); | |||||
that.getDetail(that.data.id) | |||||
}).catch(err => { | |||||
console.log(err, 'err'); | |||||
tt.showToast({ | |||||
title: err.message, | |||||
icon: "none" | |||||
}); | |||||
}) | |||||
} | } | ||||
}) | }) |
@@ -1,20 +1,54 @@ | |||||
<!-- c:\Users\Holy-Knight-IX\Desktop\Working Space\4.TikTok-MiniPro\ttb\pages\appointDetail\appointDetail.ttml --> | <!-- c:\Users\Holy-Knight-IX\Desktop\Working Space\4.TikTok-MiniPro\ttb\pages\appointDetail\appointDetail.ttml --> | ||||
<view> | <view> | ||||
<view class="card"> | <view class="card"> | ||||
<view class="item">订单编号:{{ detail.couponOrderId }}</view> | |||||
<view class="item">券码:{{ detail.couponOrderId }}</view> | |||||
<view class="item">商品名称:{{ detail.couponTitle }}</view> | <view class="item">商品名称:{{ detail.couponTitle }}</view> | ||||
<view class="item">服务预约时间:{{ detail.appointTime }}</view> | |||||
<view class="item">服务预约时间:{{ detail.appointTime }}<span | |||||
tt:if="{{ detail.status == 0 || detail.status == 5 || detail.status == '-1' }}" class="edit" | |||||
bindtap="setDate">修改</span></view> | |||||
<view class="item">服务预约地址:<text class="lineHeight">{{ detail.userAddress }}</text></view> | <view class="item">服务预约地址:<text class="lineHeight">{{ detail.userAddress }}</text></view> | ||||
<view class="item">服务详细地址:<text class="lineHeight">{{ detail.detailedAddress }}</text></view> | |||||
<view class="item">服务详细地址:<text class="lineHeight">{{ detail.detailedAddress }}</text><span | |||||
tt:if="{{ detail.status == 0 || detail.status == 5 || detail.status == '-1' }}" class="edit" | |||||
bindtap="setAddress">修改</span></view> | |||||
<view class="item">用户手机号码:{{ detail.userPhone }}</view> | <view class="item">用户手机号码:{{ detail.userPhone }}</view> | ||||
<view class="item">备注:{{ detail.describeStr }}</view> | <view class="item">备注:{{ detail.describeStr }}</view> | ||||
</view> | </view> | ||||
<view class="btns"> | |||||
<button class="back" bindtap="back">返回</button> | |||||
<view tt:if="{{ isSetTime }}"> | |||||
<view class="datePickerFlex"> | |||||
<picker mode="date" start="{{ startTime }}" end="{{ endTime }}" disabled="{{ !isShowBtns }}" | |||||
bindchange='chooseDate'>选择服务日期:</picker> | |||||
<picker mode="date" start="{{ startTime }}" end="{{ endTime }}" disabled="{{ !isShowBtns }}" | |||||
bindchange='chooseDate' class="address"> | |||||
{{ pickedDate }}</picker> | |||||
</view> | |||||
<view class="datePickerFlex"> | |||||
<picker mode="time" disabled="{{ !isShowBtns }}" bindchange='chooseTime'>预计上门时间:</picker> | |||||
<picker mode="time" disabled="{{ !isShowBtns }}" bindchange='chooseStartTime' class="address">{{ | |||||
pickedStartTime | |||||
}}</picker> | |||||
- | |||||
<picker mode="time" start="{{ pickedStartTime }}" disabled="{{ !isShowBtns }}" bindchange='chooseEndTime' | |||||
class="address">{{ pickedEndTime }} | |||||
</picker> | |||||
</view> | |||||
</view> | |||||
<view tt:if="{{ isSetAddress }}"> | |||||
<textarea class="detailedAddress" placeholder="请输入服务详细地址" bindinput="settingAddress" | |||||
value="{{ detail.detailedAddress }}"></textarea> | |||||
</view> | |||||
<view class="{{ (isSetTime || isSetAddress) ? 'btns' : 'btns active' }}"> | |||||
<block tt:if="{{ detail.status != 8 }}"> | <block tt:if="{{ detail.status != 8 }}"> | ||||
<button tt:if="{{ isSetTime }}" class="confirm" bindtap="confirmDate">确定预约时间</button> | |||||
<button tt:if="{{ isSetAddress }}" class="confirm" bindtap="confirmAddress">确定详细地址</button> | |||||
<button tt:if="{{ detail.status == 0 }}" class="confirm" bindtap="confirm">确认预约</button> | <button tt:if="{{ detail.status == 0 }}" class="confirm" bindtap="confirm">确认预约</button> | ||||
<!-- <button tt:if="{{ detail.status == 0 }}" class="confirm" bindtap="confirm">修改预约时间</button> --> | |||||
<button tt:if="{{ detail.status == 5 }}" class="confirm" bindtap="cancel">取消预约</button> | |||||
<button tt:if="{{ detail.status == 5 }}" class="confirm" bindtap="cancel">取消确认</button> | |||||
</block> | </block> | ||||
</view> | </view> | ||||
</view> | </view> |
@@ -17,13 +17,17 @@ | |||||
} | } | ||||
.btns { | .btns { | ||||
position: fixed; | |||||
width: 95%; | width: 95%; | ||||
left: 50%; | |||||
bottom: 130rpx; | |||||
transform: translateX(-50%); | |||||
padding: 0 80rpx; | padding: 0 80rpx; | ||||
box-sizing: border-box; | box-sizing: border-box; | ||||
margin: auto; | |||||
} | |||||
.btns.active { | |||||
position: absolute; | |||||
left: 50%; | |||||
bottom: 110rpx; | |||||
transform: translateX(-50%); | |||||
} | } | ||||
.btns .back { | .btns .back { | ||||
@@ -33,4 +37,42 @@ | |||||
.btns .confirm { | .btns .confirm { | ||||
color: #ffffff; | color: #ffffff; | ||||
background-color: #52a0fd; | background-color: #52a0fd; | ||||
margin-top: 40rpx; | |||||
} | |||||
.datePickerFlex { | |||||
display: flex; | |||||
justify-content: space-between; | |||||
width: 85%; | |||||
background-color: #f4f5f6; | |||||
border-radius: 20rpx; | |||||
padding: 30rpx; | |||||
margin: 35rpx auto; | |||||
} | |||||
.address { | |||||
color: #8a8a8a; | |||||
} | |||||
.edit { | |||||
display: inline-block; | |||||
width: 70rpx; | |||||
height: 40rpx; | |||||
line-height: 40rpx; | |||||
font-size: 30rpx; | |||||
color: #ffffff; | |||||
text-align: center; | |||||
background-color: #c85963; | |||||
border-radius: 10rpx; | |||||
padding: 2rpx 5rpx; | |||||
margin-left: 20rpx; | |||||
} | |||||
.detailedAddress { | |||||
width: 95%; | |||||
padding: 20rpx; | |||||
border-radius: 15rpx; | |||||
box-sizing: border-box; | |||||
border: 1px solid #00000063; | |||||
margin: 0 auto; | |||||
} | } |