retailer-vue/src/routes/retailer/my_orders.vue

263 lines
8.7 KiB
Vue

<template>
<v-container>
<v-row v-show="!orderId">
<v-col cols="12">
<p class="h2 body-font text-uppercase primary--text pb-2">My Orders</p>
<div class="myorders-dashboard-line my-5"></div>
<v-row class="mt-12" justify="center" v-if="inProgress">
<v-progress-circular :size="60" color="primary" indeterminate></v-progress-circular>
</v-row>
<v-row no-gutters v-else>
<v-col class="mt-7">
<v-data-table
class="myorders-data-table text-capitalize"
:headers="headers"
:items="orderProductsList"
:items-per-page="5"
:disable-sort="true"
:footer-props="{itemsPerPageText:'Records per page'}"
>
<template v-slot:item.date="{ item }">
<span>{{isoStringToNormalDate(item.createdAt)}}</span>
</template>
<template v-slot:item.name="{ item }">
<span>{{item.customerFirstname}} {{item.customerLastname}}</span>
</template>
<template v-slot:item.total="{ item }">
<span>${{priceFormatter(item.baseGrandTotal)}}</span>
</template>
<template v-slot:item.status="{ item }">
<span v-if="item.status == 'failed_to_ship' || item.status == 'waiting_to_ship'">Processing Order</span>
<span v-else>{{item.status}}</span>
</template>
<template v-slot:item.actions="{ item }">
<v-hover v-slot:default="{ hover }">
<router-link
:class="hover ? 'content-link-hover-color' : 'primary--text'"
to
@click.native="viewMyOrder(item.entityId)"
class="ls-n009 text-decoration-none body myorders-route-link"
>View Order</router-link>
</v-hover>
<!--<span class="px-1">|</span>
<v-btn
class="primary--text myorders-action-button"
depressed
dark
@click="reorder(item)"
text
>Reorder</v-btn>-->
</template>
</v-data-table>
</v-col>
</v-row>
</v-col>
</v-row>
<v-row v-show="orderId" no-gutters id="showInPrint">
<v-row class="mt-12" justify="center" v-if="fetchInProgress">
<v-progress-circular :size="60" color="primary" indeterminate></v-progress-circular>
</v-row>
<v-col cols="12" v-else>
<v-row align="center" id="showInPrintOnly" class="order-products-heading">
<v-col cols="auto">
<h1 class="order-product-id">Order #{{orderProduct.incrementId}}</h1>
</v-col>
<v-col cols="auto">
<v-btn class="order-product-status" tile outlined text disabled>
<span class="text-uppercase black--text" v-if="orderProduct.status == 'failed_to_ship' || orderProduct.status == 'waiting_to_ship'">Processing Order</span>
<span class="text-uppercase black--text" v-else>{{orderProduct.status}}</span>
</v-btn>
</v-col>
</v-row>
<v-row align="center" id="hideInPrint">
<v-col cols="auto">
<p class="h2 mb-0">Order #{{orderProduct.incrementId}}</p>
</v-col>
<v-col cols="auto">
<v-btn class="mt-1" tile outlined text disabled>
<span class="text-uppercase black--text" v-if="orderProduct.status == 'failed_to_ship' || orderProduct.status == 'waiting_to_ship'">Processing Order</span>
<span class="text-uppercase black--text" v-else>{{orderProduct.status}}</span>
</v-btn>
</v-col>
</v-row>
<p class="pt-4">{{dateString(orderProduct.createdAt)}}</p>
<v-col class="px-0" id="hideInPrint">
<!--<v-btn
class="pl-0 primary--text myorders-action-button"
depressed
link
@click="reorder(item)"
text
>Reorder</v-btn>-->
<v-hover v-slot:default="{ hover }">
<router-link
:class="hover ? 'content-link-hover-color' : 'primary--text'"
to
@click.native="printOrder('showInPrint')"
class="ls-n009 text-decoration-none float-right body myorders-route-link pr-4"
>Print Order</router-link>
</v-hover>
</v-col>
<ViewOrderTabs :viewOrderItem="orderProduct" :productInvoice="productInvoice"></ViewOrderTabs>
</v-col>
</v-row>
</v-container>
</template>
<script>
import ViewOrderTabs from "@/components/retailer/my-orders/ViewOrderTabs";
import { loginInterrupt } from "@/services/nav";
//const vueAppMagenotApiUrl = process.env.VUE_APP_MAGENTO_API_URL;
import {
priceFormatter
} from "@/services/util.service";
export default {
name: "MyOrders",
data: () => ({
priceFormatter: priceFormatter,
viewOrderItem: null,
viewOrder: false,
errorMessage: false,
blue: "primary",
white: "white",
dialog: false,
headers: [
{
text: "Order #",
align: "start",
sortable: false,
value: "incrementId",
class: "body"
},
{ text: "Date", class: "body", value: "date" },
{ text: "Ship To", class: "body", value: "name" },
{ text: "Estimated Total", class: "body", value: "total" },
{ text: "Status", class: "body ", value: "status" },
{ text: "Action", class: "body", align: "left", value: "actions" }
]
}),
components: {
ViewOrderTabs
},
computed: {
orderId: function() {
return this.$route.params.orderId;
},
imageBasePathUrl() {
return process.env.VUE_APP_IMAGE_PATH_URL;
},
hideAndShowFields: function() {
let currentName = this.$router.history.current.name;
if (currentName === "MyOrders") {
return true;
} else {
return false;
}
},
orderProductsList() {
let orders = this.$store.state.meProductList.orderProductsList.items;
if(orders.length)
return orders.slice().reverse();
return orders;
},
productInvoice() {
return this.$store.state.meProductOne.productInvoice;
},
userAuth: function() {
return this.$store.state.auth.userAuth;
},
basicInfo() {
return this.$store.state.accountOne.one;
},
orderProduct() {
return this.$store.state.meProductOne.orderProduct;
},
inProgress() {
return this.$store.state.meProductList.inProgress;
},
fetchInProgress() {
return this.$store.state.meProductOne.fetchInProgress;
}
},
methods: {
viewMyOrder(itemId) {
this.$store.dispatch("meProductOne/fetchOrderProduct", itemId);
this.$router
.push({
name: "ViewProduct",
params: { orderId: itemId }
})
.catch(error => {
error;
});
},
getOrderList() {
this.$store.dispatch(
"meProductList/fetchOrderProductsList",
this.basicInfo.email
);
},
printOrder(divName) {
const prtHtml = document.getElementById(divName).innerHTML;
let stylesHtml = "";
for (const node of [
...document.querySelectorAll('link[rel="stylesheet"], style')
]) {
stylesHtml += node.outerHTML;
}
const WinPrint = window.open(
"",
"",
"left=0,top=0,width=800,height=900,toolbar=0,scrollbars=0,status=0"
);
WinPrint.document.write(`<!DOCTYPE html>
<html>
<head>
${stylesHtml}
</head>
<body>
${prtHtml}
</body>
</html>`);
WinPrint.document.close();
WinPrint.focus();
WinPrint.print();
WinPrint.close();
},
isoStringToNormalDate(date) {
let newDateTime = Date.parse(date);
let tmp = new Date(newDateTime).toLocaleDateString().split("/");
return (date = tmp[1] + "/" + tmp[0] + "/" + tmp[2]);
},
dateString(date) {
let newDateTime = Date.parse(date);
return new Date(newDateTime).toDateString();
}
},
async created() {
if (!this.userAuth) {
loginInterrupt(
window.location.href,
"There was an access violation caused by your request. You need to sign back in please."
);
}
this.$store.dispatch("accountOne/fetchCountries");
await this.$store.dispatch("accountOne/basicInfo");
if (this.orderId) {
this.viewMyOrder(this.orderId);
} else {
this.$store.dispatch(
"meProductList/fetchOrderProductsList",
this.basicInfo.email
);
}
}
};
</script>
<style>
.myorders-orderview-tabs .v-slide-group__prev {
display: none !important;
}
</style>
<style src="./my_orders.scss" lang="scss" scoped />