| @@ -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; | |||||
| } | } | ||||