create.tsx 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  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. import ColHeader from '@/components/col-header'
  13. export default defineComponent({
  14. name: 'Create',
  15. async created() {
  16. const query = this.$route.query
  17. createState.groupId = Number(query.groupId) || 0
  18. // 判断是否是编辑
  19. if (!createState.groupId) {
  20. return false
  21. }
  22. try {
  23. document.title = '修改视频课'
  24. createState.loadingStatus = true
  25. const res = await request.get(
  26. '/api-teacher/videoLessonGroup/selectVideoLesson',
  27. {
  28. params: {
  29. groupId: createState.groupId
  30. }
  31. }
  32. )
  33. const result = res.data
  34. const {
  35. auditStatus,
  36. lessonCoverUrl,
  37. lessonPrice,
  38. lessonDesc,
  39. lessonSubject,
  40. lessonName,
  41. relationType,
  42. id,
  43. ...group
  44. } = result.lessonGroup
  45. // 判断模板图片是否在模板列表中,如果不在则是用户自己上传的图片
  46. const statusUrl = createState.templateList.includes(lessonCoverUrl)
  47. ? true
  48. : false
  49. createState.lessonGroup = {
  50. id: id,
  51. lessonName: lessonName,
  52. lessonSubject: lessonSubject,
  53. lessonDesc: lessonDesc,
  54. lessonPrice: lessonPrice,
  55. relationType: 'RECOMMEND',
  56. lessonCoverTemplateUrl: statusUrl ? lessonCoverUrl : '',
  57. lessonCoverUrl: statusUrl ? '' : lessonCoverUrl
  58. }
  59. createState.lessonList = []
  60. result.detailList &&
  61. result.detailList.forEach((item: any) => {
  62. const tempInfo = item.musicAlbumInfos || []
  63. const relationList = tempInfo.map((info: any) => {
  64. return {
  65. relationMusicAlbum: info.relationType,
  66. musicAlbumName: info.name,
  67. musicAlbumId: info.musicAlbumId,
  68. relationId: info.id,
  69. useRelationType: 'RECOMMEND'
  70. }
  71. })
  72. createState.lessonList.push({
  73. videoTitle: item.videoTitle,
  74. videoContent: item.videoContent,
  75. videoUrl: item.videoUrl,
  76. coverUrl: item.coverUrl,
  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. request
  105. .get('/api-teacher/sysConfig/queryByParamNameList', {
  106. params: {
  107. paramNames: 'video_lesson_service_fee,video_account_period'
  108. }
  109. })
  110. .then((res: any) => {
  111. console.log(res, 'res')
  112. const data = res.data || []
  113. data.forEach((item: any) => {
  114. if (item.paramName === 'video_lesson_service_fee') {
  115. createState.rate = item.paramValue
  116. } else if (item.paramName === 'video_account_period') {
  117. createState.video_account_period = item.paramValue
  118. }
  119. })
  120. })
  121. } catch {}
  122. },
  123. render() {
  124. return (
  125. <div class={styles['video-create']}>
  126. {createState.active <= 2 ? (
  127. <Sticky position="top" offsetTop={0} zIndex={999999}>
  128. <ColHeader border={false} isFixed={false} />
  129. <Grid
  130. border={false}
  131. style={{ paddingTop: '15px' }}
  132. direction="horizontal"
  133. columnNum="2"
  134. class={styles.gridColumn}
  135. >
  136. <GridItem
  137. v-slots={{
  138. default: () => (
  139. <>
  140. <Icon name={nameActive} size={38} />
  141. <span
  142. class={[
  143. styles.gridName,
  144. createState.active >= 1 ? styles.active : null
  145. ]}
  146. >
  147. 课程信息
  148. </span>
  149. </>
  150. )
  151. }}
  152. />
  153. <GridItem
  154. v-slots={{
  155. default: () => (
  156. <>
  157. <Icon
  158. name={
  159. createState.active === 2 ? educationActive : education
  160. }
  161. size={38}
  162. />
  163. <span
  164. class={[
  165. styles.gridName,
  166. createState.active === 2 ? styles.active : null
  167. ]}
  168. >
  169. 课程内容
  170. </span>
  171. </>
  172. )
  173. }}
  174. />
  175. </Grid>
  176. </Sticky>
  177. ) : null}
  178. {/* 课程信息 */}
  179. {createState.active === 1 ? (
  180. <>
  181. <ClassInfo />
  182. </>
  183. ) : null}
  184. {/* 课程内容 */}
  185. {createState.active === 2 ? (
  186. <>
  187. <ClassContent />
  188. </>
  189. ) : null}
  190. {/* 预览 */}
  191. {createState.active === 3 ? (
  192. <>
  193. <CreateSubmit />
  194. </>
  195. ) : null}
  196. </div>
  197. )
  198. }
  199. })