resetClass.vue 11 KB

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