// pages/reserveProduct/reserveProduct.js let date = new Date() let times = [] var weekday = new Array(7) weekday[0] = '周日' weekday[1] = '周一' weekday[2] = '周二' weekday[3] = '周三' weekday[4] = '周四' weekday[5] = '周五' weekday[6] = '周六' for (let i = 0; i < 15; i++) { let stamp = date.setDate(date.getDate() + (i == 0 ? 0 : 1)) let year = new Date(stamp).getFullYear() let month = new Date(stamp).getMonth() + 1 < 10 ? '0' + (new Date(stamp).getMonth() + 1) : new Date(stamp).getMonth() + 1 let day = new Date(stamp).getDate() < 10 ? '0' + new Date(stamp).getDate() : new Date(stamp).getDate() let week = weekday[new Date(stamp).getDay()] times.push({ date: `${year + '-' + month + '-' + day}`, day: `${month + '-' + day}`, week: week }) } // let _hour = ( 10 > date.getHours() ) ? '0' + date.getHours() : date.getHours(); // let _minute = ( 10 > date.getMinutes() ) ? '0' + date.getMinutes() : date.getMinutes(); const app = getApp() import { get, post } from '../../utils/http' import { timestampToDate } from '../../utils/time' Page({ /** * 页面的初始数据 */ data: { times, time: '', currentDateIndex: 0, currentSwiperIndex: 0, currentTimeIndex: -2, currentDeviceIndex: -1, projectTime: [], productData: {}, // 项目耗材内容 projectData: {}, // 项目内容 deviceList: [], currentChangeTime: null, currentChangeDevice: null, source: 'product', // 来源 projectOrderList: [], // 项目耗材-可用订单列表 productProjectList: [], // 项目耗材-项目列表 currentProjectOrderIndex: -1, // 项目耗材-选中的订单下标 currentProductProjectIndex: -1, // 项目耗材-选中的项目下标 projectOrderData: {}, // 项目耗材-可用订单内容 showDateControl: 0, // 展示预约日期控件 showDeviceControl: 0, // 展示预约设备控件 allowAddOrder: 0 // 是否允许下单 }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { let date = new Date() let currentTimestamp = date.getTime() / 1000 + 60 * 2 let _time = timestampToDate(currentTimestamp, 'H:i') let source = options.source || 'product' if (options.productData) { let productData = decodeURIComponent(options.productData) productData = JSON.parse(productData) productData.store_address = app.globalData.storeData.belong_region this.setData({ productData: productData, time: _time, source: source }) if (source == 'product') { // 项目耗材预约 - 获取可绑定订单 this.getProjectOrder() } } }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () {}, /** * 生命周期函数--监听页面显示 */ onShow: function () {}, /** * 生命周期函数--监听页面隐藏 */ onHide: function () {}, /** * 生命周期函数--监听页面卸载 */ onUnload: function () {}, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () {}, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function () {}, /** * 用户点击右上角分享 */ onShareAppMessage: function () {}, /** * 项目耗材预约 * 获取可以绑定的预约订单 */ getProjectOrder() { let { productData } = this.data get( 'api/product/get_project_order', { product_id: productData.id, store_id: productData.store_id }, (res) => { // res.data.project_list.map((item) => { // // TODO 处理会员价和原价 // }) this.setData({ projectOrderList: res.data.order_list, productProjectList: res.data.project_list }) } ) }, /** * 获取可预约时间 */ getTime() { let { productData, currentDateIndex, projectTime, currentSwiperIndex, projectData, time } = this.data get( 'api/project/time', { store_id: productData.store_id, project_id: projectData.project_id, order_day: times[currentDateIndex].date, use_time: projectData.use_time }, (res) => { projectTime[0] = res.data.day projectTime[1] = res.data.night let sum = 0 let defaultTimeIndex = -1 projectTime.forEach((item, index) => { if (item.active == 1) { currentSwiperIndex = index } item.list.forEach((item, index) => { item.index = sum sum++ // 默认选中第一个可预约时间(用于后面的默认绑定设备) if (item.status == 1 && defaultTimeIndex == -1) { defaultTimeIndex = item.index } }) }) this.setData( { projectTime, currentSwiperIndex, showDateControl: 1 }, () => { // 默认选中第一个可预约时间 // if (defaultTimeIndex != -1) { // this.onChangeTime({ // currentTarget: { dataset: { index: defaultTimeIndex } } // }) // } this.bindTimeChange({ detail: { value: time } }) } ) } ) }, /** * 获取项目可预约的设备 * /api/project/device */ getProjectDevice() { let { currentTimeIndex, time, projectTime, currentSwiperIndex, productData, projectData, currentDateIndex } = this.data let order_time_id if (currentTimeIndex != -1) { projectTime[currentSwiperIndex].list.forEach((item, index) => { if (item.index == currentTimeIndex) { order_time_id = item.time_id } }) } else { order_time_id = time } console.log(productData) console.log(order_time_id) return new Promise((resolve, reject) => { get( 'api/project/device', { store_id: productData.store_id, project_id: projectData.project_id, order_day: times[currentDateIndex].date, order_time_id: order_time_id, use_time: projectData.use_time }, (res) => { this.setData( { deviceList: res.data }, () => { this.onChangeDevice({ currentTarget: { dataset: { index: 0 } } }) } ) resolve() console.log(res) }, (rej) => { this.setData({ currentTimeIndex: -2, currentChangeTime: null, currentDeviceIndex: -1, currentChangeDevice: null, allowAddOrder: 0 }) console.log(rej) } ) }) }, /** * 日期选择 */ onChangeDate(e) { let { currentDateIndex } = this.data if (currentDateIndex != e.currentTarget.dataset.index) { this.setData( { currentDateIndex: e.currentTarget.dataset.index, currentChangeDevice: null, currentChangeTime: null, currentTimeIndex: -2, currentSwiperIndex: 0, currentDeviceIndex: -1, deviceList: [] }, () => { this.getTime() } ) } }, /** * 时间段切换 */ onChangeSwiper(e) { this.setData({ currentSwiperIndex: e.currentTarget.dataset.index }) }, /** * 时间段切换 */ changeSwiper(e) { this.setData({ currentSwiperIndex: e.detail.current }) }, /** * 时间选择 */ onChangeTime(e) { let { projectTime, currentSwiperIndex, currentChangeTime, currentTimeIndex } = this.data projectTime[currentSwiperIndex].list.forEach((item, index) => { if (item.index == e.currentTarget.dataset.index) { currentChangeTime = item } }) if (currentTimeIndex != e.currentTarget.dataset.index) { this.setData({ currentTimeIndex: e.currentTarget.dataset.index, currentChangeTime, currentChangeDevice: null, currentDeviceIndex: -1 }) this.getProjectDevice() } }, /** * 点击自定义时间 */ bindTimeChange(e) { let { currentDateIndex, currentChangeTime } = this.data currentChangeTime = { order_day: times[currentDateIndex].date, time_id: e.detail.value } this.setData({ time: e.detail.value, currentTimeIndex: -1, currentChangeTime, currentChangeDevice: null, currentDeviceIndex: -1 }) this.getProjectDevice() }, /** * 选择设备 */ onChangeDevice(e) { let { deviceList } = this.data this.setData( { currentDeviceIndex: e.currentTarget.dataset.index, currentChangeDevice: deviceList[e.currentTarget.dataset.index] }, () => { // 控制确定按钮可点击 this.setData({ allowAddOrder: 1 }) } ) }, /** * 项目耗材预约 * 选择推荐去支付的项目 */ selectProductProject(e) { let { productData } = this.data let item = e.currentTarget.dataset.item let currentProductProjectIndex = e.currentTarget.dataset.index if (currentProductProjectIndex == this.data.currentProductProjectIndex) { currentProductProjectIndex = -1 this.setData({ currentProductProjectIndex, currentDateIndex: -1, currentTimeIndex: -2, currentDeviceIndex: -1, ['productData.project_id']: -1, showDateControl: 0, showDeviceControl: 0, allowAddOrder: 0 }) return } // 参数字段不一致,对齐其他场景所需参数 item = Object.assign( { id: item.project_id, name: item.project_name, banner_urls: [item.cover_url], price: item.original_price, store_id: productData.store_id }, item ) // 有效选项 this.setData( { currentProductProjectIndex, currentDateIndex: 0, ['productData.project_id']: item.project_id, projectData: item }, () => { this.getTime() } ) }, /** * 项目耗材预约 * 选择已支付的项目订单 */ selectProjectOrder(e) { let { productData } = this.data let item = e.currentTarget.dataset.item let currentProjectOrderIndex = e.currentTarget.dataset.index if (currentProjectOrderIndex == this.data.currentProjectOrderIndex) { currentProjectOrderIndex = -1 this.setData({ currentProjectOrderIndex, allowAddOrder: 0 }) return } // 有效选项 this.setData({ currentProjectOrderIndex, projectOrderData: item, allowAddOrder: 1 }) }, /** * 提交订单 */ addOrder() { let { productData, projectData, projectOrderData, currentTimeIndex, time, currentDateIndex, currentChangeTime, currentChangeDevice, allowAddOrder, deviceList } = this.data if (currentTimeIndex == -1) { currentChangeTime = { order_day: times[currentDateIndex].date, time_id: time, order_time: time } } console.log(currentChangeTime) if (!allowAddOrder) { wx.showToast({ title: '请先选择使用项目', icon: 'none' }) return } // 选择将升级的产品绑定至项目订单 if (projectOrderData.order_id) { wx.navigateTo({ url: `/pages/orderConfirm/orderConfirm?source=product_with_project_order&data=${JSON.stringify( projectOrderData )}&deviceData={}&timeData={}&productData=${JSON.stringify( productData )}&projectOrderData=${JSON.stringify(projectOrderData)}` }) return } if (currentChangeTime == null) { wx.showToast({ title: '请选择预约时间', icon: 'none' }) } else if ( new Date( `${currentChangeTime.order_day} ${currentChangeTime.order_time}` ) <= new Date() ) { wx.showToast({ title: '所选时间已超时,请重新选择', icon: 'none' }) } else if (currentChangeDevice == null) { let _title = '请选择设备' if (deviceList.length == 0) { _title = '当前所选时间无可用设备' } wx.showToast({ title: _title, icon: 'none' }) } else { wx.navigateTo({ url: `/pages/orderConfirm/orderConfirm?source=${ this.data.source }&data=${JSON.stringify(projectData)}&deviceData=${JSON.stringify( currentChangeDevice )}&timeData=${JSON.stringify( currentChangeTime )}&productData=${JSON.stringify(productData)}` }) } } })