detail.vue 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. <template>
  2. <div class="app-container">
  3. <!-- 订单信息 -->
  4. <div class="info">
  5. <div class="info-title">订单信息</div>
  6. <div class="info-item">
  7. <div class="info-item-content">
  8. <div class="info-item-content-one">
  9. <div class="title">订单编号:</div>
  10. <div class="txt">{{ info.orderId }}</div>
  11. </div>
  12. <div class="info-item-content-one">
  13. <div class="title">订单类型:</div>
  14. <div class="txt">经销商订单</div>
  15. </div>
  16. </div>
  17. <div class="info-item-content">
  18. <div class="info-item-content-one">
  19. <div class="title">下单时间:</div>
  20. <div class="txt">{{ parseTime(info.createdTime) }}</div>
  21. </div>
  22. </div>
  23. </div>
  24. </div>
  25. <!-- 卖家信息 -->
  26. <div class="info">
  27. <div class="info-title">买家信息</div>
  28. <div class="info-item">
  29. <div class="info-item-content">
  30. <div class="info-item-content-one">
  31. <div class="title">经销商:</div>
  32. <div class="txt">{{ info.channel && info.channel.name }}</div>
  33. </div>
  34. <div class="info-item-content-one">
  35. <div class="title">收货人:</div>
  36. <div class="txt">{{ info.receiver || "--" }}</div>
  37. </div>
  38. <div class="info-item-content-one">
  39. <div class="title">联系电话:</div>
  40. <div class="txt">{{ info.tel || "--" }}</div>
  41. </div>
  42. </div>
  43. <div class="info-item-content">
  44. <div class="info-item-content-one">
  45. <div class="title">收货地址:</div>
  46. <div class="">
  47. {{
  48. `${info.province || "--"}${info.city || "--"}${
  49. info.area || "--"
  50. }${info.address || "--"}`
  51. }}
  52. </div>
  53. </div>
  54. </div>
  55. </div>
  56. </div>
  57. <!-- 订单状态 -->
  58. <div class="info">
  59. <div class="info-title">订单状态</div>
  60. <div class="info-item">
  61. <div class="info-item-content">
  62. <div class="info-item-content-one">
  63. <div class="title">订单状态:</div>
  64. <div class="txt" v-if="status.value == 2">已发货</div>
  65. <div class="txt" v-else>{{ status.desc || "--" }}</div>
  66. </div>
  67. <div class="info-item-content-one" v-if="status.value === 2">
  68. <div class="title">发货时间:</div>
  69. <div class="txt">{{ parseTime(info.deliveryTime) || "--" }}</div>
  70. </div>
  71. </div>
  72. <div class="info-item-content">
  73. <el-button
  74. v-if="status.value === 1"
  75. v-hasPermi="['business:ticket:on']"
  76. type="primary"
  77. @click="toGoods()"
  78. >发货</el-button
  79. >
  80. <div class="info-item-content-one" v-if="status.value === 2">
  81. <div class="title">快递公司:</div>
  82. <div class="txt">{{ delivery.companyName || "--" }}</div>
  83. </div>
  84. <div class="info-item-content-one" v-if="status.value === 2">
  85. <div class="title">快递单号:</div>
  86. <div class="txt">{{ info.deliveryFlowId || "--" }}</div>
  87. </div>
  88. </div>
  89. </div>
  90. </div>
  91. <!-- 商品信息 -->
  92. <div class="info">
  93. <div class="info-title">商品信息</div>
  94. <div class="info-table">
  95. <el-table :data="list">
  96. <el-table-column label="商品信息">
  97. <div slot-scope="{ row }" class="flex">
  98. <el-image
  99. style="width: 100px; height: 100px"
  100. :src="row.picUrl"
  101. :preview-src-list="[row.picUrl]"
  102. />
  103. <div class="txt">{{ row.title }}</div>
  104. </div>
  105. </el-table-column>
  106. <el-table-column label="单价(元)">
  107. <template slot-scope="{ row }">
  108. <div>{{ $numberFormat(row.pkgSalePrice) }}</div>
  109. </template>
  110. </el-table-column>
  111. <el-table-column label="数量" prop="orderNum">
  112. <template slot-scope="{ row }">
  113. <div>{{ row.orderNum }}包</div>
  114. </template>
  115. </el-table-column>
  116. <el-table-column label="小计(元)">
  117. <template slot-scope="{ row }">
  118. <div>{{ $numberFormat(row.pkgSalePrice * row.orderNum) }}</div>
  119. </template>
  120. </el-table-column>
  121. </el-table>
  122. </div>
  123. <div class="info-amt">
  124. <div class="info-amt-price">
  125. <span>运费:</span>{{ $numberFormat(info.freightAmt) }}元
  126. </div>
  127. <div class="info-amt-price">
  128. <span>共计金额:</span>{{ $numberFormat(info.orderAmt) }}元
  129. </div>
  130. </div>
  131. </div>
  132. <!-- 发货 -->
  133. <send-goods
  134. :send-show="goodsShow"
  135. :goods-info="info"
  136. :channel-list="boxData"
  137. @close="close"
  138. />
  139. </div>
  140. </template>
  141. <script>
  142. import { orderDetail, channelList } from "@/api/business/order";
  143. import { publicFileGetUrl } from "@/api/common";
  144. import { accMul } from "@/utils/util";
  145. import SendGoods from "./components/SendGoods";
  146. export default {
  147. name: "Detail",
  148. components: {
  149. SendGoods,
  150. },
  151. data() {
  152. return {
  153. // 订单ID
  154. orderId: "",
  155. // 订单详情
  156. info: {},
  157. // 订单状态
  158. status: {},
  159. // 物流信息
  160. delivery: {},
  161. // 商品列表
  162. list: [],
  163. // 发货弹框显示
  164. goodsShow: false,
  165. // 盲票组列表
  166. boxData: [],
  167. };
  168. },
  169. created() {
  170. this.orderId = this.$route.query.id;
  171. this.getDetail();
  172. this.getChannelList();
  173. },
  174. activated() {
  175. const orderId = this.$route.query.id;
  176. if (orderId != null && orderId != this.orderId) {
  177. this.orderId = orderId;
  178. this.getDetail();
  179. this.getChannelList();
  180. }
  181. },
  182. methods: {
  183. // 盲票组列表
  184. getChannelList(row) {
  185. channelList({ orderId: this.orderId }).then((res) => {
  186. this.boxData = res.data;
  187. });
  188. },
  189. // 订单详情
  190. getDetail() {
  191. orderDetail({ orderId: this.orderId }).then((res) => {
  192. if (res.code == 0) {
  193. this.info = res.data;
  194. this.status = JSON.parse(res.data.status);
  195. this.delivery = res.data.deliveryCompany;
  196. res.data.items.forEach((item) => {
  197. let picUrlArr = item.picUrl.split(",");
  198. item.picUrl = publicFileGetUrl + picUrlArr[0];
  199. });
  200. this.list = res.data.items;
  201. }
  202. });
  203. },
  204. // 点击发货
  205. toGoods() {
  206. this.goodsShow = true;
  207. },
  208. // 发货弹框关闭
  209. close() {
  210. this.goodsShow = false;
  211. this.getDetail();
  212. },
  213. },
  214. };
  215. </script>
  216. <style lang="scss" scoped>
  217. .info {
  218. margin-bottom: 10px;
  219. &-title {
  220. font-size: 14px;
  221. margin-bottom: 10px;
  222. font-weight: bold;
  223. }
  224. &-item {
  225. padding-left: 50px;
  226. &-content {
  227. display: flex;
  228. &-one {
  229. display: flex;
  230. margin-bottom: 10px;
  231. .title {
  232. width: 100px;
  233. }
  234. .txt {
  235. width: 200px;
  236. }
  237. }
  238. }
  239. }
  240. &-amt {
  241. margin-top: 10px;
  242. &-price {
  243. span {
  244. display: inline-block;
  245. width: 80px;
  246. margin-bottom: 20px;
  247. }
  248. }
  249. }
  250. }
  251. .flex {
  252. display: flex;
  253. align-items: center;
  254. .txt {
  255. margin-left: 20px;
  256. }
  257. }
  258. </style>