good-hot.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984
  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. uni.setStorageSync('pageLabel','新品')
  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. }
  483. }
  484. </script>
  485. <style lang="scss">
  486. page {
  487. background-color: #f7f7f7;
  488. }
  489. .container-home {
  490. width: 100%;
  491. height: auto;
  492. }
  493. .container-topcontent {
  494. width: 100%;
  495. height: 620rpx;
  496. background: #ffffff;
  497. box-sizing: border-box;
  498. position: relative;
  499. .topcontent-image {
  500. width: 100%;
  501. height: 480rpx;
  502. background: url(https://static.caimei365.com/app/img/hot/hot-bg@2x.png);
  503. background-size: cover;
  504. box-sizing: border-box;
  505. .topcontent-title {
  506. width: 100%;
  507. height: 80rpx;
  508. line-height: 80rpx;
  509. font-size: 38rpx;
  510. color: #ffffff;
  511. font-weight: bold;
  512. text-align: center;
  513. position: relative;
  514. &.fixed {
  515. position: fixed;
  516. top: 0;
  517. height: 80rpx;
  518. background: linear-gradient(90deg, #e15616 0%, #f28f31 100%);
  519. z-index: 9999;
  520. }
  521. }
  522. .topcontent-title-icon {
  523. width: 50rpx;
  524. height: 50rpx;
  525. line-height: 50rpx;
  526. position: absolute;
  527. left: 24rpx;
  528. top: 14rpx;
  529. border-radius: 50%;
  530. text-align: center;
  531. background: rgba(255, 255, 255, 0.6);
  532. border: 0.5px solid rgba(0, 0, 0, 0.1);
  533. box-sizing: border-box;
  534. z-index: 9999;
  535. .iconfont {
  536. height: 100%;
  537. width: 100%;
  538. font-size: 32rpx;
  539. display: inline-block;
  540. overflow: hidden;
  541. }
  542. }
  543. }
  544. .topcontent-swiper {
  545. width: 100%;
  546. height: auto;
  547. position: absolute;
  548. left: 0;
  549. }
  550. .swiper-goods {
  551. width: 100%;
  552. height: auto;
  553. position: relative;
  554. background-size: cover;
  555. }
  556. .swiper-banner-box {
  557. width: 100%;
  558. height: 360rpx;
  559. position: relative;
  560. background-size: cover;
  561. }
  562. .tui-banner-swiper {
  563. width: 680rpx;
  564. margin: 0 auto;
  565. height: 340rpx;
  566. background: url(https://static.caimei365.com/app/img/hot/hot-bg@3x.png);
  567. background-size: cover;
  568. border-radius: 24rpx;
  569. overflow: hidden;
  570. transform: translateY(0);
  571. box-shadow: 0px 3px 6px rgba(225, 86, 22, 0.08);
  572. margin-top: 16rpx;
  573. padding: 12rpx;
  574. .swiper-goods-image {
  575. width: 336rpx;
  576. height: 336rpx;
  577. float: left;
  578. image {
  579. width: 336rpx;
  580. height: 336rpx;
  581. display: block;
  582. border-radius: 8rpx;
  583. }
  584. }
  585. .swiper-goods-info {
  586. width: 326rpx;
  587. height: 336rpx;
  588. box-sizing: border-box;
  589. padding: 32rpx 24rpx;
  590. float: right;
  591. position: relative;
  592. .swiper-goods-name {
  593. width: 100%;
  594. height: auto;
  595. line-height: 44rpx;
  596. text-overflow: ellipsis;
  597. display: -webkit-box;
  598. word-break: break-all;
  599. -webkit-box-orient: vertical;
  600. -webkit-line-clamp: 4;
  601. overflow: hidden;
  602. font-size: 28rpx;
  603. color: #333333;
  604. text-align: center;
  605. }
  606. .swiper-goods-btn {
  607. width: 100%;
  608. height: 64rpx;
  609. position: absolute;
  610. bottom: 60rpx;
  611. left: 0;
  612. .btn {
  613. width: 200rpx;
  614. height: 64rpx;
  615. margin: 0 auto;
  616. text-align: center;
  617. line-height: 64rpx;
  618. background-color: #f94b4b;
  619. font-size: 26rpx;
  620. color: #ffffff;
  621. border-radius: 32rpx;
  622. }
  623. }
  624. }
  625. }
  626. .swiper__dots-box {
  627. position: absolute;
  628. bottom: -45rpx;
  629. left: 0;
  630. right: 0;
  631. /* #ifndef APP-NVUE */
  632. display: flex;
  633. /* #endif */
  634. flex: 1;
  635. flex-direction: row;
  636. justify-content: center;
  637. align-items: center;
  638. .swiper__dots-item {
  639. width: 14rpx;
  640. height: 8rpx;
  641. border-radius: 4rpx;
  642. margin-left: 6px;
  643. background-color: rgba(225, 86, 22, 0.39);
  644. }
  645. .swiper__dots-long {
  646. width: 40rpx;
  647. height: 8rpx;
  648. border-radius: 4rpx;
  649. background-color: #e15616;
  650. transition: all 0.4s;
  651. }
  652. }
  653. .swiper-banner-msg {
  654. width: 100%;
  655. height: 54rpx;
  656. box-sizing: border-box;
  657. padding: 0 24rpx;
  658. margin-top: 24rpx;
  659. .content {
  660. width: 100%;
  661. height: 54rpx;
  662. box-sizing: border-box;
  663. padding: 0 34rpx;
  664. background-color: #fff0e9;
  665. border-radius: 16rpx;
  666. .item {
  667. width: 33.33%;
  668. height: 54rpx;
  669. line-height: 54rpx;
  670. font-size: $font-size-24;
  671. color: $color-system;
  672. float: left;
  673. &.le {
  674. text-align: left;
  675. }
  676. &.ce {
  677. text-align: center;
  678. }
  679. &.ri {
  680. text-align: right;
  681. }
  682. .iconfont {
  683. color: $color-system;
  684. font-size: $font-size-32;
  685. .sm {
  686. font-size: $font-size-26;
  687. }
  688. }
  689. }
  690. }
  691. }
  692. }
  693. .container-screen {
  694. width: 100%;
  695. height: 138rpx;
  696. padding: 24rpx;
  697. box-sizing: border-box;
  698. background-color: #f7f7f7;
  699. position: relative;
  700. .container-screen-box {
  701. width: 100%;
  702. height: 100%;
  703. background-color: #ffffff;
  704. border-radius: 16rpx;
  705. .screen-box-em {
  706. float: left;
  707. width: 134rpx;
  708. line-height: 90rpx;
  709. text-align: center;
  710. color: #333333;
  711. font-size: 30rpx;
  712. font-weight: bold;
  713. }
  714. .screen-box-mi {
  715. float: left;
  716. width: 468rpx;
  717. height: 100%;
  718. box-sizing: border-box;
  719. padding: 21rpx 0;
  720. .screen-list {
  721. width: 140rpx;
  722. height: 48rpx;
  723. padding: 0 12rpx;
  724. float: left;
  725. text-align: center;
  726. box-sizing: border-box;
  727. line-height: 48rpx;
  728. font-size: 30rpx;
  729. color: #666666;
  730. border-radius: 24rpx;
  731. margin-right: 20rpx;
  732. text-overflow: ellipsis;
  733. overflow: hidden;
  734. display: -webkit-box;
  735. -webkit-line-clamp: 1;
  736. line-clamp: 1;
  737. -webkit-box-orient: vertical;
  738. word-break: break-all;
  739. &:last-child {
  740. margin-right: 0;
  741. }
  742. &.active {
  743. background-color: #ffe6dc;
  744. color: #e15616;
  745. }
  746. }
  747. }
  748. .screen-box-sp {
  749. float: right;
  750. width: 100rpx;
  751. line-height: 90rpx;
  752. text-align: center;
  753. .iconfont {
  754. color: #999999;
  755. font-size: 40rpx;
  756. }
  757. }
  758. }
  759. .container-screen-popup {
  760. width: 100%;
  761. height: 480rpx;
  762. box-sizing: border-box;
  763. padding: 24rpx;
  764. position: absolute;
  765. left: 0;
  766. top: 86rpx;
  767. z-index: 999;
  768. .container-screen-popupbox {
  769. width: 100%;
  770. height: 100%;
  771. box-sizing: border-box;
  772. padding: 0 24rpx;
  773. background-color: #ffffff;
  774. border-radius: 0 0 16rpx 16rpx;
  775. box-shadow: 0 10rpx 14rpx 0 rgba(86, 119, 252, 0.2);
  776. }
  777. .tui-scroll-box {
  778. width: 100%;
  779. height: 300rpx;
  780. overflow: hidden;
  781. .screen-list {
  782. width: 140rpx;
  783. height: 48rpx;
  784. padding: 0 12rpx;
  785. float: left;
  786. text-align: center;
  787. box-sizing: border-box;
  788. line-height: 48rpx;
  789. font-size: 30rpx;
  790. color: #666666;
  791. border-radius: 24rpx;
  792. margin-right: 30rpx;
  793. margin-bottom: 30rpx;
  794. text-overflow: ellipsis;
  795. overflow: hidden;
  796. display: -webkit-box;
  797. -webkit-line-clamp: 1;
  798. line-clamp: 1;
  799. -webkit-box-orient: vertical;
  800. word-break: break-all;
  801. &:nth-child(4n) {
  802. margin-right: 0;
  803. }
  804. &.active {
  805. background-color: #ffe6dc;
  806. color: #e15616;
  807. }
  808. }
  809. }
  810. .container-screen-btnbox {
  811. width: 100%;
  812. height: 84rpx;
  813. margin-top: 15rpx;
  814. .btns {
  815. width: 314rpx;
  816. height: 84rpx;
  817. line-height: 84rpx;
  818. border-radius: 42rpx;
  819. text-align: center;
  820. font-size: 30rpx;
  821. color: #ffffff;
  822. background: $btn-confirm;
  823. margin: 0 auto;
  824. }
  825. }
  826. }
  827. }
  828. .container-section {
  829. width: 100%;
  830. height: auto;
  831. background-color: #f7f7f7;
  832. box-sizing: border-box;
  833. padding: 0 24rpx 24rpx 24rpx;
  834. }
  835. .floor-item-banner {
  836. width: 100%;
  837. height: 240rpx;
  838. margin-bottom: 20rpx;
  839. .item-img-gg {
  840. width: 100%;
  841. height: 240rpx;
  842. display: block;
  843. border-radius: 16rpx;
  844. }
  845. }
  846. .section_page_main {
  847. width: 100%;
  848. height: auto;
  849. box-sizing: border-box;
  850. .floor-item {
  851. width: 339rpx;
  852. height: 516rpx;
  853. margin-right: 20rpx;
  854. font-size: $font-size-24;
  855. color: $text-color;
  856. background: #ffffff;
  857. line-height: 36rpx;
  858. border-radius: 16rpx;
  859. margin-bottom: 20rpx;
  860. float: left;
  861. box-sizing: border-box;
  862. position: relative;
  863. &:nth-child(2n) {
  864. margin-right: 0;
  865. }
  866. .item-img {
  867. width: 339rpx;
  868. height: 339rpx;
  869. border-radius: 16rpx 16rpx 0 0;
  870. display: block;
  871. margin-bottom: 8rpx;
  872. }
  873. .floor-item-type {
  874. width: 64rpx;
  875. height: 64rpx;
  876. text-align: justify;
  877. box-sizing: border-box;
  878. padding: 10rpx;
  879. border-radius: 0 0 8rpx 8rpx;
  880. background-color: #33ccbf;
  881. font-size: $font-size-22;
  882. color: #ffffff;
  883. line-height: 25rpx;
  884. position: absolute;
  885. top: 0;
  886. right: 16rpx;
  887. }
  888. .floor-item-content {
  889. width: 100%;
  890. padding: 0 20rpx;
  891. box-sizing: border-box;
  892. }
  893. .floor-item-act {
  894. display: block;
  895. width: 100%;
  896. height: 32rpx;
  897. text-align: center;
  898. box-sizing: border-box;
  899. }
  900. .title-none {
  901. font-size: $font-size-26;
  902. color: #ff2a2a;
  903. line-height: 54rpx;
  904. }
  905. .title {
  906. width: 100%;
  907. height: 70rpx;
  908. display: flex;
  909. line-height: 35rpx;
  910. flex-direction: column;
  911. margin: 8rpx 0;
  912. padding: 0;
  913. position: relative;
  914. .mclap {
  915. width: 100%;
  916. line-height: 35rpx;
  917. text-overflow: ellipsis;
  918. display: -webkit-box;
  919. word-break: break-all;
  920. -webkit-box-orient: vertical;
  921. -webkit-line-clamp: 2;
  922. overflow: hidden;
  923. font-size: 26rpx;
  924. &.indent {
  925. text-indent: 95rpx;
  926. }
  927. }
  928. .mclap-tag {
  929. display: block;
  930. width: 84rpx;
  931. height: 32rpx;
  932. background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
  933. border-radius: 4rpx 48rpx 4px 4px;
  934. line-height: 32rpx;
  935. font-size: $font-size-22;
  936. color: #ffffff;
  937. text-align: center;
  938. position: absolute;
  939. left: 0;
  940. top: 0;
  941. }
  942. }
  943. .floor-item-price {
  944. .list-login-now {
  945. line-height: 44rpx;
  946. .p-no {
  947. height: 44rpx;
  948. line-height: 44rpx;
  949. display: inline-block;
  950. float: left;
  951. }
  952. }
  953. .list-price {
  954. color: #ff2a2a;
  955. height: 44rpx;
  956. float: left;
  957. .price-larger {
  958. width: 100%;
  959. height: 44rpx;
  960. font-size: 32rpx;
  961. &.none {
  962. text-decoration: line-through;
  963. color: #999999;
  964. }
  965. &.small {
  966. font-size: $font-size-24;
  967. }
  968. .txt {
  969. font-size: $font-size-24;
  970. display: inline-block;
  971. line-height: 44rpx;
  972. text-align: left;
  973. float: left;
  974. }
  975. }
  976. }
  977. }
  978. }
  979. }
  980. </style>