cert-one.tsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import { Cell, CellGroup, Col, DatetimePicker, Field, Popup, Row, 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. export default defineComponent({
  9. name: 'certOne',
  10. data() {
  11. return {
  12. maxDate: new Date(),
  13. popupShow: false,
  14. popupDate: new Date(),
  15. }
  16. },
  17. methods: {
  18. onIdCardValidate() {
  19. const idCardNo = teacherState.teacherCert.idCardNo
  20. if (!checkIDCard(idCardNo || '')) {
  21. Toast('请填写正确的身份证号码');
  22. return false;
  23. }
  24. console.log(this.getSex(idCardNo))
  25. teacherState.teacherCert.birthdate = this.getBirth(idCardNo)
  26. teacherState.teacherCert.gender = this.getSex(idCardNo)
  27. },
  28. getBirth(idCard: string | null) {
  29. let birthday = "";
  30. if (idCard != null && idCard != "") {
  31. if (idCard.length == 15) {
  32. birthday = "19" + idCard.slice(6, 12);
  33. } else if (idCard.length == 18) {
  34. birthday = idCard.slice(6, 14);
  35. }
  36. birthday = birthday.replace(/(.{4})(.{2})/, "$1-$2-");
  37. //通过正则表达式来指定输出格式为:1990-01-01
  38. }
  39. return birthday;
  40. },
  41. getSex(idCard: string | null) {
  42. let sex = null;
  43. if (idCard && parseInt(idCard.slice(-2, -1)) % 2 == 1) {
  44. sex = 1;
  45. } else {
  46. sex = 0;
  47. }
  48. return sex;
  49. },
  50. onConfirm(_date: any) {
  51. teacherState.teacherCert.birthdate = dayjs(this.popupDate).format('YYYY-MM-DD')
  52. this.popupShow = false;
  53. },
  54. formatter(type: any, val: any) {
  55. if (type === 'year') {
  56. return `${val}年`;
  57. }
  58. if (type === 'month') {
  59. return `${val}月`;
  60. }
  61. if (type === 'day') {
  62. return `${val}日`;
  63. }
  64. return val;
  65. }
  66. },
  67. render() {
  68. return (
  69. <div class={styles.certOne}>
  70. <CellGroup border={false}>
  71. <ColField title="真实姓名" required>
  72. <Field
  73. v-model={teacherState.teacherCert.realName}
  74. name="真实姓名"
  75. maxlength={10}
  76. placeholder="请输入您的真实姓名"
  77. />
  78. </ColField>
  79. <ColField title="身份证号" required>
  80. <Field
  81. v-model={teacherState.teacherCert.idCardNo}
  82. name="身份证号"
  83. maxlength={18}
  84. onBlur={this.onIdCardValidate}
  85. placeholder="请输入您的身份证号码"
  86. />
  87. </ColField>
  88. <ColField title="性别" required border={false}>
  89. <div class={styles.radioGroup}>
  90. <div onClick={() => teacherState.teacherCert.gender = 1} class={[styles.radio, teacherState.teacherCert.gender === 1 ? styles.active : null]}>男</div>
  91. <div onClick={() => teacherState.teacherCert.gender = 0} class={[styles.radio, teacherState.teacherCert.gender === 0 ? styles.active : null]}>女</div>
  92. </div>
  93. </ColField>
  94. <ColField title="出生日期" required>
  95. <Field
  96. v-model={teacherState.teacherCert.birthdate}
  97. name="出生日期"
  98. onClick-input={() => this.popupShow = true}
  99. readonly
  100. isLink
  101. placeholder="请选择您的出生日期"
  102. />
  103. </ColField>
  104. </CellGroup>
  105. <Popup show={this.popupShow} position="bottom" round>
  106. <DatetimePicker
  107. v-model={this.popupDate}
  108. type="date"
  109. close-on-popstate={true}
  110. maxDate={this.maxDate}
  111. onCancel={() => this.popupShow = false}
  112. onConfirm={this.onConfirm}
  113. formatter={this.formatter}>
  114. </DatetimePicker>
  115. </Popup>
  116. </div>
  117. )
  118. }
  119. })