全栈小学生 abaa4201fb add shop
2026-01-13 09:16:43 +08:00

662 lines
32 KiB
Vue
Raw 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="themeColor()" class="payment-wrap">
<view class="payment-body min-h-[100vh]" v-if="orderData">
<!-- #ifdef MP || APP-PLUS -->
<top-tabbar :data="topTabbarData" :scrollBool="topTabarObj.getScrollBool()"/>
<!-- #endif -->
<view class="pt-[30rpx] sidebar-margin payment-bottom">
<!-- 配送方式 -->
<view class="mb-[var(--top-m)] rounded-[var(--rounded-big)] bg-white" v-if="orderData.basic.has_goods_types.includes('real') && delivery_type_list.length"
:style="{backgroundImage: `url(${img('addon/shop/payment/head_bg.png')})`, backgroundSize: '100%', backgroundRepeat: 'no-repeat', backgroundPosition: 'bottom'}">
<view class="rounded-tl-[var(--rounded-big)] rounded-tr-[var(--rounded-big)] head-tab flex items-center w-full bg-[var(--shop-payment-header-tab-color)]" v-if="delivery_type_list.length > 1">
<view v-for="(item, index) in delivery_type_list" :key="index" class="head-tab-item flex-1 relative" :class="{'active': index === activeIndex}">
<view class="h-[74rpx] relative z-10 text-center leading-[74rpx] text-[28rpx]" @click="switchDeliveryType(item.key, index)">{{ item.name }}</view>
<image v-if="index === activeIndex && delivery_type_list.length == 3" class="tab-image absolute bottom-[-2rpx] h-[94rpx] w-[240rpx]" :src="img(`addon/shop/payment/tab_${index}.png`)" mode="aspectFit"/>
<image v-else-if="index === activeIndex && delivery_type_list.length == 2" class="tab-img absolute bottom-[-2rpx] h-[95rpx] w-[354rpx]" :src="img(`addon/shop/payment/tabstyle_${index}.png`)" mode="aspectFit"/>
</view>
</view>
<view class="min-h-[140rpx] flex items-center px-[30rpx]">
<!-- 收货地址 -->
<view class="w-full" v-if="['express', 'local_delivery'].includes(createData.delivery.delivery_type)" @click="toSelectAddress">
<view v-if="!$u.test.isEmpty(orderData.delivery.take_address)" class="pt-[20rpx] pb-[30rpx] flex items-center">
<image class="w-[60rpx] h-[60rpx] mr-[20rpx] flex-shrink-0" :src="img('addon/shop/payment/position_01.png')" mode="aspectFit"/>
<view class="flex flex-col overflow-hidden">
<text class="text-[26rpx] text-[var(--text-color-light9)] mt-[16rpx] truncate max-w-[536rpx]">{{ orderData.delivery.take_address.full_address.split(orderData.delivery.take_address.address)[0] }}</text>
<text class="font-500 text-[30rpx] mt-[14rpx] text-[#333] truncate max-w-[536rpx]">{{ orderData.delivery.take_address.address }}</text>
<view class="flex items-center text-[26rpx] text-[var(--text-color-light6)] mt-[16rpx]">
<text class="mr-[16rpx]">{{ orderData.delivery.take_address.name }}</text>
<text>{{ mobileHide(orderData.delivery.take_address.mobile) }}</text>
</view>
</view>
<text class="ml-auto nc-iconfont nc-icon-youV6xx text-[26rpx] text-[var(--text-color-light9)]"></text>
</view>
<view v-else class="flex items-center">
<image class="w-[26rpx] h-[30rpx] mr-[10rpx]" :src="img('addon/shop/payment/position_02.png')" mode="aspectFit"/>
<text class="text-[28rpx]">添加收货地址</text>
<text class="nc-iconfont nc-icon-youV6xx text-[26rpx] text-[var(--text-color-light9)] ml-auto"></text>
</view>
</view>
<!-- 自提点 -->
<view class="flex items-center w-full flex items-center" v-if="createData.delivery.delivery_type == 'store'" @click="openSelectStore">
<view v-if="!$u.test.isEmpty(orderData.delivery.take_store)" class="pt-[26rpx] pb-[30rpx] w-full flex items-center">
<view class="flex flex-col">
<view class="text-[30rpx] font-500 text-[#303133] mb-[20rpx]">{{ orderData.delivery.take_store.store_name }}</view>
<view class="text-[24rpx] text-[var(--text-color-light6)] mb-[14rpx]">门店地址:{{ orderData.delivery.take_store.full_address }}</view>
<view class="text-[24rpx] text-[var(--text-color-light6)] mb-[14rpx]">联系电话:{{ orderData.delivery.take_store.store_mobile }}</view>
<view class="text-[24rpx] text-[var(--text-color-light6)]">营业时间:{{ orderData.delivery.take_store.trade_time }}</view>
</view>
<text class="ml-auto nc-iconfont nc-icon-youV6xx text-[26rpx] text-[var(--text-color-light9)]"></text>
</view>
<view v-else class="flex items-center w-full">
<image class="w-[26rpx] h-[30rpx] mr-[10rpx]" :src="img('addon/shop/payment/position_02.png')" mode="aspectFit"/>
<text class="text-[28rpx]">请选择自提点</text>
<text class="ml-auto nc-iconfont nc-icon-youV6xx text-[26rpx] text-[var(--text-color-light9)]"></text>
</view>
</view>
</view>
<view v-if="createData.delivery.delivery_type == 'store'">
<!-- 姓名 -->
<view class="px-[20rpx] py-[14rpx]">
<view class="flex justify-between items-center">
<view class="text-color text-[26rpx]" @click="handleTime">姓名</view>
<input class="text-right" maxlength="20" placeholder-style="color:#B1B3B5;font-size:26rpx" placeholder="请输入" v-model="createData.delivery.taker_name" />
</view>
</view>
<!-- 预留手机 -->
<view class="px-[20rpx] py-[14rpx]">
<view class="flex justify-between items-center">
<view class="text-color text-[26rpx]">预留手机</view>
<input class="text-right" maxlength="11" placeholder-style="color:#B1B3B5;font-size:26rpx" placeholder="请输入" v-model="createData.delivery.taker_mobile" />
</view>
</view>
<!-- 提货时间 -->
<view class="flex justify-between items-center box-border pt-[14rpx] pb-[24rpx] px-[20rpx]">
<view class="text-color text-[26rpx]">提货时间</view>
<view class="flex" @click="handleTime">
<view class="text-[26rpx] ml-2 text-right" :class="{'text-[#63676D]': !createData.delivery.buyer_ask_delivery_time }">{{ createData.delivery.buyer_ask_delivery_time ? showGetDate : '选择提货时间' }}</view>
<text class="text-[26rpx] text-[var(--text-color-light6)] nc-iconfont nc-icon-youV6xx"></text>
</view>
</view>
</view>
<view v-if="createData.delivery.delivery_type == 'local_delivery'&& localConfig.time_is_open" >
<view class="flex justify-between items-center px-[20rpx] pt-[14rpx] pb-[24rpx]"
@click="handleTime">
<view class="text-color text-[26rpx]">{{createData.delivery.local_delivery_type =='subscribe' ?'预约配送':''}}</view>
<view class="flex items-center">
<view v-if="createData.delivery.local_delivery_type =='subscribe'" class="text-[26rpx] ml-2 text-right" :class="{'text-[#63676D]': !createData.delivery.buyer_ask_delivery_time }">{{ createData.delivery.buyer_ask_delivery_time ? showGetDate : '选择时间' }}</view>
<view v-else class="text-[26rpx] ml-2 text-right" >{{isDelivery?'立即配送':'当前时间不支持配送'}}</view>
<text class="text-[26rpx] text-[var(--text-color-light6)] nc-iconfont nc-icon-youV6xx"></text>
</view>
</view>
</view>
</view>
<view class="mb-[var(--top-m)] card-template h-[100rpx] flex items-center" v-if="orderData.basic.has_goods_types.includes('real') && !delivery_type_list.length">
<p class="text-[28rpx] text-[var(--primary-color)]">商家尚未配置配送方式</p>
</view>
<view class="mb-[var(--top-m)] card-template">
<view class="mb-[30rpx]">
<view class="flex" v-for="(item, key, index) in orderData.goods_data" :key="index" :class="{'pb-[40rpx]': (index + 1) != Object.keys(orderData.goods_data).length}">
<up-image radius="var(--goods-rounded-big)" width="180rpx" height="180rpx" :src="img(item.sku_image.split(',')[0])" model="aspectFill">
<template #error>
<image class="w-[180rpx] h-[180rpx] rounded-[var(--goods-rounded-big)] overflow-hidden" :src="img('static/resource/images/diy/shop_default.jpg')" mode="aspectFill" />
</template>
</up-image>
<view class="flex flex-1 w-0 flex-col justify-between ml-[20rpx] py-[6rpx]">
<view class="line-normal">
<view class="truncate text-[#303133] text-[28rpx] leading-[32rpx]">{{ item.goods.goods_name }}</view>
<view v-if="item.sku_name" class="mt-[14rpx] flex">
<text class="truncate text-[24rpx] text-[var(--text-color-light9)] leading-[28rpx]">{{ item.sku_name }}</text>
</view>
</view>
<view class="mb-auto" :class="{'mt-[6rpx]': !item.sku_name}" v-if="item.not_support_delivery">
<u-alert type="error" description="该商品不支持当前所选配送方式" class="leading-[30rpx] !inline-block" fontSize="11"></u-alert>
</view>
<view class="flex justify-between items-baseline">
<view class="text-[var(--price-text-color)] flex items-baseline price-font">
<view class="flex items-baseline price-font">
<text class="text-[40rpx] font-200">{{ item.exchange_info.point }}</text>
<text class="text-[32rpx]">积分</text>
</view>
<template v-if="parseFloat(item.price)">
<text class="mx-[4rpx] text-[32rpx]">+</text>
<view class="flex items-baseline price-font">
<text class="text-[40rpx] font-200">{{ parseFloat(item.price).toFixed(2) }}</text>
<text class="text-[32rpx]">元</text>
</view>
</template>
</view>
<view class="font-400 text-[28rpx] text-[#303133]">
<text>x</text>
<text>{{ item.num }}</text>
</view>
</view>
</view>
</view>
</view>
<!-- 买家留言 -->
<view class="bg-white flex items-center leading-[30rpx]">
<view class="text-[28rpx] w-[150rpx] text-[#303133]">买家留言</view>
<view class="flex-1 text-[#303133]">
<input type="text" v-model="createData.member_remark"
class="text-right text-[#333] text-[28rpx]" maxlength="50"
placeholder="请输入留言信息给卖家"
placeholder-class="text-[var(--text-color-light9)] text-[28rpx]">
</view>
<!-- <text class="nc-iconfont nc-icon-youV6xx text-[26rpx] text-[var(--text-color-light9)]"></text> -->
</view>
<!-- 发票 -->
<view class="flex items-center text-[#303133] leading-[30rpx] mt-[30rpx]" @click="invoiceRef.open()" v-if="invoiceRef && invoiceRef.invoiceOpen">
<view class="text-[28rpx] w-[150rpx] text-[#303133]">发票信息</view>
<view class="flex-1 w-0 text-right truncate">
<text class="text-[28rpx] text-[#333]">{{ createData.invoice.header_name || '不需要发票' }}</text>
</view>
<text class="nc-iconfont nc-icon-youV6xx text-[26rpx] text-[var(--text-color-light9)]"></text>
</view>
</view>
<view class="card-template">
<view class="title">价格明细</view>
<view class="card-template-item">
<view class="text-[28rpx] w-[150rpx] leading-[30rpx] text-[#303133]">商品金额</view>
<view class="flex-1 w-0 text-right price-font text-[#333] text-[32rpx]">
<view class="inline-block">
<text class="text-[32rpx] mr-[2rpx]">{{ orderData.basic.point_sum }}</text>
<text class="text-[30rpx]">积分</text>
</view>
<template v-if="orderData.basic && parseFloat(orderData.basic.goods_money)">
<text class="text-[28rpx] mx-[4rpx]">+</text>
<view class="inline-block">
<text class="text-[32rpx] mr-[2rpx]">
{{ parseFloat(orderData.basic.goods_money).toFixed(2) }}
</text>
<text class="text-[30rpx]">元</text>
</view>
</template>
</view>
</view>
<view class="card-template-item" v-if="orderData.basic.delivery_money">
<view class="text-[26rpx] w-[150rpx] leading-[30rpx] text-[#303133]">配送费用</view>
<view class="flex-1 w-0 text-right price-font text-[#333] text-[32rpx]">¥{{ parseFloat(orderData.basic.delivery_money) }}</view>
</view>
<view class="card-template-item" v-if="orderData.basic.discount_money">
<view class="text-[26rpx] w-[150rpx] leading-[30rpx] text-[#303133]">优惠金额</view>
<view class="flex-1 w-0 text-right text-[var(--price-text-color)] text-[32rpx] price-font leading-[1]">-¥{{ parseFloat(orderData.basic.discount_money) }}</view>
</view>
</view>
</view>
<u-tabbar :fixed="true" :placeholder="true" :safeAreaInsetBottom="true">
<view class="flex-1 flex items-center justify-between pl-[30rpx] pr-[20rpx]">
<view class="flex items-baseline">
<text class="text-[26rpx] text-[#333] leading-[32rpx]">合计</text>
<text class="text-[var(--price-text-color)] price-font inline-block">
<text class="text-[44rpx]">{{ orderData.basic.point_sum }}</text>
<text class="text-[38rpx]">积分</text>
</text>
<template v-if="orderData.basic && parseFloat(orderData.basic.goods_money)">
<text class="text-[38rpx] text-[var(--price-text-color)] price-font mx-[4rpx]">+</text>
<view class="inline-block">
<text class="text-[44rpx] text-[var(--price-text-color)] price-font">{{ parseFloat(orderData.basic.order_money).toFixed(2) }}</text>
<text class="text-[38rpx] text-[var(--price-text-color)] price-font"></text>
</view>
</template>
</view>
<button
class="primary-btn-bg w-[196rpx] h-[70rpx] font-500 text-[26rpx] leading-[70rpx] !text-[#fff] !border-[0] rounded-[100rpx] m-0"
hover-class="none" @click="create">提交订单
</button>
</view>
</u-tabbar>
<!-- 选择自提点 -->
<select-store ref="storeRef" @confirm="confirmSelectStore" />
<!-- 发票 -->
<invoice ref="invoiceRef" @confirm="confirmInvoice" />
<!-- 地址 -->
<address-list ref="addressRef" @confirm="confirmAddress" back="/addon/shop/pages/point/payment" />
<pay ref="payRef" @close="payClose" :ignore-pay="['friendspay']" />
<ns-select-time ref="selectTime" :rules="service_time" v-if="Object.keys(service_time).length" :isQuantum="true" :isOpen="localConfig.time_is_open" @change="getTime" @getDate="getDate"></ns-select-time>
</view>
</view>
</template>
<script setup lang="ts">
import { ref, watch, computed, nextTick } from 'vue'
import { orderCreateCalculate, orderCreate } from '@/addon/shop/api/point'
import {getLocal} from '@/addon/shop/api/order'
import { redirect, img, mobileHide } from '@/utils/common'
import { onShow } from '@dcloudio/uni-app'
import selectStore from './../order/components/select-store/select-store'
import invoice from './../order/components/invoice/invoice'
import addressList from './../order/components/address-list/address-list'
import { useSubscribeMessage } from '@/hooks/useSubscribeMessage'
import nsSelectTime from '@/addon/shop/components/ns-select-time'
import { topTabar } from '@/utils/topTabbar'
import useMemberStore from '@/stores/member'
const createData: any = ref({
order_key: '',
member_remark: '',
discount: {},
invoice: {},
delivery: {
delivery_type: ''
}
})
const memberStore = useMemberStore()
const info = computed(() => memberStore.info)
const topTabarObj = topTabar()
let topTabbarData = topTabarObj.setTopTabbarParam({ title: '待付款订单' })
const orderData = ref(null)
const storeRef = ref()
const payRef = ref()
const invoiceRef = ref()
const createLoading = ref(false)
const activeIndex = ref(0)//配送方式激活
const delivery_type_list = ref([])
const addressRef = ref()
uni.getStorageSync('orderCreateData') && Object.assign(createData.value, uni.getStorageSync('orderCreateData'))
const storeClickNum = ref(0) // 记录门店自提点击次数
const service_time = ref({}) //获取配置时间
const selectTime = ref(null)
const handleTime = () => {
if (selectTime.value) {
selectTime.value.show = true;
} else if(createData.value.delivery.delivery_type=='store'){
uni.showToast({ title: '请选择自提点', icon: 'none' })
}
};
const isDelivery = ref(false)
// 时间(月日时间段)
const getTime = (e) => {
if (createData.value.delivery.delivery_type == 'local_delivery') {
isDelivery.value = true
if(e.includes('立即配送') ){
createData.value.delivery.buyer_ask_delivery_time = '';
createData.value.delivery.local_delivery_type = 'now';
}else {
createData.value.delivery.buyer_ask_delivery_time = e;
createData.value.delivery.local_delivery_type = 'subscribe';
}
}else {
createData.value.delivery.buyer_ask_delivery_time = e;
}
}
// 时间(年-月-日)
const getStamp = (e) => {
// createData.value.reserve_service_time_stamp = new Date(e).getTime() / 1000
}
const showGetDate = ref(null)
const getDate = (e) => {
if (createData.value.delivery.delivery_type == 'local_delivery') {
if (e.includes('立即配送')) {
showGetDate.value = null
} else {
showGetDate.value = e
}
}else {
showGetDate.value = e
}
}
const localConfig = ref({})
onShow(async () => {
const res = await getLocal();
localConfig.value = res.data;
calculate(); // 确保在 localConfig 赋值后执行
})
const openSelectStore = () => {
if (storeRef.value) {
if (!createData.value.delivery.take_store_id) {
storeRef.value.getData((data: any) => {
if (data.length) {
createData.value.delivery.take_store_id = ((data[0] && data[0].store_id) ? data[0].store_id : 0)
}
});
}
}
storeRef.value.open()
}
// 选择地址之后跳转回来
const selectAddress = uni.getStorageSync('selectAddressCallback')
if (selectAddress) {
createData.value.order_key = ''
createData.value.delivery.delivery_type = selectAddress.delivery
createData.value.delivery.take_address_id = selectAddress.address_id
uni.removeStorage({ key: 'selectAddressCallback' })
}
// 切换配送方式
const switchDeliveryType = (type: string, index: number) => {
// 第一次进入时,加载门店自提并选中
if (type == 'store' && storeClickNum.value == 0) {
storeClickNum.value++;
storeRef.value.getData((data: any) => {
if (data.length) {
createData.value.delivery.take_store_id = data[0]?.store_id ?? 0
calculate()
}
});
}
if (createData.value.delivery.delivery_type != type) {
activeIndex.value = index
createData.value.order_key = ''
createData.value.delivery.delivery_type = type
createData.value.delivery.take_address_id = 0
createData.value.delivery.buyer_ask_delivery_time = ''
service_time.value = {} //清空配置时间
calculate()
}
}
const formatTimeWeek = (timeType: number, weekStr: string): string[] => {
if (timeType === 0) {
// 每天都可以预约
return ['1', '2', '3', '4', '5', '6', '0'];
}
// 自定义时间周
return weekStr ? weekStr.split(',').map(item => item.trim()) : [];
};
/**
* 订单计算
*/
const calculate = () => {
orderCreateCalculate(createData.value).then(({ data }) => {
orderData.value = data
createData.value.order_key = data.order_key
if (orderData.value.delivery.delivery_type_list) {
delivery_type_list.value = Object.values(orderData.value.delivery.delivery_type_list)
}
if (createData.value.delivery.delivery_type == 'store') {
createData.value.delivery.taker_name = info.value.nickname
createData.value.delivery.taker_mobile = info.value.mobile
} else if(orderData.value.delivery && orderData.value.delivery.take_address) {
createData.value.delivery.taker_name = orderData.value.delivery.take_address.name
createData.value.delivery.taker_mobile = orderData.value.delivery.take_address.mobile
}
if(orderData.value.delivery.delivery_type == 'local_delivery'){
service_time.value = {
time_interval: localConfig.value.time_interval,
time_week: formatTimeWeek(localConfig.value.time_type, localConfig.value.time_week),
trade_time_json: localConfig.value.delivery_time,
most_day: localConfig.value.most_day,
advance_day: localConfig.value.advance_day,
type:"subscribe"
}
}
if (orderData.value.delivery.take_store) {
service_time.value = {
time_interval: orderData.value.delivery.take_store.time_interval,
time_week: orderData.value.delivery.take_store.time_week,
trade_time_json: orderData.value.delivery.take_store.trade_time_json
};
}
if (selectAddress) activeIndex.value = delivery_type_list.value.findIndex(el => el.key === orderData.value.delivery.delivery_type)
!createData.value.delivery.delivery_type && data.delivery.delivery_type && (createData.value.delivery.delivery_type = data.delivery.delivery_type)
// 用于自提点是第一种配送方式时,第一次进来加载门店自提并选中, 是对于onshow的补充
nextTick(() => {
setTimeout(() => {
if (delivery_type_list.value && Object.keys(delivery_type_list.value).length && delivery_type_list.value[0].key == 'store' && storeRef.value) {
storeRef.value.getData((data: any) => {
if (data.length) {
createData.value.delivery.take_store_id = ((data[0] && data[0].store_id) ? data[0].store_id : 0)
}
});
}
}, 500);
})
}).catch()
}
// 改变配送方式
watch(
() => delivery_type_list.value.length,
(newValue, oldValue) => {
if (delivery_type_list.value.length && uni.getStorageSync('distributionType')) {
delivery_type_list.value.forEach((item: any, index: any) => {
if (item.name == uni.getStorageSync('distributionType')) {
activeIndex.value = index;
switchDeliveryType(item.key, index)
}
})
uni.removeStorage({ key: 'distributionType' })
}
}
)
let orderId = 0
/**
* 订单创建
*/
const create = () => {
if (!verify() || createLoading.value) return
createLoading.value = true
useSubscribeMessage().request('shop_order_pay,shop_order_delivery')
orderCreate(createData.value).then(({ data }) => {
orderId = data.order_id
if (orderData.value.basic.order_money == 0) {
redirect({ url: '/addon/shop/pages/order/detail', param: { order_id: orderId }, mode: 'redirectTo' })
} else {
payRef.value?.open(data.trade_type, data.order_id, `/addon/shop/pages/order/detail?order_id=${ data.order_id }`)
}
}).catch((err) => {
if (err.code == 401) {
uni.showToast({ icon: 'none', title:'登录过期,请重新登录' })
redirect({
url: '/addon/shop/pages/index',
mode: 'reLaunch'
});
}
createLoading.value = false
})
}
/**
* 下单校验
*/
const verify = () => {
const data = createData.value
let verify = true
if (orderData.value.basic.has_goods_types.includes('real')) {
if (['express', 'local_delivery'].includes(data.delivery.delivery_type) && !orderData.value.delivery.take_address) {
uni.showToast({ title: '请选择收货地址', icon: 'none' })
return false
}
if (data.delivery.delivery_type == 'store' && !data.delivery.take_store_id) {
uni.showToast({ title: '请选择自提点', icon: 'none' })
return false
}
if (data.delivery.delivery_type == 'store') {
if (!data.delivery.taker_name) {
uni.showToast({ title: '请输入姓名', icon: 'none' })
return false
}
if (!data.delivery.taker_mobile) {
uni.showToast({ title: '请输入手机号', icon: 'none' })
return false
}
if (!/^1[3-9]\d{9}$/.test(data.delivery.taker_mobile)) {
uni.showToast({ title: '请输入正确的手机号', icon: 'none' })
return false
}
if (!data.delivery.buyer_ask_delivery_time) {
uni.showToast({ title: '请选择自提时间', icon: 'none' })
return false
}
}
if(data.delivery.delivery_type == 'local_delivery' && !isDelivery.value && localConfig.value.time_is_open){
uni.showToast({ title: '当前时间不支持配送', icon: 'none' })
return false
}
}
return verify
}
/**
* 支付弹窗关闭
*/
const payClose = () => {
redirect({ url: '/addon/shop/pages/order/detail', param: { order_id: orderId }, mode: 'redirectTo' })
}
/**
* 选择地址
*/
const toSelectAddress = () => {
let data: any = {};
data.delivery = createData.value.delivery.delivery_type;
data.type = createData.value.delivery.delivery_type == 'local_delivery' ? 'location_address' : 'address';
data.id = orderData.value.delivery.take_address.id;
addressRef.value.open(data);
}
/**
* 选择自提点
*/
const confirmSelectStore = (store: any) => {
createData.value.delivery.take_store_id = ((store && store.store_id) ? store.store_id : 0)
if (store) {
service_time.value = {
time_interval: store.time_interval,
time_week: store.time_week,
trade_time_json: store.trade_time_json
};
}else{
service_time.value = {}
createData.value.delivery.buyer_ask_delivery_time = ''
}
calculate()
}
const confirmInvoice = (invoice: object) => {
createData.value.invoice = invoice
}
const confirmAddress = (data: object) => {
createData.value.order_key = ''
createData.value.delivery.delivery_type = data.delivery
createData.value.delivery.take_address_id = data.address_id
calculate();
}
</script>
<style lang="scss" scoped>
.head-tab {
.head-tab-item {
.tab-image {
left: 50%;
transform: translateX(-50%);
}
&:nth-child(1).active {
view {
padding-right: 40rpx;
}
}
&:nth-child(2) {
.tab-image {
width: 312rpx;
}
}
&:nth-child(3).active {
view {
padding-left: 30rpx;
}
}
&.active {
view {
font-weight: bold;
color: var(--primary-color);
}
}
.tab-img {
left: 50%;
transform: translateX(-50%);
}
}
}
:deep(.u-alert) {
padding: 6rpx 16rpx !important;
display: inline-block !important;
}
.alert-wrap {
display: inline-block !important;
:deep(.u-fade-enter-active) {
display: inline-block !important;
}
}
.text-ellipsis {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
.line-normal {
line-height: normal;
}
.payment-bottom {
padding-bottom: calc(20rpx + constant(safe-area-inset-bottom));
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
}
.payment-wrap {
background: linear-gradient(180deg, transparent 0%, transparent 80%, var(--page-bg-color) 100%);
}
.payment-body {
--shop-payment-header-color: #F42612; // 待支付头部颜色
--shop-payment-header-tab-color: #FEEAE9; // 待支付头部颜色
/* #ifdef MP */
background: linear-gradient(180deg, transparent 0%, transparent 10%, var(--page-bg-color) 30%);
/* #endif */
/* #ifndef MP */
background: linear-gradient(180deg, transparent 0%, var(--page-bg-color) 25%);
/* #endif */
&::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
z-index: -1;
/* #ifdef MP */
height: 560rpx;
background: linear-gradient(180deg, var(--shop-payment-header-color) 20%, var(--page-bg-color) 90%), var(--page-bg-color);
/* #endif */
/* #ifndef MP */
height: 360rpx;
background: linear-gradient(180deg, var(--shop-payment-header-color) 0%, var(--page-bg-color) 90%), var(--page-bg-color);
/* #endif */
}
}
</style>