index.vue 23 KB

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