order-detail.vue 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780
  1. <template>
  2. <app-layout>
  3. <scroll-view scroll-y :style="{'height':`${windowHeight}px`}">
  4. <app-head :theme="getTheme" height="320rpx"></app-head>
  5. <view class="title main-between cross-center">
  6. <view>
  7. <view class="big-title-text">{{detail.status_text == '待付款' ? '等待买家付款': detail.status_text}}</view>
  8. <view v-if="detail.status_text == '待付款' && detail.cancel_time_stamp > 0">若未在<text v-if="d>0">{{d}}天</text>{{h}}:{{m}}:{{s}}内付款,订单将自动取消</view>
  9. <view v-if="detail.status_text == '已关闭' && detail.is_pay == 0 && detail.auto_cancel_time">超时未付款</view>
  10. </view>
  11. <view v-if="!is_user && detail.status_text != '待付款'" class="pick dir-top-nowrap main-center cross-center" :class="{'over': detail.status_text == '已完成'}">
  12. <view>提货编码</view>
  13. <view class="number" :class="getTheme + '-m-text ' + getTheme">{{detail.no}}</view>
  14. </view>
  15. </view>
  16. <view v-if="is_user && (detail.status_text == '待提货' || detail.status_text == '已提货' || detail.status_text == '已完成')" class="item-card send main-between">
  17. <view class="send-info dir-top-nowrap cross-center">
  18. <view>提货编码</view>
  19. <view :style="[{'opacity': `${detail.status_text == '已提货' || detail.status_text == '已完成' ? '0.3':'1'}`}]" class="send-no" :class="detail.status_text == '已提货' || detail.status_text == '已完成' ? '':getTheme + '-m-text ' + getTheme">{{detail.no}}</view>
  20. </view>
  21. <view class="line"></view>
  22. <view class="send-info dir-top-nowrap cross-center">
  23. <view>提货二维码</view>
  24. <image @click="toBig" :style="[{'opacity': `${detail.status_text == '已提货' || detail.status_text == '已完成' ? '0.3':'1'}`}]" class="qr" :src="detail.no_QrCode.file_path"></image>
  25. </view>
  26. </view>
  27. <view class="info">
  28. <view class="main-between cross-center info-top">
  29. <view v-if="detail.mobile" class="user-info dir-left-nowrap cross-center">
  30. <view class="avatar">
  31. <image :src="is_user ? detail.middleman_info.avatar:detail.user_avatar"></image>
  32. </view>
  33. <view class="user main-center cross-center">
  34. <text class="user-name" :class="!is_user ? 'long-name': ''">{{is_user ? detail.middleman_info.name:detail.name}}</text>
  35. <view class="middleman-name" :class="getTheme + '-m-text ' + getTheme + ' ' +getTheme + '-m-border ' + getTheme" v-if="is_user">{{detail.middleman_info.middleman_name}}
  36. <view class="middleman-bg" :class="getTheme + '-m-back ' + getTheme"></view>
  37. </view>
  38. <text>{{is_user ? detail.middleman_info.mobile:detail.mobile}}</text>
  39. </view>
  40. </view>
  41. <view @click="tel" class="detail-btn" :class="getTheme + '-m-text ' + getTheme">
  42. <image :class="getTheme + '-m-back ' + getTheme" src="./../image/tel.png"></image>
  43. <text>{{is_user?'联系团长':'联系收货人'}}</text>
  44. </view>
  45. </view>
  46. <view class="info-bottom">
  47. <view v-if="is_user && detail.middleman_info" class="dir-left-nowrap cross-center"><image src="./../image/middleman-add.png"></image>提货地址:{{detail.address}}</view>
  48. <view v-else>订单备注:{{detail.remark ? detail.remark : '暂无备注'}}</view>
  49. </view>
  50. </view>
  51. <view class="item-card">
  52. <view>
  53. <view class="goods-title main-between">
  54. <view class="dir-left-nowrap cross-center">
  55. <image src="./../image/activity-name.png"></image>
  56. <view>{{detail.activity_name}}</view>
  57. </view>
  58. <view v-if="is_user && detail.status_text == '待发货'" class="number" :class="getTheme + '-m-text ' + getTheme">{{detail.no}}</view>
  59. </view>
  60. <view v-for="goods in detail.detail">
  61. <view class="goods" :key="goods.id">
  62. <image mode='aspectFill' class="goods-img" :src='goods.goods_info.pic_url'></image>
  63. <view class='t-omit-two goods-name'>{{goods.goods_info.name}}</view>
  64. <view class="goods-attr t-omit">
  65. <text v-for="attr in goods.goods_info.attr_list" :key="item.attr_id">{{attr.attr_group_name}}:{{attr.attr_name}}</text>
  66. </view>
  67. <view class="goods-num">x{{goods.goods_info.num}}</view>
  68. <view class="goods-price">¥{{goods.goods_info.total_original_price}}</view>
  69. </view>
  70. <view class="" v-if="goods.service_price" style="display: flex; align-items: center;justify-content: space-between;">
  71. <view class="goods-num" style="position: static;">
  72. 碎屏险 x1
  73. </view>
  74. <view class="goods-price" style="position: static;">
  75. ¥{{goods.service_price}}
  76. </view>
  77. </view>
  78. <view class="refund dir-right-nowrap">
  79. <!-- <view @click="toRefund" class="refund-btn">申请退款</view> -->
  80. <!-- 无售后记录 且 未超过售后时间 才可申请售后 -->
  81. <block v-if='goods.is_show_apply_refund'>
  82. <app-jump-button :url="`/pages/order/refund/select-refund-type?id=${goods.id}&sign=community`">
  83. <view size='mini' class='refund-btn'>申请售后</view>
  84. </app-jump-button>
  85. </block>
  86. <block v-else-if="goods.refund">
  87. <text class='refund-status'>已申请售后({{goods.refund.status_text}})</text>
  88. </block>
  89. </view>
  90. </view>
  91. </view>
  92. <view class="main-between price-item">
  93. <view class="price-label">商品金额</view>
  94. <view>¥{{detail.total_goods_original_price}}</view>
  95. </view>
  96. <view v-if="detail.plugin_data" class="main-between price-item" v-for="(pluginData,index) in detail.plugin_data" :key="index">
  97. <view class="price-label">{{pluginData.label}}</view>
  98. <view>-¥{{ pluginData.value }}</view>
  99. </view>
  100. <view class="main-between price-item" style='margin-bottom: 0'>
  101. <view class="price-label">合计</view>
  102. <view class="total-price" :class="getTheme+ '-m-text ' + getTheme">¥{{detail.total_price}}</view>
  103. </view>
  104. </view>
  105. <view v-if="!is_user" class="item-card main-between cross-center">
  106. <view class="goods-title dir-left-nowrap cross-center">
  107. <image src="./../image/profit.png"></image>
  108. <view>利润</view>
  109. </view>
  110. <view class="total-price" :class="getTheme+ '-m-text ' + getTheme">¥{{detail.profit_price}}</view>
  111. </view>
  112. <view v-if="is_user && detail.remark" class="item-card">
  113. <view class="time-info main-between">
  114. <view>备注: {{detail.remark}}</view>
  115. </view>
  116. </view>
  117. <view class="item-card">
  118. <view class="time-info main-between">
  119. <view>订单号: {{detail.order_no}}</view>
  120. <view @click="copy" class="copy-btn">复制</view>
  121. </view>
  122. <view class="time-info">下单时间: {{detail.created_at}}</view>
  123. <view v-if="detail.pay_time != '0000-00-00 00:00:00'" class="time-info">付款时间: {{detail.pay_time}}</view>
  124. <view v-if="detail.send_time != '0000-00-00 00:00:00'" class="time-info">发货时间: {{detail.send_time}}</view>
  125. <view v-if="detail.confirm_time != '0000-00-00 00:00:00'" class="time-info">提货时间: {{detail.confirm_time}}</view>
  126. <view v-if="detail.is_sale == 1" class="time-info">完成时间: {{detail.updated_at}}</view>
  127. </view>
  128. <view :class="['bottom-place', `${iphone_x? 'iphone_x':''}`]"></view>
  129. <view v-if="(is_user && (detail.status_text == '待付款' || detail.status_text == '待发货')) || detail.status_text == '待提货'" :class="['dir-right-nowrap','btn', `${iphone_x ? 'iphone_x':''}`]">
  130. <view @click.stop="orderPay" v-if="is_user && detail.is_pay == 0 && detail.cancel_status == 0" class="handle-btn" :class="getTheme + '-m-text ' + getTheme + ' ' +getTheme + '-m-border ' + getTheme">立即支付</view>
  131. <view @click.stop="toRemind" v-if="detail.is_send == 1 && detail.is_confirm == 0" class="handle-btn" :class="getTheme + '-m-text ' + getTheme + ' ' +getTheme + '-m-border ' + getTheme">确认提货</view>
  132. <view @click.stop="cancel" v-if="detail.is_pay == 1 && detail.is_send == 0" class="handle-btn" :class="getTheme + '-m-text ' + getTheme + ' ' +getTheme + '-m-border ' + getTheme">申请退款</view>
  133. </view>
  134. <view v-if="is_user && (detail.is_pay == 0 || (detail.is_pay == 1 && detail.is_send == 0)) && detail.cancel_status == 0" :class="['bottom-total-price',`${getTheme+ '-m-text ' + getTheme}`, `${iphone_x? 'iphone_x':''}`]">合计:¥{{detail.total_price}}</view>
  135. <view v-if="show" class="bg">
  136. <view class="dialog">
  137. <view class="dialog-content">是否确认提货</view>
  138. <view class="main-center btn-area">
  139. <view class="submit-btn box-grow-1" style="color: #666" @click='toRemind'>取消</view>
  140. <view class="line"></view>
  141. <view class="submit-btn box-grow-1" @click='beConfirm' :class="getTheme + '-m-text ' + getTheme">确认</view>
  142. </view>
  143. </view>
  144. </view>
  145. <view @click="toBig" v-if="showQr" class="bg">
  146. <view @click.stop="" class="dialog qr-dialog dir-top-nowrap cross-center">
  147. <image @click.stop="toBig" class="close" src="/static/image/icon/icon-close.png"></image>
  148. <image class="qr" :src="detail.no_QrCode.file_path"></image>
  149. <view>提货编码 {{detail.no}}</view>
  150. <view class="qr-info">仅{{detail.middleman_info.middleman_name}} {{detail.middleman_info.name}} 可以扫码核销</view>
  151. </view>
  152. </view>
  153. </scroll-view>
  154. </app-layout>
  155. </template>
  156. <script>
  157. import {mapGetters, mapState} from 'vuex';
  158. import appHead from "../components/app-head.vue";
  159. export default {
  160. data() {
  161. return {
  162. detail: {
  163. profit_price: '',
  164. total_price: '',
  165. total_goods_price: '',
  166. total_goods_original_price: '',
  167. created_at: '',
  168. order_no: '',
  169. pay_time: '0000-00-00 00:00:00',
  170. send_time: '0000-00-00 00:00:00',
  171. confirm_time: '0000-00-00 00:00:00',
  172. sale_time: '0000-00-00 00:00:00',
  173. },
  174. d: '',
  175. h: '',
  176. m: '',
  177. s: '',
  178. windowHeight: 0,
  179. timeInterval: null,
  180. showQr: false,
  181. is_user: false,
  182. show: false,
  183. iphone_x: false
  184. }
  185. },
  186. components: {
  187. appHead
  188. },
  189. computed: {
  190. ...mapGetters('mallConfig', {
  191. getTheme: 'getTheme',
  192. }),
  193. ...mapState({
  194. userInfo: state => state.user.info,
  195. adminImg: state => state.mallConfig.__wxapp_img.app_admin,
  196. })
  197. },
  198. methods: {
  199. // 取消 | 申请退款
  200. cancel(e) {
  201. let self = this;
  202. uni.navigateTo({
  203. url: '/pages/order/refund/order-refund?id=' + self.detail.id
  204. });
  205. },
  206. toBig() {
  207. if(this.detail.status_text == '已提货' || this.detail.status_text == '已完成') {
  208. return false
  209. }
  210. this.showQr = !this.showQr
  211. },
  212. toRemind() {
  213. this.show = !this.show;
  214. },
  215. beConfirm() {
  216. let that = this;
  217. that.show = false;
  218. uni.showLoading({
  219. title: '确认提货中...'
  220. });
  221. that.$request({
  222. url: that.is_user ? that.$api.order.confirm : that.$api.community.confirm,
  223. data: {
  224. id: that.detail.id
  225. }
  226. }).then(response=>{
  227. uni.hideLoading();
  228. if(response.code == 0) {
  229. that.getDetail();
  230. }else {
  231. uni.showToast({
  232. title: response.msg,
  233. icon: 'none',
  234. duration: 1000
  235. });
  236. }
  237. })
  238. },
  239. // 订单支付
  240. orderPay(e) {
  241. let _this = this;
  242. _this.$showLoading();
  243. _this.$request({
  244. url: _this.$api.order.list_pay_data,
  245. data: {
  246. id: this.detail.id
  247. }
  248. }).then(response => {
  249. _this.$hideLoading();
  250. if (response.code === 0) {
  251. _this.$payment.pay(response.data.id).then(() => {
  252. // 支付成功
  253. uni.redirectTo({
  254. url: '/plugins/community/order/order?is_user=1'
  255. })
  256. }).catch(e => {
  257. // 支付失败
  258. uni.showModal({
  259. title: '',
  260. content: e.errMsg,
  261. showCancel: false
  262. })
  263. })
  264. }
  265. }).catch(() => {
  266. _this.$hideLoading();
  267. });
  268. },
  269. copy() {
  270. uni.setClipboardData({
  271. data: this.detail.order_no,
  272. success() {
  273. uni.hideToast();
  274. uni.getClipboardData({
  275. success() {
  276. uni.showToast({
  277. title: '复制成功',
  278. duration: 1000
  279. });
  280. }
  281. })
  282. }
  283. })
  284. },
  285. tel() {
  286. let phoneNumber = this.detail.mobile
  287. if(this.is_user) {
  288. phoneNumber = this.detail.middleman_info.mobile
  289. }
  290. uni.makePhoneCall({
  291. phoneNumber: phoneNumber
  292. })
  293. },
  294. getDetail() {
  295. let that = this;
  296. that.$showLoading({
  297. type: 'global',
  298. text: '加载中...'
  299. });
  300. that.$request({
  301. url: that.is_user ? that.$api.community.order_detail : that.$api.community.middle_detail,
  302. data: {
  303. id: this.id
  304. },
  305. method: 'post'
  306. }).then(response=>{
  307. uni.hideLoading();
  308. that.$hideLoading();
  309. if(response.code === 0) {
  310. that.detail = response.data.detail;
  311. that.getTime(that.detail.cancel_time_stamp);
  312. let time = +that.detail.cancel_time_stamp - 1;
  313. if(time > 0) {
  314. that.timeInterval = setInterval(() =>{
  315. time--;
  316. if(time < 0) {
  317. clearInterval(that.timeInterval);
  318. that.getDetail();
  319. }else {
  320. that.getTime(time);
  321. }
  322. },1000);
  323. }
  324. }else {
  325. uni.showToast({
  326. title: response.msg,
  327. icon: 'none',
  328. duration: 1000
  329. });
  330. if(response.msg == '该订单您无权确认') {
  331. setTimeout(()=>{
  332. uni.redirectTo({
  333. url: '/pages/index/index'
  334. });
  335. },1000)
  336. }
  337. }
  338. }).catch(response => {
  339. uni.hideLoading();
  340. that.$hideLoading();
  341. });
  342. },
  343. getTime(time) {
  344. let that = this;
  345. if(time > 86399) {
  346. this.d = Math.floor(time / 86400)
  347. time = time - (86400*this.d)
  348. }else {
  349. this.d = 0
  350. }
  351. if(time > 3599) {
  352. this.h = Math.floor(time / 3600)
  353. if(this.h < 10) {
  354. this.h = '0' + this.h
  355. }
  356. time = time - (3600*this.h)
  357. }else {
  358. this.h = '00'
  359. }
  360. if(time > 59) {
  361. this.m = Math.floor(time / 60)
  362. if(this.m < 10) {
  363. this.m = '0' + this.m
  364. }
  365. time = time - (60*this.m)
  366. }else {
  367. this.m = '00';
  368. }
  369. if(time < 60) {
  370. this.s = time;
  371. if(this.s < 10) {
  372. this.s = '0' + this.s
  373. }
  374. }
  375. },
  376. },
  377. onHide() {
  378. clearInterval(this.timeInterval);
  379. },
  380. onUnload() {
  381. clearInterval(this.timeInterval);
  382. },
  383. onLoad(options) {
  384. let that = this;
  385. if(options.is_user == 1) {
  386. that.is_user = true
  387. }
  388. uni.getSystemInfo({
  389. success: function (res) {
  390. that.windowHeight = res.windowHeight;
  391. if(res.model.indexOf('iPhone X') > -1 || res.model.indexOf('iPhone 11') > -1 || res.model.indexOf('iPhone11') > -1 || res.model.indexOf('iPhone12') > -1 || res.model.indexOf('Unknown Device') > -1) {
  392. that.iphone_x = true;
  393. }
  394. }
  395. })
  396. that.id = options.id;
  397. that.getDetail();
  398. }
  399. }
  400. </script>
  401. <style scoped lang="scss">
  402. .bg {
  403. position: fixed;
  404. background-color: rgba(0,0,0,.3);
  405. top: 0;
  406. left: 0;
  407. height: 100%;
  408. width: 100%;
  409. z-index: 99;
  410. .dialog {
  411. width: 480rpx;
  412. height: 200rpx;
  413. position: fixed;
  414. top: 30%;
  415. left: 50%;
  416. margin-left: -240rpx;
  417. background-color: #fff;
  418. border-radius: 16rpx;
  419. z-index: 233;
  420. font-size: 28rpx;
  421. color: #353535;
  422. &.qr-dialog {
  423. top: 230rpx;
  424. width: 600rpx;
  425. height: 620rpx;
  426. border-radius: 16rpx;
  427. padding: 90rpx 0 56rpx;
  428. font-size: 32rpx;
  429. margin-left: -300rpx;
  430. .close {
  431. width: 30rpx;
  432. height: 30rpx;
  433. right: 103rpx;
  434. top: 260rpx;
  435. z-index: 234;
  436. position: fixed;
  437. }
  438. .qr {
  439. width: 360rpx;
  440. height: 360rpx;
  441. display: block;
  442. margin-bottom: 30rpx;
  443. }
  444. .qr-info {
  445. font-size: 26rpx;
  446. color: #999999;
  447. margin-top: 10rpx;
  448. }
  449. }
  450. .dialog-content {
  451. height: 110rpx;
  452. line-height: 110rpx;
  453. text-align: center;
  454. }
  455. .btn-area {
  456. height: #{88rpx};
  457. position: relative;
  458. border-top: #{2rpx} solid #e2e2e2;
  459. .line {
  460. height: #{32rpx};
  461. width: #{1rpx};
  462. background-color: #e2e2e2;
  463. position: absolute;
  464. top: #{28rpx};
  465. left: 0;
  466. right: 0;
  467. margin: 0 auto;
  468. }
  469. .submit-btn {
  470. height: #{88rpx};
  471. line-height: #{88rpx};
  472. font-size: #{28rpx};
  473. text-align: center;
  474. }
  475. }
  476. }
  477. }
  478. .title {
  479. padding: 20rpx 45rpx;
  480. margin-top: -320rpx;
  481. height: 160rpx;
  482. color: #fff;
  483. font-size: 26rpx;
  484. .big-title-text {
  485. font-size: 36rpx;
  486. }
  487. .pick {
  488. height: 124rpx;
  489. width: 124rpx;
  490. border-radius: 50%;
  491. background-color: #fff;
  492. color: #353535;
  493. font-size: 22rpx;
  494. &.over {
  495. background-color: #f0f0f0;
  496. color: #dbdbdb;
  497. .number {
  498. color: #dbdbdb;
  499. }
  500. }
  501. .number {
  502. font-size: 38rpx;
  503. }
  504. }
  505. }
  506. .info {
  507. border-radius: 16rpx;
  508. width: 702rpx;
  509. margin: 0 24rpx;
  510. background-color: #fff;
  511. position: relative;
  512. z-index: 10;
  513. font-size: 24rpx;
  514. .info-top {
  515. height: 106rpx;
  516. padding: 25rpx 24rpx;
  517. .user-info {
  518. height: 56rpx;
  519. .avatar {
  520. margin-right: 24rpx;
  521. width: 56rpx;
  522. height: 56rpx;
  523. border-radius: 50%;
  524. image {
  525. width: 56rpx;
  526. height: 56rpx;
  527. border-radius: 50%;
  528. }
  529. }
  530. .user {
  531. color: #353535;
  532. .user-name {
  533. margin-left: 0;
  534. display: inline-block;
  535. max-width: 100rpx;
  536. max-height: 62rpx;
  537. overflow: hidden;
  538. &.long-name {
  539. max-width: 230rpx;
  540. }
  541. }
  542. .middleman-name {
  543. margin-left: 10rpx;
  544. font-size: 20rpx;
  545. height: 30rpx;
  546. line-height: 26rpx;
  547. padding: 0 5rpx;
  548. display: inline-block;
  549. border-radius: 10rpx;
  550. border: 2rpx solid;
  551. margin-top: 2rpx;
  552. position: relative;
  553. white-space: nowrap;
  554. .middleman-bg {
  555. border-radius: 10rpx;
  556. position: absolute;
  557. top: 0;
  558. left: 0;
  559. opacity: 0.1;
  560. height: 100%;
  561. width: 100%;
  562. }
  563. }
  564. text {
  565. margin-left: 25rpx;
  566. }
  567. }
  568. }
  569. .detail-btn {
  570. height: 56rpx;
  571. line-height: 56rpx;
  572. image {
  573. height: #{28rpx};
  574. width: #{28rpx};
  575. display: block;
  576. margin-top: #{14rpx};
  577. margin-right: #{10rpx};
  578. float: left;
  579. }
  580. }
  581. }
  582. .info-bottom {
  583. border-top: 2rpx solid #e2e2e2;
  584. padding: 18rpx 24rpx;
  585. image {
  586. width: 19rpx;
  587. height: 25rpx;
  588. margin-right: 10rpx;
  589. }
  590. }
  591. }
  592. .item-card {
  593. padding: #{24rpx};
  594. background-color: #fff;
  595. margin: #{24rpx};
  596. margin-bottom: 0;
  597. border-radius: #{16rpx};
  598. position: relative;
  599. &.send {
  600. margin: #{24rpx};
  601. margin-top: 0;
  602. }
  603. .line {
  604. height: 180rpx;
  605. width: 2rpx;
  606. position: absolute;
  607. left: 50%;
  608. top: 10rpx;
  609. background-color: #e2e2e2;
  610. margin-left: -1rpx;
  611. }
  612. .send-info {
  613. width: 303rpx;
  614. height: 152rpx;
  615. text-align: center;
  616. color: #353535;
  617. font-size: 24rpx;
  618. .send-no {
  619. font-size: 38rpx;
  620. height: 135rpx;
  621. line-height: 135rpx;
  622. }
  623. .qr {
  624. display: block;
  625. height: 100rpx;
  626. width: 100rpx;
  627. margin-top: 10rpx;
  628. }
  629. }
  630. .total-price {
  631. font-size: 28rpx;
  632. }
  633. .goods-title {
  634. color: #353535;
  635. font-size: #{24rpx};
  636. height: 30rpx;
  637. image {
  638. width: 30rpx;
  639. height: 30rpx;
  640. margin-right: 14rpx;
  641. display: block;
  642. }
  643. .number {
  644. font-size: 32rpx;
  645. }
  646. }
  647. .goods {
  648. height: #{160rpx};
  649. margin-top: #{24rpx};
  650. position: relative;
  651. font-size: #{24rpx};
  652. color: #353535;
  653. margin-bottom: #{24rpx};
  654. .goods-img {
  655. height: #{160rpx};
  656. width: #{160rpx};
  657. float: left;
  658. margin-right: #{24rpx};
  659. border-radius: #{4rpx};
  660. }
  661. .goods-name {
  662. font-size: 26rpx;
  663. }
  664. .goods-attr {
  665. color: #999;
  666. width: 70%;
  667. position: absolute;
  668. top: #{78rpx};
  669. left: #{180rpx};
  670. text {
  671. margin-right: #{20rpx};
  672. }
  673. }
  674. .goods-num {
  675. font-size: #{24rpx};
  676. color: #999;
  677. position: absolute;
  678. top: #{126rpx};
  679. left: #{180rpx};
  680. }
  681. .goods-price {
  682. font-size: #{24rpx};
  683. color: #353535;
  684. position: absolute;
  685. bottom: 0;
  686. right: 0;
  687. }
  688. }
  689. .refund {
  690. margin-bottom: #{40rpx};
  691. .refund-btn {
  692. width: #{168rpx};
  693. text-align: center;
  694. height: #{56rpx};
  695. line-height: #{54rpx};
  696. font-size: #{26rpx};
  697. color: #666666;
  698. border: #{2rpx} solid #e2e2e2;
  699. border-radius: #{28rpx};
  700. }
  701. }
  702. .price-item {
  703. margin-bottom: #{10rpx};
  704. font-size: #{24rpx};
  705. color: #353535;
  706. .price-label {
  707. color: #999;
  708. font-size: #{24rpx};
  709. }
  710. }
  711. .time-info {
  712. margin-top: 25rpx;
  713. color: #353535;
  714. font-size: #{24rpx};
  715. &:first-of-type {
  716. margin-top: 0;
  717. }
  718. .copy-btn {
  719. position: absolute;
  720. top: 12rpx;
  721. right: 24rpx;
  722. height: 60rpx;
  723. border-radius: 30rpx;
  724. line-height: 58rpx;
  725. padding: 0 30rpx;
  726. border: 2rpx solid #e2e2e2;
  727. }
  728. }
  729. }
  730. .bottom-place {
  731. height: #{120rpx};
  732. &.iphone_x {
  733. height: #{170rpx};
  734. }
  735. }
  736. .bottom-total-price {
  737. height: #{96rpx};
  738. line-height: 96rpx;
  739. position: fixed;
  740. bottom: 0;
  741. width: 50%;
  742. left: 30rpx;
  743. z-index: 14;
  744. font-size: 32rpx;
  745. &.iphone_x {
  746. height: #{146rpx};
  747. line-height: 146rpx;
  748. padding-bottom: #{50rpx};
  749. }
  750. }
  751. .btn {
  752. height: #{96rpx};
  753. position: fixed;
  754. bottom: 0;
  755. width: 100%;
  756. right: 0;
  757. border-top: #{1rpx} solid #e2e2e2;
  758. z-index: 10;
  759. padding: #{24rpx};
  760. background-color: #fff;
  761. &.iphone_x {
  762. height: #{146rpx};
  763. padding-bottom: #{50rpx};
  764. }
  765. .handle-btn {
  766. height: #{48rpx};
  767. line-height: #{46rpx};
  768. padding: 0 #{24rpx};
  769. border-radius: #{24rpx};
  770. border: #{2rpx} solid;
  771. font-size: #{24rpx};
  772. margin-left: #{16rpx};
  773. display: inline-block;
  774. }
  775. }
  776. </style>