Pay.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <template id='Pay'>
  2. <div>
  3. <van-nav-bar title="电量充值" left-arrow @click-left="back">
  4. <span @click="go" class="iconfont" slot="right">&#xe646;</span>
  5. </van-nav-bar>
  6. <div class="fyycontent fyypay">
  7. <van-cell-group>
  8. <van-cell>
  9. <span class="iconfont color-red fyy-icon">&#xe640;</span>
  10. <span v-html="area.name"></span>
  11. <span class="m-left10" v-html="building.name"></span>
  12. <span class="m-left10" v-html="room.name">601</span>
  13. </van-cell>
  14. <div class="fyyinput">
  15. <input type="number" placeholder="请输入要充值的电量度数" v-model="kwh"/>
  16. <span class="input-right">度</span>
  17. </div>
  18. <p class="fyy-h6">价格标准:<span v-html="price"></span>元/度</p>
  19. </van-cell-group>
  20. <van-cell-group>
  21. <van-cell>
  22. <span class="iconfont color-red fyy-icon">&#xe648;</span>
  23. 选择支付方式
  24. </van-cell>
  25. <van-radio-group v-model="payType" class="fyyradio-pay">
  26. <van-cell-group>
  27. <van-cell clickable @click="payType = 'weipay'">
  28. <img src="@/assets/img/weixin.png" />
  29. <van-radio slot="right-icon" name='weipay'/>
  30. </van-cell>
  31. <van-cell clickable @click="payType = 'alipay'">
  32. <img src="@/assets/img/zhifubao.png" />
  33. <van-radio slot="right-icon" name='alipay'/>
  34. </van-cell>
  35. </van-cell-group>
  36. </van-radio-group>
  37. </van-cell-group>
  38. </div>
  39. <div class="fyyfooter">
  40. <p class="fyy-h5">
  41. 核计:
  42. <span class="fyy-h3 color-red" v-html="total"></span>元
  43. </p>
  44. <router-link to="/Pay">
  45. <van-button type="bigred" @click="pay">支付</van-button>
  46. </router-link>
  47. </div>
  48. </div>
  49. </template>
  50. <script>
  51. import remoteApi from '@/api/remoteApi'
  52. export default {
  53. data() {
  54. return {
  55. area:{},
  56. building:{},
  57. room:{},
  58. price:0,
  59. roomId : null,
  60. kwh : 0,
  61. payType: 'weipay'
  62. }
  63. },
  64. methods: {
  65. go() {
  66. this.$router.push("/Paylist")
  67. },
  68. back() {
  69. this.$router.push("/")
  70. },
  71. pay() {
  72. var self = this
  73. if(self.payType=='weipay'){
  74. //首先要获取openid
  75. self.$toast.loading({
  76. message: '处理中...',
  77. forbidClick: true,
  78. loadingType: 'spinner',
  79. duration: 10000
  80. });
  81. remoteApi.prepareWXPay(self.roomId,self.payType,self.kwh,self.total).then(resp=>{
  82. self.$toast.clear()
  83. if(resp.result) {
  84. var appId = resp.data.appId
  85. var redirectUri = encodeURIComponent(window.location.href.split('#')[0] + '#WXPay')
  86. var state = resp.data.recordId
  87. var url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirectUri}&response_type=code&scope=snsapi_userinfo&state=${state}#wechat_redirect`
  88. alert(url)
  89. window.location.href = url
  90. }
  91. else{
  92. self.$toast.fail(resp.message)
  93. }
  94. });
  95. }
  96. }
  97. },
  98. computed: {
  99. total (){
  100. return (this.kwh * this.price).toFixed(2);
  101. }
  102. },
  103. mounted () {
  104. // 当前页面是否获取到了openid?
  105. this.roomId = this.$route.query.roomId;
  106. this.$toast.loading({
  107. message: '加载中...',
  108. forbidClick: true,
  109. loadingType: 'spinner',
  110. duration: 10000
  111. });
  112. var self = this;
  113. remoteApi.queryRoomDetail(this.roomId).then((resp)=>{
  114. console.log(resp);
  115. this.$toast.clear();
  116. if(resp.result){
  117. //self.$toast.success('查询成功!')
  118. var jsonData = resp.data
  119. self.area = jsonData.area
  120. self.building = jsonData.building
  121. self.room = jsonData.room
  122. self.price = parseFloat(jsonData.price)
  123. }
  124. else {
  125. self.$toast.fail(resp.message)
  126. }
  127. });
  128. }
  129. }
  130. </script>
  131. <style scoped>
  132. </style>