index.tsx 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  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 { stat } from 'fs'
  16. export default defineComponent({
  17. name: 'teacherCert',
  18. data() {
  19. const query = this.$route.query
  20. return {
  21. agreeStatus: false
  22. }
  23. },
  24. async mounted() {
  25. try {
  26. // 老师入驻状态 0、未申请 UNPAALY、未申请 DOING、审核中 PASS、通过 UNPASS、不通过
  27. const entryStatus = state.user.data?.entryStatus || 0
  28. teacherState.authStatus =
  29. entryStatus === 'DOING' || entryStatus === 'PASS' ? true : false
  30. // 如果已经认证,则不用获取声部信息
  31. if (teacherState.authStatus) {
  32. teacherState.active = teacherState.authStatus ? 4 : 1
  33. return
  34. }
  35. if (teacherState.subjectList.length <= 0) {
  36. const res = await request.get('/api-teacher/subject/subjectSelect')
  37. teacherState.subjectList = res.data || []
  38. }
  39. } catch {
  40. //
  41. }
  42. },
  43. computed: {
  44. authStatus(): Boolean {
  45. return !!teacherState.authStatus
  46. },
  47. userAuth() {
  48. // 判断是否实名过
  49. const users = state.user.data || {}
  50. return !!(users.idCardNo && users.realName)
  51. }
  52. },
  53. methods: {
  54. async next() {
  55. const realName = teacherState.teacherCert.realName
  56. if (!realName) {
  57. Toast('请填写真实姓名')
  58. return
  59. }
  60. const idCardNo = teacherState.teacherCert.idCardNo
  61. if (!this.userAuth) {
  62. if (!checkIDCard(idCardNo || '')) {
  63. Toast('请填写正确的身份证号码')
  64. return false
  65. }
  66. }
  67. if (!this.agreeStatus) {
  68. Toast('请阅读并同意协议')
  69. return
  70. }
  71. if (!teacherState.teacherCert.birthdate) {
  72. Toast('请选择出生日期')
  73. return
  74. }
  75. try {
  76. if (!this.userAuth) {
  77. await request.post('/api-auth/user/realNameAuth', {
  78. data: {
  79. realName,
  80. idCardNo,
  81. save: true
  82. }
  83. })
  84. }
  85. teacherState.active = 2
  86. } catch {
  87. //
  88. }
  89. },
  90. next2() {
  91. if (!teacherState.teacherCert.subjectId) {
  92. Toast('请选择教授科目')
  93. return
  94. }
  95. teacherState.active = 3
  96. },
  97. async onSubmit() {
  98. try {
  99. await request.post('/api-teacher/teacherAuthEntryRecord/doApply', {
  100. data: teacherState.teacherCert
  101. })
  102. Toast('提交成功')
  103. teacherState.active = 4
  104. } catch {
  105. //
  106. }
  107. },
  108. prev() {
  109. teacherState.active = teacherState.active - 1
  110. }
  111. },
  112. render() {
  113. return (
  114. <div class={styles['teacher-cert']}>
  115. {!teacherState.authStatus ? (
  116. <CertInfo />
  117. ) : (
  118. <div>
  119. {teacherState.active != 4 ? (
  120. <Steps style={{ marginBottom: '12px' }} />
  121. ) : null}
  122. {teacherState.active === 1 ? (
  123. <>
  124. <CertOne />
  125. <Sticky position="bottom" offsetBottom={0}>
  126. <div class={'btnGroup'}>
  127. <ColProtocol
  128. v-model={this.agreeStatus}
  129. style={{ paddingLeft: 0, paddingRight: 0 }}
  130. />
  131. <Button
  132. block
  133. round
  134. onClick={this.next}
  135. type="primary"
  136. text="下一步"
  137. />
  138. </div>
  139. </Sticky>
  140. </>
  141. ) : null}
  142. {teacherState.active === 2 ? (
  143. <>
  144. <CertTwo />
  145. <Sticky position="bottom" offsetBottom={0}>
  146. <div class={['btnGroup', 'btnMore']}>
  147. <Button
  148. block
  149. round
  150. type="primary"
  151. plain
  152. onClick={this.prev}
  153. >
  154. 上一步
  155. </Button>
  156. <Button
  157. block
  158. round
  159. onClick={this.next2}
  160. type="primary"
  161. text="下一步"
  162. />
  163. </div>
  164. </Sticky>
  165. </>
  166. ) : null}
  167. {teacherState.active === 3 ? (
  168. <>
  169. <CertThree />
  170. <Sticky position="bottom" offsetBottom={0}>
  171. <div class={['btnGroup', 'btnMore']}>
  172. <Button
  173. block
  174. round
  175. type="primary"
  176. plain
  177. onClick={this.prev}
  178. >
  179. 上一步
  180. </Button>
  181. <Button
  182. block
  183. round
  184. onClick={this.onSubmit}
  185. type="primary"
  186. text="提交审核"
  187. />
  188. </div>
  189. </Sticky>
  190. </>
  191. ) : null}
  192. {/* 提交完数据之后显示状态页 */}
  193. {teacherState.active === 4 ? (
  194. <ColResult
  195. type="teacherCert"
  196. style={{ paddingTop: '60px' }}
  197. classImgSize="CERT"
  198. tips="感谢您的教学热情,小酷将在24小时内完成审核,请留意APP消息及短信获取审核结果。"
  199. />
  200. ) : null}
  201. </div>
  202. )}
  203. </div>
  204. )
  205. }
  206. })