giveMemberModel.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <template>
  2. <div class="chioseWrap">
  3. <p>您将为以下<span>{{tableList.length}}</span>位学员激活团练宝,激活金额<span>{{ selectStudentMoney | moneyFormat }}</span>元</p>
  4. <el-form :inline="true" ref="payForm" :model="payForm">
  5. <el-form-item prop="payType" :rules="[{required: true, message: '请选择支付方式', trigger: 'change'}]">
  6. <el-select
  7. v-model.trim="payForm.payType"
  8. style="width: 180px"
  9. clearable
  10. filterable
  11. placeholder="请选择支付方式"
  12. >
  13. <el-option label="支付宝支付" value="alipay_qr"></el-option>
  14. <el-option label="微信支付" value="wx_pub"></el-option>
  15. </el-select>
  16. </el-form-item>
  17. </el-form>
  18. <el-table
  19. style="width: 100%"
  20. :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
  21. :data="tableList"
  22. >
  23. <el-table-column align="center" prop="name" label="学员姓名">
  24. </el-table-column>
  25. <el-table-column align="center" prop="phone" label="手机号">
  26. </el-table-column>
  27. <el-table-column
  28. align="center"
  29. prop="type"
  30. label="团练宝类型"
  31. >
  32. <template slot-scope="scope">
  33. {{ scope.row.type | memberEnumType }}
  34. </template>
  35. </el-table-column>
  36. <el-table-column
  37. align="center"
  38. prop="time"
  39. label="数量"
  40. ></el-table-column>
  41. <el-table-column
  42. align="center"
  43. label="缴费金额(元)"
  44. >
  45. <template slot-scope="scope">
  46. {{ scope.row.amount | hasMoneyFormat }}
  47. </template>
  48. </el-table-column>
  49. </el-table>
  50. <span slot="footer" class="dialog-footer">
  51. <el-button @click="$listeners.close();$listeners.getList()">取 消</el-button>
  52. <el-button @click="onMemberPay" type="primary">确 定</el-button>
  53. </span>
  54. <el-dialog
  55. title="激活会员"
  56. :visible.sync="payMentVisible"
  57. :before-close="onClose"
  58. v-if="payMentVisible"
  59. width="500px"
  60. append-to-body
  61. >
  62. <giveMemberPayment :tableList="tableList" v-on="$listeners" :orderNo="orderNo" :codeUrl="codeUrl" @close="onPaymentClose" />
  63. </el-dialog>
  64. </div>
  65. </template>
  66. <script>
  67. import { cloudPay } from '../api'
  68. import { vaildStudentUrl } from '@/utils/validate'
  69. import giveMemberPayment from '@/views/resetTeaming/modals/giveMemberPayment'
  70. export default {
  71. props: ["tableList"],
  72. components: { giveMemberPayment },
  73. data() {
  74. return {
  75. payForm: {
  76. payType: null,
  77. },
  78. pay_channel: null, //支付渠道
  79. selectStudentMoney: 0, // 选中学生金额
  80. payMentVisible: false,
  81. codeUrl: null,
  82. orderNo: null,
  83. };
  84. },
  85. async mounted() {
  86. let tableList = this.tableList || []
  87. for(let i of tableList) {
  88. this.selectStudentMoney += parseFloat(i.amount)
  89. }
  90. },
  91. methods: {
  92. onMemberPay() {
  93. this.$refs.payForm.validate(async (_) => {
  94. if(_) {
  95. try {
  96. const res = await cloudPay(this.tableList)
  97. console.log(res)
  98. if(res.data.amount == 0 && res.data.orderNo) {
  99. this.$message.success('您已成功缴费')
  100. this.onPaymentClose(true)
  101. this.$listeners.getList()
  102. return
  103. }
  104. const payForm = this.payForm
  105. // // 二维码页面, 唤起支付页面
  106. const { orderNo, sign, amount, orderBody, orderSubject } = res.data.payMap
  107. this.orderNo = orderNo
  108. this.codeUrl = vaildStudentUrl() + '/#/payCenter?orderNo=' + orderNo + '&sign=' + sign + '&amount=' + amount + '&payType=' + payForm.payType + '&orderBody=' + orderBody + '&orderSubject=' + orderSubject + '&platform=cloudTeacherOrder'
  109. console.log(this.codeUrl, 'codeUrl')
  110. this.payMentVisible = true
  111. } catch(e) {}
  112. }
  113. })
  114. },
  115. onClose(done) {
  116. this.onPaymentClose(false, done)
  117. },
  118. onPaymentClose(hideTip = false, callBack) {
  119. if(hideTip) {
  120. this.payMentVisible = false
  121. this.$emit('close')
  122. this.$emit('getList')
  123. return
  124. }
  125. this.$confirm(`是否支付完成?`, "提示", {
  126. confirmButtonText: "已完成支付",
  127. cancelButtonText: "未完成支付",
  128. type: "warning",
  129. }).then(async (res) => {
  130. if(typeof callBack == 'function') {
  131. callBack()
  132. }
  133. this.payMentVisible = false
  134. }).catch(e => {
  135. if(typeof callBack == 'function') {
  136. callBack()
  137. }
  138. this.payMentVisible = false
  139. });
  140. }
  141. },
  142. };
  143. </script>
  144. <style lang="less" scoped>
  145. .chioseWrap {
  146. font-size: 16px;
  147. > p {
  148. font-weight: 500;
  149. padding-bottom: 15px;
  150. span {
  151. color: red;
  152. padding: 0 3px;
  153. }
  154. }
  155. }
  156. .dialog-footer {
  157. text-align: right;
  158. display: block;
  159. padding-top: 15px;
  160. }
  161. </style>