cert-one.tsx 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import { CellGroup, DatetimePicker, Field, Popup, Toast } from 'vant'
  2. import { defineComponent } from 'vue'
  3. import dayjs from 'dayjs'
  4. import { checkIDCard } from '@/helpers/validate'
  5. import ColField from '@/components/col-field'
  6. import { teacherState } from './teacherState'
  7. import styles from './cert-one.module.less'
  8. import ColFieldGroup from '@/components/col-field-group'
  9. import { state } from '@/state'
  10. import { formatterDate } from '@/helpers/utils'
  11. export default defineComponent({
  12. name: 'certOne',
  13. data() {
  14. return {
  15. maxDate: new Date(),
  16. popupShow: false,
  17. popupDate: new Date()
  18. }
  19. },
  20. computed: {
  21. userAuth() {
  22. // 判断是否实名过
  23. const users = state.user.data || {}
  24. return !!(users.idCardNo && users.realName)
  25. }
  26. },
  27. mounted() {
  28. if (this.userAuth) {
  29. const users = state.user.data || {}
  30. teacherState.teacherCert.realName = users.realName
  31. teacherState.teacherCert.idCardNo = users.idCardNo
  32. teacherState.teacherCert.gender = users.gender
  33. teacherState.teacherCert.birthdate = dayjs(users.birthdate).format(
  34. 'YYYY-MM-DD'
  35. )
  36. }
  37. },
  38. methods: {
  39. onIdCardValidate() {
  40. const idCardNo = teacherState.teacherCert.idCardNo
  41. // 判断是否有身份证号
  42. if (!idCardNo) {
  43. return
  44. }
  45. if (!checkIDCard(idCardNo || '')) {
  46. Toast('请填写正确的身份证号码')
  47. return false
  48. }
  49. console.log(this.getSex(idCardNo))
  50. teacherState.teacherCert.birthdate = this.getBirth(idCardNo)
  51. teacherState.teacherCert.gender = this.getSex(idCardNo)
  52. },
  53. getBirth(idCard: string | null) {
  54. let birthday = ''
  55. if (idCard != null && idCard != '') {
  56. if (idCard.length == 15) {
  57. birthday = '19' + idCard.slice(6, 12)
  58. } else if (idCard.length == 18) {
  59. birthday = idCard.slice(6, 14)
  60. }
  61. birthday = birthday.replace(/(.{4})(.{2})/, '$1-$2-')
  62. //通过正则表达式来指定输出格式为:1990-01-01
  63. }
  64. return birthday
  65. },
  66. getSex(idCard: string | null): number {
  67. let sex = 1
  68. if (idCard && parseInt(idCard.slice(-2, -1)) % 2 == 1) {
  69. sex = 1
  70. } else {
  71. sex = 0
  72. }
  73. return sex
  74. },
  75. onConfirm(_date: any) {
  76. teacherState.teacherCert.birthdate = dayjs(this.popupDate).format(
  77. 'YYYY-MM-DD'
  78. )
  79. this.popupShow = false
  80. },
  81. sexChange(num: number) {
  82. if (!this.userAuth) {
  83. teacherState.teacherCert.gender = num
  84. }
  85. }
  86. },
  87. render() {
  88. return (
  89. <ColFieldGroup class={styles.certOne}>
  90. <CellGroup border={false}>
  91. <ColField title="真实姓名" required>
  92. <Field
  93. v-model={teacherState.teacherCert.realName}
  94. name="真实姓名"
  95. disabled={this.userAuth}
  96. maxlength={10}
  97. placeholder="请输入您的真实姓名"
  98. />
  99. </ColField>
  100. <ColField title="身份证号" required>
  101. <Field
  102. v-model={teacherState.teacherCert.idCardNo}
  103. name="身份证号"
  104. disabled={this.userAuth}
  105. maxlength={18}
  106. onBlur={this.onIdCardValidate}
  107. placeholder="请输入您的身份证号码"
  108. />
  109. </ColField>
  110. <ColField title="性别" required border={false}>
  111. <div class={styles.radioGroup}>
  112. <div
  113. onClick={() => this.sexChange(1)}
  114. class={[
  115. styles.radio,
  116. teacherState.teacherCert.gender === 1 ? styles.active : null
  117. ]}
  118. >
  119. </div>
  120. <div
  121. onClick={() => this.sexChange(0)}
  122. class={[
  123. styles.radio,
  124. teacherState.teacherCert.gender === 0 ? styles.active : null
  125. ]}
  126. >
  127. </div>
  128. </div>
  129. </ColField>
  130. <ColField title="出生日期" required>
  131. <Field
  132. v-model={teacherState.teacherCert.birthdate}
  133. name="出生日期"
  134. disabled={this.userAuth}
  135. onClick-input={() => (this.popupShow = true)}
  136. readonly
  137. isLink={!this.userAuth}
  138. placeholder="请选择您的出生日期"
  139. />
  140. </ColField>
  141. </CellGroup>
  142. <Popup show={this.popupShow} position="bottom" round>
  143. <DatetimePicker
  144. v-model={this.popupDate}
  145. type="date"
  146. close-on-popstate={true}
  147. minDate={new Date('1950-01-01')}
  148. maxDate={this.maxDate}
  149. onCancel={() => (this.popupShow = false)}
  150. onConfirm={this.onConfirm}
  151. formatter={formatterDate}
  152. ></DatetimePicker>
  153. </Popup>
  154. </ColFieldGroup>
  155. )
  156. }
  157. })