good-hot.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985
  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. import cmSysMixins from '@/mixins/cmSysMixins.js'
  260. export default{
  261. mixins: [cmsMixins,cmSysMixins],
  262. components: {
  263. uniGrader
  264. },
  265. data() {
  266. return {
  267. fixedClass: 'float',
  268. StatusBar: this.StatusBar,
  269. skeletonShow: true,
  270. dropShow: false,
  271. vipFlag: 0,
  272. userIdentity: 0,
  273. productList: [],
  274. brandList: [],
  275. checkedBrandList: [],
  276. isAllcheckedBrand: true,
  277. topGoodList: [],
  278. current: 0,
  279. appletsBanner: '',
  280. listQuery: {
  281. userId: 0,
  282. brandID: '',
  283. pageSize: 10,
  284. pageNum: 1,
  285. source: 2
  286. },
  287. NavigationBarTitle: '',
  288. nomoreText: '上拉显示更多',
  289. hasNextPage: false,
  290. loadding: false,
  291. pullUpOn: true,
  292. pullFlag: true
  293. }
  294. },
  295. onLoad(option) {
  296. this.initGetStotage()
  297. },
  298. filters: {
  299. NumFormat: function(text) {
  300. //处理金额
  301. return Number(text).toFixed(2)
  302. }
  303. },
  304. computed: {
  305. ...mapState(['hasLogin', 'userInfo', 'identity'])
  306. },
  307. methods: {
  308. async initGetStotage() {
  309. // 初始化
  310. const userInfo = await this.$api.getStorage()
  311. this.listQuery.userId = userInfo.userId ? userInfo.userId : 0
  312. this.vipFlag = userInfo.vipFlag ? userInfo.vipFlag : 0
  313. this.userIdentity = userInfo.userIdentity ? userInfo.userIdentity : 0
  314. this.GetHomeRecommend()
  315. this.GetHomeNewBrandNames()
  316. this.GetHomeNewFloorList()
  317. },
  318. GetHomeNewBrandNames() {
  319. //新品商品品牌列表
  320. this.CommonService.GetHomeNewBrandNames()
  321. .then(response => {
  322. this.brandList = response.data
  323. })
  324. .catch(error => {
  325. console.log('获取新品橱窗推荐模块信息异常')
  326. })
  327. },
  328. GetHomeRecommend() {
  329. //新品橱窗顶部推荐
  330. this.CommonService.GetHomeRecommend()
  331. .then(response => {
  332. this.topGoodList = response.data
  333. })
  334. .catch(error => {
  335. console.log('获取新品橱窗推荐模块信息异常')
  336. })
  337. },
  338. GetHomeNewFloorList() {
  339. //楼层查看更多
  340. this.CommonService.GetHomeNewFloorList(this.listQuery)
  341. .then(response => {
  342. let data = response.data
  343. this.productList = data.results
  344. this.hasNextPage = data.hasNextPage
  345. this.skeletonShow = false
  346. if (this.hasNextPage) {
  347. this.pullUpOn = false
  348. this.nomoreText = '上拉显示更多'
  349. } else {
  350. if (this.productList.length < 6) {
  351. this.pullUpOn = true
  352. } else {
  353. this.pullUpOn = false
  354. this.loadding = false
  355. this.nomoreText = '已至底部'
  356. }
  357. }
  358. })
  359. .catch(error => {
  360. this.$util.msg(error.msg, 2000)
  361. })
  362. },
  363. OnReachBottomData() {
  364. // 上滑加载
  365. this.listQuery.pageNum += 1
  366. this.CommonService.GetHomeNewFloorList(this.listQuery)
  367. .then(response => {
  368. let data = response.data
  369. this.hasNextPage = data.hasNextPage
  370. this.productList = this.productList.concat(data.results)
  371. this.skeletonShow = false
  372. if (this.hasNextPage) {
  373. this.pullUpOn = false
  374. this.nomoreText = '上拉显示更多'
  375. } else {
  376. this.pullUpOn = false
  377. this.loadding = false
  378. this.nomoreText = '已至底部'
  379. }
  380. })
  381. .catch(error => {
  382. this.$util.msg(error.msg, 2000)
  383. })
  384. },
  385. PromotionsFormat(promo) {
  386. //促销活动类型数据处理
  387. if (promo != null) {
  388. if (promo.type == 1 && promo.mode == 1) {
  389. return true
  390. } else {
  391. return false
  392. }
  393. }
  394. return false
  395. },
  396. navToDetailPage(productId) {
  397. //跳转商品详情页
  398. this.cmsSysStatistics(5)
  399. this.$api.navigateTo(`/pages/goods/product?id=${productId}&typeId=5`)
  400. },
  401. isShowVipFlag(pros) {
  402. // 超级会员价格显示控制
  403. if (this.hasLogin && pros.priceFlag != 1) {
  404. if (this.userIdentity == 4 && this.vipFlag == 1) {
  405. return true
  406. } else if (this.userIdentity == 2) {
  407. return true
  408. }
  409. }
  410. },
  411. swiperChange(e) {
  412. //轮播图切换
  413. const index = e.detail.current
  414. this.current = index
  415. },
  416. choiceBrand(brand, index) {
  417. // 选择品牌
  418. brand.isChecked = !brand.isChecked
  419. if (brand.isChecked) {
  420. if (!this.contains(this.checkedBrandList, brand.id)) {
  421. this.checkedBrandList.push(brand.id)
  422. }
  423. } else {
  424. this.checkedBrandList.splice(this.checkedBrandList.indexOf(brand.id), 1)
  425. }
  426. this.isAllcheckedBrand = false
  427. this.checkedBrandLength = this.checkedBrandList.length
  428. this.listQuery.brandID = this.checkedBrandList.join(',')
  429. console.log('this.listQuery.brandID', this.listQuery.brandID)
  430. },
  431. choiceBrandAll() {
  432. // 点击选择全部品牌
  433. this.isAllcheckedBrand = true
  434. this.listQuery.brandID = ''
  435. this.brandList.forEach(el => {
  436. el.isChecked = false
  437. })
  438. },
  439. contains(arr, val) {
  440. // 校验
  441. return arr.some(item => item === val)
  442. },
  443. showDropShow() {
  444. this.dropShow = !this.dropShow
  445. },
  446. btnCloseDrop() {
  447. this.dropShow = false
  448. this.productList = []
  449. this.listQuery.pageNum = 1
  450. this.GetHomeNewFloorList()
  451. },
  452. haveBack() {
  453. uni.navigateBack({
  454. delta: 1
  455. })
  456. }
  457. },
  458. onPageScroll(e) {
  459. //实时获取到滚动的值
  460. if (e.scrollTop > 50) {
  461. this.fixedClass = 'fixed'
  462. } else {
  463. this.fixedClass = 'float'
  464. }
  465. },
  466. onPullDownRefresh() {
  467. setTimeout(() => {
  468. this.productList = []
  469. this.listQuery.pageNum = 1
  470. this.GetHomeNewFloorList()
  471. uni.stopPullDownRefresh()
  472. }, 200)
  473. },
  474. onReachBottom() {
  475. if (this.hasNextPage) {
  476. this.loadding = true
  477. this.pullUpOn = true
  478. this.OnReachBottomData()
  479. }
  480. },
  481. onShow() {
  482. this.cmSysParams.pageType = '新品橱窗'
  483. this.cmSysParams.pageLabel = '新品'
  484. }
  485. }
  486. </script>
  487. <style lang="scss">
  488. page {
  489. background-color: #f7f7f7;
  490. }
  491. .container-home {
  492. width: 100%;
  493. height: auto;
  494. }
  495. .container-topcontent {
  496. width: 100%;
  497. height: 620rpx;
  498. background: #ffffff;
  499. box-sizing: border-box;
  500. position: relative;
  501. .topcontent-image {
  502. width: 100%;
  503. height: 480rpx;
  504. background: url(https://static.caimei365.com/app/img/hot/hot-bg@2x.png);
  505. background-size: cover;
  506. box-sizing: border-box;
  507. .topcontent-title {
  508. width: 100%;
  509. height: 80rpx;
  510. line-height: 80rpx;
  511. font-size: 38rpx;
  512. color: #ffffff;
  513. font-weight: bold;
  514. text-align: center;
  515. position: relative;
  516. &.fixed {
  517. position: fixed;
  518. top: 0;
  519. height: 80rpx;
  520. background: linear-gradient(90deg, #e15616 0%, #f28f31 100%);
  521. z-index: 9999;
  522. }
  523. }
  524. .topcontent-title-icon {
  525. width: 50rpx;
  526. height: 50rpx;
  527. line-height: 50rpx;
  528. position: absolute;
  529. left: 24rpx;
  530. top: 14rpx;
  531. border-radius: 50%;
  532. text-align: center;
  533. background: rgba(255, 255, 255, 0.6);
  534. border: 0.5px solid rgba(0, 0, 0, 0.1);
  535. box-sizing: border-box;
  536. z-index: 9999;
  537. .iconfont {
  538. height: 100%;
  539. width: 100%;
  540. font-size: 32rpx;
  541. display: inline-block;
  542. overflow: hidden;
  543. }
  544. }
  545. }
  546. .topcontent-swiper {
  547. width: 100%;
  548. height: auto;
  549. position: absolute;
  550. left: 0;
  551. }
  552. .swiper-goods {
  553. width: 100%;
  554. height: auto;
  555. position: relative;
  556. background-size: cover;
  557. }
  558. .swiper-banner-box {
  559. width: 100%;
  560. height: 360rpx;
  561. position: relative;
  562. background-size: cover;
  563. }
  564. .tui-banner-swiper {
  565. width: 680rpx;
  566. margin: 0 auto;
  567. height: 340rpx;
  568. background: url(https://static.caimei365.com/app/img/hot/hot-bg@3x.png);
  569. background-size: cover;
  570. border-radius: 24rpx;
  571. overflow: hidden;
  572. transform: translateY(0);
  573. box-shadow: 0px 3px 6px rgba(225, 86, 22, 0.08);
  574. margin-top: 16rpx;
  575. padding: 12rpx;
  576. .swiper-goods-image {
  577. width: 336rpx;
  578. height: 336rpx;
  579. float: left;
  580. image {
  581. width: 336rpx;
  582. height: 336rpx;
  583. display: block;
  584. border-radius: 8rpx;
  585. }
  586. }
  587. .swiper-goods-info {
  588. width: 326rpx;
  589. height: 336rpx;
  590. box-sizing: border-box;
  591. padding: 32rpx 24rpx;
  592. float: right;
  593. position: relative;
  594. .swiper-goods-name {
  595. width: 100%;
  596. height: auto;
  597. line-height: 44rpx;
  598. text-overflow: ellipsis;
  599. display: -webkit-box;
  600. word-break: break-all;
  601. -webkit-box-orient: vertical;
  602. -webkit-line-clamp: 4;
  603. overflow: hidden;
  604. font-size: 28rpx;
  605. color: #333333;
  606. text-align: center;
  607. }
  608. .swiper-goods-btn {
  609. width: 100%;
  610. height: 64rpx;
  611. position: absolute;
  612. bottom: 60rpx;
  613. left: 0;
  614. .btn {
  615. width: 200rpx;
  616. height: 64rpx;
  617. margin: 0 auto;
  618. text-align: center;
  619. line-height: 64rpx;
  620. background-color: #f94b4b;
  621. font-size: 26rpx;
  622. color: #ffffff;
  623. border-radius: 32rpx;
  624. }
  625. }
  626. }
  627. }
  628. .swiper__dots-box {
  629. position: absolute;
  630. bottom: -45rpx;
  631. left: 0;
  632. right: 0;
  633. /* #ifndef APP-NVUE */
  634. display: flex;
  635. /* #endif */
  636. flex: 1;
  637. flex-direction: row;
  638. justify-content: center;
  639. align-items: center;
  640. .swiper__dots-item {
  641. width: 14rpx;
  642. height: 8rpx;
  643. border-radius: 4rpx;
  644. margin-left: 6px;
  645. background-color: rgba(225, 86, 22, 0.39);
  646. }
  647. .swiper__dots-long {
  648. width: 40rpx;
  649. height: 8rpx;
  650. border-radius: 4rpx;
  651. background-color: #e15616;
  652. transition: all 0.4s;
  653. }
  654. }
  655. .swiper-banner-msg {
  656. width: 100%;
  657. height: 54rpx;
  658. box-sizing: border-box;
  659. padding: 0 24rpx;
  660. margin-top: 24rpx;
  661. .content {
  662. width: 100%;
  663. height: 54rpx;
  664. box-sizing: border-box;
  665. padding: 0 34rpx;
  666. background-color: #fff0e9;
  667. border-radius: 16rpx;
  668. .item {
  669. width: 33.33%;
  670. height: 54rpx;
  671. line-height: 54rpx;
  672. font-size: $font-size-24;
  673. color: $color-system;
  674. float: left;
  675. &.le {
  676. text-align: left;
  677. }
  678. &.ce {
  679. text-align: center;
  680. }
  681. &.ri {
  682. text-align: right;
  683. }
  684. .iconfont {
  685. color: $color-system;
  686. font-size: $font-size-32;
  687. .sm {
  688. font-size: $font-size-26;
  689. }
  690. }
  691. }
  692. }
  693. }
  694. }
  695. .container-screen {
  696. width: 100%;
  697. height: 138rpx;
  698. padding: 24rpx;
  699. box-sizing: border-box;
  700. background-color: #f7f7f7;
  701. position: relative;
  702. .container-screen-box {
  703. width: 100%;
  704. height: 100%;
  705. background-color: #ffffff;
  706. border-radius: 16rpx;
  707. .screen-box-em {
  708. float: left;
  709. width: 134rpx;
  710. line-height: 90rpx;
  711. text-align: center;
  712. color: #333333;
  713. font-size: 30rpx;
  714. font-weight: bold;
  715. }
  716. .screen-box-mi {
  717. float: left;
  718. width: 468rpx;
  719. height: 100%;
  720. box-sizing: border-box;
  721. padding: 21rpx 0;
  722. .screen-list {
  723. width: 140rpx;
  724. height: 48rpx;
  725. padding: 0 12rpx;
  726. float: left;
  727. text-align: center;
  728. box-sizing: border-box;
  729. line-height: 48rpx;
  730. font-size: 30rpx;
  731. color: #666666;
  732. border-radius: 24rpx;
  733. margin-right: 20rpx;
  734. text-overflow: ellipsis;
  735. overflow: hidden;
  736. display: -webkit-box;
  737. -webkit-line-clamp: 1;
  738. line-clamp: 1;
  739. -webkit-box-orient: vertical;
  740. word-break: break-all;
  741. &:last-child {
  742. margin-right: 0;
  743. }
  744. &.active {
  745. background-color: #ffe6dc;
  746. color: #e15616;
  747. }
  748. }
  749. }
  750. .screen-box-sp {
  751. float: right;
  752. width: 100rpx;
  753. line-height: 90rpx;
  754. text-align: center;
  755. .iconfont {
  756. color: #999999;
  757. font-size: 40rpx;
  758. }
  759. }
  760. }
  761. .container-screen-popup {
  762. width: 100%;
  763. height: 480rpx;
  764. box-sizing: border-box;
  765. padding: 24rpx;
  766. position: absolute;
  767. left: 0;
  768. top: 86rpx;
  769. z-index: 999;
  770. .container-screen-popupbox {
  771. width: 100%;
  772. height: 100%;
  773. box-sizing: border-box;
  774. padding: 0 24rpx;
  775. background-color: #ffffff;
  776. border-radius: 0 0 16rpx 16rpx;
  777. box-shadow: 0 10rpx 14rpx 0 rgba(86, 119, 252, 0.2);
  778. }
  779. .tui-scroll-box {
  780. width: 100%;
  781. height: 300rpx;
  782. overflow: hidden;
  783. .screen-list {
  784. width: 140rpx;
  785. height: 48rpx;
  786. padding: 0 12rpx;
  787. float: left;
  788. text-align: center;
  789. box-sizing: border-box;
  790. line-height: 48rpx;
  791. font-size: 30rpx;
  792. color: #666666;
  793. border-radius: 24rpx;
  794. margin-right: 30rpx;
  795. margin-bottom: 30rpx;
  796. text-overflow: ellipsis;
  797. overflow: hidden;
  798. display: -webkit-box;
  799. -webkit-line-clamp: 1;
  800. line-clamp: 1;
  801. -webkit-box-orient: vertical;
  802. word-break: break-all;
  803. &:nth-child(4n) {
  804. margin-right: 0;
  805. }
  806. &.active {
  807. background-color: #ffe6dc;
  808. color: #e15616;
  809. }
  810. }
  811. }
  812. .container-screen-btnbox {
  813. width: 100%;
  814. height: 84rpx;
  815. margin-top: 15rpx;
  816. .btns {
  817. width: 314rpx;
  818. height: 84rpx;
  819. line-height: 84rpx;
  820. border-radius: 42rpx;
  821. text-align: center;
  822. font-size: 30rpx;
  823. color: #ffffff;
  824. background: $btn-confirm;
  825. margin: 0 auto;
  826. }
  827. }
  828. }
  829. }
  830. .container-section {
  831. width: 100%;
  832. height: auto;
  833. background-color: #f7f7f7;
  834. box-sizing: border-box;
  835. padding: 0 24rpx 24rpx 24rpx;
  836. }
  837. .floor-item-banner {
  838. width: 100%;
  839. height: 240rpx;
  840. margin-bottom: 20rpx;
  841. .item-img-gg {
  842. width: 100%;
  843. height: 240rpx;
  844. display: block;
  845. border-radius: 16rpx;
  846. }
  847. }
  848. .section_page_main {
  849. width: 100%;
  850. height: auto;
  851. box-sizing: border-box;
  852. .floor-item {
  853. width: 339rpx;
  854. height: 516rpx;
  855. margin-right: 20rpx;
  856. font-size: $font-size-24;
  857. color: $text-color;
  858. background: #ffffff;
  859. line-height: 36rpx;
  860. border-radius: 16rpx;
  861. margin-bottom: 20rpx;
  862. float: left;
  863. box-sizing: border-box;
  864. position: relative;
  865. &:nth-child(2n) {
  866. margin-right: 0;
  867. }
  868. .item-img {
  869. width: 339rpx;
  870. height: 339rpx;
  871. border-radius: 16rpx 16rpx 0 0;
  872. display: block;
  873. margin-bottom: 8rpx;
  874. }
  875. .floor-item-type {
  876. width: 64rpx;
  877. height: 64rpx;
  878. text-align: justify;
  879. box-sizing: border-box;
  880. padding: 10rpx;
  881. border-radius: 0 0 8rpx 8rpx;
  882. background-color: #33ccbf;
  883. font-size: $font-size-22;
  884. color: #ffffff;
  885. line-height: 25rpx;
  886. position: absolute;
  887. top: 0;
  888. right: 16rpx;
  889. }
  890. .floor-item-content {
  891. width: 100%;
  892. padding: 0 20rpx;
  893. box-sizing: border-box;
  894. }
  895. .floor-item-act {
  896. display: block;
  897. width: 100%;
  898. height: 32rpx;
  899. text-align: center;
  900. box-sizing: border-box;
  901. }
  902. .title-none {
  903. font-size: $font-size-26;
  904. color: #ff2a2a;
  905. line-height: 54rpx;
  906. }
  907. .title {
  908. width: 100%;
  909. height: 70rpx;
  910. display: flex;
  911. line-height: 35rpx;
  912. flex-direction: column;
  913. margin: 8rpx 0;
  914. padding: 0;
  915. position: relative;
  916. .mclap {
  917. width: 100%;
  918. line-height: 35rpx;
  919. text-overflow: ellipsis;
  920. display: -webkit-box;
  921. word-break: break-all;
  922. -webkit-box-orient: vertical;
  923. -webkit-line-clamp: 2;
  924. overflow: hidden;
  925. font-size: 26rpx;
  926. &.indent {
  927. text-indent: 95rpx;
  928. }
  929. }
  930. .mclap-tag {
  931. display: block;
  932. width: 84rpx;
  933. height: 32rpx;
  934. background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
  935. border-radius: 4rpx 48rpx 4px 4px;
  936. line-height: 32rpx;
  937. font-size: $font-size-22;
  938. color: #ffffff;
  939. text-align: center;
  940. position: absolute;
  941. left: 0;
  942. top: 0;
  943. }
  944. }
  945. .floor-item-price {
  946. .list-login-now {
  947. line-height: 44rpx;
  948. .p-no {
  949. height: 44rpx;
  950. line-height: 44rpx;
  951. display: inline-block;
  952. float: left;
  953. }
  954. }
  955. .list-price {
  956. color: #ff2a2a;
  957. height: 44rpx;
  958. float: left;
  959. .price-larger {
  960. width: 100%;
  961. height: 44rpx;
  962. font-size: 32rpx;
  963. &.none {
  964. text-decoration: line-through;
  965. color: #999999;
  966. }
  967. &.small {
  968. font-size: $font-size-24;
  969. }
  970. .txt {
  971. font-size: $font-size-24;
  972. display: inline-block;
  973. line-height: 44rpx;
  974. text-align: left;
  975. float: left;
  976. }
  977. }
  978. }
  979. }
  980. }
  981. }
  982. </style>