course-adjust.tsx 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. import OHeader from '@/components/o-header'
  2. import OSticky from '@/components/o-sticky'
  3. import {
  4. CellGroup,
  5. Cell,
  6. Button,
  7. Popup,
  8. DatePicker,
  9. DatePickerColumnType,
  10. TimePicker,
  11. TimePickerColumnType,
  12. ActionSheet,
  13. showToast
  14. } from 'vant'
  15. import { defineComponent, reactive, ref, onMounted } from 'vue'
  16. import { postMessage } from '@/helpers/native-message'
  17. import styles from './course-adjust.module.less'
  18. import { useRouter, useRoute } from 'vue-router'
  19. import request from '@/helpers/request'
  20. import dayjs from 'dayjs'
  21. import { courseEmnu } from '@/constant'
  22. import { state as globalState } from '@/state'
  23. import { browser } from '@/helpers/utils'
  24. const columnsType = ref<DatePickerColumnType[]>(['year', 'month', 'day'])
  25. const columnsTypeTime = ref<TimePickerColumnType[]>(['hour', 'minute'])
  26. const schoolId = (globalState.user.data.schoolInfos || [])
  27. .map((item: any) => {
  28. return item.id
  29. })
  30. .join(',')
  31. export default defineComponent({
  32. name: 'course-adjust',
  33. setup() {
  34. const router = useRouter()
  35. const route = useRoute()
  36. const state = reactive({
  37. id: route.query.id,
  38. showPopoverTime: false,
  39. showPopoverCourseTime: false,
  40. showPopoverTeacher: false,
  41. currentDate: [] as any,
  42. currentCourseDate: [] as any,
  43. teachers: [] as any
  44. })
  45. const forms = reactive({
  46. classDate: '',
  47. teacherId: '',
  48. courseScheduleId: '',
  49. startTime: '',
  50. endTime: ''
  51. })
  52. const courseDetail = ref({} as any)
  53. const getDetail = async () => {
  54. const { data } = await request.get(`/api-school/courseSchedule/detail/${route.query.id}`, {})
  55. courseDetail.value = { ...data }
  56. state.currentDate = [
  57. dayjs(courseDetail.value.classDate).format('YYYY'),
  58. dayjs(courseDetail.value.classDate).format('MM'),
  59. dayjs(courseDetail.value.classDate).format('DD')
  60. ]
  61. state.currentCourseDate = [
  62. dayjs(courseDetail.value.startTime).format('hh'),
  63. dayjs(courseDetail.value.startTime).format('mm')
  64. ]
  65. forms.classDate = courseDetail.value.classDate
  66. forms.teacherId = courseDetail.value.teacherId
  67. forms.courseScheduleId = courseDetail.value.id
  68. forms.startTime = courseDetail.value.startTime
  69. forms.endTime = courseDetail.value.endTime
  70. /**
  71. * classDate: '',
  72. teacherId: '',
  73. courseScheduleId: '',
  74. startTime: '',
  75. endTime: ''
  76. */
  77. }
  78. const getTeacherList = async () => {
  79. try {
  80. const { data } = await request.post(`/api-school/teacher/page`, {
  81. data: {
  82. schoolId,
  83. page: 1,
  84. rows: 99999
  85. }
  86. })
  87. state.teachers = data.rows.map((item) => {
  88. return {
  89. name: item.nickname,
  90. value: item.id as string
  91. }
  92. })
  93. } catch (e: any) {
  94. showToast(e.message)
  95. }
  96. }
  97. const checkTeacher = (val: any) => {
  98. console.log(val)
  99. courseDetail.value.teacherName = val.name
  100. forms.teacherId = val.id
  101. }
  102. onMounted(() => {
  103. getDetail()
  104. getTeacherList()
  105. })
  106. const reset = () => {
  107. getDetail()
  108. }
  109. const submit = async () => {
  110. console.log(forms)
  111. try {
  112. const { data } = await request.post(`/api-school/courseSchedule/adjust`, {
  113. data: {
  114. ...forms
  115. }
  116. })
  117. if (browser().iPhone) {
  118. postMessage({ api: 'back' })
  119. } else {
  120. this.$router.back()
  121. }
  122. showToast('调整成功')
  123. } catch (e: any) {
  124. showToast(e.message)
  125. }
  126. console.log('课程调整')
  127. }
  128. const checkTimer = (val: any) => {
  129. // forms.practiceMonth = val.selectedValues[0] + val.selectedValues[1]
  130. // forms.practiceMonthName = val.selectedValues[0] + '年' + val.selectedValues[1] + '月'
  131. forms.classDate =
  132. val.selectedValues[0] + '-' + val.selectedValues[1] + '-' + val.selectedValues[2]
  133. courseDetail.value.classDate =
  134. val.selectedValues[0] + '-' + val.selectedValues[1] + '-' + val.selectedValues[2]
  135. state.showPopoverTime = false
  136. }
  137. const checkCourseTimer = (val: any) => {
  138. forms.startTime =
  139. forms.classDate + ' ' + val.selectedValues[0] + ':' + val.selectedValues[1] + ':00'
  140. forms.endTime = dayjs(forms.startTime)
  141. .add(courseDetail.value.singleCourseTime, 'minute')
  142. .format('YYYY-MM-DD hh:mm:ss')
  143. courseDetail.value.startTime = forms.startTime
  144. state.showPopoverCourseTime = false
  145. }
  146. return () => (
  147. <>
  148. <div class={styles.courseWrap}>
  149. <OHeader isBack={true} border={false}></OHeader>
  150. <div class={styles.courseInfo}>
  151. <CellGroup inset border={false}>
  152. <Cell title="乐团名称" value={courseDetail.value.orchestraName} />
  153. <Cell title="课程类型" value={courseEmnu[courseDetail.value.type]} />
  154. <Cell
  155. title="课程开始日期"
  156. value={dayjs(courseDetail.value.classDate).format('YYYY-MM-DD')}
  157. is-link
  158. onClick={() => (state.showPopoverTime = true)}
  159. />
  160. <Cell
  161. title="课程开始时间"
  162. value={dayjs(courseDetail.value.startTime).format('hh:mm')}
  163. is-link
  164. onClick={() => {
  165. state.showPopoverCourseTime = true
  166. }}
  167. />
  168. <Cell title="课程时长" value={courseDetail.value.singleCourseTime + '分钟'} />
  169. <Cell
  170. title="授课老师"
  171. value={courseDetail.value.teacherName}
  172. onClick={() => {
  173. state.showPopoverTeacher = true
  174. }}
  175. is-link
  176. />
  177. </CellGroup>
  178. </div>
  179. <div class={styles.wall}></div>
  180. <div class={['btnGroup btnMore', styles.btnWrap]}>
  181. <Button color="#ccc" class={styles.unpassBtn} onClick={() => reset()}>
  182. 取消
  183. </Button>
  184. <Button color="#FF8057" class={styles.unpassBtn} onClick={() => submit()}>
  185. 确认调整
  186. </Button>
  187. </div>
  188. <Popup v-model:show={state.showPopoverTime} position="bottom" style="{ height: '30%' }">
  189. <DatePicker
  190. onCancel={() => {
  191. state.showPopoverTime = false
  192. }}
  193. onConfirm={checkTimer}
  194. v-model={state.currentDate}
  195. title="选择年月日"
  196. columnsType={columnsType.value}
  197. />
  198. </Popup>
  199. <Popup
  200. v-model:show={state.showPopoverCourseTime}
  201. position="bottom"
  202. style="{ height: '30%' }"
  203. >
  204. <TimePicker
  205. onCancel={() => {
  206. state.showPopoverCourseTime = false
  207. }}
  208. onConfirm={checkCourseTimer}
  209. v-model={state.currentCourseDate}
  210. title="选择开课时间"
  211. columnsType={columnsTypeTime.value}
  212. />
  213. </Popup>
  214. <ActionSheet
  215. style={{ height: '40%' }}
  216. close-on-click-action
  217. v-model:show={state.showPopoverTeacher}
  218. title="选择老师"
  219. actions={state.teachers}
  220. onSelect={checkTeacher}
  221. ></ActionSheet>
  222. </div>
  223. </>
  224. )
  225. }
  226. })