review-detail.vue 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. <template>
  2. <div>
  3. <el-alert title="学员信息"
  4. :closable="false"
  5. class="alert"
  6. type="info"
  7. v-if="musicGroupPaymentCalenders[0].paymentType === 'ADD_STUDENT'"
  8. >
  9. </el-alert>
  10. <descriptions :column="2" v-if="musicGroupPaymentCalenders[0].paymentType === 'ADD_STUDENT'">
  11. <descriptions-item label="学员姓名:">{{
  12. username
  13. }}</descriptions-item>
  14. <descriptions-item label="手机号码:">{{
  15. phone
  16. }}</descriptions-item>
  17. </descriptions>
  18. <el-alert title="申请信息"
  19. :closable="false"
  20. class="alert"
  21. type="info">
  22. </el-alert>
  23. <descriptions :column="2">
  24. <descriptions-item label="分部名称:">{{
  25. auditDto.organName
  26. }}</descriptions-item>
  27. <descriptions-item label="乐团名称:">
  28. <overflow-text :text="auditDto.musicGroupName" width="100%"></overflow-text>
  29. </descriptions-item>
  30. <descriptions-item label="乐团编号:">
  31. <copy-text>{{ auditDto.musicGroupId }}</copy-text>
  32. </descriptions-item>
  33. <descriptions-item label="申请时间:">{{
  34. auditDto.createTime
  35. }}</descriptions-item>
  36. <descriptions-item label="申请类型:">{{
  37. auditDto.paymentType | userPaymentTypeFormat
  38. }}</descriptions-item>
  39. <descriptions-item label="订单类型:">{{
  40. auditDto.payUserType | payUserTypeFormat
  41. }}</descriptions-item>
  42. <descriptions-item :span="3" label="备注:">{{ musicGroupPaymentCalenders[0] ? musicGroupPaymentCalenders[0].memo : null }}</descriptions-item>
  43. </descriptions>
  44. <el-alert title="课程信息"
  45. :closable="false"
  46. class="alert"
  47. type="info">
  48. </el-alert>
  49. <descriptions :column="3" v-if="musicGroupPaymentCalenderCourseSettingName">
  50. <descriptions-item :span="2" label="收费标准:">{{
  51. musicGroupPaymentCalenderCourseSettingName
  52. }}</descriptions-item>
  53. </descriptions>
  54. <el-table :data="musicGroupPaymentCalenderCourseSettings"
  55. stripe
  56. v-if="musicGroupPaymentCalenderCourseSettings.length"
  57. style="width: 100%; margin-top: 10px">
  58. <el-table-column prop="courseType"
  59. label="课程类型"
  60. width="120">
  61. <template slot-scope="scope">
  62. {{ scope.row.courseType | courseTypeFormat }}
  63. </template>
  64. </el-table-column>
  65. <el-table-column prop="isStudentOptional"
  66. label="是否可选"
  67. width="100px">
  68. <template slot-scope="scope">{{scope.row.isStudentOptional ? '是' : '否'}}</template>
  69. </el-table-column>
  70. <el-table-column prop="courseTotalMinuties"
  71. label="课程总时长(分钟)">
  72. </el-table-column>
  73. <el-table-column prop="courseCurrentPrice"
  74. label="现价(元)">
  75. <template slot="header">
  76. <p style="position: relative">
  77. 现价(元)
  78. <el-tooltip placement="top" popper-class="mTooltip">
  79. <div slot="content">学生实际缴费金额</div>
  80. <i
  81. class="el-icon-question"
  82. style="font-size: 18px; color: #f56c6c"
  83. ></i>
  84. </el-tooltip>
  85. </p>
  86. </template>
  87. </el-table-column>
  88. <el-table-column prop="courseOriginalPrice"
  89. label="原价(元)">
  90. </el-table-column>
  91. </el-table>
  92. <el-table :data="musicGroupPaymentCalenderStudentDetails"
  93. stripe
  94. v-if="musicGroupPaymentCalenderStudentDetails.length"
  95. style="width: 100%; margin-top: 10px">
  96. <el-table-column prop="username"
  97. label="学员姓名">
  98. </el-table-column>
  99. <el-table-column prop="phone"
  100. label="手机号">
  101. </el-table-column>
  102. <el-table-column prop="courseType"
  103. label="课程类型"
  104. width="120">
  105. <template slot-scope="scope">
  106. {{ scope.row.courseType | courseTypeFormat }}
  107. </template>
  108. </el-table-column>
  109. <el-table-column prop="isStudentOptional"
  110. label="是否可选"
  111. width="100px">
  112. <template slot-scope="scope">{{scope.row.isStudentOptional ? '是' : '否'}}</template>
  113. </el-table-column>
  114. <el-table-column prop="courseTime"
  115. label="课程总时长(分钟)">
  116. </el-table-column>
  117. <el-table-column prop="courseCurrentPrice"
  118. label="现价(元)">
  119. <template slot="header">
  120. <p style="position: relative">
  121. 现价(元)
  122. <el-tooltip placement="top" popper-class="mTooltip">
  123. <div slot="content">学生实际缴费金额</div>
  124. <i
  125. class="el-icon-question"
  126. style="font-size: 18px; color: #f56c6c"
  127. ></i>
  128. </el-tooltip>
  129. </p>
  130. </template>
  131. <template slot-scope="scope">
  132. <div>
  133. {{ scope.row.courseCurrentPrice | moneyFormat }}
  134. </div>
  135. </template>
  136. </el-table-column>
  137. <el-table-column prop="courseOriginalPrice"
  138. label="原价(元)">
  139. <template slot-scope="scope">
  140. <div>
  141. {{ (musicGroupPaymentCalenders[0].paymentType === 'SPAN_GROUP_CLASS_ADJUST' ? scope.row.masterSubCoursePrice : scope.row.courseOriginalPrice) | moneyFormat }}
  142. </div>
  143. </template>
  144. </el-table-column>
  145. </el-table>
  146. <el-alert title="缴费周期"
  147. :closable="false"
  148. class="alert"
  149. type="info">
  150. </el-alert>
  151. <descriptions v-for="item in musicGroupPaymentCalenders" :key="item.id" :column="2">
  152. <descriptions-item label="缴费金额:">{{
  153. numeral(item.paymentAmount).format('0,0')
  154. }}</descriptions-item>
  155. <descriptions-item label="缴费方式:">{{
  156. item.paymentPattern | paymentPatternTypeFormat
  157. }}</descriptions-item>
  158. <descriptions-item :span="3" v-if="item.payUserType !== 'SCHOOL'"
  159. label="缴费日期:">{{ item.startPaymentDate|dayjsFormat }} -
  160. {{ item.deadlinePaymentDate|dayjsFormat }}</descriptions-item>
  161. <descriptions-item :span="3" label="缴费有效期:">{{ item.paymentValidStartDate | dayjsFormat }} -
  162. {{ item.paymentValidEndDate | dayjsFormat }}</descriptions-item>
  163. </descriptions>
  164. <el-dialog :visible.sync="payVisible"
  165. :close-on-click-modal="false"
  166. append-to-body
  167. width="600px"
  168. title="查看学员">
  169. <el-table :data="simpleUserDto">
  170. <el-table-column prop="userId"
  171. label="用户ID"
  172. width="180">
  173. </el-table-column>
  174. <el-table-column prop="userName"
  175. label="姓名"
  176. width="180">
  177. </el-table-column>
  178. <el-table-column prop="subjectNames"
  179. label="声部"
  180. width="180">
  181. </el-table-column>
  182. </el-table>
  183. <span slot="footer"
  184. class="dialog-footer">
  185. <el-button type="primary"
  186. @click="payVisible = false">关 闭</el-button>
  187. </span>
  188. </el-dialog>
  189. </div>
  190. </template>
  191. <script>
  192. import Vue from "vue";
  193. import numeral from 'numeral'
  194. import { musicGroupPaymentCalenderView } from "../api";
  195. import descriptions from "@/components/Descriptions";
  196. Vue.use(descriptions);
  197. const initData = {
  198. auditDto: {},
  199. musicGroupPaymentCalenderCourseSettings: [],
  200. musicGroupPaymentCalenderStudentDetails: [],
  201. simpleUserDto: [],
  202. musicGroupPaymentCalenders: [],
  203. studentNum: 0,
  204. phone: '',
  205. username: '',
  206. };
  207. export default {
  208. props: ["detail"],
  209. data () {
  210. return {
  211. payVisible: false,
  212. ...initData,
  213. };
  214. },
  215. computed: {
  216. musicGroupPaymentCalenderCourseSettingName () {
  217. const active = this.musicGroupPaymentCalenderCourseSettings[0];
  218. if (active) {
  219. return active.name;
  220. }
  221. return "";
  222. },
  223. },
  224. mounted () {
  225. this.init();
  226. },
  227. methods: {
  228. numeral,
  229. async init () {
  230. try {
  231. const res = await musicGroupPaymentCalenderView({
  232. batchNo: this.detail.batchNo,
  233. musicGroupId: this.detail.musicGroupId,
  234. });
  235. for (const key in initData) {
  236. if (initData.hasOwnProperty(key)) {
  237. this[key] = res.data[key];
  238. }
  239. }
  240. } catch (error) { }
  241. },
  242. }
  243. };
  244. </script>
  245. <style lang="less" scoped>
  246. .alert {
  247. margin: 10px 0;
  248. }
  249. // /deep/ .description-view{
  250. // border: none;
  251. // .description-tr{
  252. // border-bottom: none;
  253. // }
  254. // .description-label{
  255. // border-right: none;
  256. // background-color: transparent;
  257. // }
  258. // .description-content{
  259. // border-right: none;
  260. // }
  261. // }
  262. </style>