detail.vue 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767
  1. <!-- 订单详情页面 -->
  2. <template>
  3. <scroll-view class="container" scroll-y @scrolltolower='getData' v-if="allData && isShow">
  4. <view class="main_content" :style="{backgroundImage:'url('+commonBg+')'}">
  5. <!-- 订单状态 start -->
  6. <view class="order_state">
  7. <!-- 待付款 start orderState == 10-->
  8. <block v-if="allData.orderState == 10">
  9. <view class="state_title">
  10. <image :src="imgUrl+'order-detail/to_pay.png'" mode=""></image>
  11. <text>{{allData.orderStateValue}}</text>
  12. </view>
  13. <!-- 定金预售 已付定金 还未到付尾款阶段 start -->
  14. <view class="state_time" v-if="allData.orderType == 103&&allData.orderSubState == 102&&!(allData.presellInfo&&allData.presellInfo.isStartRemainPay)">
  15. {{allData.presellInfo.remainStartTime}} {{$L('开始付尾款')}}
  16. </view>
  17. <!-- 定金预售 已付定金 还未到付尾款阶段 end -->
  18. <view class="state_time" v-else-if="stateTime">
  19. {{$L('剩余')}}{{stateTime}}{{allData.orderType==105&&allData.orderSubState==102&&allData.ladderGroupDetailInfo.depositRemainTime>0?$L('生成'):$L('自动关闭')}}
  20. </view>
  21. </block>
  22. <!-- 待付款 end-->
  23. <!-- 待发货 orderState == 20-->
  24. <block v-if="allData.orderState == 20">
  25. <view class="state_title">
  26. <image :src="imgUrl+'order-detail/delivered.png'" mode=""></image>
  27. <text>{{allData.orderStateValue}}</text>
  28. </view>
  29. <!-- 预售展示发货时间 start -->
  30. <view v-if="allData.orderType==103&&allData.presellInfo.deliverTime" class="state_time">
  31. {{allData.presellInfo.deliverTime}} {{$L('开始发货')}}</view>
  32. <!-- 预售展示发货时间 end -->
  33. </block>
  34. <!-- 待发货 end-->
  35. <!-- 待收货 -->
  36. <block v-if="allData.orderState == 30">
  37. <view class="state_title">
  38. <image :src="imgUrl+'order-detail/wait_receive.png'" mode=""
  39. style="width: 71rpx;height: 45rpx;"></image>
  40. <text>{{allData.orderStateValue}}</text>
  41. </view>
  42. <view class="state_time" v-if="stateTime">{{$L('还剩')}}{{stateTime}}{{$L('自动确认')}}</view>
  43. </block>
  44. <!-- 待评价 -->
  45. <block v-if="allData.orderState == 40">
  46. <view class="state_title await">
  47. <image :src="imgUrl+'order-detail/success.png'" mode="" style="width: 46rpx;height: 51rpx;">
  48. </image>
  49. <text>{{allData.orderStateValue}}</text>
  50. </view>
  51. </block>
  52. <!-- 待收货 end-->
  53. <!-- 取消订单,交易关闭 start orderState == 0 -->
  54. <block v-if="allData.orderState == 0">
  55. <view class="state_title">
  56. <image :src="imgUrl+'order-detail/to_pay.png'" mode=""></image>
  57. <text>{{allData.orderStateValue}}</text>
  58. </view>
  59. <view class="state_reason">{{allData.refuseReason}}</view>
  60. <!-- 注: allData.cancelRemark 不为空 时为平台取消 否则为会员取消 -->
  61. <view class="state_remark" v-if="allData.refuseRemark">{{allData.refuseRemark}}</view>
  62. </block>
  63. <!-- 取消订单,交易关闭 end-->
  64. </view>
  65. <!-- 订单状态 end -->
  66. <!-- 物流信息 start -->
  67. <view class="logistics_information"
  68. v-if="allData.orderState >= 30 && allData.routeList && allData.routeList.length > 0">
  69. <image :src="imgUrl+'order-detail/wuliu.png'" mode="" class="logistics_image"></image>
  70. <view class="logistics_des_right">
  71. <view class="logistics_info">
  72. <view class="logistics_des">{{allData.routeList[0].acceptStation}}</view>
  73. <view class="logistics_time">{{allData.routeList[0].acceptTime}}</view>
  74. </view>
  75. <image :src="imgUrl+'order-detail/right_down.png'" mode="" class="right_down"
  76. @click="lookLogistics()"></image>
  77. </view>
  78. </view>
  79. <!-- 物流信息 end -->
  80. <!-- 买家个人信息 start-->
  81. <view class="buyer_info">
  82. <image :src="imgUrl+'order-detail/map.png'" mode="" class="buyer_map"></image>
  83. <view class="info_det">
  84. <view class="info_detail">
  85. <view class="info_name">
  86. <text class="buyer_namer">{{allData.receiverName}}</text>
  87. <text class="buyer_phone">{{allData.receiverMobile}}</text>
  88. </view>
  89. <view class="info_address">{{allData.receiverAreaInfo+allData.receiverAddress}}</view>
  90. </view>
  91. </view>
  92. </view>
  93. <!-- 买家个人信息 end-->
  94. <!-- 订单内商品信息 start -->
  95. <view class="order_goods">
  96. <view class="goods_list">
  97. <view v-for="(store,index) in orderProductList" :key="index" class="store_item">
  98. <view class="store_name" @click="goStore(store.storeId)">
  99. <image class="store_logo" :src="imgUrl+'goods_detail/store_logo.png'"></image>
  100. <text class="store_name_text">{{store.storeName}}</text>
  101. <text class="iconfont iconziyuan11"></text>
  102. </view>
  103. <view class="goods_pre" v-for="(item,indexChild) in store.orderProductListVOList" :key="indexChild"
  104. @click="goProductDetail(item.productId,item.goodsId)">
  105. <!-- #ifdef MP-WEIXIN || APP-PLUS -->
  106. <view class="goods_image">
  107. <image :src="item.productImage" mode="aspectFill"></image>
  108. </view>
  109. <!-- #endif -->
  110. <!-- #ifdef H5 -->
  111. <view class="goods-img"
  112. :style="{backgroundImage: 'url('+item.productImage+')'}"></view>
  113. <!-- #endif -->
  114. <view class="goods_pre_right">
  115. <view class="goods_des">
  116. <view class="goods_name">{{item.goodsName}}</view>
  117. <view class="goods_spec" v-if="item.specValues">{{item.specValues}}</view>
  118. </view>
  119. <view class="goods_prices">
  120. <view class="goods_price"
  121. v-if="item.productShowPrice && $getPartNumber(item.productShowPrice,'int') && $getPartNumber(item.productShowPrice,'decimal')">
  122. <text class="unit">¥</text>
  123. <text class="price_int">{{$getPartNumber(item.productShowPrice,'int')}}</text>
  124. <text
  125. class="price_decimal">{{$getPartNumber(item.productShowPrice,'decimal')}}</text>
  126. </view>
  127. <view class="goods_num">*{{item.productNum}}</view>
  128. <block v-if="item.afsButton != null ">
  129. <!-- 退款中 可查看退款详情 售后按钮,100-退款(商家未发货),200-退款(商家发货,买家未收货),300-申请售后,401-退款中,402-退款完成,403-换货中,404-换货完成 301,退款失败-平台审核失败-->
  130. <view class="refund_btn"
  131. v-if="item.afsButton == 401 || item.afsButton == 402 || item.afsButton == 403 || item.afsButton == 404 || item.afsButton == 301"
  132. @click.stop="lookRefundDetail(item.afsSn,item.afsButton)">
  133. {{item.afsButtonValue}}</view>
  134. <!-- 退款 可申请退款-->
  135. <view class="refund_btn"
  136. v-if="item.isGift == 0 && (item.afsButton == 100 || item.afsButton == 200 || item.afsButton == 300)"
  137. @click.stop="selectService(allData.orderSn,item.orderProductId)">
  138. {{item.afsButtonValue}}</view>
  139. </block>
  140. </view>
  141. </view>
  142. </view>
  143. <!-- 订单内商品信息 end -->
  144. <view class="store_price_info no_top" v-if="allData.orderState != 10">
  145. <view class="freight">
  146. <text class="freight_title">{{$L('运费')}}</text>
  147. <text class="freight_price">¥{{allData.totalExpress}}</text>
  148. </view>
  149. <view class="actual_payment">
  150. <view class="actual_payment_title">
  151. <text>{{$L('实付款')}}</text>
  152. <text>{{$L('(含运费)')}}</text>
  153. </view>
  154. <view class="actual_payment_price">
  155. <text class="unit">¥</text>
  156. <text>{{$getPartNumber(allData.actualPayment,'int')}}</text>
  157. <text>{{$getPartNumber(allData.actualPayment,'decimal')}}</text>
  158. </view>
  159. </view>
  160. </view>
  161. <!-- 联系商家,拨打电话 start-->
  162. <view class="share_btn">
  163. <view class="share_btn_pre" @click="contactShop(store)">
  164. <image :src="imgUrl+'order-detail/lianxishangjia.png'" mode=""></image>
  165. <text>{{$L('联系商家')}}</text>
  166. </view>
  167. <view class="share_btn_pre" @click="goCall()">
  168. <image :src="imgUrl+'order-detail/dadianhua.png'" mode=""></image>
  169. <text>{{$L('拨打电话')}}</text>
  170. </view>
  171. </view>
  172. <!-- 联系商家,拨打电话 end-->
  173. </view>
  174. </view>
  175. </view>
  176. <!-- 定金预售订单信息 start -->
  177. <view class="ladder_group flex_column_start_start"
  178. v-if="allData.orderType == 103&&allData.presellInfo.isAllPay==0">
  179. <template v-for="(presale_item, presale_index) in presaleInfo">
  180. <view :class="{item:true, split:presale_index<(presaleInfo.length-1)?true:false}">
  181. <view class="title flex_row_start_center">
  182. <view class="right_split"></view>
  183. <view class="content">{{presale_item.title}}</view>
  184. </view>
  185. <view class="goods_amount flex_row_between_center">
  186. <text class="left">{{presale_item.goods_left}}</text>
  187. <text
  188. class="right">{{presale_item.goods_right=='--'?'':$L('¥')}}{{presale_item.goods_right}}</text>
  189. </view>
  190. <view v-if="presale_item.goods_expand_right" class="goods_amount flex_row_between_center">
  191. <text class="left">{{presale_item.goods_expand_left}}</text>
  192. <text
  193. class="right">{{presale_item.goods_expand_right=='--'?'':$L('¥')}}{{presale_item.goods_expand_right}}</text>
  194. </view>
  195. <view class="need_pay_amount flex_row_between_center">
  196. <text class="left">{{presale_item.need_pay_left}}</text>
  197. <text
  198. :class="{right:true, cur:presale_item.is_cur==1?true:false}">{{presale_item.need_pay_right=='--'?'':$L('¥')}}{{presale_item.need_pay_right}}</text>
  199. </view>
  200. </view>
  201. </template>
  202. </view>
  203. <!-- 定金预售订单信息 end -->
  204. <!-- 阶梯团订单信息 start -->
  205. <view class="ladder_group flex_column_start_start" v-if="allData.orderType == 105">
  206. <template v-for="(ladder_pro_item, ladder_pro_index) in ladderInfo">
  207. <view :class="{item:true, split:ladder_pro_index<(ladderInfo.length-1)?true:false}">
  208. <view class="title flex_row_start_center">
  209. <view class="right_split"></view>
  210. <view class="content">{{ladder_pro_item.title}}</view>
  211. </view>
  212. <view class="goods_amount flex_row_between_center">
  213. <text class="left">{{ladder_pro_item.goods_left}}</text>
  214. <text
  215. class="right">{{ladder_pro_item.goods_right=='--'?'':$L('¥')}}{{ladder_pro_item.goods_right}}</text>
  216. </view>
  217. <view class="need_pay_amount flex_row_between_center">
  218. <text class="left">{{ladder_pro_item.need_pay_left}}</text>
  219. <text
  220. :class="{right:true, cur:ladder_pro_item.is_cur==1?true:false}">{{ladder_pro_item.need_pay_right=='--'?'':$L('¥')}}{{ladder_pro_item.need_pay_right}}</text>
  221. </view>
  222. </view>
  223. </template>
  224. </view>
  225. <!-- 阶梯团订单信息 end -->
  226. <!-- //订单价格信息 -->
  227. <view class="store_price_info" v-if="allData.orderState == 10">
  228. <view class="actual_payment">
  229. <view class="actual_payment_title">
  230. <text>{{$L('商品总额')}}</text>
  231. </view>
  232. <view class="actual_payment_price">
  233. <text class="unit">¥</text>
  234. <text>{{$getPartNumber(allData.totalMoney,'int')}}</text>
  235. <text>{{$getPartNumber(allData.totalMoney,'decimal')}}</text>
  236. </view>
  237. </view>
  238. <view class="freight">
  239. <text class="freight_title">{{$L('运费')}}</text>
  240. <text class="freight_price">¥{{allData.totalExpress}}</text>
  241. </view>
  242. <view class="actual_payment">
  243. <view class="actual_payment_title">
  244. <text>{{$L('实付款')}}</text>
  245. <text>{{$L('(含运费)')}}</text>
  246. </view>
  247. <view class="actual_payment_price">
  248. <text class="unit">¥</text>
  249. <text>{{$getPartNumber(allData.actualPayment,'int')}}</text>
  250. <text>{{$getPartNumber(allData.actualPayment,'decimal')}}</text>
  251. </view>
  252. </view>
  253. </view>
  254. <!-- 订单信息 start-->
  255. <view class="order_des">
  256. <view class="order_des_title">{{$L('订单信息')}}</view>
  257. <view class="order_des_pre">
  258. <text><text class="invoice">{{$L('发票')}}</text>:</text>
  259. <text
  260. v-if="allData && allData.invoice && allData.invoice.invoiceTitle">{{allData.invoice.invoiceTitle}}</text>
  261. <text v-else>--</text>
  262. </view>
  263. <view class="order_des_pre" v-if="allData.orderTypeValue">
  264. <text>{{$L('订单类型')}}:</text>
  265. <text>{{allData.orderTypeValue}}{{$L('订单')}}</text>
  266. </view>
  267. <view class="order_des_pre">
  268. <text>{{$L('订单编号')}}:</text>
  269. <text>{{allData.orderSn}}</text>
  270. </view>
  271. <view class="order_des_pre" v-if="allData.orderRemark">
  272. <text>{{$L('订单备注')}}:</text>
  273. <text>{{allData.orderRemark}}</text>
  274. </view>
  275. <block v-if="orderLogs && orderLogs.length > 0">
  276. <view class="order_des_pre" v-for="(item,index) in orderLogs" :key="index">
  277. <text>{{item.orderStateLog == 10 ? '创建时间:' : item.orderStateLog == 20 ? '付款时间:' :
  278. item.orderStateLog == 30 ? '发货时间:' : item.orderStateLog == 40 ? '完成时间:' :item.orderStateLog == 102?'定金支付时间:':'取消时间:'}}</text>
  279. <text>{{item.logTime}}</text>
  280. </view>
  281. </block>
  282. </view>
  283. <!-- 订单信息 end-->
  284. <!-- 推荐商品 start-->
  285. <view class="recomment">
  286. <recommendGoods ref='recomment_goods' />
  287. </view>
  288. <!-- 推荐商品 end-->
  289. </view>
  290. <!-- 详情底部操作按钮 start-->
  291. <view class="order_det_bottom"
  292. v-if="(allData.orderState == 10||allData.orderState == 20||allData.orderState == 30||allData.orderState == 40||allData.orderState == 0)">
  293. <!-- 待付款 -->
  294. <block v-if="allData.orderState == 10">
  295. <view class="edit_address_btn" @click="editAddress">{{$L('修改地址')}}</view>
  296. <view class="cancel_order" @click="cancelPopup()">{{$L('取消订单')}}</view>
  297. <template
  298. v-if="!(allData.orderType == 105&&allData.orderSubState==102&&allData.ladderGroupDetailInfo.depositRemainTime>0||(allData.orderType == 103&&allData.orderSubState==102&&allData.presellInfo.remainEndTime>0))||(allData.presellInfo&&allData.presellInfo.isStartRemainPay)">
  299. <view v-show="ladderGroupDisplayStatus" class="go_pay" @click="goPay">{{$L('立即支付')}}</view>
  300. </template>
  301. </block>
  302. <!-- 待发货 -->
  303. <block v-if="allData.orderState == 20">
  304. <view class="edit_address_btn" @click="editAddress">{{$L('修改地址')}}</view>
  305. </block>
  306. <!-- 待收货 -->
  307. <block v-if="allData.orderState == 30">
  308. <view class="cancel_order" @click="lookLogistics()">{{$L('查看物流')}}</view>
  309. <view class="confirm_receipt" @click="confirmReceipt()">{{$L('确认收货')}}</view>
  310. </block>
  311. <!-- 待评价 -->
  312. <block v-if="allData.orderState == 40">
  313. <view class="cancel_order" @click="lookLogistics()">{{$L('查看物流')}}</view>
  314. <view class="go_pay" @click="goEvaluate()" v-if="allData.evaluateState!=3">{{$L('评价')}}</view>
  315. </block>
  316. <!-- 订单取消 -->
  317. <block v-if="allData.orderState == 0">
  318. <view class="edit_address_btn" @click="delOrder()">{{$L('删除订单')}}</view>
  319. </block>
  320. </view>
  321. <!-- 详情底部操作按钮 end-->
  322. <!-- 取消订单选择原因弹框 -->
  323. <uni-popup ref="cancelPopup" type="bottom">
  324. <view class="cancel_popup">
  325. <view class="popup_top">
  326. <text>{{$L('取消原因')}}</text>
  327. <image :src="imgUrl+'order-detail/guanbi.png'" mode="" @click="notCancel"></image>
  328. </view>
  329. <scroll-view class="uni-list cancel_list" scroll-x="true">
  330. <radio-group @change="radioChange">
  331. <label class="cancle_pre" v-for="(item,index) in cancelList" :key="index">
  332. <text>{{item.content}}</text>
  333. <radio :value="item.value" :checked="item.value === current" color="#fc1c1c"
  334. style="transform:scale(0.8);margin-right:0;" />
  335. </label>
  336. </radio-group>
  337. </scroll-view>
  338. <view class="cancel_popup_btn">
  339. <text class="" @click="notCancel()">{{$L('暂不取消')}}</text>
  340. <text class="" @click="confirmCancel()">{{$L('确定取消')}}</text>
  341. </view>
  342. </view>
  343. </uni-popup>
  344. <!-- 预售,阶梯团定金取消订单提示 -->
  345. <uni-popup ref="popup" type="dialog">
  346. <uni-popup-dialog type="input" title ="提示" content="取消该订单定金不予退还,确定取消?" :duration="2000" @close="acDialog(false)" @confirm="acDialog(true)"></uni-popup-dialog>
  347. </uni-popup>
  348. </scroll-view>
  349. </template>
  350. <script>
  351. import {
  352. mapState, mapMutations
  353. } from 'vuex';
  354. import recommendGoods from "@/components/recommend-goods.vue";
  355. import uniPopup from '@/components/uni-popup/uni-popup.vue';
  356. import uniPopupDialog from '@/components/uni-popup/uni-popup-dialog.vue';
  357. let startY = 0,
  358. moveY = 0,
  359. pageAtTop = true;
  360. export default {
  361. components: {
  362. recommendGoods,
  363. uniPopup,
  364. uniPopupDialog
  365. },
  366. data() {
  367. return {
  368. imgUrl: getApp().globalData.imgUrl,
  369. coverTransform: 'translateY(0px)',
  370. coverTransition: '0s',
  371. moving: false,
  372. orderSn: '', //订单号
  373. parentSn: '',
  374. allData: {}, //订单详细信息
  375. orderProductList: [], //订单商品列表
  376. cancelList: [], //取消原因列表
  377. current: '0', //取消原因当前点击的是第0项
  378. reasonId: -1, //取消原因当前点击的原因id
  379. stateTime: '', //等待买家付款的剩余时间
  380. isShow: false,
  381. orderLogs: [], //订单日志
  382. secInterval: '', //定时器
  383. ladderInfo: [],//阶梯团信息
  384. presaleInfo: [],//定金预售信息
  385. commonBg: getApp().globalData.imgUrl + 'order/detail_bg.png',
  386. ladderGroupDisplayStatus:true //立即支付按钮显示状态(此变量只在阶梯团商品下起作用)
  387. }
  388. },
  389. async onLoad(option) {
  390. //订单号
  391. this.orderSn = option.orderSn;
  392. },
  393. onShow(option) {
  394. this.getOrderDetail();
  395. },
  396. onUnload() {
  397. if (this.secInterval) {
  398. clearInterval(this.secInterval)
  399. }
  400. },
  401. computed: {
  402. ...mapState(['hasLogin', 'userInfo', 'userCenterData'])
  403. },
  404. methods: {
  405. ...mapMutations(['saveChatBaseInfo']),
  406. //去店铺
  407. goStore(storeid) {
  408. uni.navigateTo({
  409. url: '/pages/store/shopHomePage?vid=' + storeid
  410. })
  411. },
  412. /**
  413. * 统一跳转接口,拦截未登录路由
  414. * navigator标签现在默认没有转场动画,所以用view
  415. */
  416. navTo(url) {
  417. if (!this.hasLogin) {
  418. url = '/pages/public/login';
  419. }
  420. uni.navigateTo({
  421. url
  422. })
  423. },
  424. /**
  425. * 会员卡下拉和回弹
  426. * 1.关闭bounce避免ios端下拉冲突
  427. * 2.由于touchmove事件的缺陷(以前做小程序就遇到,比如20跳到40,h5反而好很多),下拉的时候会有掉帧的感觉
  428. * transition设置0.1秒延迟,让css来过渡这段空窗期
  429. * 3.回弹效果可修改曲线值来调整效果,推荐一个好用的bezier生成工具 http://cubic-bezier.com/
  430. */
  431. coverTouchstart(e) {
  432. if (pageAtTop === false) {
  433. return;
  434. }
  435. this.coverTransition = 'transform .1s linear';
  436. startY = e.touches[0].clientY;
  437. },
  438. coverTouchmove(e) {
  439. moveY = e.touches[0].clientY;
  440. let moveDistance = moveY - startY;
  441. if (moveDistance < 0) {
  442. this.moving = false;
  443. return;
  444. }
  445. this.moving = true;
  446. if (moveDistance >= 80 && moveDistance < 100) {
  447. moveDistance = 80;
  448. }
  449. if (moveDistance > 0 && moveDistance <= 80) {
  450. this.coverTransform = `translateY(${moveDistance}px)`;
  451. }
  452. },
  453. coverTouchend() {
  454. if (this.moving === false) {
  455. return;
  456. }
  457. this.moving = false;
  458. this.coverTransition = 'transform 0.3s cubic-bezier(.21,1.93,.53,.64)';
  459. this.coverTransform = 'translateY(0px)';
  460. },
  461. //获取订单详情信息
  462. getOrderDetail() {
  463. uni.showLoading({
  464. title: '加载中'
  465. });
  466. let that = this;
  467. let param = {};
  468. param.url = 'v3/business/front/orderInfo/detail';
  469. param.method = 'POST';
  470. param.data = {};
  471. param.data.orderSn = that.orderSn;
  472. that.$request(param).then(res => {
  473. if (res.state == 200) {
  474. let result = res.data;
  475. that.orderProductList = result.childOrdersVOS;
  476. that.orderLogs = result.orderLogs.reverse();
  477. that.allData = result || {};
  478. that.isShow = true;
  479. that.parentSn = res.data.parentSn
  480. if (result.orderType == 105) {
  481. //阶梯团信息
  482. let ladderInfo = result.ladderGroupDetailInfo;//阶梯团信息
  483. let tmpData = [];
  484. tmpData.push({
  485. key: 0,
  486. title: that.$L('阶段1:等待买家付款'),
  487. goods_left: that.$L('商品定金'),
  488. goods_right: ladderInfo.advanceDeposit,
  489. need_pay_left: that.$L('定金需付款'),
  490. need_pay_right: ladderInfo.needAdvanceDeposit,
  491. is_cur: 0,
  492. });
  493. if (ladderInfo.orderSubState == 101) {
  494. tmpData[0].is_cur = 1;
  495. this.countDownBySecond(result.remainTime,result);
  496. } else if (ladderInfo.orderSubState > 101) {
  497. tmpData[0].title = that.$L('阶段1:已完成');
  498. tmpData.push({
  499. key: 1,
  500. title: ladderInfo.orderSubState == 102 ? that.$L('阶段2:等待买家付款') : that.$L('阶段2:已完成'),
  501. goods_left: that.$L('商品尾款'),
  502. goods_right: ladderInfo.remainAmount,
  503. need_pay_left: that.$L('尾款需付款'),
  504. need_pay_right: ladderInfo.needRemainAmount,
  505. is_cur: ladderInfo.orderSubState == 102 ? 1 : 0
  506. });
  507. if (ladderInfo.orderSubState == 102 && ladderInfo.depositRemainTime > 0) {
  508. tmpData[1].title = that.$L('尾款生成中');
  509. tmpData[1].goods_right = '--';
  510. tmpData[1].need_pay_right = '--';
  511. this.countDownBySecond(ladderInfo.depositRemainTime);
  512. } else {
  513. this.countDownBySecond(ladderInfo.remainEndTime);
  514. }
  515. }
  516. this.ladderInfo = tmpData;
  517. }
  518. if (result.orderType == 103 && result.presellInfo.isAllPay == 0) {
  519. //定金预售信息
  520. let presaleInfo = result.presellInfo;//定金预售信息
  521. this.commonBg = this.imgUrl + 'order/preSale_bg.png'
  522. let tmpData = [];
  523. tmpData.push({
  524. key: 0,
  525. title: that.$L('阶段1:等待买家付款'),
  526. goods_left: that.$L('商品定金'),
  527. goods_right: presaleInfo.depositAmount,
  528. goods_expand_left: that.$L('定金膨胀'),
  529. goods_expand_right: presaleInfo.firstExpand,
  530. need_pay_left: that.$L('定金需付款'),
  531. need_pay_right: presaleInfo.needDepositAmount,
  532. is_cur: 0,
  533. });
  534. if (presaleInfo.orderSubState == 101) {
  535. tmpData[0].is_cur = 1;
  536. this.countDownBySecond(result.remainTime);
  537. tmpData.push({
  538. key: 1,
  539. title: that.$L('阶段2:未开始'),
  540. goods_left: that.$L('商品尾款'),
  541. goods_right: presaleInfo.remainAmount,
  542. need_pay_left: that.$L('尾款需付款'),
  543. need_pay_right: presaleInfo.needRemainAmount,
  544. is_cur: 0
  545. });
  546. } else if (presaleInfo.orderSubState > 101) {
  547. tmpData[0].title = that.$L('阶段1:已完成');
  548. let curTitle = '';
  549. if (presaleInfo.orderSubState == 102) {
  550. if (presaleInfo.isStartRemainPay) {
  551. this.countDownBySecond(presaleInfo.remainEndTime);
  552. curTitle = that.$L('阶段2:等待买家付款');
  553. } else {
  554. this.stateTime = '';//清空倒计时
  555. curTitle = that.$L('阶段2:') + presaleInfo.remainStartTime + that.$L('开始付尾款');
  556. }
  557. } else {
  558. curTitle = that.$L('阶段2:已完成');
  559. }
  560. tmpData.push({
  561. key: 1,
  562. title: curTitle,
  563. goods_left: that.$L('商品尾款'),
  564. goods_right: presaleInfo.remainAmount,
  565. need_pay_left: that.$L('尾款需付款'),
  566. need_pay_right: presaleInfo.needRemainAmount,
  567. is_cur: presaleInfo.orderSubState == 102 ? 1 : 0
  568. });
  569. }
  570. this.presaleInfo = tmpData;
  571. }
  572. if(result.orderType == 102){
  573. this.countDownBySecond(result.remainTime,result)
  574. }
  575. uni.hideLoading();
  576. if ((!(result.orderType == 105 && (result.orderSubState == 101 || result.orderSubState == 102))) && (!(result.orderType == 103 && result.presellInfo.isAllPay == 0))&& (!result.orderType == 102)) {
  577. that.countup();
  578. }
  579. } else {
  580. this.$api.msg(res.msg);
  581. }
  582. }).catch((e) => {
  583. //异常处理
  584. })
  585. },
  586. //计算时间差
  587. countup() {
  588. let that = this;
  589. let createTime = that.allData.createTime;
  590. let startStrs = createTime.split(" ");
  591. let createTimeStamp = that.strtotime(startStrs[0], startStrs[1]); //开始时间时间戳(毫秒)
  592. if (that.allData.orderState == 10) { //等待买家付款 ,24小时过期
  593. let endTimeStamp = createTimeStamp + 86400000; //结束时间时间戳 86400000是1天的
  594. that.countDown(endTimeStamp);
  595. } else if (that.allData.orderState == 30) { //等待买家收货
  596. let endTime = that.allData.autoReceiveTime; //结束时间时间戳
  597. let endStrs = endTime.split(" ");
  598. let endTimeStamp = that.strtotime(endStrs[0], endStrs[1]); //开始时间时间戳(毫秒)
  599. that.countDown(endTimeStamp);
  600. }
  601. },
  602. //倒计时(参数为:剩余秒数)
  603. countDownBySecond(second,goodsInfo) {
  604. let that = this;
  605. //创建定时器前先清除定时器
  606. clearInterval(that.secInterval);
  607. let diffrentTimeStamp = second * 1000;
  608. that.secInterval = setInterval(() => {
  609. if (diffrentTimeStamp == 0) {
  610. that.stateTime = '';
  611. clearInterval(that.secInterval);
  612. if(!(goodsInfo && (goodsInfo.orderType === 105 && goodsInfo.orderSubState === 101)|| goodsInfo.orderType === 102)){
  613. //非 商品为阶梯团&&定金未付款 情况下才会重新请求商品详情
  614. that.getOrderDetail();
  615. }else{
  616. //阶梯团&&定金未付款商品 倒计时结束后主动隐藏支付按钮
  617. that.ladderGroupDisplayStatus=false;
  618. }
  619. } else if (diffrentTimeStamp > 0) {
  620. //将时间戳转换为天,时,分,秒 并倒计时
  621. that.stateTime = that.formatDuring(diffrentTimeStamp)
  622. } else {
  623. that.stateTime = ''
  624. }
  625. diffrentTimeStamp -= 1000; //相差时间 毫秒数
  626. }, 1000)
  627. },
  628. //倒计时
  629. countDown(endTimeStamp) {
  630. let that = this;
  631. //创建定时器前先清除定时器
  632. clearInterval(that.secInterval);
  633. that.secInterval = setInterval(() => {
  634. let currentTimestamp = new Date().getTime(); //当前时间时间戳 (毫秒数)
  635. let diffrentTimeStamp = endTimeStamp - currentTimestamp; //相差时间 毫秒数
  636. if (diffrentTimeStamp == 0) {
  637. that.stateTime = '';
  638. clearInterval(that.secInterval);
  639. that.getOrderDetail();
  640. } else if (diffrentTimeStamp > 0) {
  641. //将时间戳转换为天,时,分,秒 并倒计时
  642. that.stateTime = that.formatDuring(diffrentTimeStamp)
  643. } else {
  644. that.stateTime = ''
  645. }
  646. }, 1000)
  647. },
  648. //将标准格式(2014-08-02 11:23:12)转化为时间戳 函数 参数:time_str为(2014-08-02) fix_time为(11:23:12)
  649. strtotime(time_str, fix_time) {
  650. let time = (new Date()).getTime();
  651. if (time_str) {
  652. let str = time_str.split('-');
  653. if (3 === str.length) {
  654. let year = str[0] - 0;
  655. let month = str[1] - 0 - 1;
  656. var day = str[2] - 0;
  657. if (fix_time) {
  658. let fix = fix_time.split(':');
  659. if (3 === fix.length) {
  660. let hour = fix[0] - 0;
  661. let minute = fix[1] - 0;
  662. time = (new Date(year, month, day, hour, minute)).getTime();
  663. }
  664. } else {
  665. time = (new Date(year, month, day)).getTime();
  666. }
  667. }
  668. }
  669. return time;
  670. },
  671. //将时间戳转换为时分秒
  672. formatDuring(mss) {
  673. let days = parseInt(mss / (1000 * 60 * 60 * 24));
  674. let hours = parseInt((mss % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  675. let minutes = parseInt((mss % (1000 * 60 * 60)) / (1000 * 60));
  676. if (minutes < 10) {
  677. minutes = '0' + minutes;
  678. }
  679. let seconds = ((mss % (1000 * 60)) / 1000).toFixed(0);
  680. if (days > 0) {
  681. return days + " 天 " + hours + " 小时 " + minutes + " 分钟 ";
  682. } else if (hours > 0) {
  683. return hours + " 小时 " + minutes + " 分钟 ";
  684. } else if (minutes >= 1) {
  685. return minutes + " 分钟 ";
  686. } else { //如果剩 1分钟之内就不让显示
  687. return ''
  688. }
  689. },
  690. //获取推荐商品
  691. getData() {
  692. this.$refs.recomment_goods.getMoreData();
  693. },
  694. //拨打电话
  695. goCall() {
  696. if (!this.allData.platformPhone) {
  697. uni.showToast({
  698. title: '该商家暂未设置电话',
  699. icon: 'none'
  700. })
  701. return
  702. }
  703. uni.makePhoneCall({
  704. phoneNumber: this.allData.platformPhone
  705. });
  706. },
  707. //联系商家,跳转客服页面
  708. contactShop(orderItem) {
  709. let chatBaseInfo = {};
  710. chatBaseInfo.memberId = this.userCenterData.memberId;
  711. chatBaseInfo.memberName = this.userCenterData.memberName;
  712. chatBaseInfo.memberNickName = this.userCenterData.memberNickName;
  713. chatBaseInfo.memberAvatar = this.userCenterData.memberAvatar;
  714. chatBaseInfo.storeId = orderItem.storeId;
  715. chatBaseInfo.storeLogo = orderItem.storeLogo;
  716. chatBaseInfo.storeName = orderItem.storeName;
  717. chatBaseInfo.source = 'order';
  718. let tempGoodsData = [{
  719. 'productId': orderItem.orderProductListVOList[0].orderProductId,
  720. 'goodsName': orderItem.orderProductListVOList[0].goodsName,
  721. 'goodsImage': orderItem.orderProductListVOList[0].productImage,
  722. 'goodsPrice': orderItem.orderProductListVOList[0].productShowPrice,
  723. }];
  724. chatBaseInfo.showData = {
  725. 'orderSn': orderItem.orderSn,
  726. 'orderStateValue': this.allData.orderStateValue,
  727. 'createTime': this.allData.createTime,
  728. 'orderProductList': tempGoodsData,
  729. }
  730. this.saveChatBaseInfo(chatBaseInfo);
  731. uni.navigateTo({
  732. url: '/pages/chat/detail?vid=' + orderItem.storeId
  733. })
  734. },
  735. //打开取消订单弹框
  736. cancelPopup() {
  737. if((this.allData.orderType==105&&!this.allData.ladderGroupDetailInfo.isRefundDeposit)||this.allData.orderType==103){
  738. this.$refs.popup.open()
  739. }else{
  740. this.$refs.cancelPopup.open();
  741. this.getCancelList();
  742. }
  743. },
  744. // 预售,阶梯团的提示确认
  745. acDialog(type){
  746. if(type==true){
  747. this.$refs.popup.close()
  748. this.$refs.cancelPopup.open();
  749. this.getCancelList();
  750. }else{
  751. this.$refs.popup.close()
  752. }
  753. },
  754. //获取取消订单原因列表
  755. getCancelList() {
  756. let param = {};
  757. param.url = 'v3/system/front/reason/list';
  758. param.method = 'GET';
  759. param.data = {};
  760. param.data.type = 104;
  761. this.$request(param).then(res => {
  762. if (res.state == 200) {
  763. this.cancelList = res.data || [];
  764. this.cancelList && this.cancelList.map((item, index) => item.value = '' + index);
  765. this.reasonId = this.cancelList[0].reasonId;
  766. } else {
  767. this.$api.msg(res.msg);
  768. }
  769. }).catch((e) => {
  770. //异常处理
  771. })
  772. },
  773. //取消原因单选框切换
  774. radioChange(e) {
  775. for (let i = 0; i < this.cancelList.length; i++) {
  776. if (this.cancelList[i].value === e.target.value) {
  777. this.reasonId = this.cancelList[i].reasonId;
  778. break;
  779. }
  780. }
  781. },
  782. //暂不取消订单
  783. notCancel() {
  784. this.$refs.cancelPopup.close();
  785. this.goRefresh();
  786. },
  787. //确定取消订单
  788. confirmCancel() {
  789. let that = this;
  790. uni.showModal({
  791. title: '提示',
  792. content: '确定取消该订单?',
  793. success: function (res) {
  794. if (res.confirm) {
  795. let param = {};
  796. param.url = 'v3/business/front/orderOperate/cancel';
  797. param.method = 'POST';
  798. param.data = {};
  799. param.data.parentSn = that.parentSn;
  800. param.data.reasonId = that.reasonId;
  801. that.$request(param).then(res => {
  802. if (res.state == 200) {
  803. that.$api.msg(res.msg);
  804. that.$refs.cancelPopup.close();
  805. that.goRefresh();
  806. } else {
  807. that.$api.msg(res.msg);
  808. }
  809. }).catch((e) => {
  810. //异常处理
  811. })
  812. } else if (res.cancel) {
  813. that.$refs.cancelPopup.close();
  814. }
  815. }
  816. })
  817. },
  818. //去付款
  819. goPay() {
  820. //阶梯团 付定金 付尾款、
  821. let goodsInfo = this.allData.childOrdersVOS[0].orderProductListVOList[0];
  822. if (this.allData.orderType == 105 && this.allData.orderSubState == 102 && this.allData.ladderGroupDetailInfo.depositRemainTime == 0) {
  823. uni.navigateTo({
  824. url: `/pages/order/confirmOrder?goodsId=${goodsInfo.goodsId}&productId=${goodsInfo.productId}&numbers=${goodsInfo.productNum}&ifcart=2&orderSn=${this.allData.orderSn}`
  825. })
  826. } else if (this.allData.orderType == 103 && this.allData.orderSubState == 102 && this.allData.presellInfo.depositRemainTime == 0) {
  827. uni.navigateTo({
  828. url: `/pages/order/confirmOrder?goodsId=${goodsInfo.goodsId}&productId=${goodsInfo.productId}&numbers=${goodsInfo.productNum}&ifcart=2&orderSn=${this.allData.orderSn}`
  829. })
  830. } else {
  831. uni.navigateTo({
  832. url: '/pages/order/pay?paySn=' + this.allData.paySn + '&payMethodType=orderDetail'
  833. })
  834. }
  835. },
  836. //修改地址
  837. editAddress() {
  838. uni.navigateTo({
  839. url: '/pages/address/list?source=3' + '&orderSn=' + this.orderSn
  840. })
  841. },
  842. //查看退款详情 换货详情
  843. lookRefundDetail(afsSn, afsButton) {
  844. if (afsButton == 403 || afsButton == 404) { //可查看换货详情
  845. let sourceType = 'exchange';
  846. uni.navigateTo({
  847. url: '/pages/order/refundDetail?afsSn=' + afsSn + '&sourceType=' + sourceType
  848. })
  849. } else {
  850. let sourceType = '';
  851. uni.navigateTo({
  852. url: '/pages/order/refundDetail?afsSn=' + afsSn + '&sourceType=' + sourceType + '&orderState=' + this.allData.orderState
  853. })
  854. }
  855. },
  856. //选择服务
  857. selectService(orderSn, orderProductId) {
  858. let that = this;
  859. let param = {};
  860. param.url = 'v3/business/front/after/sale/apply/applyInfo';
  861. param.method = 'GET';
  862. param.data = {};
  863. param.data.orderSn = orderSn; //订单号
  864. param.data.orderProductId = orderProductId; //订单明细id
  865. this.$request(param).then(res => {
  866. if (res.state == 200) {
  867. if (that.allData.orderState == 20) { //待发货直接进入申请退款页面
  868. uni.navigateTo({
  869. url: '/pages/order/applyRefund?orderSn=' + orderSn + '&orderProductId=' + orderProductId +
  870. '&sourceType=orderDetail' + '&orderListLen=' + this.orderProductList[0].orderProductListVOList.length
  871. })
  872. } else if (that.allData.orderState == 30 || that.allData.orderState == 40) {
  873. //待收货和待评价进入到选择服务页面
  874. uni.navigateTo({
  875. url: '/pages/order/selectService?orderSn=' + orderSn + '&orderProductId=' + orderProductId +
  876. '&orderListLen=' + this.orderProductList[0].orderProductListVOList.length
  877. })
  878. }
  879. } else {
  880. this.$api.msg(res.msg);
  881. }
  882. }).catch((e) => {
  883. //异常处理
  884. })
  885. },
  886. //查看物流
  887. lookLogistics() {
  888. uni.navigateTo({
  889. url: '/pages/order/lookLogistics?orderSn=' + this.orderSn + '&productLeadLittle=' + this.orderProductList[0].productLeadLittle
  890. })
  891. },
  892. //更新当前页面方法
  893. goRefresh() {
  894. let pages = getCurrentPages();
  895. let currPage = pages[pages.length - 1]; //当前页面
  896. let beforePage = pages[pages.length - 2]; //上一页
  897. currPage.$vm.getOrderDetail(); //更新当前页面数据
  898. beforePage.$vm.loadData(); //更新上一页数据
  899. },
  900. //删除订单
  901. delOrder() {
  902. let that = this;
  903. uni.showModal({
  904. title: '提示',
  905. content: '确定删除该订单?',
  906. success: function (res) {
  907. if (res.confirm) {
  908. let param = {};
  909. param.url = 'v3/business/front/orderOperate/delete';
  910. param.method = 'POST';
  911. param.data = {};
  912. param.data.orderSn = that.orderSn;
  913. that.$request(param).then(res => {
  914. if (res.state == 200) {
  915. that.$api.msg(res.msg);
  916. that.goRefresh();
  917. uni.navigateBack({ //返回上一页
  918. delta: 1
  919. })
  920. } else {
  921. that.$api.msg(res.msg);
  922. }
  923. }).catch((e) => {
  924. //异常处理
  925. })
  926. } else if (res.cancel) {
  927. }
  928. }
  929. })
  930. },
  931. //确认收货
  932. confirmReceipt() {
  933. let that = this;
  934. uni.showModal({
  935. title: '提示',
  936. content: '确认收货?',
  937. success: function (res) {
  938. if (res.confirm) {
  939. let param = {};
  940. param.url = 'v3/business/front/orderOperate/receive';
  941. param.method = 'POST';
  942. param.data = {};
  943. param.data.orderSn = that.orderSn;
  944. that.$request(param).then(res => {
  945. if (res.state == 200) {
  946. that.$api.msg(res.msg);
  947. that.goRefresh();
  948. setTimeout(_ => {
  949. uni.navigateTo({
  950. url: '/pages/order/tradeSuccess?orderSn=' + that.orderSn + '&sourceType=orderDetail'
  951. })
  952. }, 1000)
  953. } else {
  954. that.$api.msg(res.msg);
  955. }
  956. }).catch((e) => {
  957. //异常处理
  958. })
  959. }
  960. }
  961. })
  962. },
  963. //去商品详情页
  964. goProductDetail(productId, goodsId) {
  965. uni.navigateTo({
  966. url: '/pages/product/detail?productId=' + productId + '&goodsId=' + goodsId
  967. })
  968. },
  969. //去评价页面
  970. goEvaluate(orderSn) {
  971. uni.navigateTo({
  972. url: '/pages/order/publishEvaluation?orderSn=' + this.orderSn
  973. })
  974. }
  975. }
  976. }
  977. </script>
  978. <style lang='scss'>
  979. page {
  980. background: $bg-color-split;
  981. width: 750rpx;
  982. margin: 0 auto;
  983. }
  984. .container {
  985. display: flex;
  986. flex: 1;
  987. width: 100%;
  988. height: 100vh;
  989. position: relative;
  990. background-color: #FFFFFF;
  991. .main_content {
  992. width: 100%;
  993. /* background: url('/static/order/detail_bg.png') no-repeat; */
  994. min-height: calc(var(--status-bar-height) + 452rpx);
  995. padding-top: var(--status-bar-height);
  996. background-repeat: no-repeat;
  997. background-size: 750rpx 452rpx;
  998. padding-bottom: 90rpx;
  999. .ladder_group {
  1000. border-top: 10px solid #F5F5F5;
  1001. width: 750rpx;
  1002. background: #fff;
  1003. .item {
  1004. margin-left: 20rpx;
  1005. width: 730rpx;
  1006. box-sizing: border-box;
  1007. padding-right: 20rpx;
  1008. &.split {
  1009. border-bottom: 1rpx solid #F2F2F2;
  1010. }
  1011. .title {
  1012. margin-top: 22rpx;
  1013. .right_split {
  1014. width: 5rpx;
  1015. height: 26rpx;
  1016. background: linear-gradient(360deg, #FC1D1C 0%, #FF7A18 100%);
  1017. border-radius: 3rpx;
  1018. margin-right: 18rpx;
  1019. }
  1020. .content {
  1021. color: #F10707;
  1022. font-size: 28rpx;
  1023. }
  1024. }
  1025. .goods_amount {
  1026. margin-top: 20rpx;
  1027. color: #666666;
  1028. font-size: 26rpx;
  1029. line-height: 30rpx;
  1030. }
  1031. .need_pay_amount {
  1032. margin-top: 20rpx;
  1033. color: #2D2D2D;
  1034. font-size: 26rpx;
  1035. line-height: 30rpx;
  1036. margin-bottom: 25rpx;
  1037. .cur {
  1038. color: #F10707;
  1039. }
  1040. }
  1041. }
  1042. }
  1043. .order_state {
  1044. padding-top: 96rpx;
  1045. /* #ifdef MP */
  1046. padding-top: 0;
  1047. /* #endif */
  1048. box-sizing: border-box;
  1049. display: flex;
  1050. flex-direction: column;
  1051. align-items: center;
  1052. justify-content: center;
  1053. width: 100%;
  1054. margin-bottom: 19rpx;
  1055. height: 296rpx;
  1056. .state_title {
  1057. display: flex;
  1058. align-items: center;
  1059. justify-content: center;
  1060. width: 100%;
  1061. image {
  1062. width: 45rpx;
  1063. height: 45rpx;
  1064. margin-right: 20rpx;
  1065. }
  1066. text {
  1067. font-size: 38rpx;
  1068. font-family: PingFang SC;
  1069. font-weight: bold;
  1070. color: #FFFFFF;
  1071. line-height: 32rpx;
  1072. }
  1073. }
  1074. .state_reason {
  1075. font-size: 24rpx;
  1076. font-family: PingFang SC;
  1077. font-weight: 500;
  1078. color: #FFFFFF;
  1079. line-height: 32rpx;
  1080. margin: 20rpx 0;
  1081. }
  1082. .state_remark {
  1083. font-size: 24rpx;
  1084. font-family: PingFang SC;
  1085. font-weight: 500;
  1086. color: #FFFFFF;
  1087. line-height: 32rpx;
  1088. }
  1089. .await {
  1090. margin-bottom: 139rpx;
  1091. }
  1092. .state_time {
  1093. font-size: 24rpx;
  1094. font-family: PingFang SC;
  1095. font-weight: 500;
  1096. color: #FFFFFF;
  1097. line-height: 32rpx;
  1098. margin: 22rpx 0 32rpx;
  1099. }
  1100. }
  1101. .logistics_information {
  1102. display: flex;
  1103. background: #FFFFFF;
  1104. box-shadow: 1rpx 3rpx 30rpx 0rpx rgba(102, 102, 102, 0.1);
  1105. width: 710rpx;
  1106. margin: 0 auto;
  1107. padding: 40rpx 0 30rpx 20rpx;
  1108. border-radius: 15rpx 15rpx 0 0;
  1109. border-bottom: 1rpx solid #F4F4F4;
  1110. .logistics_image {
  1111. width: 34rpx;
  1112. height: 28rpx;
  1113. margin-right: 18rpx;
  1114. }
  1115. .logistics_des_right {
  1116. display: flex;
  1117. align-items: center;
  1118. .logistics_info {
  1119. display: flex;
  1120. flex-direction: column;
  1121. justify-content: space-between;
  1122. width: 565rpx;
  1123. .logistics_des {
  1124. font-size: 28rpx;
  1125. font-family: PingFang SC;
  1126. font-weight: 500;
  1127. color: #333333;
  1128. line-height: 39rpx;
  1129. width: 519rpx;
  1130. text-overflow: -o-ellipsis-lastline;
  1131. overflow: hidden;
  1132. text-overflow: ellipsis;
  1133. display: -webkit-box;
  1134. -webkit-line-clamp: 2;
  1135. line-clamp: 2;
  1136. -webkit-box-orient: vertical;
  1137. margin-bottom: 21rpx;
  1138. }
  1139. .logistics_time {
  1140. font-size: 26rpx;
  1141. font-family: PingFang SC;
  1142. font-weight: 500;
  1143. color: #949494;
  1144. line-height: 45rpx;
  1145. }
  1146. }
  1147. .right_down {
  1148. width: 46rpx;
  1149. height: 46rpx;
  1150. }
  1151. }
  1152. }
  1153. .buyer_info {
  1154. width: 710rpx;
  1155. background: #FFFFFF;
  1156. box-shadow: 1rpx 3rpx 30rpx 0rpx rgba(102, 102, 102, 0.1);
  1157. border-radius: 15rpx;
  1158. margin: 0 auto;
  1159. display: flex;
  1160. padding: 41rpx 20rpx;
  1161. box-sizing: border-box;
  1162. .buyer_map {
  1163. width: 34rpx;
  1164. height: 34rpx;
  1165. margin-right: 20rpx;
  1166. }
  1167. .info_det {
  1168. display: flex;
  1169. width: 100%;
  1170. justify-content: space-between;
  1171. .info_detail {
  1172. display: flex;
  1173. flex-direction: column;
  1174. .info_name {
  1175. display: flex;
  1176. align-items: center;
  1177. font-size: 28rpx;
  1178. font-family: PingFang SC;
  1179. font-weight: 500;
  1180. color: #2E2E2E;
  1181. line-height: 28rpx;
  1182. .buyer_namer {
  1183. color: #2E2E2E;
  1184. }
  1185. .buyer_phone {
  1186. color: #666666;
  1187. margin-left: 20rpx;
  1188. }
  1189. }
  1190. .info_address {
  1191. width: 560rpx;
  1192. font-size: 28rpx;
  1193. font-family: PingFang SC;
  1194. font-weight: 500;
  1195. color: #343434;
  1196. line-height: 39rpx;
  1197. margin-top: 28rpx;
  1198. word-break: break-all;
  1199. }
  1200. }
  1201. }
  1202. }
  1203. .order_goods {
  1204. .goods_list {
  1205. padding: 20rpx 0 0 0;
  1206. .store_item:not(:first-child) {
  1207. border-top: 20rpx solid #F5F5F5;
  1208. }
  1209. .goods_pre {
  1210. display: flex;
  1211. margin: 0 20rpx;
  1212. box-sizing: border-box;
  1213. padding-bottom: 22rpx;
  1214. border-bottom: 1rpx solid #f2f2f2;
  1215. .goods_image {
  1216. width: 200rpx;
  1217. height: 200rpx;
  1218. background: #F3F3F3;
  1219. border-radius: 14px;
  1220. image {
  1221. width: 200rpx;
  1222. height: 200rpx;
  1223. border-radius: 14rpx;
  1224. }
  1225. }
  1226. .goods-img {
  1227. background-size: cover;
  1228. background-position: center center;
  1229. background-repeat: no-repeat;
  1230. width: 200rpx;
  1231. height: 200rpx;
  1232. overflow: hidden;
  1233. background-color: #F8F6F7;
  1234. border-radius: 14rpx;
  1235. flex-shrink: 0;
  1236. }
  1237. .goods_pre_right {
  1238. display: flex;
  1239. justify-content: space-between;
  1240. width: 585rpx;
  1241. .goods_des {
  1242. margin-left: 25rpx;
  1243. padding-top: 8rpx;
  1244. box-sizing: border-box;
  1245. flex: 1;
  1246. .goods_name {
  1247. width: 100%;
  1248. font-size: 28rpx;
  1249. font-family: PingFang SC;
  1250. font-weight: 500;
  1251. color: #343434;
  1252. line-height: 39rpx;
  1253. text-overflow: -o-ellipsis-lastline;
  1254. overflow: hidden;
  1255. text-overflow: ellipsis;
  1256. display: -webkit-box;
  1257. -webkit-line-clamp: 2;
  1258. line-clamp: 2;
  1259. -webkit-box-orient: vertical;
  1260. }
  1261. .goods_spec {
  1262. font-size: 24rpx;
  1263. font-family: PingFang SC;
  1264. font-weight: 400;
  1265. color: #949494;
  1266. line-height: 30rpx;
  1267. margin-top: 20rpx;
  1268. width: 280rpx;
  1269. overflow: hidden;
  1270. text-overflow: ellipsis;
  1271. }
  1272. }
  1273. .goods_prices {
  1274. display: flex;
  1275. flex-direction: column;
  1276. justify-content: center;
  1277. align-items: flex-end;
  1278. .goods_price {
  1279. white-space: nowrap;
  1280. text {
  1281. display: inline-block;
  1282. font-family: PingFang SC;
  1283. font-weight: 500;
  1284. color: #343434;
  1285. line-height: 30rpx;
  1286. }
  1287. .unit {
  1288. font-size: 24rpx;
  1289. }
  1290. .price_int {
  1291. font-size: 32rpx;
  1292. }
  1293. .price_decimal {
  1294. font-size: 24rpx;
  1295. }
  1296. }
  1297. .goods_num {
  1298. font-size: 24rpx;
  1299. font-family: PingFang SC;
  1300. font-weight: 500;
  1301. color: #2D2D2D;
  1302. line-height: 30rpx;
  1303. }
  1304. .refund_btn {
  1305. padding: 12rpx 15rpx;
  1306. box-sizing: border-box;
  1307. border: 1rpx solid #eeeeee;
  1308. border-radius: 25rpx;
  1309. font-size: 26rpx;
  1310. line-height: 26rpx;
  1311. font-family: PingFang SC;
  1312. font-weight: 400;
  1313. color: #333333;
  1314. margin-top: 22rpx;
  1315. }
  1316. }
  1317. }
  1318. }
  1319. }
  1320. }
  1321. .order_des {
  1322. border-top: 20rpx solid #F5F5F5;
  1323. padding: 29rpx 40rpx 0 20rpx;
  1324. box-sizing: border-box;
  1325. .order_des_title {
  1326. font-size: 28rpx;
  1327. font-family: PingFang SC;
  1328. font-weight: 500;
  1329. color: #343434;
  1330. line-height: 24rpx;
  1331. margin-bottom: 19rpx;
  1332. }
  1333. .order_des_pre {
  1334. font-size: 26rpx;
  1335. font-family: PingFang SC;
  1336. font-weight: 500;
  1337. color: #9A9A9A;
  1338. line-height: 24rpx;
  1339. display: flex;
  1340. margin-bottom: 17rpx;
  1341. line-height: 39rpx;
  1342. display: flex;
  1343. justify-content: space-between;
  1344. text:nth-child(1) {
  1345. color: #9A9A9A;
  1346. }
  1347. text:nth-child(2) {
  1348. width: 488rpx;
  1349. color: #343434;
  1350. word-break: break-all;
  1351. }
  1352. .invoice {
  1353. height: 13px;
  1354. width: 52px;
  1355. display: inline-block;
  1356. text-align: justify;
  1357. vertical-align: top;
  1358. }
  1359. .invoice::after {
  1360. content: "";
  1361. display: inline-block;
  1362. width: 100%;
  1363. overflow: hidden;
  1364. height: 0;
  1365. }
  1366. }
  1367. }
  1368. .share_btn {
  1369. width: 100%;
  1370. height: 86rpx;
  1371. background: #FFFFFF;
  1372. /* border-top: 1rpx solid #EDEDED; */
  1373. display: flex;
  1374. align-items: center;
  1375. padding: 0 118rpx;
  1376. box-sizing: border-box;
  1377. justify-content: space-between;
  1378. .share_btn_pre {
  1379. display: flex;
  1380. align-items: center;
  1381. image {
  1382. width: 28rpx;
  1383. height: 28rpx;
  1384. margin-right: 9rpx;
  1385. }
  1386. image:nth-of-type(2) {
  1387. width: 24rpx;
  1388. height: 29rpx;
  1389. }
  1390. text {
  1391. font-size: 26rpx;
  1392. font-family: PingFang SC;
  1393. font-weight: 500;
  1394. color: #333333;
  1395. line-height: 24rpx;
  1396. }
  1397. }
  1398. }
  1399. .recomment {
  1400. background: #F5F5F5;
  1401. box-sizing: border-box;
  1402. }
  1403. }
  1404. .order_det_bottom {
  1405. position: fixed;
  1406. bottom: 0;
  1407. width: 100%;
  1408. height: 90rpx;
  1409. background: #FFFFFF;
  1410. box-shadow: 1rpx 1rpx 20rpx 0rpx rgba(86, 86, 86, 0.11);
  1411. display: flex;
  1412. justify-content: flex-end;
  1413. align-items: center;
  1414. padding-right: 20rpx;
  1415. box-sizing: border-box;
  1416. .edit_address_btn {
  1417. width: 131rpx;
  1418. height: 50rpx;
  1419. border: 1rpx solid #eeeeee;
  1420. border-radius: 25rpx;
  1421. font-size: 24rpx;
  1422. font-family: PingFang SC;
  1423. font-weight: 400;
  1424. color: #343434;
  1425. display: flex;
  1426. align-items: center;
  1427. justify-content: center;
  1428. }
  1429. .cancel_order {
  1430. width: 131rpx;
  1431. height: 50rpx;
  1432. border: 1rpx solid #eeeeee;
  1433. border-radius: 25rpx;
  1434. font-size: 24rpx;
  1435. font-family: PingFang SC;
  1436. font-weight: 400;
  1437. color: #343434;
  1438. display: flex;
  1439. align-items: center;
  1440. justify-content: center;
  1441. margin: 0 10rpx;
  1442. }
  1443. .go_pay {
  1444. width: 142rpx;
  1445. height: 50rpx;
  1446. background: #F30300;
  1447. box-shadow: 1rpx 3rpx 15rpx 0rpx rgba(252, 28, 28, 0.26);
  1448. border-radius: 25rpx;
  1449. font-size: 24rpx;
  1450. font-family: PingFang SC;
  1451. font-weight: 400;
  1452. color: #FFFFFF;
  1453. display: flex;
  1454. align-items: center;
  1455. justify-content: center;
  1456. }
  1457. .confirm_receipt {
  1458. width: 140rpx;
  1459. height: 50rpx;
  1460. background: #F30300;
  1461. border-radius: 25rpx;
  1462. font-size: 24rpx;
  1463. font-family: PingFang SC;
  1464. font-weight: 400;
  1465. color: #FFFFFF;
  1466. display: flex;
  1467. justify-content: center;
  1468. align-items: center;
  1469. }
  1470. }
  1471. }
  1472. .cancel_popup {
  1473. width: 100%;
  1474. height: 700rpx;
  1475. background: #FFFFFF;
  1476. border-radius: 15rpx 15rpx 0 0;
  1477. position: fixed;
  1478. width: 100% !important;
  1479. z-index: 20;
  1480. bottom: 0;
  1481. .popup_top {
  1482. height: 100rpx;
  1483. width: 100%;
  1484. display: flex;
  1485. padding: 0 39rpx;
  1486. align-items: center;
  1487. justify-content: space-between;
  1488. border-bottom: 1rpx solid #F8F8F8;
  1489. text {
  1490. font-size: 32rpx;
  1491. font-family: PingFang SC;
  1492. font-weight: 500;
  1493. color: #343434;
  1494. line-height: 32rpx;
  1495. }
  1496. image {
  1497. width: 30rpx;
  1498. height: 30rpx;
  1499. }
  1500. }
  1501. .cancel_list {
  1502. padding-bottom: 128rpx;
  1503. box-sizing: border-box;
  1504. height: 600rpx;
  1505. .cancle_pre {
  1506. width: 100%;
  1507. padding: 29rpx 40rpx;
  1508. box-sizing: border-box;
  1509. display: flex;
  1510. justify-content: space-between;
  1511. text {
  1512. font-size: 28rpx;
  1513. font-family: PingFang SC;
  1514. font-weight: 500;
  1515. color: #666666;
  1516. line-height: 32rpx;
  1517. }
  1518. }
  1519. }
  1520. .cancel_popup_btn {
  1521. position: fixed;
  1522. bottom: 40rpx;
  1523. z-index: 30;
  1524. display: flex;
  1525. width: 100%;
  1526. justify-content: center;
  1527. text:nth-child(1) {
  1528. width: 334rpx;
  1529. height: 70rpx;
  1530. background: linear-gradient(-90deg, #FE9820 0%, #FFB72B 100%);
  1531. border-radius: 35rpx 0 0 35rpx;
  1532. font-size: 28rpx;
  1533. font-family: PingFang SC;
  1534. font-weight: 500;
  1535. color: #FFFFFF;
  1536. line-height: 32rpx;
  1537. display: flex;
  1538. align-items: center;
  1539. justify-content: center;
  1540. }
  1541. text:nth-child(2) {
  1542. width: 334rpx;
  1543. height: 70rpx;
  1544. background: linear-gradient(-90deg, #FC1D1C 0%, #FF7A18 100%);
  1545. border-radius: 0 35rpx 35rpx 0;
  1546. font-size: 28rpx;
  1547. font-family: PingFang SC;
  1548. font-weight: 500;
  1549. color: #FFFFFF;
  1550. line-height: 32rpx;
  1551. display: flex;
  1552. align-items: center;
  1553. justify-content: center;
  1554. }
  1555. }
  1556. }
  1557. .store_name {
  1558. padding-left: 20rpx;
  1559. padding-bottom: 30rpx;
  1560. margin-top: 30rpx;
  1561. display: flex;
  1562. align-items: center;
  1563. image {
  1564. width: 34rpx;
  1565. height: 32rpx;
  1566. }
  1567. .store_name_text {
  1568. font-size: 32rpx;
  1569. color: #2d2d2d;
  1570. font-weight: bold;
  1571. margin-left: 10rpx;
  1572. }
  1573. .iconfont {
  1574. // width: 13rpx;
  1575. // height: 22rpx;
  1576. font-size: 24rpx;
  1577. margin-left: 10rpx;
  1578. }
  1579. }
  1580. .store_price_info {
  1581. border-top: 10px solid #F5F5F5;
  1582. .store_price_all {
  1583. margin: 18rpx 0;
  1584. }
  1585. .freight {
  1586. display: flex;
  1587. padding: 0 20rpx;
  1588. box-sizing: border-box;
  1589. justify-content: space-between;
  1590. .freight_title {
  1591. font-size: 26rpx;
  1592. font-family: PingFang SC;
  1593. font-weight: 500;
  1594. color: #343434;
  1595. line-height: 30rpx;
  1596. }
  1597. .freight_price {
  1598. font-size: 24rpx;
  1599. font-family: PingFang SC;
  1600. font-weight: 500;
  1601. color: #2E2E2E;
  1602. line-height: 30rpx;
  1603. }
  1604. }
  1605. .actual_payment {
  1606. display: flex;
  1607. justify-content: space-between;
  1608. padding: 0 20rpx;
  1609. box-sizing: border-box;
  1610. margin: 18rpx 0;
  1611. .actual_payment_title {
  1612. display: flex;
  1613. font-size: 26rpx;
  1614. font-family: PingFang SC;
  1615. font-weight: 500;
  1616. line-height: 30rpx;
  1617. color: #343434;
  1618. text:nth-child(2) {
  1619. color: #949494;
  1620. }
  1621. }
  1622. .actual_payment_price {
  1623. font-size: 24rpx;
  1624. font-family: PingFang SC;
  1625. font-weight: 500;
  1626. color: #FC1C1C;
  1627. line-height: 30rpx;
  1628. text:nth-child(2) {
  1629. font-size: 32rpx;
  1630. }
  1631. }
  1632. }
  1633. }
  1634. .no_top {
  1635. border-top: none;
  1636. margin-top: 20rpx;
  1637. }
  1638. </style>