ModifyCourse.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <template>
  2. <div>
  3. <el-dialog
  4. class="modify-course"
  5. :visible.sync="modalIsShow"
  6. :title="title"
  7. top="10vh"
  8. width="550px"
  9. :close-on-click-modal="false"
  10. :close-on-press-escape="false"
  11. append-to-body
  12. @open="visibleChange"
  13. >
  14. <el-form
  15. ref="modalFormComp"
  16. :model="modalForm"
  17. :rules="rules"
  18. :key="modalForm.id"
  19. label-width="100px"
  20. >
  21. <el-form-item prop="courseName" label="课程名称:">
  22. <el-input
  23. v-model.trim="modalForm.courseName"
  24. placeholder="请输入课程名称"
  25. clearable
  26. ></el-input>
  27. </el-form-item>
  28. <el-form-item prop="courseCode" label="课程编码:">
  29. <el-input
  30. v-model.trim="modalForm.courseCode"
  31. placeholder="请输入课程编码"
  32. clearable
  33. :disabled="isEdit"
  34. ></el-input>
  35. </el-form-item>
  36. <el-form-item prop="teachingRoomId" label="开课学院:">
  37. <org-select
  38. v-model="modalForm.teachingRoomId"
  39. style="width: 100%"
  40. placeholder="开课学院"
  41. ></org-select>
  42. </el-form-item>
  43. <el-form-item label="授课班级:">
  44. <clazz-select
  45. v-model="modalForm.clazzIdSet"
  46. placeholder="请选择授课班级"
  47. multiple
  48. clearable
  49. style="width: 100%"
  50. ></clazz-select>
  51. </el-form-item>
  52. </el-form>
  53. <el-form>
  54. <el-form-item label="授课老师:">
  55. <el-button type="primary" size="mini" @click="toSelectTeacher"
  56. >选择</el-button
  57. >
  58. <br />
  59. <el-tag v-for="item in teachList" :key="item.id">
  60. {{ item.name }}({{ item.orgName }})
  61. </el-tag>
  62. </el-form-item>
  63. </el-form>
  64. <div slot="footer">
  65. <el-button type="primary" :disabled="isSubmit" @click="submit"
  66. >确认</el-button
  67. >
  68. <el-button @click="cancel">取消</el-button>
  69. </div>
  70. </el-dialog>
  71. <SelectTypeUser
  72. ref="SelectTypeUser"
  73. special-privilege="TEACHER"
  74. dialog-title="选择授课老师"
  75. :user-ids="modalForm.teachIdSet"
  76. :user-limit-count="0"
  77. @confirm="userSelected"
  78. />
  79. </div>
  80. </template>
  81. <script>
  82. import { updateCourse, getCode } from "../api";
  83. import SelectTypeUser from "../../stmms/components/SelectTypeUser.vue";
  84. const initModalForm = {
  85. id: null,
  86. courseName: "",
  87. courseCode: "",
  88. teachingRoomId: "",
  89. clazzIdSet: "",
  90. teachIdSet: [],
  91. };
  92. export default {
  93. name: "modify-course",
  94. components: { SelectTypeUser },
  95. props: {
  96. instance: {
  97. type: Object,
  98. default() {
  99. return {};
  100. },
  101. },
  102. },
  103. computed: {
  104. isEdit() {
  105. return !!this.instance.id;
  106. },
  107. title() {
  108. return (this.isEdit ? "编辑" : "新增") + "课程";
  109. },
  110. },
  111. data() {
  112. return {
  113. modalIsShow: false,
  114. isSubmit: false,
  115. modalForm: { ...initModalForm },
  116. rules: {
  117. courseName: [
  118. {
  119. required: true,
  120. // pattern: /^[0-9a-zA-Z\u4E00-\u9FA5]{1,20}$/,
  121. // message: "课程名称只能输入汉字、数字和字母,长度不能超过20",
  122. message: "课程名称不能超过30个字",
  123. max: 30,
  124. trigger: "change",
  125. },
  126. ],
  127. courseCode: [
  128. {
  129. required: true,
  130. pattern: /^[0-9a-zA-Z_-]{3,30}$/,
  131. message: "课程编码只能由数字字母短横线组成,长度在3-30之间",
  132. trigger: "change",
  133. },
  134. ],
  135. teachingRoomId: [
  136. {
  137. required: true,
  138. message: "请选择开课学院",
  139. trigger: "change",
  140. },
  141. ],
  142. clazzIdSet: [
  143. {
  144. required: true,
  145. validator: (rule, value, callback) => {
  146. if (!value || !value.length) {
  147. return callback(new Error("请选择授课班级"));
  148. }
  149. callback();
  150. },
  151. trigger: "change",
  152. },
  153. ],
  154. },
  155. teachList: [],
  156. };
  157. },
  158. methods: {
  159. initData(val) {
  160. if (val.id) {
  161. this.modalForm = this.$objAssign(initModalForm, val);
  162. this.modalForm.clazzIdSet = val.clazzList.map((item) => item.id);
  163. this.modalForm.teachIdSet = val.teachList.map((item) => item.id);
  164. this.teachList = val.teachList;
  165. } else {
  166. this.modalForm = { ...initModalForm };
  167. this.teachList = [];
  168. this.createCode();
  169. }
  170. },
  171. async createCode() {
  172. this.modalForm.courseCode = await getCode("COURSE_CODE");
  173. },
  174. visibleChange() {
  175. this.initData(this.instance);
  176. },
  177. cancel() {
  178. this.modalIsShow = false;
  179. },
  180. open() {
  181. this.modalIsShow = true;
  182. },
  183. toSelectTeacher() {
  184. this.$refs.SelectTypeUser.open();
  185. },
  186. userSelected(users) {
  187. this.teachList = users;
  188. this.modalForm.teachIdSet = users.map((item) => item.id);
  189. },
  190. async submit() {
  191. const valid = await this.$refs.modalFormComp.validate().catch(() => {});
  192. if (!valid) return;
  193. if (this.isSubmit) return;
  194. this.isSubmit = true;
  195. let datas = { ...this.modalForm };
  196. const data = await updateCourse(datas).catch(() => {
  197. this.isSubmit = false;
  198. });
  199. if (!data) return;
  200. this.isSubmit = false;
  201. this.$message.success(this.title + "成功!");
  202. this.$emit("modified");
  203. this.cancel();
  204. },
  205. },
  206. };
  207. </script>