good-hot.vue 24 KB

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