create.tsx 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. import { Grid, GridItem, Icon, Sticky } from 'vant'
  2. import { defineComponent } from 'vue'
  3. import styles from './create.module.less'
  4. import ClassInfo from './class-info'
  5. import ClassContent from './class-content'
  6. import { createState } from './createState'
  7. import request from '@/helpers/request'
  8. import nameActive from './images/icon_name_active.png'
  9. import education from './images/icon_education.png'
  10. import educationActive from './images/icon_education_active.png'
  11. import CreateSubmit from './create-submit'
  12. export default defineComponent({
  13. name: 'Create',
  14. async created() {
  15. const query = this.$route.query
  16. createState.groupId = Number(query.groupId) || 0
  17. // 判断是否是编辑
  18. if (!createState.groupId) {
  19. return false
  20. }
  21. try {
  22. document.title = '修改视频课'
  23. createState.loadingStatus = true
  24. const res = await request.get(
  25. '/api-teacher/videoLessonGroup/selectVideoLesson',
  26. {
  27. params: {
  28. groupId: createState.groupId
  29. }
  30. }
  31. )
  32. const result = res.data
  33. const {
  34. auditStatus,
  35. lessonCoverUrl,
  36. lessonPrice,
  37. lessonDesc,
  38. lessonSubject,
  39. lessonName,
  40. relationType,
  41. id,
  42. ...group
  43. } = result.lessonGroup
  44. // 判断模板图片是否在模板列表中,如果不在则是用户自己上传的图片
  45. const statusUrl = createState.templateList.includes(lessonCoverUrl)
  46. ? true
  47. : false
  48. createState.lessonGroup = {
  49. id: id,
  50. lessonName: lessonName,
  51. lessonSubject: lessonSubject,
  52. lessonDesc: lessonDesc,
  53. lessonPrice: lessonPrice,
  54. relationType,
  55. lessonCoverTemplateUrl: statusUrl ? lessonCoverUrl : '',
  56. lessonCoverUrl: statusUrl ? '' : lessonCoverUrl
  57. }
  58. createState.lessonList = []
  59. result.detailList &&
  60. result.detailList.forEach((item: any) => {
  61. const tempInfo = item.musicAlbumInfos || []
  62. const relationList = tempInfo.map((info: any) => {
  63. return {
  64. relationMusicAlbum: info.relationType,
  65. musicAlbumName: info.name,
  66. musicAlbumId: info.musicAlbumId,
  67. relationId: info.id,
  68. useRelationType: relationType
  69. }
  70. })
  71. createState.lessonList.push({
  72. videoTitle: item.videoTitle,
  73. videoContent: item.videoContent,
  74. videoUrl: item.videoUrl,
  75. coverUrl: item.coverUrl,
  76. relationType: item.relationType,
  77. relationList,
  78. posterUrl: item.posterUrl // 视频封面图
  79. })
  80. })
  81. createState.loadingStatus = false
  82. } catch {
  83. //
  84. }
  85. if (
  86. createState.lessonGroup.lessonCoverUrl &&
  87. !createState.templateList.includes(createState.lessonGroup.lessonCoverUrl)
  88. ) {
  89. createState.tabIndex = 2
  90. } else {
  91. createState.tabIndex = 1
  92. }
  93. },
  94. async mounted() {
  95. try {
  96. const sysConfig = await request.get(
  97. '/api-teacher/sysConfig/queryByParamName',
  98. {
  99. params: {
  100. paramName: 'video_lesson_service_fee'
  101. }
  102. }
  103. )
  104. createState.rate = sysConfig.data.paramValue
  105. } catch {}
  106. },
  107. render() {
  108. return (
  109. <div class={styles['video-create']}>
  110. {createState.active <= 2 ? (
  111. <Sticky position="top" offsetTop={0} zIndex={999999}>
  112. <Grid
  113. border={false}
  114. style={{ paddingTop: '15px' }}
  115. direction="horizontal"
  116. columnNum="2"
  117. class={styles.gridColumn}
  118. >
  119. <GridItem
  120. v-slots={{
  121. default: () => (
  122. <>
  123. <Icon name={nameActive} size={38} />
  124. <span
  125. class={[
  126. styles.gridName,
  127. createState.active >= 1 ? styles.active : null
  128. ]}
  129. >
  130. 课程信息
  131. </span>
  132. </>
  133. )
  134. }}
  135. />
  136. <GridItem
  137. v-slots={{
  138. default: () => (
  139. <>
  140. <Icon
  141. name={
  142. createState.active === 2 ? educationActive : education
  143. }
  144. size={38}
  145. />
  146. <span
  147. class={[
  148. styles.gridName,
  149. createState.active === 2 ? styles.active : null
  150. ]}
  151. >
  152. 课程内容
  153. </span>
  154. </>
  155. )
  156. }}
  157. />
  158. </Grid>
  159. </Sticky>
  160. ) : null}
  161. {/* 课程信息 */}
  162. {createState.active === 1 ? (
  163. <>
  164. <ClassInfo />
  165. </>
  166. ) : null}
  167. {/* 课程内容 */}
  168. {createState.active === 2 ? (
  169. <>
  170. <ClassContent />
  171. </>
  172. ) : null}
  173. {/* 预览 */}
  174. {createState.active === 3 ? (
  175. <>
  176. <CreateSubmit />
  177. </>
  178. ) : null}
  179. </div>
  180. )
  181. }
  182. })