index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949
  1. <template>
  2. <view class="container">
  3. <view class="topBox flex">
  4. <view class="topTpl flex_item">
  5. <image style="width: 49rpx;height: 45rpx;" src="/static/img/logo.png"></image>
  6. <view class="tpl clamp">BNB Smart Chain</view>
  7. </view>
  8. <view class="topTpl flex_item margin-l-30" v-if="userInfo.address">
  9. <image class="userIcon" src="/static/img/img10.png"></image>
  10. <view class="tpls clamp">{{userInfo.address|hideCenter}}</view>
  11. </view>
  12. </view>
  13. <view class="levelBox flex">
  14. <view class="levelInfo flex_item">
  15. <image src="/static/img/img04.png" style="width: 50rpx;height: 61rpx;"></image>
  16. <view class="levelTpl">
  17. <view class="level">S{{userInfo.level||'0'}}</view>
  18. </view>
  19. <view class="levelTpl">
  20. <view class="level">L{{userInfo.point_level||'0'}}</view>
  21. </view>
  22. </view>
  23. <view class="levelRight flex_item">
  24. <!-- <view class="flex_item method">
  25. <view class="">{{$t('home.教程')}}</view>
  26. <image src="/static/img/img02.png" style="width: 30rpx;height: 30rpx;margin-left: 8rpx;"></image>
  27. </view> -->
  28. <view class="flex_item invitation" @click="copyShareLink">
  29. <view class="">{{$t('home.邀请连接')}}</view>
  30. <image src="/static/img/img03.png" style="width: 24rpx;height: 28rpx;margin-left: 8rpx;"></image>
  31. </view>
  32. </view>
  33. </view>
  34. <view class="flex infoBox">
  35. <view class="info flex_item" v-if="userInfo.address">
  36. <view class="infoName">{{$t('home.账号')}}:</view>
  37. <view class="flex_item infoTpl clamp">
  38. <view class="clamp account">{{userInfo.address|hideCenter}}</view>
  39. <image src="/static/img/img03.png" class="infoTplImg" @click="copyAddress"></image>
  40. </view>
  41. </view>
  42. <view class="langBox flex_item">
  43. <!-- <image src="/static/img/img08.png" style="width: 36rpx;height: 34rpx;"></image> -->
  44. <picker :range="langList" range-key='label' @change="selectLang">
  45. <view class="langType">{{label}}</view>
  46. </picker>
  47. <image src="/static/img/img01.png" style="width: 15rpx;height: 10rpx;"></image>
  48. </view>
  49. </view>
  50. <view class="withdrawalBox">
  51. <view class="moneyName">{{$t('home.可提现')}}</view>
  52. <view class="flex">
  53. <!-- USTD -->
  54. <view>
  55. <view class="moneyBox">
  56. <view class="money" v-if="userInfo.USDT">{{userInfo.USDT|failNumber}}USDT</view>
  57. <view class="money" v-else>0.00USDT</view>
  58. </view>
  59. <view class="withdrawal" @click="withdrawBtn(userInfo.USDT,'USDT')">{{$t('home.提现')}}</view>
  60. </view>
  61. <!-- VGT -->
  62. <view>
  63. <view class="moneyBox">
  64. <!-- <view class="moneyName">{{$t('home.余额')}}</view> -->
  65. <view class="money" v-if="userInfo.VGT">{{userInfo.VGT|failNumber}}VGT</view>
  66. <view class="money" v-else>0.00VGT</view>
  67. </view>
  68. <view class="withdrawal" @click="withdrawBtn(userInfo.VGT,'VGT')">{{$t('home.提现')}}</view>
  69. </view>
  70. </view>
  71. </view>
  72. <view class="exchangeBox">
  73. <view class="exchangeTop flex">
  74. <view class="exchangeName">{{$t('home.充值')}}</view>
  75. <view class="exchangeTpl flex_item">
  76. <image src="/static/img/img05.png" style="width: 28rpx;height: 24rpx;"></image>
  77. <view class="exchangeText" @click="transferShow = true">{{$t('home.转账')}}</view>
  78. </view>
  79. </view>
  80. <view class="exchangeInfo flex">
  81. <view class="currency flex_item">
  82. <image class="moneyIcon" src="/static/img/homeVGT.png"></image>
  83. <input class="name" v-model="PayUSDT" @blur="addMoney" type="number" placeholder="VGT" />
  84. </view>
  85. <!-- <image src="/static/img/img07.png" style="width: 56rpx;height: 56rpx;"></image>
  86. <view class="currency flex_item">
  87. <image class="moneyIcon" src="/static/img/homeVGT.png" style=""></image>
  88. <input :value="($util.Mul(PayUSDT,userInfo.real_ratio))||''" class="name" type="number"
  89. placeholder="VGT" disabled />
  90. </view> -->
  91. </view>
  92. <view class="exchangeMoney flex">
  93. <!-- <view class="moneyTitle">{{$t('home.余额')}}:
  94. <text v-if="userInfo.USDT">{{userInfo.USDT|failNumber}}</text>
  95. <text v-else>0.00</text>
  96. </view> -->
  97. <view class="moneyTitle">{{$t('home.余额')}}:
  98. <text v-if="userInfo.VGT">{{userInfo.VGT|failNumber}}</text>
  99. <text v-else>0.00</text>
  100. </view>
  101. </view>
  102. </view>
  103. <view class="orderBox">
  104. <view class="orderList" v-for="item,index in orderList" :key="index">
  105. <view class="orderTop flex">
  106. <view class="topTitle flex_item">
  107. <image src="/static/img/img06.png" style="width: 59rpx;height: 60rpx;"></image>
  108. <view class="topName" v-if="lang=='tw'">{{item.name}}</view>
  109. <view class="topName" v-if="lang=='en'">{{item.en_name}}</view>
  110. <view class="topTip" :style="{background:( item.showswitch == 1? '#15C66E' :'#FF0000')}"></view>
  111. </view>
  112. <view class="topPrice">{{item.money_min}}-{{item.money_max}}USDT</view>
  113. </view>
  114. <view class="orderInfo">
  115. <view class="infoTpl flex_item">
  116. <image src="/static/img/img13.png" style="width: 26rpx;height: 26rpx;"></image>
  117. <view class="tplText">{{$t('home.时间')}}:<text>{{item.begin}}-{{item.end}}</text></view>
  118. </view>
  119. <view class="infoTpl flex_item">
  120. <image src="/static/img/img14.png" style="width: 26rpx;height: 26rpx;"></image>
  121. <view class="tplText">{{$t('home.周期')}}:<text>{{item.day}}{{$t('home.天')}}</text></view>
  122. </view>
  123. <view class="infoTpl flex_item">
  124. <image src="/static/img/img12.png" style="width: 26rpx;height: 26rpx;"></image>
  125. <view class="tplText">{{$t('home.收益')}}:<text>{{item.ratio}}</text></view>
  126. </view>
  127. <view class="subscribe" @click="openSubscrib(item)" v-if="item.showswitch == 1">{{$t('home.预约')}}
  128. </view>
  129. </view>
  130. </view>
  131. </view>
  132. <u-popup :show="subscribeShow" @close="subscribeClose" :closeable="true">
  133. <view class="subscribePopup">
  134. <view class="popupTitle">{{orderItem.name}}</view>
  135. <view class="popupBox flex">
  136. <view class="popupTpl flex_item">
  137. <image src="/static/img/img12.png" style="width: 26rpx;height: 26rpx;"></image>
  138. <view class="tplName">{{$t('home.收益')}}:<text>{{orderItem.ratio}}</text></view>
  139. </view>
  140. <view class="popupTpl flex_item">
  141. <image src="/static/img/img14.png" style="width: 26rpx;height: 26rpx;"></image>
  142. <view class="tplName">{{$t('home.周期')}}:<text>{{orderItem.day}}{{$t('home.天')}}</text></view>
  143. </view>
  144. </view>
  145. <view class="popupBox">
  146. <view class="popupTpl flex_item">
  147. <image src="/static/img/img13.png" style="width: 26rpx;height: 26rpx;"></image>
  148. <view class="tplName">{{$t('home.时间')}}:<text>{{orderItem.begin}}-{{orderItem.end}}</text>
  149. </view>
  150. </view>
  151. </view>
  152. <view class="popupBox">
  153. <view class="popupTpl flex_item">
  154. <image src="/static/img/img14.png" style="width: 26rpx;height: 26rpx;"></image>
  155. <view class="tplName">{{$t('home.价格')}}:<text
  156. class="price">{{orderItem.min|failNumber}}-{{orderItem.max|failNumber}}USDT</text></view>
  157. </view>
  158. </view>
  159. <view class="timeBox">
  160. <view class="timeTitle">{{$t('home.请选择预约')}}</view>
  161. <view class="flex timeTpl">
  162. <view class="timeName" v-for="item,index in timeList"
  163. :class="item.check == true ? 'active' : ''" @click="timeSelect(item)" :key="index">
  164. {{item.name}}
  165. </view>
  166. </view>
  167. </view>
  168. <view class="subscribeBtn" @click="submitTime">{{$t('home.预约')}}</view>
  169. </view>
  170. </u-popup>
  171. <u-popup :show="transferShow" @close="transferShow = false" :closeable="true">
  172. <view class="transferPopup">
  173. <view class="popupTitle">VGT{{$t('home.转出数量')}}</view>
  174. <view class="inputBox">
  175. <view class="inputTitle">{{$t('home.请输入VGT转出数量')}}</view>
  176. <input class="inputTpl" type="text" v-model="transferNum" :placeholder="$t('home.请输入VGT转出数量')" />
  177. </view>
  178. <view class="inputBox">
  179. <view class="inputTitle">{{$t('home.请输入VGT接收地址')}}</view>
  180. <input class="inputTpl" type="text" v-model="transferAddr" :placeholder="$t('home.请输入VGT接收地址')" />
  181. </view>
  182. <view class="subscribeBtn" @click="submitTransfer">{{$t('home.确定')}}</view>
  183. </view>
  184. </u-popup>
  185. <taber></taber>
  186. </view>
  187. </template>
  188. <script>
  189. import {
  190. auctions,
  191. trade,
  192. changeCalculator,
  193. change,
  194. appointment,
  195. extract,
  196. chargeCalculator,
  197. charge
  198. } from '@/api/index.js';
  199. import {
  200. getUserInfo
  201. } from '@/api/user.js';
  202. import {
  203. saveUrl,
  204. interceptor
  205. } from '@/utils/loginUtils.js';
  206. import {
  207. mapState,
  208. mapActions,
  209. mapMutations
  210. } from "vuex";
  211. import taber from "@/components/footer/footer.vue";
  212. import icon from '../../uni_modules/uview-ui/libs/config/props/icon';
  213. export default {
  214. filters: {
  215. hideCenter: function(value) {
  216. const st = value.slice(7,value.length-7);
  217. const sr = value.replace(st,'...')
  218. return sr;
  219. },
  220. failNumber:function(number){
  221. return +(+number).toFixed(2)
  222. }
  223. },
  224. components: {
  225. taber
  226. },
  227. data() {
  228. return {
  229. orderList: [],
  230. subscribeShow: false, //预约时间弹窗
  231. orderItem: {}, //点击预约的数据
  232. //转账参数
  233. transferShow: false, //转账弹窗
  234. transferNum: '', //转账数量
  235. transferAddr: '', //转账地址
  236. loading: 'loadmore', //加载状态
  237. PayUSDT: '', //兑换的usde
  238. getVGT: 0, //获得的VGT
  239. typeList: [{
  240. name: "今天",
  241. langname: "今天",
  242. check: false,
  243. type: 1
  244. }, {
  245. name: "明天",
  246. langname: "明天",
  247. check: false,
  248. type: 2
  249. }, {
  250. name: "后天",
  251. langname: "后天",
  252. check: false,
  253. type: 3
  254. }]
  255. }
  256. },
  257. computed: {
  258. ...mapState({
  259. langList: "langList",
  260. lang: "lang",
  261. }),
  262. ...mapState(['baseURL', 'urlFile']),
  263. ...mapState("user", ['userInfo', 'hasLogin']),
  264. label() {
  265. let label = ''
  266. try {
  267. label = this.langList.find((item) => {
  268. return item.value == this.lang
  269. }).label;
  270. } catch (e) {
  271. label = 'tw'
  272. }
  273. return label
  274. },
  275. //时间列表
  276. timeList() {
  277. for (var i = 0; i < this.typeList.length; i++) {
  278. this.typeList[i].name = this.$t(`home.${this.typeList[i].langname}`)
  279. }
  280. return this.typeList;
  281. }
  282. },
  283. onLoad(option) {
  284. if (option.spread) {
  285. // 存储其他邀请人
  286. uni.setStorageSync('spread', option.spread);
  287. }
  288. },
  289. onShow() {
  290. this.loadData();
  291. this.getUserInfo();
  292. },
  293. methods: {
  294. ...mapMutations('user', ['setUserInfo', 'login']),
  295. ...mapActions({
  296. setLang: "setLang",
  297. }),
  298. // 申请提现
  299. withdrawBtn(money,type) {
  300. let token = ''
  301. if(type == 'USDT'){
  302. token = 'USDT'
  303. if (+this.userInfo.USDT == 0) {
  304. uni.showToast({
  305. title: this.$t('home.无法提现'),
  306. icon: "error"
  307. });
  308. }
  309. return false
  310. }
  311. if(type == 'VGT'){
  312. token = 'VGT_OUT'
  313. if (+this.userInfo.VGT == 0) {
  314. uni.showToast({
  315. title: this.$t('home.无法提现'),
  316. icon: "error"
  317. });
  318. }
  319. return
  320. }
  321. extract({
  322. token: token,
  323. number: +money
  324. }).then((res) => {
  325. uni.showToast({
  326. title: res.msg
  327. });
  328. console.log(res);
  329. })
  330. },
  331. // 充值
  332. async addMoney(res) {
  333. const that = this;
  334. if (res.detail.value <= 0) {
  335. return
  336. }
  337. uni.showLoading({
  338. mask: true
  339. });
  340. const num = res.detail.value;
  341. let token = 'VGT'
  342. try {
  343. const {
  344. data
  345. } = await chargeCalculator({
  346. num,
  347. token
  348. });
  349. const txHash = await ethereum.request({
  350. method: 'eth_sendTransaction',
  351. params: [{
  352. from: that.userInfo.address, // The user's active address.
  353. to: data.data.to,
  354. value: 0,
  355. data: data.data.data,
  356. }]
  357. })
  358. const req = await change({
  359. order_sn: data.order_sn,
  360. hash: txHash,
  361. });
  362. that.getUserInfo();
  363. uni.showToast({
  364. title: this.$t('home.充值成功')
  365. })
  366. } catch (e) {
  367. uni.showToast({
  368. title: this.$t('home.充值失败'),
  369. icon: 'error'
  370. })
  371. }
  372. },
  373. navto(url) {
  374. if (!this.hasLogin) {
  375. // 保存地址
  376. saveUrl();
  377. // 登录拦截
  378. interceptor();
  379. } else {
  380. uni.navigateTo({
  381. url,
  382. });
  383. }
  384. },
  385. copyShareLink() {
  386. const that = this;
  387. if (!that.hasLogin) {
  388. // 保存地址
  389. saveUrl();
  390. // 登录拦截
  391. interceptor();
  392. } else {
  393. uni.setClipboardData({
  394. data: that.baseURL + that.urlFile + '/#/pages/index/index?spread=' + that.userInfo.address,
  395. showToast: false,
  396. success: function() {
  397. uni.showToast({
  398. title: that.$t('home.成功')
  399. })
  400. },
  401. });
  402. }
  403. },
  404. copyAddress() {
  405. const that = this;
  406. uni.setClipboardData({
  407. data: this.userInfo.address,
  408. showToast: false,
  409. success: function() {
  410. uni.showToast({
  411. title: that.$t('home.成功')
  412. })
  413. //调用方法成功
  414. console.log("success");
  415. },
  416. });
  417. },
  418. // 请求载入数据
  419. async loadData() {
  420. auctions().then((res) => {
  421. this.orderList = res.data.map((res) => {
  422. res.min = +res.min;
  423. res.max = +res.max;
  424. res.money_max = +res.money_max;
  425. res.money_min = +res.money_min;
  426. return res
  427. });
  428. console.log(res);
  429. }).catch((res) => {
  430. console.log(res);
  431. })
  432. },
  433. // 获取更新用户信息
  434. getUserInfo() {
  435. getUserInfo().then((res) => {
  436. this.setUserInfo(res.data);
  437. }).catch((res) => {
  438. console.log(res);
  439. })
  440. },
  441. //时间选择
  442. timeSelect(item) {
  443. console.log(item);
  444. item.check = !item.check;
  445. },
  446. //打开时间选择弹窗
  447. openSubscrib(item) {
  448. this.orderItem = item
  449. this.subscribeShow = true
  450. },
  451. //关闭时间选择弹窗
  452. subscribeClose() {
  453. this.subscribeShow = false
  454. },
  455. //提交预约时间
  456. submitTime() {
  457. const that = this;
  458. uni.showLoading({
  459. mask: true
  460. });
  461. let push = {
  462. id: that.orderItem.id,
  463. type: that.timeList.filter((res) => {
  464. return res.check
  465. }).map((res) => {
  466. if (res.check) {
  467. return res.type
  468. }
  469. }).join(',')
  470. }
  471. console.log(push, 'push');
  472. appointment(push).then((res) => {
  473. uni.hideLoading()
  474. uni.showToast({
  475. title: that.$t("home.预约成功")
  476. });
  477. that.subscribeShow = false
  478. }).catch((err) => {
  479. uni.hideLoading()
  480. uni.showToast({
  481. title: err.msg,
  482. icon: 'error'
  483. });
  484. })
  485. },
  486. //提交转账申请
  487. submitTransfer() {
  488. const that = this;
  489. const VGT_TRADE = 'VGT_TRADE' + (new Date()).getTime();
  490. const num = that.transferNum;
  491. const address = that.transferAddr;
  492. uni.showLoading({
  493. mask: true
  494. });
  495. ethereum.request({
  496. "method": "personal_sign",
  497. "params": [
  498. VGT_TRADE,
  499. that.userInfo.address
  500. ]
  501. }).then((res) => {
  502. trade({
  503. num,
  504. token: 'VGT',
  505. address,
  506. sign: res,
  507. msg: VGT_TRADE,
  508. }).then((res) => {
  509. that.transferShow = false;
  510. uni.hideLoading()
  511. uni.showToast({
  512. title: that.$t("home.转账成功")
  513. });
  514. }).catch((res) => {
  515. uni.hideLoading()
  516. uni.showToast({
  517. title:res.msg,
  518. icon: 'error'
  519. });
  520. })
  521. });
  522. },
  523. //切换语言
  524. selectLang(value) {
  525. this.setLang(this.langList[value.detail.value].value);
  526. },
  527. },
  528. }
  529. </script>
  530. <style lang="scss">
  531. .container {
  532. width: 100%;
  533. padding: 25rpx;
  534. line-height: 1;
  535. }
  536. .topBox {
  537. padding-bottom: 31rpx;
  538. width: 700rpx;
  539. .topTpl {
  540. background: #E9EBEC;
  541. border: 2rpx solid #CCCECF;
  542. border-radius: 36rpx;
  543. height: 71rpx;
  544. padding-left: 10rpx;
  545. font-weight: bold;
  546. padding-right: 20rpx;
  547. &.margin-l-30 {
  548. width: 0;
  549. flex-grow: 1;
  550. }
  551. .userIcon {
  552. width: 51rpx;
  553. height: 48rpx;
  554. flex-shrink: 0;
  555. }
  556. .tpl {
  557. font-size: 28rpx;
  558. color: #141414;
  559. }
  560. .tpls {
  561. font-size: 30rpx;
  562. color: #788387;
  563. }
  564. }
  565. }
  566. .levelBox {
  567. .levelInfo {
  568. .levelTpl {
  569. background: url('../../static/img/img11.png') no-repeat;
  570. width: 80rpx;
  571. height: 34rpx;
  572. background-size: 100% 100%;
  573. position: relative;
  574. margin-left: 10rpx;
  575. .level {
  576. position: absolute;
  577. right: 10rpx;
  578. font-size: 28rpx;
  579. font-weight: bold;
  580. color: #AB7600;
  581. line-height: 34rpx;
  582. }
  583. }
  584. }
  585. .levelRight {
  586. .method {
  587. background: #FBEBEC;
  588. border: 1px solid #FFBE96;
  589. border-radius: 50rpx;
  590. font-size: 26rpx;
  591. font-weight: bold;
  592. color: #FE6107;
  593. padding: 10rpx 16rpx;
  594. margin-right: 17rpx;
  595. }
  596. .invitation {
  597. border: 1px solid #BCC7CB;
  598. border-radius: 50rpx;
  599. font-size: 26rpx;
  600. font-weight: bold;
  601. color: #313F4A;
  602. padding: 10rpx 16rpx;
  603. }
  604. }
  605. }
  606. .infoBox {
  607. padding: 35rpx 0rpx;
  608. width: 680rpx;
  609. .info {
  610. // width: 70%;
  611. flex-grow: 1;
  612. width: 0;
  613. padding-right: 30rpx;
  614. .infoName {
  615. font-size: 32rpx;
  616. font-weight: bold;
  617. color: #141414;
  618. flex-shrink: 0;
  619. }
  620. .infoTpl {
  621. border: 1px solid #BCC7CB;
  622. border-radius: 50rpx;
  623. line-height: 58rpx;
  624. padding: 0rpx 15rpx;
  625. flex-grow: 1;
  626. .account {
  627. flex-grow: 1;
  628. }
  629. .infoTplImg {
  630. flex-shrink: 0;
  631. width: 24rpx;
  632. height: 28rpx;
  633. }
  634. }
  635. }
  636. .langBox {
  637. .langType {
  638. font-size: 27rpx;
  639. font-weight: bold;
  640. color: #141414;
  641. padding: 0rpx 8rpx;
  642. }
  643. }
  644. }
  645. .withdrawalBox {
  646. background: url('../../static/img/img09.png') no-repeat;
  647. width: 100%;
  648. height: 217rpx;
  649. background-size: 100% 100%;
  650. padding: 20rpx 48rpx 0rpx 48rpx;
  651. .moneyName {
  652. font-size: 32rpx;
  653. font-weight: bold;
  654. padding: 10rpx 10rpx;
  655. color: #FFFFFF;
  656. }
  657. .moneyBox {
  658. color: #FFFFFF;
  659. font-weight: bold;
  660. .money {
  661. font-size: 44rpx;
  662. padding-top: 15rpx;
  663. }
  664. }
  665. .withdrawal {
  666. background: #FFFFFF;
  667. border-radius: 50rpx;
  668. font-size: 28rpx;
  669. font-weight: 500;
  670. color: #1DBC71;
  671. line-height: 55rpx;
  672. padding: 0rpx 70rpx;
  673. flex-shrink: 0;
  674. margin-top: 10rpx;
  675. }
  676. }
  677. .exchangeBox {
  678. padding: 50rpx 0rpx;
  679. .exchangeTop {
  680. .exchangeName {
  681. font-size: 38rpx;
  682. font-weight: bold;
  683. color: #242627;
  684. }
  685. .exchangeTpl {
  686. .exchangeText {
  687. font-size: 27rpx;
  688. font-weight: 500;
  689. color: #084D92;
  690. padding-left: 10rpx;
  691. }
  692. }
  693. }
  694. .exchangeInfo {
  695. padding: 23rpx 0rpx;
  696. justify-content: center;
  697. .currency {
  698. width: 98%;
  699. border: 1px solid #BCC7CB;
  700. border-radius: 10rpx;
  701. padding: 20rpx;
  702. line-height: 40rpx;
  703. .moneyIcon {
  704. flex-shrink: 0;
  705. width: 35rpx;
  706. height: 35rpx;
  707. }
  708. .name {
  709. font-size: 29rpx;
  710. color: #242627;
  711. padding-left: 15rpx;
  712. }
  713. }
  714. }
  715. .exchangeMoney {
  716. .moneyTitle {
  717. font-size: 28rpx;
  718. color: #1C2645;
  719. }
  720. }
  721. }
  722. .orderBox {
  723. .orderList {
  724. background: #FFFFFF;
  725. border-radius: 15rpx;
  726. margin-bottom: 20rpx;
  727. padding: 20rpx;
  728. .orderTop {
  729. .topTitle {
  730. .topName {
  731. font-size: 32rpx;
  732. font-family: PingFang SC;
  733. font-weight: bold;
  734. color: #262626;
  735. padding-left: 8rpx;
  736. }
  737. .topTip {
  738. width: 20rpx;
  739. height: 20rpx;
  740. border-radius: 50%;
  741. margin-left: 24rpx;
  742. }
  743. }
  744. .topPrice {
  745. font-size: 28rpx;
  746. font-family: PingFang SC;
  747. font-weight: 500;
  748. color: #F99328;
  749. }
  750. }
  751. .orderInfo {
  752. position: relative;
  753. .infoTpl {
  754. padding-top: 15rpx;
  755. font-size: 28rpx;
  756. font-family: PingFang SC;
  757. font-weight: 500;
  758. color: #6A6A6A;
  759. .tplText {
  760. padding-left: 8rpx;
  761. text {
  762. color: #262626;
  763. }
  764. }
  765. }
  766. .subscribe {
  767. position: absolute;
  768. right: 20rpx;
  769. bottom: 20rpx;
  770. background: linear-gradient(90deg, #38F855, #21EDD3);
  771. border-radius: 10rpx;
  772. width: 163rpx;
  773. line-height: 63rpx;
  774. text-align: center;
  775. font-size: 28rpx;
  776. font-family: PingFang SC;
  777. font-weight: bold;
  778. color: #141414;
  779. }
  780. }
  781. }
  782. }
  783. .subscribePopup {
  784. padding: 50rpx 40rpx 40rpx 40rpx;
  785. .popupTitle {
  786. text-align: center;
  787. font-size: 36rpx;
  788. font-family: PingFang SC;
  789. font-weight: bold;
  790. color: #262626;
  791. margin-bottom: 55rpx;
  792. }
  793. .popupBox {
  794. .popupTpl {
  795. flex-grow: 1;
  796. margin-bottom: 32rpx;
  797. .tplName {
  798. font-size: 32rpx;
  799. font-family: PingFang SC;
  800. font-weight: 500;
  801. color: #6A6A6A;
  802. padding-left: 12rpx;
  803. text {
  804. color: #262626;
  805. }
  806. .price {
  807. color: #FF0000 !important;
  808. }
  809. }
  810. }
  811. }
  812. .timeBox {
  813. background: url('../../static/img/img16.png') no-repeat;
  814. width: 100%;
  815. height: 346rpx;
  816. background-size: 100% 100%;
  817. padding: 50rpx 60rpx 0rpx 60rpx;
  818. margin-bottom: 35rpx;
  819. .timeTitle {
  820. position: relative;
  821. font-size: 36rpx;
  822. font-family: PingFang SC;
  823. color: #262626;
  824. }
  825. .timeTpl {
  826. padding-top: 40rpx;
  827. flex-wrap: wrap;
  828. justify-content: space-between;
  829. .timeName {
  830. flex-grow: 1;
  831. text-align: center;
  832. border-radius: 50rpx;
  833. margin-right: 20rpx;
  834. border: 1rpx solid #0062E9;
  835. color: #0062E9;
  836. padding: 16rpx 10rpx;
  837. font-size: 24rpx;
  838. }
  839. .active {
  840. background: #0062E9;
  841. color: #fff;
  842. }
  843. }
  844. }
  845. }
  846. .subscribeBtn {
  847. background: linear-gradient(90deg, #38F855, #21EDD3);
  848. border-radius: 10rpx;
  849. font-size: 35rpx;
  850. font-family: PingFang SC;
  851. font-weight: bold;
  852. color: #332730;
  853. line-height: 93rpx;
  854. text-align: center;
  855. }
  856. .transferPopup {
  857. padding: 50rpx 40rpx 40rpx 40rpx;
  858. .popupTitle {
  859. text-align: center;
  860. font-size: 36rpx;
  861. font-family: PingFang SC;
  862. font-weight: bold;
  863. color: #262626;
  864. margin-bottom: 55rpx;
  865. }
  866. .inputBox {
  867. margin-bottom: 50rpx;
  868. .inputTitle {
  869. font-size: 28rpx;
  870. font-family: PingFang SC;
  871. font-weight: 500;
  872. color: #262626;
  873. padding-bottom: 22rpx;
  874. }
  875. .inputTpl {
  876. background: #F6F6F6;
  877. border-radius: 5rpx;
  878. font-size: 28rpx;
  879. font-weight: 500;
  880. color: #5A6483;
  881. height: 100rpx;
  882. padding-left: 25rpx;
  883. }
  884. }
  885. }
  886. .input-placeholder {
  887. color: #5A6483;
  888. }
  889. </style>