UNPKG

@ecomplus/storefront-app

Version:

Vue.js ecommerce app with cart, checkout and account pages

482 lines (446 loc) 18.2 kB
<div class="order-info py-4"> <div v-if="isNew" class="order-info__new" > {{ i19orderConfirmationMsg }}! </div> <transition-group enter-active-class="animated fadeInDown slower"> <div v-if="!isLoaded" key="loading" > <div class="spinner-border" role="status" > <span class="sr-only">Loading...</span> </div> </div> <div v-else key="loaded" > <div class="row"> <div class="col-md-5 col-lg-3"> <h2 class="order-info__number"> <small>{{ i19orderNumber }}:</small> #<span>{{ localOrder.number }}</span> </h2> <transition enter-active-class="animated fadeInDown" leave-active-class="animated fadeOutUp fast" > <p v-if="!isUpdating && status === 'cancelled'" class="order-info__cancelled h3" > {{ i19OrderStatus(status) }} <transition enter-active-class="animated fadeInDown"> <button v-if="canReopenOrder" class="order-info__toggle btn" :class="status === 'cancelled' ? 'btn-success' : 'btn-secondary'" @click="toggle" > <i class="i-check-circle mr-1"></i> {{ i19reopenOrder }} </button> </transition> </p> </transition> <ul v-if="statusEntries.length" class="order-info__timeline" > <li v-for="(entry, i) in statusEntries" :key="`status-${i}`" class="order-info__timeline-status" :class="`order-info__timeline-status--${entry.status}`" > <div v-if="entry.date_time" class="order-info__timeline-date" > {{ formatDate(entry.date_time) }} {{ formatTime(entry.date_time) }} </div> {{ i19FinancialStatus(entry.status) || i19FulfillmentStatus(entry.status) }} </li> </ul> <a v-if="accountOrdersUrl" :href="accountOrdersUrl" class="order-info__orders-link d-none d-md-block btn btn-light" > <i class="i-chevron-left mr-1"></i> {{ i19myOrders }} </a> </div> <div class="col-md-7 col-lg-9"> <div class="row"> <div class="col-lg-6"> <article> <template v-if="transaction.status && transaction.status.current === 'pending'"> <div v-if="transaction.banking_billet" class="order-info__billet" > <p class="lead"> {{ i19doPaymentMsg }} </p> <template v-if="transaction.banking_billet.code"> <p> {{ i19ticketCode }}: <br><samp>{{ transaction.banking_billet.code }}</samp> </p> <button class="btn btn-outline-primary mr-3" @click="() => toClipboard(transaction.banking_billet.code)" > <i class="i-copy mr-1"></i> {{ i19copyCode }} </button> </template> <a target="_blank" class="btn btn-primary" v-if="transaction.banking_billet.link" :href="transaction.banking_billet.link" > <i class="i-print mr-1"></i> {{ i19printBillet }} </a> </div> <div v-else-if="transaction.payment_link" class="order-info__redirect" > <p class="lead"> {{ i19doPaymentMsg }} </p> <a target="_blank" class="btn btn-lg btn-success" :href="transaction.payment_link" > <i class="i-arrow-right mr-1"></i> {{ i19redirectToPayment }} </a> </div> <div v-if="validThruRemainingTime" class="order-info__valid-thru mb-3 mt-3" > {{ i19expirationDate }} <div class="ml-3 mb-0"> <strong>{{ validThruRemainingTime }}</strong> </div> </div> </template> <div class="order-info__details"> <slot name="payment" v-bind="{ order: localOrder, transaction, financialStatus }"> <div class="order-info__payment card"> <div class="card-header"> <span class="order-info__financial-status" :class="`order-info__financial-status--${financialStatus}`" > <i class="i-money-check mr-1"></i> {{ i19FinancialStatus(financialStatus) }} </span> </div> <div v-for="transaction in localOrder.transactions" :key="`t-${transaction._id}`" class="card-body" > <p class="order-info__payment-value"> <template v-if="transaction.payment_method.name"> {{ transaction.payment_method.name }}: </template> <template v-else-if="localOrder.payment_method_label"> {{ localOrder.payment_method_label }}: </template> <strong v-if="transaction.installments && transaction.installments.value"> {{ transaction.installments.number }}x {{ i19of.toLowerCase() }} {{ formatMoney(transaction.installments.value) }} </strong> <strong v-else> {{ formatMoney(transaction.amount || localOrder.amount.total) }} </strong> <template v-if="hasManyTransactions && transaction.status"> <br> <span class="text-muted"> {{ i19FinancialStatus(transaction.status.current) }} </span> </template> </p> <p v-if="transaction.notes" class="order-info__payment-notes alert alert-warning" role="alert" v-html="transaction.notes" ></p> <p v-if="transaction.credit_card" class="order-info__credit-card" > {{ transaction.credit_card.company }} <span v-if="transaction.credit_card.last_digits"> <span v-if="!transaction.credit_card.company"> {{ i19cardNumber }} </span> **** {{ transaction.credit_card.last_digits }} </span> </p> <template v-if="transaction.intermediator"> <div v-if="transaction.intermediator.transaction_code" class="order-info__transaction-code" > <small>{{ i19transactionCode }}</small> <br> <code>{{ transaction.intermediator.transaction_code }}</code> <br> <button class="btn btn-sm btn-light" @click="() => toClipboard(transaction.intermediator.transaction_code)" > <i class="i-copy mr-1"></i> {{ i19copyCode }} </button> </div> <div v-if="transaction.intermediator.transaction_reference" class="order-info__transaction-reference" > <small>{{ i19referenceCode }}</small> <br> {{ transaction.intermediator.transaction_reference }} </div> </template> </div> </div> </slot> <slot name="shipping" v-bind="{ order: localOrder, shippingAddress, fulfillmentStatus }" > <div class="order-info__shipping"> <div v-for="shippingLine in localOrder.shipping_lines" :key="`s-${shippingLine._id}`" class="order-info__shipping-freight card" > <div class="card-header"> <span v-if="fulfillmentStatus" class="order-info__fulfillment-status" :class="`order-info__fulfillment-status--${fulfillmentStatus}`" > <i class="i-truck mr-1"></i> {{ i19FulfillmentStatus(fulfillmentStatus) }} </span> <template v-else> <i class="i-truck mr-1"></i> {{ i19freight }} </template> </div> <div class="card-body"> <span v-if="shippingLine.app"> {{ shippingLine.app.label }} </span> <shipping-line :shipping-line="shippingLine"/> <div v-if="shippingLine.tracking_codes" class="order-info__shipping-tracking" > <hr> <div class="text-muted"> {{ i19trackDelivery }}: </div> <samp v-for="(tracking, i) in shippingLine.tracking_codes" :key="`track-${i}`" > <a v-if="tracking.link" :href="`${tracking.link}`" target="_blank" > {{ tracking.code }} </a> <span v-else> {{ tracking.code }} </span> </samp> </div> <div if="shippingLine.invoices" class="order-info__shipping-nfe" > <hr> <samp v-for="(invoice, i) in shippingLine.invoices" :key="`invoice-${i}`" v-if="invoice.link || invoice.access_key" > <a :href="`${invoice.link || `${(invoiceBaseLink + invoice.access_key)}`}`" target="_blank" > {{ i19invoice }} </a> </samp> </div> </div> </div> <div v-if="canShowShippingAddress" class="order-info__shipping-address card" > <div class="card-header"> <i class="i-map-marked mr-1"></i> {{ i19shippingAddress }} </div> <address class="card-body mb-0"> {{ shippingAddress.street }} <template v-if="shippingAddress.number"> {{ shippingAddress.number }} </template> <template v-if="shippingAddress.complement"> , {{ shippingAddress.complement }} </template> <template v-if="shippingAddress.near_to"> <br>{{ shippingAddress.near_to }} </template> <br> <span v-for="(field, i) in ['borough', 'city', 'province_code']" v-if="shippingAddress[field]" :key="field" > {{ shippingAddress[field] + (i === 2 ? '.' : ',') }} </span> <br> <span> {{ i19zipCode }}: <samp>{{ shippingAddress.zip }}</samp> </span> </address> </div> </div> </slot> <slot name="notes" v-bind="{ order: localOrder }" > <div v-if="localOrder.notes" class="order-info__notes card" > <div class="card-header"> <span> {{ i19notes }} </span> </div> <div class="card-body"> <span> {{ localOrder.notes }} </span> </div> </div> </slot> </div> <p v-if="!isAuthenticated" class="lead" > {{ i19loginForOrderDetailsMsg }} <br> <a class="btn btn-primary mt-2" :href="accountOrdersUrl" > <i class="i-user mr-1"></i> {{ i19login }} </a> </p> </article> </div> <div v-if="localOrder.amount" class="col-lg-6 order-info__right" > <div class="order-info__summary card"> <div class="card-body"> <ec-summary :amount="localOrder.amount" :items="localOrder.items" :buyer="(localOrder.buyer && localOrder.buyer[0]) || ecomPassport.getCustomer()" :shippingAddress="shippingAddress" @click:account="goToAccount" /> </div> </div> <slot name="unsubscribe" v-if="isSubscription && status !== 'cancelled'" > <button type="button" class="order-info__unsubscribe btn btn-outline-danger" @click="toggle" > <i class="i-exclamation-triangle mr-1"></i> {{ i19unsubscribe }} </button> </slot> <template v-else> <slot name="buy"> <button type="button" class="order-info__buy-again btn" :class="isNew ? 'btn-outline-secondary' : 'btn-primary'" @click="buyAgain" > <i class="i-shopping-bag mr-1"></i> {{ i19buyAgain }} </button> </slot> <button v-if="!isUpdating && status === 'open' && !fulfillmentStatus" class="order-info__toggle btn btn-sm btn-danger" :style="isNew ? 'display: none' : null" @click="toggle" > <i class="i-exclamation-triangle mr-1"></i> {{ i19cancelOrder }} </button> </template> </div> </div> </div> </div> </div> </transition-group> <a v-if="accountOrdersUrl" :href="accountOrdersUrl" class="order-info__orders-link d-md-none btn btn-light" > <i class="i-chevron-left mr-1"></i> {{ i19myOrders }} </a> </div>