upload project

This commit is contained in:
unknown 2025-12-27 17:16:03 +08:00
commit 06961cae04
422 changed files with 110626 additions and 0 deletions

View file

@ -0,0 +1,152 @@
Page({
data:{
photoPath: '',
livenessSteps: ['请正对镜头', '请张张嘴', '请左右摇头', '请眨眨眼'],
stepIndex: 0,
isCapturing: false,
isUploading: false
},
onLoad(){
// 页面加载时检查并申请摄像头权限
this.checkCameraPermission();
},
async checkCameraPermission(){
try{
const setting = await new Promise((resolve) => {
wx.getSetting({ success: resolve, fail: () => resolve({}) });
});
// 检查是否已授权
if(!setting.authSetting || !setting.authSetting['scope.camera']){
// 未授权,主动申请
const result = await new Promise((resolve) => {
wx.authorize({
scope: 'scope.camera',
success: () => resolve({ granted: true }),
fail: () => resolve({ granted: false })
});
});
if(!result.granted){
// 用户拒绝了授权,需要引导去设置页
wx.showModal({
title: '需要摄像头权限',
content: '为了完成实名认证,需要访问您的摄像头。请在设置中开启摄像头权限。',
confirmText: '去设置',
success: (res) => {
if(res.confirm){
wx.openSetting({
success: (settingRes) => {
if(settingRes.authSetting && settingRes.authSetting['scope.camera']){
wx.showToast({ title: '授权成功', icon: 'success' });
} else {
wx.showToast({ title: '授权失败,无法使用摄像头', icon: 'none' });
}
}
});
}
}
});
}
}
}catch(err){
console.error('检查摄像头权限失败:', err);
}
},
onCameraError(e){
console.error('camera error', e);
let msg = '摄像头打开失败';
if(e.detail && e.detail.errMsg){
if(e.detail.errMsg.includes('permission')){
msg = '摄像头权限被拒绝,请前往设置开启';
} else if(e.detail.errMsg.includes('not available')){
msg = '摄像头不可用,请检查设备';
}
}
wx.showModal({
title: '摄像头错误',
content: msg,
confirmText: '去设置',
success: (res) => {
if(res.confirm){
wx.openSetting();
}
}
});
},
get currentHint(){
const { livenessSteps, stepIndex } = this.data;
return livenessSteps[Math.min(stepIndex, livenessSteps.length - 1)] || '';
},
canCapture(){
const { stepIndex, livenessSteps } = this.data;
return stepIndex >= livenessSteps.length;
},
onNextAction(){
const { stepIndex, livenessSteps } = this.data;
if (stepIndex < livenessSteps.length) {
const nextIndex = stepIndex + 1;
this.setData({ stepIndex: nextIndex }, () => {
// 若所有动作完成,自动拍照
if (nextIndex >= livenessSteps.length) {
setTimeout(() => {
this.onCapture();
}, 600);
}
});
}
},
async onCapture(){
if (!this.canCapture()){
wx.showToast({ title: '请先完成动作提示', icon: 'none' });
return;
}
if(this.data.isCapturing){
return; // 防止重复点击
}
this.setData({ isCapturing: true });
wx.showLoading({ title: '拍照中...', mask: true });
try{
const ctx = wx.createCameraContext();
const res = await new Promise((resolve, reject)=>{
ctx.takePhoto({
quality: 'high',
success: resolve,
fail: reject
});
});
// 临时文件需要及时处理,这里先保存路径
// 注意tempImagePath 仅在当前会话有效,需要尽快上传
this.setData({
photoPath: res.tempImagePath,
isCapturing: false
});
wx.hideLoading();
wx.showToast({ title: '拍照成功', icon: 'success', duration: 1500 });
}catch(err){
this.setData({ isCapturing: false });
wx.hideLoading();
console.error('拍照失败:', err);
let msg = '拍照失败,请重试';
if(err.errMsg){
if(err.errMsg.includes('permission')){
msg = '摄像头权限被拒绝,请前往设置开启';
} else if(err.errMsg.includes('not available')){
msg = '摄像头不可用';
}
}
wx.showToast({ title: msg, icon: 'none', duration: 2000 });
}
},
onRetake(){
this.setData({ photoPath: '' });
},
onSubmit(){
if(!this.data.photoPath){
wx.showToast({ title: '请先拍照', icon: 'none' });
return;
}
// TODO: 上传并提交认证
wx.showToast({ title: '已提交', icon: 'success' });
}
});