my-shop.vue 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374
  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 = await 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 = await 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:0 24rpx 10rpx 24rpx;
  1128. box-sizing: border-box;
  1129. background-color: #ffffff;
  1130. }
  1131. .product-supplier {
  1132. width: 100%;
  1133. height: 140rpx;
  1134. padding: 30rpx 0 10rpx 0;
  1135. box-sizing: border-box;
  1136. background-color: #ffffff;
  1137. position: relative;
  1138. box-sizing: border-box;
  1139. .logo {
  1140. width: 100rpx;
  1141. height: 100rpx;
  1142. float: left;
  1143. border: 1px solid #efefef;
  1144. border-radius: 50%;
  1145. image {
  1146. width: 100%;
  1147. height: 100%;
  1148. display: block;
  1149. border-radius: 50%;
  1150. }
  1151. }
  1152. .main {
  1153. width: 470rpx;
  1154. height: 92rpx;
  1155. float: left;
  1156. margin-left: 20rpx;
  1157. .name {
  1158. width: 100%;
  1159. line-height: 46rpx;
  1160. float: left;
  1161. font-size: $font-size-28;
  1162. color: $text-color;
  1163. float: right;
  1164. overflow: hidden;
  1165. text-overflow: ellipsis;
  1166. white-space: nowrap;
  1167. text-align: left;
  1168. }
  1169. .massgs {
  1170. width: 100%;
  1171. line-height: 46rpx;
  1172. float: left;
  1173. font-size: $font-size-24;
  1174. color: #999999;
  1175. .label {
  1176. float: left;
  1177. }
  1178. .p-stars {
  1179. float: left;
  1180. margin-left: 20rpx;
  1181. }
  1182. .acount {
  1183. float: right;
  1184. text {
  1185. color: $color-system;
  1186. }
  1187. }
  1188. }
  1189. }
  1190. .icon-xiayibu {
  1191. line-height: 154rpx;
  1192. display: inline-block;
  1193. position: absolute;
  1194. width: 48rpx;
  1195. top: 0;
  1196. right: 0;
  1197. color: #b2b2b2;
  1198. }
  1199. }
  1200. .container-section {
  1201. width: 100%;
  1202. height: auto;
  1203. background-color: #f7f7f7;
  1204. box-sizing: border-box;
  1205. padding: 0 24rpx;
  1206. .tab-title {
  1207. width: 100%;
  1208. height: 88rpx;
  1209. line-height: 88rpx;
  1210. font-size: $font-size-30;
  1211. font-weight: bold;
  1212. }
  1213. .section-product {
  1214. width: 100%;
  1215. height: auto;
  1216. margin-top: 24rpx;
  1217. .floor-item-none {
  1218. min-height: 300rpx;
  1219. display: flex;
  1220. flex-direction: column;
  1221. align-items: center;
  1222. .none-image {
  1223. width: 260rpx;
  1224. height: 260rpx;
  1225. }
  1226. .none-text {
  1227. text-align: center;
  1228. font-size: $font-size-28;
  1229. color: #999999;
  1230. line-height: 40rpx;
  1231. }
  1232. }
  1233. .floor-item {
  1234. width: 341rpx;
  1235. height: auto;
  1236. margin-right: 20rpx;
  1237. font-size: $font-size-24;
  1238. color: $text-color;
  1239. background: #ffffff;
  1240. line-height: 36rpx;
  1241. border-radius: 20rpx;
  1242. margin-bottom: 20rpx;
  1243. float: left;
  1244. box-sizing: border-box;
  1245. padding-bottom: 10rpx;
  1246. position: relative;
  1247. &:nth-child(2n) {
  1248. margin-right: 0;
  1249. }
  1250. .floor-item-type {
  1251. width: 64rpx;
  1252. height: 64rpx;
  1253. text-align: justify;
  1254. box-sizing: border-box;
  1255. padding: 10rpx;
  1256. border-radius: 0 0 8rpx 8rpx;
  1257. background-color: #33ccbf;
  1258. font-size: $font-size-22;
  1259. color: #ffffff;
  1260. line-height: 25rpx;
  1261. position: absolute;
  1262. top: 0;
  1263. right: 16rpx;
  1264. }
  1265. .item-img {
  1266. width: 341rpx;
  1267. height: 341rpx;
  1268. border-radius: 20rpx 20rpx 0 0;
  1269. display: block;
  1270. margin-bottom: 20rpx;
  1271. }
  1272. .floor-item-content {
  1273. width: 311rpx;
  1274. padding: 0 15rpx;
  1275. }
  1276. .floor-item-act {
  1277. display: block;
  1278. width: 100%;
  1279. height: 68rpx;
  1280. text-align: center;
  1281. box-sizing: border-box;
  1282. padding: 16rpx 0;
  1283. margin-top: 8rpx;
  1284. }
  1285. .title-none {
  1286. font-size: $font-size-26;
  1287. color: #ff2a2a;
  1288. line-height: 54rpx;
  1289. .btn {
  1290. display: inline-block;
  1291. float: right;
  1292. width: 112rpx;
  1293. height: 44rpx;
  1294. background: $btn-confirm;
  1295. line-height: 44rpx;
  1296. font-size: $font-size-24;
  1297. color: #ffffff;
  1298. text-align: center;
  1299. border-radius: 22rpx;
  1300. margin-top: 17rpx;
  1301. }
  1302. }
  1303. .title {
  1304. width: 100%;
  1305. height: 72rpx;
  1306. display: flex;
  1307. flex-direction: column;
  1308. margin-bottom: 15rpx;
  1309. padding: 0;
  1310. position: relative;
  1311. .mclap {
  1312. width: 100%;
  1313. line-height: 40rpx;
  1314. text-overflow: ellipsis;
  1315. display: -webkit-box;
  1316. word-break: break-all;
  1317. -webkit-box-orient: vertical;
  1318. -webkit-line-clamp: 2;
  1319. overflow: hidden;
  1320. font-size: 26rpx;
  1321. &.indent {
  1322. text-indent: 95rpx;
  1323. }
  1324. }
  1325. .mclap-tag {
  1326. display: block;
  1327. width: 84rpx;
  1328. height: 32rpx;
  1329. background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
  1330. border-radius: 4rpx 48rpx 4px 4px;
  1331. line-height: 32rpx;
  1332. font-size: $font-size-22;
  1333. color: #ffffff;
  1334. text-align: center;
  1335. position: absolute;
  1336. left: 0;
  1337. top: 0;
  1338. }
  1339. }
  1340. .no-price {
  1341. height: 54rpx;
  1342. line-height: 54rpx;
  1343. display: flex;
  1344. box-sizing: border-box;
  1345. .p-no {
  1346. font-size: $font-size-30;
  1347. color: $text-color;
  1348. display: block;
  1349. float: left;
  1350. }
  1351. .p-stars {
  1352. float: left;
  1353. }
  1354. }
  1355. .price {
  1356. color: #ff2a2a;
  1357. line-height: 54rpx;
  1358. &.none {
  1359. text-decoration: line-through;
  1360. color: #999999;
  1361. }
  1362. .sm {
  1363. font-size: $font-size-24;
  1364. }
  1365. .big {
  1366. font-size: $font-size-28;
  1367. }
  1368. }
  1369. }
  1370. }
  1371. }
  1372. </style>