bargainingAssistance.vue 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239
  1. <template>
  2. <div class="bargaining-assistance">
  3. <!-- 邀请人提示 -->
  4. <div class="inviter-tips" v-if="+type">
  5. <div>恭喜您选到喜欢的云手机</div>
  6. <div>您一定要免费带走</div>
  7. 好友注册获得助力 好友下单加速助力
  8. </div>
  9. <!-- 被邀请人提示 -->
  10. <div v-else class="invitee-tips">
  11. <div class="invitee-tips-user">用户01</div>
  12. <div class="invitee-tips-text">
  13. 亲,我在用双子星云手机,可以<span>24小时运行游戏/聊天/看视频</span>,双子星云手机已经帮我节省<span>10086小时</span>,我得任务全做完了,游戏升级哇哇快,现在官方活动领云机,麻烦帮我助力!
  14. </div>
  15. </div>
  16. <!-- 砍价进度 -->
  17. <div class="bargaining-assistance-main">
  18. <!-- 被邀请人助力、邀请人砍价 -->
  19. <template v-if="true">
  20. <div class="package-name">
  21. <span> {{ info.phoneType }}{{ info.validityPeriod }}天</span>
  22. </div>
  23. <div class="package-price"><span>¥</span>{{ info.totalAmount }}</div>
  24. <div class="package-progress">
  25. <customProgress v-model="info.schedule" />
  26. </div>
  27. <div class="package-tips">
  28. <div>
  29. 仅差<span>{{ info.remainingPrice }}元</span>
  30. </div>
  31. <div>
  32. 必得价值<span>{{ info.totalAmount }}元</span>的免费云机
  33. </div>
  34. </div>
  35. <div
  36. class="package-btn"
  37. :style="!+type ? 'margin-bottom: 24px;' : ''"
  38. @click="btnFun"
  39. >
  40. {{
  41. +type
  42. ? info.bargainingStatus === 1
  43. ? `继续砍价${info.remainingQuantity || 0}次`
  44. : '邀请好友助力免单'
  45. : '帮他助力'
  46. }}
  47. </div>
  48. <div class="package-expire" v-if="+type && time">
  49. 免单失效时间:<van-count-down :time="time" />
  50. </div>
  51. </template>
  52. <!-- 被邀请人点击助力之后领取手机的页面 -->
  53. <template v-else>
  54. <div class="invitee-to-claim">
  55. <div class="invitee-to-claim_btn">免费领取</div>
  56. </div>
  57. </template>
  58. </div>
  59. <!-- 邀请人显示 -->
  60. <template v-if="+type">
  61. <!-- 砍价记录 -->
  62. <div class="bargaining-record">
  63. <div class="title">砍价记录</div>
  64. <div class="container">
  65. <loadList
  66. ref="assistRecodeList"
  67. url="activity/v5/assist/operation/assistRecodeList"
  68. description="暂无砍价记录"
  69. >
  70. <template #default="{ list }">
  71. <div
  72. v-for="item in list"
  73. :key="item.id"
  74. class="bargaining-record-item"
  75. >
  76. <div class="bargaining-record-item_info">
  77. <div>{{ item.surfaceName }}</div>
  78. <div>
  79. 道具砍掉<span>{{ item.assistPrice }}元</span>
  80. </div>
  81. </div>
  82. </div>
  83. </template>
  84. </loadList>
  85. </div>
  86. </div>
  87. <!-- 云机发放记录 -->
  88. <div class="distribution-records">
  89. <div class="title">云机发放记录</div>
  90. <div class="container">
  91. <div>
  92. <div>序号</div>
  93. <div>云机名称</div>
  94. <div>套餐类型</div>
  95. <div>云机时长</div>
  96. </div>
  97. <div>
  98. <loadList
  99. ref="assistGetPhoneRecode"
  100. url="activity/v5/assist/operation/assistGetPhoneRecode"
  101. description="当前您还没有白嫖到云手机"
  102. >
  103. <template #default="{ list }">
  104. <div
  105. v-for="(item, index) in list"
  106. :key="item.id"
  107. class="distribution-records-item"
  108. >
  109. <div>{{ index + 1 }}</div>
  110. <div>{{ item.diskName }}</div>
  111. <div>{{ item.phoneTypeStr }}</div>
  112. <div>{{ item.validTime }}天</div>
  113. </div>
  114. </template>
  115. </loadList>
  116. </div>
  117. </div>
  118. </div>
  119. </template>
  120. <!-- 参加活动的所有信息 -->
  121. <template v-if="barrageList.length">
  122. <div class="barrage"></div>
  123. </template>
  124. <div class="rule" @click="ruleVisible = true" v-if="+type">规则</div>
  125. <!-- 规则弹窗 -->
  126. <van-dialog v-model="ruleVisible" :showConfirmButton="false">
  127. <div class="rule-title">活动规则</div>
  128. <div class="rule-content">
  129. <div v-html="ruleHtml"></div>
  130. </div>
  131. <div class="rule-close">
  132. <van-icon name="cross" @click="ruleVisible = false" />
  133. </div>
  134. </van-dialog>
  135. <!-- 邀请人首次到砍价的页面的弹窗 -->
  136. <van-dialog v-model="bargainingVisible" :showConfirmButton="false">
  137. <div
  138. class="bargaining-img"
  139. @click="bargainingFun(true)"
  140. v-if="!bargainingTipsBool"
  141. ></div>
  142. <template v-else>
  143. <div class="bargaining-amount">
  144. <div class="bargaining-amount-text">
  145. 恭喜您,砍价成功<span>{{ bargainingAmount }}元</span>
  146. </div>
  147. <div class="bargaining-amount-img"></div>
  148. </div>
  149. </template>
  150. </van-dialog>
  151. <!-- 退出活动页的弹窗 -->
  152. <van-dialog v-model="exitVisible" :showConfirmButton="false">
  153. <div class="exit">
  154. <div class="exit-content">
  155. <div>确定要退出吗?</div>
  156. <div>
  157. 仅差<span>{{ info.remainingPrice }}元</span>免费带走云机
  158. </div>
  159. <div class="exit-content-progress">
  160. <customProgress v-model="info.schedule" />
  161. </div>
  162. <div class="exit-content-btn">
  163. <img
  164. @click="exitVisible = false"
  165. src="@/assets/image/claimCloudPhone/Inviting-others-img.png"
  166. alt=""
  167. />
  168. <div class="exit-content-btn_leave" @click="leaveFun">狠心离开</div>
  169. </div>
  170. </div>
  171. <img src="@/assets/image/claimCloudPhone/inviter-exit.png" alt="" />
  172. </div>
  173. </van-dialog>
  174. <!-- 砍价成功的弹窗-->
  175. <van-dialog
  176. v-model="successfulBargainingVisible"
  177. :showConfirmButton="false"
  178. >
  179. <div class="bargaining-success">
  180. <div class="bargaining-success-title">恭喜您,砍价成功</div>
  181. <div class="bargaining-success-tips">
  182. 您的云手机【获取云手机名称】发放成功/续费成功
  183. </div>
  184. <div class="bargaining-success-btn">
  185. <div @click="claimTheNextOne">免费领下一台云机</div>
  186. <div @click="leaveFun">返回云手机首页</div>
  187. </div>
  188. </div>
  189. </van-dialog>
  190. <!-- 免单时间过期弹窗 -->
  191. <van-dialog v-model="expireVisible" :showConfirmButton="false">
  192. <div class="expire">
  193. <div class="expire-btn" @click="claimTheNextOne">免费领下一台云机</div>
  194. </div>
  195. </van-dialog>
  196. <!-- 被邀请人登录 -->
  197. <van-dialog v-model="loginVisible" :showConfirmButton="false">
  198. <div class="login">
  199. <div class="login-title">双子星快捷登录</div>
  200. <van-field placeholder="手机号" />
  201. <van-field placeholder="验证码">
  202. <template #button>
  203. <div class="login-code">获取验证码</div>
  204. </template>
  205. </van-field>
  206. <van-button color="#3666F2">登录</van-button>
  207. <div class="login-agreement">
  208. <van-checkbox icon-size="16px" v-model="agreementBool">
  209. 通过登录即可完成注册,成为我们的新用户登录后表示同意
  210. <span>用户协议</span>
  211. </van-checkbox>
  212. </div>
  213. </div>
  214. </van-dialog>
  215. </div>
  216. </template>
  217. <script>
  218. import customProgress from './customProgress.vue';
  219. import loadList from '@/components/loadList';
  220. import { fileKeyToUrl } from '@/plugins/file-center.js';
  221. export default {
  222. props: {
  223. operateActivityId: {
  224. type: [String, Number],
  225. default: '',
  226. },
  227. type: {
  228. type: [Number, String],
  229. default: '',
  230. },
  231. getSystemTime: {
  232. type: Function,
  233. default: () => {
  234. return () => {};
  235. },
  236. },
  237. leaveFun: {
  238. type: Function,
  239. default: () => {
  240. return () => {};
  241. },
  242. },
  243. wxIntercept: {
  244. type: Function,
  245. default: () => {
  246. return () => {};
  247. },
  248. },
  249. },
  250. data() {
  251. return {
  252. total: 50, // 砍价百分比
  253. barrageList: [], // 滚动轮播数据
  254. ruleVisible: false, // 规则弹窗
  255. bargainingVisible: false, // 首次砍价弹窗
  256. bargainingTipsBool: false, // 是否切换成砍价金额的页面
  257. exitVisible: false, // 退出弹窗
  258. successfulBargainingVisible: false, // 砍价成功弹窗
  259. expireVisible: false, // 免单时间过期弹窗
  260. loginVisible: false, // 被邀请人登录框
  261. agreementBool: false, // 是否勾选协议
  262. ruleHtml: '', // 规则内容
  263. info: {}, // 砍价相关信息
  264. bargainingAmount: '', // 砍价金额
  265. systemTime: '', // 系统时间
  266. };
  267. },
  268. components: {
  269. customProgress,
  270. loadList,
  271. },
  272. mounted() {
  273. console.log(process.env.API_URL);
  274. if (+this.type === 1 || +this.type === 2) {
  275. this.getRule();
  276. this.getAssistAwardRecode();
  277. }
  278. this.bargainingStatus(true);
  279. switch (+this.type) {
  280. case 3: // 成功,领取下一台云机界面
  281. this.successfulBargainingVisible = true;
  282. break;
  283. case 4: // 失败,领取下一台云机界面
  284. this.expireVisible = true;
  285. break;
  286. }
  287. },
  288. computed: {
  289. time() {
  290. const { validityPeriodTimeStamp = 0 } = this.info;
  291. return validityPeriodTimeStamp
  292. ? validityPeriodTimeStamp - this.systemTime * 1000
  293. : 0;
  294. },
  295. },
  296. methods: {
  297. // 轮播活动参加的人的信息
  298. startBarrage() {
  299. const barrage = document.querySelector('.barrage');
  300. if (!barrage.childNodes.length) {
  301. const data = this.barrageList[0];
  302. this.barrageList.shift();
  303. this.barrageList.push(data);
  304. barrage.appendChild(writeIn(data));
  305. }
  306. const first = barrage.childNodes[0];
  307. setTimeout(() => {
  308. first.className = 'start';
  309. first.addEventListener('animationstart', () => {
  310. const data = this.barrageList[0];
  311. this.barrageList.shift();
  312. this.barrageList.push(data);
  313. const div = writeIn(data);
  314. barrage.appendChild(div);
  315. setTimeout(() => {
  316. div.style = 'opacity: 1';
  317. }, 100);
  318. });
  319. first.addEventListener('animationend', () => {
  320. barrage.removeChild(first);
  321. this.startBarrage();
  322. });
  323. }, 1000);
  324. function writeIn({ price, phoneNumber, phoneType, duration }) {
  325. const div = document.createElement('div');
  326. div.style = 'opacity: 0';
  327. div.innerHTML = `<div>
  328. <div>${phoneNumber}</div>
  329. <span> 领取了6次 </span>
  330. </div>
  331. <div>${phoneType}${duration}天,价值<span>${price}元</span></div>`;
  332. return div;
  333. }
  334. },
  335. bargainingFun(bool = false) {
  336. // 首次砍价的时候进此判断
  337. if (bool) {
  338. this.$toast.loading({
  339. message: '加载中...',
  340. forbidClick: true,
  341. duration: 0,
  342. });
  343. const { menuRuleId, userCardId } = this.$route.query;
  344. const obj = {
  345. operateActivityId: this.operateActivityId,
  346. menuRuleId,
  347. };
  348. // 如果是续费,选择了对应云机,需要传云机id
  349. if (userCardId) obj.userCardId = userCardId;
  350. this.$axios
  351. .$post('activity/v5/assist/bargaining/userSelectedPackage', obj)
  352. .then((res) => {
  353. if (res.success) {
  354. // 砍价金额
  355. this.bargainingAmount = res.data.fristKnifeAmount;
  356. setTimeout(() => {
  357. this.bargainingTipsBool = true;
  358. });
  359. // 重新获取用户最新的数据
  360. setTimeout(this.bargainingStatus, 1000);
  361. }
  362. })
  363. .catch((error) => {
  364. setTimeout(() => {
  365. this.$toast(error.message);
  366. });
  367. })
  368. .finally(() => {
  369. this.$toast.clear();
  370. });
  371. return;
  372. }
  373. this.chopAKnife();
  374. },
  375. // 获取规则
  376. getRule() {
  377. this.$axios
  378. .$get('public/v4/agreement/content', {
  379. params: { agreementCoding: 'YDQLBHD10000' },
  380. })
  381. .then((res) => {
  382. if (res.success) {
  383. const html = res.data.content;
  384. const rx = /<body[^>]*>([\s\S]+?)<\/body>/i;
  385. let m = rx.exec(html);
  386. if (m) {
  387. m = m[1];
  388. }
  389. this.ruleHtml = m;
  390. }
  391. });
  392. },
  393. // 获取用户数据接口
  394. bargainingStatus(bool = false) {
  395. if (bool) {
  396. this.$toast.loading({
  397. message: '加载中...',
  398. forbidClick: true,
  399. duration: 0,
  400. });
  401. }
  402. this.$axios
  403. .$get('activity/v5/assist/bargaining/current/bargainingStatus')
  404. .then(async (res) => {
  405. if (res.success) {
  406. this.info = res.data;
  407. const data = await this.getSystemTime();
  408. this.systemTime = data.data;
  409. if (this.info.bargainingStatus === 0) {
  410. this.bargainingVisible = true;
  411. }
  412. // 如果是安卓客户端登录的情况且bargainingStatus为 1 2 ,
  413. if (
  414. this.info.bargainingStatus === 1 ||
  415. this.info.bargainingStatus === 2
  416. ) {
  417. // 对安卓返回键做拦截
  418. if (
  419. (this.$userAgent.isSzx || this.$userAgent.isSzxBrowser) &&
  420. this.$userAgent.isAndroid
  421. ) {
  422. window.native.webBackStatus(true);
  423. window.appGoBackCallback = () => {
  424. this.exitVisible = true;
  425. };
  426. return;
  427. }
  428. // 对微信做拦截
  429. if (this.$userAgent.isWx) {
  430. this.wxIntercept(() => {
  431. history.pushState(null, null, document.URL);
  432. this.exitVisible = true;
  433. });
  434. return;
  435. }
  436. }
  437. if (
  438. [1, 2].includes(this.info.bargainingStatus) &&
  439. this.$refs.assistRecodeList &&
  440. this.$refs.assistGetPhoneRecode
  441. ) {
  442. this.$refs.assistRecodeList.data = [];
  443. this.$refs.assistGetPhoneRecode.data = [];
  444. this.$refs.assistRecodeList.list();
  445. this.$refs.assistGetPhoneRecode.list();
  446. }
  447. }
  448. })
  449. .catch((error) => {
  450. this.$toast(error.message);
  451. })
  452. .finally(() => {
  453. if (this.info.bargainingStatus !== 0) this.bargainingVisible = false;
  454. this.$toast.clear();
  455. });
  456. },
  457. // 滚动的相关数据
  458. getAssistAwardRecode() {
  459. this.$axios
  460. .$get('activity/v5/assist/operation/getAssistAwardRecode', {})
  461. .then((res) => {
  462. if (res.success) {
  463. this.barrageList = res.data;
  464. setTimeout(() => {
  465. this.barrageList.length && this.startBarrage();
  466. });
  467. }
  468. });
  469. },
  470. // 领取下一台手机
  471. claimTheNextOne() {
  472. this.$toast.loading({
  473. message: '加载中...',
  474. forbidClick: true,
  475. duration: 0,
  476. });
  477. this.$axios
  478. .$get('activity/v5/assist/operation/reportCutStatus', {
  479. params: {
  480. userLaunchId: this.info.userLaunchId,
  481. },
  482. })
  483. .then((res) => {
  484. if (res.success) {
  485. // 解除安卓返回按键
  486. if (
  487. (this.$userAgent.isSzx || this.$userAgent.isSzxBrowser) &&
  488. this.$userAgent.isAndroid
  489. ) {
  490. window.native.webBackStatus(false);
  491. }
  492. this.$router.replace('/claimCloudPhone/chooseCloudPhone?exit=1');
  493. }
  494. })
  495. .catch((error) => {
  496. setTimeout(() => {
  497. this.$toast(error.message);
  498. });
  499. })
  500. .finally(() => {
  501. this.$toast.clear();
  502. });
  503. },
  504. // 砍一刀
  505. chopAKnife() {
  506. this.$toast.loading({
  507. message: '加载中...',
  508. forbidClick: true,
  509. duration: 0,
  510. });
  511. this.$axios
  512. .$post('activity/v5/assist/operation/chopAKnife')
  513. .then((res) => {
  514. if (res.success) {
  515. this.bargainingTipsBool = true;
  516. this.bargainingAmount = res.data;
  517. setTimeout(() => {
  518. this.bargainingVisible = true;
  519. });
  520. // 重新获取用户最新的数据
  521. setTimeout(this.bargainingStatus, 1000);
  522. }
  523. })
  524. .catch((error) => {
  525. this.$toast(error.message);
  526. setTimeout(() => {
  527. this.$toast.clear();
  528. }, 500);
  529. });
  530. },
  531. btnFun() {
  532. if (+this.type) {
  533. switch (this.info.bargainingStatus) {
  534. case 1:
  535. this.chopAKnife();
  536. break;
  537. case 2:
  538. this.$toast.loading({
  539. message: '加载中...',
  540. forbidClick: true,
  541. duration: 0,
  542. });
  543. this.$axios
  544. .$post('activity/v5/assist/bargaining/getGenerateInvitationLink')
  545. .then(async (res) => {
  546. if (res.success) {
  547. res.data.desc = res.data.content;
  548. res.data.link = res.data.url;
  549. res.data.imgUrl = fileKeyToUrl(res.data.imgUrl);
  550. const shareInfo = { ...res.data };
  551. if (this.$userAgent.isSzx || this.$userAgent.isSzxBrowser) {
  552. this.$native.share(shareInfo);
  553. } else {
  554. // 微信环境不支持复制
  555. if (this.$userAgent.isWx || this.$userAgent.isMiniProgram) {
  556. setTimeout(() => {
  557. this.$toast.fail(
  558. '链接复制失败,请访问客户端或网页复制该链接',
  559. );
  560. });
  561. return;
  562. }
  563. // 浏览器环境
  564. await this.$native.clipboard.writeText(res.data.link);
  565. setTimeout(() => {
  566. this.$toast.success('链接复制成功');
  567. });
  568. }
  569. }
  570. })
  571. .finally(() => {
  572. this.$toast.clear();
  573. });
  574. break;
  575. }
  576. }
  577. },
  578. },
  579. };
  580. </script>
  581. <style lang="less" scoped>
  582. .bargaining-assistance {
  583. height: 100%;
  584. .inviter-tips,
  585. .invitee-tips {
  586. font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
  587. }
  588. .inviter-tips {
  589. font-weight: 400;
  590. font-size: 12px;
  591. color: #ffffff;
  592. line-height: 17px;
  593. text-align: center;
  594. font-style: normal;
  595. margin-bottom: 14px;
  596. & > div {
  597. font-size: 26px;
  598. line-height: 30px;
  599. }
  600. }
  601. .invitee-tips {
  602. .invitee-tips-user {
  603. font-weight: bold;
  604. font-size: 18px;
  605. color: #ffffff;
  606. line-height: 22px;
  607. text-align: left;
  608. font-style: normal;
  609. margin-bottom: 8px;
  610. }
  611. .invitee-tips-text {
  612. font-weight: 400;
  613. font-size: 14px;
  614. color: #ffffff;
  615. line-height: 22px;
  616. text-align: left;
  617. font-style: normal;
  618. span {
  619. color: #fceba9;
  620. }
  621. margin-bottom: 24px;
  622. }
  623. }
  624. .bargaining-assistance-main {
  625. background: #ffffff;
  626. border-radius: 20px;
  627. margin-bottom: 24px;
  628. overflow: hidden;
  629. .package-name {
  630. display: flex;
  631. justify-content: center;
  632. span {
  633. display: inline-block;
  634. padding: 5px 61px;
  635. background: #ffe8e8;
  636. border-radius: 0 0 15px 15px;
  637. margin: 0 auto;
  638. font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
  639. font-weight: bold;
  640. font-size: 16px;
  641. color: #c00202;
  642. line-height: 20px;
  643. text-align: center;
  644. font-style: normal;
  645. }
  646. }
  647. .package-price {
  648. font-family: Alibaba-PuHuiTi, Alibaba-PuHuiTi;
  649. height: 120px;
  650. font-weight: normal;
  651. box-sizing: border-box;
  652. padding-top: 30px;
  653. font-size: 30px;
  654. color: #c70b0b;
  655. line-height: 62px;
  656. text-align: center;
  657. font-style: normal;
  658. font-weight: bold;
  659. width: calc(100% - 24px);
  660. margin: 0 auto;
  661. background: #ffffff;
  662. box-shadow: 0px 0px 8px 2px #f4f7f8, 0px 2px 4px 0px #ecedf8;
  663. border-radius: 20px;
  664. margin-top: -20px;
  665. span {
  666. font-size: 20px;
  667. }
  668. }
  669. .package-progress {
  670. margin: 40px 42px 28px;
  671. }
  672. .package-tips {
  673. font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
  674. text-align: center;
  675. font-size: 16px;
  676. font-weight: bold;
  677. color: #000000;
  678. line-height: 22px;
  679. font-style: normal;
  680. margin-bottom: 24px;
  681. span {
  682. color: #f04646;
  683. }
  684. & > div:first-of-type {
  685. font-size: 21px;
  686. line-height: 29px;
  687. }
  688. }
  689. .package-btn {
  690. height: 54px;
  691. background: linear-gradient(178deg, #fd8c50 0%, #fc3307 100%);
  692. border-radius: 28px;
  693. margin: 0 27px;
  694. font-family: AlimamaShuHeiTi, AlimamaShuHeiTi;
  695. font-weight: bold;
  696. font-size: 20px;
  697. color: #ffffff;
  698. line-height: 54px;
  699. text-align: center;
  700. font-style: normal;
  701. // margin-bottom: 24px;
  702. }
  703. .package-expire {
  704. margin-top: 12px;
  705. font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
  706. text-align: center;
  707. font-style: normal;
  708. margin-bottom: 24px;
  709. &,
  710. .van-count-down {
  711. font-weight: 400;
  712. font-size: 12px;
  713. color: #7d6156;
  714. line-height: 16px;
  715. }
  716. .van-count-down {
  717. display: inline-block;
  718. }
  719. }
  720. .invitee-to-claim {
  721. height: 339px;
  722. border-radius: 20px;
  723. background: url('~/assets/image/claimCloudPhone/Invitee-to-claim.png')
  724. no-repeat 0 0;
  725. background-size: 100% 100%;
  726. position: relative;
  727. .invitee-to-claim_btn {
  728. height: 54px;
  729. background: linear-gradient(90deg, #ff6d2b 0%, #ff1500 100%);
  730. box-shadow: inset 9px -7px 19px 0px #ffba57,
  731. inset -1px 2px 6px 0px #ffbd63;
  732. border-radius: 27px;
  733. text-align: center;
  734. position: absolute;
  735. bottom: 14px;
  736. width: 200px;
  737. font-family: YouSheBiaoTiYuan;
  738. font-size: 28px;
  739. color: #ffffff;
  740. line-height: 23px;
  741. left: 50%;
  742. transform: translateX(-50%);
  743. font-style: normal;
  744. font-weight: bold;
  745. line-height: 54px;
  746. }
  747. }
  748. }
  749. .bargaining-record {
  750. margin-bottom: 24px;
  751. }
  752. .bargaining-record,
  753. .distribution-records {
  754. background: #ffffff;
  755. border-radius: 12px;
  756. .title {
  757. height: 44px;
  758. background: #ffe8e8;
  759. border-radius: 12px 12px 0px 0px;
  760. font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
  761. font-weight: bold;
  762. font-size: 16px;
  763. color: #c00202;
  764. line-height: 44px;
  765. text-align: center;
  766. font-style: normal;
  767. }
  768. .container {
  769. height: 250px;
  770. overflow-y: auto;
  771. padding: 0 20px;
  772. scrollbar-width: none !important; /* 对于 Firefox 隐藏滚动条 */
  773. &::-webkit-scrollbar {
  774. display: none !important; /* 对于 Chrome, Safari 和 Opera 隐藏滚动条 */
  775. }
  776. .van-empty {
  777. padding: 0 !important;
  778. }
  779. }
  780. .bargaining-record-item {
  781. height: 53px;
  782. border-bottom: 2px #f1f1f1 solid;
  783. display: flex;
  784. align-items: center;
  785. .bargaining-record-item_info {
  786. font-family: PingFangSC, PingFang SC;
  787. font-weight: 400;
  788. font-size: 14px;
  789. color: #7d6156;
  790. line-height: 18px;
  791. font-style: normal;
  792. & > div:first-of-type,
  793. span {
  794. font-weight: bold;
  795. }
  796. span {
  797. color: #c00202;
  798. }
  799. }
  800. }
  801. }
  802. .distribution-records {
  803. .container {
  804. padding: 0px;
  805. position: relative;
  806. & > div:first-of-type {
  807. position: absolute;
  808. width: 100%;
  809. left: 0;
  810. height: 20px;
  811. background: #ffffff;
  812. box-shadow: 0px 2px 4px 0px #ecedf8;
  813. top: 0;
  814. font-family: PingFangSC, PingFang SC;
  815. font-weight: 400;
  816. font-size: 12px;
  817. color: #7d6156;
  818. line-height: 20px;
  819. text-align: center;
  820. display: flex;
  821. font-style: normal;
  822. & > div {
  823. width: 25%;
  824. }
  825. }
  826. & > div:last-of-type {
  827. height: 100%;
  828. box-sizing: border-box;
  829. padding-top: 20px;
  830. overflow-y: auto;
  831. scrollbar-width: none !important; /* 对于 Firefox 隐藏滚动条 */
  832. &::-webkit-scrollbar {
  833. display: none !important; /* 对于 Chrome, Safari 和 Opera 隐藏滚动条 */
  834. }
  835. ::v-deep .van-empty {
  836. padding: 0px;
  837. .van-empty__image {
  838. img {
  839. display: none;
  840. }
  841. background: url('~/assets/image/claimCloudPhone/distribution-records-empty.png')
  842. no-repeat center bottom;
  843. background-size: 90px 90px;
  844. }
  845. }
  846. .distribution-records-item {
  847. height: 46px;
  848. line-height: 46px;
  849. box-sizing: border-box;
  850. display: flex;
  851. border-bottom: 2px #f1f1f1 solid;
  852. & > div {
  853. width: 25%;
  854. text-align: center;
  855. font-family: PingFangSC, PingFang SC;
  856. font-weight: 400;
  857. font-size: 14px;
  858. color: #6d2b12;
  859. text-align: center;
  860. font-style: normal;
  861. }
  862. }
  863. }
  864. }
  865. }
  866. .barrage {
  867. position: fixed;
  868. bottom: 11%;
  869. transform: translateY(-11%);
  870. right: 11px;
  871. & > ::v-deep div {
  872. transition: all 0.7s;
  873. &.start {
  874. opacity: 1;
  875. animation: barrage 0.5s linear;
  876. @keyframes barrage {
  877. 0% {
  878. opacity: 1;
  879. transform: translateY(0px);
  880. }
  881. 100% {
  882. transform: translateY(-30px);
  883. opacity: 0;
  884. }
  885. }
  886. }
  887. opacity: 1;
  888. width: 143px;
  889. height: 40px;
  890. position: absolute;
  891. bottom: 11%;
  892. right: 11px;
  893. background: linear-gradient(
  894. 90deg,
  895. #992bff 0%,
  896. rgba(255, 21, 0, 0.4) 100%
  897. );
  898. border-radius: 23px;
  899. border-image: linear-gradient(
  900. 94deg,
  901. rgba(255, 255, 255, 1),
  902. rgba(255, 255, 255, 0.35)
  903. )
  904. 1 1;
  905. padding: 0 10px;
  906. font-size: 10px;
  907. font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
  908. font-weight: 400;
  909. color: #ffffff;
  910. display: flex;
  911. flex-direction: column;
  912. justify-content: center;
  913. & > div {
  914. height: 16px;
  915. line-height: 16px;
  916. &:first-of-type {
  917. display: flex;
  918. & > div {
  919. width: 50px;
  920. overflow: hidden;
  921. text-overflow: ellipsis;
  922. white-space: nowrap;
  923. }
  924. & > span {
  925. display: inline-block;
  926. background: linear-gradient(to bottom, #fec37a 0%, #ff1500 100%);
  927. border-radius: 21px;
  928. padding: 0 10px;
  929. }
  930. }
  931. &:last-of-type span {
  932. color: #fddb2b;
  933. }
  934. }
  935. }
  936. }
  937. .rule {
  938. position: fixed;
  939. top: 12.5%;
  940. right: 0;
  941. width: 40px;
  942. height: 20px;
  943. line-height: 20px;
  944. background: #f04646;
  945. border-radius: 17px 0px 0px 17px;
  946. z-index: 2;
  947. font-family: PingFangSC, PingFang SC;
  948. font-weight: 400;
  949. font-size: 12px;
  950. color: #ffffff;
  951. text-align: center;
  952. font-style: normal;
  953. }
  954. .rule-title {
  955. height: 53px;
  956. border-radius: 16px 16px 0 0;
  957. background: linear-gradient(90deg, #f6cdb9 0%, #fbdbde 100%);
  958. font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
  959. font-weight: bold;
  960. font-size: 18px;
  961. color: #751d13;
  962. line-height: 53px;
  963. text-align: center;
  964. font-style: normal;
  965. }
  966. .rule-content {
  967. height: 325px;
  968. padding: 16px;
  969. box-sizing: border-box;
  970. background: #fff;
  971. border-radius: 0 0 16px 16px;
  972. font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
  973. font-weight: 400;
  974. font-size: 14px;
  975. color: #751d13;
  976. line-height: 16px;
  977. text-align: left;
  978. font-style: normal;
  979. overflow-y: auto;
  980. }
  981. .rule-close {
  982. height: 32px;
  983. width: 32px;
  984. background: #c1c1c1;
  985. z-index: 5;
  986. margin: 20px auto 0;
  987. border-radius: 50%;
  988. display: flex;
  989. justify-content: center;
  990. align-items: center;
  991. font-size: 24px;
  992. color: #666666;
  993. }
  994. ::v-deep .van-dialog {
  995. background: transparent !important;
  996. }
  997. .bargaining-img {
  998. height: 512px;
  999. width: 100%;
  1000. background: url('~/assets/image/claimCloudPhone/bargaining-popUp.png')
  1001. no-repeat 0 20px;
  1002. background-size: 100% 100%;
  1003. }
  1004. .bargaining-amount {
  1005. height: 234px;
  1006. background: url('~/assets/image/claimCloudPhone/bargaining-amount-img.png')
  1007. no-repeat 0 20px;
  1008. padding-top: 30px;
  1009. box-sizing: border-box;
  1010. background-size: 100% 210px;
  1011. .bargaining-amount-text {
  1012. font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
  1013. font-weight: bold;
  1014. font-size: 24px;
  1015. color: #ffffff;
  1016. text-align: center;
  1017. font-style: normal;
  1018. span {
  1019. color: #ff0000;
  1020. }
  1021. }
  1022. }
  1023. .exit {
  1024. height: 520px;
  1025. position: relative;
  1026. & > img {
  1027. height: 100%;
  1028. width: 100%;
  1029. }
  1030. .exit-content {
  1031. position: absolute;
  1032. top: 25%;
  1033. left: 50%;
  1034. width: 200px;
  1035. transform: translateX(-50%);
  1036. font-family: AlimamaShuHeiTi, AlimamaShuHeiTi;
  1037. font-weight: bold;
  1038. font-size: 16px;
  1039. color: #171815;
  1040. line-height: 24px;
  1041. text-align: center;
  1042. font-style: normal;
  1043. & > div span {
  1044. color: #f04646;
  1045. }
  1046. .exit-content-progress {
  1047. margin: 50px 0 80px;
  1048. }
  1049. .exit-content-btn {
  1050. & > img {
  1051. height: 42px;
  1052. width: 100%;
  1053. }
  1054. .exit-content-btn_leave {
  1055. font-weight: 400;
  1056. font-size: 12px;
  1057. color: #faf3d8;
  1058. }
  1059. }
  1060. }
  1061. }
  1062. .bargaining-success {
  1063. height: 378px;
  1064. background: url('~/assets/image/claimCloudPhone/successful-bargaining-img.png')
  1065. no-repeat 0 0;
  1066. background-size: 100% 100%;
  1067. overflow: hidden;
  1068. position: relative;
  1069. .bargaining-success-title {
  1070. margin-top: 24px;
  1071. font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
  1072. font-weight: bold;
  1073. font-size: 28px;
  1074. color: #fdf9c8;
  1075. line-height: 38px;
  1076. text-align: center;
  1077. font-style: normal;
  1078. }
  1079. .bargaining-success-tips {
  1080. font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
  1081. width: 165px;
  1082. font-weight: bold;
  1083. font-size: 12px;
  1084. color: #ffffff;
  1085. line-height: 17px;
  1086. text-align: center;
  1087. margin: 0 auto;
  1088. }
  1089. .bargaining-success-btn {
  1090. position: absolute;
  1091. bottom: 20px;
  1092. left: 50%;
  1093. transform: translateX(-50%);
  1094. display: flex;
  1095. flex-direction: column;
  1096. justify-content: center;
  1097. & > div {
  1098. width: 180px;
  1099. height: 48px;
  1100. line-height: 48px;
  1101. text-align: center;
  1102. border-radius: 24px;
  1103. color: #fff;
  1104. font-weight: bold;
  1105. &:first-of-type {
  1106. margin-bottom: 8px;
  1107. background: linear-gradient(178deg, #fd8c50 0%, #fc3307 100%);
  1108. }
  1109. &:last-of-type {
  1110. color: #e63b47;
  1111. border: 1px solid #e63b47;
  1112. }
  1113. }
  1114. }
  1115. }
  1116. .expire {
  1117. height: 378px;
  1118. background: url('~/assets/image/claimCloudPhone/expire-img.png') no-repeat 0
  1119. 0;
  1120. background-size: 100% 100%;
  1121. position: relative;
  1122. .expire-btn {
  1123. position: absolute;
  1124. bottom: 20px;
  1125. font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
  1126. font-weight: 500;
  1127. font-size: 16px;
  1128. color: #ffffff;
  1129. line-height: 48px;
  1130. left: 50%;
  1131. transform: translateX(-50%);
  1132. text-align: center;
  1133. font-style: normal;
  1134. width: 180px;
  1135. height: 48px;
  1136. background: linear-gradient(178deg, #fd8c50 0%, #fc3307 100%);
  1137. border-radius: 24px;
  1138. }
  1139. }
  1140. .login {
  1141. height: 312px;
  1142. background: #ffffff;
  1143. border-radius: 24px;
  1144. padding: 16px 28px;
  1145. box-sizing: border-box;
  1146. .login-title {
  1147. font-family: DingTalk, DingTalk;
  1148. font-weight: normal;
  1149. font-weight: bold;
  1150. font-size: 24px;
  1151. color: #0a132b;
  1152. line-height: 28px;
  1153. text-align: left;
  1154. font-style: normal;
  1155. margin-bottom: 14px;
  1156. }
  1157. .van-field {
  1158. margin-bottom: 14px;
  1159. border-radius: 8px;
  1160. border: 1px solid #e6e6e6;
  1161. }
  1162. .van-button {
  1163. width: 100%;
  1164. border-radius: 8px;
  1165. }
  1166. .login-code {
  1167. font-family: PingFangSC, PingFang SC;
  1168. font-weight: 500;
  1169. font-size: 14px;
  1170. color: #3666f2;
  1171. line-height: 16px;
  1172. text-align: left;
  1173. font-style: normal;
  1174. }
  1175. .login-agreement {
  1176. font-family: PingFangSC, PingFang SC;
  1177. font-weight: 400;
  1178. font-size: 12px;
  1179. font-style: normal;
  1180. margin-top: 12px;
  1181. display: flex;
  1182. span {
  1183. color: #3666f2;
  1184. }
  1185. .van-checkbox {
  1186. align-items: start;
  1187. ::v-deep .van-checkbox__label {
  1188. color: #999999;
  1189. }
  1190. ::v-deep .van-checkbox__icon {
  1191. margin-top: 3px;
  1192. }
  1193. }
  1194. }
  1195. }
  1196. ::v-deep .phone-container {
  1197. background: transparent;
  1198. }
  1199. }
  1200. </style>