tihuoOrder.vue 21 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078
  1. <template>
  2. <view class="content">
  3. <view class="navbar" v-show="currentIndex == 0">
  4. <view v-for="(item, index) in navList" :key="index" class="nav-item"
  5. :class="{ current: tabCurrentIndex === index }" @click="tabClick(index, 0)">
  6. {{ item.text }}
  7. <view class="dian" v-if="tabCurrentIndex != index && item.isnew == 2"></view>
  8. </view>
  9. </view>
  10. <swiper :current="currentAuto" class="swiper-box-one" duration="0" @change="changeTab">
  11. <swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex"
  12. v-if="currentIndex == 0">
  13. <scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
  14. <!-- 空白页 -->
  15. <empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
  16. <!-- 订单列表 -->
  17. <view v-for="(item, index) in tabItem.orderList" :key="index" class="order-item">
  18. <view class="i-top b-b">
  19. <text class="time">{{ item.create_time }}</text>
  20. <text class="state" :style="{ color: item.stateTipColor }">{{ item.stateTip }}</text>
  21. </view>
  22. <view class="goods-box-single">
  23. <image class="goods-img" :src="item.image" mode="aspectFill"></image>
  24. <view class="right">
  25. <text class="title clamp">{{ item.name }}</text>
  26. <text class="attr-box">x1</text>
  27. <text class="price">{{ moneyNum(item.price) }}</text>
  28. </view>
  29. </view>
  30. <view class="price-box">
  31. <text class="num">1</text>
  32. 件商品 邮费
  33. <text class="price">0</text>
  34. 实付款
  35. <text class="price">{{ moneyNum(item.price) }}</text>
  36. </view>
  37. <view class="price-box">
  38. 快递名称:
  39. <text class="num">{{item.delivery_name||'暂未发货' }}</text>
  40. 单号:<text class=" num">{{item.delivery_id||'暂未发货'}}</text>
  41. </view>
  42. </view>
  43. <uni-load-more :status="tabItem.loadingType"></uni-load-more>
  44. </scroll-view>
  45. </swiper-item>
  46. </swiper>
  47. </view>
  48. </template>
  49. <script>
  50. import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
  51. import empty from '@/components/empty';
  52. import {
  53. orderList,
  54. orderCancel,
  55. orderDel,
  56. orderTake,
  57. adopt,
  58. user_auction_order,
  59. seller,
  60. cancel,
  61. untreated,
  62. plead,
  63. revoke,
  64. deliver_list
  65. } from '@/api/order.js';
  66. import {
  67. tabbar
  68. } from '@/utils/tabbar.js';
  69. export default {
  70. components: {
  71. uniLoadMore,
  72. empty
  73. },
  74. data() {
  75. return {
  76. loading: false, //判断是否在点击
  77. height: '', //第一层swiper高度
  78. tabbar: tabbar,
  79. current: 1, //底部tabar选中的icon对象
  80. currentIndex: 0, //当前选中的第一级0为我要买单,1我要卖单
  81. tabCurrentIndex: 0, //当前选中的第二级别我要买单选中项
  82. tabCurrentIndex1: 0, //当前选中的第二级别我要卖单选中项
  83. maiList: [{
  84. title: '我的买单'
  85. },
  86. {
  87. title: '我的卖单'
  88. }
  89. ],
  90. navList: [{
  91. state: 0,
  92. text: '未发货',
  93. loadingType: 'more',
  94. orderList: [],
  95. isnew: 1, //判断是否有新的订单
  96. page: 1, //当前页数
  97. limit: 10 //每次信息条数
  98. },
  99. {
  100. state: 1,
  101. text: '待收货',
  102. loadingType: 'more',
  103. orderList: [],
  104. isnew: 1, //判断是否有新的订单
  105. page: 1, //当前页数
  106. limit: 10 //每次信息条数
  107. },
  108. {
  109. state: 2,
  110. text: '已收货',
  111. loadingType: 'more',
  112. orderList: [],
  113. isnew: 1, //判断是否有新的订单
  114. page: 1, //当前页数
  115. limit: 10 //每次信息条数
  116. }
  117. ]
  118. };
  119. },
  120. computed: {
  121. currentAuto() {
  122. if (this.currentIndex == 0) {
  123. return this.tabCurrentIndex;
  124. }
  125. if (this.currentIndex == 1) {
  126. return this.tabCurrentIndex1;
  127. }
  128. }
  129. },
  130. onLoad(options) {
  131. /**
  132. * 修复app端点击除全部订单外的按钮进入时不加载数据的问题
  133. * 替换onLoad下代码即可
  134. */
  135. this.tabCurrentIndex = +options.state || 0;
  136. },
  137. onShow() {
  138. this.loadData();
  139. },
  140. // #ifdef APP-PLUS || H5
  141. onBackPress(e) {
  142. uni.switchTab({
  143. url: '/pages/user/user'
  144. });
  145. return true;
  146. },
  147. // #endif
  148. filters: {
  149. moneyNum(value) {
  150. return +value;
  151. }
  152. },
  153. // 页面加载完获取swiper高度
  154. onReady(res) {
  155. var obj = this;
  156. uni.getSystemInfo({
  157. success: resu => {
  158. const query = uni.createSelectorQuery();
  159. query.select('.swiper-box-one').boundingClientRect();
  160. query.exec(function(res) {
  161. console.log(res, 'ddddddddddddd');
  162. obj.height = resu.windowHeight - res[0].top + 'px';
  163. console.log('打印页面的剩余高度', obj.height);
  164. });
  165. },
  166. fail: res => {}
  167. });
  168. },
  169. methods: {
  170. //顶部tab点击
  171. tabClick(index, type) {
  172. this.tabCurrentIndex = index;
  173. },
  174. toBack() {
  175. uni.switchTab({
  176. url: '/pages/order/index'
  177. });
  178. },
  179. navGo(index) {
  180. this.currentIndex = index;
  181. console.log(this.currentIndex, '点击');
  182. this.upData();
  183. this.loadData('reload');
  184. },
  185. // 转换金额为数字
  186. moneyNum(value) {
  187. return +value;
  188. },
  189. // 订单支付
  190. pay(item) {
  191. uni.navigateTo({
  192. url: '/pages/hall/hallpay?ordid=' + item.order_id + '&type=2'
  193. });
  194. },
  195. // 查看大图
  196. lookimg(src) {
  197. console.log(src);
  198. let arr = [src];
  199. uni.previewImage({
  200. current: src,
  201. urls: arr
  202. });
  203. },
  204. //申诉和取消申诉
  205. appeal(item) {
  206. const obj = this;
  207. if (this.loading) {
  208. return;
  209. }
  210. this.loading = true;
  211. if (item.appeal == 0) {
  212. uni.showModal({
  213. title: '提示',
  214. content: '提交申诉后会导致画被冻结,是否继续提交申诉',
  215. success: function(res) {
  216. if (res.confirm) {
  217. uni.showLoading({
  218. title: '申诉中'
  219. });
  220. plead({
  221. order_id: item.order_id
  222. }).then(e => {
  223. uni.hideLoading();
  224. obj.$api.msg('申诉成功');
  225. obj.loadData('reload');
  226. obj.loading = false;
  227. });
  228. } else if (res.cancel) {
  229. console.log('用户点击取消');
  230. }
  231. }
  232. });
  233. } else {
  234. uni.showModal({
  235. title: '提示',
  236. content: '提交撤销申诉后会导致画被解冻,是否继续提交取消申诉',
  237. success: function(res) {
  238. if (res.confirm) {
  239. uni.showLoading({
  240. title: '取消申诉中'
  241. });
  242. revoke({
  243. order_id: item.order_id
  244. }).then(e => {
  245. uni.hideLoading();
  246. obj.$api.msg('取消申诉成功');
  247. obj.loadData('reload');
  248. obj.loading = false;
  249. });
  250. } else if (res.cancel) {
  251. console.log('用户点击取消');
  252. }
  253. }
  254. });
  255. }
  256. },
  257. //跳转到订单详情
  258. goToOrderDetail(e) {
  259. console.log(11);
  260. uni.navigateTo({
  261. url: '/pages/order/hallorderDetail?id=' + e.order_id
  262. });
  263. },
  264. gsell(item) {
  265. if (item.frozen) {
  266. return this.$api.msg('已冻结,请联系客服或与卖家协商');
  267. } else {
  268. uni.navigateTo({
  269. url: '/pages/hall/gsell?id=' + item.product_id
  270. });
  271. }
  272. },
  273. tiHuo(item) {
  274. uni.navigateTo({
  275. url: '/pages/order/tihuo?id=' + item.product_id
  276. })
  277. },
  278. //卖家确认订单
  279. orderPay(e) {
  280. const obj = this;
  281. if (this.loading) {
  282. return;
  283. }
  284. uni.showModal({
  285. title: '提示',
  286. content: '通过后商品将进入买家账户,是否核实完成后继续通过',
  287. success: function(res) {
  288. if (res.confirm) {
  289. uni.showLoading({
  290. title: '确认订单中'
  291. });
  292. this.loading = true;
  293. adopt({
  294. order_id: e.order_id
  295. }).then(({
  296. data
  297. }) => {
  298. console.log('1111');
  299. uni.hideLoading();
  300. obj.loading = false;
  301. obj.loadData('reload');
  302. obj.upData();
  303. });
  304. } else if (res.cancel) {
  305. console.log('用户点击取消');
  306. }
  307. }
  308. });
  309. },
  310. //取消挂售
  311. cancel(e) {
  312. if (this.loading) {
  313. return;
  314. }
  315. this.loading = true;
  316. uni.showLoading({
  317. title: '取消挂售中'
  318. });
  319. cancel({
  320. id: e.id
  321. }).then(({
  322. data
  323. }) => {
  324. uni.hideLoading();
  325. this.loading = false;
  326. this.loadData('reload');
  327. this.upData();
  328. });
  329. },
  330. //获取订单列表
  331. loadData(source) {
  332. //这里是将订单挂载到tab列表下
  333. let index, navItem;
  334. if (this.currentIndex == 0) {
  335. index = this.tabCurrentIndex;
  336. navItem = this.navList[index];
  337. console.log( this.navList[index],source,' this.navList[index]; this.navList[index];');
  338. }
  339. let state = navItem.state;
  340. if (source == 'reload') {
  341. navItem.orderList = [];
  342. navItem.page = 1;
  343. navItem.limit = 10;
  344. navItem.loadingType = 'more';
  345. }
  346. // if ( navItem.loaded === true) {
  347. // //tab切换只有第一次需要加载数据
  348. // return;
  349. // }
  350. if (navItem.loadingType === 'loading') {
  351. //防止重复加载
  352. return;
  353. }
  354. if (navItem.loadingType === 'noMore') {
  355. //防止重复加载
  356. return;
  357. }
  358. // 修改当前对象状态为加载中
  359. navItem.loadingType = 'loading';
  360. if (this.currentIndex == 0) {
  361. deliver_list({
  362. status : state,
  363. page: navItem.page,
  364. limit: navItem.limit
  365. })
  366. .then(({
  367. data
  368. }) => {
  369. console.log(data,'data');
  370. let arr = data.map(e => {
  371. console.log(e);
  372. if (state == 4) {
  373. e.stateTip = '待挂售';
  374. e.stateTipColor = '#fa436a';
  375. } else {
  376. if (e.status == 3 && e.is_gs == 0) {
  377. e.stateTip = '待挂售';
  378. e.stateTipColor = '#fa436a';
  379. } else {
  380. let b = this.orderStateExp(e.status);
  381. e.stateTip = b.stateTip;
  382. e.stateTipColor = b.stateTipColor;
  383. }
  384. }
  385. return e;
  386. });
  387. console.log(arr, '123456');
  388. navItem.orderList = navItem.orderList.concat(arr);
  389. // console.log(navItem.orderList);
  390. navItem.page++;
  391. if (navItem.limit == data.length) {
  392. //判断是否还有数据, 有改为 more, 没有改为noMore
  393. navItem.loadingType = 'more';
  394. return;
  395. } else {
  396. //判断是否还有数据, 有改为 more, 没有改为noMore
  397. navItem.loadingType = 'noMore';
  398. }
  399. uni.hideLoading();
  400. this.$set(navItem, 'loaded', true);
  401. })
  402. .catch(e => {
  403. console.log(e);
  404. });
  405. }
  406. if (this.currentIndex == 1) {
  407. seller({
  408. type: state,
  409. page: navItem.page,
  410. limit: navItem.limit
  411. })
  412. .then(({
  413. data
  414. }) => {
  415. console.log(data);
  416. let arr = data.map(e => {
  417. if (state == 4) {
  418. e.stateTip = '售卖中';
  419. e.stateTipColor = '#fa436a';
  420. } else {
  421. let b = this.orderStateExp(e.status);
  422. e.stateTip = b.stateTip;
  423. e.stateTipColor = b.stateTipColor;
  424. }
  425. return e;
  426. });
  427. navItem.orderList = navItem.orderList.concat(arr);
  428. // console.log(navItem.orderList);
  429. navItem.page++;
  430. if (navItem.limit == data.length) {
  431. //判断是否还有数据, 有改为 more, 没有改为noMore
  432. navItem.loadingType = 'more';
  433. return;
  434. } else {
  435. //判断是否还有数据, 有改为 more, 没有改为noMore
  436. navItem.loadingType = 'noMore';
  437. }
  438. uni.hideLoading();
  439. this.$set(navItem, 'loaded', true);
  440. })
  441. .catch(e => {
  442. console.log(e);
  443. });
  444. }
  445. },
  446. //swiper 切换
  447. changeTab(e) {
  448. this.tabCurrentIndex = e.target.current;
  449. this.loadData('tabChange');
  450. },
  451. //删除订单
  452. deleteOrder(index) {
  453. uni.showLoading({
  454. title: '请稍后'
  455. });
  456. setTimeout(() => {
  457. this.navList[this.tabCurrentIndex].orderList.splice(index, 1);
  458. uni.hideLoading();
  459. }, 600);
  460. },
  461. //取消订单
  462. call(item) {
  463. console.log(item.phone);
  464. uni.makePhoneCall({
  465. phoneNumber: item.phone //仅为示例
  466. });
  467. },
  468. //订单状态文字和颜色
  469. orderStateExp(state) {
  470. let stateTip = '',
  471. stateTipColor = '#fa436a';
  472. switch (+state) {
  473. case 0:
  474. stateTip = '未发货';
  475. break;
  476. case 1:
  477. stateTip = '待收货';
  478. break;
  479. case 2:
  480. stateTip = '已收货';
  481. break;
  482. case 9:
  483. stateTip = '订单已关闭';
  484. stateTipColor = '#909399';
  485. break;
  486. //更多自定义
  487. }
  488. return {
  489. stateTip,
  490. stateTipColor
  491. };
  492. }
  493. }
  494. };
  495. </script>
  496. <style lang="scss">
  497. page,
  498. .content {
  499. background: $page-color-base;
  500. height: 100%;
  501. }
  502. .order-title {
  503. width: 750rpx;
  504. height: 270rpx;
  505. background: url(../../static/img/order99.png) repeat-x 0;
  506. display: flex;
  507. flex-direction: column;
  508. // padding: 50rpx 0;
  509. text-align: center;
  510. .body-title {
  511. height: 80rpx;
  512. text-align: center;
  513. font-size: 35rpx;
  514. position: relative;
  515. .header {
  516. position: absolute;
  517. left: 0;
  518. top: 30rpx;
  519. width: 100%;
  520. font-size: 36rpx;
  521. font-family: PingFang SC;
  522. font-weight: bold;
  523. color: #fffeff;
  524. height: 80rpx;
  525. font-size: 36rpx;
  526. font-weight: 700;
  527. z-index: 9;
  528. display: flex;
  529. justify-content: center;
  530. align-items: center;
  531. }
  532. .goback-box {
  533. position: absolute;
  534. left: 18rpx;
  535. top: 30rpx;
  536. height: 80rpx;
  537. display: flex;
  538. align-items: center;
  539. }
  540. .goback {
  541. z-index: 100;
  542. width: 34rpx;
  543. height: 34rpx;
  544. }
  545. }
  546. text {
  547. margin: 30px 0;
  548. font-size: 17px;
  549. font-family: PingFang SC;
  550. font-weight: bold;
  551. color: #ffffff;
  552. }
  553. .roder-content {
  554. margin-top: 80rpx;
  555. display: flex;
  556. justify-content: space-around;
  557. .left {
  558. width: 168px;
  559. height: 40px;
  560. line-height: 40px;
  561. border: 1px solid #ffffff;
  562. border-radius: 5px;
  563. text-align: center;
  564. font-size: 15px;
  565. font-family: PingFang SC;
  566. font-weight: bold;
  567. color: #ffffff;
  568. background: #dc262b;
  569. }
  570. .current {
  571. color: #dc262b;
  572. background: #ffffff;
  573. }
  574. }
  575. }
  576. .swiper-box {
  577. background: red;
  578. }
  579. .list-scroll-content {
  580. height: 100%;
  581. }
  582. .uni-swiper-item {
  583. height: auto;
  584. }
  585. .navbar {
  586. display: flex;
  587. height: 40px;
  588. padding: 0 5px;
  589. background: #fff;
  590. box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
  591. position: relative;
  592. z-index: 10;
  593. .nav-item {
  594. flex: 1;
  595. display: flex;
  596. justify-content: center;
  597. align-items: center;
  598. height: 100%;
  599. font-size: 15px;
  600. color: $font-color-dark;
  601. position: relative;
  602. .dian {
  603. position: absolute;
  604. top: 20rpx;
  605. right: 10rpx;
  606. width: 12rpx;
  607. height: 12rpx;
  608. border-radius: 50%;
  609. background-color: $base-color;
  610. }
  611. &.current {
  612. color: $base-color;
  613. &:after {
  614. content: '';
  615. position: absolute;
  616. left: 50%;
  617. bottom: 0;
  618. transform: translateX(-50%);
  619. width: 44px;
  620. height: 0;
  621. border-bottom: 2px solid $base-color;
  622. }
  623. }
  624. }
  625. }
  626. .order-item {
  627. display: flex;
  628. flex-direction: column;
  629. background: #fff;
  630. margin-top: 16rpx;
  631. .i-top {
  632. display: flex;
  633. align-items: center;
  634. height: 80rpx;
  635. font-size: $font-base;
  636. color: $font-color-dark;
  637. position: relative;
  638. padding: 0 30rpx;
  639. .time {
  640. flex: 1;
  641. }
  642. .state {
  643. color: $base-color;
  644. }
  645. .del-btn {
  646. padding: 10rpx 0 10rpx 36rpx;
  647. font-size: $font-lg;
  648. color: $font-color-light;
  649. position: relative;
  650. &:after {
  651. content: '';
  652. width: 0;
  653. height: 30rpx;
  654. border-left: 1px solid $border-color-dark;
  655. position: absolute;
  656. left: 20rpx;
  657. top: 50%;
  658. transform: translateY(-50%);
  659. }
  660. }
  661. }
  662. /* 多条商品 */
  663. .goods-box {
  664. height: 160rpx;
  665. padding: 20rpx 0;
  666. white-space: nowrap;
  667. .goods-item {
  668. width: 120rpx;
  669. height: 120rpx;
  670. display: inline-block;
  671. margin-right: 24rpx;
  672. }
  673. .goods-img {
  674. display: block;
  675. width: 100%;
  676. height: 100%;
  677. }
  678. }
  679. /* 单条商品 */
  680. .goods-box-single {
  681. display: flex;
  682. padding: 20rpx 30rpx;
  683. background: #f7f7f7;
  684. .goods-img {
  685. display: block;
  686. width: 120rpx;
  687. height: 120rpx;
  688. }
  689. .right {
  690. flex: 1;
  691. display: flex;
  692. flex-direction: column;
  693. padding: 0 0 0 24rpx;
  694. overflow: hidden;
  695. .row {
  696. margin-top: 10rpx;
  697. }
  698. .row_title {
  699. padding: 5rpx 10rpx;
  700. background-color: #dddddd;
  701. border-radius: 10rpx;
  702. font-size: 22rpx;
  703. color: #ffffff;
  704. }
  705. .title {
  706. font-size: $font-base + 2rpx;
  707. color: $font-color-dark;
  708. line-height: 1;
  709. width: 80%;
  710. }
  711. .attr-box {
  712. display: flex;
  713. justify-content: flex-end;
  714. font-size: $font-sm + 2rpx;
  715. color: $font-color-light;
  716. }
  717. .price {
  718. display: inline;
  719. font-size: $font-base + 2rpx;
  720. color: $font-color-dark;
  721. &:before {
  722. content: '¥';
  723. font-size: $font-sm;
  724. }
  725. }
  726. }
  727. }
  728. .buy-box {
  729. padding: 10rpx 22rpx;
  730. background-color: #ffffff;
  731. .buy-info {
  732. display: flex;
  733. align-items: center;
  734. margin-top: 20rpx;
  735. .font {
  736. font-size: 32rpx;
  737. font-family: PingFang SC;
  738. font-weight: 500;
  739. color: #333333;
  740. }
  741. .avter {
  742. margin-left: 10rpx;
  743. width: 46rpx;
  744. height: 46rpx;
  745. border-radius: 50%;
  746. }
  747. .buy-name {
  748. margin-left: 10rpx;
  749. font-size: 32rpx;
  750. font-family: PingFang SC;
  751. font-weight: bold;
  752. color: #333333;
  753. }
  754. .phone {
  755. margin-left: 12rpx;
  756. font-size: 24rpx;
  757. font-family: PingFang SC;
  758. font-weight: 500;
  759. color: #999999;
  760. }
  761. }
  762. }
  763. .upimg {
  764. padding-left: 20rpx;
  765. padding-top: 10rpx;
  766. padding-bottom: 10rpx;
  767. display: flex;
  768. .up-tit {
  769. display: inline-block;
  770. font-size: 26rpx;
  771. font-family: PingFang SC;
  772. font-weight: 500;
  773. color: #6d7c88;
  774. }
  775. .img-wrap {
  776. width: 153rpx;
  777. height: 152rpx;
  778. border-radius: 20rpx;
  779. image {
  780. border-radius: 20rpx;
  781. width: 153rpx;
  782. height: 152rpx;
  783. background-color: #ccc;
  784. }
  785. }
  786. }
  787. .price-box {
  788. display: flex;
  789. justify-content: flex-end;
  790. align-items: baseline;
  791. padding: 20rpx 30rpx;
  792. font-size: $font-sm + 2rpx;
  793. color: $font-color-light;
  794. .num {
  795. margin: 0 8rpx;
  796. color: $font-color-dark;
  797. }
  798. .price {
  799. font-size: $font-lg;
  800. color: $font-color-dark;
  801. &:before {
  802. content: '¥';
  803. font-size: $font-sm;
  804. margin: 0 2rpx 0 8rpx;
  805. }
  806. }
  807. }
  808. .action-box {
  809. padding: 0 30rpx;
  810. display: flex;
  811. justify-content: flex-end;
  812. align-items: center;
  813. height: 100rpx;
  814. position: relative;
  815. }
  816. .refuse {
  817. margin: 0;
  818. padding: 0;
  819. width: 160rpx;
  820. height: 60rpx;
  821. border: 2rpx solid #ebebeb;
  822. border-radius: 28rpx;
  823. text-align: center;
  824. line-height: 60rpx;
  825. font-size: 26rpx;
  826. font-family: PingFang SC;
  827. font-weight: 500;
  828. color: #999999;
  829. &:after {
  830. border-radius: 100px;
  831. }
  832. &.recom {
  833. color: #999999;
  834. &:after {
  835. border-color: #999999;
  836. }
  837. }
  838. }
  839. .action-btn {
  840. width: 160rpx;
  841. height: 60rpx;
  842. margin: 0;
  843. margin-left: 24rpx;
  844. padding: 0;
  845. text-align: center;
  846. line-height: 60rpx;
  847. font-size: $font-sm + 2rpx;
  848. color: $font-color-dark;
  849. background: #fff;
  850. border-radius: 100px;
  851. border: 2rpx solid #fd3b39;
  852. border-radius: 28px;
  853. &:after {
  854. border-radius: 100px;
  855. }
  856. &.recom {
  857. color: $base-color;
  858. &:after {
  859. border-color: $base-color;
  860. }
  861. }
  862. &.evaluate {
  863. color: $color-yellow;
  864. &:after {
  865. border-color: $color-yellow;
  866. }
  867. }
  868. }
  869. }
  870. /* load-more */
  871. .uni-load-more {
  872. display: flex;
  873. flex-direction: row;
  874. height: 80rpx;
  875. align-items: center;
  876. justify-content: center;
  877. }
  878. .uni-load-more__text {
  879. font-size: 28rpx;
  880. color: #999;
  881. }
  882. .uni-load-more__img {
  883. height: 24px;
  884. width: 24px;
  885. margin-right: 10px;
  886. }
  887. .uni-load-more__img>view {
  888. position: absolute;
  889. }
  890. .uni-load-more__img>view view {
  891. width: 6px;
  892. height: 2px;
  893. border-top-left-radius: 1px;
  894. border-bottom-left-radius: 1px;
  895. background: #999;
  896. position: absolute;
  897. opacity: 0.2;
  898. transform-origin: 50%;
  899. animation: load 1.56s ease infinite;
  900. }
  901. .uni-load-more__img>view view:nth-child(1) {
  902. transform: rotate(90deg);
  903. top: 2px;
  904. left: 9px;
  905. }
  906. .uni-load-more__img>view view:nth-child(2) {
  907. transform: rotate(180deg);
  908. top: 11px;
  909. right: 0;
  910. }
  911. .uni-load-more__img>view view:nth-child(3) {
  912. transform: rotate(270deg);
  913. bottom: 2px;
  914. left: 9px;
  915. }
  916. .uni-load-more__img>view view:nth-child(4) {
  917. top: 11px;
  918. left: 0;
  919. }
  920. .load1,
  921. .load2,
  922. .load3 {
  923. height: 24px;
  924. width: 24px;
  925. }
  926. .load2 {
  927. transform: rotate(30deg);
  928. }
  929. .load3 {
  930. transform: rotate(60deg);
  931. }
  932. .load1 view:nth-child(1) {
  933. animation-delay: 0s;
  934. }
  935. .load2 view:nth-child(1) {
  936. animation-delay: 0.13s;
  937. }
  938. .load3 view:nth-child(1) {
  939. animation-delay: 0.26s;
  940. }
  941. .load1 view:nth-child(2) {
  942. animation-delay: 0.39s;
  943. }
  944. .load2 view:nth-child(2) {
  945. animation-delay: 0.52s;
  946. }
  947. .load3 view:nth-child(2) {
  948. animation-delay: 0.65s;
  949. }
  950. .load1 view:nth-child(3) {
  951. animation-delay: 0.78s;
  952. }
  953. .load2 view:nth-child(3) {
  954. animation-delay: 0.91s;
  955. }
  956. .load3 view:nth-child(3) {
  957. animation-delay: 1.04s;
  958. }
  959. .load1 view:nth-child(4) {
  960. animation-delay: 1.17s;
  961. }
  962. .load2 view:nth-child(4) {
  963. animation-delay: 1.3s;
  964. }
  965. .load3 view:nth-child(4) {
  966. animation-delay: 1.43s;
  967. }
  968. @-webkit-keyframes load {
  969. 0% {
  970. opacity: 1;
  971. }
  972. 100% {
  973. opacity: 0.2;
  974. }
  975. }
  976. .swiper-box-one {
  977. height: calc(100% - 175px);
  978. }
  979. </style>