TeacherSimpleAssignCourseDialog.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <template>
  2. <el-dialog
  3. class="page-dialog"
  4. :visible.sync="modalIsShow"
  5. title="分配班级"
  6. top="10vh"
  7. width="800px"
  8. :close-on-click-modal="false"
  9. :close-on-press-escape="false"
  10. append-to-body
  11. @opened="visibleChange"
  12. >
  13. <div class="part-box part-box-pad">
  14. <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
  15. <el-form-item>
  16. <el-input
  17. v-model.trim="filterLabel"
  18. placeholder="请输入班级名称"
  19. clearable
  20. @change="labelChange"
  21. ></el-input>
  22. </el-form-item>
  23. <!-- <el-form-item>
  24. <el-button type="primary" @click="toPage(1)">查询</el-button>
  25. </el-form-item> -->
  26. </el-form>
  27. <el-table
  28. ref="TableList"
  29. :data="dataList"
  30. @selection-change="handleSelectionChange"
  31. >
  32. <el-table-column width="55" align="center">
  33. <template slot="header">
  34. <el-checkbox
  35. v-model="checkAll"
  36. @change="checkAllChagne"
  37. ></el-checkbox>
  38. </template>
  39. <template slot-scope="scope">
  40. <el-checkbox v-model="scope.row.checked"></el-checkbox>
  41. </template>
  42. </el-table-column>
  43. <el-table-column prop="clazzName" label="教学班"></el-table-column>
  44. <el-table-column prop="teachers" label="当前分配人"></el-table-column>
  45. </el-table>
  46. </div>
  47. <div slot="footer">
  48. <el-button type="primary" :loading="loading" @click="submit"
  49. >确认</el-button
  50. >
  51. <el-button @click="cancel">取消</el-button>
  52. </div>
  53. </el-dialog>
  54. </template>
  55. <script>
  56. import { teacherSimpleCourseQuery, teacherSimpleAssignCourse } from "../../api";
  57. export default {
  58. name: "select-dimension-dialog",
  59. props: {
  60. teacher: {
  61. type: Object,
  62. default() {
  63. return {};
  64. },
  65. },
  66. },
  67. data() {
  68. return {
  69. modalIsShow: false,
  70. orignDataList: [],
  71. dataList: [],
  72. filterLabel: "",
  73. loading: false,
  74. };
  75. },
  76. methods: {
  77. async getList() {
  78. const data = await teacherSimpleCourseQuery({
  79. examId: this.teacher.examId,
  80. courseCode: this.teacher.courseCode,
  81. });
  82. this.orignDataList = (data || []).map((item) => {
  83. if (item.teacherList && item.teacherList.length) {
  84. item.teachers = item.teacherList.map((t) => t.name).join(",");
  85. item.checked = item.teacherList.some((t) => t.id === this.teacher.id);
  86. } else {
  87. item.teachers = "公共班级";
  88. item.checked = false;
  89. }
  90. return item;
  91. });
  92. },
  93. handleSelectionChange(val) {
  94. this.multipleSelection = val.map((item) => item.clazzId);
  95. },
  96. checkAllChagne(checked) {
  97. this.dataList.forEach((item) => {
  98. item.checked = checked;
  99. });
  100. },
  101. labelChange() {
  102. const escapeRegexpString = (value = "") =>
  103. String(value).replace(/[|\\{}()[\]^$+*?.]/g, "\\$&");
  104. const reg = new RegExp(escapeRegexpString(this.filterLabel), "i");
  105. this.dataList = this.orignDataList.filter((item) =>
  106. reg.test(item.clazzName)
  107. );
  108. },
  109. visibleChange() {
  110. this.getList();
  111. },
  112. cancel() {
  113. this.modalIsShow = false;
  114. },
  115. open() {
  116. this.modalIsShow = true;
  117. },
  118. async submit() {
  119. const clazzIdList = this.orignDataList
  120. .filter((item) => item.checked)
  121. .map((item) => item.clazzId);
  122. if (!clazzIdList.length) {
  123. this.$message.error("请选择班级");
  124. return;
  125. }
  126. if (this.loading) return;
  127. this.loading = true;
  128. const res = await teacherSimpleAssignCourse({
  129. examId: this.teacher.examId,
  130. courseCode: this.teacher.courseCode,
  131. teacherId: this.teacher.id,
  132. clazzIdList,
  133. });
  134. this.loading = false;
  135. if (!res) return;
  136. this.$message.success("保存成功!");
  137. this.cancel();
  138. },
  139. },
  140. };
  141. </script>