index.tsx 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. import ODialog from '@/components/o-dialog'
  2. import OEmpty from '@/components/o-empty'
  3. import OHeader from '@/components/o-header'
  4. import OSticky from '@/components/o-sticky'
  5. import { trainCourseEmnu } from '@/constant'
  6. import request from '@/helpers/request'
  7. import { state } from '@/state'
  8. import dayjs from 'dayjs'
  9. import { Button, Cell, CellGroup, showDialog, showToast, Tag } from 'vant'
  10. import { defineComponent, onMounted, reactive } from 'vue'
  11. import { useRouter } from 'vue-router'
  12. import { forms, weekFormat } from '../../create'
  13. import styles from './index.module.less'
  14. export default defineComponent({
  15. name: 'train-content',
  16. setup() {
  17. // SINGLE_DELIVERY("单交付团"),
  18. // MULTIPLE_DELIVERY("多交付常规团"),
  19. // MULTIPLE_DELIVERY_SCHOOL("多交付合并团"),
  20. // SINGLE("单技"),
  21. // MUSIC_THEORY("乐理"),
  22. // INSTRUMENTAL_ENSEMBLE("合奏");
  23. /**
  24. * 1、单交付团,所在课程时间为120分钟
  25. * 2、多交付团,乐理45分钟,其它60分钟
  26. * 3、多交付合并团,单技60分钟,合奏60分钟
  27. * */
  28. const router = useRouter()
  29. const base = reactive({
  30. dialogStatus: false,
  31. dialogMessage: '',
  32. contentList: [] as any,
  33. SINGLE_DELIVERY: {
  34. SINGLE: 120,
  35. MUSIC_THEORY: 120
  36. },
  37. MULTIPLE_DELIVERY: {
  38. SINGLE: 45,
  39. MUSIC_THEORY: 60,
  40. INSTRUMENTAL_ENSEMBLE: 60
  41. },
  42. MULTIPLE_DELIVERY_SCHOOL: {
  43. SINGLE: 60,
  44. MUSIC_THEORY: 60,
  45. INSTRUMENTAL_ENSEMBLE: 60
  46. },
  47. disabled: false // 判断是否有班级
  48. })
  49. const getClasses = async () => {
  50. try {
  51. const { data } = await request.get(
  52. '/api-school/orchestra/trainingContent/' + state.user.data.school.id
  53. )
  54. base.contentList = data || []
  55. } catch {
  56. //
  57. }
  58. }
  59. const onSubmit = async () => {
  60. try {
  61. if (base.contentList.length <= 0) {
  62. base.dialogStatus = true
  63. base.dialogMessage = '暂无可排课班级'
  64. return
  65. }
  66. const list = base.contentList
  67. const trainingPlanClassList: any = []
  68. console.log(forms, 'forms')
  69. list.forEach((item: any) => {
  70. trainingPlanClassList.push({
  71. orchestraId: item.orchestraId,
  72. classGroupIdList: item.classGroupIdList,
  73. courseNum: forms.times,
  74. startTime: dayjs(forms.trainStartTime).format('HH:mm:ss'),
  75. endTime: dayjs(forms.trainStartTime).add(120, 'minute').format('HH:mm:ss'),
  76. singleCourseTime: base[item.deliveryType][item.classType]
  77. })
  78. })
  79. const params = {
  80. week: forms.week,
  81. schoolId: state.user.data.school.id,
  82. skipHoliday: forms.skipHoliday ? true : false,
  83. type: 'STANDARD',
  84. startDate: dayjs(forms.trainStartDate).format('YYYY-MM-DD'),
  85. trainingPlanClassList
  86. }
  87. const res = await request.post('/api-school/orchestra/trainingPlanList', {
  88. data: {
  89. ...params
  90. }
  91. })
  92. // 判断数据是否已经过期
  93. if (res.code === 999) {
  94. base.dialogStatus = true
  95. base.dialogMessage = res.message
  96. return
  97. }
  98. // 初始化 课程预览时选中的乐团编号 课程预览时选中的课程组编号
  99. forms.selectOrchestraId = null
  100. forms.selectClassGroupId = null
  101. console.log(res.data, 'date')
  102. router.push({
  103. path: '/course-preview',
  104. query: {
  105. cacheId: res.data
  106. }
  107. })
  108. } catch {
  109. //
  110. }
  111. }
  112. onMounted(() => {
  113. getClasses()
  114. })
  115. return () => (
  116. <div class={base.contentList.length <= 0 && 'emptyRootContainer'}>
  117. <OHeader />
  118. {/* 训练内容 */}
  119. {base.contentList.map((item: any) => (
  120. <CellGroup inset class={styles.cellGroup}>
  121. <Cell center>
  122. {{
  123. title: () => (
  124. <div class={styles.classType}>
  125. {trainCourseEmnu[item.classType]}
  126. <Tag round type="primary" size="medium" class={styles.classNum}>
  127. {forms.times}课时
  128. </Tag>
  129. </div>
  130. ),
  131. value: () => (
  132. <span class={styles.classTime}>
  133. 每{weekFormat(forms.week)} {dayjs(forms.trainStartTime || '').format('HH:mm')}-
  134. {dayjs(forms.trainStartTime || '')
  135. .add(base[item.deliveryType][item.classType], 'minute')
  136. .format('HH:mm')}
  137. </span>
  138. )
  139. }}
  140. </Cell>
  141. <Cell center>
  142. {{
  143. title: () => (
  144. <div class={styles.orchestra}>
  145. <p class={styles.name}>{item.orchestraName}</p>
  146. <p class={styles.class}>
  147. 共<span>{item.classGroupIdList && item.classGroupIdList.length}</span>个班级
  148. </p>
  149. </div>
  150. )
  151. }}
  152. </Cell>
  153. </CellGroup>
  154. ))}
  155. {base.contentList && base.contentList.length <= 0 && (
  156. <OEmpty btnStatus={false} tips="暂无训练内容" />
  157. )}
  158. <OSticky position="bottom">
  159. <div class={'btnGroup'}>
  160. <Button round type="primary" block onClick={onSubmit}>
  161. 下一步
  162. </Button>
  163. </div>
  164. </OSticky>
  165. <ODialog
  166. title="提示"
  167. v-model:show={base.dialogStatus}
  168. message={base.dialogMessage}
  169. confirmButtonText="确定"
  170. onConfirm={() => {
  171. router.back()
  172. }}
  173. />
  174. </div>
  175. )
  176. }
  177. })