index.tsx 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. import { Button, Sticky, Toast } from 'vant'
  2. import { defineComponent } from 'vue'
  3. import styles from './index.module.less'
  4. import CertInfo from './cert-info'
  5. import ColProtocol from '@/components/col-protocol'
  6. import { teacherState } from './teacherState'
  7. import Steps from './steps'
  8. import CertOne from './cert-one'
  9. import CertTwo from './cert-two'
  10. import CertThree from './cert-three'
  11. import { checkIDCard } from '@/helpers/validate'
  12. import request from '@/helpers/request'
  13. import ColResult from '@/components/col-result'
  14. import { state } from '@/state'
  15. import ColHeader from '@/components/col-header'
  16. import { browser } from '@/helpers/utils'
  17. export default defineComponent({
  18. name: 'teacherCert',
  19. data() {
  20. const query = this.$route.query
  21. return {
  22. agreeStatus: false
  23. }
  24. },
  25. async mounted() {
  26. try {
  27. // 老师入驻状态 0、未申请 UNPAALY、未申请 DOING、审核中 PASS、通过 UNPASS、不通过
  28. const entryStatus = state.user.data?.entryStatus || 0
  29. teacherState.authStatus =
  30. entryStatus === 'DOING' || entryStatus === 'PASS' ? true : false
  31. // 如果已经认证,则不用获取声部信息
  32. if (teacherState.authStatus) {
  33. teacherState.active = teacherState.authStatus ? 4 : 1
  34. return
  35. }
  36. if (teacherState.subjectList.length <= 0) {
  37. const res = await request.get('/api-teacher/subject/subjectSelect')
  38. teacherState.subjectList = res.data || []
  39. }
  40. const teacherInfo = await request.get(
  41. '/api-teacher/teacherAuthEntryRecord/getLastRecordByUserId'
  42. )
  43. teacherState.teacherInfo = teacherInfo.data || {}
  44. const info = teacherState.teacherInfo
  45. teacherState.teacherCert.introduction = info.introduction
  46. teacherState.teacherCert.subjectId = info.subjectId
  47. teacherState.teacherCert.graduateSchool = info.graduateSchool
  48. teacherState.teacherCert.subject = info.subject
  49. teacherState.teacherCert.styleVideo = info.styleVideoJson
  50. ? JSON.parse(info.styleVideoJson)
  51. : [{ videoUrl: '', cover: '' }]
  52. teacherState.teacherCert.gradCertificate = info.gradCertificate
  53. teacherState.teacherCert.degreeCertificate = info.degreeCertificate
  54. teacherState.teacherCert.teacherCertificate = info.teacherCertificate
  55. // 判断是否在声部,如果没有声部则取用户信息里面的声部
  56. if (!info.subjectId) {
  57. teacherState.teacherCert.subjectId = state.user.data.subjectId || ''
  58. }
  59. } catch {
  60. //
  61. }
  62. },
  63. computed: {
  64. authStatus(): boolean {
  65. return !!teacherState.authStatus
  66. },
  67. userAuth() {
  68. // 判断是否实名过
  69. const users = state.user.data || {}
  70. return !!(users.idCardNo && users.realName)
  71. }
  72. },
  73. methods: {
  74. async next() {
  75. const realName = teacherState.teacherCert.realName
  76. if (!realName) {
  77. Toast('请填写真实姓名')
  78. return
  79. }
  80. const idCardNo = teacherState.teacherCert.idCardNo
  81. if (!this.userAuth) {
  82. if (!checkIDCard(idCardNo || '')) {
  83. Toast('请填写正确的身份证号码')
  84. return false
  85. }
  86. }
  87. if (!this.agreeStatus) {
  88. Toast('请阅读并同意协议')
  89. return
  90. }
  91. if (!teacherState.teacherCert.birthdate) {
  92. Toast('请选择出生日期')
  93. return
  94. }
  95. try {
  96. if (!this.userAuth) {
  97. await request.post('/api-teacher/teacher/realNameAuth', {
  98. data: {
  99. realName,
  100. idCardNo,
  101. contract: true,
  102. save: true
  103. }
  104. })
  105. }
  106. teacherState.active = 2
  107. } catch {}
  108. },
  109. next2() {
  110. if (!teacherState.teacherCert.subjectId) {
  111. Toast('请选择教授科目')
  112. return
  113. }
  114. if (!teacherState.teacherCert.styleVideo[0].videoUrl) {
  115. Toast('请上传个人风采视频')
  116. return
  117. }
  118. if (!teacherState.teacherCert.styleVideo[0].cover) {
  119. Toast('请上传个人风采封面')
  120. return
  121. }
  122. teacherState.active = 3
  123. },
  124. async onSubmit() {
  125. try {
  126. const graduateSchool = teacherState.teacherCert.graduateSchool
  127. if (!graduateSchool) {
  128. Toast('请输入您的毕业院校')
  129. return
  130. }
  131. const subject = teacherState.teacherCert.subject
  132. if (!subject) {
  133. Toast('请输入您的专业')
  134. return
  135. }
  136. const teacherCert = teacherState.teacherCert
  137. teacherCert.styleVideoJson = JSON.stringify(teacherCert.styleVideo)
  138. await request.post('/api-teacher/teacherAuthEntryRecord/doApply', {
  139. data: teacherState.teacherCert
  140. })
  141. Toast('提交成功')
  142. teacherState.active = 4
  143. } catch {
  144. //
  145. }
  146. },
  147. prev() {
  148. teacherState.active = teacherState.active - 1
  149. }
  150. },
  151. render() {
  152. return (
  153. <div class={styles['teacher-cert']}>
  154. <div>
  155. {teacherState.active != 4 ? (
  156. <>
  157. {browser().isApp ? <ColHeader /> : ''}
  158. <Steps style={{ marginBottom: '12px' }} />
  159. </>
  160. ) : null}
  161. {teacherState.active === 1 ? (
  162. <>
  163. <CertOne />
  164. <div class={'btnGroup'}>
  165. <ColProtocol
  166. v-model={this.agreeStatus}
  167. prototcolType="REGISTER"
  168. style={{ paddingLeft: 0, paddingRight: 0 }}
  169. />
  170. <Button
  171. block
  172. round
  173. onClick={this.next}
  174. type="primary"
  175. text="下一步"
  176. />
  177. </div>
  178. </>
  179. ) : null}
  180. {teacherState.active === 2 ? (
  181. <>
  182. <CertTwo />
  183. <div class={['btnGroup', 'btnMore']}>
  184. <Button block round type="primary" plain onClick={this.prev}>
  185. 上一步
  186. </Button>
  187. <Button
  188. block
  189. round
  190. onClick={this.next2}
  191. type="primary"
  192. text="下一步"
  193. />
  194. </div>
  195. </>
  196. ) : null}
  197. {teacherState.active === 3 ? (
  198. <>
  199. <CertThree />
  200. <div class={['btnGroup', 'btnMore']}>
  201. <Button block round type="primary" plain onClick={this.prev}>
  202. 上一步
  203. </Button>
  204. <Button
  205. block
  206. round
  207. onClick={this.onSubmit}
  208. type="primary"
  209. text="提交审核"
  210. />
  211. </div>
  212. </>
  213. ) : null}
  214. {teacherState.active === 4 ? (
  215. <>
  216. <ColHeader />
  217. <ColResult
  218. type="teacherCert"
  219. style={{ paddingTop: '60px' }}
  220. classImgSize="CERT"
  221. buttonText={browser().isApp ? '我知道了' : '下载酷乐秀学院'}
  222. tips="感谢您的申请,小酷将在24小时内完成审核,请留意APP消息及短信获取审核结果。"
  223. onClick={() => {
  224. if (browser().isApp) {
  225. postMessage({ api: 'back', content: {} })
  226. } else {
  227. window.open(location.origin + '/student/#/download?type=teacher')
  228. }
  229. }}
  230. />
  231. </>
  232. ) : null}
  233. </div>
  234. </div>
  235. )
  236. }
  237. })