close-studens.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <template>
  2. <div>
  3. <el-form :model="moneys" ref="form">
  4. <el-table
  5. style="width: 100%"
  6. max-height="300px"
  7. :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
  8. :data="list"
  9. >
  10. <el-table-column prop="name" align="center" label="学员姓名">
  11. <template slot-scope="scope">
  12. <copy-text>{{ scope.row.name }}</copy-text>
  13. </template>
  14. </el-table-column>
  15. <el-table-column prop="parentsName" align="center" label="家长姓名">
  16. <template slot-scope="scope">
  17. <copy-text>{{ scope.row.parentsName }}</copy-text>
  18. </template>
  19. </el-table-column>
  20. <el-table-column prop="parentsPhone" align="center" label="手机号码" width="130">
  21. <template slot-scope="scope">
  22. <copy-text>{{ scope.row.parentsPhone }}</copy-text>
  23. </template>
  24. </el-table-column>
  25. <el-table-column prop="classGroupName" align="center" label="班级">
  26. </el-table-column>
  27. <el-table-column prop="subjectName" align="center" label="声部">
  28. <template slot-scope="scope">
  29. <copy-text>{{ scope.row.subjectName }}</copy-text>
  30. </template>
  31. </el-table-column>
  32. <el-table-column prop="surplusCourseFee" align="center" label="退费金额(元)" width="150">
  33. <template slot-scope="scope">
  34. <el-form-item style="margin-bottom:0"
  35. :prop="'' + scope.row.userId"
  36. :rules="[
  37. { required: true, message: '' },
  38. { validator: validatorMoney(scope.row) },
  39. ]"
  40. >
  41. <el-input-number
  42. size="mini"
  43. :controls="false"
  44. :precision="2"
  45. :step="0.01"
  46. v-model="moneys[scope.row.userId]"
  47. placeholder="请输入退费金额"
  48. />
  49. </el-form-item>
  50. </template>
  51. </el-table-column>
  52. </el-table>
  53. </el-form>
  54. <div slot="footer" class="dialog-footer">
  55. <el-button @click="$emit('close')">取 消</el-button>
  56. <el-button type="primary" @click="submit">确认</el-button>
  57. </div>
  58. </div>
  59. </template>
  60. <script>
  61. import { closeMusicGroup, getMusicGroupStuReBack } from '../api'
  62. export default {
  63. props: ['detail'],
  64. mounted() {
  65. this.FetchList()
  66. },
  67. data() {
  68. return {
  69. list: [],
  70. moneys: {}
  71. }
  72. },
  73. methods: {
  74. async FetchList() {
  75. const res = await getMusicGroupStuReBack({
  76. musicGroupId: this.detail?.id,
  77. })
  78. this.list = res.data
  79. const data = {}
  80. for (const item of res.data) {
  81. data[item.userId] = item.surplusCourseFee
  82. }
  83. this.moneys = data
  84. },
  85. async submit() {
  86. try {
  87. this.$refs.form.validate(async valid => {
  88. if (valid) {
  89. await this.$confirm('是否确认关闭乐团', '提示', {
  90. type: 'warning'
  91. })
  92. await closeMusicGroup({
  93. musicGroupId: this.detail?.id,
  94. userReBack: this.moneys
  95. })
  96. this.$message.success('关闭成功')
  97. this.$emit('submited')
  98. this.$emit('close')
  99. } else {
  100. this.$$message.error('请填写完成退费金额')
  101. }
  102. })
  103. } catch (error) {}
  104. },
  105. validatorMoney(row) {
  106. return (rule, value, callback) => {
  107. if (row.surplusCourseFee < value || value < 0) {
  108. callback(new Error(`最大退费金额: ${row.surplusCourseFee}`))
  109. return
  110. }
  111. callback()
  112. }
  113. }
  114. }
  115. }
  116. </script>
  117. <style lang="less" scoped>
  118. .dialog-footer{
  119. margin-top: 20px;
  120. display: block;
  121. text-align: right;
  122. }
  123. </style>