first commit

This commit is contained in:
编码猿
2024-09-27 01:32:49 +08:00
commit 28ebe05a64
7399 changed files with 1174529 additions and 0 deletions

View File

@@ -0,0 +1,768 @@
// 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 () {
}
})