resetClass.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. <template>
  2. <div>
  3. <el-form :model="maskForm"
  4. class="maskForm"
  5. ref="maskForm"
  6. :rules="maskRules"
  7. label-position="right"
  8. label-width="120px"
  9. :inline="true">
  10. <el-form-item label="主教老师"
  11. prop="teacher">
  12. <el-select v-model.trim="maskForm.teacher"
  13. style="width:220px!important"
  14. @change="changeTeacher"
  15. clearable
  16. filterable>
  17. <el-option v-for="(item,index) in teacherList"
  18. :key="index"
  19. :value="item.id"
  20. :label="item.realName"></el-option>
  21. </el-select>
  22. </el-form-item>
  23. <el-form-item label="助教老师"
  24. v-if="maskForm.type != 'MUSIC_NETWORK'&&maskForm.type != 'HIGH_ONLINE'&&maskForm.groupType == 'MUSIC'"
  25. prop="assistant">
  26. <el-select v-model.trim="maskForm.assistant"
  27. style="width:220px!important"
  28. clearable
  29. filterable
  30. multiple
  31. collapse-tags>
  32. <el-option v-for="(item,index) in teacherList"
  33. :key="index"
  34. :value="item.id"
  35. :label="item.realName"></el-option>
  36. </el-select>
  37. </el-form-item>
  38. <el-form-item label="上课日期"
  39. prop="date">
  40. <el-date-picker v-model.trim="maskForm.date"
  41. type="date"
  42. :picker-options="{
  43. firstDayOfWeek:1
  44. }"
  45. value-format="yyyy-MM-dd"
  46. placeholder="选择日期"></el-date-picker>
  47. </el-form-item>
  48. <el-form-item label="课程时长(分钟)"
  49. prop="timer">
  50. <el-input type='number'
  51. :disabled='isDisabled'
  52. style="width:220px!important"
  53. v-model="maskForm.timer"></el-input>
  54. </el-form-item>
  55. <el-form-item label="开始时间"
  56. prop="startTime">
  57. <el-time-picker placeholder="起始时间"
  58. v-model.trim="maskForm.startTime"
  59. @change="changeStartTime"
  60. format='HH:mm'
  61. value-format='HH:mm'
  62. :picker-options="{
  63. selectableRange: '04:30:00 - 23:30:00'
  64. }"></el-time-picker>
  65. </el-form-item>
  66. <el-form-item label="结束时间"
  67. prop="endTime">
  68. <el-time-picker placeholder="结束时间"
  69. v-model.trim="maskForm.endTime"
  70. disabled
  71. format='HH:mm'
  72. value-format='HH:mm'
  73. :picker-options="{
  74. start: '04:30',
  75. step: '00:05',
  76. end: '23:30',
  77. minTime: maskForm.startTime
  78. }"></el-time-picker>
  79. </el-form-item>
  80. <el-form-item label="课程类型"
  81. v-if="maskForm.type == 'VIP'"
  82. prop="courseType">
  83. <el-select clearable
  84. style="width:220px!important"
  85. v-model.trim="maskForm.teachMode">
  86. <el-option label="线上课"
  87. value="ONLINE"></el-option>
  88. <el-option label="线下课"
  89. value="OFFLINE"></el-option>
  90. </el-select>
  91. </el-form-item>
  92. <el-form-item label="教学地点"
  93. v-if="maskForm.teachMode == 'OFFLINE'&& maskForm.type == 'VIP'">
  94. <el-select v-model.trim="maskForm.address"
  95. style="width:220px!important"
  96. filterable
  97. clearable>
  98. <el-option v-for="(item,index) in schoolList"
  99. :key="index"
  100. :value="item.id"
  101. :label="item.name"></el-option>
  102. </el-select>
  103. </el-form-item>
  104. </el-form>
  105. <div slot="footer"
  106. class="dialog-footer">
  107. <el-button @click="$listeners.closeReset">取 消</el-button>
  108. <el-button type="primary"
  109. @click="submitResetClass">确 定</el-button>
  110. </div>
  111. </div>
  112. </template>
  113. <script>
  114. import { diffTimerFormMinute, addTimerFormMinute } from '@/utils/date'
  115. import { getTeacher, resetCourse, getCourseScheduleDetail } from "@/api/buildTeam";
  116. import { getTeachSchool } from "@/api/teacherManager";
  117. import cleanDeep from 'clean-deep'
  118. import dayjs from 'dayjs';
  119. export default {
  120. props: ["show", "id", "isDisabled"],
  121. data () {
  122. return {
  123. courseVisible: false,
  124. maskForm: {
  125. teacher: null,
  126. assistant: null,
  127. date: null,
  128. timer: null,
  129. startTime: null,
  130. endTime: null
  131. },
  132. maskRules: {
  133. teacher: [
  134. { required: true, message: "请选择主教老师名称", trigger: "blur" }
  135. ],
  136. date: [{ required: true, message: "请选择上课时间", trigger: "blur" }],
  137. startTime: [{ required: true, message: '请选择上课开始时间', trigger: 'blur' },],
  138. endTime: [{ required: true, message: '请选择上课结束时间', trigger: 'blur' },],
  139. },
  140. teacherList: [],
  141. schoolList: []
  142. }
  143. },
  144. mounted () {
  145. getTeacher().then(res => {
  146. if (res.code == 200) {
  147. this.teacherList = res.data;
  148. }
  149. });
  150. this.getDetail(this.id)
  151. },
  152. methods: {
  153. submitResetClass () {
  154. let maskForm = this.maskForm;
  155. if (!maskForm.startTime || !maskForm.endTime) {
  156. this.$message.error("请填写开始时间或结束时间");
  157. return;
  158. }
  159. this.$confirm("是否确定?", "提示", {
  160. confirmButtonText: "确定",
  161. cancelButtonText: "取消",
  162. type: "warning"
  163. })
  164. .then(() => {
  165. let teachingTeacherIdList = maskForm.assistant.join(",");
  166. if (teachingTeacherIdList.length <= 0) {
  167. let teachingTeacherIdList = null;
  168. }
  169. let obj = {
  170. actualTeacherId: maskForm.teacher,
  171. startClassTimeStr: maskForm.startTime,
  172. endClassTimeStr: maskForm.endTime,
  173. id: maskForm.id,
  174. teachingTeacherIdList,
  175. classDate: maskForm.date,
  176. type: maskForm.type,
  177. groupType: maskForm.groupType,
  178. schoolId: this.maskForm.address,
  179. teachMode: this.maskForm.teachMode,
  180. };
  181. resetCourse(cleanDeep(obj)).then(res => {
  182. if (res.code == 200) {
  183. this.$message.success("修改成功");
  184. this.$emit('getList')
  185. this.$emit('closeReset')
  186. // this.getList();
  187. // this.courseVisible = false;
  188. }
  189. });
  190. })
  191. .catch(() => { });
  192. },
  193. changeStartTime (val) {
  194. this.$nextTick(res => {
  195. console.log(addTimerFormMinute(this.maskForm.date, val, this.maskForm.timer))
  196. if (val) {
  197. this.$set(this.maskForm, 'endTime', addTimerFormMinute(this.maskForm.date, val, this.maskForm.timer))
  198. } else {
  199. this.$set(this.maskForm, 'endTime', '')
  200. }
  201. })
  202. },
  203. changeTeacher (val) {
  204. if (val) {
  205. getTeachSchool({
  206. userId: val
  207. }).then(res => {
  208. if (res.code == 200) {
  209. this.schoolList = res.data;
  210. }
  211. })
  212. this.maskForm.address = ''
  213. }
  214. },
  215. getDetail (id) {
  216. getCourseScheduleDetail({ courseScheduleId: id }).then(res => {
  217. if (res.code == 200) {
  218. console.log(res.data.groupType)
  219. this.maskForm = {
  220. id: res.data.id,
  221. teacher: res.data.actualTeacherId,
  222. assistant: [],
  223. date: dayjs(res.data.classDate).format('YYYY-MM-DD'),
  224. startTime: dayjs(res.data.startClassTime).format('HH:mm'),
  225. endTime: dayjs(res.data.endClassTime).format('HH:mm'),
  226. timer: null,
  227. type: res.data.type,
  228. groupType: res.data.groupType,
  229. schoolId: res.data.schoolId,
  230. teachMode: res.data.teachMode,
  231. }
  232. this.maskForm.assistant = [];
  233. for (let i in res.data.teachingTeachers) {
  234. if (res.data.teachingTeachers[i].teacherRole == "TEACHING") {
  235. this.maskForm.assistant.push(res.data.teachingTeachers[i].userId);
  236. }
  237. }
  238. let time = diffTimerFormMinute(dayjs(res.data.classDate).format('YYYY-MM-DD'), dayjs(res.data.startClassTime).format('HH:mm'), dayjs(res.data.endClassTime).format('HH:mm'))
  239. console.log(dayjs(res.data.startClassTime).format('HH:mm'))
  240. this.maskForm.timer = time;
  241. if (this.maskForm.teacher) {
  242. getTeachSchool({
  243. userId: this.maskForm.teacher
  244. }).then(res => {
  245. if (res.code == 200) {
  246. this.schoolList = res.data;
  247. }
  248. })
  249. }
  250. }
  251. })
  252. }
  253. },
  254. watch: {
  255. id (val) {
  256. if (val) {
  257. this.getDetail(val)
  258. }
  259. },
  260. // show (val) {
  261. // console.log(val)
  262. // this.courseVisible = val;
  263. // },
  264. // courseVisible (val) {
  265. // if (!val) {
  266. // this.$emit("closeReset");
  267. // }
  268. // },
  269. // item: {
  270. // immediate: true,
  271. // deep: true,
  272. // handler (row, oldValue) {
  273. // if (row) {
  274. // console.log(row)
  275. // this.maskForm.assistant = [];
  276. // for (let i in row.teachingTeachers) {
  277. // if (row.teachingTeachers[i].teacherRole == "TEACHING") {
  278. // this.maskForm.assistant.push(row.teachingTeachers[i].userId);
  279. // }
  280. // }
  281. // let time = diffTimerFormMinute(dayjs(row.classDate).format('YYYY-MM-DD'), dayjs(row.startClassTime).format('HH:mm'), dayjs(row.endClassTime).format('HH:mm'))
  282. // console.log(dayjs(row.startClassTime).format('HH:mm'))
  283. // this.maskForm.timer = time;
  284. // } else {
  285. // this.maskForm = {
  286. // id: null,
  287. // teacher: null,
  288. // assistant: null,
  289. // date: null,
  290. // startTime: null,
  291. // endTime: null,
  292. // timer: null,
  293. // type: null,
  294. // groupType: null,
  295. // schoolId: null,
  296. // teachMode: null,
  297. // }
  298. // }
  299. // }
  300. // },
  301. 'maskForm.timer' (val) {
  302. this.$nextTick(res => {
  303. if (val) {
  304. this.$set(this.maskForm, 'endTime', addTimerFormMinute(this.maskForm.date, this.maskForm.startTime, val))
  305. } else {
  306. this.$set(this.maskForm, 'endTime', '')
  307. }
  308. })
  309. }
  310. }
  311. }
  312. </script>
  313. <style lang="scss" scoped>
  314. /deep/.dialog-footer {
  315. display: flex;
  316. flex-direction: row;
  317. justify-content: flex-end;
  318. }
  319. </style>