index.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913
  1. <template>
  2. <view>
  3. <ujp-navbar title="充电">
  4. <view class="slot-wrap">
  5. <view class="navbar-left"></view>
  6. <!-- <view class="navbar-right"><u-icon name="iconfontscan" custom-prefix="custom-icon" color="#1677ff" size="40"></u-icon></view>
  7. -->
  8. </view>
  9. </ujp-navbar>
  10. <view class="charge" style="padding-bottom: 0px;">
  11. <view class="chargeInfo">
  12. <view class="chargeInfo-row">
  13. <view class="u-flex">
  14. <p>站点:</p>
  15. <h4>{{detail.stationName}}</h4>
  16. </view>
  17. </view>
  18. <view class="chargeInfo-row">
  19. <view class="u-flex">
  20. <p>桩号:</p>
  21. <h4>{{detail.deviceNo}}</h4>
  22. </view>
  23. <view class="u-flex" @click="switchCharge">
  24. <span>切换充电桩</span>
  25. <u-icon name="arrow-right" color="#999" size="24"></u-icon>
  26. </view>
  27. </view>
  28. <view class="chargeInfo-row">
  29. <view class="u-flex">
  30. <p>桩名:</p>
  31. <h4>{{detail.name}}</h4>
  32. </view>
  33. <view class="u-flex" @click="showTips()" v-if="!(detail.electricityPrice&&detail.servicePrice)">
  34. <span>费用说明</span>
  35. <u-icon name="error-circle" color="#1677ff" size="32"></u-icon>
  36. </view>
  37. </view>
  38. </view>
  39. <view class="chargeMain">
  40. <template v-for="(item,i) in list">
  41. <view :key="i" class="chargeMain-item " @click="selectItem(item)" :class="{
  42. 'active':item.channelNo==submitForm.channelNo,
  43. 'occupy':item.status==1,
  44. 'fault':item.status==2,
  45. }">
  46. <p>{{i+1}}</p>
  47. <p>{{item.statusStr}}</p>
  48. </view>
  49. </template>
  50. <h2 v-if="isReady&&list.length==0">无可用通道<br />请联系客服人员</h2>
  51. </view>
  52. </view>
  53. <view class="charge">
  54. <view class="chargeInfo" v-if="!(detail.electricityPrice&&detail.servicePrice)"
  55. style="margin-bottom: 10px;">
  56. <p>充电{{listTypeIndex==0?'时长':'金额'}} <span style="color:#1677FF;margin-left:10px ">{{getListName()}}</span></p>
  57. </view>
  58. <u-subsection :list="listType" mode="subsection" active-color="#3786f4" :current="0"
  59. @change="changeListType"></u-subsection>
  60. <view class="chargeMain" v-show="listTypeIndex==0">
  61. <template v-for="(item,i) in timelist">
  62. <view :key="i" class="chargeMain-item " style="width: 30%;padding: 5px;"
  63. @click="submitForm.hour=item.id" :class="{
  64. 'active':submitForm.hour==item.id,
  65. }">
  66. <p>{{item.name}}</p>
  67. </view>
  68. </template>
  69. </view>
  70. <view class="chargeMain" v-show="listTypeIndex==1">
  71. <template v-for="(item,i) in moneylist">
  72. <view :key="i" class="chargeMain-item " style="width: 30%;padding: 5px;"
  73. @click="submitForm.amount=item.id" :class="{
  74. 'active':submitForm.amount==item.id,
  75. }">
  76. <p>{{item.name}}</p>
  77. </view>
  78. </template>
  79. </view>
  80. <view class="chargeInfo" style="margin-bottom: 10px;">
  81. <p v-show="listTypeIndex==0"><span style="color:red">*</span>按时间付费:需要先充值,从余额中扣费,适用会员用户。</p>
  82. <p v-show="listTypeIndex==1"><span style="color:red">*</span>按金额付费:无需充值,先付费后使用,未使用完的费用原路退回。</p>
  83. </view>
  84. <view class="chargeInfo" v-if="(detail.electricityPrice&&detail.servicePrice)"
  85. style="margin-bottom: 10px;padding-top:10px;border-top:1px solid #CDCDCD">
  86. <view style=" display: flex;
  87. justify-content: space-between;">
  88. <p>充电{{listTypeIndex==0?'时长':'金额'}} <span style="color:#1677FF;margin-left:10px ">{{getListName()}}</span>
  89. </p>
  90. <view class="u-flex" style=" color: #1677ff;
  91. margin-right: 5px;" @click="showTips()">
  92. <span>费用说明</span>
  93. <u-icon name="error-circle" color="#1677ff" size="32"></u-icon>
  94. </view>
  95. </view>
  96. <p>电费单价:{{detail.electricityPrice}}元/千瓦时</p>
  97. <p>服务费单价:{{detail.servicePrice}}元/千瓦时</p>
  98. </view>
  99. </view>
  100. <view class="charge" v-if="false">
  101. <view class="chargeTime">
  102. <view v-for="(item,i) in timelist" class="chargeTime-item " style="width: 32%;" :key="i"
  103. @click="submitForm.hour=item.id" :class="{
  104. 'chargeTime-active':submitForm.hour==item.id,
  105. 'chargeTime-first':i==0
  106. }">
  107. <template v-if="i==0">
  108. <p>充满</p>
  109. <p>自停</p>
  110. </template>
  111. <template v-else>
  112. {{item.name}}
  113. </template>
  114. </view>
  115. </view>
  116. <view class="chargeTime-text">
  117. </view>
  118. </view>
  119. <view style="padding-bottom: 100px;">
  120. <view class="charge">
  121. <view class="chargeRadio">
  122. <view class="u-flex">
  123. <u-icon name="rmb-circle-fill" color="#ff9502" size="90"></u-icon>
  124. <view class="chargeRadio-text">
  125. <p>余额支付</p>
  126. <p>现有余额¥{{user.availableBalance}} </p>
  127. </view>
  128. </view>
  129. <u-button type="warning" style=" height: 34px;z-index: 0;"
  130. @click='gotoUrl("pages/user/recharge")'>我要充值</u-button>
  131. </view>
  132. </view>
  133. </view>
  134. <view class="foot-btn">
  135. <u-button type="primary" :custom-style="customStyle" @click="submit" shape="square">开始充电</u-button>
  136. </view>
  137. <u-modal v-model="showPriceList" title="费用说明">
  138. <view class="priceListMain">
  139. <u-table v-if="detail.priceList.length"
  140. align="right"
  141. border-color="#fff" style=" padding: 20rpx;" >
  142. <u-tr class="u-tr u-tr1">
  143. <u-td class="u-td u-td1">充电功率</u-td>
  144. <template v-if="detail.priceList[0].electricityPrice&&detail.priceList[0].servicePrice">
  145. <u-td class="u-td">电费</u-td>
  146. <u-td class="u-td">服务费</u-td>
  147. </template>
  148. <u-td class="u-td" v-else>费用</u-td>
  149. </u-tr>
  150. <u-tr class="u-tr" v-for="(item,i) in detail.priceList" >
  151. <u-td class="u-td u-td1">{{item.minPower}}W-{{item.maxPower}}W</u-td>
  152. <template v-if="item.electricityPrice&&item.servicePrice">
  153. <u-td class="u-td">{{item.electricityPrice}}元/小时</u-td>
  154. <u-td class="u-td">{{item.servicePrice}}元/小时</u-td>
  155. </template>
  156. <u-td class="u-td" v-else>{{item.price}}元/小时</u-td>
  157. </u-tr>
  158. </u-table>
  159. <!-- <p v-for="(item,i) in detail.priceList" class="showPriceList" :key="i">{{item.minPower}}W-{{item.maxPower}}W
  160. <span>{{item.price}}元每小时</span></p> -->
  161. <p style=" padding: 20rpx;" v-if="detail.roundingMinute!=null&&detail.roundingMinute!=-1">
  162. 超过{{detail.roundingMinute}}分钟,按1小时记,不足{{detail.roundingMinute}}分钟,不计费</p>
  163. <p style=" padding: 20rpx;" v-if="detail.priceList.length==0">无费用说明或为免费充电模式</p>
  164. </view>
  165. </u-modal>
  166. <u-modal v-model="showmodel" @confirm="confirm" :showCancelButton="true" title="订单信息">
  167. <div class="showmodel">
  168. <p>桩号</p>{{detail.deviceNo}}
  169. </div>
  170. <div class="showmodel">
  171. <p>充电通道</p>{{submitForm.channelNo}}
  172. </div>
  173. <div class="showmodel">
  174. <p>支付方式</p>{{listTypeIndex==0?'余额支付':'微信支付'}}
  175. </div>
  176. <div class="showmodel">
  177. <p>充电{{listTypeIndex==0?'时长':'金额'}}</p>{{getListName()}}
  178. </div>
  179. <p class="showmodel" style="color: red;" v-if="listTypeIndex==0&&submitForm.hour==0">充满自停模式,设备充满后会自动停止计费,剩余费用会原路返还</p>
  180. <p class="showmodel" style="color: red;" v-if="listTypeIndex==1">按金额付费:无需充值,先付费后使用,未使用完的费用原路退回。</p>
  181. </u-modal>
  182. <u-modal v-model="showmodal2" :show-cancel-button="true" title="余额不足" confirm-text="前往充值"
  183. content="账户余额不足,充值成功后开始充电" @confirm="wxpay"></u-modal>
  184. </view>
  185. </template>
  186. <script>
  187. import * as API from '@/apis/index.js'
  188. import * as Pay from '@/apis/weixin.js'
  189. import {
  190. wxPayJs
  191. } from '@/utils/wxpay'
  192. export default {
  193. data() {
  194. return {
  195. showmodal: false,
  196. show: false,
  197. otherNum_f: '',
  198. moneyList_f: [],
  199. showmodal2: false,
  200. moneyActiveClass_f: "-1",
  201. fee:"",
  202. id: "",
  203. showPriceList: false,
  204. showmodel: false,
  205. //充电桩信息
  206. detail: {
  207. roundingMinute: -1,
  208. priceList: [],
  209. },
  210. user: {},
  211. //充电位子list
  212. listTypeIndex: 0,
  213. listType: [{
  214. name: '按时间付费'
  215. },
  216. {
  217. name: '按金额付费(临时充电)'
  218. }
  219. ],
  220. list: [
  221. ],
  222. recordId:"",
  223. moneylist: [{
  224. id: '0.5',
  225. name: '0.5元'
  226. },
  227. {
  228. id: '1',
  229. name: '1元'
  230. },
  231. {
  232. id: '2',
  233. name: '2元'
  234. },
  235. {
  236. id: '3',
  237. name: '3元'
  238. },
  239. {
  240. id: '4',
  241. name: '4元'
  242. },
  243. {
  244. id: '5',
  245. name: '5元'
  246. },
  247. ],
  248. timelist: [{
  249. id: '0',
  250. name: '充满自停'
  251. },
  252. {
  253. id: '1',
  254. name: '1小时'
  255. },
  256. {
  257. id: '2',
  258. name: '2小时'
  259. },
  260. {
  261. id: '3',
  262. name: '3小时'
  263. },
  264. {
  265. id: '4',
  266. name: '4小时'
  267. },
  268. {
  269. id: '5',
  270. name: '5小时'
  271. },
  272. {
  273. id: '6',
  274. name: '6小时'
  275. },
  276. {
  277. id: '8',
  278. name: '8小时'
  279. },
  280. {
  281. id: '10',
  282. name: '10小时'
  283. },
  284. ],
  285. selectItemObj: {},
  286. //提交信息
  287. submitForm: {
  288. deviceNo: '',
  289. channelNo: '',
  290. hour: '0',
  291. amount: "0.5",
  292. //paytype:'YE',
  293. },
  294. isReady: false,
  295. customStyle: {
  296. background: '#1677ff'
  297. }
  298. }
  299. },
  300. onLoad(op) {
  301. if (op.id) {
  302. this.id = op.id;
  303. this.carhelp.set("qr-default-id", op.id);
  304. } else {
  305. //用于支付后返回系统 -- 点金计划
  306. var id = this.carhelp.get("qr-default-id")
  307. if (id) {
  308. this.id = this.carhelp.get("qr-default-id");
  309. }
  310. }
  311. this.init()
  312. },
  313. methods: {
  314. wxpay(){
  315. uni.showLoading({
  316. title: "加载中",
  317. mask: true,
  318. })
  319. Pay.wxpay2({
  320. recordId:this.recordId,
  321. amount:this.fee
  322. }).then((response) => {
  323. if(!response.result){
  324. uni.showToast({
  325. title: response.message
  326. })
  327. return
  328. }
  329. var data = response.data
  330. uni.hideLoading()
  331. console.log("Pay+"+new Date().getTime())
  332. wxPayJs(data);
  333. }).catch(error => {
  334. uni.showToast({
  335. title: error
  336. })
  337. })
  338. },
  339. getListName() {
  340. var list = [];
  341. var value = [];
  342. if (this.listTypeIndex == 0) {
  343. list = this.timelist;
  344. value = this.submitForm.hour;
  345. } else {
  346. list = this.moneylist;
  347. value = this.submitForm.amount;
  348. }
  349. for (var i in list) {
  350. var obj = list[i];
  351. if (obj.id == value) {
  352. return obj.name
  353. }
  354. }
  355. return ""
  356. },
  357. changeListType(e) {
  358. console.log(e)
  359. this.listTypeIndex = e;
  360. },
  361. switchCharge() {
  362. var stationId = this.detail.stationId;
  363. console.log("switchCharge")
  364. uni.redirectTo({
  365. url: '/pages/charge/switchCharge?id=' + this.id + '&stationId=' + stationId
  366. })
  367. },
  368. moneyClick_f(index, item) {
  369. this.otherNum_f = '';
  370. this.moneyActiveClass_f = index;
  371. if (item) {
  372. this.selectItemObj = item;
  373. // if(item.imgUrl){
  374. // this.selectImg=item
  375. // }
  376. }
  377. },
  378. init() {
  379. if (!this.id) {
  380. this.switchCharge()
  381. } else {
  382. var data = {
  383. //type:1 ,
  384. };
  385. API.marketingData(data).then((res) => {
  386. this.moneyList_f = res.data.chargingMarketingList
  387. if (this.moneyList_f.length > 0) {
  388. this.selectItemObj = this.moneyList_f[0];
  389. this.moneyActiveClass_f = this.moneyList_f[0].id
  390. //(this.moneyActiveClass)
  391. }
  392. }).catch(error => {
  393. uni.showToast({
  394. title: error
  395. })
  396. })
  397. uni.showLoading({
  398. title: "加载中",
  399. mask: true,
  400. })
  401. var data = {
  402. };
  403. if (this.id) {
  404. data.deviceId = this.id
  405. }
  406. API.chargingData(data).then((res) => {
  407. this.detail = res.data.chargingDevice;
  408. if (!this.detail.online) {
  409. uni.showToast({
  410. title: '设备不在线,请扫描其他二维码'
  411. })
  412. return
  413. }
  414. this.carhelp.set("qr-default-id", this.id);
  415. this.user = res.data.userAccount;
  416. this.list = this.detail.chargeStatusArray
  417. this.isReady = true;
  418. uni.hideLoading()
  419. }).catch(error => {
  420. this.isReady = true;
  421. uni.hideLoading()
  422. uni.showToast({
  423. title: error
  424. })
  425. })
  426. }
  427. },
  428. selectItem(row) {
  429. if (row.status == 0) {
  430. this.submitForm.channelNo = row.channelNo
  431. } else {
  432. uni.showToast({
  433. title: '当前设备不可选'
  434. })
  435. }
  436. },
  437. confirm(bl) {
  438. uni.showLoading({
  439. title: "加载中",
  440. mask: true,
  441. })
  442. this.submitForm.deviceNo = this.detail.deviceNo;
  443. //提交信息
  444. var submitForm = {
  445. deviceNo: this.submitForm.deviceNo,
  446. channelNo: this.submitForm.channelNo,
  447. };
  448. if (this.listTypeIndex == 0) {
  449. submitForm.hour = this.submitForm.hour
  450. } else {
  451. submitForm.amount = this.submitForm.amount
  452. }
  453. //paytype:'YE',
  454. API.startCharging(submitForm).then((res) => {
  455. if(res.data.status=="5"){
  456. uni.hideLoading()
  457. this.recordId=res.data.recordId;
  458. var fee=res.data.fee;
  459. this.fee=(fee-this.user.availableBalance).toFixed(2);
  460. //this.otherNum_f=this.fee;
  461. if(bl){
  462. this.wxpay();
  463. }else{
  464. this.showmodal2=true;
  465. }
  466. }else{
  467. this.gotoUrl("pages/index/index");
  468. }
  469. // uni.showModal({
  470. // title: '提示',
  471. // showCancel:false,
  472. // content: '启动成功',
  473. // success: res=> {
  474. // if (res.confirm) {
  475. // //付钱 改为组件
  476. // this.gotoUrl("pages/index/index");
  477. // } else if (res.cancel) {
  478. // console.log('用户点击取消');
  479. // }
  480. // }
  481. // });
  482. // uni.showToast({
  483. // title: '启动中..'
  484. // })
  485. // setTimeout(()=>{
  486. // },3000)
  487. // uni.hideLoading()
  488. }).catch(error => {
  489. uni.hideLoading()
  490. if (error == '用户账户余额不足!') {
  491. uni.showModal({
  492. title: '支付',
  493. content: '用户账户余额不足,是否充值?',
  494. success: res => {
  495. if (res.confirm) {
  496. //付钱 改为组件
  497. this.gotoUrl("pages/user/recharge");
  498. } else if (res.cancel) {
  499. console.log('用户点击取消');
  500. }
  501. }
  502. });
  503. } else {
  504. uni.showToast({
  505. title: error
  506. })
  507. }
  508. })
  509. },
  510. submit() {
  511. if (!this.submitForm.channelNo) {
  512. uni.showToast({
  513. title: '请先选择充电通道'
  514. })
  515. return
  516. }
  517. var obj = this.list.find(item => {
  518. return item.channelNo == this.submitForm.channelNo
  519. })
  520. if (!obj || obj.status != 0) {
  521. uni.showToast({
  522. title: '当前设备不可选'
  523. })
  524. return
  525. }
  526. if( this.listTypeIndex==0){
  527. this.showmodel = true;
  528. }else{
  529. this.confirm(true)
  530. }
  531. },
  532. showTips() {
  533. this.showPriceList = true
  534. }
  535. },
  536. onShow() {
  537. if (this.isReady) {
  538. if (this.id) {
  539. this.carhelp.set("qr-default-id", this.id);
  540. } else {
  541. //用于支付后返回系统 -- 点金计划
  542. this.id = this.carhelp.get("qr-default-id");
  543. }
  544. this.init()
  545. }
  546. }
  547. }
  548. </script>
  549. <style>
  550. page {
  551. background-color: #f7f7f7;
  552. }
  553. </style>
  554. <style lang="scss" scoped>
  555. .showmodel {
  556. margin-left: 20px;
  557. margin-right: 20px;
  558. p {
  559. display: inline-block;
  560. width: 100px;
  561. }
  562. }
  563. .u-tr{
  564. .u-td{
  565. font-size: 24rpx !important;
  566. }
  567. }
  568. .u-tr1{
  569. .u-td{
  570. font-size: 28rpx !important;
  571. }
  572. }
  573. .u-td1{
  574. text-align: left !important;
  575. }
  576. .u-tr:nth-child(even){
  577. background-color: rgba(245, 245, 245, 1);
  578. .u-td{
  579. border:rgba(245, 245, 245, 1);
  580. background-color: rgba(245, 245, 245, 1);
  581. }
  582. }
  583. .priceListMain{
  584. p{
  585. font-size: 24rpx;
  586. }
  587. .showPriceList {
  588. margin-left: 20px;
  589. margin-right: 20px;
  590. span {
  591. float: right;
  592. }
  593. }
  594. }
  595. .slot-wrap {
  596. display: flex;
  597. align-items: center;
  598. justify-content: space-between;
  599. flex: 1;
  600. }
  601. .navbar-right {
  602. display: flex;
  603. margin-right: 20rpx;
  604. align-items: center;
  605. }
  606. .charge {
  607. padding: 15px;
  608. background-color: #fff;
  609. margin-bottom: 10px;
  610. }
  611. .chargeRadio {
  612. display: flex;
  613. justify-content: space-between;
  614. align-items: center;
  615. width: 100%;
  616. .chargeRadio-text {
  617. margin-left: 5px;
  618. }
  619. }
  620. .chargeTime {
  621. display: flex;
  622. overflow: scroll;
  623. padding-bottom: 15px;
  624. .chargeTime-item {
  625. border: 1px solid #1677ff;
  626. border-radius: 50%;
  627. min-width: 56px;
  628. height: 56px;
  629. text-align: center;
  630. line-height: 56px;
  631. margin-right: 20px;
  632. }
  633. .chargeTime-first {
  634. line-height: 20px !important;
  635. padding-top: 6px;
  636. margin-right: 20px;
  637. }
  638. .chargeTime-active {
  639. color: #fff;
  640. background-color: #1677ff;
  641. }
  642. }
  643. .chargeTime-text {
  644. border-top: 1px solid #f7f7f7;
  645. padding-top: 15px;
  646. display: flex;
  647. align-items: center;
  648. span {
  649. margin-left: 20px;
  650. color: #1677ff;
  651. }
  652. }
  653. .chargeInfo {
  654. .chargeInfo-row {
  655. display: flex;
  656. align-items: center;
  657. justify-content: space-between;
  658. margin-bottom: 10px;
  659. p {
  660. color: #999;
  661. }
  662. h4 {
  663. font-weight: normal;
  664. }
  665. span {
  666. color: #1677ff;
  667. margin-right: 5px;
  668. }
  669. }
  670. }
  671. .chargeMain {
  672. display: flex;
  673. flex-wrap: wrap;
  674. justify-content: space-between;
  675. margin-top: 20px;
  676. .chargeMain-item {
  677. width: 18%;
  678. text-align: center;
  679. padding: 10px;
  680. border: 1px solid #1677ff;
  681. margin-bottom: 10px;
  682. border-radius: 10px;
  683. color: #1677ff;
  684. }
  685. .active {
  686. background-color: #1677ff;
  687. color: #fff;
  688. }
  689. .fault {
  690. background-color: #e1e1e1;
  691. color: #666;
  692. border: 1px solid #ccc;
  693. }
  694. .occupy {
  695. color: #FF4F3F;
  696. border: 1px solid #FF4F3F;
  697. }
  698. }
  699. .foot-btn {
  700. padding: 10px;
  701. position: fixed;
  702. left: 0;
  703. right: 0;
  704. bottom: 0;
  705. background-color: #fff;
  706. }
  707. .recharge {
  708. padding: 16px;
  709. // padding-bottom: 80px;
  710. .title {
  711. font-size: 16px;
  712. position: relative;
  713. }
  714. p {
  715. color: #666;
  716. margin-top: 4px;
  717. }
  718. .self-stop.active {
  719. background-color: #EFFFF7;
  720. border-color: #00B962;
  721. color: #00B962;
  722. }
  723. .rechargeMain {
  724. display: flex;
  725. flex-wrap: wrap;
  726. // justify-content: space-between;
  727. margin-top: 12px;
  728. margin-bottom: 5px;
  729. .recharge-item {
  730. .u-input {
  731. text-align: center !important;
  732. }
  733. width: 31%;
  734. border: 1px solid #e3e3e3;
  735. padding: 10px 0;
  736. border-radius: 4px;
  737. text-align: center;
  738. margin-bottom: 10px;
  739. position: relative;
  740. margin-left: 5px;
  741. font-size: 16px;
  742. }
  743. .active {
  744. background-color: #EFFFF7;
  745. border-color: #00B962;
  746. color: #00B962;
  747. }
  748. }
  749. .self-stop {
  750. width: 105px;
  751. height: 48px;
  752. line-height: 48px;
  753. border-radius: 4px;
  754. color: #101010;
  755. font-size: 16px;
  756. text-align: center;
  757. font-family: Arial;
  758. border: 1px solid rgba(227, 227, 227, 100);
  759. margin-top: 12px;
  760. }
  761. }
  762. .recharge-input {
  763. margin-top: 8px;
  764. margin-bottom: 32px;
  765. }
  766. .recharge-radio {
  767. margin-top: 10px;
  768. .recharge-radio-item {
  769. display: flex;
  770. align-items: center;
  771. }
  772. .recharge-radio-name {
  773. margin-left: 8px;
  774. }
  775. }
  776. </style>