good-hot.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934
  1. <template>
  2. <view class="container floor clearfix">
  3. <tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading ="true" :loadingType="5"></tui-skeleton>
  4. <view v-else>
  5. <view class="container-topcontent">
  6. <view class="topcontent-image" :style="{ paddingTop: StatusBar + 'px' }">
  7. <view class="topcontent-title">
  8. 采美新品橱窗 <view class="topcontent-title-icon" @click="haveBack"> <text class="iconfont icon-fanhui"></text> </view>
  9. </view>
  10. </view>
  11. <view class="topcontent-swiper" :style="{ top: StatusBar + 44 + 'px' }">
  12. <view class="swiper-goods">
  13. <view class="swiper-banner-box">
  14. <swiper
  15. class="tui-banner-swiper tui-banner tui-skeleton-fillet"
  16. :autoplay="true"
  17. :interval="5000"
  18. :duration="500"
  19. @change="swiperChange"
  20. :circular="true"
  21. >
  22. <swiper-item
  23. v-for="(item, index) in topGoodList"
  24. :key="index"
  25. @click.stop="navToDetailPage(item.productId)"
  26. >
  27. <view class="swiper-goods-image"> <image :src="item.mainImage" mode="scaleToFill" /> </view>
  28. <view class="swiper-goods-info">
  29. <view class="swiper-goods-name"> {{ item.name }} </view>
  30. <view class="swiper-goods-btn"> <view class="btn"> 立即购买 </view> </view>
  31. </view>
  32. </swiper-item>
  33. </swiper>
  34. <view class="swiper__dots-box" v-if="topGoodList.length > 1">
  35. <view
  36. v-for="(item, idx) in topGoodList"
  37. :key="idx"
  38. :class="[idx === current ? 'swiper__dots-long' : 'none']"
  39. :data-index="current"
  40. class="swiper__dots-item"
  41. >
  42. </view>
  43. </view>
  44. </view>
  45. </view>
  46. </view>
  47. </view>
  48. <view class="container-screen">
  49. <view class="container-screen-box" @click="showDropShow">
  50. <view class="screen-box-em">品牌</view>
  51. <view class="screen-box-mi" v-if="!dropShow">
  52. <view class="screen-list" :class="isAllcheckedBrand ? 'active' : ''">全部</view>
  53. <view class="screen-list" v-for="(brand, index) in brandList" :key="index" v-if="index < 2">
  54. {{ brand.name }}
  55. </view>
  56. </view>
  57. <view class="screen-box-sp">
  58. <text class="iconfont" :class="dropShow ? 'icon-xiangshangjiantou' : 'icon-xiangxiajiantou'"></text>
  59. </view>
  60. </view>
  61. <view class="container-screen-popup" v-if="dropShow">
  62. <!-- <uni-transition mode-class="slide-top" :show=""> -->
  63. <view class="container-screen-popupbox">
  64. <!--header 顶部下拉选择框-->
  65. <scroll-view class="tui-scroll-box" scroll-y scroll-with-animation :scroll-top="scrollTop">
  66. <view class="screen-list" :class="isAllcheckedBrand ? 'active' : ''" @click="choiceBrandAll">全部</view>
  67. <view
  68. class="screen-list"
  69. v-for="(brand, index) in brandList"
  70. :key="index"
  71. @click="choiceBrand(brand, index)"
  72. :class="brand.isChecked ? 'active' : ''"
  73. >
  74. {{ brand.name }}
  75. </view>
  76. </scroll-view>
  77. <view class="container-screen-btnbox"> <view class="btns" @tap="btnCloseDrop">确定</view> </view>
  78. </view>
  79. <!-- </uni-transition> -->
  80. </view>
  81. </view>
  82. <!-- 楼层 -->
  83. <view class="container-section tui-skeleton">
  84. <view class="floor-item-banner ad_01" v-if="appletsBanner">
  85. <image class="item-img-gg" :src="appletsBanner"></image>
  86. </view>
  87. <view class="section_page_main clearfix">
  88. <view
  89. class="floor-item clearfix"
  90. v-for="(pros, idx) in productList"
  91. :key="idx"
  92. @click.stop="navToDetailPage(pros.productId)"
  93. >
  94. <image class="item-img tui-skeleton-fillet" :src="pros.image" mode="aspectFill"></image>
  95. <view class="floor-item-type" v-if="pros.productType == 2">医疗器械</view>
  96. <view class="floor-item-content">
  97. <view class="title tui-skeleton-rect">
  98. <text class="mclap-tag" v-if="pros.beautyActFlag == '1'">美博会</text>
  99. <text class="mclap" :class="pros.beautyActFlag == '1' ? 'indent' : ''"
  100. >{{ pros.name }}
  101. </text>
  102. </view>
  103. <view class="floor-item-price">
  104. <view class="floor-item-act">
  105. <view class="coupon-tags" v-if="pros.couponsLogo">优惠券</view>
  106. <template v-if="pros.actStatus === 1">
  107. <view class="floor-tags" v-if="PromotionsFormat(pros.promotions)">
  108. {{ pros.promotions.name }}
  109. <text v-if="pros.priceFlag != 1">:¥{{ pros.price | NumFormat }}</text>
  110. </view>
  111. <view class="floor-tags" v-else>{{ pros.promotions.name }}</view>
  112. </template>
  113. <template v-if="pros.svipProductFlag == 1">
  114. <view class="svip-tags">
  115. <view class="tags" :class="{ none: vipFlag != 1 }">SVIP</view>
  116. <view class="price" v-if="isShowVipFlag(pros)">{{ pros.svipPriceTag }}</view>
  117. </view>
  118. </template>
  119. </view>
  120. <view v-if="hasLogin" class="list-price">
  121. <template v-if="userIdentity == 1">
  122. <text
  123. class="price-larger"
  124. :class="
  125. PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
  126. ? 'none'
  127. : ''
  128. "
  129. >
  130. ¥{{
  131. (PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
  132. ? pros.originalPrice
  133. : pros.price) | NumFormat
  134. }}
  135. </text>
  136. </template>
  137. <template v-if="userIdentity == 4 && vipFlag != 1">
  138. <view class="price-larger" v-if="pros.priceFlag == 1">
  139. <text class="txt">¥未公开价格</text>
  140. </view>
  141. <view class="price-larger" v-if="pros.priceFlag == 2">
  142. <text class="txt">¥价格仅会员可见</text>
  143. </view>
  144. <view class="price-larger" v-else-if="pros.priceFlag == 3">
  145. <text class="txt">¥仅医美机构可见</text>
  146. </view>
  147. <text
  148. v-else
  149. class="price-larger"
  150. :class="
  151. PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
  152. ? 'none'
  153. : ''
  154. "
  155. >
  156. ¥{{
  157. (PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
  158. ? pros.originalPrice
  159. : pros.price) | NumFormat
  160. }}
  161. </text>
  162. </template>
  163. <template v-if="userIdentity == 3">
  164. <template v-if="pros.shopId === shopId">
  165. <view class="price-larger" v-if="pros.priceFlag == 1">
  166. <text class="txt">¥未公开价格</text>
  167. </view>
  168. <text
  169. v-else
  170. class="price-larger"
  171. :class="
  172. PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
  173. ? 'none'
  174. : ''
  175. "
  176. >
  177. ¥{{
  178. (PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
  179. ? pros.originalPrice
  180. : pros.price) | NumFormat
  181. }}
  182. </text>
  183. </template>
  184. <template v-else>
  185. <view class="list-login-now">
  186. <text class="p-no">¥</text>
  187. <uni-grader :grade="Number(pros.priceGrade)"></uni-grader>
  188. </view>
  189. </template>
  190. </template>
  191. <template v-if="userIdentity == 2 || (userIdentity == 4 && vipFlag == 1)">
  192. <view class="price-larger" v-if="pros.priceFlag == 1">
  193. <text class="txt">¥未公开价格</text>
  194. </view>
  195. <view class="price-larger" v-if="pros.priceFlag == 3 && (firstClubType!=1)">
  196. <text class="txt">¥仅医美机构可见</text>
  197. </view>
  198. <text
  199. v-else
  200. class="price-larger"
  201. :class="
  202. PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
  203. ? 'none'
  204. : ''
  205. "
  206. >
  207. ¥{{
  208. (PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
  209. ? pros.originalPrice
  210. : pros.price) | NumFormat
  211. }}
  212. </text>
  213. </template>
  214. </view>
  215. <view v-else class="list-login-now">
  216. <text class="p-no">¥</text>
  217. <uni-grader :grade="Number(pros.priceGrade)"></uni-grader>
  218. </view>
  219. </view>
  220. </view>
  221. </view>
  222. </view>
  223. <!--加载loadding-->
  224. <tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
  225. <tui-nomore :visible="!pullUpOn" :backgroundColor="'#F7F7F7'" :text="nomoreText"></tui-nomore>
  226. <!--加载loadding-->
  227. </view>
  228. </view>
  229. </view>
  230. </template>
  231. <script>
  232. import { mapState, mapMutations } from 'vuex'
  233. import uniGrader from '@/components/uni-grade/uni-grade.vue'
  234. export default {
  235. components: {
  236. uniGrader
  237. },
  238. data() {
  239. return {
  240. StatusBar: this.StatusBar,
  241. skeletonShow:true,
  242. dropShow: false,
  243. vipFlag: 0,
  244. userIdentity: 0,
  245. productList: [],
  246. brandList: [],
  247. checkedBrandList: [],
  248. isAllcheckedBrand: true,
  249. topGoodList: [],
  250. current: 0,
  251. appletsBanner: '',
  252. listQuery: {
  253. userId:0,
  254. brandID:'',
  255. pageSize: 10,
  256. pageNum: 1,
  257. source:2
  258. },
  259. NavigationBarTitle: '',
  260. nomoreText: '上拉显示更多',
  261. hasNextPage: false,
  262. loadding: false,
  263. pullUpOn: true,
  264. pullFlag: true
  265. }
  266. },
  267. onLoad(option) {
  268. this.initGetStotage()
  269. },
  270. filters: {
  271. NumFormat: function(text) {
  272. //处理金额
  273. return Number(text).toFixed(2)
  274. }
  275. },
  276. computed: {
  277. ...mapState(['hasLogin', 'userInfo', 'identity'])
  278. },
  279. methods: {
  280. async initGetStotage() {
  281. // 初始化
  282. const userInfo = await this.$api.getStorage()
  283. this.listQuery.userId = userInfo.userId ? userInfo.userId : 0
  284. this.vipFlag = userInfo.vipFlag ? userInfo.vipFlag : 0
  285. this.userIdentity = userInfo.userIdentity ? userInfo.userIdentity : 0
  286. this.GetHomeRecommend()
  287. this.GetHomeNewBrandNames()
  288. this.GetHomeNewFloorList()
  289. },
  290. GetHomeNewBrandNames(){
  291. //新品商品品牌列表
  292. this.CommonService.GetHomeNewBrandNames().then(response => {
  293. this.brandList = response.data
  294. })
  295. .catch(error => {
  296. console.log('获取新品橱窗推荐模块信息异常')
  297. })
  298. },
  299. GetHomeRecommend() {
  300. //新品橱窗顶部推荐
  301. this.CommonService.GetHomeRecommend().then(response => {
  302. this.topGoodList = response.data
  303. })
  304. .catch(error => {
  305. console.log('获取新品橱窗推荐模块信息异常')
  306. })
  307. },
  308. GetHomeNewFloorList() {
  309. //楼层查看更多
  310. this.CommonService.GetHomeNewFloorList(this.listQuery)
  311. .then(response => {
  312. let data = response.data
  313. this.productList = data.results
  314. this.hasNextPage = data.hasNextPage
  315. this.skeletonShow = false
  316. if (this.hasNextPage) {
  317. this.pullUpOn = false
  318. this.nomoreText = '上拉显示更多'
  319. } else {
  320. if (this.productList.length < 6) {
  321. this.pullUpOn = true
  322. } else {
  323. this.pullUpOn = false
  324. this.loadding = false
  325. this.nomoreText = '已至底部'
  326. }
  327. }
  328. })
  329. .catch(error => {
  330. this.$util.msg(error.msg, 2000)
  331. })
  332. },
  333. OnReachBottomData() {
  334. // 上滑加载
  335. this.listQuery.pageNum += 1
  336. this.CommonService.GetHomeNewFloorList(this.listQuery)
  337. .then(response => {
  338. let data = response.data
  339. this.hasNextPage = data.hasNextPage
  340. this.productList = this.productList.concat(data.results)
  341. this.skeletonShow = false
  342. if (this.hasNextPage) {
  343. this.pullUpOn = false
  344. this.nomoreText = '上拉显示更多'
  345. } else {
  346. this.pullUpOn = false
  347. this.loadding = false
  348. this.nomoreText = '已至底部'
  349. }
  350. })
  351. .catch(error => {
  352. this.$util.msg(error.msg, 2000)
  353. })
  354. },
  355. PromotionsFormat(promo) {
  356. //促销活动类型数据处理
  357. if (promo != null) {
  358. if (promo.type == 1 && promo.mode == 1) {
  359. return true
  360. } else {
  361. return false
  362. }
  363. }
  364. return false
  365. },
  366. navToDetailPage(productId) {
  367. //跳转商品详情页
  368. this.$api.navigateTo(`/pages/goods/product?id=${productId}`)
  369. },
  370. isShowVipFlag(pros) {
  371. // 超级会员价格显示控制
  372. if (this.hasLogin && pros.priceFlag != 1) {
  373. if (this.userIdentity == 4 && this.vipFlag == 1) {
  374. return true
  375. } else if (this.userIdentity == 2) {
  376. return true
  377. }
  378. }
  379. },
  380. swiperChange(e) {
  381. //轮播图切换
  382. const index = e.detail.current
  383. this.current = index
  384. },
  385. choiceBrand(brand, index) {
  386. // 选择品牌
  387. brand.isChecked = !brand.isChecked
  388. if (brand.isChecked) {
  389. if(!this.contains(this.checkedBrandList,brand.id)){
  390. this.checkedBrandList.push(brand.id)
  391. }
  392. } else {
  393. this.checkedBrandList.splice(this.checkedBrandList.indexOf(brand.id),1)
  394. }
  395. this.isAllcheckedBrand = false
  396. this.checkedBrandLength = this.checkedBrandList.length
  397. this.listQuery.brandID = this.checkedBrandList.join(',')
  398. console.log('this.listQuery.brandID', this.listQuery.brandID)
  399. },
  400. choiceBrandAll() {
  401. // 点击选择全部品牌
  402. this.isAllcheckedBrand = true
  403. this.listQuery.brandID = ''
  404. this.brandList.forEach(el => {
  405. el.isChecked = false
  406. })
  407. },
  408. contains(arr, val) {// 校验
  409. return arr.some(item => item === val)
  410. },
  411. showDropShow() {
  412. this.dropShow = !this.dropShow
  413. },
  414. btnCloseDrop() {
  415. this.dropShow = false
  416. this.productList = []
  417. this.listQuery.pageNum = 1
  418. this.GetHomeNewFloorList()
  419. },
  420. haveBack(){
  421. uni.navigateBack({
  422. delta: 1
  423. })
  424. },
  425. },
  426. onPullDownRefresh() {
  427. setTimeout(() => {
  428. this.productList = []
  429. this.listQuery.pageNum = 1
  430. this.GetHomeNewFloorList()
  431. uni.stopPullDownRefresh()
  432. }, 200)
  433. },
  434. onReachBottom() {
  435. if (this.hasNextPage) {
  436. this.loadding = true
  437. this.pullUpOn = true
  438. this.OnReachBottomData()
  439. }
  440. },
  441. onShow() {}
  442. }
  443. </script>
  444. <style lang="scss">
  445. page {
  446. background-color: #f7f7f7;
  447. }
  448. .container-home {
  449. width: 100%;
  450. height: auto;
  451. }
  452. .container-topcontent {
  453. width: 100%;
  454. height: 620rpx;
  455. background: #ffffff;
  456. box-sizing: border-box;
  457. position: relative;
  458. .topcontent-image {
  459. width: 100%;
  460. height: 480rpx;
  461. background: url(https://static.caimei365.com/app/img/hot/hot-bg@2x.png);
  462. background-size: cover;
  463. box-sizing: border-box;
  464. .topcontent-title {
  465. width: 100%;
  466. height: 80rpx;
  467. line-height: 80rpx;
  468. font-size: 38rpx;
  469. color: #ffffff;
  470. font-weight: bold;
  471. text-align: center;
  472. position: relative;
  473. }
  474. .topcontent-title-icon {
  475. width: 50rpx;
  476. height: 50rpx;
  477. line-height: 50rpx;
  478. position: absolute;
  479. left: 24rpx;
  480. top: 14rpx;
  481. border-radius: 50%;
  482. text-align: center;
  483. background: rgba(255, 255, 255, 0.6);
  484. border: 0.5px solid rgba(0, 0, 0, 0.1);
  485. box-sizing: border-box;
  486. z-index: 9999;
  487. .iconfont {
  488. height: 100%;
  489. width: 100%;
  490. font-size: 32rpx;
  491. display: inline-block;
  492. overflow: hidden;
  493. }
  494. }
  495. }
  496. .topcontent-swiper {
  497. width: 100%;
  498. height: auto;
  499. position: absolute;
  500. left: 0;
  501. }
  502. .swiper-goods {
  503. width: 100%;
  504. height: auto;
  505. position: relative;
  506. background-size: cover;
  507. }
  508. .swiper-banner-box {
  509. width: 100%;
  510. height: 360rpx;
  511. position: relative;
  512. background-size: cover;
  513. }
  514. .tui-banner-swiper {
  515. width: 680rpx;
  516. margin: 0 auto;
  517. height: 340rpx;
  518. background: url(https://static.caimei365.com/app/img/hot/hot-bg@3x.png);
  519. background-size: cover;
  520. border-radius: 24rpx;
  521. overflow: hidden;
  522. transform: translateY(0);
  523. box-shadow: 0px 3px 6px rgba(225, 86, 22, 0.08);
  524. margin-top: 16rpx;
  525. padding: 12rpx;
  526. .swiper-goods-image {
  527. width: 336rpx;
  528. height: 336rpx;
  529. float: left;
  530. image {
  531. width: 336rpx;
  532. height: 336rpx;
  533. display: block;
  534. border-radius: 8rpx;
  535. }
  536. }
  537. .swiper-goods-info {
  538. width: 326rpx;
  539. height: 336rpx;
  540. box-sizing: border-box;
  541. padding:32rpx 24rpx;
  542. float: right;
  543. position: relative;
  544. .swiper-goods-name {
  545. width: 100%;
  546. height: auto;
  547. line-height: 44rpx;
  548. text-overflow: ellipsis;
  549. display: -webkit-box;
  550. word-break: break-all;
  551. -webkit-box-orient: vertical;
  552. -webkit-line-clamp: 4;
  553. overflow: hidden;
  554. font-size: 28rpx;
  555. color: #333333;
  556. text-align: center;
  557. }
  558. .swiper-goods-btn {
  559. width: 100%;
  560. height: 64rpx;
  561. position: absolute;
  562. bottom: 60rpx;
  563. left: 0;
  564. .btn {
  565. width: 200rpx;
  566. height: 64rpx;
  567. margin: 0 auto;
  568. text-align: center;
  569. line-height: 64rpx;
  570. background-color: #f94b4b;
  571. font-size: 26rpx;
  572. color: #ffffff;
  573. border-radius: 32rpx;
  574. }
  575. }
  576. }
  577. }
  578. .swiper__dots-box {
  579. position: absolute;
  580. bottom: -45rpx;
  581. left: 0;
  582. right: 0;
  583. /* #ifndef APP-NVUE */
  584. display: flex;
  585. /* #endif */
  586. flex: 1;
  587. flex-direction: row;
  588. justify-content: center;
  589. align-items: center;
  590. .swiper__dots-item {
  591. width: 14rpx;
  592. height: 8rpx;
  593. border-radius: 4rpx;
  594. margin-left: 6px;
  595. background-color: rgba(225, 86, 22, 0.39);
  596. }
  597. .swiper__dots-long {
  598. width: 40rpx;
  599. height: 8rpx;
  600. border-radius: 4rpx;
  601. background-color: #e15616;
  602. transition: all 0.4s;
  603. }
  604. }
  605. .swiper-banner-msg {
  606. width: 100%;
  607. height: 54rpx;
  608. box-sizing: border-box;
  609. padding: 0 24rpx;
  610. margin-top: 24rpx;
  611. .content {
  612. width: 100%;
  613. height: 54rpx;
  614. box-sizing: border-box;
  615. padding: 0 34rpx;
  616. background-color: #fff0e9;
  617. border-radius: 16rpx;
  618. .item {
  619. width: 33.33%;
  620. height: 54rpx;
  621. line-height: 54rpx;
  622. font-size: $font-size-24;
  623. color: $color-system;
  624. float: left;
  625. &.le {
  626. text-align: left;
  627. }
  628. &.ce {
  629. text-align: center;
  630. }
  631. &.ri {
  632. text-align: right;
  633. }
  634. .iconfont {
  635. color: $color-system;
  636. font-size: $font-size-32;
  637. .sm {
  638. font-size: $font-size-26;
  639. }
  640. }
  641. }
  642. }
  643. }
  644. }
  645. .container-screen {
  646. width: 100%;
  647. height: 138rpx;
  648. padding: 24rpx;
  649. box-sizing: border-box;
  650. background-color: #f7f7f7;
  651. position: relative;
  652. .container-screen-box {
  653. width: 100%;
  654. height: 100%;
  655. background-color: #ffffff;
  656. border-radius: 16rpx;
  657. .screen-box-em {
  658. float: left;
  659. width: 134rpx;
  660. line-height: 90rpx;
  661. text-align: center;
  662. color: #333333;
  663. font-size: 30rpx;
  664. font-weight: bold;
  665. }
  666. .screen-box-mi {
  667. float: left;
  668. width: 468rpx;
  669. height: 100%;
  670. box-sizing: border-box;
  671. padding: 21rpx 0;
  672. .screen-list {
  673. width: 140rpx;
  674. height: 48rpx;
  675. padding: 0 12rpx;
  676. float: left;
  677. text-align: center;
  678. box-sizing: border-box;
  679. line-height: 48rpx;
  680. font-size: 30rpx;
  681. color: #666666;
  682. border-radius: 24rpx;
  683. margin-right: 20rpx;
  684. text-overflow: ellipsis;
  685. overflow: hidden;
  686. display: -webkit-box;
  687. -webkit-line-clamp: 1;
  688. line-clamp: 1;
  689. -webkit-box-orient: vertical;
  690. word-break: break-all;
  691. &:last-child {
  692. margin-right: 0;
  693. }
  694. &.active {
  695. background-color: #ffe6dc;
  696. color: #e15616;
  697. }
  698. }
  699. }
  700. .screen-box-sp {
  701. float: right;
  702. width: 100rpx;
  703. line-height: 90rpx;
  704. text-align: center;
  705. .iconfont {
  706. color: #999999;
  707. font-size: 40rpx;
  708. }
  709. }
  710. }
  711. .container-screen-popup {
  712. width: 100%;
  713. height: 480rpx;
  714. box-sizing: border-box;
  715. padding: 24rpx;
  716. position: absolute;
  717. left: 0;
  718. top: 86rpx;
  719. z-index: 999;
  720. .container-screen-popupbox {
  721. width: 100%;
  722. height: 100%;
  723. box-sizing: border-box;
  724. padding: 0 24rpx;
  725. background-color: #ffffff;
  726. border-radius: 0 0 16rpx 16rpx;
  727. box-shadow: 0 10rpx 14rpx 0 rgba(86, 119, 252, 0.2);
  728. }
  729. .tui-scroll-box {
  730. width: 100%;
  731. height: 300rpx;
  732. overflow: hidden;
  733. .screen-list {
  734. width: 140rpx;
  735. height: 48rpx;
  736. padding: 0 12rpx;
  737. float: left;
  738. text-align: center;
  739. box-sizing: border-box;
  740. line-height: 48rpx;
  741. font-size: 30rpx;
  742. color: #666666;
  743. border-radius: 24rpx;
  744. margin-right: 30rpx;
  745. margin-bottom: 30rpx;
  746. text-overflow: ellipsis;
  747. overflow: hidden;
  748. display: -webkit-box;
  749. -webkit-line-clamp: 1;
  750. line-clamp: 1;
  751. -webkit-box-orient: vertical;
  752. word-break: break-all;
  753. &:nth-child(4n) {
  754. margin-right: 0;
  755. }
  756. &.active {
  757. background-color: #ffe6dc;
  758. color: #e15616;
  759. }
  760. }
  761. }
  762. .container-screen-btnbox {
  763. width: 100%;
  764. height: 84rpx;
  765. margin-top: 15rpx;
  766. .btns {
  767. width: 314rpx;
  768. height: 84rpx;
  769. line-height: 84rpx;
  770. border-radius: 42rpx;
  771. text-align: center;
  772. font-size: 30rpx;
  773. color: #ffffff;
  774. background: $btn-confirm;
  775. margin: 0 auto;
  776. }
  777. }
  778. }
  779. }
  780. .container-section {
  781. width: 100%;
  782. height: auto;
  783. background-color: #f7f7f7;
  784. box-sizing: border-box;
  785. padding: 0 24rpx 24rpx 24rpx;
  786. }
  787. .floor-item-banner {
  788. width: 100%;
  789. height: 240rpx;
  790. margin-bottom: 20rpx;
  791. .item-img-gg {
  792. width: 100%;
  793. height: 240rpx;
  794. display: block;
  795. border-radius: 16rpx;
  796. }
  797. }
  798. .section_page_main {
  799. width: 100%;
  800. height: auto;
  801. box-sizing: border-box;
  802. .floor-item {
  803. width: 339rpx;
  804. height: 516rpx;
  805. margin-right: 20rpx;
  806. font-size: $font-size-24;
  807. color: $text-color;
  808. background: #ffffff;
  809. line-height: 36rpx;
  810. border-radius: 16rpx;
  811. margin-bottom: 20rpx;
  812. float: left;
  813. box-sizing: border-box;
  814. position: relative;
  815. &:nth-child(2n) {
  816. margin-right: 0;
  817. }
  818. .item-img {
  819. width: 339rpx;
  820. height: 339rpx;
  821. border-radius: 16rpx 16rpx 0 0;
  822. display: block;
  823. margin-bottom: 8rpx;
  824. }
  825. .floor-item-type {
  826. width: 64rpx;
  827. height: 64rpx;
  828. text-align: justify;
  829. box-sizing: border-box;
  830. padding: 10rpx;
  831. border-radius: 0 0 8rpx 8rpx;
  832. background-color: #33ccbf;
  833. font-size: $font-size-22;
  834. color: #ffffff;
  835. line-height: 25rpx;
  836. position: absolute;
  837. top: 0;
  838. right: 16rpx;
  839. }
  840. .floor-item-content {
  841. width: 100%;
  842. padding: 0 20rpx;
  843. box-sizing: border-box;
  844. }
  845. .floor-item-act {
  846. display: block;
  847. width: 100%;
  848. height: 32rpx;
  849. text-align: center;
  850. box-sizing: border-box;
  851. }
  852. .title-none {
  853. font-size: $font-size-26;
  854. color: #ff2a2a;
  855. line-height: 54rpx;
  856. }
  857. .title {
  858. width: 100%;
  859. height: 70rpx;
  860. display: flex;
  861. line-height: 35rpx;
  862. flex-direction: column;
  863. margin: 8rpx 0;
  864. padding: 0;
  865. position: relative;
  866. .mclap {
  867. width: 100%;
  868. line-height: 35rpx;
  869. text-overflow: ellipsis;
  870. display: -webkit-box;
  871. word-break: break-all;
  872. -webkit-box-orient: vertical;
  873. -webkit-line-clamp: 2;
  874. overflow: hidden;
  875. font-size: 26rpx;
  876. &.indent {
  877. text-indent: 95rpx;
  878. }
  879. }
  880. .mclap-tag {
  881. display: block;
  882. width: 84rpx;
  883. height: 32rpx;
  884. background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
  885. border-radius: 4rpx 48rpx 4px 4px;
  886. line-height: 32rpx;
  887. font-size: $font-size-22;
  888. color: #ffffff;
  889. text-align: center;
  890. position: absolute;
  891. left: 0;
  892. top: 0;
  893. }
  894. }
  895. .floor-item-price{
  896. .list-login-now{
  897. line-height: 44rpx;
  898. .p-no{
  899. height: 44rpx;
  900. line-height: 44rpx;
  901. display: inline-block;
  902. float: left;
  903. }
  904. }
  905. .list-price {
  906. color: #ff2a2a;
  907. height: 44rpx;
  908. float: left;
  909. .price-larger {
  910. width: 100%;
  911. height: 44rpx;
  912. font-size: 32rpx;
  913. &.none {
  914. text-decoration: line-through;
  915. color: #999999;
  916. }
  917. &.small {
  918. font-size: $font-size-24;
  919. }
  920. .txt {
  921. font-size: $font-size-24;
  922. display: inline-block;
  923. line-height: 44rpx;
  924. text-align: left;
  925. float: left;
  926. }
  927. }
  928. }
  929. }
  930. }
  931. }
  932. </style>