studentGroupRecord.vue 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. <template>
  2. <div class="m-container">
  3. <h2>
  4. <div class="squrt"></div>
  5. 学练宝缴费记录
  6. </h2>
  7. <div class="m-core">
  8. <el-form :inline="true" :model="searchForm">
  9. <el-form-item prop="period">
  10. <el-select
  11. placeholder="周期"
  12. clearable
  13. v-model.trim="searchForm.period"
  14. style="width: 100% !important"
  15. >
  16. <el-option label="月度" value="MONTH"></el-option>
  17. <!-- <el-option label="季度" value="QUARTERLY"></el-option> -->
  18. <el-option label="半年" value="YEAR_HALF"></el-option>
  19. <el-option label="年度" value="YEAR"></el-option>
  20. <!-- <el-option label="固定天数" value="DAY"></el-option> -->
  21. </el-select>
  22. </el-form-item>
  23. <el-form-item prop="organId">
  24. <el-select
  25. class="multiple"
  26. v-model.trim="searchForm.organId"
  27. filterable
  28. clearable
  29. placeholder="请选择分部"
  30. >
  31. <el-option
  32. v-for="(item, index) in selects.branchs"
  33. :key="index"
  34. :label="item.name"
  35. :value="item.id"
  36. ></el-option>
  37. </el-select>
  38. </el-form-item>
  39. <el-form-item prop="memberRankId">
  40. <el-cascader
  41. v-model.trim="searchForm.memberRankId"
  42. :options="memberRankList"
  43. :props="{ value: 'id', label: 'name', }"
  44. :show-all-levels="false"
  45. collapse-tags
  46. clearable
  47. placeholder="请选择学练宝版本"
  48. ></el-cascader>
  49. </el-form-item>
  50. <el-form-item prop="visitTime">
  51. <el-date-picker
  52. v-model.trim="searchForm.visitTime"
  53. style="width: 410px"
  54. type="daterange"
  55. :picker-options="{
  56. firstDayOfWeek: 1
  57. }"
  58. :default-time="['00:00:00', '23:59:59']"
  59. range-separator="至"
  60. start-placeholder="创建开始日期"
  61. end-placeholder="创建结束日期"
  62. ></el-date-picker>
  63. </el-form-item>
  64. <el-form-item>
  65. <el-button @click="search" type="danger">搜索</el-button>
  66. <el-button @click="onReSet" type="primary">重置</el-button>
  67. </el-form-item>
  68. </el-form>
  69. <div class="tableWrap">
  70. <el-table
  71. style="width: 100%"
  72. :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
  73. :data="tableList"
  74. >
  75. <el-table-column
  76. align="center"
  77. prop="id"
  78. label="续费编号"
  79. ></el-table-column>
  80. <el-table-column align="center" prop="organName" label="分部名称">
  81. </el-table-column>
  82. <el-table-column align="center" prop="name" label="学练宝版本">
  83. </el-table-column>
  84. <el-table-column align="center" prop="period" label="周期">
  85. <template slot-scope="scope">
  86. {{ scope.row.period | memberEnumType }}
  87. </template>
  88. </el-table-column>
  89. <el-table-column align="center" prop="memberNum" label="周期数">
  90. </el-table-column>
  91. <el-table-column
  92. align="center"
  93. prop="subjectName"
  94. label="缴费金额(元)"
  95. >
  96. <template slot-scope="scope">
  97. {{ scope.row.actualAmount | moneyFormat(true) }}
  98. </template>
  99. </el-table-column>
  100. <el-table-column align="center" prop="type" label="已缴费人数/总人数">
  101. <template slot-scope="scope">
  102. {{ scope.row.paymentUserNum }}/{{ scope.row.userNum }}
  103. </template>
  104. </el-table-column>
  105. <el-table-column
  106. align="center"
  107. prop="status"
  108. label="审核状态"
  109. width="100px"
  110. >
  111. <template slot-scope="scope">
  112. <div>
  113. {{ scope.row.status | auditType }}
  114. </div>
  115. </template>
  116. </el-table-column>
  117. <el-table-column align="center" label="创建人" prop="operatorName">
  118. </el-table-column>
  119. <el-table-column
  120. align="center"
  121. prop="createTime"
  122. label="创建时间"
  123. ></el-table-column>
  124. <el-table-column
  125. align="center"
  126. prop="remark"
  127. label="备注"
  128. width="220px"
  129. >
  130. <template slot-scope="scope">
  131. <overflow-text width="200px" :text="scope.row.remark" />
  132. </template>
  133. </el-table-column>
  134. <el-table-column align="center" label="操作">
  135. <template slot-scope="scope">
  136. <el-button
  137. type="text"
  138. v-if="
  139. scope.row.status == 'REJECT' &&
  140. $helpers.permission('cloudCoachPaymentProgram/update')
  141. "
  142. @click="onUpdate(scope.row)"
  143. >修改</el-button
  144. >
  145. <el-button
  146. type="text"
  147. v-if="
  148. scope.row.status != 'REJECT' &&
  149. $helpers.permission(
  150. 'studentCloudCoachPaymentDetails/queryPage'
  151. )
  152. "
  153. @click="onDetail(scope.row)"
  154. >详情</el-button
  155. >
  156. </template>
  157. </el-table-column>
  158. </el-table>
  159. <pagination
  160. sync
  161. :total.sync="rules.total"
  162. :page.sync="rules.page"
  163. :limit.sync="rules.limit"
  164. :page-sizes="rules.page_size"
  165. @pagination="getList"
  166. />
  167. </div>
  168. </div>
  169. <el-dialog
  170. title="激活学练宝"
  171. :visible.sync="recordVisible"
  172. width="1000px"
  173. v-if="recordVisible"
  174. append-to-body
  175. >
  176. <recordDetail :detail="selectDetail" @close="recordVisible = false" />
  177. </el-dialog>
  178. <el-dialog
  179. title="修改学练宝缴费"
  180. width="500px"
  181. :visible.sync="memberVisible"
  182. >
  183. <createMember
  184. ref="addMember"
  185. v-if="memberVisible"
  186. type="update"
  187. :multipleSelection="selectDetail"
  188. @close="memberVisible = false"
  189. @submited="getList"
  190. />
  191. <div slot="footer" class="dialog-footer">
  192. <el-button @click="memberVisible = false">取 消</el-button>
  193. <el-button type="primary" @click="submitAddMember">确 定</el-button>
  194. </div>
  195. </el-dialog>
  196. </div>
  197. </template>
  198. <script>
  199. import pagination from "@/components/Pagination/index";
  200. import recordDetail from "@/views/studentManager/modals/recordDetail";
  201. import { cloudCoachPaymentProgramQueryPage } from "./api";
  202. import { getmemberRankList } from '@/views/categroyManager/productSystem/api'
  203. import createMember from "./modals/createMember";
  204. import { getTimes } from "@/utils";
  205. export default {
  206. components: { pagination, recordDetail, createMember },
  207. data() {
  208. return {
  209. recordVisible: false,
  210. memberVisible: false,
  211. searchForm: {
  212. memberRankId: [],
  213. visitTime: [],
  214. period: null,
  215. organId: null
  216. },
  217. memberRankList: [],
  218. tableList: [],
  219. rules: {
  220. // 分页规则
  221. limit: 10, // 限制显示条数
  222. page: 1, // 当前页
  223. total: 0, // 总条数
  224. page_size: [10, 20, 40, 50] // 选择限制显示条数
  225. },
  226. selectDetail: null
  227. };
  228. },
  229. async mounted() {
  230. await this.$store.dispatch("setBranchs");
  231. this.getMemberList()
  232. this.getList();
  233. },
  234. methods: {
  235. async getMemberList() {
  236. try {
  237. const { data } = await getmemberRankList()
  238. this.memberRankList = data || [];
  239. } catch (e) {
  240. console.log(e);
  241. }
  242. },
  243. async getList() {
  244. try {
  245. const { visitTime, memberRankId, ...search } = this.searchForm;
  246. let rankId = null
  247. if(memberRankId && memberRankId.length > 0) {
  248. rankId = memberRankId[memberRankId.length - 1]
  249. }
  250. const res = await cloudCoachPaymentProgramQueryPage({
  251. ...search,
  252. memberRankId: rankId,
  253. ...getTimes(visitTime, ["startTime", "endTime"]),
  254. page: this.rules.page,
  255. rows: this.rules.limit
  256. });
  257. this.rules.total = res.data.total;
  258. this.tableList = res.data.rows;
  259. } catch (e) {}
  260. },
  261. search() {
  262. this.rules.page = 1;
  263. this.getList();
  264. },
  265. onReSet() {
  266. this.searchForm = {
  267. visitTime: [],
  268. period: null
  269. };
  270. this.search();
  271. },
  272. onDetail(row) {
  273. this.selectDetail = row;
  274. this.recordVisible = true;
  275. },
  276. onUpdate(row) {
  277. this.memberVisible = true;
  278. this.selectDetail = row;
  279. },
  280. submitAddMember() {
  281. this.$refs.addMember.submit();
  282. }
  283. }
  284. };
  285. </script>