球星卡微信小程序
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.

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