my-shop.vue 41 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375
  1. <template>
  2. <view class="container shop clearfix" :style="{ paddingTop: isScrollTop ? (CustomBar+40+'px') : CustomBar +'px' }">
  3. <custom
  4. :systeminfo="systeminfo"
  5. :navbar-data="nvabarData"
  6. :headerBtnPosi="headerBtnPosi"
  7. :headerColor="headerColor"
  8. :page="backPage"
  9. />
  10. <!-- 主页内容 -->
  11. <tui-skeleton
  12. v-if="skeletonShow"
  13. backgroundColor="#fafafa"
  14. borderRadius="10rpx"
  15. :isLoading="true"
  16. :loadingType="5"
  17. />
  18. <template v-else>
  19. <view class="shop-search-main">
  20. <view class="shop-search">
  21. <text class="iconfont icon-sousuo"></text>
  22. <input
  23. class="input"
  24. maxlength="20"
  25. type="text"
  26. value=""
  27. @focus="onFocus"
  28. @input="onShowClose"
  29. v-model.trim="listQuery.keyword"
  30. confirm-type="search"
  31. @confirm="SubMitSearch"
  32. placeholder="搜索本店铺商品"
  33. />
  34. <text class="iconfont icon-shanchu1" v-if="isShowClose" @click.stop="delInputText"></text>
  35. </view>
  36. </view>
  37. <view class="container-shop tui-skeleton">
  38. <!-- 轮播 -->
  39. <view class="product-supplier" @click="goSupplier">
  40. <view class="logo"
  41. ><img
  42. :src="shopLogo ? shopLogo : 'https://static.caimei365.com/app/img/icon/icon-shoplogo.png'"
  43. alt=""
  44. /></view>
  45. <view class="main">
  46. <view class="name">{{ shopName }}</view>
  47. <view class="massgs">
  48. <view class="label">满意度:</view>
  49. <view class="p-stars">
  50. <uni-stars
  51. :stars="6"
  52. :iconClass="iconClass"
  53. :iconColor="iconColor"
  54. :fontSize="36"
  55. :widthInfo="176"
  56. ></uni-stars>
  57. </view>
  58. </view>
  59. </view>
  60. <view class="right"><text class="iconfont icon-xiayibu"></text></view>
  61. </view>
  62. <banner :list="bannerImageList" />
  63. </view>
  64. <view class="swiper-banner-nav"
  65. v-if="shopCategory.length > 0"
  66. :class="isScrollTop ? 'flexd' : ''"
  67. :style="{ top: isScrollTop ? (CustomBar + 'px') : '0px'}"
  68. >
  69. <scroll-view class="scroll-view_H" scroll-x="true">
  70. <view class="tui-goods__item"
  71. :class="choiceIndex === '' ? 'active' : ''"
  72. @click="handleChangeAll">
  73. 全部
  74. </view>
  75. <view class="tui-goods__item"
  76. v-for="(category, index) in shopCategory"
  77. :key="index"
  78. :class="choiceIndex === index ? 'active' : ''"
  79. @click="handleCategory(category, index)">
  80. {{ category.category }}
  81. </view>
  82. </scroll-view>
  83. </view>
  84. <template v-if="!isShopAll">
  85. <view class="container-section tui-skeleton">
  86. <view class="section-product clearfix">
  87. <view
  88. class="floor-item"
  89. v-for="(prop, index) in categoryProducts"
  90. :key="index"
  91. @click.stop="navToDetailPage(prop.productId)"
  92. >
  93. <image class="item-img tui-skeleton-fillet" :src="prop.image" mode="aspectFill"></image>
  94. <view class="floor-item-type" v-if="prop.productType == 2">医疗器械</view>
  95. <view class="floor-item-content">
  96. <view class="title tui-skeleton-rect">
  97. <text class="mclap-tag" v-if="prop.beautyActFlag == 1">美博会</text>
  98. <text class="mclap" :class="prop.beautyActFlag == 1 ? 'indent' : ''">{{
  99. prop.name
  100. }}</text>
  101. </view>
  102. <view class="floor-item-act">
  103. <template v-if="userIdentity === 3">
  104. <view class="coupon-tags" v-if="prop.couponsLogo">优惠券</view>
  105. <template v-if="prop.actStatus === 1">
  106. <view class="floor-tags" v-if="PromotionsFormat(prop.promotions)">
  107. {{ prop.promotions.name }}
  108. <text v-if="hasLogin && prop.priceFlag != 1 && prop.shopId == shopId"
  109. >:¥{{ prop.price | NumFormat }}</text
  110. >
  111. </view>
  112. <view class="floor-tags" v-else>{{ prop.promotions.name }}</view>
  113. </template>
  114. <template v-if="prop.svipProductFlag == 1">
  115. <template v-if="prop.priceFlag != 1">
  116. <view class="svip-tags">
  117. <view class="tags">SVIP</view>
  118. <view class="price" v-if="prop.shopId == shopId">{{
  119. prop.svipPriceTag
  120. }}</view>
  121. </view>
  122. </template>
  123. <template v-else>
  124. <view class="svip-tags"> <view class="tags none">SVIP</view> </view>
  125. </template>
  126. </template>
  127. </template>
  128. <template v-else>
  129. <view class="coupon-tags" v-if="prop.couponsLogo">优惠券</view>
  130. <template v-if="prop.actStatus === 1">
  131. <view class="floor-tags" v-if="PromotionsFormat(prop.promotions)">
  132. {{ prop.promotions.name }}
  133. <text v-if="hasLogin && prop.priceFlag != 1"
  134. >:¥{{ prop.price | NumFormat }}</text
  135. >
  136. </view>
  137. <view class="floor-tags" v-else>{{ prop.promotions.name }}</view>
  138. </template>
  139. <template v-if="prop.svipProductFlag == 1">
  140. <view class="svip-tags">
  141. <view class="tags" :class="{ none: !isShowVipFlag(prop) }">SVIP</view>
  142. <view class="price" v-if="isShowVipFlag(prop)">{{
  143. prop.svipPriceTag
  144. }}</view>
  145. </view>
  146. </template>
  147. </template>
  148. </view>
  149. <view class="" v-if="hasLogin">
  150. <template v-if="userIdentity == 3">
  151. <template v-if="prop.shopId == shopId">
  152. <view class="title-none" v-if="prop.priceFlag === 1">
  153. <text class="p big">¥未公开价格</text>
  154. </view>
  155. <view
  156. class="price tui-skeleton-rect"
  157. v-else
  158. :class="
  159. PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1
  160. ? 'none'
  161. : ''
  162. "
  163. >
  164. <text class="p sm">¥</text>
  165. <text class="p big">{{
  166. (PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1
  167. ? prop.originalPrice
  168. : prop.price) | NumFormat
  169. }}</text>
  170. </view>
  171. </template>
  172. <template v-else>
  173. <view class="no-price">
  174. <view class="p-stars">
  175. <text class="p-no">¥</text>
  176. <uni-grader :grade="Number(prop.priceGrade)" :margin="14"></uni-grader>
  177. </view>
  178. </view>
  179. </template>
  180. </template>
  181. <template v-else-if="userIdentity === 4 && vipFlag != 1">
  182. <view class="title-none" v-if="prop.priceFlag === 1">
  183. <text class="p big">¥未公开价格</text>
  184. </view>
  185. <view class="title-none" v-else-if="prop.priceFlag === 2">
  186. <text class="p big">¥价格仅会员可见</text>
  187. </view>
  188. <view class="title-none" v-else-if="prop.priceFlag === 3">
  189. <text class="p big">¥仅医美机构可见</text>
  190. </view>
  191. <view
  192. class="price tui-skeleton-rect"
  193. v-if="prop.priceFlag === 0"
  194. :class="
  195. PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1 ? 'none' : ''
  196. "
  197. >
  198. <text class="p sm">¥</text>
  199. <text class="p big">{{
  200. (PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1
  201. ? prop.originalPrice
  202. : prop.price) | NumFormat
  203. }}</text>
  204. </view>
  205. </template>
  206. <template v-else-if="userIdentity === 2 || (userIdentity == 4 && vipFlag == 1)">
  207. <view class="title-none" v-if="prop.priceFlag === 1">
  208. <text class="p big">¥未公开价格</text>
  209. </view>
  210. <view class="title-none" v-else-if="prop.priceFlag === 3 && firstClubType != 1">
  211. <text class="p big">¥仅医美机构可见</text>
  212. </view>
  213. <view
  214. class="price tui-skeleton-rect"
  215. v-else
  216. :class="
  217. PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1 ? 'none' : ''
  218. "
  219. >
  220. <text class="p sm">¥</text>
  221. <text class="p big">{{
  222. (PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1
  223. ? prop.originalPrice
  224. : prop.price) | NumFormat
  225. }}</text>
  226. </view>
  227. </template>
  228. <template v-else>
  229. <view class="title-none" v-if="prop.priceFlag === 1">
  230. <text class="p big">¥未公开价格</text>
  231. </view>
  232. <view
  233. class="price tui-skeleton-rect"
  234. v-else
  235. :class="
  236. PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1 ? 'none' : ''
  237. "
  238. >
  239. <text class="p sm">¥</text>
  240. <text class="p big">{{
  241. (PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1
  242. ? prop.originalPrice
  243. : prop.price) | NumFormat
  244. }}</text>
  245. </view>
  246. </template>
  247. </view>
  248. <view v-else class="no-price">
  249. <view class="p-stars">
  250. <text class="p-no">¥</text>
  251. <uni-grader :grade="Number(prop.priceGrade)"></uni-grader>
  252. <template v-if="prop.actStatus == 1">
  253. <view class="floor-tags" v-if="PromotionsFormat(prop.promotions)">
  254. {{ prop.promotions.name
  255. }}<text v-if="hasLogin && prop.priceFlag != 1"
  256. >:¥{{ prop.price | NumFormat }}</text
  257. >
  258. </view>
  259. <view class="floor-tags" v-else>{{ prop.promotions.name }}</view>
  260. </template>
  261. </view>
  262. </view>
  263. </view>
  264. </view>
  265. </view>
  266. </view>
  267. </template>
  268. <template v-else>
  269. <view class="container-section tui-skeleton" v-if="recommendList.length > 0">
  270. <view class="tab-title">主推商品</view>
  271. <view class="section-product clearfix">
  272. <view class="floor-item-none" v-if="isHomeProduct">
  273. <image class="none-image" :src="iconNoneData" mode=""></image>
  274. <view class="none-text">暂无商品~</view>
  275. </view>
  276. <view
  277. v-else
  278. class="floor-item"
  279. v-for="(prop, index) in recommendList"
  280. :key="index"
  281. @click.stop="navToDetailPage(prop.productId)"
  282. >
  283. <image class="item-img tui-skeleton-fillet" :src="prop.image" mode="aspectFill"></image>
  284. <view class="floor-item-type" v-if="prop.productType == 2">医疗器械</view>
  285. <view class="floor-item-content">
  286. <view class="title tui-skeleton-rect">
  287. <text class="mclap-tag" v-if="prop.beautyActFlag == 1">美博会</text>
  288. <text class="mclap" :class="prop.beautyActFlag == 1 ? 'indent' : ''">{{
  289. prop.name
  290. }}</text>
  291. </view>
  292. <view class="floor-item-act">
  293. <template v-if="userIdentity === 3">
  294. <view class="coupon-tags" v-if="prop.couponsLogo">优惠券</view>
  295. <template v-if="prop.actStatus === 1">
  296. <view class="floor-tags" v-if="PromotionsFormat(prop.promotions)">
  297. {{ prop.promotions.name }}
  298. <text v-if="hasLogin && prop.priceFlag != 1 && prop.shopId == shopId"
  299. >:¥{{ prop.price | NumFormat }}</text
  300. >
  301. </view>
  302. <view class="floor-tags" v-else>{{ prop.promotions.name }}</view>
  303. </template>
  304. <template v-if="prop.svipProductFlag == 1">
  305. <template v-if="prop.priceFlag != 1">
  306. <view class="svip-tags">
  307. <view class="tags">SVIP</view>
  308. <view class="price" v-if="prop.shopId == shopId">{{
  309. prop.svipPriceTag
  310. }}</view>
  311. </view>
  312. </template>
  313. <template v-else>
  314. <view class="svip-tags"> <view class="tags none">SVIP</view> </view>
  315. </template>
  316. </template>
  317. </template>
  318. <template v-else>
  319. <view class="coupon-tags" v-if="prop.couponsLogo">优惠券</view>
  320. <template v-if="prop.actStatus === 1">
  321. <view class="floor-tags" v-if="PromotionsFormat(prop.promotions)">
  322. {{ prop.promotions.name }}
  323. <text v-if="hasLogin && prop.priceFlag != 1"
  324. >:¥{{ prop.price | NumFormat }}</text
  325. >
  326. </view>
  327. <view class="floor-tags" v-else>{{ prop.promotions.name }}</view>
  328. </template>
  329. <template v-if="prop.svipProductFlag == 1">
  330. <view class="svip-tags">
  331. <view class="tags" :class="{ none: !isShowVipFlag(prop) }">SVIP</view>
  332. <view class="price" v-if="isShowVipFlag(prop)">{{
  333. prop.svipPriceTag
  334. }}</view>
  335. </view>
  336. </template>
  337. </template>
  338. </view>
  339. <view class="" v-if="hasLogin">
  340. <template v-if="userIdentity == 3">
  341. <template v-if="prop.shopId == shopId">
  342. <view class="title-none" v-if="prop.priceFlag === 1">
  343. <text class="p big">¥未公开价格</text>
  344. </view>
  345. <view
  346. class="price tui-skeleton-rect"
  347. v-else
  348. :class="
  349. PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1
  350. ? 'none'
  351. : ''
  352. "
  353. >
  354. <text class="p sm">¥</text>
  355. <text class="p big">{{
  356. (PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1
  357. ? prop.originalPrice
  358. : prop.price) | NumFormat
  359. }}</text>
  360. </view>
  361. </template>
  362. <template v-else>
  363. <view class="no-price">
  364. <view class="p-stars">
  365. <text class="p-no">¥</text>
  366. <uni-grader :grade="Number(prop.priceGrade)" :margin="14"></uni-grader>
  367. </view>
  368. </view>
  369. </template>
  370. </template>
  371. <template v-else-if="userIdentity === 4 && vipFlag != 1">
  372. <view class="title-none" v-if="prop.priceFlag === 1">
  373. <text class="p big">¥未公开价格</text>
  374. </view>
  375. <view class="title-none" v-else-if="prop.priceFlag === 2">
  376. <text class="p big">¥价格仅会员可见</text>
  377. </view>
  378. <view class="title-none" v-else-if="prop.priceFlag === 3">
  379. <text class="p big">¥仅医美机构可见</text>
  380. </view>
  381. <view
  382. class="price tui-skeleton-rect"
  383. v-if="prop.priceFlag === 0"
  384. :class="
  385. PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1 ? 'none' : ''
  386. "
  387. >
  388. <text class="p sm">¥</text>
  389. <text class="p big">{{
  390. (PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1
  391. ? prop.originalPrice
  392. : prop.price) | NumFormat
  393. }}</text>
  394. </view>
  395. </template>
  396. <template v-else-if="userIdentity === 2 || (userIdentity == 4 && vipFlag == 1)">
  397. <view class="title-none" v-if="prop.priceFlag === 1">
  398. <text class="p big">¥未公开价格</text>
  399. </view>
  400. <view class="title-none" v-else-if="prop.priceFlag === 3 && firstClubType != 1">
  401. <text class="p big">¥仅医美机构可见</text>
  402. </view>
  403. <view
  404. class="price tui-skeleton-rect"
  405. v-else
  406. :class="
  407. PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1 ? 'none' : ''
  408. "
  409. >
  410. <text class="p sm">¥</text>
  411. <text class="p big">{{
  412. (PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1
  413. ? prop.originalPrice
  414. : prop.price) | NumFormat
  415. }}</text>
  416. </view>
  417. </template>
  418. <template v-else>
  419. <view class="title-none" v-if="prop.priceFlag === 1">
  420. <text class="p big">¥未公开价格</text>
  421. </view>
  422. <view
  423. class="price tui-skeleton-rect"
  424. v-else
  425. :class="
  426. PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1 ? 'none' : ''
  427. "
  428. >
  429. <text class="p sm">¥</text>
  430. <text class="p big">{{
  431. (PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1
  432. ? prop.originalPrice
  433. : prop.price) | NumFormat
  434. }}</text>
  435. </view>
  436. </template>
  437. </view>
  438. <view v-else class="no-price">
  439. <view class="p-stars">
  440. <text class="p-no">¥</text>
  441. <uni-grader :grade="Number(prop.priceGrade)"></uni-grader>
  442. <template v-if="prop.actStatus == 1">
  443. <view class="floor-tags" v-if="PromotionsFormat(prop.promotions)">
  444. {{ prop.promotions.name
  445. }}<text v-if="hasLogin && prop.priceFlag != 1"
  446. >:¥{{ prop.price | NumFormat }}</text
  447. >
  448. </view>
  449. <view class="floor-tags" v-else>{{ prop.promotions.name }}</view>
  450. </template>
  451. </view>
  452. </view>
  453. </view>
  454. </view>
  455. </view>
  456. </view>
  457. <view class="container-section tui-skeleton">
  458. <view class="tab-title" v-if="!isEmpty">全部商品</view>
  459. <view class="section-product clearfix">
  460. <view class="floor-item-none" v-if="isEmpty">
  461. <image class="none-image" :src="iconNoneData1" mode=""></image>
  462. <view class="none-text">暂未发布任何商品~</view>
  463. </view>
  464. <view
  465. v-else
  466. class="floor-item"
  467. v-for="(prop, index) in productList"
  468. :key="index"
  469. @click.stop="navToDetailPage(prop.productId)"
  470. >
  471. <image class="item-img tui-skeleton-fillet" :src="prop.image" mode="aspectFill"></image>
  472. <view class="floor-item-type" v-if="prop.productType == 2">医疗器械</view>
  473. <view class="floor-item-content">
  474. <view class="title tui-skeleton-rect">
  475. <text class="mclap-tag" v-if="prop.beautyActFlag == 1">美博会</text>
  476. <text class="mclap" :class="prop.beautyActFlag == 1 ? 'indent' : ''">{{
  477. isInterceptHtmlFn(prop.name)
  478. }}</text>
  479. </view>
  480. <view class="floor-item-act">
  481. <template v-if="userIdentity === 3">
  482. <view class="coupon-tags" v-if="prop.couponsLogo">优惠券</view>
  483. <template v-if="prop.actStatus === 1">
  484. <view class="floor-tags" v-if="PromotionsFormat(prop.promotions)">
  485. {{ prop.promotions.name }}
  486. <text v-if="hasLogin && prop.priceFlag != 1 && prop.shopId == shopId"
  487. >:¥{{ prop.price | NumFormat }}</text
  488. >
  489. </view>
  490. <view class="floor-tags" v-else>{{ prop.promotions.name }}</view>
  491. </template>
  492. <template v-if="prop.svipProductFlag == 1">
  493. <template v-if="prop.priceFlag != 1">
  494. <view class="svip-tags">
  495. <view class="tags">SVIP</view>
  496. <view class="price" v-if="prop.shopId == shopId">{{
  497. prop.svipPriceTag
  498. }}</view>
  499. </view>
  500. </template>
  501. <template v-else>
  502. <view class="svip-tags"> <view class="tags none">SVIP</view> </view>
  503. </template>
  504. </template>
  505. </template>
  506. <template v-else>
  507. <view class="coupon-tags" v-if="prop.couponsLogo">优惠券</view>
  508. <template v-if="prop.actStatus === 1">
  509. <view class="floor-tags" v-if="PromotionsFormat(prop.promotions)">
  510. {{ prop.promotions.name }}
  511. <text v-if="hasLogin && prop.priceFlag != 1"
  512. >:¥{{ prop.price | NumFormat }}</text
  513. >
  514. </view>
  515. <view class="floor-tags" v-else>{{ prop.promotions.name }}</view>
  516. </template>
  517. <template v-if="prop.svipProductFlag == 1">
  518. <view class="svip-tags">
  519. <view class="tags" :class="{ none: !isShowVipFlag(prop) }">SVIP</view>
  520. <view class="price" v-if="isShowVipFlag(prop)">{{
  521. prop.svipPriceTag
  522. }}</view>
  523. </view>
  524. </template>
  525. </template>
  526. </view>
  527. <view class="" v-if="hasLogin">
  528. <template v-if="userIdentity == 3">
  529. <template v-if="prop.shopId == shopId">
  530. <view class="title-none" v-if="prop.priceFlag === 1">
  531. <text class="p big">¥未公开价格</text>
  532. </view>
  533. <view
  534. class="price tui-skeleton-rect"
  535. v-else
  536. :class="
  537. PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1
  538. ? 'none'
  539. : ''
  540. "
  541. >
  542. <text class="p sm">¥</text>
  543. <text class="p big">{{
  544. (PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1
  545. ? prop.originalPrice
  546. : prop.price) | NumFormat
  547. }}</text>
  548. </view>
  549. </template>
  550. <template v-else>
  551. <view class="no-price">
  552. <view class="p-stars">
  553. <text class="p-no">¥</text>
  554. <uni-grader :grade="Number(prop.priceGrade)" :margin="14"></uni-grader>
  555. </view>
  556. </view>
  557. </template>
  558. </template>
  559. <template v-else-if="userIdentity === 4 && vipFlag != 1">
  560. <view class="title-none" v-if="prop.priceFlag === 1">
  561. <text class="p big">¥未公开价格</text>
  562. </view>
  563. <view class="title-none" v-else-if="prop.priceFlag === 2">
  564. <text class="p big">¥价格仅会员可见</text>
  565. </view>
  566. <view class="title-none" v-else-if="prop.priceFlag === 3">
  567. <text class="p big">¥仅医美机构可见</text>
  568. </view>
  569. <view
  570. class="price tui-skeleton-rect"
  571. v-if="prop.priceFlag === 0"
  572. :class="
  573. PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1 ? 'none' : ''
  574. "
  575. >
  576. <text class="p sm">¥</text>
  577. <text class="p big">{{
  578. (PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1
  579. ? prop.originalPrice
  580. : prop.price) | NumFormat
  581. }}</text>
  582. </view>
  583. </template>
  584. <template v-else-if="userIdentity === 2 || (userIdentity == 4 && vipFlag == 1)">
  585. <view class="title-none" v-if="prop.priceFlag === 1">
  586. <text class="p big">¥未公开价格</text>
  587. </view>
  588. <view class="title-none" v-else-if="prop.priceFlag === 3 && firstClubType != 1">
  589. <text class="p big">¥仅医美机构可见</text>
  590. </view>
  591. <view
  592. class="price tui-skeleton-rect"
  593. v-else
  594. :class="
  595. PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1 ? 'none' : ''
  596. "
  597. >
  598. <text class="p sm">¥</text>
  599. <text class="p big">{{
  600. (PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1
  601. ? prop.originalPrice
  602. : prop.price) | NumFormat
  603. }}</text>
  604. </view>
  605. </template>
  606. <template v-else>
  607. <view class="title-none" v-if="prop.priceFlag === 1">
  608. <text class="p big">¥未公开价格</text>
  609. </view>
  610. <view
  611. class="price tui-skeleton-rect"
  612. v-else
  613. :class="
  614. PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1 ? 'none' : ''
  615. "
  616. >
  617. <text class="p sm">¥</text>
  618. <text class="p big">{{
  619. (PromotionsFormat(prop.promotions) || prop.svipProductFlag == 1
  620. ? prop.originalPrice
  621. : prop.price) | NumFormat
  622. }}</text>
  623. </view>
  624. </template>
  625. </view>
  626. <view v-else class="no-price">
  627. <view class="p-stars">
  628. <text class="p-no">¥</text>
  629. <uni-grader :grade="Number(prop.priceGrade)"></uni-grader>
  630. </view>
  631. </view>
  632. </view>
  633. </view>
  634. </view>
  635. </view>
  636. </template>
  637. </template>
  638. <!-- 供应商收集用户信息弹窗 -->
  639. <cmRossPopup v-if="showRossHtml" :popupShow="showRossHtml" :advertisInfo="advertisement" />
  640. <!-- 侧边 -->
  641. <scroll-top :isScrollTop="isScrollTop" :bottom="200" />
  642. </view>
  643. </template>
  644. <script>
  645. import { mapState, mapMutations } from 'vuex'
  646. import custom from './components/custom.vue' //自定义导航
  647. import banner from '../components/banner.vue'
  648. import uniGrader from '@/components/uni-grade/uni-grade.vue'
  649. import cmRossPopup from '@/components/cm-module/cm-ross/cm-ross-popup'
  650. import authorize from '@/common/config/authorize.js'
  651. import wxLogin from '@/common/config/wxLogin.js'
  652. import cmSrsMixins from '@/utils/cmSrsMixins.js'
  653. export default {
  654. components: {
  655. custom,
  656. banner,
  657. uniGrader,
  658. cmRossPopup
  659. },
  660. mixins: [cmSrsMixins],
  661. data() {
  662. return {
  663. CustomBar: this.CustomBar,
  664. headerBtnPosi: this.setHeaderBtnPosi(), // 获取设备顶部胶囊高度
  665. systeminfo: this.setSysteminfo(), // 获取设备信息
  666. headerColor: false,
  667. backPage: 1,
  668. userId: 0,
  669. supplierId: 0,
  670. shopId: 0,
  671. iconClass: 'icon-aixin',
  672. iconColor: '#ff9100',
  673. iconNoneData: 'https://static.caimei365.com/app/img/icon/icon-prnone.png',
  674. iconNoneData1: 'https://static.caimei365.com/app/img/icon/icon-pbnone.png',
  675. isScrollTop: false,
  676. isScrollTop: false,
  677. shopName: '',
  678. shopLogo: '',
  679. normalNum: 0,
  680. isFocus: false,
  681. isEmpty: false,
  682. isShowClose: false, //是否显示清空输入框图标
  683. skeletonShow: true,
  684. bannerImageList: [],
  685. shopCategory: [],
  686. recommendList: [],
  687. categoryProducts: [],
  688. productList: [],
  689. userIdentity: 0,
  690. firstClubType: 0,
  691. listQuery: {
  692. keyword: '',
  693. pageSize: 10,
  694. pageNum: 1,
  695. id: 0,
  696. identity: 0
  697. },
  698. choiceIndex:'',
  699. isShopAll:true,
  700. isHomeProduct: false,
  701. total: 0
  702. }
  703. },
  704. computed: {
  705. ...mapState(['hasLogin', 'userInfo', 'isActivity', 'identity', 'clubType'])
  706. },
  707. onLoad(option) {
  708. if (option.type == 'share') {
  709. wxLogin.wxLoginAuthorize()
  710. }
  711. this.listQuery.id = this.supplierId = this.handleShopId = option.shopId
  712. this.initGetStotage()
  713. },
  714. filters: {
  715. NumFormat: function(text) {
  716. //处理金额
  717. return Number(text).toFixed(2)
  718. }
  719. },
  720. methods: {
  721. ...mapMutations(['login', 'logout']),
  722. setHeaderBtnPosi() {
  723. // 获得胶囊按钮位置信息
  724. let headerBtnPosi = uni.getMenuButtonBoundingClientRect()
  725. return headerBtnPosi
  726. },
  727. setSysteminfo() {
  728. let systeminfo
  729. uni.getSystemInfo({
  730. // 获取设备信息
  731. success: res => {
  732. systeminfo = res
  733. }
  734. })
  735. return systeminfo
  736. },
  737. async initGetStotage(option) {
  738. const userInfo = await this.$api.getStorage()
  739. this.shopId = userInfo.shopId ? userInfo.shopId : 0
  740. this.userId = userInfo.userId ? userInfo.userId : 0
  741. this.listQuery.identity = this.identity
  742. this.userIdentity = userInfo.userIdentity ? userInfo.userIdentity : 0
  743. this.vipFlag = userInfo.vipFlag ? userInfo.vipFlag : 0
  744. this.firstClubType = this.clubType
  745. //初始化请求数据
  746. this.GetSupplierHomeDeatils()
  747. this.GetSupplierHomeProduct()
  748. this.GetSupplierHomeProductList()
  749. this.checkedIsRossSet()
  750. this.skeletonShow = false
  751. },
  752. async GetSupplierHomeDeatils() {
  753. //商铺详情
  754. try {
  755. const res = await this.ShopService.GetSupplierHomeDeatils({ shopId: this.supplierId })
  756. const data = res.data
  757. this.normalNum = data.normalNum
  758. this.shopName = data.name
  759. this.shopLogo = data.logo
  760. this.bannerImageList = data.shopHomeImages
  761. this.shopCategory = data.shopCategory
  762. } catch (e) {
  763. //TODO handle the exception
  764. console.log('获取供应商信息异常~')
  765. }
  766. },
  767. async GetSupplierHomeProduct() {
  768. //主推商品
  769. try {
  770. const res = await this.ShopService.GetSupplierHomeProduct({
  771. shopId: this.supplierId,
  772. identity: this.identity
  773. })
  774. const data = res.data
  775. if (data.length > 0) {
  776. this.isHomeProduct = false
  777. this.QueryProductPrice(data)
  778. }
  779. } catch (e) {
  780. //TODO handle the exception
  781. console.log('获取主推商品异常~')
  782. }
  783. },
  784. handleChangeAll(){
  785. this.choiceIndex = ''
  786. this.isShopAll = true
  787. this.GetSupplierHomeProduct()
  788. this.GetSupplierHomeProductList()
  789. },
  790. handleCategory(category, index){
  791. this.isShopAll = false
  792. this.choiceIndex = index
  793. this.getCategoryProducts({ shopId:this.supplierId,categoryId:category.id })
  794. },
  795. async getCategoryProducts(params) {
  796. //主推商品
  797. try {
  798. const res = await this.ShopService.getCategoryProducts(params)
  799. const data = res.data
  800. if (data.length > 0) {
  801. this.queryCategoryProductsPrice(data)
  802. }
  803. } catch (e) {
  804. //TODO handle the exception
  805. console.log('获取主推商品异常~')
  806. }
  807. },
  808. async GetSupplierHomeProductList() {
  809. //全部商品
  810. try {
  811. const res = this.ShopService.GetSupplierHomeProductList(this.listQuery)
  812. if (res.data) {
  813. const data = JSON.parse(res.data)
  814. this.isEmpty = false
  815. this.total = data.total
  816. this.productList = data.items
  817. this.QueryProductPrice1(this.productList)
  818. } else {
  819. this.isEmpty = true
  820. }
  821. } catch (e) {
  822. //TODO handle the exception
  823. console.log('获取全部商品异常~')
  824. }
  825. },
  826. async GetMoreSupplierHomeProductList() {
  827. //加载分页
  828. try {
  829. this.listQuery.pageNum += 1
  830. const res = this.ShopService.GetSupplierHomeProductList(this.listQuery)
  831. const data = JSON.parse(res.data)
  832. this.total = data.total
  833. this.productList = this.productList.concat(data.items)
  834. this.QueryProductPrice1(this.productList)
  835. } catch (e) {
  836. //TODO handle the exception
  837. console.log('获取供应商全部商品异常~')
  838. }
  839. },
  840. async queryCategoryProductsPrice(data) {
  841. //处理供应商分类商品价格
  842. try {
  843. let productIdArr = []
  844. let productIds = ''
  845. data.map(item => {
  846. // 0公开价格 1不公开价格 2仅对资质机构公开
  847. productIdArr.push(item.productId)
  848. })
  849. productIds = productIdArr.join(',')
  850. const res = await this.ProductService.querySearchProductPrice({
  851. userId: this.userId,
  852. productIds: productIds,
  853. source: 2
  854. })
  855. this.categoryProducts = this.ReturnNewProducts(data, res.data)
  856. } catch (e) {
  857. //TODO handle the exception
  858. console.log('获取供应商分类商品价格异常~')
  859. }
  860. },
  861. async QueryProductPrice(data) {
  862. //处理主推商品商品或者活动价格
  863. try {
  864. let productIdArr = []
  865. let productIds = ''
  866. data.map(item => {
  867. // 0公开价格 1不公开价格 2仅对资质机构公开
  868. productIdArr.push(item.productId)
  869. })
  870. productIds = productIdArr.join(',')
  871. const res = await this.ProductService.querySearchProductPrice({
  872. userId: this.userId,
  873. productIds: productIds,
  874. source: 2
  875. })
  876. this.recommendList = this.ReturnNewProducts(data, res.data)
  877. console.log('recommendList', this.recommendList)
  878. } catch (e) {
  879. //TODO handle the exception
  880. console.log('获取供应商全部商品价格异常~')
  881. }
  882. },
  883. async QueryProductPrice1(data) {
  884. //处理主推商品商品或者活动价格
  885. try {
  886. let productIdArr = []
  887. let productIds = ''
  888. data.map(item => {
  889. // 0公开价格 1不公开价格 2仅对资质机构公开
  890. productIdArr.push(item.productId)
  891. })
  892. productIds = productIdArr.join(',')
  893. const res = await this.ProductService.querySearchProductPrice({
  894. userId: this.userId,
  895. productIds: productIds,
  896. source: 2
  897. })
  898. this.productList = this.ReturnNewProducts(data, res.data)
  899. } catch (e) {
  900. //TODO handle the exception
  901. console.log('获取供应商全部商品价格异常~')
  902. }
  903. },
  904. ReturnNewProducts(listA, listB) {
  905. let NewArray = []
  906. listA.map(item => {
  907. for (let i = 0; i < listB.length; i++) {
  908. if (item.productId == listB[i].productId) {
  909. NewArray.push(Object.assign(item, listB[i]))
  910. }
  911. }
  912. })
  913. return NewArray
  914. },
  915. SubMitSearch() {
  916. //搜索
  917. this.listQuery.pageNum = 1
  918. this.handleChangeAll()
  919. },
  920. PromotionsFormat(promo) {
  921. //促销活动类型数据处理
  922. if (promo != null) {
  923. if (promo.type == 1 && promo.mode == 1) {
  924. return true
  925. } else {
  926. return false
  927. }
  928. }
  929. return false
  930. },
  931. onShowClose() {
  932. //输入框输入时触发
  933. this.inputEmpty(this.listQuery.keyword)
  934. },
  935. onFocus() {
  936. //输入框获取焦点时触发
  937. this.inputEmpty(this.listQuery.keyword)
  938. },
  939. delInputText() {
  940. //清除输入框内容
  941. this.listQuery.keyword = ''
  942. this.isShowClose = false
  943. this.isShowWrapper = false
  944. this.inputEmpty(this.listQuery.keyword)
  945. this.initGetSerachRecord()
  946. },
  947. inputEmpty(val) {
  948. if (val != '') {
  949. this.isShowClose = true
  950. this.isFocus = true
  951. } else {
  952. this.isShowClose = false
  953. this.isFocus = true
  954. }
  955. },
  956. isInterceptHtmlFn(text) {
  957. let name = this.$reg.interceptHtmlFn(text)
  958. return name
  959. },
  960. goSupplier() {
  961. //跳供应商资料页
  962. this.$api.navigateTo('/pages/supplier/user/supplier?shopId=' + this.supplierId)
  963. },
  964. navToDetailPage(id) {
  965. //跳转商品详情页
  966. this.$api.navigateTo(`/pages/goods/product?id=${id}`)
  967. },
  968. isShowVipFlag(pros) {
  969. /**
  970. *显示SVIP和超级会员价格:
  971. * 个人机构(不是超级会员,但价格所有机构可见),
  972. * 资质机构(不是超级会员,但价格所有机构可见或仅会员可见),
  973. * 超级会员(价格所有机构可见或仅会员可见),超级会员(是医美机构,价格仅医美可见)
  974. *商品价格是否可见:priceFlag 0:所有机构可见 1:未公开价格 2:仅会员可见 3:仅医美机构可见
  975. * 普通机构
  976. * 超级会员 && priceFlag === 0
  977. * 资质机构
  978. * priceFlag !== 1 ||
  979. * 超级会员
  980. * 商品priceFlag === 3 && 是否是医美机构
  981. */
  982. // 未登录 || 非会员
  983. if (!this.hasLogin || !this.vipFlag === 1) return false
  984. // 商品所有机构可见
  985. if (pros.priceFlag === 0) return true
  986. // 商品价格仅资质机构可见
  987. if ((pros.priceFlag === 2 && this.userIdentity === 2) || this.userIdentity === 1) return true
  988. // 商品价格仅医美机构可见
  989. if ((pros.priceFlag === 3 && this.userIdentity === 2 && this.firstClubType == 1) || this.userIdentity === 1)
  990. return true
  991. // 其它
  992. return false
  993. }
  994. },
  995. onPageScroll(e) {
  996. //实时获取到滚动的值
  997. if (e.scrollTop > 400) {
  998. this.isScrollTop = true
  999. } else {
  1000. this.isScrollTop = false
  1001. }
  1002. },
  1003. onReachBottom() {
  1004. //上滑加载分页
  1005. if (this.total > this.productList.length) {
  1006. this.loadding = true
  1007. this.pullUpOn = true
  1008. this.GetMoreSupplierHomeProductList()
  1009. }
  1010. },
  1011. onShareAppMessage(res) {
  1012. //分享转发
  1013. if (res.from === 'button') {
  1014. // 来自页面内转发按钮
  1015. }
  1016. return {
  1017. title: '进入店铺,发现惊喜',
  1018. path: `pages/supplier/user/my-shop?type=share&shopId=${this.listQuery.id}`
  1019. }
  1020. },
  1021. onShow() {}
  1022. }
  1023. </script>
  1024. <style lang="scss">
  1025. page {
  1026. background-color: #f7f7f7;
  1027. }
  1028. .shop {
  1029. width: 100%;
  1030. height: auto;
  1031. }
  1032. .swiper-banner-nav {
  1033. width: 100%;
  1034. height: 80rpx;
  1035. box-sizing: border-box;
  1036. padding: 15rpx 24rpx;
  1037. overflow: hidden;
  1038. display: flex;
  1039. align-items: center;
  1040. position: relative;
  1041. background: #ffffff;
  1042. &.flexd{
  1043. position: fixed;
  1044. top: 0;
  1045. left: 0;
  1046. z-index: 999;
  1047. }
  1048. .scroll-view_H {
  1049. white-space: nowrap;
  1050. width: 100%;
  1051. .tui-goods__item {
  1052. display: inline-block;
  1053. margin: 0 20rpx;
  1054. height: 50rpx;
  1055. line-height: 50rpx;
  1056. font-size: $font-size-26;
  1057. color: #333333;
  1058. text-align: center;
  1059. &.active {
  1060. color: #ff5b00;
  1061. font-weight: bold;
  1062. position: relative;
  1063. &::before {
  1064. content: '';
  1065. width: 20rpx;
  1066. height: 4rpx;
  1067. border-radius: 2rpx;
  1068. background: #ff5b00;
  1069. position: absolute;
  1070. bottom: 0;
  1071. left: 50%;
  1072. margin-left: -10rpx;
  1073. }
  1074. }
  1075. }
  1076. }
  1077. }
  1078. .shop-search-main {
  1079. width: 100%;
  1080. height: 86rpx;
  1081. background-color: #ffffff;
  1082. box-sizing: border-box;
  1083. padding: 10rpx 24rpx;
  1084. .shop-search {
  1085. width: 100%;
  1086. height: 66rpx;
  1087. border-radius: 33rpx;
  1088. background-color: #f7f7f7;
  1089. box-sizing: border-box;
  1090. position: relative;
  1091. .icon-sousuo {
  1092. width: 80rpx;
  1093. height: 66rpx;
  1094. display: block;
  1095. float: left;
  1096. color: #707070;
  1097. line-height: 66rpx;
  1098. text-align: center;
  1099. font-size: 36rpx;
  1100. }
  1101. .icon-shanchu1 {
  1102. width: 80rpx;
  1103. height: 66rpx;
  1104. display: block;
  1105. color: #8a8a8a;
  1106. line-height: 66rpx;
  1107. text-align: center;
  1108. font-size: 36rpx;
  1109. position: absolute;
  1110. right: 0;
  1111. top: 0;
  1112. z-index: 100;
  1113. }
  1114. .input {
  1115. width: 580rpx;
  1116. height: 66rpx;
  1117. box-sizing: border-box;
  1118. color: #666666;
  1119. overflow: hidden;
  1120. font-size: $font-size-24;
  1121. }
  1122. }
  1123. }
  1124. .container-shop {
  1125. width: 100%;
  1126. height: auto;
  1127. padding: 24rpx;
  1128. box-sizing: border-box;
  1129. background-color: #ffffff;
  1130. margin-top: 10rpx;
  1131. }
  1132. .product-supplier {
  1133. width: 100%;
  1134. height: 140rpx;
  1135. padding: 30rpx 0 10rpx 0;
  1136. box-sizing: border-box;
  1137. background-color: #ffffff;
  1138. position: relative;
  1139. box-sizing: border-box;
  1140. .logo {
  1141. width: 128rpx;
  1142. height: 92rpx;
  1143. float: left;
  1144. border: 1px solid #efefef;
  1145. border-radius: 6rpx;
  1146. image {
  1147. width: 100%;
  1148. height: 100%;
  1149. display: block;
  1150. border-radius: 6rpx;
  1151. }
  1152. }
  1153. .main {
  1154. width: 470rpx;
  1155. height: 92rpx;
  1156. float: left;
  1157. margin-left: 20rpx;
  1158. .name {
  1159. width: 100%;
  1160. line-height: 46rpx;
  1161. float: left;
  1162. font-size: $font-size-28;
  1163. color: $text-color;
  1164. float: right;
  1165. overflow: hidden;
  1166. text-overflow: ellipsis;
  1167. white-space: nowrap;
  1168. text-align: left;
  1169. }
  1170. .massgs {
  1171. width: 100%;
  1172. line-height: 46rpx;
  1173. float: left;
  1174. font-size: $font-size-24;
  1175. color: #999999;
  1176. .label {
  1177. float: left;
  1178. }
  1179. .p-stars {
  1180. float: left;
  1181. margin-left: 20rpx;
  1182. }
  1183. .acount {
  1184. float: right;
  1185. text {
  1186. color: $color-system;
  1187. }
  1188. }
  1189. }
  1190. }
  1191. .icon-xiayibu {
  1192. line-height: 154rpx;
  1193. display: inline-block;
  1194. position: absolute;
  1195. width: 48rpx;
  1196. top: 0;
  1197. right: 0;
  1198. color: #b2b2b2;
  1199. }
  1200. }
  1201. .container-section {
  1202. width: 100%;
  1203. height: auto;
  1204. background-color: #f7f7f7;
  1205. box-sizing: border-box;
  1206. padding: 0 24rpx;
  1207. .tab-title {
  1208. width: 100%;
  1209. height: 88rpx;
  1210. line-height: 88rpx;
  1211. font-size: $font-size-30;
  1212. font-weight: bold;
  1213. }
  1214. .section-product {
  1215. width: 100%;
  1216. height: auto;
  1217. margin-top: 24rpx;
  1218. .floor-item-none {
  1219. min-height: 300rpx;
  1220. display: flex;
  1221. flex-direction: column;
  1222. align-items: center;
  1223. .none-image {
  1224. width: 260rpx;
  1225. height: 260rpx;
  1226. }
  1227. .none-text {
  1228. text-align: center;
  1229. font-size: $font-size-28;
  1230. color: #999999;
  1231. line-height: 40rpx;
  1232. }
  1233. }
  1234. .floor-item {
  1235. width: 341rpx;
  1236. height: auto;
  1237. margin-right: 20rpx;
  1238. font-size: $font-size-24;
  1239. color: $text-color;
  1240. background: #ffffff;
  1241. line-height: 36rpx;
  1242. border-radius: 20rpx;
  1243. margin-bottom: 20rpx;
  1244. float: left;
  1245. box-sizing: border-box;
  1246. padding-bottom: 10rpx;
  1247. position: relative;
  1248. &:nth-child(2n) {
  1249. margin-right: 0;
  1250. }
  1251. .floor-item-type {
  1252. width: 64rpx;
  1253. height: 64rpx;
  1254. text-align: justify;
  1255. box-sizing: border-box;
  1256. padding: 10rpx;
  1257. border-radius: 0 0 8rpx 8rpx;
  1258. background-color: #33ccbf;
  1259. font-size: $font-size-22;
  1260. color: #ffffff;
  1261. line-height: 25rpx;
  1262. position: absolute;
  1263. top: 0;
  1264. right: 16rpx;
  1265. }
  1266. .item-img {
  1267. width: 341rpx;
  1268. height: 341rpx;
  1269. border-radius: 20rpx 20rpx 0 0;
  1270. display: block;
  1271. margin-bottom: 20rpx;
  1272. }
  1273. .floor-item-content {
  1274. width: 311rpx;
  1275. padding: 0 15rpx;
  1276. }
  1277. .floor-item-act {
  1278. display: block;
  1279. width: 100%;
  1280. height: 68rpx;
  1281. text-align: center;
  1282. box-sizing: border-box;
  1283. padding: 16rpx 0;
  1284. margin-top: 8rpx;
  1285. }
  1286. .title-none {
  1287. font-size: $font-size-26;
  1288. color: #ff2a2a;
  1289. line-height: 54rpx;
  1290. .btn {
  1291. display: inline-block;
  1292. float: right;
  1293. width: 112rpx;
  1294. height: 44rpx;
  1295. background: $btn-confirm;
  1296. line-height: 44rpx;
  1297. font-size: $font-size-24;
  1298. color: #ffffff;
  1299. text-align: center;
  1300. border-radius: 22rpx;
  1301. margin-top: 17rpx;
  1302. }
  1303. }
  1304. .title {
  1305. width: 100%;
  1306. height: 72rpx;
  1307. display: flex;
  1308. flex-direction: column;
  1309. margin-bottom: 15rpx;
  1310. padding: 0;
  1311. position: relative;
  1312. .mclap {
  1313. width: 100%;
  1314. line-height: 40rpx;
  1315. text-overflow: ellipsis;
  1316. display: -webkit-box;
  1317. word-break: break-all;
  1318. -webkit-box-orient: vertical;
  1319. -webkit-line-clamp: 2;
  1320. overflow: hidden;
  1321. font-size: 26rpx;
  1322. &.indent {
  1323. text-indent: 95rpx;
  1324. }
  1325. }
  1326. .mclap-tag {
  1327. display: block;
  1328. width: 84rpx;
  1329. height: 32rpx;
  1330. background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
  1331. border-radius: 4rpx 48rpx 4px 4px;
  1332. line-height: 32rpx;
  1333. font-size: $font-size-22;
  1334. color: #ffffff;
  1335. text-align: center;
  1336. position: absolute;
  1337. left: 0;
  1338. top: 0;
  1339. }
  1340. }
  1341. .no-price {
  1342. height: 54rpx;
  1343. line-height: 54rpx;
  1344. display: flex;
  1345. box-sizing: border-box;
  1346. .p-no {
  1347. font-size: $font-size-30;
  1348. color: $text-color;
  1349. display: block;
  1350. float: left;
  1351. }
  1352. .p-stars {
  1353. float: left;
  1354. }
  1355. }
  1356. .price {
  1357. color: #ff2a2a;
  1358. line-height: 54rpx;
  1359. &.none {
  1360. text-decoration: line-through;
  1361. color: #999999;
  1362. }
  1363. .sm {
  1364. font-size: $font-size-24;
  1365. }
  1366. .big {
  1367. font-size: $font-size-28;
  1368. }
  1369. }
  1370. }
  1371. }
  1372. }
  1373. </style>