serviceModel.vue 5.0 KB

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