orderInfo.vue 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545
  1. <template>
  2. <!-- <div class="detail-dialog">-->
  3. <el-dialog
  4. :title="
  5. !dataForm.orderNumber
  6. ? this.$i18n.t('crud.addTitle')
  7. : '订单详情'
  8. "
  9. :close-on-click-modal="false"
  10. :visible.sync="visible"
  11. :append-to-body="true"
  12. width="80%"
  13. v-if="visible"
  14. top="1vh"
  15. @close="closeDialog"
  16. >
  17. <div class="new-page-title">
  18. <div class="line" />
  19. <div class="text">
  20. {{
  21. !dataForm.orderNumber
  22. ? this.$i18n.t('crud.addTitle')
  23. : this.$i18n.t('order.orderDetails')
  24. }}
  25. </div>
  26. </div>
  27. <el-form :model="dataForm" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px" size="small">
  28. <div class="mod-order-orderInfo">
  29. <div class="content">
  30. <div class="order-number">
  31. <div class="number">
  32. <span class="text">{{ $t("order.number") }}:</span>
  33. {{ dataForm.orderNumber }}
  34. </div>
  35. <div class="time">
  36. <span class="text">{{ $t("order.createTime") }}:</span>
  37. {{ dataForm.createTime }}
  38. </div>
  39. <div style="margin-left: 5px; margin-right: 20px">
  40. <el-button type="text" @click="modifyCreateTimeVisible=true">修改时间</el-button>
  41. </div>
  42. <div class="type">
  43. {{
  44. [
  45. $t("order.normalOrder"),
  46. $t("order.groupPurchaseOrder"),
  47. $t("order.spikeOrder"),
  48. ][dataForm.orderType]
  49. }}
  50. </div>
  51. </div>
  52. <div class="order-state">
  53. <div class="state-box">
  54. <div class="state">
  55. {{
  56. [
  57. $t("order.waitToPay"),
  58. $t("order.waitDel"),
  59. $t("order.waitingFeGoods"),
  60. $t("order.waitingtion"),
  61. $t("order.commoditful"),
  62. $t("order.commodityFailed"),
  63. $t("order.commodited"),
  64. ][dataForm.status - 1]
  65. }}
  66. </div>
  67. <div class="state-des">
  68. <div v-if="dataForm.status === 1">
  69. {{ $t("order.buyerDidNTime") }}
  70. </div>
  71. <div v-if="dataForm.status === 2">
  72. {{ $t("order.buyPleF") }}
  73. </div>
  74. <div v-if="dataForm.status === 3 && dataForm.dvyType !== 2">
  75. {{ $t("order.shelF") }}
  76. </div>
  77. <div v-if="dataForm.status === 3 && dataForm.dvyType === 2">
  78. {{ $t("order.buyA") }}
  79. </div>
  80. <!-- <div v-if="dataForm.status === 4">订单已完成,等待买家发表评价。</div> -->
  81. <div v-if="dataForm.status === 5">{{ $t("order.buyB") }}</div>
  82. <div v-if="dataForm.status === 6">
  83. {{ $t("order.orderCanc") }}
  84. </div>
  85. <div v-if="dataForm.status === 7">
  86. {{ $t("order.outTimeCanOrd") }}
  87. </div>
  88. </div>
  89. <div class="actions">
  90. <div
  91. class="item-btn default-btn"
  92. v-if="dataForm.status <= 2 && dataForm.dvyType !== 2 && dataForm.orderMold !== 1"
  93. @click="changeUserAddrOrder(dataForm.userAddrOrder)"
  94. >{{$t("components.modifyUseAddress")}}</div>
  95. </div>
  96. <!-- <div class="actions">
  97. <div class="item" v-if="dataForm.status === 1">
  98. <div class="el-button--text">修改价格</div>
  99. </div>
  100. <div class="item" v-if="dataForm.status === 2">
  101. <div class="el-button--text">立即发货</div>
  102. <div
  103. class="item-btn"
  104. @click="changeUserAddrOrder(dataForm.userAddrOrder)"
  105. >修改收货地址</div>
  106. </div>
  107. <div class="item" v-if="dataForm.status === 3">
  108. <div class="el-button--text">延长收货</div>
  109. </div>
  110. </div>-->
  111. </div>
  112. <div class="state-steps">
  113. <el-form-item>
  114. <el-steps :active="stepsStatus" align-center :process-status="dataForm.status == 6 ? 'error' : 'wait'">
  115. <el-step :title="this.$i18n.t('order.submitOrder')" :description="dataForm.createTime"></el-step>
  116. <el-step :title="this.$i18n.t('order.paid')" :description="dataForm.payTime"></el-step>
  117. <el-step :title="dataForm.dvyType === 2
  118. ? this.$i18n.t('order.buyerHasMentioned')
  119. : this.$i18n.t('order.delivered')
  120. " :description="dataForm.dvyTime"></el-step>
  121. <el-step :title="this.$i18n.t('order.receivedGoods')" :description="dataForm.finallyTime"></el-step>
  122. </el-steps>
  123. </el-form-item>
  124. </div>
  125. </div>
  126. <div class="packages">
  127. <div class="p-tab">
  128. <div :class="indexs === index ? 'item active' : 'item'"
  129. @click="onClickListDelivery(deliveryExpresse, index)" v-for="(
  130. deliveryExpresse, index
  131. ) in dataForm.deliveryExpresses" :key="index">
  132. {{ $t("order.package") }}{{ index + 1 }}
  133. </div>
  134. </div>
  135. <div class="p-con" v-if="deliveryExpresse">
  136. <div class="deliver-msg">
  137. <div class="d-item">
  138. <div class="text" :style="this.$i18n.t('language') === 'language' ? 'width:210px;' : 'width:80px;'">{{
  139. $t("order.delType") }}:</div>
  140. <div class="res">
  141. {{
  142. [
  143. this.$i18n.t("order.distribution"),
  144. this.$i18n.t("order.selfMention"),
  145. this.$i18n.t("order.noNeedRequired"),
  146. this.$i18n.t("order.sameCityDelivery")
  147. ][deliveryExpresse.deliveryType - 1] || [
  148. this.$i18n.t("order.distribution"),
  149. this.$i18n.t("order.selfMention"),
  150. this.$i18n.t("order.noNeedRequired"),
  151. this.$i18n.t("order.sameCityDelivery")
  152. ][dataForm.dvyType - 1]
  153. }}
  154. </div>
  155. <!-- <div class="item">
  156. <div class="text">配送方式:</div>
  157. <div class="res" v-if="dataForm.dvyType == 1">快递</div>
  158. <div class="res" v-if="dataForm.dvyType == 2">自提</div>
  159. <div class="res" v-if="dataForm.dvyType == 3">无需快递</div>
  160. </div>-->
  161. </div>
  162. <div class="d-item">
  163. <div class="text" :style="this.$i18n.t('language') === 'language' ? 'width:210px;' : 'width:80px;'">{{
  164. $t("order.deliveryTime") }}:</div>
  165. <div class="res">{{ deliveryExpresse.createTime }}</div>
  166. </div>
  167. <div class="d-item" v-if="deliveryExpresse.deliveryType !== 3 && deliveryExpresse.deliveryType !== 4">
  168. <div class="text">{{ $t("order.courierCompany") }}:</div>
  169. <div class="res">
  170. {{ deliveryExpresse.deliveryDto.companyName }}
  171. </div>
  172. </div>
  173. <div class="d-item" v-if="deliveryExpresse.deliveryType !== 3 && deliveryExpresse.deliveryType !== 4">
  174. <div class="text">{{ $t("order.trackingNumber") }}:</div>
  175. <div class="res">
  176. {{ deliveryExpresse.deliveryDto.dvyFlowId }}
  177. </div>
  178. </div>
  179. <div class="d-goods over">
  180. <div class="arrow-box">
  181. <div class="arrow prev disable"></div>
  182. <div class="arrow next"></div>
  183. </div>
  184. <div class="goods-box">
  185. <div class="item" v-for="(
  186. orderItem, index
  187. ) in deliveryExpresse.orderItems" :key="index">
  188. <div class="img">
  189. <prod-pic :pic="orderItem.pic"></prod-pic>
  190. </div>
  191. <div class="name">{{ orderItem.prodName }}</div>
  192. <div class="number">
  193. {{ $t("order.quantity") }}:{{ orderItem.prodCount }}
  194. </div>
  195. </div>
  196. </div>
  197. </div>
  198. </div>
  199. <div class="logistics">
  200. <div class="l-tit" v-if="deliveryExpresse && deliveryExpresse.deliveryDto">
  201. <span class="text">{{ $t("order.logisticsStatus") }}:</span>
  202. <span class="l-state" v-if="deliveryExpresse.deliveryDto.state === 0">{{ $t("order.noRecord") }}</span>
  203. <span class="l-state" v-if="deliveryExpresse.deliveryDto.state === 1">{{ $t("order.collected") }}</span>
  204. <span class="l-state" v-if="deliveryExpresse.deliveryDto.state === 2">{{ $t("order.delivering")
  205. }}</span>
  206. <span class="l-state" v-if="deliveryExpresse.deliveryDto.state === 3">{{ $t("order.haveBeenReceived")
  207. }}</span>
  208. <span class="l-state" v-if="deliveryExpresse.deliveryDto.state === 201">{{
  209. $t("order.reachTheDestinationCity") }}</span>
  210. <span class="l-state" v-if="deliveryExpresse.deliveryDto.state === 4">{{ $t("order.problemPiece")
  211. }}</span>
  212. </div>
  213. <div class="logistics-box" v-if="deliveryExpresse && deliveryExpresse.deliveryDto">
  214. <div class="item" v-if="deliveryExpresse.deliveryDto.state === 0 &&
  215. dataForm.status == 5 &&
  216. dataForm.finallyTime !== null
  217. ">
  218. <div class="time">{{ dataForm.finallyTime }}</div>
  219. <div class="text">
  220. {{ $t("order.receivedGoods") }}
  221. </div>
  222. </div>
  223. <div class="item" v-for="(trace, index) in deliveryExpresse.deliveryDto
  224. .traces" :key="index">
  225. <div class="time">{{ trace.acceptTime }}</div>
  226. <div class="text">{{ trace.acceptStation }}</div>
  227. </div>
  228. <div class="item" v-if="deliveryExpresse.deliveryDto.traces &&
  229. deliveryExpresse.deliveryDto.traces.length < 1
  230. ">
  231. {{ $t("order.noLogisticsInformation") }}
  232. </div>
  233. <div class="item" v-if="dataForm.status >= 3 && dataForm.dvyTime !== null">
  234. <div class="time">{{ dataForm.dvyTime }}</div>
  235. <div class="text">
  236. {{ $t("order.merchantHasShippedWa") }}
  237. </div>
  238. </div>
  239. <div class="item" v-if="dataForm.status >= 2 && dataForm.payTime !== null">
  240. <div class="time">{{ dataForm.payTime }}</div>
  241. <div class="text">{{ $t("order.buyerHasPaidWa") }}</div>
  242. </div>
  243. <div :class="['item', dataForm.status >= 1 ? 'left-line' : '']" v-if="dataForm.status >= 1">
  244. <div class="time">{{ dataForm.createTime }}</div>
  245. <div class="text">
  246. {{ $t("order.buyerSubmittedAnOrder") }}
  247. </div>
  248. </div>
  249. </div>
  250. </div>
  251. </div>
  252. </div>
  253. <div :class="['order-info', $t('language') === 'language' ? 'flex-wrap' : '']">
  254. <div :class="['info-item', $t('language') === 'language' ? 'small-width' : '']"
  255. v-if="dataForm.userAddrOrder && dataForm.userAddrOrder !== null">
  256. <div class="item-tit">
  257. {{ $t("order.recipientInformation") }}
  258. </div>
  259. <div class="item">
  260. <div class="text">
  261. {{
  262. dataForm.dvyType === 2
  263. ? $t("order.deliveryPerson")
  264. : $t("publics.addressee")
  265. }}:
  266. </div>
  267. <div class="res">{{ dataForm.userAddrOrder.receiver }}</div>
  268. </div>
  269. <div class="item">
  270. <div class="text">{{ $t("publics.mobilePhone") }}:</div>
  271. <div class="res">{{ dataForm.userAddrOrder.mobile }}</div>
  272. </div>
  273. <div class="item" v-if="dataForm.dvyType !== 2">
  274. <div class="text">{{ $t("publics.deliveryAddr") }}:</div>
  275. <div class="res">
  276. {{ dataForm.userAddrOrder.province
  277. }}{{ dataForm.userAddrOrder.city
  278. }}{{ dataForm.userAddrOrder.area
  279. }}{{ dataForm.userAddrOrder.addr }}
  280. </div>
  281. <!-- <div class="res">北京市 北京市 朝阳区 元大都城垣遗址公园6号 辣婆婆(东元大都店)</div> -->
  282. </div>
  283. </div>
  284. <div :class="['info-item', $t('language') === 'language' ? 'small-width' : '']">
  285. <div class="item-tit">
  286. {{ $t("order.shippingInformation") }}
  287. </div>
  288. <div class="item">
  289. <div class="text">{{ $t("order.delType") }}:</div>
  290. <div class="res">
  291. {{
  292. [
  293. $t("order.distribution"),
  294. $t("order.selfMention"),
  295. $t("order.noNeedRequired"),
  296. $t("order.sameCityDelivery")
  297. ][dataForm.dvyType - 1]
  298. }}
  299. </div>
  300. <div class="res" v-if="dataForm.dvyType === null">
  301. {{ $t("order.notYet") }}
  302. </div>
  303. <!-- <div class="res" v-if="dataForm.dvyType == 1">快递</div>
  304. <div class="res" v-if="dataForm.dvyType == 2">自提</div>
  305. <div class="res" v-if="dataForm.dvyType == 3">无需快递</div>-->
  306. </div>
  307. <div class="item">
  308. <div class="text">{{ $t("order.deliveryTime") }}:</div>
  309. <div class="res">{{ dataForm.dvyTime }}</div>
  310. <div class="res" v-if="dataForm.dvyTime === null">
  311. {{ $t("order.notYet") }}
  312. </div>
  313. </div>
  314. <div class="item" v-if="dataForm.dvyType === 2">
  315. <div class="text">{{ $t("shop.pickupLocationName") }}:</div>
  316. <div class="res">{{ dataForm.stationName }}</div>
  317. </div>
  318. </div>
  319. <div :class="['info-item', $t('language') === 'language' ? 'small-width' : '']" v-if="dataForm.orderMold === 1">
  320. <div class="item-tit">
  321. {{ $t("order.virtualInfo") }}
  322. </div>
  323. <div class="item">
  324. <div class="text">{{ $t("order.virtualMsg") }}:</div>
  325. <div class="res">
  326. <div v-for="(virtualRemark, index) in virtualRemarkList" :key="index">
  327. {{
  328. virtualRemark.name
  329. }}:{{
  330. virtualRemark.value
  331. }}
  332. </div>
  333. </div>
  334. </div>
  335. </div>
  336. <div :class="['info-item', $t('language') === 'language' ? 'small-width' : '']">
  337. <div class="item-tit">{{ $t("order.paymentInformation") }}</div>
  338. <div class="item">
  339. <div class="text">{{ $t("order.actualAmount") }}:</div>
  340. <!-- <div class="res">{{dataForm.actualTotal}}元</div> -->
  341. {{
  342. $t("order.monetaryUnit") +
  343. dataForm.actualTotal +
  344. " + " +
  345. dataForm.score +
  346. $t("order.score")
  347. }}
  348. </div>
  349. <div class="item">
  350. <div class="text">{{ $t("order.payWay") }}:</div>
  351. <div v-if="dataForm.payType === null || dataForm.status === 1">
  352. {{ $t("order.unpaid") }}
  353. </div>
  354. <div class="res" v-else>
  355. {{
  356. [
  357. $t("order.pointsPayment"),
  358. $t("order.wecProPay"),
  359. $t("order.aliPay"),
  360. $t("order.wechatScanCodePayment"),
  361. $t("order.wechatH5Payment"),
  362. $t("order.weclAccountPay"),
  363. $t("order.alipayH5Payment"),
  364. $t("order.alipayAPPPayment"),
  365. $t("order.wechatAPPPayment"),
  366. $t("order.balancePayment"),
  367. $t("order.payPalPayment"),
  368. ][dataForm.payType]
  369. }}
  370. </div>
  371. </div>
  372. <div class="item">
  373. <div class="text">{{ $t("order.paymentTime") }}:</div>
  374. <div class="res">{{ dataForm.payTime }}</div>
  375. <div class="res" v-if="dataForm.payTime === null">
  376. {{ $t("order.notYet") }}
  377. </div>
  378. </div>
  379. </div>
  380. <div :class="['info-item', $t('language') === 'language' ? 'small-width' : '']">
  381. <div class="item-tit">{{ $t("order.buyerInformation") }}</div>
  382. <div class="item">
  383. <div class="text">{{ $t("order.buyerSNickname") }}:</div>
  384. <div class="res">{{ dataForm.nickName }}</div>
  385. <div class="res" v-if="dataForm.nickName === null">
  386. {{ $t("order.notYet") }}
  387. </div>
  388. </div>
  389. <!-- 用户没有设置手机号,所以暂时注释掉-->
  390. <!-- <div class="item">-->
  391. <!-- <div class="text">{{$t('publics.mobilePhone')}}:</div>-->
  392. <!-- <div-->
  393. <!-- class="res"-->
  394. <!-- v-if="!dataForm.userMobile || dataForm.userMobile === ''"-->
  395. <!-- >{{$t('order.notYet')}}</div>-->
  396. <!-- <div class="res" v-else>{{dataForm.userMobile}}</div>-->
  397. <!-- </div>-->
  398. <div class="item">
  399. <div class="text">{{ $t("order.orderRemarks") }}:</div>
  400. <div class="res" v-if="">{{ dataForm.remarks }}</div>
  401. <div
  402. class="res">
  403. <el-button type="text" @click="buyerRemarkVisible=true">修改</el-button>
  404. </div>
  405. </div>
  406. </div>
  407. <div :class="['info-item', $t('language') === 'English' ? 'small-width' : '']">
  408. <div class="item-tit">PDF信息</div>
  409. <el-row :gutter="20">
  410. <!--<el-col :span="12">
  411. <div class="item">
  412. <div class="text">打印渠道:</div>
  413. <div class="res">{{ printOrder.printChannel }}</div>
  414. </div>
  415. </el-col> 提前注释-->
  416. <el-col :span="12">
  417. <div class="item" style="width:320px;">
  418. <div class="text">生成状态:</div>
  419. <div class="res" v-if="dataForm.printStatus == 0">未生成</div>
  420. <div class="res" style="color: green;font-weight: bold" v-if="dataForm.printStatus == 1">已生成</div>
  421. <div class="res" style="color: red;font-weight: bold" v-if="dataForm.printStatus == 2">生成失败</div>
  422. <div class="res" style="color: green;font-weight: bold" v-if="dataForm.printStatus == 3">已发货</div>
  423. <div class="res" style="color: orange;font-weight: bold" v-if="dataForm.printStatus == 5">生成中</div>
  424. <div class="res" style="color: orange;font-weight: bold" v-if="dataForm.printStatus == 6">已扫码</div>
  425. </div>
  426. </el-col>
  427. </el-row>
  428. <el-row :gutter="20">
  429. <!--<el-col :span="12">
  430. <div class="item" style="width:360px;">
  431. <div class="text">三方订单号:</div>
  432. <div class="res" >{{ printOrder.orderNo }}</div>
  433. </div>
  434. </el-col> 提前注释-->
  435. </el-row>
  436. <el-row :gutter="20">
  437. <el-col :span="16">
  438. <div class="item">
  439. <div class="text">PDF文件:</div>
  440. <el-link v-if="!!pdfInfo && !!pdfInfo.pdfUrl" type="primary" :underline="false"
  441. :href="resourcesUrl + pdfInfo.pdfUrl" target="_blank">查看文件</el-link>
  442. <el-button type="primary" size="mini" @click="choosePrintChannel2GeneratePdf">生成PDF</el-button>
  443. </div>
  444. </el-col>
  445. <el-col :span="8">
  446. <div class="item" style="width:320px;">
  447. <div class="text">审阅状态:</div>
  448. <el-button v-if="dataForm.auditStatus==0" type="warning" size="mini" style="margin-right: 20px" @click="handleAuditStatus(dataForm.orderNumber)">待审阅</el-button>
  449. <el-button v-else-if="dataForm.auditStatus==1" type="success" size="mini" style="margin-right: 20px" @click="handleAuditStatus(dataForm.orderNumber)">已审阅</el-button>
  450. <el-button v-else type="warning" size="mini" style="margin-right: 20px" @click="handleAuditStatus(dataForm.orderNumber)">待审阅</el-button>
  451. </div>
  452. </el-col>
  453. </el-row>
  454. <el-row>
  455. <el-col :span="24">
  456. <div class="item">
  457. <div v-if="dataForm.deliveryExpresses.length > 0">
  458. <div class="item" style="width:360px;">物流信息:{{ dataForm.deliveryExpresses[0].deliveryDto.companyName }} | {{ dataForm.deliveryExpresses[0].deliveryDto.dvyFlowId }}</div>
  459. </div>
  460. <div v-else class="item" style="width:360px;">物流信息:</div>
  461. <!-- <el-button type="primary" size="mini" v-if="orderStatus == 2" @click="openDeliveryDialog">发货</el-button>-->
  462. </div>
  463. </el-col>
  464. </el-row>
  465. </div>
  466. </div>
  467. <!-- 商品信息 -->
  468. <div class="goods-list">
  469. <el-table :data="prodList" border :default-expand-all="true">
  470. <el-table-column type="expand">
  471. <template slot-scope="scope">
  472. <OrderCardItem :orderItem="scope.row" v-if="showOrderCard"/>
  473. </template>
  474. </el-table-column>
  475. <el-table-column prop :label="this.$i18n.t('order.product')">
  476. <template slot-scope="scope">
  477. <div class="df">
  478. <prod-pic height="60" class="prod-pic" :pic="scope.row.pic"></prod-pic>
  479. <div class="name">
  480. <div>
  481. <span v-if="scope.row.giveawayOrderItemId" class="gift-icon">{{ $t("order.giveawayPord") }}</span>
  482. <span>{{ scope.row.prodName }}</span>
  483. </div>
  484. <div class="order-status" v-if="scope.row.returnMoneySts &&
  485. scope.row.returnMoneySts < 6 &&
  486. scope.row.returnMoneySts > 0
  487. ">
  488. {{
  489. [
  490. "",
  491. $t("refundOrderDetail.buyerApply"),
  492. $t("order.sellerAccepts"),
  493. $t("refundOrderDetail.buyerDelivery"),
  494. $t("order.sellerReceivesGoods"),
  495. $t("order.refundsuccessfully"),
  496. ][scope.row.returnMoneySts]
  497. }}
  498. </div>
  499. </div>
  500. </div>
  501. <!-- 赠品 -->
  502. <div v-if="dataForm.orderItems.length > 1" class="gift-prod">
  503. <div v-for="item in scope.row.giveawayList" class="item">
  504. <span class="name">{{ '【' + $t("order.giveawayPord") + '】' }}{{ item.prodName }}</span>
  505. <span class="num">×{{ item.prodCount }}</span>
  506. </div>
  507. </div>
  508. <!-- / 赠品 -->
  509. </template>
  510. </el-table-column>
  511. <el-table-column prop="price" :label="this.$i18n.t('order.unitPrice')" width="180" align="center">
  512. <template slot-scope="scope">
  513. <span>{{ scope.row.giveawayOrderItemId ? '-' : scope.row.price }}</span>
  514. </template>
  515. </el-table-column>
  516. <el-table-column prop="count" :label="this.$i18n.t('order.quantity')" width="180" align="center">
  517. <template slot-scope="scope">
  518. <span>{{ scope.row.prodCount }}</span>
  519. </template>
  520. </el-table-column>
  521. <el-table-column prop="count" :label="this.$i18n.t('order.preferentialAmount')" width="180" align="center">
  522. <template slot-scope="scope">
  523. <span>{{ scope.row.giveawayOrderItemId ? '-' : scope.row.shareReduce }}</span>
  524. </template>
  525. </el-table-column>
  526. <el-table-column prop="totalPrice" :label="this.$i18n.t('order.totalPrice')" width="180" align="center">
  527. <template slot-scope="scope">
  528. <span>{{ scope.row.giveawayOrderItemId ? '-' : scope.row.productTotalAmount }}</span>
  529. </template>
  530. </el-table-column>
  531. </el-table>
  532. <div class="goods-total">
  533. <div class="text-box">
  534. <div class="item">
  535. <div class="text">{{ $t("order.prodTotalPrice") }}:</div>
  536. <div class="number">¥{{ dataForm.total }}</div>
  537. </div>
  538. <div class="item" v-if="dataForm.reduceAmount">
  539. <div class="text">{{ $t("marketing.discountedPrice") }}:</div>
  540. <div class="number">¥{{ dataForm.reduceAmount }}</div>
  541. </div>
  542. <div class="item" v-if="dataForm.freightAmount">
  543. <div class="text">{{ $t("order.shippingFees") }}:</div>
  544. <div class="number">¥{{ dataForm.freightAmount }}</div>
  545. </div>
  546. <div class="item act-price">
  547. <div class="text">{{ $t("order.actualAmount") }}:</div>
  548. <div class="number">¥{{ dataForm.actualTotal }}{{ dataForm.score ? " + " + dataForm.score
  549. + $t("order.score") : '' }}</div>
  550. </div>
  551. </div>
  552. </div>
  553. </div>
  554. <div class="order-log">
  555. <div class="log-title">{{ $t("order.logs") }}</div>
  556. <div class="log-cont" v-if="dataForm.createTime">
  557. {{ dataForm.createTime }} {{ dataForm.nickName }}
  558. {{ $t("order.createOrder") }}
  559. </div>
  560. <div class="log-cont" v-if="dataForm.payTime">
  561. {{ dataForm.payTime }} {{ dataForm.nickName }}
  562. {{ $t("order.payment") }}
  563. </div>
  564. <div class="log-cont" v-if="dataForm.dvyTime">
  565. {{ dataForm.dvyTime }}
  566. <!-- -->
  567. {{
  568. dataForm.dvyType === 2
  569. ? dataForm.nickName + $t("order.selPickUpOrder")
  570. : $t("order.deliverys")
  571. }}
  572. </div>
  573. <div class="log-cont" v-if="dataForm.finallyTime">
  574. {{ dataForm.finallyTime }} {{ dataForm.nickName }}
  575. {{ $t("order.completed") }}
  576. </div>
  577. <div class="log-cont" v-if="dataForm.cancelTime">
  578. {{ dataForm.cancelTime }} {{ dataForm.nickName }}
  579. {{ $t("order.cancelOrder") }}
  580. </div>
  581. <div class="log-cont" v-if="dataForm.updateTime">
  582. {{ dataForm.updateTime }} {{ dataForm.nickName }}
  583. {{ $t("order.orderUpdate") }}
  584. </div>
  585. </div>
  586. <!-- ___ -->
  587. </div>
  588. </div>
  589. </el-form>
  590. <order-addr-update
  591. v-if="orderAddrUpdateVisible"
  592. ref="orderAddrUpdate"
  593. @refreshUserAddrOrder="getDataList"
  594. ></order-addr-update>
  595. <el-dialog
  596. :append-to-body="true"
  597. title="修改买家备注"
  598. :visible.sync="buyerRemarkVisible"
  599. v-if="buyerRemarkVisible"
  600. width="30%"
  601. left
  602. :close-on-click-modal="false"
  603. :close-on-press-escape="false">
  604. <el-form :model="dataForm" label-position="right">
  605. <el-form-item label="备注" label-width="70px">
  606. <el-input v-model="dataForm.remarks" autocomplete="off"></el-input>
  607. </el-form-item>
  608. </el-form>
  609. <div slot="footer" class="dialog-footer">
  610. <el-button type="primary" @click="modifyBuyerRemarks()">确认</el-button>
  611. </div>
  612. </el-dialog>
  613. <el-dialog
  614. :append-to-body="true"
  615. title="修改下单时间"
  616. :visible.sync="modifyCreateTimeVisible"
  617. v-if="modifyCreateTimeVisible"
  618. width="30%"
  619. left
  620. :close-on-click-modal="false"
  621. :close-on-press-escape="false">
  622. <el-form :model="dataForm" label-position="right">
  623. <el-form-item label="下单时间" label-width="70px">
  624. <el-date-picker v-model="dataForm.createTime"
  625. type="datetime"
  626. :placeholder="this.$i18n.t('admin.seleData')"
  627. value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
  628. </el-form-item>
  629. </el-form>
  630. <div slot="footer" class="dialog-footer">
  631. <el-button type="primary" @click="modifyOrderCreateTime()">确认</el-button>
  632. </div>
  633. </el-dialog>
  634. <el-dialog
  635. :append-to-body="true"
  636. title="选择PDF渠道"
  637. :visible.sync="choosePrintChannleVisible"
  638. v-if="choosePrintChannleVisible"
  639. width="30%"
  640. left
  641. :close-on-click-modal="false"
  642. :close-on-press-escape="false">
  643. <el-form :model="dataForm" label-position="right">
  644. <el-select v-model="dataForm.printChannel" clearable filterable>
  645. <el-option key="KuaiYin" label="快印" value="KuaiYin"></el-option>
  646. <el-option key="Lightning" label="闪电" value="Lightning"></el-option>
  647. <el-option key="WoNiu" label="蜗牛" value="WoNiu"></el-option>
  648. </el-select>
  649. </el-form>
  650. <div slot="footer" class="dialog-footer">
  651. <el-button type="primary" @click="generatePdf(dataForm.printChannel)">确认</el-button>
  652. </div>
  653. </el-dialog>
  654. </el-dialog>
  655. <!-- 弹窗, 新增 / 修改 -->
  656. <!-- <order-remark-update
  657. v-if="orderRemarkUpdateVisible"
  658. ref="orderRemarkUpdate"
  659. @refreshUserRemarkOrder="getDataList"
  660. ></order-remark-update>-->
  661. <!-- </div>-->
  662. </template>
  663. <script>
  664. import OrderAddrUpdate from '@/components/order-addr-update'
  665. // import OrderRemarkUpdate from '@/components/order-remark-update'
  666. import ProdPic from '@/components/prod-pic'
  667. import OrderCardItem from '@/components/order-card-item'
  668. export default {
  669. name: 'order-info',
  670. data() {
  671. return {
  672. choosePrintChannleVisible: false,
  673. visible: false,
  674. virtualRemarkList: [],
  675. pdfInfo: {},
  676. orderStatus: 1,
  677. dataForm: {
  678. remarks: '',
  679. orderId: 0,
  680. orderNumber: '',
  681. virtualRemark: '',
  682. shopRemarks: '',
  683. total: 0,
  684. deliveryExpresses: [],
  685. actualTotal: 0,
  686. dvyType: '',
  687. status: 1,
  688. addrOrderId: 0,
  689. nickName: '',
  690. orderItems: [],
  691. orderTime: '',
  692. updateTime: '',
  693. payTime: '',
  694. dvyTime: '',
  695. finallyTime: '',
  696. cancelTime: '',
  697. orderType: '',
  698. userAddrOrder: {}
  699. },
  700. resourcesUrl: process.env.VUE_APP_RESOURCES_URL,
  701. deliveryExpresse: {
  702. deliveryDto: {}
  703. },
  704. indexs: 0,
  705. orderRemarkUpdateVisible: false,
  706. orderAddrUpdateVisible: false,
  707. showOrderCard: false,
  708. devyVisible: false,
  709. modifyCreateTimeVisible:false,
  710. buyerRemarkVisible: false,
  711. // 商品列表
  712. prodList: []
  713. }
  714. },
  715. components: {
  716. OrderAddrUpdate,
  717. // OrderRemarkUpdate
  718. OrderCardItem,
  719. ProdPic
  720. },
  721. watch: {
  722. visible: function () {
  723. if (!this.visible) {
  724. this.orderRemarkUpdateVisible = false
  725. this.orderAddrUpdateVisible = false
  726. }
  727. }
  728. },
  729. computed: {
  730. stepsStatus: function () {
  731. if (this.dataForm.finallyTime) {
  732. return 4
  733. }
  734. if (this.dataForm.dvyTime) {
  735. return 3
  736. }
  737. if (this.dataForm.payTime) {
  738. return 2
  739. }
  740. if (this.dataForm.createTime) {
  741. return 1
  742. }
  743. }
  744. },
  745. created() {
  746. // this.dataForm.orderNumber = this.$route.query.orderNumber || 0
  747. // this.init()
  748. },
  749. methods: {
  750. choosePrintChannel2GeneratePdf(){
  751. this.choosePrintChannleVisible = true;
  752. },
  753. handleAuditStatus(orderNumber){
  754. this.$http({
  755. url: this.$http.adornUrl('/platform/order/auditStatus/' + orderNumber),
  756. method: 'post',
  757. }).then(({ data }) => {
  758. if(data.status === "success"){
  759. this.$message({
  760. message: data.msg,
  761. type: 'success'
  762. });
  763. this.dataForm.auditStatus = this.dataForm.auditStatus == 0 || this.dataForm.auditStatus == null? 1:0;
  764. let auditStatusReturn = {auditStatus: this.dataForm.auditStatus, orderNumber: orderNumber};
  765. this.$emit('orderAuditStatusUpdate', auditStatusReturn)
  766. }else{
  767. this.$message({
  768. message: data.msg,
  769. type: 'error'
  770. })
  771. }
  772. })
  773. },
  774. modifyBuyerRemarks(){
  775. this.$http({
  776. url: this.$http.adornUrl('/platform/order/modifyRemarks'),
  777. method: 'post',
  778. data: this.$http.adornData({
  779. orderNumber: this.dataForm.orderNumber,
  780. remarks: this.dataForm.remarks
  781. }),
  782. }).then(({ data }) => {
  783. this.buyerRemarkVisible = false
  784. if(data){
  785. this.$message({
  786. message: "修改成功",
  787. type: 'success'
  788. })
  789. }else{
  790. this.$message({
  791. message: "修改失败",
  792. type: 'error'
  793. })
  794. }
  795. })
  796. },
  797. //修改下单时间
  798. modifyOrderCreateTime(){
  799. this.$http({
  800. url: this.$http.adornUrl('/platform/order/modifyOrderCreateTime'),
  801. method: 'post',
  802. data: this.$http.adornData({
  803. orderNumber: this.dataForm.orderNumber,
  804. createTime: this.dataForm.createTime
  805. }),
  806. }).then(({ data }) => {
  807. if(data){
  808. this.modifyCreateTimeVisible = false;
  809. this.$message({
  810. message: "修改成功",
  811. type: 'success'
  812. })
  813. this.modifyCreateTimeVisible = false;
  814. }else{
  815. this.$message({
  816. message: "修改失败",
  817. type: 'error'
  818. })
  819. }
  820. })
  821. },
  822. openDeliveryDialog(){
  823. this.devyVisible = true
  824. this.$nextTick(() => {
  825. this.$refs.orderDeliveryUpdate.init(this.dataForm)
  826. })
  827. },
  828. closeDialog(){
  829. this.visible = false;
  830. this.showOrderCard = false;
  831. this.pdfInfo = {};
  832. this.dataForm.printStatus = null;
  833. },
  834. /**
  835. * 生成作品打印PDF
  836. */
  837. generatePdf (printChannel) {
  838. this.generatePdfLoading = true;
  839. this.$http({
  840. url: this.$http.adornUrl('/platform/order/generatePdf'),
  841. method: 'post',
  842. data: this.$http.adornData({
  843. orderNumber: this.dataForm.orderNumber,
  844. printChannel: printChannel
  845. }),
  846. }).then(({ data }) => {
  847. this.choosePrintChannleVisible = false;
  848. if(data){
  849. this.$message({
  850. message: data,
  851. type: 'success'
  852. })
  853. }else{
  854. this.$message({
  855. message: data,
  856. type: 'error'
  857. })
  858. }
  859. }).catch(e =>{
  860. this.$message({
  861. message: e,
  862. type: 'error'
  863. })
  864. })
  865. },
  866. initOrderPdf() {
  867. if (this.dataForm.orderNumber) {
  868. this.$http({
  869. url: this.$http.adornUrl(`/printOrderPdf/printOrderPdf/info/${this.dataForm.orderNumber}`),
  870. method: 'get',
  871. params: this.$http.adornParams()
  872. }).then(({ data }) => {
  873. if (data) {
  874. this.pdfInfo = data;
  875. }
  876. })
  877. }
  878. },
  879. /*init() {
  880. this.visible = true
  881. this.$nextTick(() => {
  882. this.$refs['dataForm'].resetFields()
  883. })
  884. if (this.dataForm.orderNumber) {
  885. this.indexs = 0
  886. // 修改
  887. this.$http({
  888. url: this.$http.adornUrl(`/platform/orderDelivery/orderInfo/${this.dataForm.orderNumber}`),
  889. method: 'get',
  890. params: this.$http.adornParams()
  891. }).then(({ data }) => {
  892. data.deliveryExpresses.forEach(item => {
  893. if (item.deliveryDto) {
  894. item.deliveryDto.traces = item.deliveryDto.traces ? item.deliveryDto.traces.reverse() : item.deliveryDto.traces
  895. }
  896. })
  897. this.dataForm = data
  898. console.log("data",data)
  899. this.orderStatus = data.status || null
  900. this.deliveryExpresse = this.dataForm.deliveryExpresses[0]
  901. this.virtualRemarkList = JSON.parse(this.dataForm.virtualRemark)
  902. // 处理商品列表
  903. this.prodList = data.orderItems
  904. // this.initOrderPdf();
  905. if (data.orderItems.length === 1 &&
  906. data.orderItems[0].giveawayList &&
  907. data.orderItems[0].giveawayList.length) {
  908. // 单个商品且有赠品时,将主商品和赠品放在同一级列表中展示
  909. this.prodList = [...data.orderItems, ...data.orderItems[0].giveawayList]
  910. }
  911. })
  912. }
  913. },*/
  914. init (params) {
  915. console.log(params)
  916. this.dataForm.orderNumber = params.orderNumber || 0
  917. this.dataForm.shopId = params.shopId || null
  918. this.orderStatus = params.status || null
  919. this.visible = true
  920. this.$nextTick(() => {
  921. this.$refs['dataForm'].resetFields()
  922. })
  923. if (this.dataForm.orderNumber) {
  924. this.indexs = 0
  925. // 修改
  926. this.$http({
  927. url: this.$http.adornUrl(`/platform/orderDelivery/orderInfo/${this.dataForm.orderNumber}`),
  928. method: 'get',
  929. params: this.$http.adornParams()
  930. }).then(({ data }) => {
  931. this.dataForm = data
  932. this.deliveryExpresse = this.dataForm.deliveryExpresses[0]
  933. this.virtualRemarkList = JSON.parse(this.dataForm.virtualRemark)
  934. // 处理商品列表
  935. this.prodList = data.orderItems
  936. if (data.orderItems.length === 1 &&
  937. data.orderItems[0].giveawayList &&
  938. data.orderItems[0].giveawayList.length) {
  939. // 单个商品且有赠品时,将主商品和赠品放在同一级列表中展示
  940. this.prodList = [...data.orderItems, ...data.orderItems[0].giveawayList]
  941. }
  942. this.showOrderCard = true;
  943. // this.initPrintOrder();
  944. this.initOrderPdf();
  945. if(this.dataForm.payType === 1){
  946. //查询微信单号
  947. this.getWxPayNoByOrderNumber(this.dataForm.orderNumber);
  948. }else{
  949. this.payNo = null;
  950. }
  951. })
  952. }
  953. },
  954. getWxPayNoByOrderNumber(orderNumber){
  955. this.$http({
  956. url: this.$http.adornUrl(`/platform/order/getWxPyaNoByOrderNumber`),
  957. method: 'get',
  958. params: this.$http.adornParams({orderNumber, orderNumber})
  959. }).then(({ data }) => {
  960. this.payNo = data.payNo;
  961. })
  962. },
  963. getDataList() {
  964. this.$http({
  965. url: this.$http.adornUrl(`/platform/orderDelivery/orderInfo/${this.dataForm.orderNumber}`),
  966. method: 'get',
  967. params: this.$http.adornParams()
  968. }).then(({ data }) => {
  969. this.dataForm = data
  970. this.deliveryExpresse = this.dataForm.deliveryExpresses[0]
  971. })
  972. },
  973. /**
  974. * 物流事件
  975. */
  976. onClickListDelivery(delivery, index) {
  977. // this.deliveryExpresse = delivery
  978. this.$http({
  979. url: this.$http.adornUrl(`/platform/orderDelivery/deliveryOrder/${delivery.orderDeliveryId}`),
  980. method: 'get'
  981. }).then(({ data }) => {
  982. this.deliveryExpresse = data
  983. // console.log('onClickListDelivery-data', data)
  984. })
  985. this.indexs = index
  986. },
  987. // 表单提交
  988. dataFormSubmit() {
  989. },
  990. // 修改地址
  991. changeUserAddrOrder(userAddrOrder) {
  992. this.orderAddrUpdateVisible = true
  993. this.$nextTick(() => {
  994. const From = JSON.parse(JSON.stringify(this.dataForm))
  995. this.$refs.orderAddrUpdate.init(From)
  996. })
  997. },
  998. // 修改备注
  999. changeRemarks() {
  1000. this.orderRemarkUpdateVisible = true
  1001. this.$nextTick(() => {
  1002. this.$refs.orderRemarkUpdate.init(this.dataForm)
  1003. })
  1004. }
  1005. }
  1006. }
  1007. </script>
  1008. <style>
  1009. .detail-dialog .el-dialog {
  1010. min-width: 950px;
  1011. margin-top: 10vh !important;
  1012. }
  1013. .detail-dialog .goods-list .has-gutter th.is-leaf {
  1014. background: #f7f8fa;
  1015. color: #333;
  1016. border-bottom: 1px solid #ebeef5;
  1017. font-weight: 400;
  1018. border-right: 0;
  1019. }
  1020. .detail-dialog .goods-list .el-table td {
  1021. border-right: 0;
  1022. }
  1023. .left-line {
  1024. /* padding-left: 30px;
  1025. padding-bottom: 10px;
  1026. padding-top: 15px;
  1027. margin-left: -30px;
  1028. margin-top: -10px !important;
  1029. background-color: #fff; */
  1030. border-left: 1px solid #fff !important;
  1031. }
  1032. </style>
  1033. <style lang="scss" scoped>
  1034. .mod-order-orderInfo {
  1035. height: 100%;
  1036. width: 100%;
  1037. font: 14px Arial, "PingFang SC", "Hiragino Sans GB", STHeiti,
  1038. "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
  1039. color: #333;
  1040. .order-number {
  1041. display: flex;
  1042. align-items: center;
  1043. font-size: 14px;
  1044. }
  1045. .order-number .text {
  1046. color: #999;
  1047. }
  1048. .order-number .number,
  1049. .order-number .time {
  1050. display: flex;
  1051. align-items: center;
  1052. }
  1053. .order-number .time {
  1054. margin: 0 15px;
  1055. }
  1056. .order-state {
  1057. position: relative;
  1058. margin-top: 15px;
  1059. border: 1px solid #eee;
  1060. display: flex;
  1061. align-items: center;
  1062. }
  1063. .order-state .state-box {
  1064. padding: 20px 15px;
  1065. width: 40%;
  1066. border-right: 1px solid #eee;
  1067. }
  1068. .order-state .state-box .state {
  1069. font-size: 20px;
  1070. font-weight: 700;
  1071. line-height: 28px;
  1072. }
  1073. .order-state .state-box .state-des {
  1074. margin-top: 10px;
  1075. color: #999;
  1076. }
  1077. .order-state .state-box .actions {
  1078. margin-top: 15px;
  1079. }
  1080. .order-state .state-box .actions .item {
  1081. display: flex;
  1082. align-items: center;
  1083. }
  1084. .order-state .state-box .actions .item .el-button--text {
  1085. cursor: pointer;
  1086. }
  1087. .order-state .state-box .actions .item .item-btn {
  1088. padding: 3px 10px;
  1089. border: 1px solid #eee;
  1090. border-radius: 2px;
  1091. }
  1092. .order-state .state-steps {
  1093. flex: 1;
  1094. margin-left: -80px;
  1095. }
  1096. .order-state .state-steps .el-form-item {
  1097. margin-bottom: 0;
  1098. }
  1099. .packages {
  1100. margin-top: 15px;
  1101. }
  1102. .packages .p-tab {
  1103. border-bottom: 1px solid #eee;
  1104. display: flex;
  1105. align-items: center;
  1106. }
  1107. .packages .p-tab .item {
  1108. // background: #f2f2f2;
  1109. // border: 1px solid #eee;
  1110. // margin-right: -1px;
  1111. // margin-bottom: -1px;
  1112. // position: relative;
  1113. // padding: 8px 20px;
  1114. // cursor: pointer;
  1115. background: #F7F8FA;
  1116. margin-right: -1px;
  1117. margin-bottom: -1px;
  1118. position: relative;
  1119. text-align: center;
  1120. line-height: 44px;
  1121. width: 90px;
  1122. cursor: pointer;
  1123. font-size: 12px;
  1124. font-weight: bold;
  1125. height: 44px;
  1126. }
  1127. .packages .p-tab .item:first-child {
  1128. border-radius: 3px 0 0 0;
  1129. }
  1130. .packages .p-tab .item:last-child {
  1131. border-radius: 0 3px 0 0;
  1132. }
  1133. .packages .p-tab .item.active {
  1134. background: #fff;
  1135. border-bottom: 1px solid #fff;
  1136. }
  1137. .packages .p-con {
  1138. border: 1px solid #eee;
  1139. border-top: 0;
  1140. padding: 20px;
  1141. display: flex;
  1142. }
  1143. .packages .p-con .deliver-msg {
  1144. width: 40%;
  1145. }
  1146. .packages .p-con .deliver-msg .d-item {
  1147. display: flex;
  1148. align-items: center;
  1149. margin-bottom: 10px;
  1150. }
  1151. .packages .p-con .deliver-msg .d-item .text {
  1152. width: 80px;
  1153. }
  1154. .packages .p-con .deliver-msg .d-goods {
  1155. position: relative;
  1156. width: 334px;
  1157. }
  1158. .packages .p-con .deliver-msg .d-goods.over {
  1159. padding: 0 32px;
  1160. }
  1161. .packages .p-con .deliver-msg .d-goods .arrow-box {
  1162. position: absolute;
  1163. top: 40%;
  1164. -webkit-transform: translateY(-50%);
  1165. -moz-transform: translateY(-50%);
  1166. transform: translateY(-50%);
  1167. left: 0;
  1168. width: 100%;
  1169. display: none;
  1170. }
  1171. .packages .p-con .deliver-msg .d-goods.over .arrow-box {
  1172. display: block;
  1173. }
  1174. .packages .p-con .deliver-msg .d-goods .arrow-box .arrow {
  1175. width: 22px;
  1176. height: 22px;
  1177. background: #eee;
  1178. position: absolute;
  1179. z-index: 2;
  1180. border-radius: 50%;
  1181. cursor: pointer;
  1182. }
  1183. .packages .p-con .deliver-msg .d-goods .arrow-box .arrow.disable {
  1184. opacity: 0.5;
  1185. cursor: not-allowed;
  1186. }
  1187. .packages .p-con .deliver-msg .d-goods .arrow-box .arrow.prev {
  1188. left: 0;
  1189. transform: rotate(180deg);
  1190. }
  1191. .packages .p-con .deliver-msg .d-goods .arrow-box .arrow.next {
  1192. right: 0;
  1193. }
  1194. .packages .p-con .deliver-msg .d-goods .arrow-box .arrow::before,
  1195. .packages .p-con .deliver-msg .d-goods .arrow-box .arrow::after {
  1196. position: absolute;
  1197. top: 6px;
  1198. display: block;
  1199. width: 0;
  1200. height: 0;
  1201. content: " ";
  1202. font-size: 0;
  1203. border: 5px solid transparent;
  1204. }
  1205. .packages .p-con .deliver-msg .d-goods .arrow-box .arrow::before {
  1206. left: 10px;
  1207. border-left: 5px solid #999;
  1208. }
  1209. .packages .p-con .deliver-msg .d-goods .arrow-box .arrow::after {
  1210. left: 8px;
  1211. border-left: 5px solid #eee;
  1212. }
  1213. .packages .p-con .deliver-msg .d-goods .goods-box {
  1214. display: flex;
  1215. overflow: hidden;
  1216. }
  1217. .packages .p-con .deliver-msg .d-goods .goods-box .item {
  1218. margin-right: 10px;
  1219. font-size: 12px;
  1220. cursor: pointer;
  1221. }
  1222. .packages .p-con .deliver-msg .d-goods .goods-box .item:last-child {
  1223. margin: 0;
  1224. }
  1225. .packages .p-con .deliver-msg .d-goods .goods-box .item .img {
  1226. width: 60px;
  1227. height: 60px;
  1228. font-size: 0;
  1229. margin-bottom: 3px;
  1230. }
  1231. .packages .p-con .deliver-msg .d-goods .goods-box .item .img img {
  1232. width: 100%;
  1233. height: 100%;
  1234. }
  1235. .packages .p-con .deliver-msg .d-goods .goods-box .item .name,
  1236. .packages .p-con .deliver-msg .d-goods .goods-box .item .number {
  1237. width: 60px;
  1238. white-space: nowrap;
  1239. overflow: hidden;
  1240. text-overflow: ellipsis;
  1241. color: #999;
  1242. }
  1243. .packages .p-con .logistics {
  1244. flex: 1;
  1245. }
  1246. .packages .p-con .logistics .l-tit {
  1247. display: flex;
  1248. }
  1249. .packages .p-con .logistics .l-tit .l-state {
  1250. color: #c00;
  1251. }
  1252. .packages .p-con .logistics .logistics-box {
  1253. height: 175px;
  1254. overflow-y: scroll;
  1255. position: relative;
  1256. margin-top: 15px;
  1257. }
  1258. .packages .p-con .logistics .logistics-box::before {
  1259. position: absolute;
  1260. left: 0;
  1261. top: 0;
  1262. display: block;
  1263. width: 10px;
  1264. height: 10px;
  1265. content: " ";
  1266. font-size: 0;
  1267. background: #fff;
  1268. z-index: 1;
  1269. }
  1270. .packages .p-con .logistics .logistics-box::after {
  1271. position: absolute;
  1272. left: 6px;
  1273. top: 0;
  1274. display: block;
  1275. // width: 1px;
  1276. height: 100%;
  1277. content: " ";
  1278. font-size: 0;
  1279. background: #eee;
  1280. z-index: 0;
  1281. }
  1282. .packages .p-con .logistics .logistics-box .item {
  1283. padding: 0px 0 40px 25px;
  1284. position: relative;
  1285. margin-left: 6px;
  1286. border-left: 1px solid #eee;
  1287. }
  1288. .packages .p-con .logistics .logistics-box .item::before {
  1289. position: absolute;
  1290. left: -10px;
  1291. top: 0px;
  1292. display: block;
  1293. width: 19px;
  1294. height: 19px;
  1295. border-radius: 50%;
  1296. content: " ";
  1297. font-size: 0;
  1298. background: #ccc;
  1299. border: 5px solid #fff;
  1300. z-index: 2;
  1301. }
  1302. .packages .p-con .logistics .logistics-box .item:first-child:before {
  1303. background: #c00;
  1304. }
  1305. .packages .p-con .logistics .logistics-box .item .time {
  1306. color: #999;
  1307. }
  1308. .packages .p-con .logistics .logistics-box .item .text {
  1309. margin-top: 5px;
  1310. width: 400px;
  1311. }
  1312. .order-info {
  1313. background: #f7f8fa;
  1314. margin-top: 20px;
  1315. display: flex;
  1316. padding: 20px;
  1317. }
  1318. .order-info .info-item {
  1319. width: 25%;
  1320. padding-right: 30px;
  1321. }
  1322. .order-info .info-item .item-tit {
  1323. font-weight: 600;
  1324. }
  1325. .order-info .info-item .item {
  1326. margin-top: 10px;
  1327. display: flex;
  1328. line-height: 20px;
  1329. }
  1330. .order-info .info-item .item .text {
  1331. // width: auto;
  1332. // min-width: 70px;
  1333. white-space: nowrap;
  1334. }
  1335. .order-info .info-item .item .res {
  1336. word-break: break-word;
  1337. }
  1338. .goods-list {
  1339. margin-top: 20px;
  1340. }
  1341. .goods-list .df {
  1342. display: flex;
  1343. align-items: center;
  1344. }
  1345. .goods-list .df .name {
  1346. margin-left: 10px;
  1347. line-height: 20px;
  1348. flex: 1;
  1349. }
  1350. .goods-list .df .name .gift-icon {
  1351. display: inline-block;
  1352. min-width: 34px;
  1353. max-height: 21px;
  1354. text-align: center;
  1355. padding: 4px;
  1356. border-radius: 4px;
  1357. background: #e43130;
  1358. color: #fff;
  1359. font-size: 13px;
  1360. line-height: 1em;
  1361. margin-right: 5px;
  1362. }
  1363. .goods-list .goods-total {
  1364. display: flex;
  1365. justify-content: flex-end;
  1366. margin-top: 20px;
  1367. }
  1368. .goods-list .goods-total .item {
  1369. display: flex;
  1370. align-items: center;
  1371. color: #999;
  1372. margin-top: 5px;
  1373. }
  1374. .goods-list .df .prod-pic {
  1375. max-width: 60px;
  1376. margin-right: 6px;
  1377. flex: 1;
  1378. }
  1379. .goods-list .goods-total .item .text {
  1380. width: 200px;
  1381. text-align: right;
  1382. }
  1383. .goods-list .goods-total .item .number {
  1384. width: 130px;
  1385. text-align: right;
  1386. }
  1387. .goods-list .goods-total .item.act-price {
  1388. margin-top: 20px;
  1389. color: #333;
  1390. font-weight: 600;
  1391. }
  1392. .goods-list .goods-total .item.act-price .number {
  1393. color: #c00;
  1394. }
  1395. .order-log {
  1396. margin-top: 20px;
  1397. border-top: 1px dashed #e9eaec;
  1398. padding: 20px 10px;
  1399. }
  1400. .order-log .log-title {
  1401. height: 30px;
  1402. width: 100%;
  1403. line-height: 30px;
  1404. font-weight: bold;
  1405. }
  1406. .order-status {
  1407. display: inline-block;
  1408. width: auto;
  1409. text-align: center;
  1410. margin-top: 5px;
  1411. padding: 0px 4px;
  1412. border: 1px solid #e43130;
  1413. border-radius: 2px;
  1414. color: #e43130;
  1415. font-size: 12px;
  1416. }
  1417. .order-log .log-cont {
  1418. color: #02a1e9;
  1419. margin-top: 20px;
  1420. }
  1421. // 赠品
  1422. .gift-prod .item {
  1423. margin-top: 5px;
  1424. line-height: 1em;
  1425. .name {
  1426. display: inline-block;
  1427. margin-right: 15px;
  1428. line-height: 20px;
  1429. // max-width: 400px;
  1430. // overflow: hidden;
  1431. // text-overflow: ellipsis;
  1432. // white-space: nowrap;
  1433. }
  1434. }
  1435. }
  1436. // 小屏样式适配
  1437. .flex-wrap {
  1438. flex-wrap: wrap;
  1439. }
  1440. .small-width {
  1441. width: 50% !important;
  1442. margin-bottom: 10px;
  1443. }
  1444. </style>