course-time-detail.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <template>
  2. <div>
  3. <el-form ref="search" :model="search" inline @submit.stop.native="submit" @reset.stop.native="reset">
  4. <el-form-item prop="keyword">
  5. <el-input v-model.trim="search.keyword" clearable placeholder="学生姓名(手机、编号)"/>
  6. </el-form-item>
  7. <el-form-item prop="hastimer">
  8. <el-select v-model.trim="search.hastimer" clearable placeholder="是否存在剩余时长">
  9. <el-option label="是" value="1"></el-option>
  10. <el-option label="否" value="0"></el-option>
  11. </el-select>
  12. </el-form-item>
  13. <el-form-item>
  14. <el-button type="primary" native-type="submit">搜索</el-button>
  15. <el-button type="danger" native-type="reset">重置</el-button>
  16. </el-form-item>
  17. </el-form>
  18. <el-table
  19. :data="filterlist"
  20. :header-cell-style="{background:'#EDEEF0',color:'#444'}"
  21. >
  22. <!-- <el-table-column
  23. prop="type"
  24. label="课程类型"
  25. align="center"
  26. >
  27. <template slot-scope="scope">
  28. {{courseType[scope.row.type]}}
  29. </template>
  30. </el-table-column> -->
  31. <el-table-column
  32. prop="userId"
  33. label="学生编号"
  34. width="120"
  35. align="center"
  36. >
  37. <template slot-scope="scope">
  38. <copy-text>{{scope.row.userId}}</copy-text>
  39. </template>
  40. </el-table-column>
  41. <el-table-column
  42. prop="username"
  43. label="学生姓名"
  44. width="120"
  45. align="center"
  46. >
  47. <template slot-scope="scope">
  48. <copy-text>{{scope.row.username}}</copy-text>
  49. </template>
  50. </el-table-column>
  51. <el-table-column
  52. prop="phone"
  53. label="学生手机号"
  54. width="140"
  55. align="center"
  56. >
  57. <template slot-scope="scope">
  58. <copy-text>{{scope.row.phone}}</copy-text>
  59. </template>
  60. </el-table-column>
  61. <el-table-column
  62. label="课程时长"
  63. >
  64. <template slot-scope="scope">
  65. <el-tag
  66. style="margin-right: 5px;margin-bottom: 5px;"
  67. v-for="item in scope.row.mapDtos"
  68. :key="item.key"
  69. type="info"
  70. size="small"
  71. >{{courseType[item.key]}}: {{item.value}}分钟</el-tag>
  72. </template>
  73. </el-table-column>
  74. <!-- <el-table-column
  75. prop="time"
  76. label="剩余时长(分)"
  77. align="center"
  78. /> -->
  79. </el-table>
  80. </div>
  81. </template>
  82. <script>
  83. import { queryStudentSubTotalCourseTimes } from '../../api'
  84. import { courseType } from '@/constant'
  85. export default {
  86. props: ['detail'],
  87. data() {
  88. return {
  89. courseType,
  90. list: [],
  91. filterlist: [],
  92. extra: [],
  93. search: {
  94. keyword: '',
  95. hastimer: ''
  96. }
  97. }
  98. },
  99. mounted() {
  100. this.FetchDetail()
  101. },
  102. methods: {
  103. array2object(list = []) {
  104. const data = {}
  105. for (const item of list) {
  106. data[item.key] = item.value
  107. }
  108. return data
  109. },
  110. filter() {
  111. const { keyword, hastimer } = this.search
  112. this.filterlist = this.list.filter(item => {
  113. const user = !keyword || (
  114. ('' + item.userId).indexOf(keyword) > -1 ||
  115. ('' + item.phone).indexOf(keyword) > -1 ||
  116. ('' + item.username).indexOf(keyword) > -1
  117. )
  118. const couse = !hastimer || (hastimer == '1' && item.mapDtos.filter(dto => dto.value > 0).length)
  119. return user && couse
  120. })
  121. },
  122. submit(evt) {
  123. evt.stopPropagation()
  124. evt.stopImmediatePropagation()
  125. evt.preventDefault()
  126. this.filter()
  127. },
  128. reset(evt) {
  129. evt.stopPropagation()
  130. evt.stopImmediatePropagation()
  131. evt.preventDefault()
  132. this.search = {
  133. keyword: '',
  134. hastimer: ''
  135. }
  136. this.filter()
  137. },
  138. async FetchDetail() {
  139. try {
  140. const res = await queryStudentSubTotalCourseTimes({
  141. musicGroupId: this.$route.query.id,
  142. })
  143. this.list = res.data
  144. this.filter()
  145. if (res.data[0]) {
  146. this.extra = res.data[0].mapDtos
  147. }
  148. // this.list = Object.keys(res.data).map(item => ({type: item, time: res.data[item]}))
  149. } catch (error) {}
  150. }
  151. }
  152. }
  153. </script>