mobile.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851
  1. <template>
  2. <div class="wrapper" v-if="detail">
  3. <!--顶部tab-->
  4. <div class="switch-bar" :class="switch_class(active)">
  5. <div v-if="activeName=='developer'" class="switch-item" :class="{'switch-item-active':active===0}" @click="handleSwitchClick(0)">
  6. <div class="switch-item-title">个人版</div>
  7. <div class="switch-item-border"/>
  8. </div>
  9. <div v-if="activeName=='developer'" class="switch-item" :class="{'switch-item-active':active===1}" @click="handleSwitchClick(1)">
  10. <div class="switch-item-title">公司版</div>
  11. <div class="switch-item-border"/>
  12. </div>
  13. <div v-if="activeName=='enterprise'" class="switch-item" :class="{'switch-item-active':active===2}" @click="handleSwitchClick(2)">
  14. <div class="switch-item-title">企业会员</div>
  15. <div class="switch-item-border"/>
  16. </div>
  17. </div>
  18. <!--名片-->
  19. <div class="banner-brown-wrapper" v-show="active===0">
  20. <div class="banner-brown">
  21. <div class="banner-content">
  22. <div class="avatar">
  23. <img :src="userInfo.icon_url" alt/>
  24. </div>
  25. <div class="name-wrapper">
  26. <div class="name">{{ userInfo.nickname }}</div>
  27. <div class="validity">{{ vipType === 2 ? endTimeCalc : '暂未开通' }}</div>
  28. </div>
  29. <div
  30. class="renew-btn"
  31. :class="vipColor"
  32. @click="clickPay('dev')"
  33. >{{ vipType === 2 ? '续费' : '开通' }}
  34. </div>
  35. </div>
  36. </div>
  37. </div>
  38. <!--企业会员信息-->
  39. <div v-show="active===1">
  40. <div class="swiper-wrapper">
  41. <div class="swiper-slide">
  42. <div class="banner-blue-wrapper">
  43. <div class="banner-blue">
  44. <div class="banner-content">
  45. <div class="avatar">
  46. <img :src="userInfo.icon_url" alt/>
  47. </div>
  48. <div class="name-wrapper">
  49. <div class="name">{{ userInfo.nickname }}</div>
  50. <div class="validity">{{ vipType === 3 ? endTimeCalc : '暂未开通' }}</div>
  51. </div>
  52. <div
  53. class="renew-btn"
  54. :class="vipColor"
  55. @click="clickPay('pre')"
  56. >{{ vipType === 3 ? '续费' : '开通' }}
  57. </div>
  58. </div>
  59. </div>
  60. </div>
  61. </div>
  62. </div>
  63. </div>
  64. <!--企业会员信息-->
  65. <div v-show="active===2">
  66. <div class="swiper-wrapper">
  67. <div class="swiper-slide">
  68. <div class="banner-green-wrapper">
  69. <div class="banner-green">
  70. <div class="banner-content">
  71. <div class="avatar">
  72. <img :src="userInfo.icon_url" alt/>
  73. </div>
  74. <div class="name-wrapper">
  75. <div class="name">{{ userInfo.nickname }}</div>
  76. <div class="validity">{{ vipType === 1 ? endTimeCalc : '暂未开通' }}</div>
  77. </div>
  78. <div
  79. class="renew-btn"
  80. :class="vipColor"
  81. @click="clickPay('com')"
  82. >{{ vipType === 1 ? '续费' : '开通' }}
  83. </div>
  84. </div>
  85. </div>
  86. </div>
  87. </div>
  88. </div>
  89. </div>
  90. <div class="content" style="background: #f4f5f9">
  91. <div class="title-wrapper app__bg_w app__pl_10 app__pr_10 app__bd_b_eee" style="margin: 0;width:100vw">
  92. <div class="title">{{ vipName }}</div>
  93. <div class="price-wrapper">
  94. <div class="monthly-price-wrapper">
  95. <div class="monthly-origin-price">原价¥{{ detail.quarterly_origin_price }}/季</div>
  96. <div class="monthly-discount-price">
  97. <span>¥{{ detail.quarterly_real_price }}</span>/季
  98. </div>
  99. </div>
  100. <div class="quarterly-price">
  101. 按月付费
  102. <span>¥{{ detail.monthly_real_price }}</span>
  103. </div>
  104. </div>
  105. </div>
  106. <div class="app__f_r app__al_c app__fs_15 app__pd_10 app__pt_10 app__pb_10 app__bg_w app__h_50"
  107. @click="viewRateDetail()" v-if="active===0">
  108. <p class="app__ml_10 app_f_g_1">会员数据:</p>
  109. <span class="app__fc_999">优先派单:{{ Number(vipInfo.jobCount || 0) + Number(vipInfo.projectCount || 0) }}</span>
  110. <span class="app__fc_999 app__mr_5 app__ml_10">收益提升:{{ vipInfo.vipFee || 0 }}元</span>
  111. </div>
  112. <div
  113. class="app__fs_14 app__lh_3 app__pl_20 app__pr_20 app__fc_666 app__fw_400 app__bg_w app__mt_10 app__f_c app__jf_c"
  114. v-if="active===0">
  115. <div class="app__f_r app__al_c">
  116. <p class="app_f_g_1">确认接单次数</p>
  117. <span>
  118. 不限次数
  119. </span>
  120. </div>
  121. <div class="app__f_r app__al_c">
  122. <p class="app_f_g_1">系统优先派单</p>
  123. <img src="@/assets/img/vip/icon_include_brown.png" style="width:16px;height:11px;">
  124. </div>
  125. <div class="app__f_r app__al_c">
  126. <p class="app_f_g_1">同时接单数量(需认证自由工作者)</p>
  127. <span>
  128. {{vipList[1]['accept_count']}}单
  129. </span>
  130. </div>
  131. <div class="app__f_r app__al_c">
  132. <p class="app_f_g_1">Ping(接单意愿)权重</p>
  133. <span>
  134. 权重高30%
  135. </span>
  136. </div>
  137. <div class="app__f_r app__al_c">
  138. <p class="app_f_g_1">资质认证申请</p>
  139. <span>
  140. 低至3-6折
  141. </span>
  142. </div>
  143. <div class="app__f_r app__al_c">
  144. <p class="app_f_g_1">整包服务费减免</p>
  145. <span>
  146. {{vipList[1]['project_reduction_rate']}}%
  147. </span>
  148. </div>
  149. <div class="app__f_r app__al_c">
  150. <p class="app_f_g_1">云端服务费减免</p>
  151. <span>
  152. {{vipList[1]['job_reduction_rate']}}%
  153. </span>
  154. </div>
  155. <div class="app__f_r app__al_c">
  156. <p class="app_f_g_1">岗位投递</p>
  157. <span>
  158. 5次/天
  159. </span>
  160. </div>
  161. <div class="app__f_r app__al_c">
  162. <p class="app_f_g_1">会员专属岗位</p>
  163. <span>
  164. 可投递
  165. </span>
  166. </div>
  167. <div class="app__f_r app__al_c">
  168. <p class="app_f_g_1">企业接单权限</p>
  169. <span>
  170. </span>
  171. </div>
  172. </div>
  173. <div
  174. class="app__fs_14 app__lh_3 app__pl_20 app__pr_20 app__fc_666 app__fw_400 app__bg_w app__mt_10 app__f_c app__jf_c"
  175. v-if="active===1">
  176. <div class="app__f_r app__al_c">
  177. <p class="app_f_g_1">确认接单次数</p>
  178. <span>
  179. 不限次数
  180. </span>
  181. </div>
  182. <div class="app__f_r app__al_c">
  183. <p class="app_f_g_1">系统优先派单</p>
  184. <img src="@/assets/img/vip/icon_include_brown.png" style="width:16px;height:11px;">
  185. </div>
  186. <div class="app__f_r app__al_c">
  187. <p class="app_f_g_1">同时接单数量(需认证自由工作者)</p>
  188. <span>
  189. 1单
  190. </span>
  191. </div>
  192. <div class="app__f_r app__al_c">
  193. <p class="app_f_g_1">Ping(接单意愿)权重</p>
  194. <span>
  195. 权重高30%
  196. </span>
  197. </div>
  198. <div class="app__f_r app__al_c">
  199. <p class="app_f_g_1">资质认证申请</p>
  200. <span>
  201. 低至3-6折
  202. </span>
  203. </div>
  204. <div class="app__f_r app__al_c">
  205. <p class="app_f_g_1">服务费减免</p>
  206. <span>
  207. </span>
  208. </div>
  209. <div class="app__f_r app__al_c">
  210. <p class="app_f_g_1">岗位投递</p>
  211. <span>
  212. 5次/天
  213. </span>
  214. </div>
  215. <div class="app__f_r app__al_c">
  216. <p class="app_f_g_1">会员专属岗位</p>
  217. <span>
  218. 可投递
  219. </span>
  220. </div>
  221. <div class="app__f_r app__al_c">
  222. <p class="app_f_g_1">企业接单权限</p>
  223. <span>
  224. </span>
  225. </div>
  226. </div>
  227. <div
  228. class="app__fs_14 app__lh_3 app__pl_20 app__pr_20 app__fc_666 app__fw_400 app__bg_w app__mt_10 app__f_c app__jf_c"
  229. v-if="active===2">
  230. <div class="app__f_r app__al_c">
  231. <p class="app_f_g_1">程序员聊一聊</p>
  232. <span>
  233. {{this.vipList[0]['chat_times']}}次/天
  234. </span>
  235. </div>
  236. <div class="app__f_r app__al_c">
  237. <p class="app_f_g_1">客户经理</p>
  238. <span>
  239. 专属
  240. </span>
  241. </div>
  242. <div class="app__f_r app__al_c">
  243. <p class="app_f_g_1">企业认证</p>
  244. <span>
  245. 有优惠
  246. </span>
  247. </div>
  248. </div>
  249. <div class="tips-wrapper">
  250. <div class="tips-title">会员说明</div>
  251. <div class="tips-content">
  252. <p>1.购买会员按季付费;</p>
  253. <p>2.开通会员即代表您已同意<a href="https://support.proginn.com/rule/member/" style="color: #308eff;">《程序员客栈会员服务条款》</a>;</p>
  254. <p>3.如有任何问题,欢迎咨询在线客服,或拨打热线:0571-28120931 转1。</p>
  255. </div>
  256. </div>
  257. </div>
  258. <!-- 底部浮动立即开通/续费按钮 -->
  259. <!-- <div class="buy-dev-btn" v-if="active===0" @click="handleClickBuyDev">
  260. {{ vipType === 2 ? '立即续费' : '立即开通' }}
  261. </div> -->
  262. <buy-dialog
  263. :handleClose="handleClose"
  264. :buyDialog="buyDialog"
  265. :gotoPay="gotoPay"
  266. :type="type"
  267. :item="detail"
  268. :vipDetail="vipDetail"
  269. :pricePrefix="pricePrefix"
  270. ></buy-dialog>
  271. </div>
  272. </template>
  273. <script>
  274. let touchX = 0;
  275. import getDeviceType from "@/mixins/getDeviceType";
  276. import qs from "qs";
  277. import buyDialog from "./buy-dialog";
  278. import bridge from '../../../plugins/bridge';
  279. export default {
  280. props: ["com", "dev", "pre", "vipDetail"],
  281. data() {
  282. const _this = this;
  283. return {
  284. active: 0,
  285. current: 0,
  286. vipList:[
  287. {},{},{}
  288. ],
  289. swiperOption: {
  290. loop: false,
  291. slidesPerView: "auto",
  292. centeredSlides: true,
  293. spaceBetween: 30,
  294. pagination: {
  295. el: ".swiper-pagination",
  296. dynamicBullets: true,
  297. },
  298. on: {
  299. slideChange() {
  300. _this.current = this.realIndex;
  301. if (bridge.isInApp) {
  302. if (_this.active === 1 && _this.current === 0) {
  303. bridge.setNavigationBarColor('#308EFF');
  304. _this.currentType = 1;
  305. } else if (_this.active === 1 && _this.current === 1) {
  306. bridge.setNavigationBarColor('#00BF66');
  307. _this.currentType = 3;
  308. }
  309. }
  310. },
  311. },
  312. },
  313. buyDialog: false,
  314. type: "com", // com: 企业会员, dev: 开发者会员
  315. currentType: 2,
  316. activeName:"",
  317. vipInfo: {
  318. version:1
  319. }
  320. };
  321. },
  322. components: {
  323. buyDialog,
  324. },
  325. mixins: [getDeviceType],
  326. computed: {
  327. endTimeCalc() {
  328. return "有效期至" + this.userInfo.vip_end_date;
  329. },
  330. detail() {
  331. if (this.active === 0) {
  332. return this.dev;
  333. } else if (this.active === 1) {
  334. return this.pre;
  335. } else if (this.active === 2) {
  336. return this.com;
  337. }
  338. },
  339. vipType() {
  340. return this.userInfo.vip_type || 0;
  341. },
  342. userInfo() {
  343. return this.vipDetail.user_info || {};
  344. },
  345. pricePrefix() {
  346. return this.deviceType === "ios" ? "apple_" : "";
  347. },
  348. vipName() {
  349. if (this.active === 0) {
  350. return "个人版";
  351. } else if (this.active === 1) {
  352. return "公司版";
  353. }else if (this.active === 2) {
  354. return "企业会员";
  355. }
  356. },
  357. vipColor() {
  358. if (this.active === 0) {
  359. return "yellow";
  360. } else if (this.active === 1) {
  361. return "blue";
  362. }else if (this.active === 2) {
  363. return "green";
  364. }
  365. },
  366. },
  367. async mounted() {
  368. await this.getList();
  369. await this.getVipInfo();
  370. let activeName="";
  371. if(this.vipInfo.version==1)
  372. {
  373. activeName = "developer";
  374. }
  375. else
  376. {
  377. activeName = this.$route.query.activeName;
  378. }
  379. this.activeName=activeName;
  380. const current = this.$route.query.current;
  381. if (activeName === "enterprise") {
  382. this.active = 2;
  383. } else {
  384. this.active = 0;
  385. }
  386. if (current === "1") {
  387. this.current = 1;
  388. }
  389. if (bridge.isInApp) {
  390. if (this.active === 0) {
  391. bridge.setNavigationBarColor('#B07F29');
  392. } else if (this.active === 1) {
  393. bridge.setNavigationBarColor('#308EFF');
  394. } else if (this.active === 2) {
  395. bridge.setNavigationBarColor('#00BF66');
  396. }
  397. }
  398. },
  399. methods: {
  400. switch_class(active)
  401. {
  402. if(active==0)
  403. {
  404. return "switch-bar-brown";
  405. }
  406. else if(active==1)
  407. {
  408. return "switch-bar-blue";
  409. }
  410. else if(active==2)
  411. {
  412. return "switch-bar-green";
  413. }
  414. else
  415. {
  416. return "switch-bar-brown";
  417. }
  418. },
  419. async clickPay(type) {
  420. if (!this.userInfo || !this.userInfo.nickname) {
  421. if (this.deviceType === "ios" || this.deviceType === "android") {
  422. location.href = "proginn://login?backToPage=true";
  423. } else {
  424. location.href = this.$store.state.domainConfig.siteUrl + '/?loginbox=show&next=' + encodeURIComponent(location.href)
  425. }
  426. return
  427. }
  428. this.type = type;
  429. this.buyDialog = true;
  430. // location.href = `/vip/pay?product_id=${item.id}&number=3&next=/type/vip/`;
  431. },
  432. handleClose() {
  433. this.buyDialog = false;
  434. },
  435. async gotoPay(number) {
  436. const item = this[this.type];
  437. let query = {
  438. product_type: 11,
  439. number: number,
  440. product_id: item.id,
  441. };
  442. // if (this.deviceType === "ios") {
  443. // // alert('ios begin pay..');
  444. // let cookie = this.getSign();
  445. // let res = await this.$axios.$post("/api/vip/pay", {
  446. // product_type: 11,
  447. // number: number,
  448. // product_id: item.id,
  449. // channel: "apple",
  450. // needLogin: true,
  451. // ...cookie
  452. // });
  453. // if (res && res.data) {
  454. // query = Object.assign({}, query, res.data);
  455. // location.href = "proginn://pay?" + qs.stringify(query);
  456. // }
  457. // } else {
  458. location.href = "proginn://pay?" + qs.stringify(query);
  459. // }
  460. },
  461. /**
  462. * 手指右划
  463. */
  464. swipeRight() {
  465. this.currentCom = false;
  466. },
  467. /**
  468. * 手指左划
  469. */
  470. swipeLeft() {
  471. this.currentCom = true;
  472. },
  473. touchStart(e) {
  474. touchX = e.touches[0].clientX;
  475. },
  476. touchEnd(e) {
  477. var offsetX = e.changedTouches[0].clientX - touchX;
  478. if (offsetX < -50) this.swipeLeft();
  479. else if (offsetX > 50) this.swipeRight();
  480. },
  481. handleSwitchClick(index) {
  482. this.active = index;
  483. if (bridge.isInApp) {
  484. if (this.active === 0) {
  485. bridge.setNavigationBarColor('#B07F29');
  486. } else if (this.active === 1) {
  487. bridge.setNavigationBarColor('#308EFF');
  488. } else if (this.active === 2) {
  489. bridge.setNavigationBarColor('#00BF66');
  490. }
  491. }
  492. },
  493. viewRateDetail() {
  494. if (bridge.isAndroid) {
  495. location.href = `proginn://webview?url=${this.$store.state.domainConfig.siteUrl}/type/vip/orderRateDetail&title=会员中心`
  496. } else
  497. location.href = "/type/vip/orderRateDetail";
  498. },
  499. async getVipInfo() {
  500. let _this = this;
  501. let res = await this.$axios.$post(`/api/user/getUserVipInfo`, { notShowError: true });
  502. if (Number(res.status) === 1) {
  503. console.log("6666", res);
  504. this.vipInfo = res.data;
  505. }
  506. },
  507. async getList() {
  508. let extraHeaders = {};
  509. if (this.deviceType === "ios") {
  510. extraHeaders = this.getSign();
  511. }
  512. let res = await this.$axios.$post(`/api/vip/getList`, extraHeaders);
  513. this.vipList = res.data;
  514. },
  515. /**
  516. * 点击开通/续费开发者会员
  517. */
  518. handleClickBuyDev () {
  519. this.$message('开通/续费开发者会员,跳转端原生页面')
  520. }
  521. },
  522. };
  523. </script>
  524. <style scoped lang="scss">
  525. @import "../../../assets/css/scssCommon.scss";
  526. @import "../../../assets/css/public.css";
  527. .wrapper {
  528. overflow: hidden;
  529. margin-top: 0 !important;
  530. width: 100%;
  531. background-color: #f4f5f9;
  532. }
  533. .switch-bar {
  534. display: flex;
  535. background-color: #d89823;
  536. }
  537. .switch-bar-brown {
  538. background-color: #d89823;
  539. }
  540. .switch-bar-blue {
  541. background-color: #308eff;
  542. }
  543. .switch-bar-green {
  544. background-color: #00bf66;
  545. }
  546. .switch-item {
  547. flex: 1;
  548. padding-top: remtovw(0.4);
  549. padding-bottom: remtovw(0.15);
  550. }
  551. .switch-item .switch-item-title {
  552. line-height: remtovw(0.42);
  553. text-align: center;
  554. font-size: remtovw(0.3);
  555. color: #ffffff;
  556. }
  557. .switch-item .switch-item-border {
  558. margin: remtovw(0.18) auto 0;
  559. width: remtovw(0.6);
  560. height: remtovw(0.06);
  561. background-color: transparent;
  562. }
  563. .switch-item-active .switch-item-title {
  564. font-weight: 600;
  565. }
  566. .switch-item-active .switch-item-border {
  567. background-color: #ffffff;
  568. }
  569. .banner-brown-wrapper {
  570. background-color: #d89823;
  571. }
  572. .banner-brown {
  573. overflow: hidden;
  574. margin: 0 auto;
  575. width: remtovw(7);
  576. height: remtovw(2.9);
  577. background-image: url("~@/assets/img/vip/banner_brown.png");
  578. background-size: 100%;
  579. background-repeat: no-repeat;
  580. }
  581. .banner-blue-wrapper {
  582. background-color: #308eff;
  583. }
  584. .banner-blue {
  585. overflow: hidden;
  586. margin: 0 auto;
  587. width: remtovw(7);
  588. height: remtovw(2.9);
  589. background-image: url("~@/assets/img/vip/banner_brown.png");
  590. background-size: 100%;
  591. background-repeat: no-repeat;
  592. }
  593. .banner-green-wrapper {
  594. background-color: #00bf66;
  595. }
  596. .banner-green {
  597. overflow: hidden;
  598. margin: 0 auto;
  599. width: remtovw(7);
  600. height: remtovw(2.9);
  601. background-image: url("~@/assets/img/vip/banner_green.png");
  602. background-size: 100%;
  603. background-repeat: no-repeat;
  604. }
  605. .banner-content {
  606. margin-top: remtovw(1.12);
  607. display: flex;
  608. align-items: center;
  609. }
  610. .avatar {
  611. position: relative;
  612. margin-left: remtovw(0.32);
  613. width: remtovw(1.1);
  614. height: remtovw(1.1);
  615. }
  616. .avatar img {
  617. width: 100%;
  618. height: 100%;
  619. border-radius: 50%;
  620. border: remtovw(0.03) solid #e1a83f;
  621. }
  622. .name-wrapper {
  623. flex: 1;
  624. margin-left: remtovw(0.23);
  625. }
  626. .name {
  627. line-height: remtovw(0.48);
  628. font-weight: 500;
  629. font-size: remtovw(0.34);
  630. color: #222222;
  631. }
  632. .validity {
  633. margin-top: remtovw(0.02);
  634. line-height: remtovw(0.3);
  635. font-size: remtovw(0.22);
  636. color: rgba(34, 34, 34, 0.6);
  637. }
  638. .renew-btn {
  639. margin-right: remtovw(0.3);
  640. width: remtovw(1.54);
  641. height: remtovw(0.64);
  642. border-radius: remtovw(0.32);
  643. background-color: #d89823;
  644. line-height: remtovw(0.64);
  645. font-weight: 600;
  646. text-align: center;
  647. font-size: remtovw(0.26);
  648. color: #ffffff;
  649. }
  650. .content {
  651. overflow: hidden;
  652. background-color: #ffffff;
  653. }
  654. .title-wrapper {
  655. margin: 0 auto;
  656. width: remtovw(7.1);
  657. padding-bottom: remtovw(0.2);
  658. display: flex;
  659. }
  660. .title {
  661. flex: 1;
  662. margin-top: remtovw(0.17);
  663. margin-left: remtovw(0.24);
  664. line-height: remtovw(0.75);
  665. font-weight: 600;
  666. font-size: remtovw(0.29);
  667. color: #222222;
  668. }
  669. .price-wrapper {
  670. margin-top: remtovw(0.23);
  671. text-align: right;
  672. }
  673. .monthly-price-wrapper {
  674. display: flex;
  675. }
  676. .monthly-origin-price {
  677. margin-top: remtovw(0.17);
  678. line-height: remtovw(0.3);
  679. font-size: remtovw(0.22);
  680. color: #919aa7;
  681. text-decoration: line-through;
  682. }
  683. .monthly-discount-price {
  684. margin-left: remtovw(0.07);
  685. line-height: remtovw(0.62);
  686. font-size: remtovw(0.24);
  687. color: #222222;
  688. }
  689. .monthly-discount-price span {
  690. font-weight: 600;
  691. font-size: remtovw(0.45);
  692. }
  693. .quarterly-price {
  694. margin-top: remtovw(0.01);
  695. margin-right: remtovw(0.05);
  696. line-height: remtovw(0.33);
  697. font-size: remtovw(0.24);
  698. color: #666666;
  699. }
  700. .quarterly-price span {
  701. color: #333333;
  702. }
  703. .list {
  704. padding-top: remtovw(0.3);
  705. padding-bottom: remtovw(0.33);
  706. }
  707. .item {
  708. margin: 0 auto;
  709. width: remtovw(7.1);
  710. display: flex;
  711. align-items: center;
  712. }
  713. .item-title {
  714. flex: 1;
  715. line-height: remtovw(0.74);
  716. font-size: remtovw(0.28);
  717. color: #1d2a3a;
  718. }
  719. .item-discount {
  720. width: remtovw(1.02);
  721. height: remtovw(0.44);
  722. background-image: url("~@/assets/img/vip/icon_discount_brown.png");
  723. background-size: 100%;
  724. background-repeat: no-repeat;
  725. line-height: remtovw(0.44);
  726. text-indent: remtovw(0.16);
  727. font-size: remtovw(0.22);
  728. color: #e1a83f;
  729. }
  730. .item-include {
  731. margin-right: remtovw(0.35);
  732. width: remtovw(0.3);
  733. height: remtovw(0.2);
  734. }
  735. .tips-wrapper {
  736. overflow: hidden;
  737. margin-top: 10px;
  738. padding-bottom: remtovw(0.39);
  739. background-color: #ffffff;
  740. }
  741. .tips-title {
  742. margin-top: remtovw(0.36);
  743. margin-left: remtovw(0.2);
  744. line-height: remtovw(0.4);
  745. font-weight: 600;
  746. font-size: remtovw(0.28);
  747. color: #666666;
  748. }
  749. .tips-content {
  750. margin-top: remtovw(0.18);
  751. margin-left: remtovw(0.2);
  752. width: remtovw(6.8);
  753. line-height: remtovw(0.56);
  754. font-size: remtovw(0.26);
  755. color: #999999;
  756. }
  757. .green {
  758. background-color: #00bf66;
  759. }
  760. .yellow {
  761. background-color: #d89823;
  762. }
  763. .blue {
  764. background-color: #308eff;
  765. }
  766. .dev-wrapper {
  767. margin: 0;
  768. padding-bottom: 84px;
  769. }
  770. .buy-dev-btn {
  771. position: fixed;
  772. z-index: 11;
  773. width: calc(100% - 20px);
  774. height: 40px;
  775. line-height: 40px;
  776. left: 10px;
  777. bottom: 32px;
  778. opacity: 1;
  779. background: #e1a83f;
  780. border-radius: 6px;
  781. font-size: 15px;
  782. font-family: PingFangSC, PingFangSC-Medium;
  783. font-weight: 500;
  784. text-align: center;
  785. color: #ffffff;
  786. cursor: pointer;
  787. }
  788. </style>