球星卡微信小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

774 lines
19 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. <template>
  2. <view>
  3. <!-- tabs选项卡 -->
  4. <view class="lf-flex">
  5. <view style="width: 84%;">
  6. <u-tabs
  7. :current="tabIndex"
  8. :list="tabList"
  9. :lineWidth="34"
  10. :scrollable="false"
  11. :itemWidth="100 / tabList.length +'%'"
  12. lineColor="#E7A23F"
  13. @change="switchTab"
  14. >
  15. </u-tabs>
  16. </view>
  17. <view class="filter-icon">
  18. <image src="@/static/icon/filter.png" @click="showFilter = !showFilter"></image>
  19. </view>
  20. </view>
  21. <!-- 筛选 -->
  22. <view class="filter-box" v-if="showFilter">
  23. <view class="flex-col group_6" >
  24. <view class="flex-col section_5">
  25. <view class="flex-col">
  26. <text class="text_7">按收货确认时间</text>
  27. <view class="flex-col group_8">
  28. <view class="lf-flex lf-flex-wrap">
  29. <view class="filter-date-item" :class="{active: filterGather.date == item.value}" @click="selectReceivingTime(item)" v-for="(item, index) in receivingTimeList" :key="index">{{ item.label }}</view>
  30. </view>
  31. </view>
  32. </view>
  33. <view class="flex-col group_11">
  34. <text class="text_15">按送评信息</text>
  35. <view class="flex-row group_12">
  36. <view class="flex-col items-center text-wrapper_2">
  37. <u-input v-model="filterGather.name" placeholder="输入送评人姓名或手机号"></u-input>
  38. </view>
  39. <view class="flex-col items-start text-wrapper_3">
  40. <u-input v-model="filterGather.label" placeholder="输入标签"></u-input>
  41. </view>
  42. </view>
  43. </view>
  44. <view class="flex-col group_13">
  45. <text class="text_18">按送评信息</text>
  46. <view class="flex-col items-start text-wrapper_4">
  47. <u-input v-model="filterGather.order_num" placeholder="输入评级编号" class="text-wrapper_4-input" ></u-input>
  48. </view>
  49. </view>
  50. <view class="flex-row group_14">
  51. <view class="flex-col items-center text-wrapper_5" @click="reset">
  52. <text>重置</text>
  53. </view>
  54. <view class="flex-col items-center text-wrapper_6" @click="confirm">
  55. <text>确认</text>
  56. </view>
  57. </view>
  58. </view>
  59. <view class="flex-col items-center group_15" @click="showFilter = false">
  60. <view class="section_7"> </view>
  61. </view>
  62. </view>
  63. </view>
  64. <!-- 页面主体滚动区域 -->
  65. <swiper :current="tabIndex" :style="{height: swiperContentHeight}" @change="swiperChange">
  66. <swiper-item v-for="(tabItem, idx) in tabList" :key="idx" :item-id="tabItem.ident">
  67. <scroll-view
  68. :style="{height: swiperContentHeight, 'padding-top': '30rpx'}"
  69. :scroll-y="true"
  70. :refresher-enabled="true"
  71. :refresher-triggered="tabItem.isRefresher"
  72. @scrolltolower="scrolltolower"
  73. @refresherrefresh="refresherrefresh"
  74. >
  75. <view class="item-box" v-for="(item, index) in tabItem.data" :key="index" @click="$url('/packages/sonpingDetail/sonpingDetail?id='+ item.id)">
  76. <view class="flex-col section_5">
  77. <view class="justify-between">
  78. <view class="flex-row group_8">
  79. <image
  80. src="https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/62677e395a7e3f03107ffc5f/62677e4a35a7e10011e93a80/16509497798740970822.png"
  81. class="image_7"
  82. />
  83. <text class="text_7">在线送评 todo</text>
  84. </view>
  85. <text class="text_8">{{ ['','待确认','评级中','待付款','待收货'][item.status] }}</text>
  86. </view>
  87. <view class="justify-between group_9">
  88. <view class="flex-row">
  89. <text>{{ item.owner }}</text>
  90. <text class="text_10">{{ item.tel }}</text>
  91. </view>
  92. <text>{{ item.num }}</text>
  93. </view>
  94. <view class="justify-between group_11">
  95. <!-- <text class="text_12">更多</text> -->
  96. <text class="text_12"></text>
  97. <view class="flex-row" v-if="item.status == 1">
  98. <view class="flex-col items-center text-wrapper" @click.stop="orderCancel(item)">
  99. <text>取消</text>
  100. </view>
  101. <view class="flex-col items-center text-wrapper_1" @click.stop="orderSend(item)">
  102. <text>寄送藏品</text>
  103. </view>
  104. </view>
  105. <view class="flex-row" v-else-if="item.status == 2">
  106. <view class="flex-col items-center text-wrapper" @click.stop="orderAddressChange">
  107. <text>更改地址</text>
  108. </view>
  109. </view>
  110. <view class="flex-row" v-else-if="item.status == 3">
  111. <view class="flex-col items-center text-wrapper_1" style="border-color: #EA2B2B; color: #EA2B2B;" @click.stop="orderPay(item)">
  112. <text>付款</text>
  113. </view>
  114. </view>
  115. <view class="flex-row" v-else-if="item.status == 4">
  116. <view class="flex-col items-center text-wrapper_1" @click.stop="orderConfirm(item)">
  117. <text>确认收货</text>
  118. </view>
  119. </view>
  120. </view>
  121. </view>
  122. </view>
  123. <!-- 当前tab下没有数据且无分页数据时显示系统剪辑中 -->
  124. <view class="nomore-box" v-if="tabItem.data.length <= 0 && !tabItem.isPage">
  125. <image src="@/static/images/nomore.png"></image>
  126. <view>暂无订单记录</view>
  127. </view>
  128. <!-- 加载中和暂无更多显示 -->
  129. <u-loadmore :status="tabItem.status" margin-bottom="20" marginTop="20" v-else></u-loadmore>
  130. <!-- 底部修饰解决部分机型底部被挡住且padding和margin都不生效的BUG -->
  131. <view class="additional"></view>
  132. </scroll-view>
  133. </swiper-item>
  134. </swiper>
  135. <!-- 轻提示 -->
  136. <u-toast ref="uToast"></u-toast>
  137. </view>
  138. </template>
  139. <script>
  140. import { orderList, cancelOrder, confirmOrder, doPay } from '@/service/order.js';
  141. export default {
  142. data(){
  143. let publicKey = {
  144. page: 1,
  145. pageSize: 10,
  146. isPage: true,
  147. status: 'loading', // loading加载,nomore没有更多了
  148. isRefresher: false, // 下拉刷新状态,默认没有开启下拉
  149. }
  150. return {
  151. showFilter: false,
  152. tabList: [{
  153. name: '全部',
  154. ident: 'all',
  155. type: 0,
  156. data: [],
  157. badge: {isDot: false},
  158. requestFunction: 'getList',
  159. ...publicKey
  160. },{
  161. name: '待确认',
  162. ident: 'waitconfirm',
  163. type: 1,
  164. data: [],
  165. badge: {isDot: false},
  166. requestFunction: 'getList',
  167. ...publicKey
  168. },{
  169. name: '评级中',
  170. ident: 'gradeing',
  171. type: 2,
  172. data: [],
  173. badge: {isDot: false},
  174. requestFunction: 'getList',
  175. ...publicKey
  176. },{
  177. name: '待付款',
  178. ident: 'waitpay',
  179. type: 3,
  180. data: [],
  181. badge: {isDot: false},
  182. requestFunction: 'getList',
  183. ...publicKey
  184. },{
  185. name: '待收货',
  186. ident: 'waitreceiv',
  187. type: 4,
  188. data: [],
  189. badge: {isDot: false},
  190. requestFunction: 'getList',
  191. ...publicKey
  192. }],
  193. tabIndex: 0,
  194. receivingTimeList: [{
  195. label: '1个月内',
  196. value: '1'
  197. },{
  198. label: '3个月内',
  199. value: '2'
  200. },{
  201. label: '6个月内',
  202. value: '3'
  203. },{
  204. label: '今年',
  205. value: '4'
  206. },{
  207. label: '2021年',
  208. value: '5'
  209. },{
  210. label: '2020年',
  211. value: '6'
  212. },{
  213. label: '2019年',
  214. value: '7'
  215. }],
  216. filterGather: {
  217. date: '',
  218. name: '',
  219. label: '',
  220. order_num: ''
  221. },
  222. clickButton: false
  223. }
  224. },
  225. computed: {
  226. // 传入对应tab的ident值,在当前tabIndex下是否匹配,匹配上返回true,否则返回false,调用matchTabIdent(par1, par2, ...)
  227. matchTabIdent(){
  228. let that = this;
  229. return function(){
  230. let identList = Array.from(arguments);
  231. let hasKey = identList.some(item => that.tabList[that.tabIndex].ident === item);
  232. return hasKey;
  233. }
  234. },
  235. // 计算获得swiper内容区域剩余高度
  236. swiperContentHeight(){
  237. return `calc(100vh - 80rpx - 10rpx)`;
  238. }
  239. },
  240. onLoad(options){
  241. this.tabIndex = Number(options.current || this.tabIndex);
  242. this[ this.tabList[this.tabIndex].requestFunction ](); // 获取当前tab下的数据列表
  243. },
  244. methods: {
  245. // 获取数据
  246. getList(options = {}){
  247. let tabItem = this.tabList[this.tabIndex];
  248. let filterGather = this.filterGather;
  249. let data = {
  250. type: tabItem.type,
  251. page: tabItem.page,
  252. pageSize: tabItem.pageSize
  253. };
  254. if(filterGather.date){
  255. data.confirm_type = filterGather.date;
  256. }
  257. if(filterGather.name){
  258. data.name_phone = filterGather.name;
  259. }
  260. if(filterGather.label){
  261. data.label = filterGather.label;
  262. }
  263. if(filterGather.order_num){
  264. data.order_num = filterGather.order_num;
  265. }
  266. orderList(data).then(res => {
  267. let datas = res.data.datas;
  268. let isPage = this.$isRight(datas.next_page_url);
  269. if(!isPage){
  270. tabItem.isPage = isPage;
  271. tabItem.status = 'nomore';
  272. }
  273. if(tabItem.page == 1){
  274. tabItem.data = datas.data;
  275. }else{
  276. tabItem.data.push(...datas.data);
  277. }
  278. if(options.refresher){
  279. this.$refs.uToast.show({
  280. message: '刷新成功',
  281. type: 'success'
  282. });
  283. tabItem.isRefresher = false;
  284. }
  285. })
  286. },
  287. // 筛选
  288. confirm(){
  289. let tabItem = this.tabList[this.tabIndex];
  290. tabItem.page = 1;
  291. tabItem.isPage = true;
  292. tabItem.status = 'loading';
  293. tabItem.data = [];
  294. this[tabItem.requestFunction]();
  295. this.showFilter = false;
  296. },
  297. // 重置筛选条件
  298. reset(){
  299. this.filterGather = this.$options.data().filterGather;
  300. this.$refs.uToast.show({
  301. message: '内容已重置',
  302. type: 'success'
  303. });
  304. },
  305. // 选择确认收货时间
  306. selectReceivingTime(item){
  307. if(this.filterGather.date == item.value){
  308. this.filterGather.date = "";
  309. }else{
  310. this.filterGather.date = item.value;
  311. }
  312. },
  313. // 取消订单 todo 取消订单状态没变 无效果
  314. orderCancel(item){
  315. uni.showModal({
  316. title: '提示',
  317. content: '真要取消该订单吗?',
  318. success: async result => {
  319. if(result.confirm){
  320. await cancelOrder(item.order_id);
  321. this.$refs.uToast.show({
  322. message: '取消成功',
  323. type: 'success'
  324. });
  325. this.confirm();
  326. }
  327. }
  328. })
  329. },
  330. // 寄送藏品
  331. orderSend(item){
  332. let base_data = encodeURIComponent(JSON.stringify(item));
  333. this.$url('/pages/write/distribution?base_data='+ base_data);
  334. },
  335. // 更改地址 todo
  336. orderAddressChange(){
  337. },
  338. // 订单付款 todo 待验证
  339. orderPay(item){
  340. if(this.clickButton) return;
  341. this.clickButton = true;
  342. doPay(item.order_id).then(res => {
  343. console.log("----------------", res);
  344. let datas = res.data.datas;
  345. uni.requestPayment({
  346. provider: 'wxpay',
  347. timeStamp: datas.timeStamp,
  348. nonceStr: datas.nonceStr,
  349. package: datas.package,
  350. signType: datas.signType,
  351. paySign: datas.paySign,
  352. success: res => {
  353. this.clickButton = false;
  354. this.$refs.uToast.show({
  355. message: '支付成功',
  356. type: 'success'
  357. });
  358. this.confirm();
  359. },
  360. fail: err => {
  361. uni.showModal({
  362. title: '',
  363. content: 'fail:' + JSON.stringify(err) + '支付失败',
  364. showCancel: false
  365. })
  366. this.clickButton = false;
  367. }
  368. })
  369. // appid: "wxb35ef055a4dd8ad4"
  370. // err_code: "PARAM_ERROR"
  371. // err_code_des: "appid和openid不匹配"
  372. // mch_id: "1606181693"
  373. // nonce_str: "rimtnwDgmC3oIHFs"
  374. // result_code: "FAIL"
  375. // return_code: "SUCCESS"
  376. // return_msg: "OK"
  377. // sign: "2ABA699D967E0DA2F956AFB8EF855AD2"
  378. }).catch(err => this.clickButton = false)
  379. },
  380. // 确认收货
  381. async orderConfirm(item){
  382. await confirmOrder(item.order_id);
  383. this.$refs.uToast.show({
  384. message: '确认收货成功',
  385. type: 'success'
  386. });
  387. this.confirm();
  388. },
  389. // 切换tab
  390. switchTab(item){
  391. this.tabIndex = item.index;
  392. // 判断所切换到的tab下是否有数据并且isPage为true,如果没有再请求,否则啥也不干
  393. let tabItem = this.tabList[this.tabIndex];
  394. if(tabItem.data.length === 0 && tabItem.isPage){
  395. this[ tabItem.requestFunction ]();
  396. }
  397. },
  398. // swiper滑动响应事件
  399. swiperChange(event){
  400. // 事件触发类型为触摸时才做处理,否则是因为switchTab方法执行导致的事件回调
  401. if(event.detail.source === 'touch'){
  402. this.tabIndex = event.detail.current;
  403. // 判断所切换到的tab下是否有数据并且isPage为true,如果没有再请求,否则啥也不干
  404. let tabItem = this.tabList[this.tabIndex];
  405. if(tabItem.data.length === 0 && tabItem.isPage){
  406. this[ tabItem.requestFunction ]();
  407. }
  408. }
  409. },
  410. // 下拉刷新,重新获取页面数据,将状态置回初始值再请求
  411. refresherrefresh(){
  412. let tabItem = this.tabList[this.tabIndex];
  413. tabItem.isRefresher = true;
  414. tabItem.page = 1;
  415. tabItem.isPage = true;
  416. tabItem.status = 'loading';
  417. tabItem.data = [];
  418. this[tabItem.requestFunction]({refresher: true});
  419. },
  420. // 滚动到底部
  421. scrolltolower(){
  422. let tabItem = this.tabList[this.tabIndex];
  423. if(tabItem.isPage){
  424. tabItem.page++;
  425. this[tabItem.requestFunction]();
  426. }
  427. }
  428. }
  429. }
  430. </script>
  431. <style>
  432. /* 修复ios页面左右漂浮BUG */
  433. page{
  434. overflow: hidden;
  435. }
  436. </style>
  437. <style scoped lang="scss">
  438. .filter-icon{
  439. width: 16%;
  440. height: 34rpx;
  441. display: flex;
  442. justify-content: center;
  443. align-items: center;
  444. border-left: 2rpx solid #F6F6F6;
  445. image{
  446. width: 36rpx;
  447. height: 32rpx;
  448. }
  449. }
  450. .filter-box{
  451. position: absolute;
  452. z-index: 9999;
  453. width: 750rpx;
  454. .text-wrapper_1 {
  455. margin-left: 16rpx;
  456. flex: 1 1 160rpx;
  457. color: rgb(51, 51, 51);
  458. font-size: 28rpx;
  459. font-weight: 500;
  460. line-height: 40rpx;
  461. white-space: nowrap;
  462. padding: 14rpx 0;
  463. background-color: rgb(246, 246, 246);
  464. border-radius: 10rpx;
  465. height: 68rpx;
  466. }
  467. .left-text-wrapper {
  468. padding: 14rpx 0;
  469. background-color: rgb(246, 246, 246);
  470. border-radius: 10rpx;
  471. width: 160rpx;
  472. height: 68rpx;
  473. }
  474. .group_6 {
  475. padding-top: 2rpx;
  476. }
  477. .section_5 {
  478. padding: 40rpx 32rpx 50rpx;
  479. background-color: rgb(255, 255, 255);
  480. }
  481. .group_15 {
  482. padding: 506rpx 0 16rpx;
  483. position: relative;
  484. }
  485. .group_11 {
  486. margin-top: 50rpx;
  487. }
  488. .group_13 {
  489. margin-top: 50rpx;
  490. }
  491. .group_14 {
  492. margin-top: 50rpx;
  493. }
  494. .section_7 {
  495. background-color: rgba(0, 0, 0, 0.5);
  496. width: 750rpx;
  497. height: 528rpx;
  498. top: 0;
  499. right: 0;
  500. bottom: 0;
  501. left: 0;
  502. position: absolute;
  503. }
  504. .text_7 {
  505. color: rgb(51, 51, 51);
  506. font-size: 32rpx;
  507. font-weight: 500;
  508. line-height: 44rpx;
  509. white-space: nowrap;
  510. }
  511. .group_8 {
  512. margin-top: 20rpx;
  513. }
  514. .text_15 {
  515. color: rgb(51, 51, 51);
  516. font-size: 32rpx;
  517. font-weight: 500;
  518. line-height: 44rpx;
  519. white-space: nowrap;
  520. }
  521. .group_12 {
  522. margin-top: 20rpx;
  523. color: rgb(195, 195, 195);
  524. font-size: 28rpx;
  525. font-weight: 500;
  526. line-height: 40rpx;
  527. white-space: nowrap;
  528. }
  529. .text_18 {
  530. color: rgb(51, 51, 51);
  531. font-size: 32rpx;
  532. font-weight: 500;
  533. line-height: 44rpx;
  534. white-space: nowrap;
  535. }
  536. .text-wrapper_4 {
  537. margin-top: 18rpx;
  538. // padding: 12rpx 0;
  539. color: rgb(195, 195, 195);
  540. font-size: 28rpx;
  541. font-weight: 500;
  542. line-height: 40rpx;
  543. white-space: nowrap;
  544. border-radius: 10rpx;
  545. border: solid 2rpx rgb(195, 195, 195);
  546. /deep/.u-input{
  547. width: 100%;
  548. }
  549. }
  550. .text-wrapper_5 {
  551. padding: 24rpx 0;
  552. flex: 1 1 330rpx;
  553. color: rgb(195, 195, 195);
  554. font-size: 32rpx;
  555. font-weight: 600;
  556. line-height: 44rpx;
  557. white-space: nowrap;
  558. border-radius: 10rpx;
  559. height: 96rpx;
  560. border: solid 2rpx rgb(195, 195, 195);
  561. }
  562. .text-wrapper_6 {
  563. margin-left: 26rpx;
  564. padding: 26rpx 0;
  565. flex: 1 1 330rpx;
  566. color: rgb(255, 255, 255);
  567. font-size: 32rpx;
  568. font-weight: 600;
  569. line-height: 44rpx;
  570. white-space: nowrap;
  571. background-color: rgb(231, 162, 63);
  572. border-radius: 10rpx;
  573. height: 96rpx;
  574. }
  575. .group_10 {
  576. margin-top: 20rpx;
  577. color: rgb(51, 51, 51);
  578. font-size: 28rpx;
  579. font-weight: 500;
  580. line-height: 40rpx;
  581. white-space: nowrap;
  582. }
  583. .text-wrapper_2 {
  584. // padding: 12rpx 0;
  585. flex: 1 1 auto;
  586. border-radius: 10rpx;
  587. height: 68rpx;
  588. border: solid 2rpx rgb(195, 195, 195);
  589. }
  590. .text-wrapper_3 {
  591. margin-left: 28rpx;
  592. // padding: 12rpx 0;
  593. border-radius: 10rpx;
  594. width: 308rpx;
  595. height: 68rpx;
  596. border: solid 2rpx rgb(195, 195, 195);
  597. }
  598. .text_19 {
  599. margin-left: 18rpx;
  600. }
  601. .text-wrapper {
  602. padding: 14rpx 0;
  603. flex: 1 1 160rpx;
  604. color: rgb(255, 255, 255);
  605. font-size: 28rpx;
  606. font-weight: 500;
  607. line-height: 40rpx;
  608. white-space: nowrap;
  609. background-color: rgb(231, 162, 63);
  610. border-radius: 10rpx;
  611. height: 68rpx;
  612. }
  613. .view_3 {
  614. margin-left: 14rpx;
  615. }
  616. .view_6 {
  617. margin-left: 16rpx;
  618. }
  619. .view_7 {
  620. margin-left: 14rpx;
  621. }
  622. .text_17 {
  623. margin-left: 18rpx;
  624. }
  625. }
  626. .item-box{
  627. width: 686rpx;
  628. // height: 300rpx;
  629. margin: 0 auto;
  630. background-color: #f6f6f6;
  631. &:nth-child(n+2){
  632. margin-top: 20rpx;
  633. }
  634. .section_5 {
  635. padding: 40rpx 32rpx 0;
  636. background-color: rgb(255, 255, 255);
  637. }
  638. .group_9 {
  639. margin-top: 30rpx;
  640. color: rgb(51, 51, 51);
  641. font-size: 32rpx;
  642. font-weight: 500;
  643. line-height: 44rpx;
  644. white-space: nowrap;
  645. }
  646. .group_11 {
  647. margin-top: 26rpx;
  648. padding: 32rpx 0 28rpx;
  649. border-top: solid 2rpx rgb(239, 239, 239);
  650. }
  651. .group_8 {
  652. color: rgb(153, 153, 153);
  653. font-size: 28rpx;
  654. line-height: 40rpx;
  655. white-space: nowrap;
  656. }
  657. .text_8 {
  658. color: rgb(43, 102, 234);
  659. font-size: 28rpx;
  660. font-weight: 500;
  661. line-height: 40rpx;
  662. white-space: nowrap;
  663. }
  664. .text_12 {
  665. align-self: center;
  666. color: rgb(153, 153, 153);
  667. font-size: 28rpx;
  668. line-height: 40rpx;
  669. white-space: nowrap;
  670. }
  671. .image_7 {
  672. width: 40rpx;
  673. height: 40rpx;
  674. }
  675. .text_7 {
  676. margin-left: 12rpx;
  677. }
  678. .text_10 {
  679. margin-left: 21rpx;
  680. }
  681. .text-wrapper {
  682. padding: 10rpx 0;
  683. color: rgb(153, 153, 153);
  684. font-size: 28rpx;
  685. font-weight: 500;
  686. line-height: 40rpx;
  687. white-space: nowrap;
  688. border-radius: 32rpx;
  689. width: 160rpx;
  690. height: 64rpx;
  691. border: solid 2rpx rgb(153, 153, 153);
  692. }
  693. .text-wrapper_1 {
  694. margin-left: 18rpx;
  695. padding: 10rpx 0;
  696. color: rgb(231, 162, 63);
  697. font-size: 28rpx;
  698. font-weight: 500;
  699. line-height: 40rpx;
  700. white-space: nowrap;
  701. border-radius: 32rpx;
  702. width: 160rpx;
  703. height: 64rpx;
  704. border: solid 2rpx rgb(231, 162, 63);
  705. }
  706. }
  707. .nomore-box{
  708. width: 686rpx;
  709. height: 500rpx;
  710. margin: 0 auto;
  711. display: flex;
  712. flex-direction: column;
  713. justify-content: center;
  714. align-items: center;
  715. image{
  716. width: 434rpx;
  717. height: 260rpx;
  718. }
  719. view{
  720. text-align: center;
  721. color: #777777;
  722. margin-top: 40rpx;
  723. }
  724. }
  725. // 解决scroll-view底部padding和margin都不生效贴边的BUG
  726. .additional{
  727. height: calc( env(safe-area-inset-bottom) + 20rpx );
  728. height: calc( constant(safe-area-inset-bottom) + 20rpx );
  729. }
  730. .filter-date-item{
  731. width: 160rpx;
  732. height: 68rpx;
  733. background: #F6F6F6;
  734. border-radius: 10rpx;
  735. font-size: 28rpx;
  736. color: #333333;
  737. margin-right: 16rpx;
  738. display: flex;
  739. justify-content: center;
  740. align-items: center;
  741. &:nth-child(4n){
  742. margin-right: 0rpx;
  743. }
  744. &:nth-child(n+5){
  745. margin-top: 16rpx;
  746. }
  747. &.active{
  748. color: #FFFFFF;
  749. background-color: #E7A23F;
  750. }
  751. }
  752. </style>