This commit is contained in:
tx 2024-12-27 17:47:44 +08:00
parent b247ef32a4
commit acdb0999da
2 changed files with 130 additions and 25 deletions

View File

@ -111,5 +111,7 @@ export const apiService = {
updateKey: (data: any) => api.put('/appVerify/editKey', data),
deleteKey: (key: any) => api.delete('/appVerify/del/' + key),
getExpiredKeys: () => api.get('/appVerify/getExpiredKeyListByOwnerId'),
getKeyInfo: (keyId: string) => api.get('/appVerify/key/'+keyId),
bindKey: (keyId: string) => api.post('/appVerify/claimKey?keyId='+keyId),
// updateKeyExpiration: (keyId: string, expirationTime: string) => api.put('/appVerify/updateKeyExpiration', { keyId, expirationTime }),
};

View File

@ -34,7 +34,7 @@ type RootStackParamList = {
type NavigationProp = StackNavigationProp<RootStackParamList>;
const BackIcon = (props: any) => (
<Icon {...props} name='arrow-back-outline'/>
<Icon {...props} name='arrow-back-outline' />
);
const SnBind = () => {
@ -48,7 +48,7 @@ const SnBind = () => {
};
const BackAction = () => (
<TopNavigationAction icon={BackIcon} onPress={navigateBack}/>
<TopNavigationAction icon={BackIcon} onPress={navigateBack} />
);
const togglePopover = () => {
@ -57,15 +57,116 @@ const SnBind = () => {
// 处理 keyId 的方法
const handleKeyId = async (keyId: string) => {
const res = await apiService.getUserInfo();
try {
// 先获取用户信息
const userInfoRes = await new Promise((resolve, reject) => {
apiService.getUserInfo()
.then(res => {
if (!res || !res.user) {
Toast.show({
type: 'error',
text1: '获取用户信息失败',
});
reject(new Error('获取用户信息失败'));
return;
}
resolve(res);
})
.catch(error => {
console.error('获取用户信息出错:', error);
Toast.show({
type: 'error',
text1: '获取用户信息失败',
});
reject(error);
});
});
console.log('处理 keyId:', keyId);
// TODO: 在这里添加处理 keyId 的逻辑
// 用户信息获取成功后,再获取密钥信息
const keyInfoRes = await new Promise((resolve, reject) => {
apiService.getKeyInfo(keyId)
.then(res => {
if (!res || !res.data) {
Toast.show({
type: 'error',
text1: '二维码已过期',
});
reject(new Error('二维码已过期'));
return;
}
resolve(res);
})
.catch(error => {
console.error('获取密钥信息出错:', error);
Toast.show({
type: 'error',
text1: '获取密钥信息失败',
});
reject(error);
});
});
// 验证手机号匹配
const userPhone = userInfoRes.user.phonenumber;
const sharePhone = keyInfoRes.data.sharePhone;
if (!userPhone || !sharePhone) {
Toast.show({
type: 'error',
text1: '手机号信息不完整',
});
return;
}
if (userPhone !== sharePhone) {
Toast.show({
type: 'error',
text1: '您不是分享码的拥有者',
});
return;
}
// 执行绑定操作
const bindRes = await new Promise((resolve, reject) => {
apiService.bindKey(keyId)
.then(res => {
if (res.code === 200) {
Toast.show({
type: 'success',
text1: '绑定成功',
});
navigateBack();
resolve(res);
} else {
Toast.show({
type: 'error',
text1: res.msg || '绑定失败',
});
reject(new Error(res.msg || '绑定失败'));
}
})
.catch(error => {
console.error('绑定密钥出错:', error);
Toast.show({
type: 'error',
text1: '绑定失败',
});
reject(error);
});
});
} catch (error) {
console.error('处理密钥绑定时出错:', error);
Toast.show({
type: 'error',
text1: '操作失败,请稍后重试',
});
}
};
// 处理扫描结果的方法
const handleScanResult = (data: string) => {
console.log('扫描结果:', data);
// console.log('扫描结果:', data);
try {
// 检查是否包含 sn
const snMatch = data.match(/[?&]sn=([^&]+)/);
@ -83,7 +184,9 @@ const SnBind = () => {
// 检查是否包含 keyId
const keyIdMatch = data.match(/[?&]keyId=([^&]+)/);
if (keyIdMatch && keyIdMatch[1]) {
setIsScanning(false);
handleKeyId(keyIdMatch[1]);
return;