immediatelyList.vue 22 KB

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