pendDetails.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. <template>
  2. <el-dialog :close-on-click-modal="false" title="详情" width="80%" :visible.sync="visible">
  3. <div v-loading="loading" class="order_details">
  4. <!-- <el-button icon="el-icon-close" class="close" @click="close" /> -->
  5. <div class="cotent">
  6. <div class="left_part">
  7. <div class="order_info">
  8. <h2>订单信息</h2>
  9. <ul>
  10. <li>
  11. <p>
  12. <span>订单ID:</span>
  13. <span>{{ order.orderId }}</span>
  14. </p>
  15. <p>
  16. <span>支付单号:</span>
  17. <span>{{ order.transactionId }}</span>
  18. </p>
  19. </li>
  20. <li>
  21. <p>
  22. <span>订单编号:</span>
  23. <span>{{ order.orderFormid }}</span>
  24. </p>
  25. </li>
  26. <li>
  27. <p>
  28. <span>订单状态:</span>
  29. <span v-if="order.state === 1">待付款</span>
  30. <span v-if="order.state === 2">待发货</span>
  31. <span v-if="order.state === 3">待收货</span>
  32. <span v-if="order.state === 4">已完成</span>
  33. <span v-if="order.state === 5">已取消</span>
  34. </p>
  35. <p>
  36. <span>售后状态:</span>
  37. <span>{{ order.afterStateName }}</span>
  38. </p>
  39. </li>
  40. <li>
  41. <p>
  42. <span>支付方式:</span>
  43. <span v-if="order.paymentMode === 1">微信</span>
  44. <span v-else-if="order.paymentMode === 2">支付宝</span>
  45. <span v-else-if="order.paymentMode === 3">花呗分期</span>
  46. <span v-else-if="order.paymentMode === 4">通联支付</span>
  47. <span v-else-if="order.paymentMode === 5">平台余额支付</span>
  48. <span v-else-if="order.paymentMode === 6">商家余额支付</span>
  49. <span v-else-if="order.paymentMode === 7">佣金支付</span>
  50. <span v-else-if="order.paymentMode === 8">交易金支付</span>
  51. <span v-else-if="order.paymentMode === 9">惠市宝支付</span>
  52. <span v-else>--</span>
  53. </p>
  54. <p>
  55. <span>物流方案:</span>
  56. <span>{{ order.logisticsName }}</span>
  57. </p>
  58. </li>
  59. <li>
  60. <p>
  61. <span>创建时间:</span>
  62. <span>{{ order.createTime }}</span>
  63. </p>
  64. <p>
  65. <span>支付时间:</span>
  66. <span>{{ order.paymentTime }}</span>
  67. </p>
  68. </li>
  69. <li>
  70. <p>备注:{{ order.remark }}</p>
  71. </li>
  72. </ul>
  73. </div>
  74. <div class="goods_info">
  75. <h2>商品信息</h2>
  76. <div v-for="(item, index) in order.products" :key="index" class="goods_list">
  77. <div class="good_price">
  78. <ul>
  79. <li>
  80. <p>商品总价: ¥{{ order.orderPrice }}</p>
  81. <p>支付金额: ¥{{ order.price }}</p>
  82. </li>
  83. <li>
  84. <p>物流费用: ¥{{ order.logisticsPrice }}</p>
  85. </li>
  86. </ul>
  87. </div>
  88. <div class="good_details">
  89. <ul>
  90. <li>
  91. <img :src="item.image">
  92. <div class="details">
  93. <p>{{ item.productName }}</p>
  94. <p class="skuDetails">
  95. <span
  96. v-for="(detailsItem, detailsindex) in item.skuDetails" :key="detailsindex"
  97. class="detail_span"
  98. >
  99. {{ detailsItem.skuName }}: {{ detailsItem.skuValue }}
  100. </span>
  101. </p>
  102. <p>SKU: {{ item.skuId }}</p>
  103. </div>
  104. </li>
  105. <li class="cen">
  106. ¥{{ `${item.productPrice} * ${item.number}` }}
  107. </li>
  108. <li>
  109. {{ order.orderPrice }}
  110. </li>
  111. </ul>
  112. </div>
  113. </div>
  114. </div>
  115. <!-- 未发货时物流信息显示去发货按钮 -->
  116. <!-- <div class="logistics_info" v-show="order.logisticsName && order.logisticsNum"> -->
  117. <div class="logistics_info">
  118. <h2>物流信息</h2>
  119. <!-- <p
  120. v-if="!order.logisticsNum"
  121. class="send_good"
  122. @click="send"
  123. >
  124. 去发货
  125. </p> -->
  126. <el-button
  127. v-if="!order.logisticsNum && order.state == 2" type="primary" class="send_good"
  128. @click="send"
  129. >
  130. 去发货
  131. </el-button>
  132. <div v-else class="logistics_content">
  133. <p class="logistics_title">
  134. <span>物流公司: {{ order.express }}</span>
  135. <span>运单号: {{ order.deliverFormid }}</span>
  136. </p>
  137. <!-- <p
  138. v-for="(item, index) in tracesList"
  139. :key="index"
  140. class="logistics_item"
  141. >
  142. <span>{{ item.acceptTime }}</span>
  143. <span>{{ acceptStation }}</span>
  144. </p> -->
  145. </div>
  146. </div>
  147. </div>
  148. <div class="right_part">
  149. <div class="pay_order_info">
  150. <h2>下单人信息</h2>
  151. <p>下单账户: {{ order.customerName }}</p>
  152. <p>历史订单总数: {{ order.total }}个</p>
  153. <p>下单备注: {{ order.remark }}</p>
  154. </div>
  155. <div class="take_goods_info">
  156. <h2>收货信息</h2>
  157. <p>姓名: {{ order.receiveName }}</p>
  158. <p>手机号: {{ order.receivePhone }}</p>
  159. <p>地址: {{ order.receiveAdress }} {{ order.address }}</p>
  160. </div>
  161. </div>
  162. </div>
  163. <!-- 发货 -->
  164. <el-dialog :visible.sync="isVisible" title="发货" append-to-body :close-on-click-modal="false">
  165. <el-form ref="sendGoodsForm" :model="form" :rules="rules" label-width="80px">
  166. <el-form-item label="快递公司" prop="express">
  167. <el-select v-model="form.express" filterable>
  168. <el-option v-for="(item, index) in companyList" :key="index" :label="item.dictName" :value="item.dictId" />
  169. </el-select>
  170. </el-form-item>
  171. <el-form-item label="快递单号" prop="deliverFormid">
  172. <el-input
  173. v-model="form.deliverFormid" maxlength="20"
  174. oninput="value = value.replace(/[^\a-\z\A-\Z0-9]/g,'')"
  175. />
  176. </el-form-item>
  177. <!-- <el-form-item label="快递公司编号" prop="shipperCode" v-if="false">
  178. <el-input v-model="form.shipperCode" />
  179. </el-form-item> -->
  180. </el-form>
  181. <span slot="footer" class="dialog-footer">
  182. <el-button type="primary" @click="confirm">确 定</el-button>
  183. <el-button @click="cancel">取 消</el-button>
  184. </span>
  185. </el-dialog>
  186. </div>
  187. </el-dialog>
  188. </template>
  189. <script>
  190. import { orderGetById, orderGetSelect, orderDilevery } from '@/api/order'
  191. export default {
  192. name: 'PendDetails',
  193. data() {
  194. return {
  195. visible: false,
  196. order: {},
  197. form: {
  198. orderId: this.orderId,
  199. express: '',
  200. deliverFormid: ''
  201. },
  202. isVisible: false,
  203. rules: {
  204. logisticsName: [
  205. { required: false, message: '请输入快递公司名称', trigger: 'blur' }
  206. ],
  207. deliverFormid: [
  208. { required: true, message: '请输入快递单号', trigger: 'blur' }
  209. ],
  210. express: [
  211. { required: true, message: '请选择快递公司', trigger: 'blur' }
  212. ]
  213. },
  214. companyList: [],
  215. orderId: 0
  216. }
  217. },
  218. // computed: {
  219. // orderId() {
  220. // return this.$route.params.orderId
  221. // }
  222. // },
  223. // created() {
  224. // this.getProductList()
  225. // },
  226. methods: {
  227. show(id) {
  228. this.visible = true
  229. this.orderId = id
  230. this.form = {
  231. orderId: this.orderId,
  232. express: '',
  233. deliverFormid: ''
  234. }
  235. this.getProductList()
  236. },
  237. async getProductList() {
  238. try {
  239. this.loading = true
  240. const res = await orderGetById({ orderId: this.orderId })
  241. this.order = res.data
  242. } finally {
  243. this.loading = false
  244. }
  245. },
  246. close() {
  247. this.visible = false
  248. },
  249. confirm() {
  250. this.$refs.sendGoodsForm.validate((valid) => {
  251. if (valid) {
  252. this.form.orderId = this.orderId
  253. orderDilevery(this.form).then((res) => {
  254. if (res.code === '') {
  255. this.$message({
  256. message: '发货成功',
  257. type: 'success'
  258. })
  259. this.isVisible = false
  260. this.$router.go(-1)
  261. }
  262. })
  263. }
  264. })
  265. },
  266. cancel() {
  267. this.isVisible = false
  268. },
  269. async getCompanyList() {
  270. const res = await orderGetSelect()
  271. if (res.code === '') {
  272. this.companyList = res.data
  273. }
  274. },
  275. send() {
  276. this.getCompanyList()
  277. this.isVisible = true
  278. }
  279. }
  280. }
  281. </script>
  282. <style lang="scss" scoped>
  283. @import url("../../../styles/elDialog.scss");
  284. ul {
  285. list-style: none;
  286. margin: 0;
  287. padding: 0;
  288. }
  289. .order_details {
  290. h3 {
  291. // margin-left: 20px;
  292. margin: 20px 0 20px 20px;
  293. font-weight: 700;
  294. }
  295. .close {
  296. // float: right;
  297. position: absolute;
  298. right: 20px;
  299. &:hover {
  300. cursor: pointer;
  301. }
  302. }
  303. .cotent {
  304. margin: 20px;
  305. overflow: hidden;
  306. font-size: 14px;
  307. .goods_info,
  308. .order_info,
  309. .logistics_info,
  310. .pay_order_info,
  311. .take_goods_info {
  312. background: #fff;
  313. margin-bottom: 10px;
  314. padding: 10px 20px;
  315. }
  316. .pay_order_info,
  317. .take_goods_info {
  318. p {
  319. line-height: 30px;
  320. }
  321. }
  322. h2 {
  323. margin: 0;
  324. font-weight: 400;
  325. height: 40px;
  326. line-height: 40px;
  327. font-size: 18px;
  328. text-align: -10px;
  329. }
  330. .left_part {
  331. float: left;
  332. width: calc(70% - 10px);
  333. margin-right: 10px;
  334. .order_info {
  335. box-sizing: border-box;
  336. ul {
  337. padding: 10px 30px;
  338. li {
  339. overflow: hidden;
  340. p {
  341. width: 50%;
  342. float: left;
  343. font-size: 14px;
  344. line-height: 30px;
  345. span {
  346. &:nth-child(2) {
  347. margin-left: 10px;
  348. }
  349. }
  350. }
  351. }
  352. }
  353. .remarks {
  354. margin-left: 30px !important;
  355. }
  356. }
  357. .goods_info {
  358. .goods_list {
  359. padding: 15px;
  360. .good_price {
  361. ul {
  362. li {
  363. &:nth-child(1) {
  364. p {
  365. width: 50%;
  366. float: left;
  367. }
  368. }
  369. p {
  370. line-height: 30px;
  371. }
  372. }
  373. }
  374. border-bottom: 1px gray solid;
  375. }
  376. .good_details {
  377. ul {
  378. display: flex;
  379. margin-top: 20px;
  380. li {
  381. flex: 3;
  382. display: flex;
  383. justify-content: space-around;
  384. align-items: center;
  385. .details {
  386. margin: 0 30px;
  387. width: 180px;
  388. line-height: 20px;
  389. .skuDetails {
  390. margin-top: 8px;
  391. margin-bottom: 8px;
  392. margin-right: 10px;
  393. line-height: 1;
  394. color: #9e9e9e;
  395. .detail_span {
  396. margin-right: 8px;
  397. }
  398. }
  399. }
  400. img {
  401. width: 50px;
  402. height: 50px;
  403. }
  404. }
  405. }
  406. }
  407. }
  408. }
  409. .logistics_info {
  410. .send_good {
  411. display: block;
  412. margin: 20px auto !important;
  413. &:hover {
  414. cursor: pointer;
  415. }
  416. }
  417. .logistics_content {
  418. padding: 0 10%;
  419. .logistics_title {
  420. span {
  421. margin: 20px 0;
  422. display: inline-block;
  423. width: 45%;
  424. }
  425. }
  426. .logistics_item {
  427. span {
  428. display: inline-block;
  429. width: 30%;
  430. }
  431. }
  432. }
  433. }
  434. }
  435. .right_part {
  436. float: left;
  437. width: 30%;
  438. }
  439. }
  440. }
  441. </style>