studentGroupPractice.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  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>
  10. <el-input
  11. v-model.trim="searchForm.queryCondition"
  12. @keyup.enter.native="queryCondition"
  13. clearable
  14. placeholder="学生姓名/编号/电话"
  15. ></el-input>
  16. </el-form-item>
  17. <el-form-item>
  18. <el-select
  19. v-model.trim="searchForm.status"
  20. clearable
  21. filterable
  22. placeholder="状态"
  23. >
  24. <el-option label="待激活" value="1"></el-option>
  25. <el-option label="已取消" value="4"></el-option>
  26. </el-select>
  27. </el-form-item>
  28. <el-form-item>
  29. <el-date-picker
  30. v-model="searchForm.operationDate"
  31. style="width: 410px"
  32. type="daterange"
  33. value-format="yyyy-MM-dd"
  34. range-separator="至"
  35. :picker-options="{
  36. firstDayOfWeek: 1
  37. }"
  38. start-placeholder="操作开始日期"
  39. end-placeholder="操作结束日期"
  40. ></el-date-picker>
  41. </el-form-item>
  42. <el-form-item>
  43. <el-button @click="search" type="danger">搜索</el-button>
  44. <el-button @click="onReSet" type="primary">重置</el-button>
  45. </el-form-item>
  46. </el-form>
  47. <!-- <div class="newBand"
  48. @click="resetPays"
  49. v-permission="'musicGroupStudentFee/batchUpdateCourseFee'">修改缴费金额</div> -->
  50. <el-button
  51. @click="addMember"
  52. v-if="$helpers.permission('cloudTeacherOrder/pay/student')"
  53. type="primary"
  54. style="margin-bottom: 20px"
  55. >激活云练习</el-button
  56. >
  57. <el-button
  58. type="primary"
  59. style="margin-bottom: 20px;margin-left: 12px;"
  60. v-permission="'cloudTeacherOrder/cancelInactive'"
  61. @click="resetPay"
  62. >取消资格</el-button
  63. >
  64. <el-button
  65. type="primary"
  66. style="margin-bottom: 20px;margin-left: 12px;"
  67. @click="exportList"
  68. v-permission="'export/now'"
  69. >导出</el-button
  70. >
  71. <div class="tableWrap">
  72. <el-table
  73. style="width: 100%"
  74. :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
  75. :data="tableList"
  76. ref="multipleTable"
  77. @selection-change="handleSelectionChange"
  78. >
  79. <el-table-column
  80. type="selection"
  81. :selectable="isDisabled"
  82. width="55"
  83. ></el-table-column>
  84. <el-table-column
  85. align="center"
  86. prop="studentId"
  87. label="学员编号"
  88. ></el-table-column>
  89. <el-table-column align="center" prop="name" label="学员姓名">
  90. </el-table-column>
  91. <el-table-column align="center" prop="phone" label="手机号">
  92. </el-table-column>
  93. <el-table-column
  94. align="center"
  95. prop="subjectName"
  96. label="学员声部"
  97. ></el-table-column>
  98. <el-table-column align="center" prop="type" label="云练习类型">
  99. <template slot-scope="scope">
  100. {{ scope.row.type | memberEnumType }}
  101. </template>
  102. </el-table-column>
  103. <el-table-column
  104. align="center"
  105. prop="time"
  106. label="数量"
  107. ></el-table-column>
  108. <el-table-column align="center" label="缴费金额(元)">
  109. <template slot-scope="scope">
  110. {{ scope.row.amount | hasMoneyFormat }}
  111. </template>
  112. </el-table-column>
  113. <el-table-column align="center" label="状态">
  114. <template slot-scope="scope">
  115. {{ scope.row.status | statusEnum }}
  116. </template>
  117. </el-table-column>
  118. <el-table-column align="center" label="取消原因">
  119. <template slot-scope="scope">
  120. <!-- {{ scope.row.cancelReason }} -->
  121. <tooltip :content="scope.row.cancelReason" />
  122. </template>
  123. </el-table-column>
  124. <el-table-column align="center" label="操作人">
  125. <template slot-scope="scope">
  126. {{ scope.row.operatorName }}
  127. </template>
  128. </el-table-column>
  129. <el-table-column align="center" label="操作时间">
  130. <template slot-scope="scope">
  131. {{ scope.row.operateTime }}
  132. </template>
  133. </el-table-column>
  134. <!-- <el-table-column align="center" label="操作">
  135. <template slot-scope="scope">
  136. <div>
  137. <el-button
  138. type="text"
  139. v-if="scope.row.status == 1"
  140. v-permission="'cloudTeacherOrder/cancelInactive'"
  141. @click="resetPay(scope.row)"
  142. >取消资格</el-button
  143. >
  144. </div>
  145. </template>
  146. </el-table-column> -->
  147. </el-table>
  148. <pagination
  149. sync
  150. :total.sync="rules.total"
  151. :page.sync="rules.page"
  152. :limit.sync="rules.limit"
  153. :page-sizes="rules.page_size"
  154. @pagination="getList"
  155. />
  156. </div>
  157. </div>
  158. <el-dialog
  159. title="激活云练习"
  160. :visible.sync="giveMemberVisible"
  161. width="1000px"
  162. v-if="giveMemberVisible"
  163. append-to-body
  164. >
  165. <giveMemberModel
  166. :tableList="selectStudentList"
  167. @getList="getList"
  168. @close="giveMemberVisible = false"
  169. />
  170. </el-dialog>
  171. <el-dialog
  172. title="取消资格"
  173. :visible.sync="cancelCloudStatus"
  174. width="600px"
  175. v-if="cancelCloudStatus"
  176. append-to-body
  177. >
  178. <el-form ref="cancelCloudForm" :model="reson" label-width="100px">
  179. <el-form-item
  180. prop="cancelReason"
  181. label="取消原因"
  182. :rules="[
  183. { required: true, message: '请输入取消原因', trigger: 'blur' }
  184. ]"
  185. >
  186. <el-form-item>
  187. <el-input
  188. type="textarea"
  189. v-model="reson.cancelReason"
  190. placeholder="请输入取消原因"
  191. :rows="3"
  192. maxlength="200"
  193. show-word-limit
  194. ></el-input>
  195. </el-form-item>
  196. </el-form-item>
  197. </el-form>
  198. <div slot="footer" class="dialog-footer">
  199. <el-button @click="cancelCloudStatus = false">取 消</el-button>
  200. <el-button type="primary" @click="submitDateReset">确 定</el-button>
  201. </div>
  202. </el-dialog>
  203. </div>
  204. </template>
  205. <script>
  206. import pagination from "@/components/Pagination/index";
  207. import { queryInactive, cancelInactive } from "@/views/resetTeaming/api";
  208. import giveMemberModel from "@/views/resetTeaming/modals/giveMemberModel";
  209. import Tooltip from "@/components/Tooltip";
  210. import { getTimeFormat } from "@/utils";
  211. import { Export } from "@/utils/downLoadFile";
  212. export default {
  213. components: { pagination, giveMemberModel, Tooltip },
  214. data() {
  215. let musicGroupId = this.$route.query.id;
  216. return {
  217. musicGroupId,
  218. giveMemberVisible: false,
  219. searchForm: {
  220. queryCondition: "",
  221. subjectId: "",
  222. operationDate: [],
  223. status: ""
  224. },
  225. soundList: [],
  226. tableList: [],
  227. rules: {
  228. // 分页规则
  229. limit: 10, // 限制显示条数
  230. page: 1, // 当前页
  231. total: 0, // 总条数
  232. page_size: [10, 20, 40, 50] // 选择限制显示条数
  233. },
  234. cancelCloudStatus: false,
  235. reson: {
  236. cancelReason: "",
  237. ids: ""
  238. },
  239. selectStudentList: [] // 选中的学生列表
  240. };
  241. },
  242. mounted() {
  243. this.getList();
  244. },
  245. methods: {
  246. async getList() {
  247. try {
  248. let { operationDate, ...rest } = this.searchForm;
  249. let params = {
  250. ...rest,
  251. ...getTimeFormat(
  252. operationDate,
  253. ["operateStartTime", "operateEndTime"],
  254. "YYYY-MM-DD"
  255. ),
  256. page: this.rules.page,
  257. rows: this.rules.limit
  258. };
  259. const res = await queryInactive(params);
  260. this.rules.total = res.data.total;
  261. this.tableList = res.data.rows;
  262. } catch (e) {
  263. console.log(e, "e");
  264. }
  265. queryInactive;
  266. },
  267. // 是否允许批量调整
  268. isDisabled(row, index) {
  269. // || !row.isCallNames
  270. if (row.status !== 1) {
  271. return false;
  272. } else {
  273. return true;
  274. }
  275. },
  276. handleSelectionChange(val) {
  277. this.selectStudentList = val || [];
  278. },
  279. search() {
  280. this.rules.page = 1;
  281. this.getList();
  282. },
  283. onReSet() {
  284. this.searchForm = { search: "", subjectId: "" };
  285. this.search();
  286. },
  287. addMember() {
  288. if (this.selectStudentList.length <= 0) {
  289. this.$message.error("至少选择一名学生");
  290. return;
  291. }
  292. this.giveMemberVisible = true;
  293. },
  294. resetPay() {
  295. if (this.selectStudentList.length <= 0) {
  296. this.$message.error("至少选择一名学生");
  297. return;
  298. }
  299. this.cancelCloudStatus = true;
  300. const ids = [];
  301. this.selectStudentList.forEach(item => {
  302. ids.push(item.cloudTeacherOrderId);
  303. });
  304. this.reson.ids = ids.join(",");
  305. },
  306. exportList() {
  307. let { operationDate, ...rest } = this.searchForm;
  308. let params = {
  309. ...rest,
  310. ...getTimeFormat(
  311. operationDate,
  312. ["operateStartTime", "operateEndTime"],
  313. "YYYY-MM-DD"
  314. )
  315. };
  316. Export(
  317. this,
  318. {
  319. url: "/api-web/export/now",
  320. fileName: "待激活云练习.xls",
  321. method: "post",
  322. params: {
  323. exportEnum: "EXPORT_CLOUD_TEACHER_ORDER_INACTIVE",
  324. queryInfo: params
  325. }
  326. },
  327. "您确定导出待激活云练习?"
  328. );
  329. },
  330. async submitDateReset() {
  331. this.$refs["cancelCloudForm"].validate(async flag => {
  332. if (flag) {
  333. try {
  334. await cancelInactive(this.reson);
  335. this.$message.success("取消资格成功");
  336. this.cancelCloudStatus = false;
  337. this.reson.cancelReason = "";
  338. this.getList();
  339. } catch (e) {
  340. //
  341. console.log(e, "e");
  342. }
  343. }
  344. });
  345. }
  346. },
  347. filters: {
  348. statusEnum(val) {
  349. let template = {
  350. 1: "待激活",
  351. 2: "已生效",
  352. 3: "已退 ",
  353. 4: "已取消"
  354. };
  355. return template[val];
  356. }
  357. }
  358. };
  359. </script>