order.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <template>
  2. <div class="order">
  3. <header>支付列表
  4. <van-dropdown-menu>
  5. <van-dropdown-item @change="onChange" v-model="voicyPart" :options="voicyPartList" />
  6. </van-dropdown-menu>
  7. </header>
  8. <h2>{{musicGroupName}}</h2>
  9. <van-tabs>
  10. <van-tab title="缴费信息">
  11. <div class="table">
  12. <div class="title">
  13. <span></span>
  14. <span>姓名</span>
  15. <span>声部</span>
  16. <span>支付金额</span>
  17. <span>到账时间</span>
  18. </div>
  19. <div class="content">
  20. <div v-for="(data, index) in dataList" :key="data.id">
  21. <!-- <div> -->
  22. <span> {{ ++index }} </span>
  23. <span> {{ data.userName }} </span>
  24. <span> {{ data.subjectName }} </span>
  25. <span> {{ data.paymentAmount }} </span>
  26. <span> {{ data.payTime }} </span>
  27. </div>
  28. <p style="padding: 8px 0 0 8px;">缴费总额:{{ amountCount }}元</p>
  29. </div>
  30. </div>
  31. </van-tab>
  32. <van-tab title="报名信息">
  33. <div class="table">
  34. <div class="title">
  35. <span></span>
  36. <span>姓名</span>
  37. <span>班级</span>
  38. <span>声部</span>
  39. <span>备注</span>
  40. <span>调剂</span>
  41. </div>
  42. <div class="content">
  43. <div v-for="(data, index) in studentList" :key="data.id">
  44. <!-- <div> -->
  45. <span> {{ ++index }} </span>
  46. <span> {{ data.userName }} </span>
  47. <span> {{ data.currentClass }} </span>
  48. <span> {{ data.subjectName }} </span>
  49. <span> {{ data.remark }} </span>
  50. <span><van-button
  51. :disabled="data.paymentStatus == 2 ? true : false"
  52. round
  53. @click = "adjust(data)"
  54. type = "danger"
  55. size = "small">调剂</van-button> </span>
  56. </div>
  57. </div>
  58. </div>
  59. <van-action-sheet
  60. v-model="adjustStatus"
  61. :actions="couresList"
  62. cancel-text="取消"
  63. @cancel="adjustStatus = false"
  64. @select="adjustSelect" />
  65. </van-tab>
  66. </van-tabs>
  67. </div>
  68. </template>
  69. <script>
  70. import { queryStudentApply, querySubByMusicGroupId, updateSubject } from '@/api/teacher'
  71. export default {
  72. name: 'order',
  73. data() {
  74. return {
  75. musicGroupId: this.$route.query.musicGroupId,
  76. musicGroupName: this.$route.query.musicGroupName,
  77. dataList: {}, // 订单列表
  78. amountCount: 0, // 总额
  79. studentList: {}, // 学生列表
  80. couresList: [],
  81. voicyPart: 0,
  82. voicyPartList: [{
  83. text: '全部声部',
  84. value: 0
  85. }],
  86. adjustStatus: false, //
  87. changeStudent: null, // 修改的学生对象
  88. }
  89. },
  90. mounted() {
  91. window.localStorage.removeItem('userInfo') // 删除用户信息
  92. window.localStorage.removeItem('Authorization') // 删除用户信息
  93. querySubByMusicGroupId({ musicGroupId: this.musicGroupId }).then(res => {
  94. let result = res.data
  95. if(result.code == 200) {
  96. result.data.forEach(r => {
  97. this.voicyPartList.push({
  98. text: r.name,
  99. value: r.id
  100. })
  101. this.couresList.push({
  102. name: r.name,
  103. id: r.id
  104. })
  105. })
  106. }
  107. })
  108. // 获取订单信息
  109. this.getOrderList()
  110. this.getOrderStudentList()
  111. },
  112. methods: {
  113. adjust(item) {
  114. // 开始调剂
  115. if(item.paymentStatus != 2) {
  116. this.adjustStatus = true
  117. this.changeStudent = item
  118. }
  119. },
  120. adjustSelect(item) { // 修改专业
  121. updateSubject({
  122. musicGroupId: this.musicGroupId,
  123. subId: item.id,
  124. userId: this.changeStudent.userId
  125. }).then(res => {
  126. let result = res.data
  127. if(result.code == 200) {
  128. this.$toast('修改成功')
  129. this.adjustStatus = false
  130. this.getOrderStudentList()
  131. } else {
  132. this.$toast(result.msg)
  133. }
  134. })
  135. },
  136. getOrderList() {
  137. // 获取订单信息
  138. queryStudentApply({
  139. musicGroupId: this.musicGroupId,
  140. rows: 9999,
  141. subjectId: this.voicyPart ? this.voicyPart : '',
  142. paymentStatus: 2,
  143. page: 1
  144. }).then(res => {
  145. let result = res.data
  146. this.amountCount = 0
  147. if(result.code == 200) {
  148. this.dataList = result.data.rows
  149. result.data.rows.forEach(item => {
  150. this.amountCount += item.paymentAmount
  151. })
  152. }
  153. })
  154. },
  155. getOrderStudentList() {
  156. // 获取订单信息
  157. queryStudentApply({
  158. musicGroupId: this.musicGroupId,
  159. rows: 9999,
  160. subjectId: this.voicyPart ? this.voicyPart : '',
  161. page: 1
  162. }).then(res => {
  163. let result = res.data
  164. if(result.code == 200) {
  165. this.studentList = result.data.rows
  166. }
  167. })
  168. },
  169. onChange() {
  170. // 切换声部时
  171. // let subId = value ? value : ''
  172. this.getOrderList(this.voicyPart)
  173. this.getOrderStudentList(this.voicyPart)
  174. }
  175. }
  176. }
  177. </script>
  178. <style lang="less" scoped>
  179. .order {
  180. background: #fff;
  181. min-height: 100vh;
  182. }
  183. header {
  184. height: .40rem;
  185. line-height: .40rem;
  186. color: #000;
  187. font-size: .17rem;
  188. background: #fff;
  189. box-shadow: 0px 1px 8px 0px rgba(0,0,0,0.07);
  190. text-align: center;
  191. }
  192. h2 {
  193. font-size: .16rem;
  194. color: #fff;
  195. padding: .1rem 0;
  196. text-align: center;
  197. background: #14928a;
  198. }
  199. .table {
  200. .title {
  201. display: flex;
  202. align-items: center;
  203. text-align: center;
  204. border-bottom: 1px solid #eaeaea;
  205. }
  206. span {
  207. flex: 1;
  208. padding: .08rem 0;
  209. font-size: .14rem;
  210. &:first-child {
  211. width: .3rem;
  212. flex: inherit;
  213. }
  214. }
  215. .content > div{
  216. // border: 1px solid #ccc;
  217. // border-left: 0;
  218. // border-right: 0;
  219. width: 100%;
  220. display: flex;
  221. align-items: center;
  222. text-align: center;
  223. &:nth-child(2n+2) {
  224. background: #eaeaea;
  225. }
  226. }
  227. }
  228. /deep/.van-dropdown-menu {
  229. height: .4rem;
  230. position: absolute;
  231. right: .15rem;
  232. top: 0;
  233. /deep/.van-dropdown-menu__bar {
  234. height: .4rem;
  235. box-shadow: none;
  236. }
  237. }
  238. </style>