mobile.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832
  1. <template>
  2. <div class="wrapper" v-if="detail">
  3. <!--顶部tab-->
  4. <div class="switch-bar" :class="active===0?'switch-bar-brown':current===0?'switch-bar-blue':'switch-bar-green'">
  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 === 1 ? endTimeCalc : '暂未开通' }}</div>
  51. </div>
  52. <div
  53. class="renew-btn"
  54. :class="vipColor"
  55. @click="clickPay('com')"
  56. >{{ vipType === 1 ? '续费' : '开通' }}
  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 === 3 ? endTimeCalc : '暂未开通' }}</div>
  77. </div>
  78. <div
  79. class="renew-btn"
  80. :class="vipColor"
  81. @click="clickPay('pre')"
  82. >{{ vipType === 3 ? '续费' : '开通' }}
  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 && this.current === 0) {
  393. bridge.setNavigationBarColor('#308EFF');
  394. } else if (this.active === 1 && this.current === 1) {
  395. bridge.setNavigationBarColor('#00BF66');
  396. }
  397. }
  398. },
  399. methods: {
  400. async clickPay(type) {
  401. if (!this.userInfo || !this.userInfo.nickname) {
  402. if (this.deviceType === "ios" || this.deviceType === "android") {
  403. location.href = "proginn://login?backToPage=true";
  404. } else {
  405. location.href = this.$store.state.domainConfig.siteUrl + '/?loginbox=show&next=' + encodeURIComponent(location.href)
  406. }
  407. return
  408. }
  409. this.type = type;
  410. this.buyDialog = true;
  411. // location.href = `/vip/pay?product_id=${item.id}&number=3&next=/type/vip/`;
  412. },
  413. handleClose() {
  414. this.buyDialog = false;
  415. },
  416. async gotoPay(number) {
  417. const item = this[this.type];
  418. let query = {
  419. product_type: 11,
  420. number: number,
  421. product_id: item.id,
  422. };
  423. // if (this.deviceType === "ios") {
  424. // // alert('ios begin pay..');
  425. // let cookie = this.getSign();
  426. // let res = await this.$axios.$post("/api/vip/pay", {
  427. // product_type: 11,
  428. // number: number,
  429. // product_id: item.id,
  430. // channel: "apple",
  431. // needLogin: true,
  432. // ...cookie
  433. // });
  434. // if (res && res.data) {
  435. // query = Object.assign({}, query, res.data);
  436. // location.href = "proginn://pay?" + qs.stringify(query);
  437. // }
  438. // } else {
  439. location.href = "proginn://pay?" + qs.stringify(query);
  440. // }
  441. },
  442. /**
  443. * 手指右划
  444. */
  445. swipeRight() {
  446. this.currentCom = false;
  447. },
  448. /**
  449. * 手指左划
  450. */
  451. swipeLeft() {
  452. this.currentCom = true;
  453. },
  454. touchStart(e) {
  455. touchX = e.touches[0].clientX;
  456. },
  457. touchEnd(e) {
  458. var offsetX = e.changedTouches[0].clientX - touchX;
  459. if (offsetX < -50) this.swipeLeft();
  460. else if (offsetX > 50) this.swipeRight();
  461. },
  462. handleSwitchClick(index) {
  463. this.active = index;
  464. if (bridge.isInApp) {
  465. if (this.active === 0) {
  466. bridge.setNavigationBarColor('#B07F29');
  467. } else if (this.active === 1) {
  468. bridge.setNavigationBarColor('#308EFF');
  469. } else if (this.active === 2) {
  470. bridge.setNavigationBarColor('#00BF66');
  471. }
  472. }
  473. },
  474. viewRateDetail() {
  475. if (bridge.isAndroid) {
  476. location.href = `proginn://webview?url=${this.$store.state.domainConfig.siteUrl}/type/vip/orderRateDetail&title=会员中心`
  477. } else
  478. location.href = "/type/vip/orderRateDetail";
  479. },
  480. async getVipInfo() {
  481. let _this = this;
  482. let res = await this.$axios.$post(`/api/user/getUserVipInfo`, { notShowError: true });
  483. if (Number(res.status) === 1) {
  484. console.log("6666", res);
  485. this.vipInfo = res.data;
  486. }
  487. },
  488. async getList() {
  489. let extraHeaders = {};
  490. if (this.deviceType === "ios") {
  491. extraHeaders = this.getSign();
  492. }
  493. let res = await this.$axios.$post(`/api/vip/getList`, extraHeaders);
  494. this.vipList = res.data;
  495. },
  496. /**
  497. * 点击开通/续费开发者会员
  498. */
  499. handleClickBuyDev () {
  500. this.$message('开通/续费开发者会员,跳转端原生页面')
  501. }
  502. },
  503. };
  504. </script>
  505. <style scoped lang="scss">
  506. @import "../../../assets/css/scssCommon.scss";
  507. @import "../../../assets/css/public.css";
  508. .wrapper {
  509. overflow: hidden;
  510. margin-top: 0 !important;
  511. width: 100%;
  512. background-color: #f4f5f9;
  513. }
  514. .switch-bar {
  515. display: flex;
  516. background-color: #d89823;
  517. }
  518. .switch-bar-brown {
  519. background-color: #d89823;
  520. }
  521. .switch-bar-blue {
  522. background-color: #308eff;
  523. }
  524. .switch-bar-green {
  525. background-color: #00bf66;
  526. }
  527. .switch-item {
  528. flex: 1;
  529. padding-top: remtovw(0.4);
  530. padding-bottom: remtovw(0.15);
  531. }
  532. .switch-item .switch-item-title {
  533. line-height: remtovw(0.42);
  534. text-align: center;
  535. font-size: remtovw(0.3);
  536. color: #ffffff;
  537. }
  538. .switch-item .switch-item-border {
  539. margin: remtovw(0.18) auto 0;
  540. width: remtovw(0.6);
  541. height: remtovw(0.06);
  542. background-color: transparent;
  543. }
  544. .switch-item-active .switch-item-title {
  545. font-weight: 600;
  546. }
  547. .switch-item-active .switch-item-border {
  548. background-color: #ffffff;
  549. }
  550. .banner-brown-wrapper {
  551. background-color: #d89823;
  552. }
  553. .banner-brown {
  554. overflow: hidden;
  555. margin: 0 auto;
  556. width: remtovw(7);
  557. height: remtovw(2.9);
  558. background-image: url("~@/assets/img/vip/banner_brown.png");
  559. background-size: 100%;
  560. background-repeat: no-repeat;
  561. }
  562. .banner-blue-wrapper {
  563. background-color: #308eff;
  564. }
  565. .banner-blue {
  566. overflow: hidden;
  567. margin: 0 auto;
  568. width: remtovw(7);
  569. height: remtovw(2.9);
  570. background-image: url("~@/assets/img/vip/banner_brown.png");
  571. background-size: 100%;
  572. background-repeat: no-repeat;
  573. }
  574. .banner-green-wrapper {
  575. background-color: #00bf66;
  576. }
  577. .banner-green {
  578. overflow: hidden;
  579. margin: 0 auto;
  580. width: remtovw(7);
  581. height: remtovw(2.9);
  582. background-image: url("~@/assets/img/vip/banner_green.png");
  583. background-size: 100%;
  584. background-repeat: no-repeat;
  585. }
  586. .banner-content {
  587. margin-top: remtovw(1.12);
  588. display: flex;
  589. align-items: center;
  590. }
  591. .avatar {
  592. position: relative;
  593. margin-left: remtovw(0.32);
  594. width: remtovw(1.1);
  595. height: remtovw(1.1);
  596. }
  597. .avatar img {
  598. width: 100%;
  599. height: 100%;
  600. border-radius: 50%;
  601. border: remtovw(0.03) solid #e1a83f;
  602. }
  603. .name-wrapper {
  604. flex: 1;
  605. margin-left: remtovw(0.23);
  606. }
  607. .name {
  608. line-height: remtovw(0.48);
  609. font-weight: 500;
  610. font-size: remtovw(0.34);
  611. color: #222222;
  612. }
  613. .validity {
  614. margin-top: remtovw(0.02);
  615. line-height: remtovw(0.3);
  616. font-size: remtovw(0.22);
  617. color: rgba(34, 34, 34, 0.6);
  618. }
  619. .renew-btn {
  620. margin-right: remtovw(0.3);
  621. width: remtovw(1.54);
  622. height: remtovw(0.64);
  623. border-radius: remtovw(0.32);
  624. background-color: #d89823;
  625. line-height: remtovw(0.64);
  626. font-weight: 600;
  627. text-align: center;
  628. font-size: remtovw(0.26);
  629. color: #ffffff;
  630. }
  631. .content {
  632. overflow: hidden;
  633. background-color: #ffffff;
  634. }
  635. .title-wrapper {
  636. margin: 0 auto;
  637. width: remtovw(7.1);
  638. padding-bottom: remtovw(0.2);
  639. display: flex;
  640. }
  641. .title {
  642. flex: 1;
  643. margin-top: remtovw(0.17);
  644. margin-left: remtovw(0.24);
  645. line-height: remtovw(0.75);
  646. font-weight: 600;
  647. font-size: remtovw(0.29);
  648. color: #222222;
  649. }
  650. .price-wrapper {
  651. margin-top: remtovw(0.23);
  652. text-align: right;
  653. }
  654. .monthly-price-wrapper {
  655. display: flex;
  656. }
  657. .monthly-origin-price {
  658. margin-top: remtovw(0.17);
  659. line-height: remtovw(0.3);
  660. font-size: remtovw(0.22);
  661. color: #919aa7;
  662. text-decoration: line-through;
  663. }
  664. .monthly-discount-price {
  665. margin-left: remtovw(0.07);
  666. line-height: remtovw(0.62);
  667. font-size: remtovw(0.24);
  668. color: #222222;
  669. }
  670. .monthly-discount-price span {
  671. font-weight: 600;
  672. font-size: remtovw(0.45);
  673. }
  674. .quarterly-price {
  675. margin-top: remtovw(0.01);
  676. margin-right: remtovw(0.05);
  677. line-height: remtovw(0.33);
  678. font-size: remtovw(0.24);
  679. color: #666666;
  680. }
  681. .quarterly-price span {
  682. color: #333333;
  683. }
  684. .list {
  685. padding-top: remtovw(0.3);
  686. padding-bottom: remtovw(0.33);
  687. }
  688. .item {
  689. margin: 0 auto;
  690. width: remtovw(7.1);
  691. display: flex;
  692. align-items: center;
  693. }
  694. .item-title {
  695. flex: 1;
  696. line-height: remtovw(0.74);
  697. font-size: remtovw(0.28);
  698. color: #1d2a3a;
  699. }
  700. .item-discount {
  701. width: remtovw(1.02);
  702. height: remtovw(0.44);
  703. background-image: url("~@/assets/img/vip/icon_discount_brown.png");
  704. background-size: 100%;
  705. background-repeat: no-repeat;
  706. line-height: remtovw(0.44);
  707. text-indent: remtovw(0.16);
  708. font-size: remtovw(0.22);
  709. color: #e1a83f;
  710. }
  711. .item-include {
  712. margin-right: remtovw(0.35);
  713. width: remtovw(0.3);
  714. height: remtovw(0.2);
  715. }
  716. .tips-wrapper {
  717. overflow: hidden;
  718. margin-top: 10px;
  719. padding-bottom: remtovw(0.39);
  720. background-color: #ffffff;
  721. }
  722. .tips-title {
  723. margin-top: remtovw(0.36);
  724. margin-left: remtovw(0.2);
  725. line-height: remtovw(0.4);
  726. font-weight: 600;
  727. font-size: remtovw(0.28);
  728. color: #666666;
  729. }
  730. .tips-content {
  731. margin-top: remtovw(0.18);
  732. margin-left: remtovw(0.2);
  733. width: remtovw(6.8);
  734. line-height: remtovw(0.56);
  735. font-size: remtovw(0.26);
  736. color: #999999;
  737. }
  738. .green {
  739. background-color: #00bf66;
  740. }
  741. .yellow {
  742. background-color: #d89823;
  743. }
  744. .blue {
  745. background-color: #308eff;
  746. }
  747. .dev-wrapper {
  748. margin: 0;
  749. padding-bottom: 84px;
  750. }
  751. .buy-dev-btn {
  752. position: fixed;
  753. z-index: 11;
  754. width: calc(100% - 20px);
  755. height: 40px;
  756. line-height: 40px;
  757. left: 10px;
  758. bottom: 32px;
  759. opacity: 1;
  760. background: #e1a83f;
  761. border-radius: 6px;
  762. font-size: 15px;
  763. font-family: PingFangSC, PingFangSC-Medium;
  764. font-weight: 500;
  765. text-align: center;
  766. color: #ffffff;
  767. cursor: pointer;
  768. }
  769. </style>