index.tsx 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. import ColHeader from '@/components/col-header'
  2. import ColSearch from '@/components/col-search'
  3. import { Sticky, Image, List, Popup, Icon, Area, Field, Form, CellGroup, Button, Toast, Picker, DatetimePicker } from 'vant'
  4. import { defineComponent, onMounted, reactive } from 'vue'
  5. import styles from './index.module.less'
  6. import bg from './images/teacherBg.png'
  7. import rejectLogo from './images/rejectLogo.png'
  8. import rejectSchool from './images/rejest-school.png'
  9. import subTitle from './images/subTitle.png'
  10. import centerLogo from './images/center.png'
  11. import studentText from './images/studentText.png'
  12. import { useRoute } from 'vue-router'
  13. import icon_arrow from './images/icon_arrow.png'
  14. import rejectBtn from './images/rejectBtn.png'
  15. import request from '@/helpers/request'
  16. import dayjs from 'dayjs'
  17. export default defineComponent({
  18. name: 'tenantStudentRejest',
  19. setup() {
  20. const route = useRoute();
  21. const forms = reactive({
  22. idCardNo: '',
  23. username: '',
  24. realName: '',
  25. phone: '',
  26. subjectId: '',
  27. tenantId: '',
  28. birthdate: '',
  29. code: ''
  30. });
  31. const data = reactive({
  32. schoolName: route.query.schoolName || '',
  33. cityName: '', // 所属城市
  34. showArea: false,
  35. checked: true,
  36. success: false,
  37. areaList: {} as any,
  38. sendMsg: '获取验证码',
  39. imgCodeStatus: false,
  40. subjectList: [],
  41. searchStatus: false,
  42. openStatus: false,
  43. dateState: false
  44. });
  45. const handleSubmit = () => {
  46. console.log(forms, 'forms')
  47. if (!forms.username) {
  48. Toast('请输入老师昵称')
  49. }
  50. if (!forms.phone) {
  51. Toast('请输入手机号')
  52. }
  53. if (!forms.code) {
  54. Toast('请输入验证码')
  55. }
  56. if (!forms.realName) {
  57. Toast('请输入真实姓名')
  58. }
  59. if (!forms.idCardNo) {
  60. Toast('请输入身份证号')
  61. }
  62. if (!forms.subjectId) {
  63. Toast('请选择声部')
  64. }
  65. }
  66. const getSubjectList = async () => {
  67. try {
  68. const res = await request.get('/api-student/open/subject/subjectSelect')
  69. data.subjectList = res.data || []
  70. } catch (e) {
  71. console.log(e)
  72. }
  73. }
  74. const confirmSubject = (val: any) => {
  75. console.log(val, 'confirmSubject')
  76. }
  77. const confirmDate = (val: any) => {
  78. forms.birthdate = dayjs(val).format('YYYY-MM-DD')
  79. data.dateState = false
  80. }
  81. onMounted(() => {
  82. getSubjectList()
  83. })
  84. /** 发送验证码 */
  85. const onSendSms = () => {
  86. if (!forms.phone) {
  87. Toast('请输入手机号码');
  88. return;
  89. }
  90. if (!/^1[3456789]\d{9}$/.test(forms.phone)) {
  91. Toast('手机号码格式不正确');
  92. return;
  93. }
  94. data.imgCodeStatus = true;
  95. };
  96. return () =>
  97. <>< div class={styles.videoClass} >
  98. <ColHeader
  99. class={styles.classHeader}
  100. border={false}
  101. isFixed={false}
  102. background="#fff"
  103. />
  104. <div class={styles.resjetStudentWrap}>
  105. <img src={rejectLogo} class={styles.rejectLogo} alt="" />
  106. <img src={studentText} class={styles.studentText} alt="" />
  107. <img src={bg} class={styles.bgWrap} alt="" />
  108. <div class={styles.schoolNameWrap}>
  109. <img src={rejectSchool} class={styles.rejectSchool} alt="" />
  110. <p>武汉星星小学</p>
  111. </div>
  112. <img class={styles.centerLogo} src={centerLogo} alt="" />
  113. <div class={styles.infoWrap}>
  114. <div class={styles.infoWrapCore}>
  115. <img src={subTitle} class={styles.subTitle} alt="" />
  116. <Form onSubmit={() => handleSubmit()}>
  117. <CellGroup class={styles.group} border={false}>
  118. <Field
  119. class={styles.noArrow}
  120. inputAlign="right"
  121. label="老师昵称"
  122. placeholder="请输入老师昵称"
  123. maxlength={20}
  124. v-model={forms.username}
  125. // onUpdate: modelValue={(val: string) => {
  126. // forms.nickname = val.trim();
  127. // }}
  128. />
  129. <Field
  130. inputAlign="right"
  131. label="手机号"
  132. class={styles.noArrow}
  133. maxlength={11}
  134. placeholder="请输入手机号码"
  135. v-model={forms.phone}
  136. />
  137. <div class={styles.tips}>
  138. 手机号码为酷乐秀学院登录账号
  139. </div>
  140. <Field
  141. class={styles.inputCode}
  142. inputAlign="left"
  143. label="请输入验证码"
  144. labelWidth={0}
  145. v-model={forms.code}
  146. maxlength={6}>
  147. {{
  148. button: () => (
  149. <Button
  150. disabled={data.sendMsg.includes('s')}
  151. class={styles.sendBtn}
  152. onClick={() => onSendSms()}>
  153. {data.sendMsg}
  154. </Button>
  155. )
  156. }}
  157. </Field>
  158. <Field
  159. class={styles.noArrow}
  160. inputAlign="right"
  161. label="真实姓名"
  162. placeholder="请输入真实姓名"
  163. maxlength={20}
  164. v-model={forms.realName}
  165. // onUpdate: modelValue={(val: string) => {
  166. // forms.nickname = val.trim();
  167. // }}
  168. />
  169. <Field
  170. class={styles.noArrow}
  171. inputAlign="right"
  172. label="身份证号"
  173. placeholder="请输入身份证号"
  174. maxlength={20}
  175. v-model={forms.idCardNo}
  176. // onUpdate: modelValue={(val: string) => {
  177. // forms.nickname = val.trim();
  178. // }}
  179. />
  180. <Field
  181. border={false}
  182. inputAlign="right"
  183. label="声部"
  184. placeholder="请选择声部"
  185. readonly
  186. v-model={data.cityName}
  187. onClick={() => (data.searchStatus = true)}>
  188. {{
  189. button: () => (
  190. <img
  191. style={{
  192. display: 'block',
  193. width: '12px',
  194. height: '12px',
  195. }}
  196. src={icon_arrow}
  197. />
  198. )
  199. }}
  200. </Field>
  201. </CellGroup>
  202. </Form>
  203. </div>
  204. <img src={rejectBtn} onClick={() => { handleSubmit() }} class={styles.rejectBtn} alt="" />
  205. </div>
  206. </div>
  207. <Popup
  208. show={data.searchStatus}
  209. position="bottom"
  210. round
  211. columns-field-names={{ text: '' }}
  212. safe-area-inset-bottom
  213. onClose={() => (data.searchStatus = false)}
  214. onClosed={() => (data.openStatus = false)}
  215. >
  216. <Picker columns={data.subjectList} onCancel={() => { data.searchStatus = false }} onConfirm={confirmSubject}></Picker>
  217. </Popup>
  218. </div ></>
  219. }
  220. })