resetClass.vue 11 KB

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