// user/appointment/appointment.js const app = getApp(); const regeneratorRuntime = app.loadAsync() const model = app.loadModel("index") const http = app.loadHttp() const util = app.loadUtils("util") Page({ /** * 页面的初始数据 */ data: { system: app.globalData.system, //设备相关信息 pageTitle: "一键下单", //头部标题 isBack: true,//显示返回 visible: false,//弹出层 somList: [], date_list: [],//预约时间列表 bigIndex: 0,//大分类选中 somIndex: null,//小分类选中 address: "",//选中的收货地址 remarks: "",//备注 isPlaceOrder: false,//防止重复提交 postage: {},//邮费 shopList: { shopCart: [], //购物车商品数据 orderPrice: null, //商品总价 ordinaryPrice: null, //普通衣物的价格 workPrice: null, //工服衣物的价格 totalPrice: null, //扣除优惠+邮费的价格 postageMoney: null, //邮费 wxMoney: null,//微信该支付的钱 total: null, //底部显示的合计 }, isPay: [true, true],//0下标是微信支付 1下标是卡支付 isPayp: 2,//1卡支付 2微信支付 giftCard: {},//会员卡信息 coupon: {},//优惠券 isgiftCard: "",//拼接的卡劵信息方便操作 groupType: -1,//如果不是0就是团体用户,0 或 -1 是非广大用户 type: 1,//1是团体用户普通洗 2是洗工服 groupData: {},//团体用户折扣优惠数据信息 take_type: 1,//门店自取1 单位自取2 branchList: [], //支行列表 branchIndex: 0,// 当前用户选择的支行下标 takeTypeOrd: 1,//普通用户 自送门店1 上门取件2 addList: [], // 门店列表 addIndex: -1, //当前用户选择的门店下标 timeFreight: '', //如果团体客户在预约时间内则免运费 isCoupon: true, //是否显示优惠卷 coilingCode: '', //用户输入的卷码 formSource: 0,// 订单来源 如果不是0则显示码卷输入 freightTips: true, // true 显示 实付xx,false 3月底免运费 isCurtains: 0 // // 0 不是窗帘套餐, 1 是窗帘套餐 }, // 获取默认收货人 async getConsignee() { let token = await util.token() if (!token) return; let res = await http.http.request2({ url: `${http.api.defaultUserAddress}`, method: "POST" }) let add = res.data.data if (!!add.id) { add.all = add.provinceName + add.cityName + add.countryName + add.detail this.setData({ address: add }) } }, // 获取支行列表 async groupBranchList() { let res = await http.http.request2({ url: http.api.groupBranchList, method: 'POST' }) res.data.data.forEach((v,i)=>{ if(v.id == app.globalData.userInfo.group_branch){ this.setData({ branchIndex: i }) } }) this.setData({ branchList: res.data.data }) }, // 选择其他支行 pickerChange(e) { this.setData({ branchIndex: parseInt(e.detail.value), timeFreight: '', bigIndex: 0,//大分类选中 somIndex: null,//小分类选中 }) this.getMaketime() this.calculation() }, /** * 获取全部门店列表 */ async getStoreList() { let data = await model.storage.getSetting("position") let res = await http.http.request1({ url: `${http.api.disShopList}`, method: "POST", data: { pick_door: 1 } }) let rel = res.data.data; this.setData({ addList: [...rel] }) }, // 门店选择 pickerChangeOrd(e){ this.setData({ addIndex: parseInt(e.detail.value) }) this.calculation() }, // 获取邮费 async postage() { let url = ''; if (this.data.groupType !== 0 && this.data.type == 2) { url = http.api.newPostage } else { url = http.api.postage } let res = await http.http.request2({ url: url, method: "POST", data: { type: 2 } }) this.setData({ postage: res.data.data }) }, // 获取光大用户会员卡 async getGuangDa() { let res = await http.http.request2({ url: http.api.guangDa, method: "POST", data: { group_type: this.data.groupType } }) this.setData({ giftCard: res.data.data }) }, //弹出层开启关闭 onClose() { this.setData({ visible: !this.data.visible }) }, // 选中大分类 bigSelect(e) { let index = e.currentTarget.dataset.index this.setData({ bigIndex: index, somList: this.data.date_list[index].time_list }) }, // 选中小分类 somSelect(e) { let index = e.currentTarget.dataset.index let item = e.currentTarget.dataset.item if (item.type == '今日休息') { wx.showToast({ title: '每周四休息,给您带来不便,敬请谅解', icon: 'none', duration: 2000 }) return } else if (item.type == '2') { wx.showToast({ title: '当前时间段已过,请重新选择', icon: 'none', duration: 2000 }) return } this.setData({ somIndex: item, timeFreight: parseInt(item.post_desc) > 0 ? parseInt(item.post_desc) : 0 }) this.onClose() if(this.data.take_type == 2){ this.calculation() } }, // 获取收货地址并且赋值到页面 async getAdd() { let data = await model.storage.getSetting("address") if (!!data) { model.storage.deleteStorage('address') data.all = data.provinceName + data.cityName + data.countyName + data.detailInfo this.setData({ address: data || "" }) } }, /** * 获取预约时间 * 并把小分类赋值 */ async getMaketime() { let data = {} // isCurtains 如果为1,请求窗帘的活动时间,如果为 0 请求普通衣物和套餐时间 data.is_appoint_time = this.data.isCurtains; if(this.data.take_type == 2){ data.bind_id = this.data.branchList[this.data.branchIndex].id if(this.data.type == 1){ data.bind_wash_type = 2 }else{ data.bind_wash_type = 1 } } let time = await http.http.request1({ url: `${http.api.getTime}`, method: "POST", data:data }) this.setData({ date_list: time.data.data.date_list, somList: time.data.data.date_list[0].time_list }) }, // 团体用户折扣优惠数据信息 async groupDiscountInfo() { let res = await http.http.request2({ url: http.api.groupDiscountInfo, method: "POST" }) this.setData({ groupData: res.data.data }) }, // 团体是否门店自取 async tapTakeType(e) { this.setData({ take_type: e.currentTarget.dataset.type, bigIndex: 0,//大分类选中 somIndex: null,//小分类选中 timeFreight: '' }) this.getMaketime() this.calculation() // 1 自送门店 3月底免运费 // if (this.data.take_type == 1) { // this.setData({ // freightTips: true // }) // } }, // 普通用户门店自取和上门取件选择 async tapTakeTypeOrdinary(e) { this.setData({ takeTypeOrd: e.currentTarget.dataset.type, bigIndex: 0,//大分类选中 somIndex: null,//小分类选中 timeFreight: '' }) this.getMaketime() this.calculation() // 1 自送门店 3月底免运费 // if (this.data.takeTypeOrd == 2) { // this.setData({ // freightTips: true // }) // } }, // 提交下单 async placeOrder(e) { // 防止重复提交 if (this.data.isPlaceOrder) { return } let formId = e.detail.formId let m = this.data let add = m.address if (add == "" && this.data.take_type == 1 && (this.data.groupType !== 0 && this.data.groupType !== -1)) { model.msg.dataMsg({ content: "请选择收货地址", type: "warning" }) return } if (add == "" && this.data.takeTypeOrd == 2 && (this.data.groupType == 0 || this.data.groupType == -1)) { model.msg.dataMsg({ content: "请选择收货地址", type: "warning" }) return } if (m.somIndex == null && (this.data.takeTypeOrd == 2 || ((this.data.groupType != 0 && this.data.groupType != -1)))) { model.msg.dataMsg({ content: "请选择上门时间", type: "warning" }) return } if (this.data.addIndex == -1 && this.data.takeTypeOrd == 1 && (this.data.groupType == 0 || this.data.groupType == -1)) { model.msg.dataMsg({ content: "请选择门店", type: "warning" }) return } let data = { status: 1, accept_time: '', address_id: "", remarks: m.remarks, form_id: formId, form: this.data.formSource, code_num: this.data.coilingCode, wx_info: { name: add.userName, tel: add.telNumber, address: `${add.provinceName},${add.cityName},${add.countyName},${add.detailInfo}` } } // 判断是否是自送门店,如果是 logic_type = 1 if (this.data.takeTypeOrd == 1) { data.logic_type = 3 } else { data.logic_type = 1 } // 如果普通用户上门取件或团体客户上门取件则,在下单时加上地址id if(this.data.takeTypeOrd == 2 || this.data.take_type == 1) { data.address_id = add.id } // 光大用户 if (this.data.groupType != 0 && this.data.groupType != -1 ) { data.logic_type = 1 } // 普通用户门店自取 if (this.data.addIndex !== -1 && this.data.takeTypeOrd == 1 && (this.data.groupType == 0 || this.data.groupType == -1)) { data.accept_shop_id = this.data.addList[this.data.addIndex].id } if (this.data.takeTypeOrd == 2 || (this.data.groupType !== 0 && this.data.groupType !== -1)) { data.accept_time = (`${m.date_list[m.bigIndex].date} ${m.somIndex.time}`).replace(/(^\s*)|(\s*$)/g, "") } this.setData({ isPlaceOrder: true }) setTimeout(() => { this.setData({ isPlaceOrder: false }) }, 200) let res = await http.http.request2({ url: `${http.api.quickReserva}`, method: "POST", data: data }) if (res.data.status == 1) { model.msg.dataMsg({ content: res.data.msg, type: "none" }) // 500ms后跳转首页 setTimeout(() => { wx.redirectTo({ url: "/user/appointment/paid/paid" }) }, 500) return } }, changeSearch(e) { this.setData({ remarks: e.detail.value }) }, // 码卷 changeCode(e) { this.setData({ coilingCode: e.detail.value }) }, // 订单各种金额计算 calculation() { let orderPrice = 0, ordinaryPrice = 0, workPrice = 0, totalPrice = 0, postageMoney = 0, wxMoney = 0, total = 0, shopCart = this.data.shopList.shopCart, take_type= this.data.take_type; let groupType = this.data.groupType let coupon = this.data.coupon.price || 0 // 不打折的钱 let is_discountAll = 0 //如果选中的商品有is_special字段并且等于2则改成true //如果等于true则免运费 let is_specialAll = false // 邮费配置团体用户的折扣 let groupData = this.data.groupData shopCart.forEach((v, i) => { orderPrice += parseFloat(v.price) * v.num // 如果有套餐不给使用优惠卷 if (v.is_discount == 2){ this.setData({ isCoupon: false }) } // 如果is_special等于2则代表免运费 if (v.is_special == 2) { // 如果有套餐衣物,那么现实3月底不要运费的提示信息 this.setData({ freightTips: false }); is_specialAll = true } // 这部分钱是不需要打折的钱 if (v.is_discount == 2){ is_discountAll += parseFloat(v.price) * v.num } if (v.type == 2) { ordinaryPrice += parseFloat(v.price) * v.num } else if (v.type == 1) { workPrice += parseFloat(v.price) * v.num } }); // 如果groupType不是0则是团体用户 if (groupType !== 0) { totalPrice = (((ordinaryPrice - is_discountAll) * groupData.wx_discount / 100) + workPrice + is_discountAll) // 计算光大用户的专属折扣 ordinaryPrice = ((ordinaryPrice - is_discountAll) * groupData.wx_discount / 100) total = totalPrice } else { // 商品总价 totalPrice = ordinaryPrice + workPrice // 加上优惠卷 total = totalPrice - coupon ordinaryPrice = 0.00 // 计算普通用户选择会员卡和优惠券后的价格 if (this.data.giftCard.price) { total = ((total - is_discountAll) * (this.data.giftCard.price * 0.1)) + is_discountAll } } // 计算邮费 // 团体客户计算运费 if (groupType !== 0) { // 团体用户普通洗 if (this.data.type == 1) { postageMoney = this.postageTwo(total, is_specialAll) wxMoney = wxMoney + postageMoney } else if (this.data.type == 2) { // 团体用户工服洗计算 postageMoney = this.postageOne(total) } } else { // 正常用户运费计算 postageMoney = this.postageThree(total, is_specialAll) } // shopList.total 做三元运算判断,防止支付金额出现负数. this.setData({ 'shopList.orderPrice': orderPrice.toFixed(2), 'shopList.ordinaryPrice': ordinaryPrice.toFixed(2), 'shopList.workPrice': workPrice.toFixed(2), 'shopList.totalPrice': (totalPrice + postageMoney).toFixed(2), 'shopList.postageMoney': postageMoney.toFixed(2), 'shopList.wxMoney': ordinaryPrice.toFixed(2), 'shopList.total': (total + postageMoney).toFixed(2) <= 0 ? 0 : (total + postageMoney).toFixed(2) }) }, // 团体客户清洗工服的邮费计算 postageOne(total){ let postageMoney = 0; // 邮费配置团体用户的折扣 // 因为团体客户使用专属卡洗衣所以,运费从专属配置中获取 let groupData = this.data.groupData // 正常判断总价是否大于收取运费的阈值 if ((total >= groupData.satisfy_money)) { postageMoney = 0 } else { // 这一步中如果时间上不收取运费 并且是单位取件则不收取运费 if ((this.data.timeFreight <= 0 && this.data.take_type == 2)){ postageMoney = 0 }else{ postageMoney = groupData.postage_money } } return postageMoney }, // 团体客户清洗普通衣物邮费计算 // postageTwo(total, suit){ let postageMoney = 0; // 邮费配置 let postage = this.data.postage; // 正常判断总价是否大于收取运费的阈值 if ((total >= postage.satisfy_money) || suit) { postageMoney = 0 } else { // 如果是单位取件 并且 时间上是免运费 就不收运费 if ((this.data.timeFreight <= 0 && this.data.take_type == 2) || suit > 0){ postageMoney = 0 }else{ postageMoney = postage.postage_money } } return postageMoney }, // 普通客户清洗衣物的邮费计算 postageThree(total, suit){ let postageMoney = 0; // 邮费配置 let postage = this.data.postage; // 正常判断总价是否大于收取运费的阈值 如果是门店自取不收取客户运费 if (total >= postage.satisfy_money || suit || this.data.takeTypeOrd == 1) { postageMoney = 0 } else { postageMoney = postage.postage_money } return postageMoney }, // 获取卡劵 async getGiftCard() { let giftCard = await model.storage.getSetting("giftCard") if (!!giftCard) { model.storage.deleteStorage('giftCard') this.setData({ giftCard: giftCard, isgiftCard: giftCard.title + " " + giftCard.price + '折', isPayp: 1 }) } this.calculation() }, // 获取优惠券 async getCoupon() { let coupon = await model.storage.getSetting("coupon") if (!!coupon) { model.storage.deleteStorage('coupon') this.setData({ coupon: coupon }) } this.calculation() }, // 选择支付方式 selectPay(e) { let type = e.currentTarget.dataset.type let url = e.currentTarget.dataset.url if (type == 2) { this.setData({ isgiftCard: "", giftCard: {}, isPayp: type }) this.calculation() } else if (type == 1) { wx.navigateTo({ url: url }) } }, // 用户支付 async payment(e) { let formId = e.detail.formId let m = this.data let add = m.address if (add == "" && this.data.take_type == 1 && (this.data.groupType !== 0 && this.data.groupType !== -1)) { model.msg.dataMsg({ content: "请选择收货地址", type: "warning" }) return } if (add == "" && this.data.takeTypeOrd == 2 && (this.data.groupType == 0 || this.data.groupType == -1)) { model.msg.dataMsg({ content: "请选择收货地址", type: "warning" }) return } if (m.somIndex == null && (this.data.takeTypeOrd == 2 || ((this.data.groupType != 0 && this.data.groupType != -1)))) { model.msg.dataMsg({ content: "请选择上门时间", type: "warning" }) return } if (this.data.addIndex == -1 && this.data.takeTypeOrd == 1 && (this.data.groupType == 0 || this.data.groupType == -1)){ model.msg.dataMsg({ content: "请选择门店", type: "warning" }) return } // 如果是光大用户切礼卡中钱不足则提示 if (this.data.groupType !== 0 && this.data.type == 2 && parseFloat(this.data.giftCard.money) < this.data.shopList.workPrice) { model.msg.dataMsg({ content: "礼卡中余额不足不能清洗工服,请重新下单清洗普通衣物", type: "warning", duration: 3 }) return } let pro_id = '', pro_id_count = ''; let data = { status: 1, accept_time: '', address_id: "", remarks: m.remarks, form_id: formId, wx_info: { name: add.userName, tel: add.telNumber, address: `${add.provinceName},${add.cityName},${add.countyName},${add.detailInfo}` }, take_type: this.data.groupType == 39 ? this.data.take_type : 1 }; // 判断是否是自送门店,如果是 logic_type = 1 if (this.data.takeTypeOrd == 1) { data.logic_type = 3 } else { data.logic_type = 1 } // 如果普通用户上门取件或团体客户上门取件则,在下单时加上地址id if(this.data.takeTypeOrd == 2 || this.data.take_type == 1) { data.address_id = add.id } // 光大用户 if (this.data.groupType != 0 && this.data.groupType != -1) { data.logic_type = 1 } m.shopList.shopCart.forEach((v, i) => { pro_id += v.id + ',' pro_id_count += v.num + ',' }) data.pro_id = pro_id.replace(/^(\s|,)+|(\s|,)+$/g, '') data.pro_id_count = pro_id_count.replace(/^(\s|,)+|(\s|,)+$/g, '') if(this.data.take_type == 2 && this.data.groupType == 39){ data.brand_id = this.data.branchList[this.data.branchIndex].id } // 普通用户门店自取 if (this.data.addIndex !== -1 && this.data.takeTypeOrd == 1 && (this.data.groupType == 0 || this.data.groupType == -1)){ data.accept_shop_id = this.data.addList[this.data.addIndex].id } if (this.data.takeTypeOrd == 2 || (this.data.groupType !== 0 && this.data.groupType !== -1)){ data.accept_time = (`${m.date_list[m.bigIndex].date} ${m.somIndex.time}`).replace(/(^\s*)|(\s*$)/g, "") } let res = await http.http.request2({ url: http.api.newQReserva, method: "POST", data: data }) let payInfo = { orderID: res.data.data.order_id, userCouponID: 0, userCardID: 0 } // 光大用户 if (this.data.groupType !== 0 && this.data.groupType !== -1) { payInfo.payType = 3 payInfo.userCardID = this.data.giftCard.id if(this.data.take_type == 2){ payInfo.bindId = this.data.branchList[this.data.branchIndex].id } } else { // 普通用户 payInfo.payType = this.data.isPayp // 卡 if (this.data.isPayp == 1) { payInfo.userCardID = this.data.giftCard.id } // 优惠券 if (!!this.data.coupon.id) { payInfo.userCouponID = this.data.coupon.id } } let rel = await model.payment.pay(http.api.preShopOrder, payInfo) if (rel == 1) { // 500ms后跳转首页 setTimeout(() => { wx.redirectTo({ url: "/user/appointment/paid/paid" }) }, 500) return } }, /** * 生命周期函数--监听页面加载 */ onLoad: async function (options) { let isTel = app.globalData.userInfo.telnum if (isTel == "点击授权手机号" || isTel == '') { wx.navigateTo({ url: '/pages/login/login' }) return 1 } this.data.isCurtains = options.isCurtains // console.log("options.isCurtains: ", this.data.isCurtains) // 如果有值,则代表从别的小程序过来的 if (!!options.from){ this.setData({ formSource: options.from }) // 存储用户来源,在登录时使用 model.storage.setStorage("from", options.from) } Promise.all([this.getMaketime(),this.getConsignee(),this.groupBranchList(),this.postage(),this.getStoreList()]) .then( async (res)=>{ if (!!options.shopCart) { let shopCart = JSON.parse(options.shopCart) this.setData({ 'shopList.shopCart': shopCart, groupType: parseInt(options.group_type), type: parseInt(options.type) }) if (options.group_type !== '0') { // 如果是团体用户默认选中单位取件 this.setData({ take_type: 2 }) // 如果是团体客户重新调一次时间 因为团体默认单位取件 this.getMaketime() // 获取团体卡 this.getGuangDa() await this.groupDiscountInfo() } // 订单各种金额计算 this.calculation() } }) }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { }, /** * 生命周期函数--监听页面显示 */ onShow: function () { this.getAdd() if (this.data.groupType != -1) { this.getGiftCard() this.getCoupon() } }, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function () { }, /** * 用户点击右上角分享 */ onShareAppMessage: function () { } })