java-mall-app/pages/checkout/checkout.vue

2962 lines
92 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view style="overflow-x: hidden;" class="page-container">
<view v-if="!selfpickFlag">
<view v-if="(ud_id>0)" @click="selectAddress" class="m-addres-info m-cell-access">
<view class="m-ad-name">
<text>{{submitinfo.delivery_address_row.ud_name}}</text>
<text>{{submitinfo.delivery_address_row.ud_mobile}}</text>
</view>
<view class="m-ad-address" v-if="addressFlag || intraCityService">
<text>
{{submitinfo.delivery_address_row.ud_province}}/{{submitinfo.delivery_address_row.ud_city}}/{{submitinfo.delivery_address_row.ud_county}}
{{submitinfo.delivery_address_row.ud_address}}
</text>
</view>
<view class="m-cell-ft"></view>
</view>
<view v-else class="m-addres-info m-cell-access" @click="selectAddress">
<view class="m-ad-address u-null-ad" v-if="isVirtual">
<label class="iconfont icon-shouhuodizhi"></label>{{__('你还没有收货地址,马上')}}
<text>{{__('添加')}}</text>
</view>
<view class="m-ad-address u-null-ad" v-else>
<label class="iconfont icon-shouhuodizhi"></label>{{__('你还没有个人联系信息,马上')}}
<text>{{__('添加')}}</text>
</view>
<view class="m-cell-ft "></view>
</view>
</view>
<block v-if=" !isVirtual" >
<view class="distribution" v-if="(true)">
<view style="width:30%">{{__('配送方式')}}</view>
<view class="check" style="display:flex;align-items: center;width:70%;justify-content: space-around">
<view style="display:flex;align-items: center" @click="handerIntraCityService" :data-store_id="store_id">
<image v-if="(intraCityService)" style="width:32rpx;height:32rpx;border-radius:50%"
src="/static/images/ziti.png" />
<view v-else class="border"
style="border-radius:50%;width:26rpx;height:26rpx;border:1px solid #db384c" />
<view style="margin-left:10rpx">同城配送</view>
</view>
<!-- <view style="display:flex;align-items: center" v-if="(deliverys)" @click="draw" :data-store_id="store_id">
<image v-if="selfpickFlag && canSelfpick" style="width:32rpx;height:32rpx;border-radius:50%"
src="/static/images/ziti.png" />
<view v-else class="border"
style="border-radius:50%;width:26rpx;height:26rpx;border:1px solid #db384c" />
<view style="margin-left:10rpx">{{__('门店自提')}}</view>
</view> -->
<view style="display:flex;align-items: center;" v-if="(delivery)" @click="express">
<image v-if="(addressFlag)" style="width:32rpx;height:32rpx;border-radius:50%"
src="/static/images/ziti.png" />
<view v-else class="border"
style="border-radius:50%;width:26rpx;height:26rpx;border:1px solid #db384c" />
<view style="margin-left:10rpx">{{__('物流配送')}}</view>
</view>
<view style="display:flex;align-items: center" v-if="false" @click="serve" :data-store_id="store_id">
<image v-if="(storeServeFlag)" style="width:32rpx;height:32rpx;border-radius:50%"
src="/static/images/ziti.png" />
<view v-else class="border"
style="border-radius:50%;width:26rpx;height:26rpx;border:1px solid #db384c" />
<view style="margin-left:10rpx">{{__('到店服务')}}</view>
</view>
</view>
</view>
<!-- 自提 -->
<block v-if="(selfpickFlag || storeServeFlag)">
<view v-if="(selfpickFlag || storeServeFlag)" class="m-cells"
style="background:#fff;font-size:28rpx;padding:20rpx 30rpx">
<picker mode="date" :value="date" :start="stdate" :end="eddate" @change="bindDateChange">
<view class="picker" style="display:flex;justify-content: space-between">
<view>{{__('选择自提日期:')}}</view>
<view style="color:#717171;padding-right:40rpx">{{date||starttime}}</view>
</view>
</picker>
</view>
<navigator hover-class="none" v-if="((selfpickFlag || storeServeFlag) && chain_id)"
:url="'/chain/chain/list?issub=1&ud_id=' + (ud_id) + '&store_id=' + (store_id) + '&item_id=' + (item_ids) + '&spid=' + (spinfo)"
class="m-addres-info m-cell-access" style="margin-top:20rpx">
<label style="font-size:28rpx;margin-left:20rpx">{{__('请选择自提门店:')}}</label>
<view class="nearbylist-item" :data-address="(ChainInfo.chain_address)"
:data-name="(ChainInfo.chain_name)" :data-lat="(ChainInfo.chain_lat)"
:data-lng="(ChainInfo.chain_lng)">
<view class="item-info">
<label class="item-name">{{ChainInfo.chain_name}}</label>
<label v-if="(ChainInfo.chain_opening_hours&&ChainInfo.chain_close_hours)"
style="font-size:24rpx;color:#717171;margin-left:20rpx;">
({{ChainInfo.chain_opening_hours||""}}~{{ChainInfo.chain_close_hours||""}})
</label>
<label class="item-distance">{{ChainInfo.distance}}</label>
<view class="item-phone">{{__('商家电话:')}}<text v-if="ChainInfo.chain_mobile">{{ChainInfo.chain_mobile}}</text></view>
<view class="item-address">
<label class="iconfont icon-shouhuodizhi "
style="font-size:40rpx;margin-right:15rpx;"></label>
<label>{{ChainInfo.chain_address}}</label>
</view>
</view>
</view>
</navigator>
<!-- <view v-if="((selfpickFlag || storeServeFlag) && false)" class="m-cells m-cells-form"
style="margin-top:20rpx;z-index:1">
<view class="m-cell">
<view class="m-cell-hd" style="width:20%">
<label class="u-label">{{__('提货人')}}</label>
</view>
<view class="m-cell-bd">
<input class="u-input" maxlength="20" type="text" :value="(showud_name)"
:placeholder="__('请输入提货人姓名')" @input="inputud_name" />
</view>
<div v-if="(ud_name=='')" class="m-cell-ft">
<uni-icons class="m-icon-warn" type="warn"></uni-icons>
</div>
</view>
<view v-if="(selfpickFlag || storeServeFlag)" class="m-cell">
<view class="m-cell-hd" style="width:20%">
<label for="" class="u-label">{{__('手机号码')}}</label>
</view>
<view class="m-cell-bd">
<input class="u-input" type="number" :value="(showphone)" placeholder="请输入手机号码"
@input="inputphone" />
</view>
<div v-if="(!isre || phone=='')" class="m-cell-ft">
<uni-icons class="m-icon-warn" type="warn"></uni-icons>
</div>
</view>
</view> -->
</block>
<!-- 自提 -->
</block>
<block>
<template>
<view class="distribution" v-if="(true)" style="display: flex;flex-direction: column;">
<view class="check" style="width: 100%;">
<view style="width:100%;height: 40px;display: flex; border: 1px gray solid;border-radius: 5px;padding-left: 6px;margin: 3px 0px;align-items: center;"
v-if="!shouldHideImmediateDelivery"
:class="{ active: activeTab === 'immediate' }"
@click="setActiveTab('immediate')">
<text style="width: 30%;">立即配送</text>
<text style="width: 70%;">{{ immediateDeliveryTime }}</text>
</view>
<view style="width:100%;height: 40px;display: flex; border: 1px gray solid;border-radius: 5px;padding-left: 6px;margin: 3px 0px;align-items: center;"
:class="{ active: activeTab === 'scheduled' }" @click="openTimePicker">
<text style="width:30%;">预约配送</text>
<text style="width:70%;" >{{ activeTab === 'scheduled' ? dateTitle && selectedTime ? dateTitle + ' ' + selectedTime : '请选择时间' : '请选择时间' }} ></text>
</view>
</view>
</view>
</template>
</block>
<delivery-time-op
@dataCallback="dataCallback"
@timeCallback="timeCallback"
@close="closeTimePicker"
:dodge="true"
ref='model'
:content="content"
:barHidth='600'
title="选择预送达时间">
> </delivery-time-op>
<!-- <view class="m-cells m-cells-form" v-if="(false)">
<view class="m-cell">
<view class="m-cell-hd" style="width: 140rpx;"><label class="u-label">{{__('导购员')}}</label></view>
<view class="m-cell-bd">
<input class="u-input" type="text" v-model="salesperson_id" :placeholder="__('请输入导购员编号')" />
</view>
<div v-if="(salesperson_id=='')" class="m-cell-ft">
<uni-icons class="m-icon-warn" type="warn"></uni-icons>
</div>
</view>
</view> -->
<!-- <view class="m-cells m-cells-form" v-if="(false)">
<view class="m-cell">
<view class="m-cell-hd"><label class="u-label">{{__('预约人')}}</label></view>
<view class="m-cell-bd">
<input class="u-input" type="text" :value="(showud_name||'')" :placeholder="__('请输入预约人姓名')"
@input="inputud_name" />
</view>
<div v-if="(ud_name=='')" class="m-cell-ft">
<uni-icons class="m-icon-warn" type="warn"></uni-icons>
</div>
</view>
<view class="m-cell">
<view class="m-cell-hd"><label for="" class="u-label">{{__('电话号码')}}</label></view>
<view class="m-cell-bd">
<input class="u-input" type="number" :value="(showphone ||'')" :placeholder="__('请输入电话号码')"
@input="inputphone" />
</view>
<div v-if="(!isre || phone=='')" class="m-cell-ft">
<uni-icons class="m-icon-warn" type="warn"></uni-icons>
</div>
</view>
</view> -->
<view class="m-product-all">
<view class="m-product-list">
<block v-for="(store_items, store_index) in submitinfo.items" :key="store_index">
<view class="m-product-box">
<view class="m-store" :data-id="(store_items.id)">
<view class="m-store-c">
<label class="iconfont icon-store"></label>
<label class="m-store-info">
{{store_items.store_name}}
</label>
<span style="float: right;font-size: 10px;padding-right: 10rpx;color: #B2B2B2;"
v-if="selfpickFlag || storeServeFlag">{{__('自提地址: ')}}
{{store_items.store_address}}</span>
</view>
</view>
<view v-for="(item, itemindex) in store_items.items" :key="itemindex" class="m-product-item"
style="height: auto;flex-direction: column;">
<view :class="'m-item-c ' + ((item.cart_id==0)?'del':'')" :data-id="(item.cart_id)">
<navigator hover-class="none" :url="'/pages/product/detail?pid=' + (item.item_id)" class="m-product-img">
<image :src="(item.product_image)" />
</navigator>
<view class="m-product-info">
<navigator hover-class="none" :url="'/pages/product/detail?pid=' + (item.item_id)">
<view class="m-product-name">
<label><text v-if="(item.show_typename)"
class="tag tag-orange">{{item.show_typename}}</text>{{item.product_name}}</label>
<label class="m-min-name"
style="overflow:hiddentext-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1">
{{item.spec_info?item.spec_info:""}}
</label>
</view>
<view class="m-product-price">
<block v-if="true || item.item_unit_price>=0">
<text class="mcs">{{ __('¥') }}</text>{{number_format(item.item_unit_price, 2)}}
</block>
<label class="pre-info-price" v-if="(item.discount_sale_money>0)">
-<text class="mcs">{{ __('¥') }}</text>{{number_format(item.discount_sale_money, 2)}}
</label>
<block v-if="item.item_unit_points">
<label class="pre-info-price" style="margin: 0rpx 10rpx;">+</label><label
style="font-size:32rpx">{{item.item_unit_points}}</label><label style="font-size: 12px">{{__('积分')}}</label>
</block>
<block v-if="item.item_unit_sp">
<label class="pre-info-price" style="margin: 0rpx 10rpx;">+</label><label
style="font-size:32rpx">{{item.item_unit_sp}}</label><label style="font-size: 12px">{{__('众宝')}}</label>
</block>
<text style="float: right;padding-right: 50rpx;">x{{item.cart_quantity}}</text>
</view>
</navigator>
</view>
</view>
<!-- 模板调用单品加价购、赠品、满减 -->
<!--
pulse_gift_cart
pulse_bargains
pulse_bargains_cart
pulse_reduction
-->
<!-- pulse_gift_cart -->
<view v-if="(item.pulse_gift_cart.length > 0)"
v-for="(pluse, giftindex) in item.pulse_gift_cart" :key="giftindex" class="m-item-act"
:data-id="(pluse.cart_id)">
<navigator hover-class="none" :url="'/pages/product/detail?pid=' + (pluse.item_id)"
class="m-product-img m-act-img">
<image :src="(pluse.product_image)" />
</navigator>
<navigator hover-class="none" :url="'/pages/product/detail?pid=' + (pluse.item_id)" class="act-item-name"
style="height:100rpx;line-height:100rpx;font-size: 28rpx;">
<label>【{{__('赠品')}}】{{pluse.product_item_name}}</label>
<text>x{{pluse.num}}</text>
</navigator>
</view>
<!-- pulse_reduction -->
<block v-if="(item.pulse_reduction.length > 0)"
v-for="(pluse, reductionindex) in item.pulse_reduction" :key="reductionindex">
<view v-if="(pluse.reduceMoney > 0)" class="m-item-act">
<view class="m-product-img icon-activity icon-activity-reduction">
</view>
<view class="act-item-name" style="height:160rpx;line-height:160rpx;font-size: 28rpx;">
<label>【{{sprintf(__('满减 -¥%s'), number_format(pluse.reduceMoney, 1))}}】</label>
<text>x{{pluse.times}}</text>
<!--{{pluse.actName}}-->
</view>
</view>
</block>
<!-- pulse_bargains_cart -->
<view v-if="(item.pulse_bargains_cart.length > 0)"
v-for="(pluse, bargainsindex) in item.pulse_bargains_cart" :key="bargainsindex"
class="m-item-act" :data-id="(pluse.cart_id)">
<navigator hover-class="none" :url="'/pages/product/detail?pid=' + (pluse.item_id)"
class="m-product-img m-act-img">
<image :src="(pluse.product_image)" />
</navigator>
<navigator hover-class="none" :url="'/pages/product/detail?pid=' + (pluse.item_id)" class="act-item-name"
style="height:100rpx;line-height:100rpx;font-size: 28rpx;width:400rpx;">
<label>【{{__('加价购')}}】{{pluse.product_item_name}}</label>
<text>x{{pluse.num}}</text>
</navigator>
</view>
</view>
<!-- 店铺加价购 pulse_bargains -->
<view class="m-product-item" v-if="(store_items.bargains.length > 0)"
v-for="(pluse, bargainsindex) in store_items.bargains" :key="bargainsindex">
<view class="m-item-act" v-if="(pluse.length > 0 || pluse.actId)" :data-id="(pluse.cart_id)">
<navigator hover-class="none" :url="'/pages/product/detail?pid=' + (pluse.item_id)"
class="m-product-img m-act-img">
<image :src="(pluse.product_image)" />
</navigator>
<navigator hover-class="none" :url="'/pages/product/detail?pid=' + (pluse.item_id)" class="act-item-name"
style="height:100rpx;line-height:100rpx;font-size: 28rpx;">
<label>【{{__('加价购')}}】{{pluse.actName}}</label>
<text>x{{pluse.num}}</text>
</navigator>
</view>
</view>
<!-- 店铺赠品 activitys.gift -->
<view class="m-product-item" v-if="(store_items.activitys.gift.length > 0)"
v-for="(pluse, giftindex) in store_items.activitys.gift" :key="giftindex">
<view class="m-item-act" v-if="(pluse.length > 0 || pluse.actId)" :data-id="(pluse.cart_id)">
<navigator hover-class="none" :url="'/pages/product/detail?pid=' + (pluse.item_id)"
class="m-product-img m-act-img">
<image :src="(pluse.product_image)" />
</navigator>
<navigator hover-class="none" :url="'/pages/product/detail?pid=' + (pluse.item_id)" class="act-item-name"
style="height:100rpx;line-height:100rpx;font-size: 28rpx;">
<label>【{{__('赠品')}}】{{pluse.product_item_name}}</label>
<text>x{{pluse.num}}</text>
</navigator>
</view>
</view>
<!-- 店铺满返优惠券 activitys.manhui -->
<block v-if="(store_items.activitys.manhui && store_items.activitys.manhui.length > 0)">
<view><label>【{{__('满返优惠券')}}】</label></view>
<view class="m-product-item" v-for="(pluse, manhuiindex) in store_items.activitys.manhui"
:key="manhuiindex" style="height: 140rpx;">
<view class="m-item-act">
<navigator hover-class="none" url="/activity/coupon/list" class="m-product-img m-act-img"
style="width: 30%">
<image style="width: 100%;" :src="(pluse.give_row.voucher_image || '')" />
</navigator>
<view class="act-item-name"
style="height:100rpx;line-height:100rpx;font-size: 28rpx;width:60%;padding: 0 30rpx;">
<label>{{pluse.give_name}} </label>
<label v-if="!pluse.give_enable" style="color:gray;margin-left:10rpx;"> {{__('尚未满足条件')}}</label>
</view>
</view>
</view>
</block>
<!-- 店铺满减 activitys.reduction -->
<block v-if="(store_items.activitys.reduction.length > 0)"
v-for="(pluse, reductionindex) in store_items.activitys.reduction" :key="reductionindex">
<view class="m-product-item" v-if="(pluse.actId) && (pluse.reduceMoney > 0)">
<view class="m-item-act" style="height: auto;" :data-id="(pluse.cart_id)">
<view class="m-product-img icon-activity icon-activity-reduction">
</view>
<view class="act-item-name" style="height:160rpx;line-height:160rpx;font-size: 28rpx;">
<label>【{{sprintf(__('满减 -¥%s'), mf(pluse.reduceMoney))}}】</label>
<text>x{{pluse.times}}</text>
<!--{{pluse.actName}}-->
</view>
</view>
</view>
</block>
<block v-if="(isVirtual)">
<view class="datetime" v-if="(product_service_date_flag)"
style="background:#fff;border-top:1px solid #d9d9d9;border-bottom:1px solid #d9d9d9;margin-top:20rpx;padding:20rpx 20rpx;display:flex;font-size:30rpx">
<view class="section" style="width:60%">
<picker mode="date" :value="(date)" :start="(stdate)" :end="(eddate)"
@change="bindDateChange">
<view class="picker">
{{__('选择日期:')}} {{date}}
</view>
</picker>
</view>
<view class="section" style="width:40%">
<picker mode="time" :value="(time)" @change="bindTimeChange">
<view class="picker">
{{__('选择时间:')}} {{time}}
</view>
</picker>
</view>
</view>
<!--地图-->
<navigator
:url="'/chain/chain/list?issub=1&ud_id=' + ud_id + '&item_id=' + item_id + '&spid=' + spinfo + '&store_id=' + (store_id)"
class="m-addres-info m-cell-access" style="margin-top:20rpx" v-if="(chainFlag)">
<label style="font-size:28rpx;margin-left:20rpx">{{__('请选择门店:')}}</label>
<view class="nearbylist-item" :data-address="(ChainInfo.chain_address)"
:data-name="(ChainInfo.chain_name)" :data-lat="(ChainInfo.chain_lat)"
:data-lng="(ChainInfo.chain_lng)">
<view class="item-info">
<label class="item-name">{{ChainInfo.chain_name}}</label>
<label class="item-distance">{{ChainInfo.distance}}</label>
<view class="item-phone" v-if="ChainInfo.chain_mobile">{{__('商家电话:')}}
<text>{{ChainInfo.chain_mobile}}</text>
</view>
<view class="item-address">
<label class="iconfont icon-shouhuodizhi "
style="font-size:40rpx;margin-right:15rpx;"></label>
<label>{{ChainInfo.chain_address}}</label>
</view>
</view>
</view>
</navigator>
<!--地图-->
<view class="m-cells m-cells-form hide" style="margin-top:20rpx;z-index:1">
<view class="m-cell" v-if="(product_service_contactor_flag)">
<view class="m-cell-hd" style="width:20%">
<label class="u-label">{{__('预约人')}}</label>
</view>
<view class="m-cell-bd">
<input class="u-input" maxlength="20" type="text" :value="(showud_name)"
placeholder="请输入预约人姓名" @input="inputud_name" />
</view>
<div v-if="(ud_name=='')" class="m-cell-ft">
<uni-icons class="m-icon-warn" type="warn"></uni-icons>
</div>
</view>
<view class="m-cell" v-if="(product_service_contactor_flag)">
<view class="m-cell-hd" style="width:20%">
<label for="" class="u-label">{{__('手机号码')}}</label>
</view>
<view class="m-cell-bd">
<input class="u-input" type="number" :value="(showphone)" placeholder="请输入手机号码"
@input="inputphone" />
</view>
<div v-if="(!isre || phone=='')" class="m-cell-ft">
<uni-icons class="m-icon-warn" type="warn"></uni-icons>
</div>
</view>
<view class="m-cell" v-if="(true)">
<view class="m-cell-hd" style="width:20%">
<label for="" class="u-label">{{__('详细地址')}}</label>
</view>
<view class="m-cell-bd">
<input class="u-input" maxlength="100" type="text" :value="(showdetail )"
placeholder="请输入详细地址" @input="inputdetail" />
</view>
<view v-if="(detail=='')" class="m-cell-ft">
<uni-icons class="m-icon-warn" type="warn"></uni-icons>
</view>
</view>
</view>
<view class="m-cells-title">{{__('备注')}}</view>
<view class="m-cells m-cells-form">
<view class="m-cell">
<view class="m-cell-bd">
<textarea class="u-textarea" maxlength="200" :value="(store_items.remark)"
:data-id="(store_index)" :data-store_id="(store_items.store_id)"
@input="inputRemark"></textarea>
<view class="u-textarea-counter">
<label>{{order_message_len[store_index] || 0}}</label>/200
</view>
</view>
</view>
</view>
<view class="hint m-cell" v-if="(kind_id==1202)">
<text>{{__('温馨提示:请您确认预约时间与地址仔细核对手机号并保持电话畅通。下单成功后您可在“我的预约”查看订单。距离预约服务时间超过24小时您可以取消预约订单距离预约服务时间24小时之内可以联系商家取消预约订单。')}}
</text>
</view>
</block>
<block v-else>
<view style="display: flex">
<view class="m-cells-title">{{__('备注')}}</view>
<input class="u-textarea" maxlength="200" :value="(store_items.remark)" :placeholder="__('建议留言前先于商家沟通确认')" placeholder-class="placeholder-u-textarea"
:data-id="(store_index)" :data-store_id="(store_items.store_id)"
@input="inputRemark"></input>
</view>
</block>
<view class="m-cells total-info">
<view class="m-cell" @click="listInvoice" :data-id="(store_index)"
:data-user_invoice_id="user_invoice_id" v-if="store_items.sc_is_enabled_invoice === 1">
<view class="m-cell-bd">
<text>{{__('发票')}}</text>
<text class="highlight12" v-if="(invoice_header && user_invoice_id)">
({{invoice_header}})
</text>
<text class="highlight12" v-else-if="(user_invoice_id == 0)">
({{__('不需要发票')}})
</text>
<text class="highlight12" v-else>({{__('不需要发票')}})</text>
</view>
<view class="arrow m-cell-access">
<view class="m-cell-ft "></view>
</view>
</view>
<view class="m-cell">
<view class="m-cell-bd">
<text>{{__('商品总额')}}</text>
</view>
<view class="m-cell-ft m-order-typetxt">
{{__('¥')}}{{number_format(store_items.productMoneySelGoods, 2)}}
</view>
<view class="arrow"></view>
</view>
<view class="m-cell" v-if="store_items.productPointsSel">
<view class="m-cell-bd">
<text>{{__('积分抵扣')}}</text>
</view>
<view class="m-cell-ft m-order-typetxt">{{store_items.productPointsSel}}{{__('积分')}}</view>
<view class="arrow"></view>
</view>
<view class="m-cell" v-if="store_items.productSpSel">
<view class="m-cell-bd">
<text>{{__('众宝抵扣')}}</text>
</view>
<view class="m-cell-ft m-order-typetxt">{{store_items.productSpSel}}{{__('众宝')}}</view>
<view class="arrow"></view>
</view>
<view class="m-cell m-cell-parent" v-if="(store_items.activityDiscountMoney>0)">
<view class="m-cell-bd">
<text>{{__('活动优惠')}}</text>
</view>
<view class="m-cell-ft m-order-typetxt">
-{{__('¥')}}{{number_format(store_items.activityDiscountMoney,2)}}</view>
<view class="arrow"></view>
</view>
<block v-if="store_items.discount_items">
<view class="m-cell m-cell-sub" v-if="(store_items.discount_items.limited_discount>0)">
<view class="m-cell-bd">
<text>{{__('限时折扣')}}</text>
</view>
<view class="m-cell-ft m-order-typetxt">
-{{__('¥')}}{{number_format(store_items.discount_items.limited_discount,2)}}
</view>
<view class="arrow"></view>
</view>
<view class="m-cell m-cell-sub" v-if="(store_items.discount_items.one_piece_discount>0)">
<view class="m-cell-bd">
<text>{{__('单件折')}}</text>
</view>
<view class="m-cell-ft m-order-typetxt">
-{{__('¥')}}{{number_format(store_items.discount_items.one_piece_discount,2)}}
</view>
<view class="arrow"></view>
</view>
<view class="m-cell m-cell-sub" v-if="(store_items.discount_items.reduction>0)">
<view class="m-cell-bd">
<text>{{__('满减')}}</text>
</view>
<view class="m-cell-ft m-order-typetxt">
-{{__('¥')}}{{number_format(store_items.discount_items.reduction,2)}}
</view>
<view class="arrow"></view>
</view>
<view class="m-cell m-cell-sub" v-if="(store_items.discount_items.giftbag>0)">
<view class="m-cell-bd">
<text>{{__('组合套餐')}}</text>
</view>
<view class="m-cell-ft m-order-typetxt">
-{{__('¥')}}{{number_format(store_items.discount_items.giftbag,2)}}
</view>
<view class="arrow"></view>
</view>
<view class="m-cell m-cell-sub" v-if="(store_items.discount_items.multple>0)">
<view class="m-cell-bd">
<text>{{__('多件折')}}</text>
</view>
<view class="m-cell-ft m-order-typetxt">
-{{__('¥')}}{{number_format(store_items.discount_items.multple,2)}}
</view>
<view class="arrow"></view>
</view>
<view class="m-cell m-cell-sub" v-if="(store_items.discount_items.reduction_again>0)">
<view class="m-cell-bd">
<text>{{__('折上折')}}</text>
</view>
<view class="m-cell-ft m-order-typetxt">
-{{__('¥')}}{{number_format(store_items.discount_items.reduction_again,2)}}</view>
<view class="arrow"></view>
</view>
</block>
<!-- 提货券初始为0选择提货券后再修改 -->
<view class="m-cell" @click="suitredemptionlist" :data-id="(store_index)"
:data-redemption_id="(store_items.redemption_id)"
v-if="(store_items.redemption_items.length>0)">
<view class="m-cell-bd">
<text>{{__('提货券')}}</text>
<text class="highlight12" v-if="(store_items.redemption_items.length>0)">
({{store_items.redemption_items.length}}{{__('张提货券可用')}})
</text>
<text class="highlight12" v-else>{{__('(无可用提货券)')}}</text>
</view>
<view class="m-cell-ft m-order-typetxt"
v-if="(store_items.redemption_use_row && store_items.redemption_use_row.redemption_price)">
-{{__('¥')}}{{store_items.redemption_use_row.redemption_price}}
</view>
<view class="arrow m-cell-access">
<view class="m-cell-ft "></view>
</view>
</view>
<!-- 优惠券初始为0选择优惠券后再修改 -->
<view class="m-cell" @click="suitcouponlist" :data-id="(store_index)"
:data-user_voucher_id="(store_items.user_voucher_id)"
v-if="(store_items.voucher_items.length>0)">
<view class="m-cell-bd">
<text>{{__('优惠券')}}</text>
<text class="highlight12" v-if="(store_items.voucher_items.length>0)">
<block v-if="!(store_items.voucher_use_row && store_items.voucher_use_row.voucher_price)">
({{store_items.voucher_items.length}}{{__('张优惠券可用')}})
</block>
</text>
<text class="highlight12" v-else>{{__('(无可用优惠券)')}}</text>
</view>
<view class="m-cell-ft m-order-typetxt"
v-if="(store_items.voucher_use_row && store_items.voucher_use_row.voucher_price)">
-{{__('¥')}}{{store_items.voucher_use_row.voucher_price}}
</view>
<view class="arrow m-cell-access">
<view class="m-cell-ft "></view>
</view>
</view>
<!--会员折扣 -->
<view class="m-cell" v-if="(store_items.policy_discount_amount>0)">
<view class="m-cell-bd">
<text>{{__('会员折扣')}}</text>
<text
style="font-size:24rpx;color:#717171">{{sprintf(__('(%s折)'), store_items.policy_discountrate/10)}}</text>
</view>
<view class="m-cell-ft m-order-typetxt">
-{{__('¥')}}{{number_format(store_items.policy_discount_amount,2)}}</view>
<view class="arrow"></view>
</view>
<view class="m-cell">
<view class="m-cell-bd">
<text>{{__('运费')}}</text>
</view>
<view class="m-cell-ft m-order-typetxt">
+{{__('¥')}}{{number_format(store_items.freight,2) || 0}}</view>
<view class="arrow"></view>
</view>
<view class="m-cell">
<view class="m-cell-bd">
<text>打包费</text>
</view>
<view class="m-cell-ft m-order-typetxt">
+{{__('¥')}}{{number_format(store_items.packing_fee,2) || 0}}</view>
<view class="arrow"></view>
</view>
<!-- 返利 -->
<view class="m-cell" v-if="(store_items.store_rebate>0)">
<view class="m-cell-bd">
<text>{{__('获得红包')}}</text>
</view>
<view class="m-cell-ft m-order-typetxt">{{sprintf(__('¥%.2f'), store_items.store_rebate)}}
</view>
<view class="arrow"></view>
</view>
<!-- 积分 -->
<view class="m-cell" v-if="(0)">
<view class="m-cell-bd">
<text>{{__('使用积分')}}</text>
<text style="font-size:24rpx;color:#717171">{{sprintf(__('(可使用%s积分)'), 0)}}</text>
</view>
<input type="number" class=" m-cell-ft m-order-typetxt" :value="(integral)"
placeholder="请输入抵扣积分" @input="count" />
<view class="arrow"></view>
</view>
<!-- 积分 -->
<view class="m-cell" v-if="(0)">
<view class="m-cell-bd">
{{__('积分抵现')}}
</view>
<view class="m-cell-ft m-order-typetxt" style="padding-right:20rpx">
-{{__('¥')}}{{number_format(discount,2)}}</view>
</view>
<!-- 余额抵扣 -->
<view class="m-cell" v-if="(0)">
<view class="m-cell-bd">
<text>{{__('余额抵扣')}}</text>
<text style="font-size:24rpx;color:#717171">{{sprintf(__('(可使用¥%s)'), 0)}}</text>
</view>
<view class=" m-cell-ft m-order-typetxt" v-if="(isBalance)">
{{__('¥')}}{{number_format(balance,2)}}
</view>
<switch checked @change="switchChange" style="transform:scale(0.6);" />
</view>
<view class="m-cell ">
<view class="m-cell-bd">
</view>
<view class="m-cell-ft m-total-info">
{{__('总金额:')}}
<!-- <text
class="m-total-price">{{sprintf(__('¥%.2f'), store_items.store_amount != null ? store_items.store_amount : store_items.order_money_select_items+store_items.freight+store_items.packing_fee)}}</text>
-->
<text class="m-total-price">{{ store_items.order_money_select_items }}</text>
</view>
</view>
<view v-if="(delivery_item_none_row.length > 0)">
<block v-for="(items, i) in delivery_item_none_row" :key="i">
{{items.product_item_name}},
</block>
</view>
</view>
</view>
</block>
</view>
</view>
<view class="u-cleanbox"></view>
<view class="m-footer-btn">
<view class="m-footer-btn-list">
<view class="m-footer-btn-item m-cart-total">
<view :style="'line-height: ' + (submitinfo.orderSelFreightAmount>0 ? 40 : 40) + 'rpx;'">
{{__('合计:')}}
<block v-if="order_amount">
<label>{{__('¥')}}</label>
<text class="m-total-price">{{number_format(order_amount,2)}}</text>
</block>
<label v-if="submitinfo.orderSelPointsAmount" style="padding: 0 6px"> + </label>
<text class="m-total-price"
v-if="submitinfo.orderSelPointsAmount">{{submitinfo.orderSelPointsAmount}}</text>
<label v-if="submitinfo.orderSelPointsAmount">{{__('积分')}}</label>
<label v-if="submitinfo.orderSelSpAmount" style="padding: 0 6px"> + </label>
<text class="m-total-price"
v-if="submitinfo.orderSelSpAmount">{{submitinfo.orderSelSpAmount}}</text>
<label v-if="submitinfo.orderSelSpAmount">{{__('众宝')}}</label>
</view>
<view style="line-height: 40rpx;font-size: 24rpx;">
<block v-if="submitinfo.orderDiscountAmount>0">
{{__('优惠')}}(<label>{{__('¥')}}{{number_format(submitinfo.orderDiscountAmount, 2)}}</label>)
<label style="margin-right: 10rpx;"></label>
</block>
<block v-if="submitinfo.order_rebate_amount>0">
{{__('获得红包')}}(<label>{{__('¥')}}{{number_format(submitinfo.order_rebate_amount, 2)}}</label>)
<label style="margin-right: 10rpx;"></label>
</block>
<block v-if="submitinfo.orderSelFreightAmount>0">
{{__('运费')}}(<label>{{__('¥')}}{{number_format(submitinfo.orderSelFreightAmount,2)}}</label>)
</block>
<block v-else>
{{__('免运费')}}
</block>
</view>
</view>
</view>
<view v-if="(isSubmit)" class="m-footer-btn-main u-disabled">
{{__('正在提交....')}}
</view>
<block v-else>
<view v-if="(!can_delivery && delivery_item_none_row.length > 0)" style="margin: auto;">
<button class="m-footer-btn-main" formType="submit">{{__('不可配送')}}</button>
</view>
<view v-else-if="(show_oos && delivery_item_none_row.length > 0)" style="margin: auto;">
<button class="m-footer-btn-main" formType="submit">{{__('暂时缺货')}}</button>
</view>
<form v-else-if="(!order_id)" report-submit="true" @submit="submitorder" style="margin: auto;">
<button class="m-footer-btn-main" formType="submit">{{__('提交订单')}}</button>
</form>
<form v-else report-submit="true" @submit="submitorder" style="margin: auto;">
<button class="m-footer-btn-main" formType="submit">{{__('去支付')}}</button>
</form>
</block>
</view>
<payment-box :paymentDataDefault="paymentData" :order_id="order_id" ref="paymentBox" @onCancel="onCancel"
@onPaid="onPaid" @onFail="onFail"></payment-box>
<loginPopup></loginPopup>
</view>
</template>
<script>
import paymentBox from "../../components/payment-box.vue";
import loginPopup from "../../components/loginPopup.vue";
import { mapState, mapMutations } from "vuex";
import deliveryTimeOp from '@/components/delivery-time-op/delivery-time-op.vue'
export default {
data() {
return {
options: {},
AddressInfo: {},
cartinfo: {},
isVirtual: 0,
ud_id: 0,
spinfo: "",
remark: "",
remarkLength: 0,
formId: "",
submitinfo: {
items: [],
UserMembership: {},
},
store_ids_time:0,
selectedTime:"",
dateTitle:"",
activeTab: "immediate",
content:[],
user_voucher_ids: [],
redemption_ids: [],
order_message: {},
order_message_len: {},
isSubmit: false,
order_id: "",
paymentData: {},
integral: "",
discount: 0,
immediateDeliveryTime:"",
disbursements: "",
IsUseCoupon: 1,
canSelfpick: 0, //是否允许自提
addressFlag: 0, // 快递配送
storeSelfPickFlag: 0, // 店铺自提
storeServeFlag: 0, // 到店服务
selfpickFlag: 0, //是否自提
intraCityService: 1,
chainFlag: 0,
date: "",
starttime: "",
endtime: "",
pid: "",
ud_name: "",
phone: "",
stdate: "",
eddate: "",
time: "",
st: "",
et: "",
addInfo: "",
addInfo1: "",
shipMethod: 0,
physicalStoreId: "",
item_ids: [],
store_id: "",
userId: "",
chain_id: 0,
checked_store: 0,
item_id: "",
activity_id: 0,
sponsorId: 0,
balance: 0,
realMoney: 0,
isBalance: true,
eCardCash: 0,
extraCash: 0,
isMembership: true,
isECashCard: true,
isCoupon: true,
isTmplMsg: true,
can_delivery: false,
ifcart: 1,
cart_id: "",
order_amount: 0,
ChainInfo: {},
chain_rows: [],
transportIds: [],
delivery: false,
deliverys: false,
latitude: "",
longitude: "",
invoice_header: "",
invoice_type_id: 0,
user_invoice_id: 0,
invoice_row: {},
urlArgs: {},
delivery_item_none_row: [],
show_oos: false,
product_service_date_flag: false,
product_service_contactor_flag: false,
showPopupFlag: false,
popupMsg: "",
isFightGroup: 0,
showud_name: "", //请输入预约人姓名
showphone: "", //请输入电话号码
isre: "", //请输入预约人姓名
showdetail: "", //请输入预约详细地址
detail: "", //
isdata: "", //
kind_id: 1201,
salesperson_id: "", //销售员Id
};
},
components: {
paymentBox,
loginPopup,
deliveryTimeOp
},
computed: {
...mapState([
"Config",
"StateCode",
"notice",
"plantformInfo",
"shopInfo",
"userInfo",
"hasLogin",
]),
shouldHideImmediateDelivery() {
const forbidStates = [3, 12];
// 检查所有店铺的items中是否有store_biz_state为12的
return this.submitinfo.items.some(store_item =>
forbidStates.includes(store_item.store_biz_state)
);
}
},
onLoad: async function (options) {
uni.setNavigationBarTitle({
title: this.__("订单提交"),
});
await this.$onLaunched;
var that = this;
//只传入item_id即可数据从服务端读取。
this.setData({
activity_id: options.activity_id || 0,
urlArgs: options,
options: options,
});
if (options.ifcart) {
this.setData({
ifcart: parseInt(options.ifcart),
});
}
if (options.cart_id) {
this.setData({
cart_id: options.cart_id,
});
}
if (options.checked_store) {
this.setData({
checked_store: options.checked_store,
});
}
//门店自提
if (options.chain_id) {
this.setData({
chain_id: parseInt(options.chain_id),
canSelfpick: true,
addressFlag: false,
selfpickFlag: true,
storeServeFlag: false,
});
} else {
let chain_id = this.$.getStorageSync("chain_id");
//不使用默认切换门店模式
chain_id = 0;
if (chain_id) {
} else {
chain_id = 0;
}
this.urlArgs.chain_id = chain_id;
if (chain_id) {
this.setData({
chain_id: parseInt(chain_id),
canSelfpick: true,
addressFlag: false,
selfpickFlag: true,
storeServeFlag: false,
});
} else {
}
}
// end 门店自提
var n = new Date(),
s = new Date(new Date().getTime() + 2 * 24 * 60 * 60 * 1000),
r = new Date();
var stdate = n.getFullYear() + "-" + (n.getMonth() + 1) + "-" + n.getDate(),
sdate = s.getFullYear() + "-" + (s.getMonth() + 1) + "-" + s.getDate(),
eddate =
r.getFullYear() + 1 + "-" + (r.getMonth() + 1) + "-" + r.getDate();
this.setData({
stdate: stdate,
date: sdate,
eddate: eddate,
});
var time = n.getHours() + ":" + n.getMinutes();
this.setData({
time: time,
st: time,
et: time,
});
this.notice.addNotification("RefreshOrder", that.RefreshOrder, that);
this.notice.addNotification(
"RefreshOrderChain",
that.RefreshOrderChain,
that
);
this.notice.addNotification("RefreshCoupon", that.RefreshCoupon, that);
this.notice.addNotification(
"RefreshRedemption",
that.RefreshRedemption,
that
);
this.notice.addNotification("GotoPayCheckout", that.gotopay, that);
this.notice.addNotification("Refreshinvoice", that.Refreshinvoice, that);
this.forceUserInfo(function (user) {
that.getPlantformInfo(function (plantformInfo) {
that.setData({
storeSelfPickFlag: plantformInfo.config.product_ziti_flag,
});
that.getCartList();
});
});
// var n = this.shopInfo.VendorFeatureSet;
// n.indexOf("Membership") > -1 ? this.setData({isMembership: true}) : this.setData({isMembership: false}), n.indexOf("ECashCard") > -1 ? this.setData({isECashCard: true}) : this.setData({isECashCard: false}), n.indexOf("Coupon") > -1 ? this.setData({isCoupon: true}) : this.setData({isCoupon: false}), n.indexOf("TmplMsg") > -1 ? this.setData({isTmplMsg: true}) : this.setData({isTmplMsg: false})
this.getTimeSlots();
},
onUnload: function () {
//移除通知
var that = this;
this.notice.removeNotification("RefreshOrder", that);
this.notice.removeNotification("RefreshOrderChain", that);
this.notice.removeNotification("RefreshCoupon", that);
this.notice.removeNotification("RefreshRedemption", that);
this.notice.removeNotification("GotoPayCheckout", that);
this.notice.postNotificationName("Refreshinvoice", that);
if (this.$refs.paymentBox.showBoxView) {
this.$refs.paymentBox.cancel();
}
},
onBackPress() {
if (this.$refs.paymentBox.showBoxView) {
this.$refs.paymentBox.cancel();
return true;
}
},
methods: {
...mapMutations([
"login",
"logout",
"getPlantformInfo",
"forceUserInfo",
"getUserInfo",
"reloadUserResource",
]),
refreshData(options) {
let that = this;
this.forceUserInfo(function (user) {
that.getCartList();
});
},
setActiveTab(tab) {
// 如果需要隐藏立即配送且用户点击了立即配送,则直接返回
if (tab === 'immediate' && this.shouldHideImmediateDelivery) {
return;
}
this.activeTab = tab;
if (tab === 'immediate') {
this.selectedTime = "";
this.dateTitle = "";
this.booking_state = 1; // 立即下单
} else {
this.booking_state = 2; // 预订单
}
},
openTimePicker(){
this.$refs.model.open();
},
closeTimePicker() {
this.$refs.model.model = false; // 关闭时间选择器
},
// 处理日期选择回调
dataCallback(item) {
console.log('日期选择回调', item);
// 你可以在这里处理日期选择的逻辑
},
timeCallback(item) {
console.log('时间选择回调', item);
this.selectedTime = item.time_title; // 选中的时间
this.dateTitle = item.date_title; // 选中的日期
if (this.selectedTime !== "立即送出") {
this.activeTab = 'scheduled'; // 如果选择的时间不是“立即送出”,激活“预约配送”
// 直接使用从接口获取的时间参数
this.booking_at = item.booking_at; // 预约时间戳
this.booking_begin_time = item.booking_begin_time; // 预约开始时间
this.booking_end_time = item.booking_end_time; // 预约结束时间
this.booking_state = 2; // 预订单状态
} else {
this.activeTab = 'immediate'; // 如果选择的时间是“立即送出”,激活“立即配送”
this.booking_state = 1; // 立即下单状态
}
// 打印确认字段是否正确赋值
console.log('booking_at:', this.booking_at);
console.log('booking_begin_time:', this.booking_begin_time);
console.log('booking_end_time:', this.booking_end_time);
},
inputud_name: function (e) {
this.setData({
ud_name: e.detail.value,
});
},
inputphone: function (e) {
this.setData({
phone: e.detail.value,
}),
/^1[23456789]\d{9}$/.test(e.detail.value)
? this.setData({
isre: true,
})
: this.setData({
isre: false,
});
},
RefreshOrder: function (e) {
this.setData({
ud_id: e.ud_id || e || 0,
chain_id: this.chain_id,
spinfo: e.spid,
addInfo1: this.addInfo,
});
// 修正urlArgs的ud_id参数
this.editUrlArgs("ud_id", e.ud_id);
this.getCartList();
},
RefreshOrderChain: function (e) {
//console.info(JSON.stringify(e));
this.setData({
ChainInfo: e.ChainInfo,
chain_id: e.ChainInfo.chain_id,
});
this.getCartList();
},
RefreshCoupon: function (options) {
var that = this;
var voucher_items = that.$.parseJSON(options.val);
var user_voucher_ids = this.user_voucher_ids;
for (var i = 0; i < voucher_items.length; i++) {
var store_id = voucher_items[i].store_id;
//如果当前为不使用store_id
if (voucher_items[i].user_voucher_id == options.user_voucher_id) {
if (!that.$.inArray(user_voucher_ids, options.user_voucher_id)) {
user_voucher_ids.push(options.user_voucher_id);
}
} else {
//删除已经存在的
that.$.arrayRemove(
user_voucher_ids,
voucher_items[i].user_voucher_id
);
}
}
this.setData({
user_voucher_ids: user_voucher_ids,
});
//修改店铺代金券数据,
//todo 未来修改为服务端操作。
var submitinfo = that.submitinfo;
var order_amount = submitinfo.orderSelMoneyAmount; //减去使用的代金券数据
//循环店铺
for (var sid = 0; sid < submitinfo.items.length; sid++) {
//循环使用的代金券
for (var j = 0; j < submitinfo.items[sid].voucher_items.length; j++) {
var voucher_item = submitinfo.items[sid].voucher_items[j];
var user_voucher_id = voucher_item.user_voucher_id;
//初始换店铺使用代金券数据为空
//如有发现一个,则退出本次循环。
submitinfo.items[sid].voucher_use_row = [];
submitinfo.items[sid].user_voucher_id = 0;
//如果为使用中
if (that.$.inArray(user_voucher_ids, user_voucher_id)) {
submitinfo.items[sid].voucher_use_row = voucher_item;
submitinfo.items[sid].user_voucher_id = user_voucher_id;
//order_amount = order_amount - voucher_item.voucher_price;
//submitinfo.items[sid].store_amount = submitinfo.items[sid].order_money_select_items + submitinfo.items[sid].freight - voucher_item.voucher_price;
order_amount = parseFloat(
(order_amount - voucher_item.voucher_price).toFixed(12)
);
order_amount = Math.max(0, order_amount);
submitinfo.items[sid].store_amount = parseFloat(
(
submitinfo.items[sid].order_money_select_items +
submitinfo.items[sid].freight -
voucher_item.voucher_price
).toFixed(12)
);
submitinfo.items[sid].store_amount = Math.max(
0,
submitinfo.items[sid].store_amount
);
//console.info(submitinfo.items[sid].store_amount)
break; //如有发现一个,则退出本次循环。
}
}
}
that.setData({
submitinfo: submitinfo,
order_amount: order_amount,
});
//this.getCartList()
},
async getTimeSlots() {
try {
const res = await uni.request({
url: this.Config.URL.cart.getTimeSlots, // 替换为实际的接口地址
method: 'GET',
data: {
store_ids: this.store_ids_time||''
}
});
if (res[1].statusCode === 200) {
console.log("接口返回的数据", res[1].data); // 打印返回的数据
if (res[1].data && Array.isArray(res[1].data.data)) {
this.content = res[1].data.data;
} else {
console.error('接口返回的数据格式不正确', res[1].data);
}
} else {
console.error('获取时间槽列表失败:', res[1].data.message);
}
} catch (error) {
console.error('请求时间槽列表时发生错误:', error);
}
},
RefreshRedemption: function (options) {
var that = this;
var redemption_items = that.$.parseJSON(options.val);
var redemption_ids = this.redemption_ids;
for (var i = 0; i < redemption_items.length; i++) {
var store_id = redemption_items[i].store_id;
//如果当前为不使用store_id
if (redemption_items[i].redemption_id == options.redemption_id) {
if (!that.$.inArray(redemption_ids, options.redemption_id)) {
redemption_ids.push(options.redemption_id);
}
} else {
//删除已经存在的
that.$.arrayRemove(redemption_ids, redemption_items[i].redemption_id);
}
}
this.setData({
redemption_ids: redemption_ids,
});
//修改店铺代金券数据,
//todo 未来修改为服务端操作。
var submitinfo = that.submitinfo;
var order_amount = submitinfo.orderSelMoneyAmount; //减去使用的代金券数据
console.log(order_amount);
//循环店铺
for (var sid = 0; sid < submitinfo.items.length; sid++) {
//循环使用的代金券
for (
var j = 0;
j < submitinfo.items[sid].redemption_items.length;
j++
) {
var redemption_item = submitinfo.items[sid].redemption_items[j];
var redemption_id = redemption_item.redemption_id;
console.log(redemption_id);
//初始换店铺使用代金券数据为空
//如有发现一个,则退出本次循环。
submitinfo.items[sid].redemption_use_row = [];
submitinfo.items[sid].redemption_id = 0;
//如果为使用中
if (that.$.inArray(redemption_ids, redemption_id)) {
submitinfo.items[sid].redemption_use_row = redemption_item;
submitinfo.items[sid].redemption_id = redemption_id;
//order_amount = order_amount - voucher_item.voucher_price;
//submitinfo.items[sid].store_amount = submitinfo.items[sid].order_money_select_items + submitinfo.items[sid].freight - voucher_item.voucher_price;
order_amount = parseFloat(
(order_amount - redemption_item.redemption_price).toFixed(12)
);
order_amount = Math.max(0, order_amount);
submitinfo.items[sid].store_amount = parseFloat(
(
submitinfo.items[sid].order_money_select_items +
submitinfo.items[sid].freight -
redemption_item.redemption_price
).toFixed(12)
);
submitinfo.items[sid].store_amount = Math.max(
0,
submitinfo.items[sid].store_amount
);
//console.info(submitinfo.items[sid].store_amount)
break; //如有发现一个,则退出本次循环。
}
}
}
console.log(order_amount);
that.setData({
submitinfo: submitinfo,
order_amount: order_amount,
});
//this.getCartList()
},
Refreshinvoice: function (options) {
var that = this;
that.setData({
user_invoice_id: options.user_invoice_id,
invoice_type_id: options.invoice_type_id,
invoice_header: options.invoice_header,
});
},
getCartList: function () {
var that = this,
params = this.urlArgs;
if (that.chain_id) {
params.chain_id = that.chain_id;
params.if_chain = 1;
}
if (that.checked_store) {
params.checked_store = that.checked_store;
}
// 决定配送方式
if (that.selfpickFlag || that.storeServeFlag) {
params.delivery_type_id = 5;
} else if (that.addressFlag) {
params.delivery_type_id = 10;
} else if (that.intraCityService) {
params.delivery_type_id = 16;
}
// params.delivery_type_id = that.selfpickFlag ? 5 : 10; //是否自提; //DELIVERY_TYPE_SELF_PICK_UP = 5
params.is_delivery = that.selfpickFlag ? 0 : 1; //是否自提
that.$.request({
url: this.Config.URL.cart.checkout,
data: params,
success: function (data, status, msg, code) {
if (200 == status) {
// 提取所有店铺ID并拼接成字符串
const storeIds = data.items.map(store => store.store_id).join(',');
that.setData({ store_ids_time: storeIds });
// 立即获取时间槽
that.getTimeSlots();
for (var i = 0; i <= data.transportIds.length; i++) {
if (data.transportIds[i] == 10) {
that.delivery = true;
}
if (data.transportIds[i] == 5) {
that.deliverys = true;
}
}
console.log("deliverys", that.deliverys);
that.transportIds = data.transportIds;
var ud_id = 0;
if (!that.$.isNull(data.delivery_address_row)) {
ud_id = data.delivery_address_row.ud_id;
} else {
}
//无货
if (data.items.length == 0) {
that.$.confirm(that.__("无符合条件的商品"), that.$.navigateBack);
}
if (data.if_virtual) {
var item_row = data.items[0].items[0];
that.setData({
item_ids: [item_row.item_id],
});
that.drawSelf(item_row.store_id);
that.setData({
kind_id: item_row.kind_id,
isVirtual: data.if_virtual,
product_service_date_flag: item_row.product_service_date_flag,
product_service_contactor_flag:
item_row.product_service_contactor_flag,
ud_id: ud_id,
store_id: item_row.store_id,
chainFlag: item_row.product_valid_type == 1002 ? false : true,
addressFlag: item_row.product_valid_type == 1002 ? true : false,
submitinfo: data,
chain_id: that.chain_id,
});
} else {
var item_row = data.items[0].items[0];
if (that.chain_id) {
that.drawSelf(item_row.store_id);
}
that.setData({
store_id: item_row.store_id,
isVirtual: data.if_virtual,
product_service_date_flag: 1,
product_service_contactor_flag: 1,
ud_id: ud_id,
submitinfo: data,
chain_id: that.chain_id,
});
}
that.setData({
order_amount: data.orderSelMoneyAmount,
});
// 检查是否需要自动切换到预约配送
if (that.shouldHideImmediateDelivery) {
that.setData({
activeTab: 'scheduled',
booking_state: 2
});
}
//地址信息监测
if (ud_id > 0) {
//that.checkDelivery(ud_id);
}
if (that.user_voucher_id > 0) {
that.useVoucher(that.user_voucher_id);
}
//判断线上线下店铺
for (let i = 0; i < data.items.length; i++) {
if (1 == data.items[i]["store_o2o_flag"]) {
//判断显现店铺门店自提
that.storeSelfPickFlag = true;
if (that.storeSelfPickFlag) {
that.setData({
canSelfpick: true,
deliverys: true,
});
}
}
}
} else {
that.$.confirm({
title: '提示',
content: msg,
cancelText: '取消',
confirmText: '确认',
success: function(res) {
if (res.confirm) {
} else if (res.cancel) {
that.$.navigateBack();
}
}
});
}
},
fail: function (err, ms) {
//console.info(err);
that.$.confirm(err);
},
});
},
hidePopup: function (e) {
//console.info(e);
this.setData({
showPopupFlag: false,
});
},
checkDelivery: function (ud_id) {
var that = this;
var params = that.urlArgs;
params.ud_id = ud_id;
that.spid ? (params.cart_id = that.spid) : "";
that.$.request({
url: this.Config.URL.cart.checkDelivery,
data: params,
success: function (data, status, msg, code) {
if (200 == status) {
if (data.need_edit == 1) {
// 该地址信息不完整
that.$.alert("该收货地址不完整,请重新选择!");
} else {
that.setData({
submitinfo: data,
});
that.setData({
can_delivery: data.can_delivery,
show_oos: data.show_oos,
delivery_item_none_row: data.items.delivery_item_none_row,
});
// 修正urlArgs的ud_id参数
that.editUrlArgs("ud_id", ud_id);
}
}
},
});
},
useVoucher: function (user_voucher_id) {
var that = this;
var params = {
user_voucher_id: user_voucher_id,
store_id: that.store_id,
voucher_type: "voucher",
};
that.spid ? (params.cart_id = that.spid) : "";
that.$.request({
url: this.Config.URL.user.voucher_used,
data: params,
success: function (data, status, msg, code) {
if (200 == status) {
var submitinfo = that.submitinfo;
submitinfo.total_voucher_price = data.items[0].voucher_price;
submitinfo.user_voucher_id = data.items[0].user_voucher_id;
var total_voucher_price = submitinfo.total_voucher_price
? submitinfo.total_voucher_price
: 0;
var order_money_select_items = submitinfo.order_money_select_items
? submitinfo.order_money_select_items
: 0;
var freight = submitinfo.freight ? submitinfo.freight : 0;
var activityDiscountMoney = submitinfo.activityDiscountMoney
? submitinfo.activityDiscountMoney
: 0;
submitinfo.orderSelMoneyAmount = parseFloat(
(
order_money_select_items +
freight -
total_voucher_price -
activityDiscountMoney
).toFixed(12)
);
submitinfo.orderSelMoneyAmount = Math.max(
0,
submitinfo.orderSelMoneyAmount
);
that.setData({
submitinfo: submitinfo,
});
// 修正urlArgs
that.editUrlArgs("user_voucher_id", data.items[0].user_voucher_id);
}
},
});
},
count: function (e) {
let that = this;
this.setData({
integral: e.detail.value,
}),
e.detail.value == 0 &&
this.setData({
integral: "",
}),
parseInt(e.detail.value) >
parseInt(this.submitinfo.UserMembership.UsablePoint)
? (this.setData({
integral: "",
discount: 0,
disbursements:
this.submitinfo.ShoppingCartHeaderInfo.ActualPayPrice,
}),
that.$.showModal({
title: "提示",
content: "请输入正确积分额度",
}))
: this.setData({
discount: (
this.integral / this.submitinfo.UserMembership.PointAsCashRate
).toFixed(2),
disbursements: (
this.submitinfo.ShoppingCartHeaderInfo.ActualPayPrice -
this.integral / this.submitinfo.UserMembership.PointAsCashRate
).toFixed(2),
}),
this.disbursements < 0 &&
this.setData({
disbursements: 0,
}),
(
this.integral / this.submitinfo.UserMembership.PointAsCashRate
).toFixed(2) > this.submitinfo.ShoppingCartHeaderInfo.ActualPayPrice &&
this.setData({
discount: this.submitinfo.ShoppingCartHeaderInfo.ActualPayPrice,
}),
this.submitinfo.ShoppingCartHeaderInfo.MaxUsableCash >=
this.disbursements
? this.setData({
balance: this.disbursements,
realMoney: 0,
})
: this.setData({
balance: this.submitinfo.ShoppingCartHeaderInfo.MaxUsableCash,
realMoney: (
this.disbursements -
this.submitinfo.ShoppingCartHeaderInfo.MaxUsableCash
).toFixed(2),
});
},
getLocalTime: function (e) {
e = e.replace("/Date(", "").replace(")/", "");
var t = new Date(parseInt(e));
return t;
},
getUrlParam: function (name, url) {
return (
decodeURIComponent(
(new RegExp("[?|&]" + name + "=" + "([^&;]+?)(&|#|;|$)").exec(
url
) || [, ""])[1].replace(/\+/g, "%20")
) || null
);
},
submitorder: function (e) {
let that = this;
if (that.$.isNull(that.order_id)) {
var params = that.urlArgs;
if (that.user_voucher_ids.length == 1) {
params.user_voucher_id = that.user_voucher_ids[0];
}
if (this.ud_id == 0) {
let msg = that.__("请选择你的收货地址!");
if (that.isVirtual) {
msg = that.__("请选择你的个人联系信息!");
}
that.$.showModal({
title: that.__("提示"),
showCancel: false,
content: msg,
});
return;
}
if (this.isVirtual) {
var datetime = this.date + " " + this.time,
n = datetime.replace(/-/g, "/");
var r = new Date();
var i = new Date(n);
var s = r.getTime(),
o = i.getTime();
if (o - s < 0) {
that.$.showModal({
title: "提示",
showCancel: false,
content: "您选择的预约时间已不在服务预约时间范围内!",
});
return;
}
if (this.product_service_date_flag)
if (that.$.isNull(this.date) || that.$.isNull(this.time)) {
that.$.showModal({
title: "提示",
showCancel: false,
content: "请选择预约服务日期与时间!",
});
return;
}
}
// 设置预约相关字段
if (that.booking_state === 2) {
// 预订单
params.booking_at = that.booking_at; // 预约时间戳
params.booking_begin_time = that.booking_begin_time; // 预约开始时间
params.booking_end_time = that.booking_end_time; // 预约结束时间
params.booking_state = that.booking_state; // 预订单状态
} else {
// 立即下单
params.booking_state = 1; // 立即下单状态
}
var paymentTypeId = that.submitinfo.items[0].items[0].payment_type_id;
params.payment_form_id = paymentTypeId;
params.user_voucher_ids = JSON.stringify(that.user_voucher_ids);
params.redemption_ids = JSON.stringify(that.redemption_ids);
params.ud_id = params.ud_id || that.ud_id;
params.ifcart = that.ifcart; // 传入cart_id时直接购买未传时走购物车
params.cart_id = that.cart_id;
params.payment_type_id = that.StateCode.PAYMENT_TYPE_ONLINE;
if (that.selfpickFlag || that.storeServeFlag) {
params.delivery_type_id = 5;
} else if (that.addressFlag) {
params.delivery_type_id = 10;
} else if (that.intraCityService) {
params.delivery_type_id = 16;
}
params.invoice_type_id = 1;
params.order_invoice_title = "";
params.order_message = JSON.stringify(that.order_message);
params.virtual_service_date = that.date;
params.virtual_service_time = that.date + " " + that.time;
params.chain_id = that.chain_id;
params.checked_store = that.checked_store;
params.distributor_id = uni.getStorageSync("store_id");
params.salesperson_id = that.salesperson_id;
params.user_invoice_id = that.user_invoice_id;
let source_item_id = uni.getStorageSync("source_item_id");
params.source_item_id = source_item_id;
params.is_delivery = that.selfpickFlag ? 0 : 1; //是否自提
params.kind_id = that.kind_id;
params.kind_id = that.kind_id;
console.log("哈哈哈哈哈哈",params)
that.$.request({
url: this.Config.URL.user.order_add,
data: params,
method: "POST",
success: function (data, status, msg, code) {
if (200 == status) {
// 删除旧数据
if (source_item_id) {
let source_item_id_row = JSON.parse(source_item_id);
for (
let store_idx = 0;
store_idx < data.items.length;
store_idx++
) {
for (
let item_idx = 0;
item_idx < data.items[store_idx].items.length;
item_idx++
) {
let order_item_id =
data.items[store_idx].items[item_idx].item_id;
if (source_item_id) {
for (var tk in source_item_id_row) {
if (source_item_id_row[tk].u) {
if (tk == order_item_id) {
delete source_item_id_row[tk];
} else {
let time = parseInt(Date.parse(new Date()) / 100);
if (time - source_item_id_row[tk].t > 86400 * 30) {
delete source_item_id_row[tk];
}
}
} else {
delete source_item_id_row[tk];
}
}
}
}
}
uni.setStorageSync(
"source_item_id",
JSON.stringify(source_item_id_row)
);
}
that.setData({
order_id: data.order_id.join(","),
});
if (data.gb_id) {
that.isFightGroup = data.gb_id;
}
that.setData({
paymentData: {
order_id: that.order_id,
orderSelMoneyAmount: data.orderSelMoneyAmount.toFixed(2),
user_money: data.user_money,
user_points: data.user_points,
user_recharge_card: that.userInfo.user_recharge_card,
user_sp: that.userInfo.user_sp,
},
});
that.reloadUserResource(function (user_info) {});
that.notice.postNotificationName("GotoPayCheckout");
} else {
if (
(data && data.hasOwnProperty("mobile_is_bind")) ||
code == 77011
) {
that.$.confirm(
msg,
function (data) {
if (data.confirm) {
that.$.gopage("/member/member/bindphone");
}
},
true
);
} else {
that.$.confirm(msg);
}
}
},
fail: function (data, status, msg, code) {
that.$.showToast({
title: msg,
});
},
});
} else {
const item = that.submitinfo.items[0].items[0];
if (item.payment_type_id === 1) {
that.$.gotopage(`/member/order/detail?on=${that.order_id}&subscribe=1`);
} else {
that.gotopay();
}
}
},
gotopay: function (e) {
//console.info('gotopay');
setTimeout(() => {
this.$refs.paymentBox.show();
}, 400);
return true;
var param = {
order_id: this.order_id,
openid: this.userInfo.openId,
typ: "json",
payment_channel_code: "wx_native",
prepay_flag: 1,
};
var that = this;
this.isSubmit = true;
that.$.request({
url: this.Config.URL.pay.pay,
data: param,
success: function (data, status, msg, code) {
if (status == 200) {
that.$.requestPayment({
timeStamp: data.timeStamp,
nonceStr: data.nonceStr,
package: data.package,
signType: data.signType,
paySign: data.paySign,
success: function (n) {
that.isTmplMsg && that.sendMessage(param.order_id, 2);
that.returnUrl(param.order_id);
},
fail: function (n) {
that.$.gotopage(`/member/order/detail?on=${param.order_id}&subscribe=1`);
that.isTmplMsg && that.sendMessage(param.order_id, 1);
},
complete: function (n) {
if (n.errMsg == "requestPayment:cancel") {
that.$.gotopage(`/member/order/detail?on=${param.order_id}&subscribe=1`);
that.isTmplMsg && that.sendMessage(param.order_id, 1);
}
},
});
} else {
that.$.alert(msg);
}
},
fail: function (err) {},
});
},
inputRemark: function (e) {
//console.info( e.detail.value);
//console.info( e.detail.value.length);
//console.info( e.currentTarget.dataset.id);
//console.info( e.currentTarget.dataset.store_id);
var submitinfo = this.submitinfo;
submitinfo.items[e.currentTarget.dataset.id].remark = e.detail.value;
submitinfo.items[e.currentTarget.dataset.id].remarkLength =
e.detail.value.length;
var order_message_len = this.order_message_len;
var order_message = this.order_message;
this.$set(
this.order_message_len,
e.currentTarget.dataset.id,
e.detail.value.length
);
this.$set(
this.order_message,
e.currentTarget.dataset.store_id,
e.detail.value
);
//order_message_len[e.currentTarget.dataset.id] = e.detail.value.length;
//order_message[e.currentTarget.dataset.store_id] = e.detail.value;
this.setData({
order_message: order_message,
order_message_len: order_message_len,
});
this.setData({
submitinfo: submitinfo,
});
},
sendMessage: function (e, t) {
let that = this;
var n = {
api: this.Config.URL.wx.get_tpl_msg_config,
pages: "/member/order/detail?on="+e,
formId: this.formId,
WeiXinOpenId: this.userInfo.openId,
value: {
order_id: e,
msg_type: t == 1 ? "OrderSubmitMessage" : "OrderPaySuccessWXMessage",
},
};
that.$.sendTpl(n);
},
suitcouponlist: function (e) {
var that = this;
var urlArgs = that.urlArgs;
urlArgs.user_voucher_id = parseInt(
e.currentTarget.dataset.user_voucher_id
); //当前选中的
urlArgs.val = JSON.stringify(
that.submitinfo.items[e.currentTarget.dataset.id].voucher_items
);
if (that.user_voucher_ids.length == 1) {
urlArgs.user_voucher_id = that.user_voucher_ids[0];
}
urlArgs.amount =
this.submitinfo.items[e.currentTarget.dataset.id].productMoneySelGoods;
var url = that.$.createUrl("/activity/coupon/member", urlArgs);
that.$.navigateTo({
url: url,
});
},
suitredemptionlist: function (e) {
var that = this;
var urlArgs = that.urlArgs;
urlArgs.redemption_id = parseInt(e.currentTarget.dataset.redemption_id); //当前选中的
urlArgs.val = encodeURIComponent(
JSON.stringify(
that.submitinfo.items[e.currentTarget.dataset.id].redemption_items
)
);
var url = that.$.createUrl("/activity/redemption/member", urlArgs);
that.$.navigateTo({
url: url,
});
},
listInvoice: function (e) {
var that = this;
var urlArgs = that.urlArgs;
urlArgs.user_invoice_id = parseInt(
e.currentTarget.dataset.user_invoice_id
); //当前选中的
urlArgs.issub = 1;
var url = that.$.createUrl("/member/invoice/list", urlArgs);
that.$.navigateTo({
url: url,
});
},
onCancel: function (e) {},
onPaid: function (e) {
//重新加载用户资源数据
let that = this;
that.reloadUserResource(function (user_info) {
that.returnUrl(that.order_id);
});
},
onFail: function (e) {
let that = this;
that.$.gotopage("/member/order/detail?on="+this.order_id);
},
returnUrl: function (e) {
var that = this;
if (that.isFightGroup) {
that.$.gotopage(
"/activity/fightgroup/detail?gb_id=" + that.isFightGroup + "&on=" + e
);
} else {
// 延时100毫秒等待异步队列setPaidYes的处理
setTimeout(function () {
that.$.gotopage(
`/member/order/detail?on=${e}&init_pay_flag=true&subscribe=1`
);
}, 100);
}
return;
if (!that.$.isNull(that.spinfo)) {
var n = JSON.parse(that.spinfo);
if (n.isFightGroup == 2) {
if (n.isOwner) {
that.$.gotopage("/activity/fightgroup/detail?on=" + e);
return;
}
that.$.navigateBack(1, function () {
this.notice.postNotificationName("RefreshFG");
});
return;
}
that.$.gotopage("/member/order/detail?on=" + e);
return;
}
that.$.gotopage("/member/order/detail?on=" + e);
return;
},
selectAddress: function () {
var that = this;
var urlArgs = that.urlArgs;
var url = "";
//console.info('selectAddress');
/*
that.$.chooseAddress({
success: function (t) {
var params = {
ud_city: t.cityName,
ud_county: t.countyName,
ud_province: t.provinceName,
ud_address: t.detailInfo,
errMsg: t.errMsg,
ud_name: t.userName,
nationalCode: t.nationalCode,
ud_postalcode: t.postalCode,
ud_mobile: t.telNumber,
user_id: this.userInfo.user_id
};
that.$.request({
url: that.Config.URL.user.check_wechat_address,
data: params,
success: function (data, status, msg, code) {
//判断返回结果,直接设置
if (status == 200) {
if (data.ud_id > 0) {
that.setData({ud_id: data.ud_id})
url = "/member/address/list";
urlArgs.issub = "true";
urlArgs.ud_id = data.ud_id;
}
that.$.navigateTo({url: that.$.createUrl(url, urlArgs)});
} else {
that.$.alert(msg);
}
}
});
//that.$.xsr(that.$.makeUrl(orderapi.selectAddressInfo, params), function (t) {
// that.setData({ud_id: t.Info.id}), that.getCartList()
//})
},
fail: function (t) {
if (that.ud_id > 0) {
url = "/member/address/list";
urlArgs.issub = "true";
urlArgs.ud_id = that.ud_id;
} else {
url = "/member/address/manage";
urlArgs.ud_id = -1;
urlArgs.issub = "true";
}
that.$.navigateTo({url: that.$.createUrl(url, urlArgs)});
}
})
*/
if (that.ud_id > 0) {
url = "/member/address/list";
urlArgs.issub = "true";
urlArgs.ud_id = that.ud_id;
} else {
url = "/member/address/manage";
urlArgs.ud_id = -1;
urlArgs.issub = "true";
}
that.$.navigateTo({
url: that.$.createUrl(url, urlArgs),
});
},
getNearbylist: function (store_id) {
var that = this;
var params = {
store_id: store_id,
item_id: that.item_ids.join(","),
lat: that.latitude,
lng: that.longitude,
page: 1,
rows: 10,
};
if (that.chain_id) {
params["chain_id"] = that.chain_id;
params["is_chain"] = 1;
}
if (that.chain_rows.length <= 0) {
//读取店铺下面的门店列表
that.$.request({
url: this.Config.URL.store.getNearChain,
data: params,
loading: false,
dataType: "json",
success: function (data, status, msg, code) {
if (!that.$.isNull(data.items) && data.items.length > 0) {
that.setData({
chain_rows: data.items,
});
for (let i = 0; i < data.items.length; i++) {
data.items[i]["distance"] = that.$.distanceFormat(
data.items[i]["distance"]
);
if (that.chain_id == data.items[i].chain_id) {
that.setData({
chainFlag: true,
ChainInfo: data.items[0],
chain_id: data.items[0].chain_id,
AddressInfo: data.items[0],
item_id: params.item_id,
physicalStoreId: data.items[0].Id,
});
}
}
if (!that.chain_id) {
that.setData({
chainFlag: true,
ChainInfo: data.items[0],
chain_id: data.items[0].chain_id,
AddressInfo: data.items[0],
item_id: params.item_id,
physicalStoreId: data.items[0].Id,
});
}
} else {
that.setData({
chainFlag: false,
});
}
},
});
}
},
express: function () {
this.setData({
addressFlag: 1,
selfpickFlag: 0,
storeServeFlag: 0,
ud_name: "",
phone: "",
intraCityService: 0,
});
this.addressFlag
? this.setData({
shipMethod: 0,
})
: this.setData({
shipMethod: 1,
});
this.getCartList();
},
handerIntraCityService() {
this.intraCityService = 1;
this.addressFlag = 0;
this.selfpickFlag = 0;
this.getCartList();
},
//自提操作,需要用到 - 虚拟商品暂时共用
draw: function (e) {
let store_id = e.currentTarget.dataset.store_id;
this.setData({
addressFlag: 0,
selfpickFlag: 1,
storeServeFlag: 0,
intraCityService: 0,
});
this.drawSelf(store_id);
this.getCartList();
},
serve: function (e) {
let store_id = e.currentTarget.dataset.store_id;
this.setData({
addressFlag: 0,
selfpickFlag: 0,
storeServeFlag: 1,
});
this.drawSelf(store_id);
this.getCartList();
},
drawSelf: function (store_id) {
//return ;
var that = this;
that.$.getLocation({
type: "wgs84",
success: function (t) {
that.setData({
latitude: t.latitude,
longitude: t.longitude,
});
that.getNearbylist(store_id);
},
fail: function () {
that.setData({
isdata: true,
});
// that.$.alert("授权失败");
that.getNearbylist(store_id);
},
});
this.selfpickFlag
? this.setData({
shipMethod: 1,
})
: this.setData({
shipMethod: 0,
});
//this.getCartList();
//this.getNearbylist(store_id)
},
bindTimeChange: function (e) {
this.setData({
time: e.detail.value,
});
},
bindDateChange: function (e) {
this.setData({
date: e.detail.value,
});
},
switchChange: function (e) {
e.detail.value
? this.setData({
realMoney: this.realMoney,
isBalance: true,
})
: this.setData({
disbursements: this.disbursements,
isBalance: false,
});
},
editUrlArgs: function (paramKey, paramValue) {
var urlArgs = this.urlArgs;
urlArgs[paramKey] = paramValue;
this.setData({
urlArgs: urlArgs,
});
},
calculateImmediateDeliveryTime() {
const now = new Date();
const startTime = new Date(now.getTime() + 25 * 60 * 1000); // 当前时间 + 25 分钟
const endTime = new Date(now.getTime() + 35 * 60 * 1000); // 当前时间 + 35 分钟
const formatTime = (date) => {
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
return `${hours}:${minutes}`;
};
this.immediateDeliveryTime = `预计${formatTime(startTime)}-${formatTime(endTime)}送达`;
},
},
mounted() {
this.calculateImmediateDeliveryTime();
// 检查是否需要自动切换到预约配送
if (this.shouldHideImmediateDelivery) {
this.activeTab = 'scheduled';
this.booking_state = 2;
}
},
};
</script>
<style lang="scss" scoped>
@import "../../styles/_variables";
.page-container {
padding: 20rpx;
}
.m-island-type {
background: #fff;
padding: 30rpx 20rpx;
.m-tit {
height: 60rpx;
line-height: 60rpx;
margin-bottom: 20rpx;
}
.m-type {
display: flex;
justify-content: space-around;
}
}
.m-item {
.m-imgs {
width: 100rpx;
height: 100rpx;
border-radius: 50%;
background: #f1e6da;
display: flex;
justify-content: center;
align-items: center;
image {
width: 64rpx;
height: 64rpx;
}
}
.m-imgs-active {
background: #333959;
}
.m-name {
margin-top: 15rpx;
}
}
.m-cells {
font-size: 28rpx;
border-radius: 12rpx;
}
.m-addres-info {
padding: 32rpx 0;
background-color: white;
overflow: hidden;
position: relative;
border-radius: 12rpx;
}
.m-order-typetxt {
color: $default-skin-bg;
font-size: 16px;
}
.m-addres-info::before {
content: "";
position: absolute;
width: 100%;
height: 6rpx;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAL0AAAAECAYAAADbEj6NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTZFNEY0MzZFNERFMTFFNUE1MEFGNzBDMjEwRENBN0QiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTZFNEY0MzdFNERFMTFFNUE1MEFGNzBDMjEwRENBN0QiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5NkU0RjQzNEU0REUxMUU1QTUwQUY3MEMyMTBEQ0E3RCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5NkU0RjQzNUU0REUxMUU1QTUwQUY3MEMyMTBEQ0E3RCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pn/dxJgAAAEGSURBVHjaYpToP8mABlSAuAuIAxkGH1gPxGVAfIcYxRc/lpJqvhgQtwNxAhAzDTK/nwDiXCA+Q4ziP7ccSDWfB4grgLgIiDkHmd+vAXExEO8gRrGxqTdeeRYktgAQ10ADlm2Qefo8NDIOEKuBxATPBvV3DTQcBhN4BE2MK4D4Pw0SPBM0k7cAseQg8/sbIK4H4lkgb1EjwcMSPQinAXEjEIsMMk+/AOJqIF4AxP9olOADoTWbyiDz+xcg7gDiPiD+TqwmEhO8A9R8w0Hm919APBmaET8Qq4mYBA9L9BeBWGs4eJrEBG8IjXCHQeb3f9BMDqp1npOikYQEP2yasKQmeFDBDhBgALcVQI75FJrUAAAAAElFTkSuQmCC)
center repeat;
bottom: 0;
border-bottom: 2px dashed #f1e6da;
}
.m-ad-name {
display: -webkit-box;
position: relative;
margin-left: 40rpx;
-webkit-box-flex: 1;
height: 20px;
line-height: 20px;
font-weight: 400;
font-size: 14px;
}
.m-ad-name text {
margin: 0 10rpx 0 20rpx;
}
.m-ad-name::after {
content: "\e7e0";
position: absolute;
left: -48rpx;
width: 30rpx;
height: 30rpx;
margin-top: -20rpx;
font-family: "iconfont" !important;
text-align: center;
line-height: 80rpx;
font-size: 80rpx;
}
.m-ad-address {
width: 650rpx;
margin-left: 16rpx;
display: -webkit-box;
-webkit-box-flex: 1;
line-height: 50rpx;
font-weight: 400;
font-size: 14px;
position: relative;
padding-left: 40rpx;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
color: #888;
margin-top: 10rpx;
}
.m-addres-info .m-cell-ft {
position: absolute;
right: 20rpx;
top: 50%;
}
.m-product-all {
margin-top: 20rpx;
}
.total-info {
margin-top: 20rpx;
margin-top: 0rpx;
}
.m-panel-hd::after {
border: none;
}
.m-total-info {
padding: 10rpx 20rpx;
font-size: 12px;
}
.m-total-info label {
font-size: 32rpx;
color: $default-skin-bg;
}
.m-footer-btn {
height: 110rpx;
width: 100%;
position: fixed;
bottom: 0;
left: 0;
background-color: #fff;
//border-top: 1rpx solid #d5d5d5;
border-radius: 0;
z-index: 100;
bottom: constant(safe-area-inset-bottom);
bottom: env(safe-area-inset-bottom);
display: flex;
uni-form {
width: auto;
margin: auto;
}
}
.m-footer-btn-list {
width: 70%;
height: 100%;
position: relative;
float: left;
}
.m-footer-btn-item {
position: relative;
float: left;
width: 100%;
font-size: 24rpx;
color: #888;
line-height: 40rpx;
padding: 15rpx 0;
box-sizing: border-box;
height: 100%;
}
.m-footer-btn-main {
height: 80rpx;
float: left;
background-color: $default-skin-bg;
color: #fff;
line-height: 80rpx;
font-size: 32rpx;
text-align: center;
border-radius: 0;
border-radius: 9px;
line-height: 80rpx;
text-align: center;
margin: auto;
margin-left: 20rpx;
margin-right: 20rpx;
width: 230rpx;
}
.m-cart-total {
text-align: right;
padding-right: 20rpx;
}
.m-cart-total text {
font-size: 36rpx;
color: $default-skin-bg;
&.mcs {
font-size: 12px;
}
}
.m-cart-total label {
color: $default-skin-bg;
}
.m-product-price text {
font-size: 24rpx;
margin-left: 8rpx;
}
.pre-info-price {
height: 18rpx !important;
font-size: 12px !important;
color: #b0b0b0 !important;
margin: 0 0 0 10rpx !important;
margin-left: 30rpx !important;
.mcs {
color: #b0b0b0;
font-size: 10px;
}
}
.u-null-ad label {
font-size: 40rpx;
}
.u-null-ad text {
color: $default-skin-bg;
text-decoration: underline;
}
.u-disabled {
background-color: $default-skin-bg-disabled;
}
.arrow {
width: 20rpx;
}
.coupon {
position: relative;
left: 12rpx;
font-weight: bold;
font-size: 26rpx;
}
.nearbylist-item {
padding: 20rpx 30rpx;
border-bottom: 1px solid #eee;
background: white;
}
.nearbylist-item:last-child {
border: none;
}
.item-info {
position: relative;
font-size: 28rpx;
}
.item-name {
display: inline-block;
font-size: 30rpx;
}
.item-phone {
line-height: 45rpx;
}
.item-distance {
float: right;
font-size: 26rpx;
color: #bbb;
}
.item-address {
position: relative;
font-size: 26rpx;
color: #bbb;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
margin-right: 40rpx;
line-height: 40rpx;
}
.item-info::after {
content: " ";
display: inline-block;
height: 12rpx;
width: 12rpx;
border-width: 4rpx 4rpx 0 0;
border-color: #ebebe7;
border-style: solid;
-webkit-transform: matrix(0.71, 0.71, -0.71, 0.71, 0, 0);
transform: matrix(0.71, 0.71, -0.71, 0.71, 0, 0);
top: -4rpx;
position: absolute;
top: 72%;
right: 4rpx;
padding: 3rpx;
}
.distribution {
display: flex;
align-items: center;
background: #fff;
padding: 30rpx 30rpx;
margin-top: 20rpx;
font-size: 28rpx;
}
.m-product-price1 text {
font-size: 24rpx;
color: #888;
margin-left: 8rpx;
}
.m-product-price {
/*display: flex;*/
justify-content: space-between;
padding-right: 20rpx;
margin-top: 6rpx;
}
.u-cart-num {
position: absolute;
bottom: 20rpx;
right: 20rpx;
}
.btn {
font-size: 28rpx;
color: #333333;
padding-left: 20rpx;
height: 80rpx;
line-height: 80rpx;
background: #ffffff;
border-bottom: 1px solid #d5d5d5;
}
/*mask*/
.drawer_screen {
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
z-index: 1000;
background: #000;
opacity: 0.5;
overflow: hidden;
}
/*content*/
.drawer_box {
width: 650rpx;
overflow: hidden;
position: fixed;
top: 50%;
left: 0;
z-index: 1001;
background: #fafafa;
margin: -150px 50rpx 0 50rpx;
border-radius: 3px;
}
.drawer_title {
padding: 15px;
font: 20px "microsoft yahei";
text-align: center;
}
.drawer_content {
height: 210px;
overflow-y: scroll;
/*超出父盒子高度可滚动*/
}
.btn_ok {
padding: 10px;
font: 20px "microsoft yahei";
text-align: center;
border-top: 1px solid #e8e8ea;
color: #3cc51f;
}
.top {
padding-top: 8px;
}
.bottom {
padding-bottom: 8px;
}
.title {
height: 30px;
line-height: 30px;
width: 160rpx;
text-align: center;
display: inline-block;
font: 300 28rpx/30px "microsoft yahei";
}
.hint {
padding: 40rpx;
font-size: 12px;
color: #717171;
}
.hint text {
padding-left: 20rpx;
}
.footer {
border-top: 2rpx solid #d5d5d5;
position: absolute;
bottom: 0;
width: 100%;
height: 100rpx;
display: flex;
justify-content: space-between;
}
.footer view {
width: 50%;
text-align: center;
font-size: 32rpx;
line-height: 100rpx;
}
.footer-btn {
width: 50%;
background: $default-skin-bg;
height: 100rpx;
line-height: 100rpx;
text-align: center;
border-radius: 1rpx;
color: #fff;
}
.m-store {
padding-top: 30rpx;
padding-bottom: 20rpx;
}
.m-store-c {
//padding-top: 20rpx;
padding-left: 20rpx;
position: relative;
}
.m-store-info {
padding: 20rpx;
margin-left: 30rpx;
}
.icon-store {
position: absolute;
top: -12rpx;
}
.icon-store:before {
font-size: 20px;
}
.m-store-info label {
font-size: 14px;
}
.m-cells-title {
width: 70rpx;
margin-top: 0px;
margin-bottom: 0px;
line-height: 100rpx;
}
.u-textarea {
height: 100rpx;
line-height: 100rpx;
}
.placeholder-u-textarea {
height: 100rpx;
font-size: 12px;
color: #959593;
line-height: 100rpx;
}
.m-product-box {
border-radius: 12rpx;
background-color: #fff;
margin-top: 30rpx;
}
.m-product-item {
flex-direction: column;
background-color: transparent;
}
.m-product-item:after {
content: " ";
position: absolute;
left: 0;
bottom: 0;
right: 0;
height: 1px;
border-bottom: 1px solid #ebebe7;
color: #ebebe7;
/*transform-origin: 0 100%;*/
transform: scaleY(0.5);
}
.m-item-c {
position: relative;
/* width: 850rpx; */
//height: 212rpx;
display: flex;
}
.m-item-act {
position: relative;
width: 850rpx;
height: 100rpx;
}
.m-act-img {
width: 212rpx;
height: 212rpx;
image {
width: 100rpx;
height: 100rpx;
}
}
.act-item-name {
width: 570rpx;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.u-textarea-counter {
position: absolute;
right: 20rpx;
bottom: 0;
}
.mcs {
font-size: 12px;
color: $default-skin-bg;
}
.m-total-price {
color: $default-skin-bg;
font-size: 17px;
}
form {
flex: 1;
}
.tag {
padding: 0 10rpx;
}
</style>