diff --git a/src/api/match/common.js b/src/api/match/common.js index 90b146c..900dc91 100644 --- a/src/api/match/common.js +++ b/src/api/match/common.js @@ -20,6 +20,15 @@ export const commonOcrRecognizePassportPost = (data) => { return http.post('/ocr/recognize/passport', data); }; +/** + * OCR识别户口本 + * @param {Object} data - OCR请求 + * @param {string} data.imageUrl - 图片URL + */ +export const commonOcrRecognizeHouseholdPost = (data) => { + return http.post('/ocr/recognize/household', data); +}; + /** * 发送短信验证码 * @param {Object} data - 验证码请求 diff --git a/src/views/team/athlete/index.vue b/src/views/team/athlete/index.vue index a699223..f4b9276 100644 --- a/src/views/team/athlete/index.vue +++ b/src/views/team/athlete/index.vue @@ -115,11 +115,12 @@ 身份证认证 护照认证 + 户口本认证 - + @@ -146,7 +147,7 @@ 请选择性别 - + @@ -192,12 +193,13 @@ import { auths } from '/@/utils/authFunction'; import ProTable from '/@/components/ProTable/index.vue'; import { teamPageGet, teamDetailGet, teamAddPost, teamDeleteDelete, teamUpdatePut } from '/@/api/match/unituser'; import { appuserAthletePageGet, appuserAthleteAddPost, appuserAthleteUpdatePut, appuserLeaderPageGet, appuserCoachPageGet, appuserMemberDeletePost } from '/@/api/match/appuser'; -import { commonOcrRecognizeIdcardPost, commonOcrRecognizePassportPost, commonSmsSendVerificationCodePost } from '/@/api/match/common'; +import { commonOcrRecognizeIdcardPost, commonOcrRecognizePassportPost, commonOcrRecognizeHouseholdPost, commonSmsSendVerificationCodePost } from '/@/api/match/common'; // 定义表单引用类型 const formRef = ref(); const activeTab = ref('first') const getDefaultFormData = () => ({ id: undefined, + authType: 1, name: '', idCardNumber: '', gender: '', @@ -208,7 +210,7 @@ const getDefaultFormData = () => ({ }); const formData = ref(getDefaultFormData()) -// 证件识别类型:idcard-身份证,passport-护照 +// 证件识别类型:idcard-身份证,passport-护照, household-户口本 const ocrType = ref('idcard') const initParam = ref({ @@ -566,13 +568,26 @@ const onOpenMenu = (row) => { originalMobile.value = ''; if (row && typeof row === 'object') { + const savedAuthType = Number(row.authType) || 1; + let savedOcrType = 'idcard'; + if (savedAuthType === 2) savedOcrType = 'passport'; + else if (savedAuthType === 3) savedOcrType = 'household'; + ocrType.value = savedOcrType; + + const imageUrl = savedAuthType === 2 + ? (row.passportPhotoUrl || row.idCardImageUrl || '') + : savedAuthType === 3 + ? (row.householdPhotoUrl || row.idCardImageUrl || '') + : (row.idCardImageUrl || ''); + formData.value = { ...getDefaultFormData(), + authType: savedAuthType, id: row.id, name: row.name ?? '', idCardNumber: row.idCardNumber ?? '', gender: row.gender !== undefined && row.gender !== null ? Number(row.gender) : '', - idCardImageUrl: row.idCardImageUrl ?? '', + idCardImageUrl: imageUrl, birthDate: row.birthDate ?? '', mobile: row.mobile ?? row.mobile ?? '', }; @@ -663,28 +678,36 @@ const handleAvatarSuccess = async (response, uploadFile) => { //response[0].url const imageUrl = response[0].url; - const res = ocrType.value === 'passport' - ? await commonOcrRecognizePassportPost({ imageUrl }) - : await commonOcrRecognizeIdcardPost({ imageUrl }); - if(res.succeeded){ - if(ocrType.value === 'passport'){ - formData.value.name = res.data.name - formData.value.idCardNumber = res.data.passportNumber - formData.value.gender = res.data.gender == 'Male' ? 0 : 1 - formData.value.idCardImageUrl = imageUrl - formData.value.birthDate = res.data.issueDateYmd - }else{ - formData.value.name = res.data.name - formData.value.idCardNumber = res.data.idCardNumber - formData.value.gender = res.data.gender == '男' ? 0 : 1 - formData.value.idCardImageUrl = imageUrl - formData.value.birthDate = res.data.birthDate - } - - }else{ - ElMessage.error('请上传正确的身份证/护照') + let res; + if (ocrType.value === 'passport') { + res = await commonOcrRecognizePassportPost({ imageUrl }); + } else if (ocrType.value === 'household') { + res = await commonOcrRecognizeHouseholdPost({ imageUrl }); + } else { + res = await commonOcrRecognizeIdcardPost({ imageUrl }); } - console.log(res) + if (res && res.succeeded && res.data) { + const data = res.data; + formData.value.idCardImageUrl = imageUrl; + if (ocrType.value === 'household') { + formData.value.name = data.name || ''; + formData.value.gender = data.gender === '男' ? 0 : 1; + formData.value.idCardNumber = data.idCardNumber || ''; + } else if (ocrType.value === 'passport') { + formData.value.name = data.name; + formData.value.idCardNumber = data.passportNumber; + formData.value.gender = data.gender === 'Male' ? 0 : 1; + formData.value.birthDate = data.birthDateYmd || data.birthDate || data.issueDateYmd || ''; + } else { + formData.value.name = data.name; + formData.value.idCardNumber = data.idCardNumber; + formData.value.gender = data.gender === '男' ? 0 : 1; + formData.value.birthDate = data.birthDate || ''; + } + } else { + ElMessage.error('请上传正确的证件图片'); + } + console.log(res); } const beforeAvatarUpload = () => { @@ -706,8 +729,10 @@ const onSubmit = () => { formRef.value.validate(async (valid) => { if (!valid) return; try { + const authType = ocrType.value === 'passport' ? 2 : (ocrType.value === 'household' ? 3 : 1); const payload = { ...formData.value, + authType, gender: formData.value.gender !== undefined && formData.value.gender !== null ? Number(formData.value.gender) : '', mobile: formData.value.mobile, };