index.tsx 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import ColCropper from '@/components/col-cropper'
  2. import ColUpload from '@/components/col-upload'
  3. import ColUploadVideo from '@/components/col-upload-video'
  4. import ColVideo from '@/components/col-video'
  5. import {
  6. ElButton,
  7. ElCol,
  8. ElForm,
  9. ElFormItem,
  10. ElInput,
  11. ElOption,
  12. ElOptionGroup,
  13. ElRow,
  14. ElSelect
  15. } from 'element-plus'
  16. import { defineComponent } from 'vue'
  17. import { teacherState } from '../../teacherState'
  18. import styles from './index.module.less'
  19. export default defineComponent({
  20. name: 'auth',
  21. render() {
  22. console.log(teacherState.subjectList)
  23. return (
  24. <ElForm
  25. class={[styles.form, 'mx-4 mt-7']}
  26. ref="form"
  27. size="large"
  28. model={teacherState.teacherCert}
  29. labelPosition="top"
  30. >
  31. <ElFormItem
  32. label="可教授声部(可多选)"
  33. labelWidth={'170px'}
  34. prop="subjectId"
  35. rules={[
  36. {
  37. required: true,
  38. message: '请选择可教授声部'
  39. }
  40. ]}
  41. >
  42. <ElSelect
  43. multiple
  44. filterable
  45. v-model={teacherState.teacherCert.subjectId}
  46. placeholder="请选择可教授声部"
  47. class="w-full"
  48. multipleLimit={5}
  49. >
  50. {teacherState.subjectList.map((group: any) => (
  51. <ElOptionGroup key={group.id} label={group.name}>
  52. {group.subjects &&
  53. group.subjects.map((item: any) => (
  54. <ElOption key={item.id} value={item.id} label={item.name} />
  55. ))}
  56. </ElOptionGroup>
  57. ))}
  58. </ElSelect>
  59. </ElFormItem>
  60. <ElFormItem label="个人简介" labelWidth={'170px'}>
  61. <ElInput
  62. placeholder="例:毕业于中国音乐学院长笛专业,曾获得中国青年管乐演奏大赛一等奖,具有8年教学经验,能够将专业知识通过简单易懂的方式教授给学员。"
  63. type="textarea"
  64. v-model={teacherState.teacherCert.introduction}
  65. // @ts-ignore
  66. maxlength="200"
  67. showWordLimit={true}
  68. rows={5}
  69. />
  70. </ElFormItem>
  71. {teacherState.teacherCert.styleVideo.map((item: any, index: number) => (
  72. <ElRow>
  73. <ElCol span={12}>
  74. <ElFormItem
  75. label="个人风采"
  76. prop={`styleVideo.${index}.videoUrl`}
  77. rules={[{ required: true, message: '请上传视频' }]}
  78. >
  79. <ColUploadVideo v-model:modelValue={item.videoUrl} />
  80. </ElFormItem>
  81. </ElCol>
  82. <ElCol span={10}>
  83. <ElFormItem
  84. style={{ paddingTop: '32px' }}
  85. prop={`styleVideo.${index}.cover`}
  86. rules={[{ required: true, message: '请上传视频封面' }]}
  87. >
  88. {/* <ColUpload v-model:modelValue={item.cover} /> */}
  89. <ColCropper
  90. modelValue={item.cover}
  91. bucket="video-course"
  92. cropUploadSuccess={(data: any) => {
  93. item.cover = data
  94. }}
  95. options={{
  96. title: '视频封面',
  97. fixedNumber: [3.34, 2],
  98. autoCropWidth: 375,
  99. autoCropHeight: 212
  100. }}
  101. />
  102. </ElFormItem>
  103. </ElCol>
  104. </ElRow>
  105. ))}
  106. <ElFormItem>
  107. <div class="text-center w-full pt-8">
  108. <ElButton
  109. class="!w-44 !h-[48px]"
  110. round
  111. onClick={() => {
  112. teacherState.active = 0
  113. }}
  114. >
  115. 上一步
  116. </ElButton>
  117. <ElButton
  118. type="primary"
  119. class="!w-44 !h-[48px]"
  120. round
  121. onClick={() => {
  122. ;(this as any).$refs['form'].validate(async (_: boolean) => {
  123. if (_) {
  124. teacherState.active = 2
  125. }
  126. })
  127. }}
  128. >
  129. 下一步
  130. </ElButton>
  131. </div>
  132. </ElFormItem>
  133. </ElForm>
  134. )
  135. }
  136. })