import { computed, ref, defineComponent, onMounted, reactive, onUnmounted, watch } from 'vue' import { Card, Cell, CellGroup, Popup, SubmitBar, Toast } from 'vant' import { addressType, cartConfirm, formateAttr } from '../cart' import styles from '../index.module.less' import Address from '../components/address' import request from '@/helpers/request' import { useRoute, useRouter } from 'vue-router' import ColProtocol from '@/components/col-protocol' import Payment from '@/views/order-detail/payment' import { state } from '@/state' import ColPopup from '@/components/col-popup' import UserAuth from '@/views/order-detail/userAuth' import ColResult from '@/components/col-result' import { moneyFormat } from '@/helpers/utils' import { listenerMessage, postMessage, removeListenerMessage } from '@/helpers/native-message' import UseCoupons, { couponEnum } from '@/views/order-detail/use-coupons' import ColHeader from '@/components/col-header' export default defineComponent({ name: 'cartConfirm', setup() { const loading = ref(true) const route = useRoute() const address = ref() onMounted(async () => { loading.value = true if (route.query.cartIds) { try { const { code, data } = await request.post( '/api-mall-portal/order/generateConfirmOrder', { params: { cartIds: route.query.cartIds } } ) if (code === 200) { cartConfirm.calcAmount = data.calcAmount cartConfirm.cartPromotionItemList = data.cartPromotionItemList cartConfirm.memberReceiveAddressList = data.memberReceiveAddressList } } catch (error) {} } loading.value = false if (cartConfirm.memberReceiveAddressList.length) { const a = cartConfirm.memberReceiveAddressList.find( (n: any) => n.defaultStatus ) || cartConfirm.memberReceiveAddressList[0] if (a) address.value = a } }) const setAddress = (result: addressType) => { address.value = result } onMounted(() => { listenerMessage('getAddress', result => { setAddress(result?.content || {}) }) }) onUnmounted(() => { removeListenerMessage('getAddress', () => {}) }) const agreeStatus = ref(false) const paymentPopup = ref(false) const authPopup = ref(false) const orderInfo = reactive({ orderNo: '', actualPrice: 0, couponId: '' }) //修复实名认证头部问题 watch(authPopup, (value, oldValue) => { if (authPopup.value) { // 设置是否显示导航栏 0 显示 1 不显示 postMessage({ api: 'setBarStatus', content: { status: 0 } }) } else { postMessage({ api: 'setBarStatus', content: { status: 1 } }) } }) // 提交 const onSubmit = () => { if (!address.value?.id) { Toast('请选择收货地址') return } if (!agreeStatus.value) { Toast('请先阅读并同意《酷乐秀平台服务协议》') return } const users = state.user.data // 判断是否需要实名认证 if (!users?.realName || !users?.idCardNo) { authPopup.value = true return } // 判断是否有订单号 if (orderInfo.orderNo) { paymentPopup.value = true return } createOrder() } const router = useRouter() //创建订单 const createOrder = async () => { const ids = cartConfirm.cartPromotionItemList.reduce( (arr, value: any) => { arr.push(value.id) return arr }, [] ) const payAmount = cartConfirm.calcAmount.payAmount - cartConfirm.calcAmount.promotionAmount const body = { cartIds: ids, memberReceiveAddressId: address.value?.id, platformType: state.platformType, orderAmount: Number((payAmount >= 0 ? payAmount : 0).toFixed(2)), couponId: orderInfo.couponId } try { const { code, data } = await request.post( '/api-mall-portal/order/generateOrder', { data: body } ) if (code === 200) { if (data.order.status === 1) { router.replace({ path: `/shopTrade`, query: { orderNo: data?.order.orderSn, id: data?.order.id } }) return } paymentPopup.value = true orderInfo.orderNo = data?.order.orderSn || '' orderInfo.actualPrice = data?.order.payAmount || 0 } } catch (error) {} } //认证成功 const onAuthSuccess = () => { authPopup.value = false onSubmit() // 实名成功后自动支付 } return () => ( <> {loading.value ? null : (
{cartConfirm.cartPromotionItemList.length ? (
{cartConfirm.cartPromotionItemList.map((item: any) => (
))}
{/* {/* */} { const discountPrice = coupon .map(n => n.discountPrice) .reduce((total, n) => { return total + n }, 0) const couponId = coupon .map(n => n.couponIssueId) .join(',') cartConfirm.calcAmount.promotionAmount = discountPrice orderInfo.couponId = couponId }} /> {/* */}
onSubmit()} >
合计{' '} ¥ {moneyFormat( cartConfirm.calcAmount.payAmount - cartConfirm.calcAmount.promotionAmount >= 0 ? cartConfirm.calcAmount.payAmount - cartConfirm.calcAmount.promotionAmount : 0 )}
(paymentPopup.value = false)} />
) : ( { router.push({ path: '/cart' }) }} > )}
)} ) } })