2026-01-08 17:00
根据用户反馈,优化了身份证识别流程,增加了身份证号确认步骤,允许用户在查询建档状态前核对和修改身份证号。
识别成功后,显示一个醒目的确认框:
<!-- 识别结果确认区域 -->
<div v-if="recognizedIdCard" class="info-card">
<h3>📋 识别结果</h3>
<p>请核对并确认身份证号:</p>
<el-input
v-model="confirmedIdCard"
placeholder="请输入或修改身份证号"
maxlength="18"
show-word-limit
></el-input>
<el-button @click="confirmIdCard" :loading="checking">
确认身份证号,继续建档
</el-button>
<el-button @click="clearRecognition">
重新识别
</el-button>
</div>
特点:
const recognizedIdCard = ref(''); // 识别到的身份证号
const confirmedIdCard = ref(''); // 用户确认/修改后的身份证号
const checking = ref(false); // 查询建档状态时的加载状态
确认身份证号并查询建档状态
const confirmIdCard = async () => {
// 1. 验证身份证号格式
const idCardRegex = /^\d{17}[\dXx]$/;
if (!idCardRegex.test(confirmedIdCard.value)) {
ElMessage.error('身份证号格式不正确');
return;
}
checking.value = true;
patientInfo.idCardNumber = confirmedIdCard.value.toUpperCase();
// 2. 查询是否已建档
const isRegistered = await axios.get('/api/patient/exists', {
params: { idCardNumber: patientInfo.idCardNumber }
}).then(res => res.data.code === 200 ? res.data.data : false);
// 3. 显示3秒提示
const message = isRegistered
? '✅ 该用户此前已完成建档,正在读取用户信息...'
: '📝 该用户此前未建档,正在跳转到建档页面...';
ElMessage({
message: message,
type: 'success',
duration: 3000,
showClose: false
});
// 4. 等待3秒
await new Promise(resolve => setTimeout(resolve, 3000));
// 5. 查询患者信息并跳转
await checkPatientExists();
};
清除识别结果,重新识别
const clearRecognition = () => {
recognizedIdCard.value = '';
confirmedIdCard.value = '';
capturedImage.value = null;
};
┌─────────────────────────────────────┐
│ 📋 识别结果 │
├─────────────────────────────────────┤
│ 请核对并确认身份证号: │
│ ┌─────────────────────────────────┐ │
│ │ 110101199001011234 18/18│ │
│ └─────────────────────────────────┘ │
│ │
│ [确认身份证号,继续建档] │
│ [重新识别] │
└─────────────────────────────────────┘
样式特点:
// 识别状态
recognizedIdCard.value = '110101199001011234'; // AI识别的原始结果
confirmedIdCard.value = '110101199001011234'; // 用户确认/修改后的结果
// 清除状态
clearRecognition(); // 重置所有识别相关状态
<!-- 显示确认框的条件 -->
<div v-if="recognizedIdCard" class="info-card">
<!-- 确认框内容 -->
</div>
<!-- 隐藏手动输入的条件 -->
<div class="manual-input" v-if="!recognizedIdCard">
<!-- 手动输入框 -->
</div>
拍照识别 → recognizedIdCard → confirmedIdCard → 用户修改 → confirmIdCard() → 查询建档 → 3秒提示 → 跳转表单
手动输入 → manualIdCard → recognizedIdCard → confirmedIdCard → 用户修改 → confirmIdCard() → 查询建档 → 3秒提示 → 跳转表单
.info-card {
background: #e8f4fd;
border-left: 4px solid #409eff;
padding: 20px;
margin-bottom: 20px;
border-radius: 4px;
}
.info-card h3 {
color: #333;
margin-bottom: 15px;
}
<div style="text-align: center;">
<el-button type="primary" @click="confirmIdCard" :loading="checking">
<el-icon><Check /></el-icon>
确认身份证号,继续建档
</el-button>
<el-button @click="clearRecognition" style="margin-left: 10px;">
<el-icon><Close /></el-icon>
重新识别
</el-button>
</div>
启动项目
./start.sh # Mac/Linux
start.bat # Windows
访问系统
http://localhost:8080
测试摄像头识别
测试手动输入
新的流程更加用户友好:
立即重启项目体验新流程! 🚀