|
@@ -0,0 +1,567 @@
|
|
|
|
+<template>
|
|
|
|
+ <div title="确认订单">
|
|
|
|
+ <!-- 头部地址选择【配送地址】【自提地址】 -->
|
|
|
|
+ <AddressSelection v-model="addressState" class="mb-3" />
|
|
|
|
+
|
|
|
|
+ <!-- 商品信息 -->
|
|
|
|
+ <!-- <div>
|
|
|
|
+ <s-goods-item
|
|
|
|
+ v-for="item in state.orderInfo.items"
|
|
|
|
+ :key="item.skuId"
|
|
|
|
+ :img="item.picUrl"
|
|
|
|
+ :title="item.spuName"
|
|
|
|
+ :skuText="item.properties.map((property) => property.valueName).join(' ')"
|
|
|
|
+ :price="item.price"
|
|
|
|
+ :num="item.count"
|
|
|
|
+ marginBottom="10"
|
|
|
|
+ />
|
|
|
|
+ </div> -->
|
|
|
|
+
|
|
|
|
+ <!-- 价格信息 -->
|
|
|
|
+ <div>
|
|
|
|
+ <div>
|
|
|
|
+ <div class="order-item d-flex">
|
|
|
|
+ <div class="item-title mr-3">商品金额:</div>
|
|
|
|
+ <div>
|
|
|
|
+ <span class="item-value">
|
|
|
|
+ ¥{{ fen2yuan(state.orderInfo.price.totalPrice) }}
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- <div
|
|
|
|
+ v-if="state.orderPayload.pointActivityId"
|
|
|
|
+ class="order-item ss-flex ss-col-center ss-row-between"
|
|
|
|
+ >
|
|
|
|
+ <div class="item-title">兑换积分</div>
|
|
|
|
+ <div class="ss-flex ss-col-center">
|
|
|
|
+ <image
|
|
|
|
+ :src="sheep.$url.static('/static/img/shop/goods/score1.svg')"
|
|
|
|
+ class="score-img"
|
|
|
|
+ />
|
|
|
|
+ <span class="item-value ss-m-r-24">
|
|
|
|
+ {{ state.orderInfo.usePoint }}
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div
|
|
|
|
+ class="order-item ss-flex ss-col-center ss-row-between"
|
|
|
|
+ v-if="state.orderInfo.type === 0 || state.orderPayload.pointActivityId"
|
|
|
|
+ >
|
|
|
|
+ <div class="item-title">积分抵扣</div>
|
|
|
|
+ <div class="ss-flex ss-col-center">
|
|
|
|
+ {{ state.pointStatus || state.orderPayload.pointActivityId ? '剩余积分' : '当前积分' }}
|
|
|
|
+ <image
|
|
|
|
+ :src="sheep.$url.static('/static/img/shop/goods/score1.svg')"
|
|
|
|
+ class="score-img"
|
|
|
|
+ />
|
|
|
|
+ <span class="item-value ss-m-r-24">
|
|
|
|
+ {{
|
|
|
|
+ state.pointStatus || state.orderPayload.pointActivityId
|
|
|
|
+ ? state.orderInfo.totalPoint - state.orderInfo.usePoint
|
|
|
|
+ : state.orderInfo.totalPoint || 0
|
|
|
|
+ }}
|
|
|
|
+ </span>
|
|
|
|
+ <checkbox-group @change="changeIntegral" v-if="!state.orderPayload.pointActivityId">
|
|
|
|
+ <checkbox
|
|
|
|
+ :checked="state.pointStatus"
|
|
|
|
+ :disabled="!state.orderInfo.totalPoint || state.orderInfo.totalPoint <= 0"
|
|
|
|
+ />
|
|
|
|
+ </checkbox-group>
|
|
|
|
+ </div>
|
|
|
|
+ </div> -->
|
|
|
|
+ <!-- 快递配置时,信息的展示 -->
|
|
|
|
+ <div
|
|
|
|
+ class="order-item d-flex"
|
|
|
|
+ v-if="addressState.deliveryType === 1"
|
|
|
|
+ >
|
|
|
|
+ <div class="item-title mr-3">运费:</div>
|
|
|
|
+ <div class="ss-flex ss-col-center">
|
|
|
|
+ <span class="item-value ss-m-r-24" v-if="state.orderInfo.price.deliveryPrice > 0">
|
|
|
|
+ +¥{{ fen2yuan(state.orderInfo.price.deliveryPrice) }}
|
|
|
|
+ </span>
|
|
|
|
+ <div class="item-value ss-m-r-24" v-else>免运费</div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 门店自提时,需要填写姓名和手机号 -->
|
|
|
|
+ <div
|
|
|
|
+ class="order-item ss-flex ss-col-center ss-row-between"
|
|
|
|
+ v-if="addressState.deliveryType === 2"
|
|
|
|
+ >
|
|
|
|
+ <div class="item-title">联系人</div>
|
|
|
|
+ <div class="ss-flex ss-col-center">
|
|
|
|
+ 请填写您的联系姓名
|
|
|
|
+ <!-- <uni-easyinput
|
|
|
|
+ maxlength="20"
|
|
|
|
+ placeholder="请填写您的联系姓名"
|
|
|
|
+ v-model="addressState.receiverName"
|
|
|
|
+ :inputBorder="false"
|
|
|
|
+ :clearable="false"
|
|
|
|
+ /> -->
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div
|
|
|
|
+ class="order-item ss-flex ss-col-center ss-row-between"
|
|
|
|
+ v-if="addressState.deliveryType === 2"
|
|
|
|
+ >
|
|
|
|
+ <div class="item-title">联系电话</div>
|
|
|
|
+ <div class="ss-flex ss-col-center">
|
|
|
|
+ 请填写您的联系电话
|
|
|
|
+ <!-- <uni-easyinput
|
|
|
|
+ maxlength="20"
|
|
|
|
+ placeholder="请填写您的联系电话"
|
|
|
|
+ v-model="addressState.receiverMobile"
|
|
|
|
+ :inputBorder="false"
|
|
|
|
+ :clearable="false"
|
|
|
|
+ /> -->
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 优惠劵:只有 type = 0 普通订单(非拼团、秒杀、砍价),才可以使用优惠劵 -->
|
|
|
|
+ <!-- <div
|
|
|
|
+ class="order-item ss-flex ss-col-center ss-row-between"
|
|
|
|
+ v-if="state.orderInfo.type === 0"
|
|
|
|
+ >
|
|
|
|
+ <div class="item-title">优惠券</div>
|
|
|
|
+ <div class="ss-flex ss-col-center" @tap="state.showCoupon = true">
|
|
|
|
+ <span class="item-value text-red" v-if="state.orderPayload.couponId > 0">
|
|
|
|
+ -¥{{ fen2yuan(state.orderInfo.price.couponPrice) }}
|
|
|
|
+ </span>
|
|
|
|
+ <span
|
|
|
|
+ class="item-value"
|
|
|
|
+ :class="
|
|
|
|
+ state.couponInfo.filter((coupon) => coupon.match).length > 0
|
|
|
|
+ ? 'text-red'
|
|
|
|
+ : 'text-disabled'
|
|
|
|
+ "
|
|
|
|
+ v-else
|
|
|
|
+ >
|
|
|
|
+ {{
|
|
|
|
+ state.couponInfo.filter((coupon) => coupon.match).length > 0
|
|
|
|
+ ? state.couponInfo.filter((coupon) => coupon.match).length + ' 张可用'
|
|
|
|
+ : '暂无可用优惠券'
|
|
|
|
+ }}
|
|
|
|
+ </span>
|
|
|
|
+ <span class="_icon-forward item-icon" />
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div
|
|
|
|
+ class="order-item ss-flex ss-col-center ss-row-between"
|
|
|
|
+ v-if="state.orderInfo.price.discountPrice > 0"
|
|
|
|
+ >
|
|
|
|
+ <div class="item-title">活动优惠</div>
|
|
|
|
+ <div class="ss-flex ss-col-center" @tap="state.showDiscount = true">
|
|
|
|
+ <span class="item-value text-red">
|
|
|
|
+ -¥{{ fen2yuan(state.orderInfo.price.discountPrice) }}
|
|
|
|
+ </span>
|
|
|
|
+ <span class="_icon-forward item-icon" />
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div
|
|
|
|
+ class="order-item ss-flex ss-col-center ss-row-between"
|
|
|
|
+ v-if="state.orderInfo.price.vipPrice > 0"
|
|
|
|
+ >
|
|
|
|
+ <div class="item-title">会员优惠</div>
|
|
|
|
+ <div class="ss-flex ss-col-center">
|
|
|
|
+ <span class="item-value text-red">
|
|
|
|
+ -¥{{ fen2yuan(state.orderInfo.price.vipPrice) }}
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
|
|
+ </div> -->
|
|
|
|
+ </div>
|
|
|
|
+ <div class="total-num ss-m-r-20">
|
|
|
|
+ 共{{ state.orderInfo.items.reduce((acc, item) => acc + item.count, 0) }}件
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <div class="mt-5">
|
|
|
|
+ <v-text-field
|
|
|
|
+ v-model="state.orderPayload.remark"
|
|
|
|
+ label="订单备注"
|
|
|
|
+ placeholder="建议留言前先与商家沟通"
|
|
|
|
+ variant="outlined"
|
|
|
|
+ density="compact"
|
|
|
|
+ color="primary"
|
|
|
|
+ ></v-text-field>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <div class="total-box-footer d-flex flex-column align-end">
|
|
|
|
+ <div class="d-flex">
|
|
|
|
+ <div>合计:</div>
|
|
|
|
+ <div class="total-num text-red"> ¥{{ fen2yuan(state.orderInfo.price.payPrice) }}</div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <!-- 选择优惠券弹框 -->
|
|
|
|
+ <!-- <s-coupon-select
|
|
|
|
+ v-model="state.couponInfo"
|
|
|
|
+ :show="state.showCoupon"
|
|
|
|
+ @confirm="onSelectCoupon"
|
|
|
|
+ @close="state.showCoupon = false"
|
|
|
|
+ /> -->
|
|
|
|
+
|
|
|
|
+ <!-- 满额折扣弹框 TODO @puhui999:【折扣】后续要把优惠信息打进去 -->
|
|
|
|
+ <!-- <s-discount-list
|
|
|
|
+ v-model="state.orderInfo"
|
|
|
|
+ :show="state.showDiscount"
|
|
|
|
+ @close="state.showDiscount = false"
|
|
|
|
+ /> -->
|
|
|
|
+
|
|
|
|
+ <!-- 底部 -->
|
|
|
|
+ <!-- <su-fixed bottom :opacity="false" bg="bg-white" placeholder :noFixed="false" :index="200">
|
|
|
|
+ <div class="footer-box border-top ss-flex ss-row-between ss-p-x-20 ss-col-center">
|
|
|
|
+ <div class="total-box-footer ss-flex ss-col-center">
|
|
|
|
+ <div class="total-num ss-font-30 text-red">
|
|
|
|
+ ¥{{ fen2yuan(state.orderInfo.price.payPrice) }}
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <button
|
|
|
|
+ class="ss-reset-button ui-BG-Main-Gradient ss-r-40 submit-btn ui-Shadow-Main"
|
|
|
|
+ @tap="onConfirm"
|
|
|
|
+ >
|
|
|
|
+ 提交订单
|
|
|
|
+ </button>
|
|
|
|
+ </div>
|
|
|
|
+ </su-fixed> -->
|
|
|
|
+ </div>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script setup>
|
|
|
|
+ import { reactive, ref, watch } from 'vue'
|
|
|
|
+ import AddressSelection from './addressSelection.vue'
|
|
|
|
+ import { fen2yuan } from '@/hooks/web/useGoods'
|
|
|
|
+ import { getTradeConfig, createOrder, settlementOrder } from '@/api/mall/trade'
|
|
|
|
+ import Snackbar from '@/plugins/snackbar'
|
|
|
|
+ import { getOrderPayStatus, payOrderSubmit } from '@/api/common'
|
|
|
|
+ import Confirm from '@/plugins/confirm'
|
|
|
|
+ import { useRouter } from 'vue-router'; const router = useRouter()
|
|
|
|
+ import { useUserStore } from '@/store/user'; const userStore = useUserStore()
|
|
|
|
+ import { useI18n } from '@/hooks/web/useI18n'; const { t } = useI18n()
|
|
|
|
+ const emit = defineEmits(['paySuccess'])
|
|
|
|
+
|
|
|
|
+ const props = defineProps({
|
|
|
|
+ data: {
|
|
|
|
+ type: String,
|
|
|
|
+ default: '',
|
|
|
|
+ },
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ const state = reactive({
|
|
|
|
+ orderPayload: {},
|
|
|
|
+ orderInfo: {
|
|
|
|
+ items: [], // 商品项列表
|
|
|
|
+ price: {}, // 价格信息
|
|
|
|
+ },
|
|
|
|
+ showCoupon: false, // 是否展示优惠劵
|
|
|
|
+ couponInfo: [], // 优惠劵列表
|
|
|
|
+ showDiscount: false, // 是否展示营销活动
|
|
|
|
+ // ========== 积分 ==========
|
|
|
|
+ pointStatus: false, //是否使用积分
|
|
|
|
+ });
|
|
|
|
+ // 检测支付环境
|
|
|
|
+ const payState = reactive({
|
|
|
|
+ orderType: 'goods', // 订单类型; goods - 商品订单, recharge - 充值订单
|
|
|
|
+ orderInfo: {}, // 支付单信息
|
|
|
|
+ payStatus: 0, // 0=检测支付环境, -2=未查询到支付单信息, -1=支付已过期, 1=待支付,2=订单已支付
|
|
|
|
+ payMethods: [], // 可选的支付方式
|
|
|
|
+ payment: '', // 选中的支付方式
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ const addressState = ref({
|
|
|
|
+ addressInfo: {}, // 选择的收货地址
|
|
|
|
+ deliveryType: undefined, // 收货方式:1-快递配送,2-门店自提
|
|
|
|
+ isPickUp: true, // 门店自提是否开启
|
|
|
|
+ pickUpInfo: {}, // 选择的自提门店信息
|
|
|
|
+ receiverName: '', // 收件人名称
|
|
|
|
+ receiverMobile: '', // 收件人手机
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ watch(
|
|
|
|
+ () => props.data,
|
|
|
|
+ (newVal) => {
|
|
|
|
+ if (newVal) {
|
|
|
|
+ state.orderPayload = JSON.parse(newVal);
|
|
|
|
+ tradeConfig()
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ { immediate: true },
|
|
|
|
+ // { deep: true }
|
|
|
|
+ )
|
|
|
|
+ async function tradeConfig () {
|
|
|
|
+ // 获取交易配置
|
|
|
|
+ const data = await getTradeConfig();
|
|
|
|
+ addressState.value.isPickUp = data.deliveryPickUpEnabled;
|
|
|
|
+
|
|
|
|
+ // 价格计算
|
|
|
|
+ // 情况一:先自动选择“快递物流”
|
|
|
|
+ addressState.value.deliveryType = 1;
|
|
|
|
+ let orderCode = await getOrderInfo();
|
|
|
|
+ if (orderCode === 0) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ // 情况二:失败,再自动选择“门店自提”
|
|
|
|
+ if (addressState.value.isPickUp) {
|
|
|
|
+ addressState.value.deliveryType = 2;
|
|
|
|
+ let orderCode = await getOrderInfo();
|
|
|
|
+ if (orderCode === 0) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 情况三:都失败,则不选择
|
|
|
|
+ addressState.value.deliveryType = undefined;
|
|
|
|
+ await getOrderInfo()
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // ========== 积分 ==========
|
|
|
|
+ /**
|
|
|
|
+ * 使用积分抵扣
|
|
|
|
+ */
|
|
|
|
+ const changeIntegral = async () => {
|
|
|
|
+ state.pointStatus = !state.pointStatus;
|
|
|
|
+ await getOrderInfo();
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ // 选择优惠券
|
|
|
|
+ async function onSelectCoupon(couponId) {
|
|
|
|
+ state.orderPayload.couponId = couponId;
|
|
|
|
+ await getOrderInfo();
|
|
|
|
+ state.showCoupon = false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 提交订单
|
|
|
|
+ function onConfirm() {
|
|
|
|
+ if (addressState.value.deliveryType === 1 && !addressState.value.addressInfo.id) {
|
|
|
|
+ Snackbar.warning('请选择收货地址')
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ // if (addressState.value.deliveryType === 2) {
|
|
|
|
+ // if (!addressState.value.pickUpInfo.id) {
|
|
|
|
+ // Snackbar.warning('请选择自提门店地址')
|
|
|
|
+ // return;
|
|
|
|
+ // }
|
|
|
|
+ // if (addressState.value.receiverName === '' || addressState.value.receiverMobile === '') {
|
|
|
|
+ // Snackbar.warning('请填写联系人或联系人电话')
|
|
|
|
+ // return;
|
|
|
|
+ // }
|
|
|
|
+ // if (!/^[\u4e00-\u9fa5\w]{2,16}$/.test(addressState.value.receiverName)) {
|
|
|
|
+ // Snackbar.warning('请填写您的真实姓名')
|
|
|
|
+ // return;
|
|
|
|
+ // }
|
|
|
|
+ // if (!/^1(3|4|5|7|8|9|6)\d{9}$/.test(addressState.value.receiverMobile)) {
|
|
|
|
+ // Snackbar.warning('请填写正确的手机号')
|
|
|
|
+ // return;
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ submitOrder();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const userAccount = ref(JSON.parse(localStorage.getItem('userAccount')) || {}) // 账户信息
|
|
|
|
+
|
|
|
|
+ userStore.$subscribe((mutation, state) => {
|
|
|
|
+ if (Object.keys(state.userAccount).length) userAccount.value = state.userAccount
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ // 设置支付订单信息
|
|
|
|
+ const payImmediately = async (id) => {
|
|
|
|
+ // 获得支付订单信息
|
|
|
|
+ const orderRes = await getOrderPayStatus({ id, sync: true })
|
|
|
|
+ if (!orderRes) {
|
|
|
|
+ payState.payStatus = -2;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ payState.orderInfo = orderRes;
|
|
|
|
+ // 获得支付方式
|
|
|
|
+ //
|
|
|
|
+ // 暂时只对接余额支付(wallet)
|
|
|
|
+ const channel = 'wallet'
|
|
|
|
+ // 对比余额是否不足 订单金额:orderInfo?.price-0
|
|
|
|
+ const balance = userAccount.value?.balance ? userAccount.value.balance-0 : 0
|
|
|
|
+ // const balanceShow = userAccount.value?.balance && userAccount.value?.balance > 0 ? (userAccount.value?.balance / 100.0).toFixed(2) : 0
|
|
|
|
+ if (balance < payState?.orderInfo?.price-0) {
|
|
|
|
+ // 余额不足
|
|
|
|
+ Confirm(t('common.confirmTitle'), '余额不足,是否前往充值?', {sureText: '立即前往'}).then(() => {
|
|
|
|
+ router.push({ path: '/personalRecharge' })
|
|
|
|
+ })
|
|
|
|
+ } else {
|
|
|
|
+ // 提交支付订单
|
|
|
|
+ let obj = {
|
|
|
|
+ id: payState.orderInfo.id,
|
|
|
|
+ channelCode: channel,
|
|
|
|
+ channelExtras: {},
|
|
|
|
+ };
|
|
|
|
+ const res = await payOrderSubmit(obj)
|
|
|
|
+ console.log('提交支付订单payOrderSubmit:', res)
|
|
|
|
+ Snackbar.warning('支付成功!')
|
|
|
|
+ emit('paySuccess')
|
|
|
|
+ userStore.getUserInfos()
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 创建订单&跳转
|
|
|
|
+ async function submitOrder() {
|
|
|
|
+ const data = await createOrder({
|
|
|
|
+ items: state.orderPayload.items,
|
|
|
|
+ couponId: state.orderPayload.couponId,
|
|
|
|
+ remark: state.orderPayload.remark,
|
|
|
|
+ deliveryType: addressState.value.deliveryType,
|
|
|
|
+ addressId: addressState.value.addressInfo.id, // 收件地址编号
|
|
|
|
+ pickUpStoreId: addressState.value.pickUpInfo.id, //自提门店编号
|
|
|
|
+ receiverName: addressState.value.receiverName, // 选择门店自提时,该字段为联系人名
|
|
|
|
+ receiverMobile: addressState.value.receiverMobile, // 选择门店自提时,该字段为联系人手机
|
|
|
|
+ pointStatus: state.pointStatus,
|
|
|
|
+ combinationActivityId: state.orderPayload.combinationActivityId,
|
|
|
|
+ combinationHeadId: state.orderPayload.combinationHeadId,
|
|
|
|
+ seckillActivityId: state.orderPayload.seckillActivityId,
|
|
|
|
+ pointActivityId: state.orderPayload.pointActivityId,
|
|
|
|
+ });
|
|
|
|
+ if (data.payOrderId && data.payOrderId > 0) payImmediately(data.payOrderId)
|
|
|
|
+ // 更新购物车列表,如果来自购物车
|
|
|
|
+ // if (state.orderPayload.items[0].cartId > 0) {
|
|
|
|
+ // sheep.$store('cart').getList();
|
|
|
|
+ // }
|
|
|
|
+
|
|
|
|
+ // // 跳转到支付页面
|
|
|
|
+ // if (data.payOrderId && data.payOrderId > 0) {
|
|
|
|
+ // sheep.$router.redirect('/pages/pay/index', {
|
|
|
|
+ // id: data.payOrderId,
|
|
|
|
+ // });
|
|
|
|
+ // } else {
|
|
|
|
+ // sheep.$router.redirect('/pages/order/detail', {
|
|
|
|
+ // id: data.id,
|
|
|
|
+ // });
|
|
|
|
+ // }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 检查库存 & 计算订单价格
|
|
|
|
+ async function getOrderInfo() {
|
|
|
|
+ // 计算价格
|
|
|
|
+ const data = await settlementOrder({
|
|
|
|
+ items: state.orderPayload.items,
|
|
|
|
+ couponId: state.orderPayload.couponId,
|
|
|
|
+ deliveryType: addressState.value.deliveryType,
|
|
|
|
+ addressId: addressState.value.addressInfo.id, // 收件地址编号
|
|
|
|
+ pickUpStoreId: addressState.value.pickUpInfo.id, //自提门店编号
|
|
|
|
+ receiverName: addressState.value.receiverName, // 选择门店自提时,该字段为联系人名
|
|
|
|
+ receiverMobile: addressState.value.receiverMobile, // 选择门店自提时,该字段为联系人手机
|
|
|
|
+ pointStatus: state.pointStatus,
|
|
|
|
+ combinationActivityId: state.orderPayload.combinationActivityId,
|
|
|
|
+ combinationHeadId: state.orderPayload.combinationHeadId,
|
|
|
|
+ seckillActivityId: state.orderPayload.seckillActivityId,
|
|
|
|
+ pointActivityId: state.orderPayload.pointActivityId,
|
|
|
|
+ });
|
|
|
|
+ state.orderInfo = data;
|
|
|
|
+ state.couponInfo = data.coupons || [];
|
|
|
|
+ // 设置收货地址
|
|
|
|
+ if (state.orderInfo.address) {
|
|
|
|
+ addressState.value.addressInfo = state.orderInfo.address;
|
|
|
|
+ }
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 使用 watch 监听地址和配送方式的变化
|
|
|
|
+ watch(addressState, async (newAddress, oldAddress) => {
|
|
|
|
+ // 如果收货地址或配送方式有变化,则重新计算价格
|
|
|
|
+ if (
|
|
|
|
+ newAddress.addressInfo.id !== oldAddress.addressInfo.id ||
|
|
|
|
+ newAddress.deliveryType !== oldAddress.deliveryType
|
|
|
|
+ ) {
|
|
|
|
+ await getOrderInfo();
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ defineExpose({
|
|
|
|
+ onConfirm
|
|
|
|
+ })
|
|
|
|
+</script>
|
|
|
|
+
|
|
|
|
+<style lang="scss" scoped>
|
|
|
|
+ .score-img {
|
|
|
|
+ width: 36rpx;
|
|
|
|
+ height: 36rpx;
|
|
|
|
+ margin: 0 4rpx;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .order-item {
|
|
|
|
+ height: 80rpx;
|
|
|
|
+
|
|
|
|
+ .item-title {
|
|
|
|
+ font-size: 28rpx;
|
|
|
|
+ font-weight: 400;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .item-value {
|
|
|
|
+ font-size: 28rpx;
|
|
|
|
+ font-weight: 500;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .text-disabled {
|
|
|
|
+ color: #bbbbbb;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .item-icon {
|
|
|
|
+ color: #999;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .remark-input {
|
|
|
|
+ text-align: right;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .item-placeholder {
|
|
|
|
+ color: #999;
|
|
|
|
+ font-size: 26rpx;
|
|
|
|
+ text-align: right;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .total-box-footer {
|
|
|
|
+ height: 90rpx;
|
|
|
|
+
|
|
|
|
+ .total-num {
|
|
|
|
+ color: #333333;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .footer-box {
|
|
|
|
+ height: 100rpx;
|
|
|
|
+
|
|
|
|
+ .submit-btn {
|
|
|
|
+ width: 240rpx;
|
|
|
|
+ height: 70rpx;
|
|
|
|
+ font-size: 28rpx;
|
|
|
|
+ font-weight: 500;
|
|
|
|
+
|
|
|
|
+ .goto-pay-text {
|
|
|
|
+ line-height: 28rpx;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .cancel-btn {
|
|
|
|
+ width: 240rpx;
|
|
|
|
+ height: 80rpx;
|
|
|
|
+ font-size: 26rpx;
|
|
|
|
+ background-color: #e5e5e5;
|
|
|
|
+ color: #999;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .title {
|
|
|
|
+ font-size: 36rpx;
|
|
|
|
+ font-weight: bold;
|
|
|
|
+ color: #333333;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .subtitle {
|
|
|
|
+ font-size: 28rpx;
|
|
|
|
+ color: #999999;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .cicon-checkbox {
|
|
|
|
+ font-size: 36rpx;
|
|
|
|
+ color: var(--v-primary-base);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .cicon-box {
|
|
|
|
+ font-size: 36rpx;
|
|
|
|
+ color: #999999;
|
|
|
|
+ }
|
|
|
|
+</style>
|