|
@@ -0,0 +1,224 @@
|
|
|
+<template>
|
|
|
+ <q-page>
|
|
|
+ <div class="row justify-center">
|
|
|
+ <div class="col-7 q-pa-md">
|
|
|
+ <div>
|
|
|
+ <q-btn
|
|
|
+ color="primary"
|
|
|
+ @click="goPage('/my-orders')"
|
|
|
+ glossy
|
|
|
+ label="Return to order list"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div class="q-my-md col-7 text-h5 text-weight-bold">Product Info</div>
|
|
|
+
|
|
|
+ <div class="row col-12 q-pa-md" style="background-color: #e7e7e7">
|
|
|
+ <div class="col-3">Product Name</div>
|
|
|
+ <div class="col-3">Package Category</div>
|
|
|
+ <div class="col-2">Total Price</div>
|
|
|
+ <div class="col-2">Payment Status</div>
|
|
|
+ <div class="col-2">Start Time</div>
|
|
|
+ </div>
|
|
|
+ <div class="row col-12 q-pa-md" style="border: 1px solid gray">
|
|
|
+ <div class="col-3">{{ productName }}</div>
|
|
|
+ <div class="col-3">{{ packageCategory }}</div>
|
|
|
+ <div class="col-2">CNY:{{ totalPrice }}</div>
|
|
|
+ <div class="col-2">{{ orderStatus }}</div>
|
|
|
+ <div class="col-2">{{ selectedDate }}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="row col-7 q-pa-md">
|
|
|
+ <div class="text-h5 text-weight-bold">Passenger Info</div>
|
|
|
+ <div v-if="passengerInfo != null && passengerInfo.length > 0">
|
|
|
+ <q-table
|
|
|
+ ref="passengerInfoTableRef"
|
|
|
+ :rows="passengerInfo"
|
|
|
+ :columns="columns"
|
|
|
+ :separator="'cell'"
|
|
|
+ >
|
|
|
+ <template v-slot:body-cell-gender="props">
|
|
|
+ <q-td :props="props">
|
|
|
+ {{ props.row.gender == 1 ? "Male" : "Female" }}
|
|
|
+ </q-td>
|
|
|
+ </template>
|
|
|
+ </q-table>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="row col-7 q-pa-md">
|
|
|
+ <div class="text-h5 text-weight-bold">Contact Info</div>
|
|
|
+ <div class="row col-12 q-pa-md" style="background-color: #e7e7e7">
|
|
|
+ <div class="col-3">Contact Person</div>
|
|
|
+ <div class="col-3">Email</div>
|
|
|
+ <div class="col-3">Phone</div>
|
|
|
+ <div class="col-3">Address</div>
|
|
|
+ </div>
|
|
|
+ <div class="row col-12" style="border: 1px solid gray">
|
|
|
+ <div class="col-3">{{ contactInfo.name }}</div>
|
|
|
+ <div class="col-3">{{ contactInfo.email }}</div>
|
|
|
+ <div class="col-3">{{ contactInfo.phone }}</div>
|
|
|
+ <div class="col-3">{{ contactInfo.address }}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </q-page>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import { ref, onMounted, getCurrentInstance, reactive } from "vue";
|
|
|
+import { api } from "boot/axios";
|
|
|
+import { useQuasar } from "quasar";
|
|
|
+import { useRoute } from "vue-router";
|
|
|
+export default {
|
|
|
+ name: "OrderDetailPage",
|
|
|
+ setup() {
|
|
|
+ const instance = getCurrentInstance();
|
|
|
+ const app = instance.appContext.app;
|
|
|
+ const gp = app.config.globalProperties;
|
|
|
+ const $q = useQuasar();
|
|
|
+ const route = useRoute();
|
|
|
+
|
|
|
+ const frontendBase = ref("");
|
|
|
+ const orderDetail = ref({});
|
|
|
+ const productName = ref("");
|
|
|
+ const packageCategory = ref("");
|
|
|
+ const selectedDate = ref("");
|
|
|
+ const contactInfo = ref({ address: "", email: "", name: "", phone: "" });
|
|
|
+ const passengerInfo = ref([]);
|
|
|
+ const totalPrice = ref(0);
|
|
|
+ const orderStatus = ref("");
|
|
|
+ const skuGroupId = ref("");
|
|
|
+
|
|
|
+ function whoami() {
|
|
|
+ api
|
|
|
+ .get("/api/v1/user/whoami")
|
|
|
+ .then(function (response) {
|
|
|
+ console.log("current user in user page: " + response.data);
|
|
|
+ })
|
|
|
+ .catch(function (error) {
|
|
|
+ console.log("currently not logged in setup: " + error);
|
|
|
+ gp.goPage("/");
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ function loadOrderDetail(orderId) {
|
|
|
+ api
|
|
|
+ .get("/api/v1/order/orderDetail/" + orderId)
|
|
|
+ .then((response) => {
|
|
|
+ console.log("order detail: ");
|
|
|
+ console.log(response.data.data);
|
|
|
+ orderDetail.value = response.data.data;
|
|
|
+
|
|
|
+ productName.value = orderDetail.value.meta.productInfo.productName;
|
|
|
+ packageCategory.value =
|
|
|
+ orderDetail.value.meta.productInfo.packageCategory;
|
|
|
+ selectedDate.value = orderDetail.value.meta.productInfo.selectedDate;
|
|
|
+
|
|
|
+ contactInfo.value = orderDetail.value.meta.contactInfo;
|
|
|
+ totalPrice.value = orderDetail.value.price;
|
|
|
+
|
|
|
+ orderStatus.value = orderDetail.value.status;
|
|
|
+
|
|
|
+ passengerInfo.value = orderDetail.value.meta.passengerInfo;
|
|
|
+
|
|
|
+ console.log("passengerInfo.value");
|
|
|
+ console.log(passengerInfo.value);
|
|
|
+
|
|
|
+ skuGroupId.value =
|
|
|
+ orderDetail.value.meta.productInfo.productSkuGroupId;
|
|
|
+ })
|
|
|
+ .catch((e) => {
|
|
|
+ console.log("get order detail err");
|
|
|
+ console.log(e);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ onMounted(() => {
|
|
|
+ whoami();
|
|
|
+ loadOrderDetail(route.params.orderId);
|
|
|
+ });
|
|
|
+
|
|
|
+ return {
|
|
|
+ frontendBase,
|
|
|
+ productName,
|
|
|
+ packageCategory,
|
|
|
+ totalPrice,
|
|
|
+ orderStatus,
|
|
|
+ selectedDate,
|
|
|
+ passengerInfo,
|
|
|
+ contactInfo,
|
|
|
+ columns: [
|
|
|
+ {
|
|
|
+ name: "surName",
|
|
|
+ required: true,
|
|
|
+ label: "SurName",
|
|
|
+ align: "left",
|
|
|
+ field: "surName",
|
|
|
+ sortable: false,
|
|
|
+ style:
|
|
|
+ "max-width: 100px;text-overflow: ellipsis !important;white-space: nowrap !important;overflow: hidden !important;",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "givenName",
|
|
|
+ required: true,
|
|
|
+ label: "Given Name",
|
|
|
+ align: "left",
|
|
|
+ field: "givenName",
|
|
|
+ sortable: false,
|
|
|
+ style:
|
|
|
+ "max-width: 100px;text-overflow: ellipsis !important;white-space: nowrap !important;overflow: hidden !important;",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "nationality",
|
|
|
+ required: true,
|
|
|
+ label: "Nationality",
|
|
|
+ align: "left",
|
|
|
+ field: "nationality",
|
|
|
+ sortable: false,
|
|
|
+ style:
|
|
|
+ "max-width: 100px;text-overflow: ellipsis !important;white-space: nowrap !important;overflow: hidden !important;",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "birthday",
|
|
|
+ required: true,
|
|
|
+ label: "Birthday",
|
|
|
+ align: "left",
|
|
|
+ field: "birthday",
|
|
|
+ sortable: false,
|
|
|
+ style:
|
|
|
+ "max-width: 100px;text-overflow: ellipsis !important;white-space: nowrap !important;overflow: hidden !important;",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "gender",
|
|
|
+ required: true,
|
|
|
+ label: "Gender",
|
|
|
+ align: "left",
|
|
|
+ field: "gender",
|
|
|
+ sortable: false,
|
|
|
+ style:
|
|
|
+ "max-width: 100px;text-overflow: ellipsis !important;white-space: nowrap !important;overflow: hidden !important;",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "passportNo",
|
|
|
+ required: true,
|
|
|
+ label: "Passport No.",
|
|
|
+ align: "left",
|
|
|
+ field: "passportNo",
|
|
|
+ sortable: false,
|
|
|
+ style:
|
|
|
+ "max-width: 100px;text-overflow: ellipsis !important;white-space: nowrap !important;overflow: hidden !important;",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "passportExpireDate",
|
|
|
+ required: true,
|
|
|
+ label: "Passport Expiry Date",
|
|
|
+ align: "left",
|
|
|
+ field: "passportExpireDate",
|
|
|
+ sortable: false,
|
|
|
+ style:
|
|
|
+ "max-width: 100px;text-overflow: ellipsis !important;white-space: nowrap !important;overflow: hidden !important;",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ };
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|