index.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938
  1. <template>
  2. <view style="position: absolute;width: 100%;height: 100%;top: 0;left: 0;background-color: #fff;overflow: auto;">
  3. <app-layout :haveBackground="haveBackground">
  4. <view :class="[`user`,recharge ? `` : `recharge`,nextMember.money > 0 ? `` : `less`]">
  5. <view v-if="detail.rules != '' && level > 0" class="question" @click="toRules">
  6. <image load-lazy="true" src="./../image/question.png"></image>
  7. </view>
  8. <!-- 开通充值后的模块 -->
  9. <view class="user-info">
  10. <image load-lazy="true" class="avatar" :src="userInfo.options.avatar"></image>
  11. <view>{{userInfo.nickname}}</view>
  12. <view class="user-member-info">
  13. <view class="member-detail">
  14. <image class="level-icon" load-lazy="true" :src="member_pic_url"></image>
  15. <text v-if="level == 0">{{userInfo.identity.level_name}}</text>
  16. <text v-if="level > 0" class="t-omit member-level-name">{{detail.name}}</text>
  17. </view>
  18. <text v-if="level > 0" style="margin-left: 15rpx;" class="t-omit">到期时间:{{formattime(userInfo.user_level_date.end_date)}}</text>
  19. <view class="progress" v-if="nextMember.money > 0">
  20. <view class="progress-line">
  21. <view :style="[{'width': prop + `%`}]" class="progress-active"></view>
  22. </view>
  23. <view v-if="nextList.length > 0">消费¥{{ list !== null ? list.consumption_money : "0" }}/¥{{ detail !== null ? nextMember.money : "0" }}</view>
  24. </view>
  25. </view>
  26. </view>
  27. <view :class="[`user-balance`,`main-between`,`cross-center`,nextMember.money > 0 ? `` : `less`]" v-if="recharge == true">
  28. <view class="user-text">
  29. <view>账户余额</view>
  30. <view class="user-price">¥{{balance}}</view>
  31. </view>
  32. <view class="to-recharge" @click="toRecharge">
  33. <button class="go-btn">去充值</button>
  34. </view>
  35. </view>
  36. <!-- 用户信息 -->
  37. <view :class="[`card`,recharge ? `` : `recharge`,nextMember.money > 0 ? `` : `less`]">
  38. <image load-lazy="true" class="card-img" :src="list.mall_member != null ? detail.bg_pic_url : list.member_bg_pic_url"></image>
  39. <image class="card-bottom" :src="memberImg.card_bottom"></image>
  40. </view>
  41. </view>
  42. <!-- 特权展示 -->
  43. <view class="member-info">
  44. <view v-if="level > 0 && detail.rights.length > 0" class="member-title main-center cross-center">
  45. <image load-lazy="true" :src="memberImg.member_left"></image>
  46. <view class="info-text">{{detail.name}}特权</view>
  47. <image load-lazy="true" :src="memberImg.member_right"></image>
  48. </view>
  49. <image v-else load-lazy="true" class="banner" :src="memberImg.banner"></image>
  50. <view @click="toDetail" v-if="detail.rights.length > 0">
  51. <view :class="[`main-center flex-wrap`, `rights`, `${level == 0 ? 'border' : ''}`]">
  52. <view class="rights-item" v-for="item in detail.rights" :key="item.id">
  53. <image load-lazy="true" class="rights-img" :src="item.pic_url"></image>
  54. <view class="t-omit">{{item.title}}</view>
  55. </view>
  56. </view>
  57. </view>
  58. </view>
  59. <!-- 升级会员 -->
  60. <view class="update" v-if="nextList.length > 0">
  61. <view class="update-nav">
  62. <image load-lazy="true" class="update-img" :src="memberImg.up"></image>
  63. <view @click="toMore">
  64. <view class="more">
  65. <text>更多</text>
  66. <image load-lazy="true" src="/static/image/icon/arrow-right.png"></image>
  67. </view>
  68. </view>
  69. </view>
  70. <!-- 可升级的会员大于一个 -->
  71. <view class="member-list main-center" v-if="nextList.length > 1">
  72. <view class="member-item" v-for="item in nextList" :key="item.id">
  73. <image load-lazy="true" class="memeber-img" :src="item.bg_pic_url ? item.bg_pic_url : item.pic_url"></image>
  74. <view class="memeber-other">
  75. <view class="member-name t-omit">{{item.name}}</view>
  76. <view class="discount">
  77. <text>{{item.discount}}</text>折
  78. </view>
  79. <view>会员折扣</view>
  80. <view @click="toMore(item.level)">
  81. <button class="update-btn">立即升级</button>
  82. </view>
  83. </view>
  84. </view>
  85. </view>
  86. <!-- 可升级的会员只有一个 -->
  87. <view class="level" v-else>
  88. <image load-lazy="true" class="level-img" :src="nextList[0].bg_pic_url ? nextList[0].bg_pic_url : nextList[0].pic_url "></image>
  89. <view class="level-right">
  90. <view class="level-name t-omit">{{ nextList[0].name }}</view>
  91. 会员折扣
  92. <text class="discount">
  93. <text>{{nextList[0].discount}}</text>折
  94. </text>
  95. <view @click="toMore(nextList[0].level)">
  96. <button class="level-btn">立即升级</button>
  97. </view>
  98. </view>
  99. </view>
  100. </view>
  101. <!-- 优惠券 -->
  102. <view class="coupon" v-if="coupon.length > 0">
  103. <view class="update-nav">
  104. <image load-lazy="true" class="update-img" :src="memberImg.coupon"></image>
  105. </view>
  106. <scroll-view class="coupon-list" scroll-x>
  107. <view v-for="(item,index) in coupon" :key="item.id" @click="toCoupon(item.id)" class="coupon-item">
  108. <image load-lazy="true" v-if="item.user_count === '0'" class="coupon-bg" :src="memberImg.coupon_index"></image>
  109. <image load-lazy="true" v-else class="coupon-bg" :src="memberImg.coupon_received"></image>
  110. <view class="coupon-price" v-if="item.type == 2">¥
  111. <text>{{item.sub_price}}</text>
  112. </view>
  113. <view class="coupon-price" v-else>
  114. <text>{{item.discount}}</text>折
  115. </view>
  116. <view class="coupon-total">满{{item.min_price}}可用</view>
  117. <view @click.stop="receive(item,index)" :style="{'padding-top': `${item.user_count === '0' ? '10rpx':'25rpx'}`}" class="coupon-status">{{item.user_count === '0' ?'立即领取' :'已领取'}}</view>
  118. </view>
  119. </scroll-view>
  120. </view>
  121. <!-- 商品 -->
  122. <view class="goods" v-if="goods.length > 0">
  123. <view class="update-nav">
  124. <image load-lazy="true" class="update-img" :src="memberImg.goods"></image>
  125. <view @click="toGoods">
  126. <view class="more">
  127. <text>更多</text>
  128. <image load-lazy="true" src="/static/image/icon/arrow-right.png"></image>
  129. </view>
  130. </view>
  131. </view>
  132. <scroll-view class="goods-list" scroll-x>
  133. <view v-for="item in goods" :key="item.id" @click="toGoods(item.id)" class="goods-item">
  134. <image load-lazy="true" class="goods-img" :src="item.cover_pic"></image>
  135. <view class="goods-name t-omit">{{item.name}}</view>
  136. <view class="goods-price">¥
  137. <text>{{item.price}}</text>
  138. </view>
  139. <view class="before">原价{{item.original_price}}元</view>
  140. </view>
  141. </scroll-view>
  142. </view>
  143. <view v-if="tabbarbool" class="placeholder"></view>
  144. </app-layout>
  145. </view>
  146. </template>
  147. <script>
  148. import { mapState } from "vuex";
  149. export default {
  150. data() {
  151. return {
  152. currentRoute: this.$platDiff.route(),
  153. tabbarbool: false,
  154. detail: {
  155. rules: ''
  156. },
  157. list: null,
  158. nextList: null,
  159. goods: [],
  160. first: false,
  161. haveBackground: false,
  162. coupon: [],
  163. balance: 0,
  164. loading: false,
  165. member_pic_url: null,
  166. nextMember: {},
  167. recharge: false,
  168. current: 'wechat',
  169. prop: 0,
  170. page_loading: true,
  171. level: 0
  172. }
  173. },
  174. name: "index",
  175. computed: {
  176. ...mapState({
  177. tabBarNavs: state => state.mallConfig.navbar.navs,
  178. userInfo: state => state.user.info,
  179. memberImg: state => state.mallConfig.__wxapp_img.member,
  180. couponImg: state => state.mallConfig.__wxapp_img.coupon,
  181. })
  182. },
  183. watch: {
  184. tabBarNavs: {
  185. handler: function() {
  186. this.b();
  187. },
  188. immediate: true,
  189. }
  190. },
  191. methods: {
  192. formattime(date){
  193. date = date.split(' ')[0]
  194. return date
  195. },
  196. b() {
  197. let currentRoute = this.currentRoute;
  198. for (let i = 0; i < this.tabBarNavs.length; i++) {
  199. if(currentRoute.includes(this.tabBarNavs[i].url.split('?')[0])) {
  200. return this.tabbarbool = true;
  201. }
  202. }
  203. return this.tabbarbool = false;
  204. },
  205. receive(item,index) {
  206. let that = this;
  207. if(item.user_count > 0 || that.loading) {
  208. return false
  209. }
  210. that.loading = true;
  211. uni.showLoading({
  212. title: '领取中...'
  213. });
  214. that.$request({
  215. url: that.$api.member.receive,
  216. data: {
  217. coupon_id: item.id
  218. },
  219. }).then(response=>{
  220. that.loading = false;
  221. uni.hideLoading();
  222. if(response.code === 0) {
  223. uni.showToast({
  224. title: response.msg,
  225. duration: 1000
  226. });
  227. that.coupon[index].user_count = response.data.rest === 0 ? 1 : 0;
  228. }else {
  229. uni.showToast({
  230. title: response.msg,
  231. icon: 'none',
  232. duration: 1000
  233. });
  234. }
  235. }).catch(() => {
  236. uni.hideLoading();
  237. that.$event.on(that.$const.EVENT_USER_LOGIN).then(()=>{
  238. that.receive(item,index);
  239. });
  240. });
  241. },
  242. toCoupon(id) {
  243. uni.navigateTo({
  244. url: '/pages/coupon/details/details-no-share?is_member=1&id='+ id
  245. });
  246. },
  247. toGoods(id) {
  248. if(id) {
  249. uni.navigateTo({
  250. url: '/pages/goods/goods?id=' + id
  251. })
  252. }else {
  253. uni.navigateTo({
  254. url: '/pages/member/goods/goods?discount=' + this.detail.discount
  255. })
  256. }
  257. },
  258. toDetail() {
  259. uni.navigateTo({
  260. url: '/pages/member/detail/detail?level='+ this.level + '&prop=' + this.prop
  261. });
  262. },
  263. toMore(level) {
  264. if(level > 0) {
  265. uni.navigateTo({
  266. url: '/pages/member/upgrade/upgrade?level=' + this.level + '&other=' + level
  267. })
  268. }else {
  269. uni.navigateTo({
  270. url: '/pages/member/upgrade/upgrade?level=' + this.level
  271. })
  272. }
  273. },
  274. toRules() {
  275. uni.navigateTo({
  276. url: `/pages/rules/index?url=${encodeURIComponent(this.$api.member.index)}&keys=${JSON.stringify(['mall_member', 'rules'])}`,
  277. });
  278. },
  279. toRecharge() {
  280. uni.navigateTo({
  281. url: '/pages/balance/recharge'
  282. });
  283. },
  284. getList() {
  285. let that = this;
  286. that.$request({
  287. url: that.$api.member.index,
  288. method: 'get',
  289. }).then(response=>{
  290. that.$hideLoading();
  291. that.$store.dispatch('user/info');
  292. if(response.code == 0) {
  293. that.list = response.data;
  294. that.detail = that.list.mall_member;
  295. that.goods = that.list.member_goods;
  296. that.coupon = that.list.member_coupons;
  297. that.nextMember = that.list.next_consume_upgrade_member;
  298. that.member_pic_url = that.list.member_pic_url;
  299. that.nextList = that.list.next_mall_member;
  300. if (that.recharge) {
  301. that.balance = that.list.user_info.balance
  302. }
  303. if (that.detail != null) {
  304. that.level = that.detail.level;
  305. }
  306. if (that.nextMember) {
  307. that.prop = that.list.consumption_money / that.nextMember.money * 100;
  308. if(that.prop > 100) {
  309. that.prop = 100;
  310. }
  311. }
  312. if (that.detail == null && that.nextList.length > 0) {
  313. that.detail = that.nextList[0]
  314. }
  315. }else {
  316. uni.showToast({
  317. title: response.msg,
  318. icon: 'none',
  319. duration: 1000
  320. });
  321. }
  322. }).catch(response => {
  323. that.$hideLoading();
  324. that.$event.on(that.$const.EVENT_USER_LOGIN).then(()=>{
  325. that.getList();
  326. });
  327. });
  328. },
  329. },
  330. onLoad() {
  331. let that = this;
  332. that.$showLoading({
  333. type: 'global',
  334. text: '加载中...'
  335. });
  336. that.$request({
  337. url: that.$api.recharge.setting,
  338. method: 'get',
  339. }).then(response=>{
  340. if(response.code == 0) {
  341. if (response.data.setting.status == 1) {
  342. that.recharge = true
  343. }
  344. }else {
  345. uni.showToast({
  346. title: response.msg,
  347. icon: 'none',
  348. duration: 1000
  349. });
  350. }
  351. }).catch(response => {
  352. that.$hideLoading();
  353. });
  354. },
  355. onShow() {
  356. let that = this;
  357. that.getList();
  358. }
  359. }
  360. </script>
  361. <style scoped lang="scss">
  362. .placeholder {
  363. height: #{160rpx};
  364. background-color: #fff;
  365. }
  366. .member-level-name {
  367. max-width: #{200rpx};
  368. }
  369. .info-text {
  370. margin: 0 #{20rpx};
  371. }
  372. .user {
  373. position: relative;
  374. height: #{690rpx};
  375. width: 100%;
  376. background-color: #fff;
  377. overflow: hidden;
  378. &.recharge {
  379. height: #{550rpx};
  380. &.less {
  381. height: #{480rpx};
  382. }
  383. }
  384. }
  385. .user-info {
  386. position: absolute;
  387. left: 0;
  388. right: 0;
  389. top: #{40rpx};
  390. width: 100%;
  391. padding: 0 #{45rpx};
  392. z-index: 5;
  393. color: #fff;
  394. padding-left: #{185rpx};
  395. .user-member-info {
  396. margin-top: #{16rpx};
  397. font-size: #{20rpx};
  398. display: flex;
  399. align-items: center;
  400. }
  401. .avatar {
  402. height: #{100rpx};
  403. width: #{100rpx};
  404. border-radius: 50%;
  405. border: #{2rpx} solid #fff;
  406. position: absolute;
  407. left: #{45rpx};
  408. }
  409. }
  410. .member-detail {
  411. position: relative;
  412. height: #{36rpx};
  413. line-height: #{36rpx};
  414. border-radius: #{18rpx};
  415. padding: 0 #{16rpx} 0 #{54rpx};
  416. background-color: #454955;
  417. display: inline-block;
  418. // margin-bottom: #{15rpx};
  419. }
  420. .member-detail .level-icon{
  421. border-radius: 50%;
  422. position: absolute;
  423. margin-bottom: #{-3rpx};
  424. }
  425. .member-detail image {
  426. height: #{44rpx};
  427. width: #{44rpx};
  428. position: absolute;
  429. bottom: 0;
  430. left: 0;
  431. }
  432. .card {
  433. height: #{690rpx};
  434. width: 100%;
  435. position: relative;
  436. background-color: #292a31;
  437. z-index: 2;
  438. &.less {
  439. height: #{650rpx};
  440. &.recharge {
  441. height: #{480rpx};
  442. }
  443. }
  444. &.recharge {
  445. height: #{530rpx};
  446. }
  447. }
  448. .card-bottom {
  449. position: absolute;
  450. width: 100%;
  451. height: #{80rpx};
  452. bottom: 0;
  453. left: 0;
  454. z-index: 5;
  455. }
  456. .question {
  457. position: absolute;
  458. right: #{24rpx};
  459. top: #{24rpx};
  460. z-index: 99;
  461. }
  462. .question image {
  463. height: #{36rpx};
  464. width: #{36rpx};
  465. }
  466. .card-img {
  467. position: absolute;
  468. bottom: 0;
  469. left: 0;
  470. right: 0;
  471. height: #{320rpx};
  472. width: #{660rpx};
  473. margin: 0 auto;
  474. border-radius: #{16rpx};
  475. z-index: 3;
  476. }
  477. .member-info {
  478. background-color: #fff;
  479. padding-top: #{40rpx};
  480. }
  481. .member-title image {
  482. height: #{32rpx};
  483. width: #{68rpx};
  484. }
  485. .user-balance {
  486. height: #{140rpx};
  487. width: #{660rpx};
  488. background-color: #454955;
  489. position: absolute;
  490. top: #{210rpx};
  491. left: #{45rpx};
  492. right: #{45rpx};
  493. border-radius: #{16rpx};
  494. z-index: 999;
  495. padding: #{36rpx};
  496. color: #fff;
  497. &.less {
  498. top: #{160rpx};
  499. }
  500. }
  501. .user-text {
  502. vertical-align: top;
  503. font-size: #{18rpx};
  504. display: inline-block;
  505. }
  506. .user-price {
  507. font-size: #{46rpx};
  508. font-family: DIN;
  509. }
  510. .go-btn {
  511. background-color: #454955;
  512. height: #{56rpx};
  513. line-height: #{52rpx};
  514. width: #{140rpx};
  515. border-radius: #{28rpx};
  516. font-size: #{28rpx};
  517. color: #fff;
  518. border: #{1rpx} solid #fff;
  519. padding: 0;
  520. text-align: center;
  521. margin-top: #{1rpx};
  522. }
  523. .go-btn::after {
  524. border: 0;
  525. }
  526. .progress-line {
  527. height: #{10rpx};
  528. border-radius: #{5rpx};
  529. margin-bottom: #{5rpx};
  530. background-color: #949598;
  531. position: relative;
  532. }
  533. .progress-active {
  534. height: #{10rpx};
  535. border-radius: #{5rpx};
  536. background-color: #FFB82F;
  537. position: absolute;
  538. left: 0;
  539. top: 0;
  540. }
  541. .card-info {
  542. position: absolute;
  543. bottom: #{-10rpx};
  544. left: #{620rpx};
  545. height: #{320rpx};
  546. width: #{660rpx};
  547. padding: #{78rpx} #{100rpx} 0;
  548. color: rgba(53, 53, 53, 0.7);
  549. font-size: #{24rpx};
  550. text-align: center;
  551. }
  552. .card-name {
  553. font-size: #{44rpx};
  554. color: #fff;
  555. }
  556. .rights {
  557. margin-top: #{40rpx};
  558. text-align: center;
  559. color: #353535;
  560. font-size: #{26rpx};
  561. white-space: nowrap;
  562. width: auto;
  563. }
  564. .rights-item {
  565. display: inline-block;
  566. width: #{150rpx};
  567. margin: 0 #{40rpx} #{20rpx};
  568. }
  569. .rights-item .t-omit {
  570. display: block;
  571. }
  572. .rights-img {
  573. height: #{80rpx};
  574. width: #{80rpx};
  575. margin-bottom: #{12rpx};
  576. }
  577. .update {
  578. background-color: #fff;
  579. padding-top: #{60rpx};
  580. padding-bottom: #{40rpx};
  581. }
  582. .update-nav {
  583. height: #{64rpx};
  584. padding: 0 #{26rpx};
  585. color: #999;
  586. font-size: #{28rpx};
  587. }
  588. .update-img {
  589. float: left;
  590. height: #{64rpx};
  591. width: #{200rpx};
  592. }
  593. .more {
  594. height: #{64rpx};
  595. line-height: #{64rpx};
  596. float: right;
  597. }
  598. .more image {
  599. height: #{22rpx};
  600. width: #{12rpx};
  601. margin-left: #{12rpx};
  602. }
  603. .member-list {
  604. margin-top: #{32rpx};
  605. height: #{505rpx};
  606. white-space: nowrap;
  607. width: auto;
  608. }
  609. .member-item {
  610. margin: #{20rpx};
  611. width: #{342rpx};
  612. height: #{465rpx};
  613. display: inline-block;
  614. position: relative;
  615. text-align: center;
  616. font-size: #{24rpx};
  617. color: #999;
  618. box-shadow: #{0rpx} #{0rpx} #{20rpx} rgba(0, 0, 0, 0.1);
  619. border-radius: #{16rpx};
  620. }
  621. .memeber-other {
  622. padding-top: #{22rpx};
  623. height: #{290rpx};
  624. width: 100%;
  625. border: #{1rpx} solid #e2e2e2;
  626. border-top: 0;
  627. border-bottom-left-radius: #{16rpx};
  628. border-bottom-right-radius: #{16rpx};
  629. }
  630. .memeber-img {
  631. width: 100%;
  632. height: #{175rpx};
  633. display: block;
  634. border-top-left-radius: #{16rpx};
  635. border-top-right-radius: #{16rpx};
  636. }
  637. .member-name {
  638. color: #353535;
  639. font-size: #{32rpx};
  640. width: 90%;
  641. }
  642. .member-price {
  643. margin-top: #{8rpx};
  644. font-size: #{24rpx};
  645. color: rgba(53, 53, 53, 0.7);
  646. }
  647. .member-price text {
  648. font-size: #{42rpx};
  649. }
  650. .discount {
  651. padding-top: #{12rpx};
  652. color: #ffb82f;
  653. font-size: #{24rpx};
  654. }
  655. .discount text {
  656. font-size: #{40rpx};
  657. }
  658. .update-btn {
  659. height: #{62rpx};
  660. width: 60%;
  661. line-height: #{60rpx};
  662. margin: #{24rpx} auto 0;
  663. font-size: #{28rpx};
  664. color: #b4914f;
  665. border-radius: #{31rpx};
  666. background-color: #fff;
  667. border: #{1rpx} solid #b4914f;
  668. }
  669. .update-btn::after {
  670. border: 0;
  671. }
  672. .coupon {
  673. padding-bottom: #{40rpx};
  674. background-color: #fff;
  675. }
  676. .coupon-list {
  677. margin-top: #{32rpx};
  678. padding-left: #{26rpx};
  679. height: #{130rpx};
  680. white-space: nowrap;
  681. overflow: hidden;
  682. width: auto;
  683. }
  684. .coupon-item {
  685. height: #{130rpx};
  686. width: #{260rpx};
  687. position: relative;
  688. font-size: #{24rpx};
  689. margin-right: #{15rpx};
  690. display: inline-block;
  691. }
  692. .coupon-bg {
  693. height: #{130rpx};
  694. width: #{260rpx};
  695. }
  696. .coupon-price {
  697. position: absolute;
  698. top: #{15rpx};
  699. left: 0;
  700. right: 0;
  701. color: #fff;
  702. text-align: center;
  703. width: 75%;
  704. }
  705. .coupon-price text {
  706. font-size: #{40rpx};
  707. }
  708. .coupon-total {
  709. position: absolute;
  710. bottom: #{10rpx};
  711. left: 0;
  712. right: 0;
  713. color: #fff;
  714. text-align: center;
  715. width: 75%;
  716. }
  717. .coupon-status {
  718. position: absolute;
  719. top: 0;
  720. right: 0;
  721. width: #{70rpx};
  722. height: #{130rpx};
  723. font-size: #{22rpx};
  724. color: #fff;
  725. white-space: normal;
  726. line-height: 125%;
  727. padding: #{10rpx} 0 0 #{30rpx};
  728. }
  729. .goods {
  730. margin-bottom: #{55rpx};
  731. }
  732. .goods-list {
  733. margin-top: #{32rpx};
  734. height: #{440rpx};
  735. white-space: nowrap;
  736. }
  737. .goods-item {
  738. margin: #{20rpx} 0;
  739. height: #{400rpx};
  740. width: #{220rpx};
  741. display: inline-block;
  742. margin-left: #{20rpx};
  743. padding: #{24rpx};
  744. color: #999;
  745. font-size: #{24rpx};
  746. text-align: center;
  747. border-radius: #{8rpx};
  748. box-shadow: 0 0 #{20rpx} rgba(0, 0, 0, 0.1);
  749. }
  750. .goods-img {
  751. height: #{210rpx};
  752. width: #{210rpx};
  753. margin-bottom: #{10rpx};
  754. display: block;
  755. }
  756. .goods-name {
  757. color: #666;
  758. width: #{210rpx};
  759. }
  760. .goods-price {
  761. color: #b4914f;
  762. margin: #{5rpx};
  763. }
  764. .goods-price text {
  765. font-size: #{42rpx};
  766. }
  767. .before {
  768. text-decoration: line-through;
  769. }
  770. .level {
  771. margin: #{32rpx} auto #{40rpx};
  772. width: #{700rpx};
  773. height: #{206rpx};
  774. border-radius: #{16rpx};
  775. border: #{1rpx} solid #e2e2e2;
  776. position: relative;
  777. box-shadow: 0 0 #{20rpx} rgba(0, 0, 0, 0.1);
  778. }
  779. .level-img {
  780. height: 100%;
  781. width: #{400rpx};
  782. float: left;
  783. display: block;
  784. border-top-left-radius: #{16rpx};
  785. border-bottom-left-radius: #{16rpx};
  786. }
  787. .level-name {
  788. font-size: #{32rpx};
  789. color: #353535;
  790. width: 100%;
  791. height: #{40rpx};
  792. }
  793. .level-right {
  794. position: absolute;
  795. right: 0;
  796. top: 0;
  797. width: #{300rpx};
  798. height: #{206rpx};
  799. color: #999;
  800. font-size: #{24rpx};
  801. text-align: center;
  802. padding: #{20rpx} 0;
  803. border-top-right-radius: #{16rpx};
  804. border-bottom-right-radius: #{16rpx};
  805. }
  806. .level-right .discount {
  807. margin-left: #{14rpx};
  808. margin-top: #{-5rpx};
  809. }
  810. .level-btn {
  811. margin-top: #{14rpx};
  812. height: #{48rpx};
  813. line-height: #{46rpx};
  814. padding: 0 #{30rpx};
  815. border-radius: #{24rpx};
  816. border: #{1rpx} solid #b4914f;
  817. font-size: #{24rpx};
  818. display: inline-block;
  819. color: #b4914f;
  820. background-color: #fff;
  821. }
  822. .level-btn::after {
  823. border: 0;
  824. }
  825. .banner {
  826. width: 100%;
  827. height: #{110rpx};
  828. display: block;
  829. margin: #{40rpx} 0 #{20rpx};
  830. }
  831. .no-rights {
  832. height: #{200rpx};
  833. width: #{700rpx};
  834. margin: 0 auto;
  835. border: #{1rpx} solid #b4914f;
  836. border-radius: #{16rpx};
  837. text-align: center;
  838. color: #353535;
  839. font-size: #{26rpx};
  840. padding-top: #{35rpx};
  841. }
  842. .rights.border {
  843. border: #{1rpx} solid #b4914f;
  844. margin: 0 #{26rpx};
  845. width: auto;
  846. min-height: #{200rpx};
  847. border-radius: #{16rpx};
  848. }
  849. .border .rights-item {
  850. margin-top: #{34rpx};
  851. }
  852. .no-next {
  853. padding-top: #{140rpx};
  854. }
  855. </style>