pay-desk.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <template>
  2. <!-- 自定义收银台页面模式 -->
  3. <view class="uni-pay">
  4. <view class="mobile-pay-popup" v-if="insideData && insideData.currentProviders">
  5. <view class="mobile-pay-popup-amount-box">
  6. <view>待支付金额:</view>
  7. <view class="mobile-pay-popup-amount">{{ (options.total_fee / 100).toFixed(2) }}</view>
  8. </view>
  9. <view class="mobile-pay-popup-provider-list">
  10. <uni-list>
  11. <!-- #ifdef MP-WEIXIN || H5 || APP -->
  12. <uni-list-item v-if="insideData.currentProviders.indexOf('wxpay') > -1" :thumb="insideData.images.wxpay" title="微信支付" @click="createOrder({ provider: 'wxpay' })" clickable link></uni-list-item>
  13. <!-- #endif -->
  14. <!-- #ifdef MP-ALIPAY || H5 || APP -->
  15. <uni-list-item v-if="insideData.currentProviders.indexOf('alipay') > -1" :thumb="insideData.images.alipay" title="支付宝" @click="createOrder({ provider: 'alipay' })" clickable link></uni-list-item>
  16. <!-- #endif -->
  17. </uni-list>
  18. </view>
  19. </view>
  20. <!-- 挂载支付组件 -->
  21. <uni-pay ref="uniPay" :to-success-page="false" @mounted="onMounted" @success="onSuccess"></uni-pay>
  22. </view>
  23. </template>
  24. <script>
  25. export default {
  26. data() {
  27. return {
  28. options: {
  29. total_fee: "",
  30. },
  31. insideData: {}, // uni-pay组件mounted事件获得的数据
  32. adpid: "", // 广告id
  33. return_url: "", // 支付成功后点击查看订单跳转的订单详情页面地址
  34. main_color: "", // 支付成功页面的主色调
  35. }
  36. },
  37. // 监听 - 页面每次【加载时】执行(如:前进)
  38. onLoad(options = {}) {
  39. options = JSON.parse(decodeURI(options.options));
  40. //console.log('options: ', options)
  41. this.options = options;
  42. },
  43. // 监听 - 页面【首次渲染完成时】执行。注意如果渲染速度快,会在页面进入动画完成前触发
  44. onReady(){},
  45. // 监听 - 页面每次【显示时】执行(如:前进和返回) (页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面)
  46. onShow() {},
  47. // 监听 - 页面每次【隐藏时】执行(如:返回)
  48. onHide() {},
  49. // 函数
  50. methods: {
  51. // 监听 - 支付组件加载完毕事件
  52. onMounted(insideData){
  53. this.insideData = insideData;
  54. },
  55. // 发起支付
  56. createOrder(provider){
  57. Object.assign(this.options, provider);
  58. this.$refs.uniPay.createOrder(this.options);
  59. },
  60. // 监听事件 - 支付成功
  61. onSuccess(res){
  62. console.log('success: ', res);
  63. if (res.user_order_success) {
  64. // 代表用户已付款,且你自己写的回调成功并正确执行了
  65. uni.redirectTo({
  66. url:`/uni_modules/uni-pay/pages/success/success?out_trade_no=${res.out_trade_no}&order_no=${res.pay_order.order_no}&pay_date=${res.pay_order.pay_date}&total_fee=${res.pay_order.total_fee}&adpid=${this.adpid}&return_url=${this.return_url}&main_color=${this.main_color}`
  67. });
  68. } else {
  69. // 代表用户已付款,但你自己写的回调执行成功(通常是因为你的回调代码有问题)
  70. }
  71. },
  72. },
  73. // 监听器
  74. watch:{
  75. },
  76. // 计算属性
  77. computed:{
  78. }
  79. }
  80. </script>
  81. <style lang="scss" scoped>
  82. .mobile-pay-popup {
  83. min-height: calc(100vh - var(--window-bottom) - var(--window-top));
  84. background-color: #f3f3f3;
  85. border-radius: 30rpx 30rpx 0 0;
  86. overflow: hidden;
  87. .mobile-pay-popup-title {
  88. background-color: #ffffff;
  89. text-align: center;
  90. font-weight: bold;
  91. font-size: 40rpx;
  92. padding: 20rpx;
  93. }
  94. .mobile-pay-popup-amount-box {
  95. background-color: #ffffff;
  96. padding: 30rpx;
  97. .mobile-pay-popup-amount {
  98. color: #e43d33;
  99. font-size: 60rpx;
  100. margin-top: 20rpx;
  101. }
  102. }
  103. .mobile-pay-popup-provider-list {
  104. background-color: #ffffff;
  105. margin-top: 20rpx;
  106. }
  107. }
  108. </style>