immediatelyList.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951
  1. <template>
  2. <view
  3. class="container commodity-list-wrapper"
  4. :style="{ overflow: showSkeleton ? 'hidden' : 'auto', height: showSkeleton ? windowHeight + 'px' : 'auto' }"
  5. >
  6. <view class="good-search clearfix" v-if="searchStatus">
  7. <view class="search-from name">
  8. <text class="iconfont icon-sousuo"></text>
  9. <input
  10. class="input"
  11. type="text"
  12. :focus="isFocus"
  13. confirm-type="search"
  14. v-model="searchInputVal"
  15. placeholder="请输入商品关键词"
  16. @input="onShowClose"
  17. @confirm="searchOpertor(tabIndex)"
  18. maxlength="20"
  19. />
  20. <!-- <text class="iconfont icon-shanchu1" v-if="isShowClose" @click="delInputText(tabIndex)"></text> -->
  21. </view>
  22. </view>
  23. <!-- 骨架 -->
  24. <list-skeleton v-if="showSkeleton"></list-skeleton>
  25. <!-- 商品为空时 -->
  26. <view class="empty-container" v-if="isShowEmpty">
  27. <image
  28. class="empty-container-image"
  29. src="https://img.caimei365.com/group1/M00/03/71/Cmis2F3wna6AY2ZjAABpmnBICH4247.png"
  30. ></image>
  31. <text class="error-text">{{ isShowEmptyText }}</text>
  32. </view>
  33. <!-- 单一商品 -->
  34. <view class="product-container" v-else>
  35. <scroll-view
  36. :style="{ height: scrollHeight + 'px' }"
  37. @scrolltolower="scrolltolower(tabIndex)"
  38. scroll-y
  39. v-if="listData.length > 0"
  40. >
  41. <view
  42. v-for="(item, index) in 10"
  43. :key="index"
  44. :id="item.id"
  45. class="all-type-list-content commodity-list"
  46. @click.stop="navToDetailPage(item.p_id)"
  47. >
  48. <image
  49. mode="widthFix"
  50. src="https://img.caimei365.com/group1/M00/03/71/Cmis2F3wna6AY2ZjAABpmnBICH4247.png"
  51. class="list-img"
  52. alt="list-img"
  53. ></image>
  54. <view class="list-details-info">
  55. <!-- 商品名称 -->
  56. <text class="list-details-title">韩国恩盛进口氢洁气小气泡清韩国恩盛进口氢洁气小气泡清</text>
  57. <!-- 商品标签 -->
  58. <view class="list-details-tags">
  59. <tui-tag type="danger" class="tag" padding="6rpx" size="20rpx" plain>商品标签</tui-tag>
  60. </view>
  61. <text class="list-details-specs">规格:30g×5片/盒</text>
  62. <!-- 商品价格 -->
  63. <view class="goods-price">
  64. <view class="price"> ¥23333.00 </view> <view class="shop-btn" @click.stop="showAddCartModal"> 购买 </view>
  65. </view>
  66. </view>
  67. </view>
  68. <view v-if="showLoading && listData.length > 4 && !showRegularBtn">
  69. <view class="loading-wrapper loading-wrapper-now" v-if="loadingNow"
  70. >{{ loadingText }}<text v-if="loadingText === '已至底部'">‧ ‧ ‧</text></view
  71. >
  72. <view class="loading-wrapper loading-wrapper-btm" v-else>———<text class="btm-text">已至底部</text>———</view>
  73. </view>
  74. </scroll-view>
  75. <!-- 组合商品 -->
  76. </view>
  77. <!-- 可拖动悬浮按钮 -->
  78. <cm-drag
  79. :cartNum="cartQuantity"
  80. :isDock="true"
  81. :existTabBar="true"
  82. @btnClick="btnClick"
  83. @btnTouchstart="btnTouchstart"
  84. @btnTouchend="btnTouchend"
  85. >
  86. </cm-drag>
  87. <!-- 透明模态层 -->
  88. <modal-layer v-if="false"></modal-layer>
  89. </view>
  90. </template>
  91. <script>
  92. import listSkeleton from '@/components/cm-module/listTemplate/listSkeleton'
  93. import modalLayer from '@/components/cm-module/modal-layer/modal-layer'
  94. import cmDrag from '@/components/cm-module/cm-drag/cm-drag'
  95. import tuiTag from '@/components/thorui/tui-tag/tui-tag'
  96. import { mapState, mapMutations } from 'vuex'
  97. export default {
  98. name: 'productList',
  99. components: {
  100. listSkeleton,
  101. modalLayer,
  102. cmDrag,
  103. tuiTag
  104. },
  105. props: {
  106. searchStatus: {
  107. type: Boolean,
  108. default: false
  109. }
  110. },
  111. data() {
  112. return {
  113. isShowClose: false,
  114. searchInputVal: '',
  115. isModallayer: false,
  116. windowHeight: '',
  117. showSkeleton: false,
  118. priceLoading: true,
  119. isShowEmpty: false,
  120. isShowEmptyText: '搜索相关商品',
  121. clubUserId: '',
  122. identity: '',
  123. isFocus: false,
  124. scrollHeight: '',
  125. listData: [],
  126. combinationProduct: [],
  127. zuheProductList: [], //组合商品列表
  128. showLoading: false,
  129. loadingNow: true,
  130. loadingText: '上拉加载更多',
  131. pageSize: 20,
  132. zuhepageSize: 5,
  133. pageNum: 1,
  134. totalPage: 1,
  135. hasNextPage: false,
  136. pullFlag: true,
  137. fromRegularPurchasePage: false,
  138. cartQuantity: 0,
  139. showRegularBtn: false,
  140. isPrecedence: false,
  141. ladderPriceList: [], //是否 阶梯,
  142. tabIndex: 0,
  143. goodsList: [],
  144. tabBars: [{ name: '单一', id: 'danyi' }, { name: '组合', id: 'zuhe' }],
  145. isShow: false,
  146. }
  147. },
  148. created() {
  149. this.setScrollHeight()
  150. this.$api
  151. .getComStorage('userInfo')
  152. .then(resolve => {
  153. if (resolve.userIdentity == 1) {
  154. this.identity = 1
  155. }
  156. })
  157. .catch(error => {
  158. console.log(error)
  159. })
  160. this.$api.getComStorage('orderUserInfo').then(resolve => {
  161. this.clubUserId = resolve.userID
  162. })
  163. this.getProductAgainInfo()
  164. this.isFocus = true
  165. },
  166. filters: {
  167. NumFormat: function(text) {
  168. //处理金额
  169. return Number(text).toFixed(2)
  170. }
  171. },
  172. computed: {
  173. ...mapState(['hasLogin', 'userInfo'])
  174. },
  175. methods: {
  176. closeDrawer(){
  177. this.visible = false
  178. },
  179. // 数量选择框
  180. showAddCartModal() {
  181. this.visible = true
  182. },
  183. scrolltolower(tabIndex) {
  184. if (tabIndex == 0) {
  185. if (this.totalPage > this.listData.length && this.pullFlag) {
  186. this.getProductAgainInfo(true)
  187. }
  188. } else if (tabIndex == 1) {
  189. if (this.hasNextPage && this.pullFlag) {
  190. this.getcombinationProduct(true)
  191. }
  192. }
  193. },
  194. setScrollHeight() {
  195. const { windowHeight, pixelRatio } = wx.getSystemInfoSync()
  196. this.windowHeight = windowHeight - 1
  197. this.scrollHeight = windowHeight - 66
  198. },
  199. getProductAgainInfo(loadMore) {
  200. this.showLoading = true
  201. this.priceLoading = true
  202. this.loadingNow = true
  203. this.loadingText = '加载中'
  204. this.isShowEmpty = false
  205. if (loadMore) {
  206. this.pageNum += 1
  207. }
  208. let params = {
  209. identity: this.identity,
  210. keyword: this.searchInputVal,
  211. pageNum: this.pageNum,
  212. pageSize: this.pageSize,
  213. sortField: '',
  214. sortType: ''
  215. }
  216. this.ProductService.GetProductSearchList(params)
  217. .then(response => {
  218. this.isShowWrapper = true
  219. const resData = JSON.parse(response.data)
  220. const resList = resData.items
  221. if (resList && resList.length > 0) {
  222. this.totalPage = resData.total
  223. this.showEmpty = false
  224. if (loadMore) {
  225. this.listData = [...this.listData, ...resList]
  226. this.getProductPrice()
  227. } else {
  228. this.listData = [...resList]
  229. this.getProductPrice()
  230. this.showSkeleton = false
  231. }
  232. // 防上拉暴滑
  233. this.pullFlag = false
  234. setTimeout(() => {
  235. this.pullFlag = true
  236. }, 500)
  237. // 底部提示文案
  238. if (this.totalPage > this.listData.length) {
  239. this.loadingText = '上拉加载更多'
  240. } else {
  241. this.showLoading = true
  242. this.loadingNow = false
  243. }
  244. } else {
  245. if (!loadMore) {
  246. this.isShowEmpty = true
  247. this.isShowEmptyText = '暂无相关商品'
  248. }
  249. }
  250. })
  251. .catch(error => {
  252. this.$util.msg(error.msg, 2000)
  253. })
  254. },
  255. getProductPrice() {
  256. //获取商品或者活动价格
  257. let productIdArr = []
  258. let productIds = ''
  259. this.listData.map(item => {
  260. // 0公开价格 1不公开价格 2仅对会员机构公开
  261. productIdArr.push(item.p_id)
  262. })
  263. productIds = productIdArr.join(',')
  264. this.ProductService.querySearchProductPrice({ userId: this.clubUserId, productIds: productIds })
  265. .then(response => {
  266. this.listData = this.ReturnNewProducts(this.listData, response.data)
  267. this.priceLoading = false
  268. })
  269. .catch(error => {
  270. this.$util.msg(error.msg, 2000)
  271. })
  272. },
  273. ReturnNewProducts(Array, list) {
  274. //合并字段
  275. let NewArray = []
  276. Array.map(item => {
  277. for (let i = 0; i < list.length; i++) {
  278. if (item.p_id == list[i].productId) {
  279. NewArray.push(Object.assign(item, list[i]))
  280. }
  281. }
  282. })
  283. return NewArray
  284. },
  285. searchOpertor(tabIndex) {
  286. //搜索商品
  287. if (tabIndex == 0) {
  288. if (this.searchInputVal == '') {
  289. this.$util.msg('请输入商品关键词', 2000)
  290. } else {
  291. this.pageNum = 1
  292. this.showSkeleton = true
  293. this.getProductAgainInfo()
  294. this.isFocus = false
  295. }
  296. } else {
  297. this.pageNum = 1
  298. this.showSkeleton = true
  299. this.getcombinationProduct()
  300. this.isFocus = false
  301. }
  302. },
  303. getcombinationProduct(loadMore) {
  304. //组合搜索商品
  305. this.showLoading = true
  306. this.loadingNow = true
  307. this.loadingText = '加载中'
  308. this.isShowEmpty = false
  309. if (loadMore) {
  310. this.pageNum += 1
  311. }
  312. let params = {
  313. clubUserId: this.clubUserId,
  314. pageNum: this.pageNum,
  315. pageSize: this.zuhepageSize,
  316. searchWord: this.searchInputVal
  317. }
  318. this.SellerService.GetCombinationProduct(params)
  319. .then(response => {
  320. this.isShowWrapper = true
  321. const responseData = response.data
  322. if (responseData.results && responseData.results.length > 0) {
  323. this.hasNextPage = responseData.hasNextPage
  324. this.isShowEmpty = false
  325. if (loadMore) {
  326. this.combinationProduct = [...this.combinationProduct, ...responseData.results]
  327. } else {
  328. this.combinationProduct = [...responseData.results]
  329. this.showSkeleton = false
  330. }
  331. // 防上拉暴滑
  332. this.pullFlag = false
  333. setTimeout(() => {
  334. this.pullFlag = true
  335. }, 500)
  336. // 底部提示文案
  337. if (this.hasNextPage) {
  338. this.loadingText = '上拉加载更多'
  339. } else {
  340. this.showLoading = true
  341. this.loadingNow = false
  342. }
  343. } else {
  344. this.isShowEmpty = true
  345. this.isShowEmptyText = '暂无相关商品'
  346. }
  347. })
  348. .catch(error => {
  349. this.$util.msg(error.msg, 2000)
  350. })
  351. },
  352. changeCountAdd(item, pros) {
  353. //商品数量加加
  354. if (pros.initProductNum == 0) {
  355. pros.initProductNum = pros.minBuyNumber
  356. this.processActivityPrice(pros)
  357. } else if (pros.initProductNum >= pros.minBuyNumber) {
  358. pros.initProductNum++
  359. this.processActivityPrice(pros)
  360. }
  361. this.totalPeice(item)
  362. this.totalCount(item)
  363. this.totalKind(item)
  364. },
  365. changeCountSub(item, pros) {
  366. //商品数量减减
  367. if (pros.initProductNum == 0) {
  368. this.$util.msg(`采购数量不能小于0`, 2000)
  369. return
  370. } else if (pros.initProductNum == pros.minBuyNumber) {
  371. pros.initProductNum = 0
  372. this.processActivityPrice(pros)
  373. } else {
  374. pros.initProductNum--
  375. this.processActivityPrice(pros)
  376. }
  377. this.totalPeice(item)
  378. this.totalCount(item)
  379. this.totalKind(item)
  380. },
  381. changeNnmber(e, item, pros) {
  382. //输入商品数量更新
  383. let _value = e.detail.value
  384. if (!this.$api.isNumber(_value)) {
  385. pros.initProductNum = pros.minBuyNumber
  386. } else if (_value < pros.minBuyNumber) {
  387. this.$util.msg(`该商品最小起订量为${pros.minBuyNumber}`, 2000)
  388. pros.initProductNum = pros.minBuyNumber
  389. } else {
  390. pros.initProductNum = parseInt(e.detail.value)
  391. this.processActivityPrice(pros)
  392. }
  393. this.totalPeice(item)
  394. this.totalCount(item)
  395. this.totalKind(item)
  396. },
  397. totalPeice(item) {
  398. //计算总价格,每次调用此方法,将初始值为0,遍历价格并累加
  399. let prosPrice = 0
  400. let productsList = []
  401. productsList = item.combinationProductList
  402. productsList.forEach(pros => {
  403. prosPrice += pros.retailPrice * pros.initProductNum
  404. item.productTotalAmount = prosPrice
  405. })
  406. // console.log(prosPrice)
  407. },
  408. totalCount(item) {
  409. //计算总数量
  410. let prosAllCount = 0
  411. let productsList = []
  412. productsList = item.combinationProductList
  413. productsList.forEach(pros => {
  414. prosAllCount += parseInt(pros.initProductNum)
  415. item.productTotalNum = prosAllCount
  416. })
  417. // console.log(prosAllCount)
  418. },
  419. totalKind(item) {
  420. //计算商品种类
  421. let productsList = []
  422. let checkList = []
  423. productsList = item.combinationProductList
  424. productsList.forEach(pros => {
  425. if (pros.initProductNum > 0) {
  426. checkList.push(pros)
  427. item.productKind = checkList.length
  428. } else {
  429. item.productKind = checkList.length
  430. }
  431. })
  432. },
  433. processActivityPrice(pros) {
  434. //单独处理活动价格和阶梯价格
  435. let ladderPriceList = pros.ladderPriceList
  436. if (pros.ladderPriceFlag == '0' || pros.actStatus == 1) {
  437. pros.totalPrice = pros.initProductNum * pros.retailPrice
  438. } else {
  439. ladderPriceList.forEach((item, index) => {
  440. if (pros.initProductNum >= item.buyNum) {
  441. pros.retailPrice = item.buyPrice
  442. pros.totalPrice = pros.initProductNum * item.buyPrice
  443. }
  444. })
  445. }
  446. },
  447. operationHanld(prop) {
  448. this.$emit('operationConfim', prop)
  449. },
  450. alertjieti(pros) {
  451. this.$emit('alertjietiConfim', pros)
  452. },
  453. changeTab(index) {
  454. this.tabIndex = index
  455. if (index == 0) {
  456. this.pageNum = 1
  457. this.getProductAgainInfo()
  458. } else {
  459. this.getcombinationProduct()
  460. }
  461. // this.$emit('changetab',index);
  462. },
  463. navToDetailPage(id) {
  464. this.isModallayer = true
  465. this.$api.navigateTo(`/pages/goods/product?id=${id}`)
  466. this.isModallayer = false
  467. },
  468. repurchModel() {
  469. this.$util.modal('', '此商品的价格有变化,原来的购买价已不适用', '知道了', '', false, () => {})
  470. },
  471. onShowClose() {
  472. //输入框失去焦点时触发
  473. if (this.searchInputVal != '') {
  474. this.isShowClose = true
  475. } else {
  476. this.isShowClose = false
  477. }
  478. },
  479. delInputText(tabIndex) {
  480. //清除输入框内容
  481. if (tabIndex == 0) {
  482. this.searchInputVal = ''
  483. this.listData = []
  484. this.isFocus = true
  485. this.isShowClose = false
  486. this.loadingNow = false
  487. this.isShowEmpty = true
  488. this.isShowEmptyText = '暂无相关商品'
  489. } else {
  490. this.searchInputVal = ''
  491. this.isShowClose = false
  492. this.isFocus = true
  493. this.getcombinationProduct()
  494. }
  495. },
  496. isInterceptHtmlFn(text) {
  497. let name = this.$reg.interceptHtmlFn(text)
  498. return name
  499. },
  500. PromotionsFormat(promo) {
  501. //促销活动类型数据处理
  502. if (promo != null) {
  503. if (promo.type == 1 && promo.mode == 1) {
  504. return true
  505. } else {
  506. return false
  507. }
  508. }
  509. return false
  510. },
  511. btnClick() {
  512. this.$emit('goCartPage')
  513. },
  514. btnTouchstart() {
  515. // console.log('btnTouchstart');
  516. },
  517. btnTouchend() {
  518. // console.log('btnTouchend');
  519. }
  520. }
  521. }
  522. </script>
  523. <style lang="scss">
  524. .all-zuhe-list {
  525. background: #ffffff;
  526. }
  527. .foot_conten {
  528. width: 655rpx;
  529. background: #fff;
  530. font-size: 28rpx;
  531. height: 80rpx;
  532. // line-height: 80rpx;
  533. display: inherit;
  534. padding: 10px;
  535. overflow: hidden;
  536. margin: 20rpx auto;
  537. }
  538. .zuhe_foot-box {
  539. float: left;
  540. overflow: hidden;
  541. white-space: nowrap;
  542. // text-overflow: ellipsis;
  543. width: 490rpx;
  544. }
  545. .zuhe_foot-box text {
  546. margin-right: 36rpx;
  547. }
  548. .foot_text {
  549. color: #ff2a2a;
  550. }
  551. .foot_conten .buycart {
  552. width: 162rpx;
  553. height: 64rpx;
  554. background: #efaf00 !important;
  555. color: #fff;
  556. font-size: 26rpx;
  557. border-radius: 36rpx;
  558. text-align: center;
  559. line-height: 64rpx;
  560. float: right;
  561. }
  562. .price-none {
  563. font-size: 24rpx;
  564. color: #666666;
  565. }
  566. .zuhe_title {
  567. background: #ffffff;
  568. height: 76rpx;
  569. font-size: 28rpx;
  570. color: #1675e1;
  571. border-bottom: 4rpx solid #1675e1;
  572. line-height: 76rpx;
  573. padding-left: 30rpx;
  574. &.active {
  575. color: #e15616;
  576. border-bottom: 4rpx solid #e15616;
  577. }
  578. }
  579. .tabstyle {
  580. width: 128rpx;
  581. height: 76rpx;
  582. font-size: 26rpx;
  583. display: inline-block;
  584. border-radius: 10rpx;
  585. text-align: center;
  586. line-height: 76rpx;
  587. border: 2rpx solid #eeeeee;
  588. position: relative;
  589. margin-right: 12rpx;
  590. &.addstyle {
  591. background: $btn-confirm;
  592. color: #ffffff;
  593. &::before {
  594. content: '';
  595. width: 0;
  596. height: 0;
  597. border-top: 20rpx solid transparent;
  598. border-right: 20rpx solid #ffffff;
  599. border-left: 20rpx solid transparent;
  600. border-bottom: 20rpx solid #ffffff;
  601. position: absolute;
  602. right: 0;
  603. bottom: 0;
  604. }
  605. }
  606. .icon-gou {
  607. width: 36rpx;
  608. height: 36rpx;
  609. line-height: 36rpx;
  610. text-align: center;
  611. color: #e15616;
  612. position: absolute;
  613. bottom: -5rpx;
  614. right: -5rpx;
  615. font-weight: bold;
  616. font-size: $font-size-28;
  617. }
  618. }
  619. .commodity-list-wrapper {
  620. .product-container {
  621. padding-top: 130rpx;
  622. }
  623. scroll-view {
  624. height: 100%;
  625. }
  626. .show-more-btn {
  627. width: 276rpx;
  628. height: 52rpx;
  629. line-height: 52rpx;
  630. border: 2rpx solid #d8d8d8;
  631. background: #f7f7f7;
  632. font-size: 26rpx;
  633. margin: 26rpx 0;
  634. position: absolute;
  635. left: 50%;
  636. margin-left: -138rpx;
  637. }
  638. }
  639. .good-search {
  640. position: fixed;
  641. top: 0;
  642. z-index: 999;
  643. background-color: #fff;
  644. width: 702rpx;
  645. height: 66rpx;
  646. padding: 32rpx 24rpx;
  647. .search-from {
  648. display: flex;
  649. align-items: center;
  650. box-sizing: border-box;
  651. padding-left: 30rpx;
  652. width: 702rpx;
  653. height: 66rpx;
  654. background-color: #f7f7f7;
  655. border-radius: 33rpx;
  656. line-height: 64rpx;
  657. .icon-sousuo {
  658. width: 64rpx;
  659. height: 64rpx;
  660. text-align: center;
  661. font-size: $font-size-32;
  662. }
  663. .input {
  664. font-size: $font-size-26;
  665. }
  666. }
  667. }
  668. .all-type-list-content {
  669. // height: 240rpx;
  670. padding: 24rpx;
  671. background: #fff;
  672. margin-bottom: 2rpx;
  673. display: flex;
  674. flex-direction: row;
  675. box-sizing: content-box;
  676. .list-img {
  677. width: 312rpx;
  678. height: 207rpx !important;
  679. margin-right: 26rpx;
  680. border-radius: 10rpx;
  681. border: 2rpx solid #f3f3f3;
  682. }
  683. }
  684. .zuhe-list-content {
  685. width: 655rpx;
  686. // height: 214rpx;
  687. background: #fff;
  688. border: 2rpx solid #def4ff;
  689. display: flex;
  690. flex-direction: row;
  691. box-sizing: content-box;
  692. margin-top: 10rpx;
  693. border-radius: 14rpx;
  694. margin: 10rpx auto;
  695. padding: 20rpx;
  696. &.stylecontent {
  697. border: 2rpx solid #fff0de;
  698. }
  699. }
  700. .list-details-info {
  701. width: 100%;
  702. flex-direction: column;
  703. font-size: 26rpx;
  704. position: relative;
  705. .list-details-title {
  706. line-height: 38rpx;
  707. text-overflow: ellipsis;
  708. overflow: hidden;
  709. display: -webkit-box;
  710. -webkit-line-clamp: 2;
  711. line-clamp: 2;
  712. -webkit-box-orient: vertical;
  713. }
  714. .list-details-tags {
  715. display: flex;
  716. justify-content: flex-start;
  717. margin: 10rpx 0;
  718. height: 34rpx;
  719. }
  720. .goods-price {
  721. display: flex;
  722. justify-content: space-between;
  723. align-items: center;
  724. .price {
  725. font-size: 26rpx;
  726. font-weight: bold;
  727. color: $uni-text-color-price;
  728. }
  729. .shop-btn {
  730. width: 160rpx;
  731. height: 56rpx;
  732. border: 1px solid #333333;
  733. border-radius: 28rpx;
  734. text-align: center;
  735. line-height: 56rpx;
  736. box-sizing: border-box;
  737. }
  738. }
  739. .list-details-specs {
  740. width: 100%;
  741. display: inline-block;
  742. margin: 5rpx 0;
  743. color: #999;
  744. font-size: 20rpx;
  745. line-height: 28rpx;
  746. }
  747. .list-details-miniQuantity {
  748. width: 100%;
  749. display: inline-block;
  750. margin-top: 7rpx;
  751. }
  752. }
  753. .list-details-price {
  754. width: 100%;
  755. .floor-item-act {
  756. height: 54rpx;
  757. text-align: center;
  758. box-sizing: border-box;
  759. float: left;
  760. .floor-tags {
  761. height: 28rpx;
  762. border-radius: 6rpx;
  763. background-color: #ffffff;
  764. line-height: 28rpx;
  765. color: $color-system;
  766. text-align: center;
  767. display: inline-block;
  768. padding:0 5rpx;
  769. font-size: $font-size-20;
  770. margin-left: 15rpx;
  771. border: 1px solid #e15616;
  772. }
  773. }
  774. .price-icon {
  775. width: 22rpx;
  776. height: 28rpx;
  777. vertical-align: middle;
  778. margin-right: 10rpx;
  779. }
  780. .price-icon + text {
  781. font-size: 25rpx;
  782. vertical-align: middle;
  783. }
  784. .list-login-now {
  785. width: 375rpx;
  786. color: #f8c499;
  787. .p-no {
  788. float: left;
  789. font-size: $font-size-24;
  790. color: $color-system;
  791. margin-right: 10rpx;
  792. }
  793. }
  794. .login-now {
  795. padding: 10rpx 10rpx 10rpx 0;
  796. }
  797. .list-none {
  798. margin-top: 15rpx;
  799. .price-small {
  800. font-size: $font-size-24;
  801. line-height: 40rpx;
  802. color: #ff2a2a;
  803. }
  804. }
  805. .list-price-loding {
  806. font-size: $font-size-24;
  807. line-height: 54rpx;
  808. color: #ff2a2a;
  809. }
  810. .list-shop {
  811. float: left;
  812. overflow: hidden;
  813. &.com {
  814. width: 100%;
  815. }
  816. .list-price {
  817. color: #ff2a2a;
  818. float: left;
  819. line-height: 54rpx;
  820. align-items: center;
  821. justify-content: center;
  822. .price-larger {
  823. font-size: $font-size-26;
  824. display: inline-block;
  825. &.none {
  826. text-decoration: line-through;
  827. color: #999999;
  828. }
  829. }
  830. .list-price-all {
  831. width: 100%;
  832. float: left;
  833. }
  834. .zuhe_price-larger {
  835. width: 100%;
  836. float: left;
  837. height: 54rpx;
  838. color: #666666;
  839. .price-larger {
  840. float: left;
  841. margin-right: 20rpx;
  842. }
  843. }
  844. .price-two {
  845. color: #666666;
  846. float: left;
  847. }
  848. .zuhe_list_zj {
  849. color: #ff2a2a;
  850. }
  851. .price-view {
  852. display: inline-block;
  853. width: 40rpx;
  854. border-radius: 10rpx;
  855. font-size: $font-size-22;
  856. text-align: center;
  857. color: #ffffff;
  858. height: 36rpx;
  859. line-height: 36rpx;
  860. margin-right: 8rpx;
  861. &.ladder {
  862. background: linear-gradient(135deg, rgba(255, 0, 0, 1) 0%, rgba(242, 143, 49, 1) 100%);
  863. }
  864. &.activity {
  865. background: linear-gradient(135deg, rgba(128, 0, 255, 1) 0%, rgba(242, 49, 153, 1) 100%);
  866. }
  867. }
  868. }
  869. .zuhe_list_price .price-view {
  870. margin-left: 20rpx;
  871. float: left;
  872. margin-top: 5rpx;
  873. }
  874. .zuhe_list_price {
  875. width: 100%;
  876. overflow: hidden;
  877. margin-top: 10rpx;
  878. }
  879. .count {
  880. float: right;
  881. border: 1px solid #eeeeee;
  882. border-radius: 10rpx;
  883. .number-box {
  884. display: flex;
  885. justify-content: center;
  886. align-items: center;
  887. .iconfont {
  888. font-size: $font-size-24;
  889. padding: 0 16rpx;
  890. color: $text-color;
  891. text-align: center;
  892. line-height: 48rpx;
  893. font-weight: bold;
  894. }
  895. .btn-input {
  896. width: 100rpx;
  897. height: 48rpx;
  898. line-height: 48rpx;
  899. background: #f8f8f8;
  900. border-radius: 4rpx;
  901. text-align: center;
  902. font-size: $font-size-24;
  903. border-right: 1px solid #eeeeee;
  904. border-left: 1px solid #eeeeee;
  905. }
  906. }
  907. }
  908. .list-price-none {
  909. width: 100%;
  910. .price-none {
  911. text-decoration: line-through;
  912. color: #999999;
  913. display: inline-block;
  914. }
  915. .icon-wenhao {
  916. font-size: $font-size-32;
  917. color: #0091ff;
  918. margin-left: 6rpx;
  919. }
  920. }
  921. }
  922. .add-cart-btn {
  923. flex: 4;
  924. width: 140rpx;
  925. height: 54rpx;
  926. line-height: 54rpx;
  927. border-radius: 27rpx;
  928. color: #fff;
  929. font-size: 24rpx;
  930. margin-right: 0;
  931. background: #ffffff;
  932. border: 1px solid #c9c9c9;
  933. color: $text-color;
  934. }
  935. .zuhe_btn {
  936. float: right;
  937. }
  938. }
  939. .zuhe_list_price {
  940. display: block !important;
  941. }
  942. .zuhe_list_text {
  943. margin-top: 0;
  944. }
  945. </style>