detail.vue 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  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.channel && info.channel.parentName }}</div>
  37. </div>
  38. </div>
  39. <div class="info-item-content">
  40. <div class="info-item-content-one">
  41. <div class="title">收货人:</div>
  42. <div class="txt">{{ info.receiver || "--" }}</div>
  43. </div>
  44. <div class="info-item-content-one">
  45. <div class="title">联系电话:</div>
  46. <div class="txt">{{ info.tel || "--" }}</div>
  47. </div>
  48. <div class="info-item-content-one">
  49. <div class="title">收货地址:</div>
  50. <div class="">
  51. {{
  52. `${info.province || "--"}${info.city || "--"}${
  53. info.area || "--"
  54. }${info.address || "--"}`
  55. }}
  56. </div>
  57. </div>
  58. </div>
  59. </div>
  60. </div>
  61. <!-- 订单状态 -->
  62. <div class="info">
  63. <div class="info-title">订单状态</div>
  64. <div class="info-item">
  65. <div class="info-item-content">
  66. <div class="info-item-content-one">
  67. <div class="title">订单状态:</div>
  68. <div class="txt" v-if="status.value == 2">已发货</div>
  69. <div class="txt" v-else>{{ status.desc || "--" }}</div>
  70. </div>
  71. <div class="info-item-content-one" v-if="status.value === 2">
  72. <div class="title">发货时间:</div>
  73. <div class="txt">{{ parseTime(info.deliveryTime) || "--" }}</div>
  74. </div>
  75. <div class="info-item-content-one" v-if="status.value === 2">
  76. <div class="edit-express" @click="editExpress">修改</div>
  77. </div>
  78. </div>
  79. <div class="info-item-content">
  80. <el-button
  81. v-if="status.value === 1"
  82. v-hasPermi="['business:ticket:on']"
  83. type="primary"
  84. @click="toGoods()"
  85. >发货</el-button
  86. >
  87. <!-- ============================================================================================改-->
  88. <div class="info-item-content-one" v-if="status.value === 2">
  89. <div class="title">配送方式:</div>
  90. <div class="txt">
  91. <!-- {{ info.deliveryType || "&#45;&#45;" }}-->
  92. {{ "快递发货" || "--" }}
  93. </div>
  94. </div>
  95. <div class="info-item-content-one" v-if="status.value === 2">
  96. <div class="title">快递公司:</div>
  97. <div class="txt">
  98. {{ (delivery && delivery.companyName) || "--" }}
  99. </div>
  100. </div>
  101. <div class="info-item-content-one" v-if="status.value === 2">
  102. <div class="title">快递单号:</div>
  103. <div class="txt">{{ info.deliveryFlowId || "--" }}</div>
  104. </div>
  105. </div>
  106. </div>
  107. </div>
  108. <!-- 商品信息 -->
  109. <div class="info">
  110. <div class="info-title">商品信息</div>
  111. <div class="info-table">
  112. <el-table :data="list">
  113. <el-table-column label="商品信息">
  114. <div slot-scope="{ row }" class="flex">
  115. <el-image
  116. style="width: 100px; height: 100px"
  117. :src="row.picUrl"
  118. :preview-src-list="[row.picUrl]"
  119. />
  120. <div class="txt">{{ row.title }}</div>
  121. </div>
  122. </el-table-column>
  123. <el-table-column label="单价(元)">
  124. <template slot-scope="{ row }">
  125. <div>{{ $numberFormat(row.pkgSalePrice) }}</div>
  126. </template>
  127. </el-table-column>
  128. <el-table-column label="数量" prop="orderNum">
  129. <template slot-scope="{ row }">
  130. <div>{{ row.orderNum }}包</div>
  131. </template>
  132. </el-table-column>
  133. <el-table-column label="小计(元)">
  134. <template slot-scope="{ row }">
  135. <div>{{ $numberFormat(row.pkgSalePrice * row.orderNum) }}</div>
  136. </template>
  137. </el-table-column>
  138. <el-table-column
  139. v-if="status.value === 2 || status.value === 3"
  140. label="附加信息"
  141. min-width="150"
  142. >
  143. <template slot-scope="{ row }">
  144. <div>
  145. 序列号:
  146. <div v-for="(item, index) in row.detailList" :key="index">
  147. {{ item.startSn }} 至 {{ item.endSn }}
  148. </div>
  149. </div>
  150. </template>
  151. </el-table-column>
  152. </el-table>
  153. </div>
  154. <div class="info-amt">
  155. <div class="info-amt-price">
  156. <span>运费:</span>{{ $numberFormat(info.freightAmt) }}元
  157. </div>
  158. <div class="info-amt-price">
  159. <span>共计金额:</span>{{ $numberFormat(info.orderAmt) }}元
  160. </div>
  161. </div>
  162. </div>
  163. <!-- 发货 -->
  164. <send-goods
  165. :send-show="goodsShow"
  166. :goods-info="info"
  167. :channel-list="boxData"
  168. @close="close"
  169. />
  170. <!-- 修改快递信息 -->
  171. <express-edit
  172. v-if="editShow"
  173. :edit-show="editShow"
  174. :goods-info="info"
  175. @close="close"
  176. />
  177. </div>
  178. </template>
  179. <script>
  180. import { orderDetail, boxList } from "@/api/business/order";
  181. import { publicFileGetUrl } from "@/api/common";
  182. import { accMul } from "@/utils/util";
  183. import SendGoods from "./components/SendGoods";
  184. import ExpressEdit from "./components/ExpressEdit";
  185. export default {
  186. name: "Detail",
  187. components: {
  188. SendGoods,
  189. ExpressEdit,
  190. },
  191. data() {
  192. return {
  193. // 订单ID
  194. orderId: "",
  195. // 订单详情
  196. info: {},
  197. // 订单状态
  198. status: {},
  199. // 物流信息
  200. delivery: {},
  201. // 商品列表
  202. list: [],
  203. // 发货弹框显示
  204. goodsShow: false,
  205. // 盲票组列表
  206. boxData: [],
  207. // 修改快递信息弹框
  208. editShow: false,
  209. };
  210. },
  211. created() {
  212. this.orderId = this.$route.query.id;
  213. this.getDetail();
  214. this.getChannelList();
  215. },
  216. activated() {
  217. const orderId = this.$route.query.id;
  218. if (orderId != null && orderId != this.orderId) {
  219. this.orderId = orderId;
  220. this.getDetail();
  221. this.getChannelList();
  222. }
  223. },
  224. methods: {
  225. // 盲票组列表
  226. getChannelList(row) {
  227. boxList({ orderId: this.orderId }).then((res) => {
  228. this.boxData = res.data;
  229. });
  230. },
  231. // 订单详情
  232. getDetail() {
  233. orderDetail({ orderId: this.orderId }).then((res) => {
  234. if (res.code == 0) {
  235. this.info = res.data;
  236. this.status = JSON.parse(res.data.status);
  237. this.delivery = res.data.deliveryCompany;
  238. res.data.items.forEach((item) => {
  239. let picUrlArr = item.picUrl.split(",");
  240. item.picUrl = publicFileGetUrl + picUrlArr[0];
  241. });
  242. this.list = res.data.items;
  243. }
  244. });
  245. },
  246. // 点击发货
  247. toGoods() {
  248. this.goodsShow = true;
  249. },
  250. // 发货弹框关闭
  251. close() {
  252. this.goodsShow = false;
  253. this.editShow = false;
  254. this.getDetail();
  255. },
  256. // 修改快递信息
  257. editExpress() {
  258. this.editShow = true;
  259. },
  260. },
  261. };
  262. </script>
  263. <style lang="scss" scoped>
  264. .info {
  265. margin-bottom: 10px;
  266. &-title {
  267. font-size: 14px;
  268. margin-bottom: 10px;
  269. font-weight: bold;
  270. }
  271. &-item {
  272. padding-left: 50px;
  273. &-content {
  274. display: flex;
  275. &-one {
  276. display: flex;
  277. margin-bottom: 10px;
  278. .title {
  279. width: 100px;
  280. }
  281. .edit-express {
  282. color: #409eff;
  283. cursor: pointer;
  284. }
  285. .txt {
  286. width: 200px;
  287. }
  288. }
  289. }
  290. }
  291. &-amt {
  292. margin-top: 10px;
  293. &-price {
  294. span {
  295. display: inline-block;
  296. width: 80px;
  297. margin-bottom: 20px;
  298. }
  299. }
  300. }
  301. }
  302. .flex {
  303. display: flex;
  304. align-items: center;
  305. .txt {
  306. margin-left: 20px;
  307. }
  308. }
  309. </style>