index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930
  1. <template>
  2. <view :data-theme="theme">
  3. <view class='order-details'>
  4. <!-- 给header上与data上加on为退款订单-->
  5. <view class='header bg_color on'>
  6. <view class='picTxt acea-row row-middle'>
  7. <view class='data on'>
  8. <view class="acea-row row-middle mb20">
  9. <view class='state line-heightOne'>{{refundInfo.refundStatus | refundStatusFilter}}</view>
  10. <view v-show="refundInfo.refundStatus===3"><text
  11. class="font-color refundPrice">{{refundInfo.refundPrice}}元</text></view>
  12. </view>
  13. <view class="mb30 line2" v-if="refundInfo.refundStatus===1">{{refundInfo.refundReason}}</view>
  14. <view v-else class="mb30">{{refundInfo.refundStatus | orderRefundTipsStatusFilter}}</view>
  15. </view>
  16. </view>
  17. </view>
  18. <!-- 商品详情 -->
  19. <view class="borderPad margin-100">
  20. <view class="borRadius14 wrapper">
  21. <orderGoods :isShowBtn="false" :refundInfo="refundInfo" :cartInfo="[refundInfo]" :jump="true" :orderData="refundInfo">
  22. </orderGoods>
  23. <view class="borderPad">
  24. <view class="return_info">
  25. <view class='item acea-row row-between line-heightOne'>
  26. <view>退款件数:</view>
  27. <view class='conter'>{{refundInfo.applyRefundNum}}</view>
  28. </view>
  29. <view class='item acea-row row-between line-heightOne'>
  30. <view>退款金额:</view>
  31. <view class='conter'>¥{{refundInfo.refundPrice}}</view>
  32. </view>
  33. <view class='item acea-row row-between line-heightOne'>
  34. <view>退款方式:</view>
  35. <view class='conter'>原路返回</view>
  36. </view>
  37. <view class='item acea-row row-between line-heightOne'>
  38. <view>退款原因:</view>
  39. <view v-if="refundInfo.promoterType==='user'" class='conter'>{{refundInfo.refundReasonWap}}</view>
  40. <view v-else class='conter'>商家直接退款</view>
  41. </view>
  42. </view>
  43. </view>
  44. </view>
  45. </view>
  46. <!-- 商家店铺地址 -->
  47. <view v-if="refundInfo.returnGoodsType ===2 && merAddress && refundInfo.refundStatus>0" class="borderPad">
  48. <view class="borRadius14 wrapper return_info_pad">
  49. <view class='item acea-row row-between mb30'>
  50. <view>商家退回地址:</view>
  51. <view class='conter acea-row row-middle row-right'>
  52. <!-- #ifndef H5 -->
  53. <text class='copy line-heightOne' @tap="copy(merAddress.name+','+merAddress.phone+','+merAddress.addressDetail)">复制</text>
  54. <!-- #endif -->
  55. <!-- #ifdef H5 -->
  56. <text class='copy copy-data line-heightOne'
  57. :data-clipboard-text="merAddress.name+','+merAddress.phone+','+merAddress.addressDetail">复制</text>
  58. <!-- #endif -->
  59. </view>
  60. </view>
  61. <view class="text-2828 f-s-26 mb20">
  62. <text class="text-2828">{{merAddress.name}}</text>
  63. <text>{{merAddress.phone}}</text>
  64. </view>
  65. <view class="text-666 f-s-26 addressDetail">{{merAddress.addressDetail}}</view>
  66. </view>
  67. </view>
  68. <!-- 商家退回地址 -->
  69. <view v-if="refundInfo.returnGoodsType ===1 && refundInfo.refundStatus>0 &&refundInfo.receiver&&refundInfo.receiverPhone&&refundInfo.receiverAddressDetail" class="borderPad">
  70. <view class="borRadius14 wrapper return_info_pad">
  71. <view class='item acea-row row-between mb30'>
  72. <view>商家退回地址:</view>
  73. <view class='conter acea-row row-middle row-right'>
  74. <!-- #ifndef H5 -->
  75. <text class='copy line-heightOne' @tap="copy(refundInfo.receiver+','+refundInfo.receiverPhone+','+refundInfo.receiverAddressDetail)">复制</text>
  76. <!-- #endif -->
  77. <!-- #ifdef H5 -->
  78. <text class='copy copy-data line-heightOne'
  79. :data-clipboard-text="refundInfo.receiver+','+refundInfo.receiverPhone+','+refundInfo.receiverAddressDetail">复制</text>
  80. <!-- #endif -->
  81. </view>
  82. </view>
  83. <view class="text-2828 f-s-26 mb20">
  84. <text class="text-2828">{{refundInfo.receiver}}</text>
  85. <text>{{refundInfo.receiverPhone}}</text>
  86. </view>
  87. <view class="text-666 f-s-26 addressDetail">{{refundInfo.receiverAddressDetail}}</view>
  88. </view>
  89. </view>
  90. <!-- 退款订单详情 "-->
  91. <view class="borderPad">
  92. <view class='wrapper borRadius14 return_info_pad'>
  93. <view class='item acea-row row-between '>
  94. <view>订单单号:</view>
  95. <view class='conter acea-row row-middle row-right'><text
  96. class="text-overflow">{{refundInfo.orderNo}}</text>
  97. <!-- #ifndef H5 -->
  98. <text class='copy line-heightOne' @tap='copy(refundInfo.orderNo)'>复制</text>
  99. <!-- #endif -->
  100. <!-- #ifdef H5 -->
  101. <text class='copy copy-data line-heightOne'
  102. :data-clipboard-text="refundInfo.orderNo">复制</text>
  103. <!-- #endif -->
  104. </view>
  105. </view>
  106. <view class='item acea-row row-between'>
  107. <view>售后单号:</view>
  108. <view class='conter acea-row row-middle row-right'><text
  109. class="text-overflow">{{refundInfo.refundOrderNo}}</text>
  110. <!-- #ifndef H5 -->
  111. <text class='copy line-heightOne' @tap='copy(refundInfo.refundOrderNo)'>复制</text>
  112. <!-- #endif -->
  113. <!-- #ifdef H5 -->
  114. <text class='copy copy-data line-heightOne'
  115. :data-clipboard-text="refundInfo.refundOrderNo">复制</text>
  116. <!-- #endif -->
  117. </view>
  118. </view>
  119. <view class='item acea-row row-between'>
  120. <view>申请时间:</view>
  121. <view class='conter'>{{(refundInfo.createTime || 0)}}</view>
  122. </view>
  123. <view class='item acea-row row-between'>
  124. <view>售后类型:</view>
  125. <view class='conter'>{{refundInfo.afterSalesType===1?'仅退款':'退货退款'}}</view>
  126. </view>
  127. <view class='item acea-row row-between'>
  128. <view>退回方式:</view>
  129. <view class='conter'>
  130. {{refundInfo.returnGoodsType===1?'快递退回':refundInfo.returnGoodsType===2?'到店退货':'不退货'}}</view>
  131. </view>
  132. <view class='item acea-row row-between' v-if="refundInfo.refundReasonWapExplain">
  133. <view>备注说明:</view>
  134. <view class='conter-refund text-left'>{{refundInfo.refundReasonWapExplain}}</view>
  135. </view>
  136. <view class='item acea-row row-between' v-if="refundInfo.refundReasonWapImg">
  137. <view>售后凭证:</view>
  138. <view class='conter-refund text-left'>
  139. <image class="wapImg" :src="item" v-for="item in refundInfo.refundReasonWapImg.split(',')"
  140. :key='item.id'></image>
  141. </view>
  142. </view>
  143. </view>
  144. </view>
  145. <!-- 用户到店退回信息 -->
  146. <view v-if="refundInfo.returnGoodsType ===2 && refundInfo.refundStatus>0 && refundInfo.telephone" class="borderPad">
  147. <view class="borRadius14 wrapper return_info_pad">
  148. <view class='item acea-row row-between'>
  149. <view>联系电话:</view>
  150. <view class='conter'>{{refundInfo.telephone}}</view>
  151. </view>
  152. </view>
  153. </view>
  154. <!-- 用户发货信息 -->
  155. <view v-if="refundInfo.returnGoodsType ===1 && refundInfo.refundStatus>0 && refundInfo.expressName && refundInfo.trackingNumber" class="borderPad">
  156. <view class="borRadius14 wrapper return_info_pad">
  157. <view class='item acea-row row-between mb30'>
  158. <view>物流公司:</view>
  159. <view class='conter'>{{refundInfo.expressName}}</view>
  160. </view>
  161. <view class='item acea-row row-between mb30'>
  162. <view>物流单号:</view>
  163. <view class='conter acea-row row-middle row-right'>
  164. <text class="text-overflow">{{refundInfo.trackingNumber}}</text>
  165. <!-- #ifndef H5 -->
  166. <text class='copy line-heightOne' @tap='copy(refundInfo.trackingNumber)'>复制</text>
  167. <!-- #endif -->
  168. <!-- #ifdef H5 -->
  169. <text class='copy copy-data line-heightOne'
  170. :data-clipboard-text="refundInfo.trackingNumber">复制</text>
  171. <!-- #endif -->
  172. </view>
  173. </view>
  174. <view class='item acea-row row-between'>
  175. <view>联系电话:</view>
  176. <view class='conter'>{{refundInfo.telephone}}</view>
  177. </view>
  178. </view>
  179. </view>
  180. <!-- 操作按钮 "-->
  181. <view v-if="refundInfo.refundStatus === 0 || refundInfo.refundStatus === 4 || refundInfo.refundStatus === 5" class="borderPad">
  182. <view class='wrapper borRadius14 return_info_pad btn-box acea-row' style="justify-content: flex-end;">
  183. <view></view>
  184. <view
  185. v-if="refundInfo.refundStatus === 0 || refundInfo.refundStatus === 4 || refundInfo.refundStatus === 5"
  186. class="btn btn-999" @click="handleRevokeRefund(refundInfo.refundOrderNo)">撤销售后</view>
  187. <view v-if="refundInfo.refundStatus === 4 && refundInfo.afterSalesType === 2" style="color: #fff;"
  188. class="btn bg-color" @click="handleReturningRefund(refundInfo)">退回商品</view>
  189. </view>
  190. </view>
  191. </view>
  192. </view>
  193. </template>
  194. <script>
  195. // +----------------------------------------------------------------------
  196. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  197. // +----------------------------------------------------------------------
  198. // | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
  199. // +----------------------------------------------------------------------
  200. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  201. // +----------------------------------------------------------------------
  202. // | Author: CRMEB Team <admin@crmeb.com>
  203. // +----------------------------------------------------------------------
  204. import { orderRefundInfoApi } from '@/api/order.js';
  205. import {onRevokeRefund} from '@/libs/order';
  206. import orderGoods from "../components/orderGoods";
  207. import { getMerAddressApi } from '@/api/merchant.js'
  208. import ClipboardJS from "@/plugin/clipboard/clipboard.js";
  209. import {
  210. toLogin
  211. } from '@/libs/login.js';
  212. import {
  213. mapGetters
  214. } from "vuex";
  215. // #ifdef MP
  216. import uQRCode from '@/js_sdk/Sansnn-uQRCode/uqrcode.js'
  217. // #endif
  218. import {
  219. setThemeColor
  220. } from '@/utils/setTheme.js'
  221. const app = getApp();
  222. export default {
  223. components: {
  224. orderGoods
  225. },
  226. data() {
  227. return {
  228. merAddress: null, //店铺地址
  229. refundOrderNo: '',
  230. refundInfo: {}, //退款单详情
  231. theme: app.globalData.theme,
  232. chatConfig: {
  233. consumer_hotline: '',
  234. telephone_service_switch: 'false'
  235. }, //客服配置
  236. };
  237. },
  238. computed: mapGetters(['isLogin', 'chatUrl', 'userInfo']),
  239. onLoad: function(options) {
  240. options.type == undefined || options.type == null ? this.type = 'normal' : this.type = options.type;
  241. if (!options.refundOrderNo) return this.$util.Tips({
  242. title: '缺少参数'
  243. }, {
  244. tab: 3,
  245. url: 1
  246. });
  247. this.$set(this, 'refundOrderNo', options.refundOrderNo);
  248. this.bgColor = setThemeColor();
  249. this.$set(this, 'chatConfig', this.$Cache.getItem('chatConfig'));
  250. },
  251. onShow() {
  252. if (this.isLogin) {
  253. this.orderRefundInfo();
  254. } else {
  255. toLogin();
  256. }
  257. },
  258. onHide: function() {
  259. this.isClose = true;
  260. },
  261. // 滚动监听
  262. onPageScroll(e) {
  263. // 传入scrollTop值并触发所有easy-loadimage组件下的滚动监听事件
  264. uni.$emit('scroll');
  265. },
  266. onReady: function() {
  267. // #ifdef H5
  268. this.$nextTick(function() {
  269. const clipboard = new ClipboardJS(".copy-data");
  270. clipboard.on("success", () => {
  271. this.$util.Tips({
  272. title: '复制成功'
  273. });
  274. });
  275. });
  276. // #endif
  277. },
  278. methods: {
  279. //店铺地址
  280. getMerAddress() {
  281. getMerAddressApi(this.refundInfo.merId).then(res => {
  282. this.$set(this, 'merAddress', res.data);
  283. }).catch(err => {
  284. return this.$util.Tips({
  285. title: err
  286. });
  287. })
  288. },
  289. //撤销售后
  290. handleRevokeRefund(refundOrderNo) {
  291. onRevokeRefund(refundOrderNo).then(() => {
  292. this.orderRefundInfo()
  293. });
  294. },
  295. //退回商品
  296. handleReturningRefund(item) {
  297. this.$Cache.set('productInfo', item)
  298. uni.navigateTo({
  299. url: `/pages/goods/returns_and_refunds/index?refundOrderNo=${item.refundOrderNo}&returnGoodsType=${item.returnGoodsType}`
  300. })
  301. },
  302. kefuClick() {
  303. if (this.chatConfig.telephone_service_switch === 'true') {
  304. uni.makePhoneCall({
  305. phoneNumber: this.chatConfig.consumer_hotline //仅为示例
  306. });
  307. } else {
  308. // #ifdef APP-PLUS
  309. uni.navigateTo({
  310. url: '/pages/users/web_page/index?webUel=' + this.chatUrl + '&title=客服'
  311. })
  312. // #endif
  313. // #ifndef APP-PLUS
  314. location.href = this.chatUrl;
  315. // #endif
  316. }
  317. },
  318. /**
  319. * 拨打电话
  320. */
  321. makePhone: function(e) {
  322. uni.makePhoneCall({
  323. phoneNumber: e
  324. })
  325. },
  326. /**
  327. * 获取退款订单详细信息
  328. *
  329. */
  330. orderRefundInfo() {
  331. let that = this;
  332. uni.showLoading({
  333. title: "正在加载中"
  334. });
  335. orderRefundInfoApi(that.refundOrderNo).then(res => {
  336. uni.hideLoading();
  337. let data = res.data;
  338. that.$set(that, 'refundInfo', data);
  339. //returnGoodsType 退货类型:0-不退货 1-快递退回,2-到店退货
  340. if(that.refundInfo.returnGoodsType ===2)that.getMerAddress();
  341. }).catch(err => {
  342. that.$util.Tips({
  343. title: err
  344. }, {
  345. tab: 4,
  346. url: '/pages/user/index'
  347. });
  348. });
  349. },
  350. /**
  351. *
  352. * 剪切订单号
  353. */
  354. // #ifndef H5
  355. copy: function(orderNo) {
  356. let that = this;
  357. uni.setClipboardData({
  358. data: orderNo
  359. });
  360. },
  361. // #endif
  362. /**
  363. * 打电话
  364. */
  365. goTel: function() {
  366. uni.makePhoneCall({
  367. phoneNumber: this.refundInfo.deliveryId
  368. })
  369. }
  370. }
  371. }
  372. </script>
  373. <style scoped lang="scss">
  374. .addressDetail {
  375. line-height: 36rpx;
  376. }
  377. .btn-box {
  378. display: flex;
  379. padding-top: 20rpx;
  380. line-height: 60rpx;
  381. .btn-line {
  382. @include main_color(theme);
  383. @include coupons_border_color(theme);
  384. }
  385. .btn-bg {
  386. color: #fff;
  387. }
  388. .btn-999 {
  389. border: 1px solid #999999;
  390. color: #666666;
  391. }
  392. .btn {
  393. width: 176rpx;
  394. height: 60rpx;
  395. line-height: 56rpx;
  396. margin-left: 18rpx;
  397. text-align: center;
  398. border-radius: 30rpx;
  399. font-size: 28rpx;
  400. }
  401. }
  402. .margin-100 {
  403. margin: -86rpx auto 0 auto;
  404. }
  405. .return_info_pad {
  406. padding: 30rpx 24rpx;
  407. }
  408. .return_info {
  409. border-top: 1px solid #EEEEEE;
  410. background-color: #fff;
  411. padding: 32rpx 0;
  412. }
  413. .refundPrice {
  414. font-size: 35rpx;
  415. font-weight: bold;
  416. }
  417. .qs-btn {
  418. width: auto;
  419. height: 60rpx;
  420. text-align: center;
  421. line-height: 60rpx;
  422. border-radius: 50rpx;
  423. color: #fff;
  424. font-size: 27rpx;
  425. padding: 0 3%;
  426. color: #aaa;
  427. border: 1px solid #ddd;
  428. margin-right: 20rpx;
  429. }
  430. .text-overflow {
  431. width: 392rpx;
  432. overflow: hidden;
  433. text-overflow: ellipsis;
  434. white-space: nowrap;
  435. }
  436. .shuoming {
  437. width: 32rpx;
  438. height: 32rpx;
  439. }
  440. .mp-header {
  441. width: 100%;
  442. @include main_bg_color(theme);
  443. }
  444. .goodCall {
  445. @include main_color(theme);
  446. text-align: center;
  447. width: 100%;
  448. height: 86rpx;
  449. padding: 0 30rpx;
  450. border-bottom: 1rpx solid #eee;
  451. font-size: 30rpx;
  452. line-height: 86rpx;
  453. background: #fff;
  454. .icon-kefu {
  455. font-size: 36rpx;
  456. margin-right: 15rpx;
  457. }
  458. /* #ifdef MP */
  459. button {
  460. display: flex;
  461. align-items: center;
  462. justify-content: center;
  463. height: 86rpx;
  464. font-size: 30rpx;
  465. @include main_color(theme);
  466. }
  467. /* #endif */
  468. }
  469. .justify-between {
  470. justify-content: space-between;
  471. }
  472. .align-center {
  473. align-items: center;
  474. }
  475. .order-details {
  476. padding-bottom: 30rpx;
  477. .header {
  478. height: 250rpx;
  479. padding: 0 24rpx;
  480. }
  481. }
  482. .bg_color {
  483. @include main_bg_color(theme);
  484. }
  485. .order-details .header.on {
  486. // /background-color: #666 !important;
  487. }
  488. .order-details .header .pictrue {
  489. width: 110rpx;
  490. height: 110rpx;
  491. }
  492. .order-details .header .pictrue image {
  493. width: 100%;
  494. height: 100%;
  495. }
  496. .order-details .header .data {
  497. color: rgba(255, 255, 255, 0.8);
  498. font-size: 24rpx;
  499. margin-left: 27rpx;
  500. }
  501. .order-details .header .data.on {
  502. margin-left: 0;
  503. padding-top: 34rpx;
  504. }
  505. .order-details .header .data .state {
  506. font-size: 30rpx;
  507. font-weight: bold;
  508. color: #fff;
  509. }
  510. .order-details .header .data .time {
  511. margin-left: 20rpx;
  512. }
  513. .picTxt {
  514. padding-left: 10rpx;
  515. }
  516. .order-details .nav {
  517. background-color: #fff;
  518. font-size: 26rpx;
  519. color: #282828;
  520. padding: 27rpx 0;
  521. width: 100%;
  522. border-radius: 14rpx;
  523. margin: -100rpx auto 0 auto;
  524. }
  525. .order-details .nav .navCon {
  526. padding: 0 40rpx;
  527. }
  528. .order-details .nav .on {
  529. @include main_color(theme);
  530. }
  531. .font_color {
  532. @include main_color(theme);
  533. }
  534. .order-details .nav .progress {
  535. padding: 0 65rpx;
  536. margin-top: 10rpx;
  537. }
  538. .order-details .nav .progress .line {
  539. width: 100rpx;
  540. height: 2rpx;
  541. background-color: #939390;
  542. }
  543. .order-details .nav .progress .iconfont {
  544. font-size: 25rpx;
  545. color: #939390;
  546. margin-top: -2rpx;
  547. }
  548. .order-details .address {
  549. font-size: 26rpx;
  550. color: #868686;
  551. background-color: #fff;
  552. padding: 30rpx 0;
  553. .phone {
  554. margin-left: 20rpx;
  555. }
  556. }
  557. .order-details .address .name {
  558. font-size: 30rpx;
  559. color: #333;
  560. margin-bottom: 15rpx;
  561. }
  562. .order-details .line {
  563. width: 100%;
  564. height: 3rpx;
  565. }
  566. .order-details .line image {
  567. width: 100%;
  568. height: 100%;
  569. display: block;
  570. }
  571. .order-details .wrapper {
  572. background-color: #fff;
  573. margin-top: 12rpx;
  574. }
  575. .order-details .wrapper .item {
  576. font-size: 28rpx;
  577. color: #282828;
  578. }
  579. .order-details .wrapper .item~.item {
  580. margin-top: 34rpx;
  581. }
  582. .order-details .wrapper .item .conter {
  583. color: #282828;
  584. text-align: right;
  585. overflow: hidden;
  586. text-overflow: ellipsis;
  587. white-space: nowrap;
  588. }
  589. .mark_show {
  590. color: #868686;
  591. width: 470rpx;
  592. text-align: right;
  593. }
  594. .order-details .wrapper .item .conter .copy {
  595. font-size: 20rpx;
  596. color: #666;
  597. border-radius: 20rpx;
  598. border: 1rpx solid #999;
  599. padding: 8rpx 18rpx;
  600. margin-left: 10rpx;
  601. }
  602. .order-details .wrapper .actualPay {
  603. border-top: 1rpx solid #eee;
  604. margin-top: 30rpx;
  605. padding-top: 30rpx;
  606. }
  607. .order-details .wrapper .actualPay .money {
  608. font-weight: bold;
  609. font-size: 30rpx;
  610. @include price_color(theme);
  611. }
  612. .order-details .footer {
  613. width: 100%;
  614. height: 100rpx;
  615. position: fixed;
  616. bottom: 0;
  617. left: 0;
  618. background-color: #fff;
  619. padding-right: 30rpx;
  620. box-sizing: border-box;
  621. }
  622. .order-details .footer .bnt {
  623. width: 158rpx;
  624. height: 54rpx;
  625. text-align: center;
  626. line-height: 54rpx;
  627. border-radius: 50rpx;
  628. color: #fff;
  629. font-size: 27rpx;
  630. }
  631. .order-details .footer .bnt.cancel {
  632. color: #aaa;
  633. border: 1rpx solid #ddd;
  634. }
  635. .order-details .footer .bnt~.bnt {
  636. margin-left: 18rpx;
  637. }
  638. .order-details .writeOff {
  639. background-color: #fff;
  640. margin-top: 15rpx;
  641. padding-bottom: 50rpx;
  642. }
  643. .order-details .writeOff .title {
  644. font-size: 30rpx;
  645. color: #282828;
  646. height: 87rpx;
  647. border-bottom: 1px solid #f0f0f0;
  648. padding: 0 24rpx;
  649. line-height: 87rpx;
  650. }
  651. .order-details .writeOff .grayBg {
  652. background-color: #f2f5f7;
  653. width: 590rpx;
  654. height: 384rpx;
  655. border-radius: 20rpx 20rpx 0 0;
  656. margin: 50rpx auto 0 auto;
  657. padding-top: 55rpx;
  658. }
  659. .order-details .writeOff .grayBg .pictrue {
  660. width: 290rpx;
  661. height: 290rpx;
  662. margin: 0 auto;
  663. }
  664. .order-details .writeOff .grayBg .pictrue image {
  665. width: 100%;
  666. height: 100%;
  667. display: block;
  668. }
  669. .order-details .writeOff .gear {
  670. width: 590rpx;
  671. height: 30rpx;
  672. margin: 0 auto;
  673. }
  674. .order-details .writeOff .gear image {
  675. width: 100%;
  676. height: 100%;
  677. display: block;
  678. }
  679. .order-details .writeOff .num {
  680. background-color: #f0c34c;
  681. width: 590rpx;
  682. height: 84rpx;
  683. color: #282828;
  684. font-size: 48rpx;
  685. margin: 0 auto;
  686. border-radius: 0 0 20rpx 20rpx;
  687. text-align: center;
  688. padding-top: 4rpx;
  689. }
  690. .order-details .writeOff .rules {
  691. margin: 46rpx 30rpx 0 30rpx;
  692. border-top: 1px solid #f0f0f0;
  693. padding-top: 10rpx;
  694. }
  695. .order-details .writeOff .rules .item {
  696. margin-top: 20rpx;
  697. }
  698. .order-details .writeOff .rules .item .rulesTitle {
  699. font-size: 28rpx;
  700. color: #282828;
  701. }
  702. .order-details .writeOff .rules .item .rulesTitle .iconfont {
  703. font-size: 30rpx;
  704. color: #333;
  705. margin-right: 8rpx;
  706. margin-top: 5rpx;
  707. }
  708. .order-details .writeOff .rules .item .info {
  709. font-size: 28rpx;
  710. color: #999;
  711. margin-top: 7rpx;
  712. }
  713. .order-details .writeOff .rules .item .info .time {
  714. margin-left: 20rpx;
  715. }
  716. .order-details .map {
  717. font-size: 30rpx;
  718. color: #282828;
  719. margin-top: 15rpx;
  720. background-color: #fff;
  721. padding: 0 24rpx;
  722. .title {
  723. line-height: 86rpx;
  724. border-bottom: 1px solid #f0f0f0;
  725. }
  726. }
  727. .order-details .map .place {
  728. font-size: 26rpx;
  729. width: 176rpx;
  730. height: 50rpx;
  731. border-radius: 25rpx;
  732. line-height: 50rpx;
  733. text-align: center;
  734. }
  735. .order-details .map .place .iconfont {
  736. font-size: 27rpx;
  737. height: 27rpx;
  738. line-height: 27rpx;
  739. margin: 2rpx 3rpx 0 0;
  740. }
  741. .order-details .address .name .iconfont {
  742. font-size: 34rpx;
  743. margin-left: 10rpx;
  744. }
  745. .refund {
  746. padding: 0 !important;
  747. margin-top: 15rpx;
  748. background-color: #fff;
  749. .title {
  750. display: flex;
  751. align-items: center;
  752. font-size: 30rpx;
  753. color: #333;
  754. height: 86rpx;
  755. border-bottom: 1px solid #f5f5f5;
  756. font-weight: 400;
  757. padding: 0 24rpx;
  758. image {
  759. width: 32rpx;
  760. height: 32rpx;
  761. margin-right: 10rpx;
  762. }
  763. }
  764. .con {
  765. font-size: 26rpx;
  766. color: #666666;
  767. padding: 30rpx 24rpx;
  768. }
  769. }
  770. .pictrue {
  771. width: 130rpx;
  772. height: 130rpx;
  773. border-radius: 14rpx;
  774. overflow: hidden;
  775. image {
  776. width: 100%;
  777. height: 100%;
  778. }
  779. }
  780. .text {
  781. width: 490rpx;
  782. // position: relative;
  783. .name {
  784. font-size: 28rpx;
  785. color: #282828;
  786. }
  787. .attr {
  788. font-size: 16rpx;
  789. color: #868686;
  790. margin-top: 7rpx
  791. }
  792. }
  793. .wrapper-head {
  794. background-color: #fff;
  795. margin-top: 12rpx;
  796. padding: 30rpx 24rpx;
  797. }
  798. .wrapper-info {
  799. background-color: #fff;
  800. margin: -100rpx auto 0 auto;
  801. padding: 15px 12px;
  802. .name {
  803. width: 414rpx;
  804. color: #333;
  805. }
  806. .num {
  807. color: #999;
  808. }
  809. .attr {
  810. color: #999;
  811. font-size: 20rpx;
  812. margin: 7rpx 0 16rpx 0;
  813. }
  814. .price {
  815. font-size: 26rpx;
  816. color: #E93323;
  817. }
  818. }
  819. .borRadius-top {
  820. border-radius: 14rpx 14rpx 0px 0px;
  821. }
  822. .borRadius-bottom {
  823. border-radius: 0px 0px 14rpx 14rpx;
  824. }
  825. .conter-refund {
  826. width: 76%;
  827. text-align: right;
  828. color: #868686;
  829. .wapImg {
  830. width: 106rpx;
  831. height: 106rpx;
  832. border-radius: 10rpx;
  833. margin-right: 10rpx;
  834. }
  835. }
  836. </style>