index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  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, yppStatus, yppStatusEnum } from '../normal-order/normal-order';
  10. const orderInfo = ref<Api.delivery.deliveryOrder>();
  11. // const appStore = useAppStore();
  12. const TimeDown = ref<number>(0);
  13. const route = useRoute();
  14. async function open(orderNumber: string) {
  15. const { data, error } = await fetchGetNomalOrderInfo(orderNumber);
  16. if (!error) {
  17. orderInfo.value = data;
  18. if (orderInfo.value.hbLogisticStatus == orderStatusEnum.WAIT_PAY) {
  19. const createTime = dayjs(orderInfo.value.createTime);
  20. const currentTime = dayjs();
  21. const elapsed = currentTime.diff(createTime);
  22. const fifteenMinutesInMillis = 15 * 60 * 1000;
  23. TimeDown.value = fifteenMinutesInMillis - elapsed;
  24. }
  25. }
  26. }
  27. console.log(route.query.orderNumber);
  28. open(String(route.query.orderNumber));
  29. defineExpose({ open });
  30. // const isRefund = computed(() => {
  31. // const goodsData = orderInfo.value?.orderItems?.find(it => it.refundIngCount == 1);
  32. // return Boolean(goodsData);
  33. // });
  34. // const currentSteps = computed(() => {
  35. // switch (orderInfo.value?.hbOrderStatus) {
  36. // case orderStatusEnum.WAIT_PAY:
  37. // return 1;
  38. // case orderStatusEnum.ORDER_ACCEPT:
  39. // return 2;
  40. // case orderStatusEnum.ORDER_WAIT_DELIVE RY:
  41. // return 2;
  42. // case orderStatusEnum.WAIT_DELIVERY:
  43. // return 2;
  44. // case orderStatusEnum.ORDER_DELIVERY:
  45. // return 3;
  46. // case orderStatusEnum.ORDER_ARRIVE:
  47. // return 3;
  48. // case orderStatusEnum.ORDER_COMPLETE:
  49. // return 4;
  50. // default:
  51. // return 1;
  52. // }
  53. // });
  54. // function handleCopy(value: string | number | undefined) {
  55. // copyTextToClipboard(String(value));
  56. // // copyTextToClipboard(String(orderInfo.value?.orderNumber));
  57. // }
  58. </script>
  59. <template>
  60. <div>
  61. <div v-if="orderInfo" class="flex">
  62. <div class="mr-20px w-300px">
  63. <div class="mb-10px text-16px font-semibold">
  64. 统一状态:
  65. <template v-if="orderInfo.businessType != 'DYY'">
  66. {{ orderStatus[orderInfo.hbOrderStatus as keyof typeof orderStatus] }}
  67. </template>
  68. <template v-else>
  69. {{ yppStatus[orderInfo.yppDetail?.orderState as keyof typeof yppStatus] }}
  70. </template>
  71. </div>
  72. <NCard size="small" title="订单概览" :bordered="false">
  73. <div>订单编号:{{ orderInfo.orderNumber }}</div>
  74. <div>业务类型:{{ orderInfo.businessType }}</div>
  75. <div>
  76. 订单状态:
  77. <template v-if="orderInfo.businessType != 'DYY'">
  78. {{
  79. orderInfo.hbOrderStatus == 20 ||
  80. orderInfo.hbOrderStatus == 30 ||
  81. orderInfo.hbOrderStatus == 40 ||
  82. orderInfo.hbOrderStatus == 70
  83. ? '进行中'
  84. : orderStatus[orderInfo.hbOrderStatus as keyof typeof orderStatus]
  85. }}
  86. </template>
  87. <template v-else>
  88. {{ yppStatus[orderInfo.yppDetail?.orderState as keyof typeof yppStatus] }}
  89. </template>
  90. </div>
  91. <div>订单金额:{{ orderInfo.actualTotal }}</div>
  92. <div>订单创建:{{ orderInfo?.remarks || '暂无' }}</div>
  93. <div>创建人:用户自助下单</div>
  94. <div>备注:{{ orderInfo?.remarks || '暂无' }}</div>
  95. </NCard>
  96. <NCard size="small" class="mt-20px" title="客户信息" :bordered="false">
  97. <div>客户姓名:{{ orderInfo?.consigneeName || '---' }}</div>
  98. <div>客户手机号:{{ orderInfo?.consigneeMobile || '---' }}</div>
  99. <div>客户地址:{{ orderInfo?.consigneeAddress || '---' }}</div>
  100. <div>用户昵称:{{ orderInfo.userName || '---' }}</div>
  101. <div>用户电话:{{ orderInfo.consigneeMobile }}</div>
  102. <div>企业身份:{{ orderInfo.level || '---' }}</div>
  103. <div>会员等级:{{ orderInfo.level || '---' }}</div>
  104. <div>分销等级:{{ orderInfo.level || '---' }}</div>
  105. </NCard>
  106. <NCard size="small" class="mt-20px" title="支付信息" :bordered="false">
  107. <div>支付状态:{{ orderInfo.isPayed ? '已支付' : '未支付' }}</div>
  108. <div>支付金额:{{ orderInfo.actualTotal }}元</div>
  109. <div>
  110. 付款方式:{{
  111. orderInfo.hbOrderStatus == orderStatusEnum.WAIT_PAY ||
  112. orderInfo.hbOrderStatus == orderStatusEnum.ORDER_CANCEL
  113. ? '暂无'
  114. : '微信'
  115. }}
  116. </div>
  117. <div>支付时间:{{ orderInfo.payTime || '暂无' }}</div>
  118. <div>交易号:{{ orderInfo.outTradeNo || '---' }}</div>
  119. <div>退款记录:{{ orderInfo.record || '暂无' }}</div>
  120. </NCard>
  121. </div>
  122. <div class="flex-1">
  123. <div class="flex">
  124. <div class="mb-10px text-16px font-semibold">
  125. 业务状态:
  126. <template v-if="orderInfo.businessType == 'XSB'">
  127. {{ orderStatus[orderInfo.hbOrderStatus as keyof typeof orderStatus] }}
  128. </template>
  129. <template v-if="orderInfo.businessType == 'DYY'">
  130. {{ yppStatus[orderInfo.yppDetail?.orderState as keyof typeof yppStatus] }}
  131. </template>
  132. </div>
  133. <div class="mb-10px ml-20px text-16px font-semibold">第三方订单编号:{{ orderInfo.orderNumber }}</div>
  134. </div>
  135. <NCard size="small" title="业务信息" :bordered="false">
  136. <template v-if="orderInfo.businessType == 'XSB'">
  137. <div class="pb-20px font-semibold">01 商家信息</div>
  138. <div>门店名称:{{ orderInfo.shopName || '暂无' }}</div>
  139. <div>门店地址:{{ orderInfo.shopAddress || '暂无' }}</div>
  140. <div>联系电话:{{ orderInfo.tel || '暂无' }}</div>
  141. <div class="py-20px font-semibold">02 商品&费用</div>
  142. <NDataTable :columns="orderColumns" :data="orderInfo.orderItemList" :bordered="false" />
  143. <NTable :single-line="false">
  144. <NThead>
  145. <NTr>
  146. <NTh>费用类型</NTh>
  147. <NTh>金额/元</NTh>
  148. </NTr>
  149. </NThead>
  150. <NTbody>
  151. <NTr>
  152. <NTd>商品总额</NTd>
  153. <NTd>{{ orderInfo.total }}</NTd>
  154. </NTr>
  155. <NTr>
  156. <NTd>配送费(快递)</NTd>
  157. <NTd>{{ orderInfo.freightAmount }}</NTd>
  158. </NTr>
  159. <NTr>
  160. <NTd>积分</NTd>
  161. <NTd>-{{ (Number(orderInfo.offsetPoints) / 100).toFixed(2) || 0 }}</NTd>
  162. </NTr>
  163. <NTr>
  164. <NTd v-if="orderInfo.hbOrderStatus == orderStatusEnum.WAIT_PAY">需付款</NTd>
  165. <NTd
  166. v-if="
  167. orderInfo.hbOrderStatus != orderStatusEnum.WAIT_PAY &&
  168. orderInfo.hbOrderStatus != orderStatusEnum.ORDER_CANCEL
  169. "
  170. >
  171. 实际付款
  172. </NTd>
  173. <NTd v-if="orderInfo.hbOrderStatus == orderStatusEnum.ORDER_CANCEL">应付款</NTd>
  174. <NTd>{{ orderInfo.actualTotal }}</NTd>
  175. </NTr>
  176. </NTbody>
  177. </NTable>
  178. </template>
  179. <template v-if="orderInfo.businessType == 'DYY'">
  180. <div class="pb-20px font-semibold">01 影片与场次信息</div>
  181. <div>影片名称:{{ orderInfo.yppDetail?.movieName || '暂无' }}</div>
  182. <div class="flex items-center justify-between">
  183. <div>影院名称:{{ orderInfo.yppDetail?.cinemaName || '--' }}</div>
  184. <div>影厅:{{ orderInfo.yppDetail?.hallName || '--' }}</div>
  185. </div>
  186. <div class="flex items-center justify-between">
  187. <div>放映时间:{{ orderInfo.yppDetail?.sessionBeginTime || '--' }}</div>
  188. <div>结束时间:{{ orderInfo.yppDetail?.sessionEndTime || '--' }}</div>
  189. </div>
  190. <div class="flex items-center justify-between">
  191. <div>版本类型:{{ orderInfo.yppDetail?.movieVersion || '--' }}</div>
  192. <div>语言:{{ orderInfo.yppDetail?.movieVersion || '--' }}</div>
  193. </div>
  194. <div class="flex items-center justify-between">
  195. <div>座位信息: {{ orderInfo.yppDetail?.seatNames || '--' }}</div>
  196. <div>快速票:{{ orderInfo.yppDetail?.buyModel ? '是' : '否' }}</div>
  197. </div>
  198. <div class="pb-20px font-semibold">02 价格与结算信息</div>
  199. <div v-if="yppStatusEnum.WAIT_PAY == orderInfo.yppDetail?.orderState" class="font-semibold">
  200. 【客户需支付信息】
  201. </div>
  202. <div
  203. :class="[
  204. yppStatusEnum.WAIT_PAY != orderInfo.yppDetail?.orderState ? 'flex items-center justify-between' : ''
  205. ]"
  206. >
  207. <div v-if="yppStatusEnum.WAIT_PAY != orderInfo.yppDetail?.orderState">
  208. <div class="font-semibold">【客户已支付信息】</div>
  209. <div>市场原价(单价):¥{{ orderInfo.yppDetail?.originPrice || '--' }}</div>
  210. <div>原票价总价:¥{{ orderInfo.yppDetail?.totalUserPrice || '--' }}</div>
  211. <div>积分抵扣: ¥{{ (Number(orderInfo.offsetPoints) / 100).toFixed(2) || 0 }}</div>
  212. <div>客户实际支付:¥{{ orderInfo.actualTotal }}</div>
  213. </div>
  214. <template v-if="yppStatusEnum.WAIT_PAY != orderInfo.yppDetail?.orderState">
  215. <div>
  216. <div class="font-semibold">【预存款结算信息】</div>
  217. <div>企业扣款价:¥--</div>
  218. <div>结算价已退金额:¥--</div>
  219. <div>订单成本价:¥--</div>
  220. </div>
  221. </template>
  222. </div>
  223. <template
  224. v-if="
  225. [yppStatusEnum.SUCCESS, yppStatusEnum.REFUND_FAIL].includes(orderInfo.yppDetail?.orderState as number)
  226. "
  227. >
  228. <div class="pb-20px font-semibold">03 取票与退款信息</div>
  229. <div class="flex flex-wrap items-center">
  230. <div v-for="item in orderInfo.yppDetail?.seatList" :key="item" class="w30%">
  231. <div>座位:{{ item }}</div>
  232. <div>取票码:640085 | 661789</div>
  233. </div>
  234. </div>
  235. </template>
  236. </template>
  237. </NCard>
  238. </div>
  239. </div>
  240. </div>
  241. </template>
  242. <style scoped></style>