warehouse_detail.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. <template>
  2. <Theme>
  3. <view class="wrap">
  4. <Navbar title="订单详情" border autoBack fixed @leftClick="leftClick">
  5. <template #right>
  6. <navMenu :options="{ icon: 'icon-home', text: '主页' }" />
  7. </template>
  8. </Navbar>
  9. <view class="content">
  10. <parcelList :item="detail" />
  11. <view class="order_info">
  12. <view class="text_box">
  13. <trans class="title" _t="体积"></trans>
  14. <text>{{ detail?.volume }}m³</text>
  15. </view>
  16. <view class="text_box">
  17. <trans class="title" _t="重量"></trans>
  18. <text>{{ detail?.weight }}kg</text>
  19. </view>
  20. <view class="term_box" v-if="detail.epdate">
  21. <trans class="title" _t="仓储期"></trans>
  22. <view class="term_value">
  23. <text
  24. v-if="getExpireDaysFromTimestamp(detail.epdate)"
  25. :class="
  26. getExpireDaysFromTimestamp(detail.epdate) < 10 ? 'red' : ''
  27. "
  28. >
  29. {{ getExpireDaysFromTimestamp(detail.epdate) }}
  30. <trans _t="天" />
  31. </text>
  32. <trans _t="已过期" v-else />
  33. <!-- <view @click="openRenewal">续期</view> -->
  34. </view>
  35. </view>
  36. <view class="dashed"></view>
  37. <view class="text_box">
  38. <trans class="title" _t="实付"></trans>
  39. <view class="price_box">
  40. <text class="currency">{{ symbol.symbol }}</text>
  41. <rich-text
  42. class="texts"
  43. :nodes="Moneyhtml(orderDetiail?.amount)"
  44. ></rich-text>
  45. </view>
  46. </view>
  47. <view class="text_box">
  48. <trans class="title" _t="支付方式"></trans>
  49. <text>{{ orderDetiail?.payType }}</text>
  50. </view>
  51. <view class="text_box">
  52. <trans class="title" _t="订单状态"></trans>
  53. <text>{{ orderDetiail?.status_txt }}</text>
  54. </view>
  55. <view class="text_box">
  56. <trans class="title" _t="平台订单号"></trans>
  57. <up-copy
  58. :content="orderDetiail?.orderNo"
  59. :notice="t('复制成功')"
  60. class="right_value"
  61. >
  62. <up-icon name="file-text" size="16px"></up-icon>
  63. <text>{{ orderDetiail?.orderNo }}</text>
  64. </up-copy>
  65. </view>
  66. <view class="text_box">
  67. <trans class="title" _t="订单时间"></trans>
  68. <text>{{ useGlobal().$format(orderDetiail?.payDate) }}</text>
  69. </view>
  70. <view class="text_box">
  71. <trans class="title" _t="入库时间"></trans>
  72. <text>{{ useGlobal().$format(orderDetiail?.indate) }}</text>
  73. </view>
  74. <view class="dashed"></view>
  75. <view class="check_box" v-if="orderDetiail.checkStatus > 0">
  76. <trans class="title" _t="专业质检"></trans>
  77. <image-grid :images="orderDetiail?.checkImg" class="checkImg" />
  78. <view class="checkRemark">
  79. <text>{{ orderDetiail?.checkRemark }}</text>
  80. </view>
  81. </view>
  82. <view class="popup_cancle btn_pack" @click="toPack">
  83. <trans class="menu_text" _t="打包" />
  84. </view>
  85. <view class="popup_cancle" @click="onClose">
  86. <trans class="menu_text" _t="返回" />
  87. </view>
  88. </view>
  89. </view>
  90. </view>
  91. <renewalModel ref="renewal" />
  92. </Theme>
  93. </template>
  94. <script setup>
  95. import Navbar from "@/components/navbar";
  96. import navMenu from "@/components/nav_menu";
  97. import { SHOP_STOCKS_INFO } from "@/api";
  98. import { ref, nextTick, computed } from "vue";
  99. import { onLoad } from "@dcloudio/uni-app";
  100. import parcelList from "./components/parcel_list";
  101. import { t } from "@/locale";
  102. import {
  103. Moneyhtml,
  104. useGlobal,
  105. Toast,
  106. getExpireDaysFromTimestamp,
  107. } from "@/utils";
  108. import { useSystemStore, useTabbarStore } from "@/store";
  109. import ImageGrid from "@/components/ImageGrid.vue";
  110. import renewalModel from "./components/renewalModel.vue";
  111. const useSystem = useSystemStore();
  112. const symbol = computed(() => useSystem.getSymbol);
  113. const orderid = ref("");
  114. const detail = ref({});
  115. const orderDetiail = ref({});
  116. const renewal = ref(null);
  117. const useTabbar = useTabbarStore();
  118. onLoad((options) => {
  119. orderid.value = options.id;
  120. nextTick(() => {
  121. getDetail();
  122. });
  123. });
  124. const openRenewal = () => {
  125. renewal.value.open();
  126. };
  127. const getDetail = async () => {
  128. try {
  129. const res = await SHOP_STOCKS_INFO(orderid.value);
  130. detail.value = res.data.info;
  131. orderDetiail.value = res.data.order;
  132. } catch (error) {}
  133. };
  134. const onClose = () => {
  135. uni.navigateBack();
  136. };
  137. const toPack = () => {
  138. uni.navigateTo({ url: `/pages/dashboard/pack?ids=${orderid.value}` });
  139. };
  140. const leftClick = () => {
  141. uni.switchTab({ url: "/pages/order/index" });
  142. useTabbar.getPageCur("order");
  143. };
  144. </script>
  145. <style lang="less" scoped>
  146. @import url("@/style.less");
  147. .wrap {
  148. min-height: 100vh;
  149. background-color: var(--bg);
  150. .content {
  151. padding: 24rpx;
  152. .order_info {
  153. background-color: var(--light);
  154. border-radius: 16rpx;
  155. padding: 0 24rpx 24rpx;
  156. // .ver();
  157. .term_box {
  158. .flex_position(space-between);
  159. .size(24rpx);
  160. padding: 10rpx 20rpx;
  161. border: var(--bor);
  162. border-radius: 16rpx;
  163. color: var(--text-01);
  164. .title {
  165. }
  166. .term_value {
  167. .ver();
  168. color: var(--black);
  169. .red {
  170. color: var(--red);
  171. }
  172. view {
  173. font-weight: 500;
  174. .size(24rpx);
  175. cursor: pointer;
  176. padding: 5rpx 20rpx;
  177. margin-left: 10rpx;
  178. border: 1rpx solid var(--black);
  179. border-radius: 14rpx;
  180. }
  181. }
  182. }
  183. .text_box {
  184. .flex_position(space-between, flex-end);
  185. margin: 8rpx 0;
  186. .size(24rpx);
  187. .price_box {
  188. .flex_position(end, flex-end);
  189. color: var(--black);
  190. .size(28rpx);
  191. .currency {
  192. margin-right: 10rpx;
  193. }
  194. }
  195. .title {
  196. color: var(--text-01);
  197. }
  198. .currency,
  199. .texts {
  200. color: var(--red);
  201. .size(28rpx);
  202. font-weight: 500;
  203. }
  204. .right_value {
  205. .flex();
  206. }
  207. }
  208. .check_box {
  209. background-color: var(--bor-color);
  210. padding: 20rpx;
  211. border-radius: 20rpx;
  212. .checkImg {
  213. margin: 20rpx 0;
  214. }
  215. .checkRemark {
  216. .size(24rpx);
  217. font-weight: 500;
  218. margin-left: 10rpx;
  219. }
  220. }
  221. .popup_cancle {
  222. &.btn_pack {
  223. background-color: var(--black);
  224. color: var(--light);
  225. }
  226. background-color: var(--white);
  227. color: var(--black);
  228. .flex_center();
  229. border-radius: 20rpx;
  230. margin-top: 15rpx;
  231. padding: 28rpx 0;
  232. border: 1px solid var(--black);
  233. }
  234. }
  235. }
  236. }
  237. </style>