OrderDetailPage.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. <template>
  2. <q-page>
  3. <div class="row justify-center">
  4. <div class="col-7 q-pa-md">
  5. <div>
  6. <q-btn
  7. color="primary"
  8. @click="goPage('/my-orders')"
  9. glossy
  10. label="Return to order list"
  11. />
  12. </div>
  13. <div class="q-my-md col-7 text-h5 text-weight-bold">Product Info</div>
  14. <div class="row col-12 q-pa-md" style="background-color: #e7e7e7">
  15. <div class="col-3">Product Name</div>
  16. <div class="col-3">Package Category</div>
  17. <div class="col-2">Total Price</div>
  18. <div class="col-2">Payment Status</div>
  19. <div class="col-2">Start Time</div>
  20. </div>
  21. <div class="row col-12 q-pa-md" style="border: 1px solid gray">
  22. <div class="col-3">
  23. <a :href="frontendBase + '/product-detail/' + skuGroupId">{{
  24. productName
  25. }}</a>
  26. </div>
  27. <div class="col-3">{{ packageCategory }}</div>
  28. <div class="col-2">CNY:{{ totalPrice }}</div>
  29. <div class="col-2">{{ orderStatus }}</div>
  30. <div class="col-2">{{ selectedDate }}</div>
  31. </div>
  32. </div>
  33. <div class="row col-7 q-pa-md">
  34. <div class="text-h5 text-weight-bold">Passenger Info</div>
  35. <div v-if="passengerInfo != null && passengerInfo.length > 0">
  36. <q-table
  37. ref="passengerInfoTableRef"
  38. :rows="passengerInfo"
  39. :columns="columns"
  40. :separator="'cell'"
  41. >
  42. <template v-slot:body-cell-gender="props">
  43. <q-td :props="props">
  44. {{ props.row.gender == 1 ? "Male" : "Female" }}
  45. </q-td>
  46. </template>
  47. </q-table>
  48. </div>
  49. </div>
  50. <div class="row col-7 q-pa-md">
  51. <div class="text-h5 text-weight-bold">Contact Info</div>
  52. <div class="row col-12 q-pa-md" style="background-color: #e7e7e7">
  53. <div class="col-3">Contact Person</div>
  54. <div class="col-3">Email</div>
  55. <div class="col-3">Phone</div>
  56. <div class="col-3">Address</div>
  57. </div>
  58. <div class="row col-12" style="border: 1px solid gray">
  59. <div class="col-3">{{ contactInfo.name }}</div>
  60. <div class="col-3">{{ contactInfo.email }}</div>
  61. <div class="col-3">{{ contactInfo.phone }}</div>
  62. <div class="col-3">{{ contactInfo.address }}</div>
  63. </div>
  64. </div>
  65. </div>
  66. </q-page>
  67. </template>
  68. <script>
  69. import { ref, onMounted, getCurrentInstance, reactive } from "vue";
  70. import { api } from "boot/axios";
  71. import { useQuasar } from "quasar";
  72. import { useRoute } from "vue-router";
  73. export default {
  74. name: "OrderDetailPage",
  75. setup() {
  76. const instance = getCurrentInstance();
  77. const app = instance.appContext.app;
  78. const gp = app.config.globalProperties;
  79. const $q = useQuasar();
  80. const route = useRoute();
  81. const frontendBase = ref("");
  82. const orderDetail = ref({});
  83. const productName = ref("");
  84. const packageCategory = ref("");
  85. const selectedDate = ref("");
  86. const contactInfo = ref({ address: "", email: "", name: "", phone: "" });
  87. const passengerInfo = ref([]);
  88. const totalPrice = ref(0);
  89. const orderStatus = ref("");
  90. const skuGroupId = ref("");
  91. function whoami() {
  92. api
  93. .get("/api/v1/user/whoami")
  94. .then(function (response) {
  95. console.log("current user in user page: " + response.data);
  96. })
  97. .catch(function (error) {
  98. console.log("currently not logged in setup: " + error);
  99. gp.goPage("/");
  100. });
  101. }
  102. function loadOrderDetail(orderId) {
  103. api
  104. .get("/api/v1/order/orderDetail/" + orderId)
  105. .then((response) => {
  106. console.log("order detail: ");
  107. console.log(response.data.data);
  108. orderDetail.value = response.data.data;
  109. productName.value = orderDetail.value.meta.productInfo.productName;
  110. packageCategory.value =
  111. orderDetail.value.meta.productInfo.packageCategory;
  112. selectedDate.value = orderDetail.value.meta.productInfo.selectedDate;
  113. contactInfo.value = orderDetail.value.meta.contactInfo;
  114. totalPrice.value = orderDetail.value.price;
  115. orderStatus.value = orderDetail.value.status;
  116. passengerInfo.value = orderDetail.value.meta.passengerInfo;
  117. console.log("passengerInfo.value");
  118. console.log(passengerInfo.value);
  119. skuGroupId.value =
  120. orderDetail.value.meta.productInfo.productSkuGroupId;
  121. })
  122. .catch((e) => {
  123. console.log("get order detail err");
  124. console.log(e);
  125. });
  126. }
  127. function loadFrontendBase() {
  128. api
  129. .get("/api/public/service")
  130. .then(function (response) {
  131. console.log("base front url: " + response.data);
  132. frontendBase.value = response.data;
  133. })
  134. .catch(function (error) {
  135. console.log("currently not logged in setup: " + error);
  136. gp.$goPage("/");
  137. });
  138. }
  139. onMounted(() => {
  140. whoami();
  141. loadOrderDetail(route.params.orderId);
  142. loadFrontendBase();
  143. });
  144. return {
  145. frontendBase,
  146. skuGroupId,
  147. productName,
  148. packageCategory,
  149. totalPrice,
  150. orderStatus,
  151. selectedDate,
  152. passengerInfo,
  153. contactInfo,
  154. columns: [
  155. {
  156. name: "surName",
  157. required: true,
  158. label: "SurName",
  159. align: "left",
  160. field: "surName",
  161. sortable: false,
  162. style:
  163. "max-width: 100px;text-overflow: ellipsis !important;white-space: nowrap !important;overflow: hidden !important;",
  164. },
  165. {
  166. name: "givenName",
  167. required: true,
  168. label: "Given Name",
  169. align: "left",
  170. field: "givenName",
  171. sortable: false,
  172. style:
  173. "max-width: 100px;text-overflow: ellipsis !important;white-space: nowrap !important;overflow: hidden !important;",
  174. },
  175. {
  176. name: "nationality",
  177. required: true,
  178. label: "Nationality",
  179. align: "left",
  180. field: "nationality",
  181. sortable: false,
  182. style:
  183. "max-width: 100px;text-overflow: ellipsis !important;white-space: nowrap !important;overflow: hidden !important;",
  184. },
  185. {
  186. name: "birthday",
  187. required: true,
  188. label: "Birthday",
  189. align: "left",
  190. field: "birthday",
  191. sortable: false,
  192. style:
  193. "max-width: 100px;text-overflow: ellipsis !important;white-space: nowrap !important;overflow: hidden !important;",
  194. },
  195. {
  196. name: "gender",
  197. required: true,
  198. label: "Gender",
  199. align: "left",
  200. field: "gender",
  201. sortable: false,
  202. style:
  203. "max-width: 100px;text-overflow: ellipsis !important;white-space: nowrap !important;overflow: hidden !important;",
  204. },
  205. {
  206. name: "passportNo",
  207. required: true,
  208. label: "Passport No.",
  209. align: "left",
  210. field: "passportNo",
  211. sortable: false,
  212. style:
  213. "max-width: 100px;text-overflow: ellipsis !important;white-space: nowrap !important;overflow: hidden !important;",
  214. },
  215. {
  216. name: "passportExpireDate",
  217. required: true,
  218. label: "Passport Expiry Date",
  219. align: "left",
  220. field: "passportExpireDate",
  221. sortable: false,
  222. style:
  223. "max-width: 100px;text-overflow: ellipsis !important;white-space: nowrap !important;overflow: hidden !important;",
  224. },
  225. ],
  226. };
  227. },
  228. };
  229. </script>