index.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <script setup lang="ts">
  2. import { ref } from 'vue';
  3. import { useRoute } from 'vue-router';
  4. // import { NFlex } from 'naive-ui';
  5. import dayjs from 'dayjs';
  6. import { fetchGetNomalOrderInfo } from '@/service/api/order-manage/normal-order';
  7. // import { useAppStore } from '@/store/modules/app';
  8. // import { copyTextToClipboard } from '@/utils/zt';
  9. import { orderColumns, orderStatus, orderStatusEnum } from '../normal-order/normal-order';
  10. import DeliveryModal from '../normal-order/component/delivery-modal.vue';
  11. const orderInfo = ref<Api.delivery.deliveryOrder>();
  12. // const appStore = useAppStore();
  13. const TimeDown = ref<number>(0);
  14. // const ShipmentRef = useTemplateRef('Shipment');
  15. const emit = defineEmits<{
  16. (e: 'finish'): void;
  17. }>();
  18. const route = useRoute();
  19. async function open(orderNumber: string) {
  20. const { data, error } = await fetchGetNomalOrderInfo(orderNumber);
  21. if (!error) {
  22. orderInfo.value = data;
  23. if (orderInfo.value.hbLogisticStatus == orderStatusEnum.WAIT_PAY) {
  24. const createTime = dayjs(orderInfo.value.createTime);
  25. const currentTime = dayjs();
  26. const elapsed = currentTime.diff(createTime);
  27. const fifteenMinutesInMillis = 15 * 60 * 1000;
  28. TimeDown.value = fifteenMinutesInMillis - elapsed;
  29. }
  30. }
  31. }
  32. console.log(route.query.orderNumber);
  33. open(String(route.query.orderNumber));
  34. defineExpose({ open });
  35. // const isRefund = computed(() => {
  36. // const goodsData = orderInfo.value?.orderItems?.find(it => it.refundIngCount == 1);
  37. // return Boolean(goodsData);
  38. // });
  39. // const currentSteps = computed(() => {
  40. // switch (orderInfo.value?.hbOrderStatus) {
  41. // case orderStatusEnum.WAIT_PAY:
  42. // return 1;
  43. // case orderStatusEnum.ORDER_ACCEPT:
  44. // return 2;
  45. // case orderStatusEnum.ORDER_WAIT_DELIVERY:
  46. // return 2;
  47. // case orderStatusEnum.WAIT_DELIVERY:
  48. // return 2;
  49. // case orderStatusEnum.ORDER_DELIVERY:
  50. // return 3;
  51. // case orderStatusEnum.ORDER_ARRIVE:
  52. // return 3;
  53. // case orderStatusEnum.ORDER_COMPLETE:
  54. // return 4;
  55. // default:
  56. // return 1;
  57. // }
  58. // });
  59. // function handleCopy(value: string | number | undefined) {
  60. // copyTextToClipboard(String(value));
  61. // // copyTextToClipboard(String(orderInfo.value?.orderNumber));
  62. // }
  63. </script>
  64. <template>
  65. <div>
  66. <div v-if="orderInfo" class="flex">
  67. <div class="mr-20px w-300px">
  68. <div class="mb-10px text-16px font-semibold">
  69. 统一状态:
  70. {{ orderStatus[orderInfo.hbOrderStatus as keyof typeof orderStatus] }}
  71. </div>
  72. <NCard size="small" title="订单概览" :bordered="false">
  73. <div>订单编号:{{ orderInfo.orderNumber }}</div>
  74. <div>业务类型:{{ orderInfo.businessType }}</div>
  75. <div>
  76. 订单状态:
  77. {{
  78. orderInfo.hbOrderStatus == 20 ||
  79. orderInfo.hbOrderStatus == 30 ||
  80. orderInfo.hbOrderStatus == 40 ||
  81. orderInfo.hbOrderStatus == 70
  82. ? '进行中'
  83. : orderStatus[orderInfo.hbOrderStatus as keyof typeof orderStatus]
  84. }}
  85. </div>
  86. <div>订单金额:{{ orderInfo.actualTotal }}</div>
  87. <div>订单创建:{{ orderInfo?.remarks || '暂无' }}</div>
  88. <div>创建人:用户自助下单</div>
  89. <div>备注:{{ orderInfo?.remarks || '暂无' }}</div>
  90. </NCard>
  91. <NCard size="small" class="mt-20px" title="客户信息" :bordered="false">
  92. <div>客户姓名:{{ orderInfo?.consigneeName || '---' }}</div>
  93. <div>客户手机号:{{ orderInfo?.consigneeMobile || '---' }}</div>
  94. <div>客户地址:{{ orderInfo?.consigneeAddress || '---' }}</div>
  95. <div>用户昵称:{{ orderInfo.userName || '---' }}</div>
  96. <div>用户电话:{{ orderInfo.consigneeMobile }}</div>
  97. <div>企业身份:{{ orderInfo.level || '---' }}</div>
  98. <div>会员等级:{{ orderInfo.level || '---' }}</div>
  99. <div>分销等级:{{ orderInfo.level || '---' }}</div>
  100. </NCard>
  101. <NCard size="small" class="mt-20px" title="支付信息" :bordered="false">
  102. <div>支付状态:{{ orderInfo.isPayed ? '已支付' : '未支付' }}</div>
  103. <div>支付金额:{{ orderInfo.actualTotal }}元</div>
  104. <div>
  105. 付款方式:{{
  106. orderInfo.hbOrderStatus == orderStatusEnum.WAIT_PAY ||
  107. orderInfo.hbOrderStatus == orderStatusEnum.ORDER_CANCEL
  108. ? '暂无'
  109. : '微信'
  110. }}
  111. </div>
  112. <div>支付时间:{{ orderInfo.payTime || '暂无' }}</div>
  113. <div>交易号:{{ orderInfo.outTradeNo || '---' }}</div>
  114. <div>退款记录:{{ orderInfo.record || '暂无' }}</div>
  115. </NCard>
  116. </div>
  117. <div class="flex-1">
  118. <div class="flex">
  119. <div class="mb-10px text-16px font-semibold">
  120. 业务状态:
  121. {{ orderStatus[orderInfo.hbOrderStatus as keyof typeof orderStatus] }}
  122. </div>
  123. <div class="mb-10px ml-20px text-16px font-semibold">第三方订单编号:{{ orderInfo.orderNumber }}</div>
  124. </div>
  125. <NCard size="small" title="业务信息" :bordered="false">
  126. <div class="pb-20px font-semibold">01 商家信息</div>
  127. <div>门店名称:{{ orderInfo.shopName || '暂无' }}</div>
  128. <div>门店地址:{{ orderInfo.shopAddress || '暂无' }}</div>
  129. <div>联系电话:{{ orderInfo.tel || '暂无' }}</div>
  130. <div class="py-20px font-semibold">02 商品&费用</div>
  131. <NDataTable :columns="orderColumns" :data="orderInfo.orderItemList" :bordered="false" />
  132. <NTable :single-line="false">
  133. <NThead>
  134. <NTr>
  135. <NTh>费用类型</NTh>
  136. <NTh>金额/元</NTh>
  137. </NTr>
  138. </NThead>
  139. <NTbody>
  140. <NTr>
  141. <NTd>商品总额</NTd>
  142. <NTd>{{ orderInfo.total }}</NTd>
  143. </NTr>
  144. <NTr>
  145. <NTd>配送费(快递)</NTd>
  146. <NTd>{{ orderInfo.freightAmount }}</NTd>
  147. </NTr>
  148. <NTr>
  149. <NTd>积分</NTd>
  150. <NTd>-{{ (Number(orderInfo.offsetPoints) / 100).toFixed(2) || 0 }}</NTd>
  151. </NTr>
  152. <NTr>
  153. <NTd v-if="orderInfo.hbOrderStatus == orderStatusEnum.WAIT_PAY">需付款</NTd>
  154. <NTd
  155. v-if="
  156. orderInfo.hbOrderStatus != orderStatusEnum.WAIT_PAY &&
  157. orderInfo.hbOrderStatus != orderStatusEnum.ORDER_CANCEL
  158. "
  159. >
  160. 实际付款
  161. </NTd>
  162. <NTd v-if="orderInfo.hbOrderStatus == orderStatusEnum.ORDER_CANCEL">应付款</NTd>
  163. <NTd>{{ orderInfo.actualTotal }}</NTd>
  164. </NTr>
  165. </NTbody>
  166. </NTable>
  167. </NCard>
  168. </div>
  169. </div>
  170. <DeliveryModal ref="Shipment" @finish="emit('finish')"></DeliveryModal>
  171. </div>
  172. </template>
  173. <style scoped></style>