feat(auth): 实现二维码登录功能
- 新增二维码登录相关接口和页面 - 实现二维码生成、状态检查、登录确认等逻辑 - 添加微信小程序登录支持- 优化用户信息展示和处理
This commit is contained in:
110
src/pages/test/scan.tsx
Normal file
110
src/pages/test/scan.tsx
Normal file
@@ -0,0 +1,110 @@
|
||||
import React from 'react';
|
||||
import { View, Text } from '@tarojs/components';
|
||||
import { Button } from '@nutui/nutui-react-taro';
|
||||
import { Scan } from '@nutui/icons-react-taro';
|
||||
import Taro from '@tarojs/taro';
|
||||
import { useUniversalScanner } from '@/components/UniversalScanner';
|
||||
import { useUser } from '@/hooks/useUser';
|
||||
|
||||
const ScanTest: React.FC = () => {
|
||||
const { user, isLoggedIn } = useUser();
|
||||
|
||||
const { startScan } = useUniversalScanner({
|
||||
onScanSuccess: (result) => {
|
||||
console.log('测试页面 - 扫码成功:', result);
|
||||
Taro.showModal({
|
||||
title: '扫码成功',
|
||||
content: `类型: ${result.type}\n内容: ${result.rawContent}`,
|
||||
showCancel: false
|
||||
});
|
||||
},
|
||||
onScanError: (error) => {
|
||||
console.error('测试页面 - 扫码失败:', error);
|
||||
Taro.showModal({
|
||||
title: '扫码失败',
|
||||
content: error,
|
||||
showCancel: false
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
const handleDirectScan = () => {
|
||||
console.log('直接调用 Taro.scanCode');
|
||||
Taro.scanCode({
|
||||
success: (res) => {
|
||||
console.log('直接扫码成功:', res.result);
|
||||
Taro.showModal({
|
||||
title: '直接扫码成功',
|
||||
content: res.result,
|
||||
showCancel: false
|
||||
});
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('直接扫码失败:', err);
|
||||
Taro.showModal({
|
||||
title: '直接扫码失败',
|
||||
content: JSON.stringify(err),
|
||||
showCancel: false
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<View className="p-4">
|
||||
<Text className="text-lg font-bold mb-4">扫码功能测试</Text>
|
||||
|
||||
<View className="mb-4">
|
||||
<Text>登录状态: {isLoggedIn ? '已登录' : '未登录'}</Text>
|
||||
</View>
|
||||
|
||||
<View className="mb-4">
|
||||
<Text>用户信息: {user ? JSON.stringify(user, null, 2) : '无'}</Text>
|
||||
</View>
|
||||
|
||||
<View className="space-y-4">
|
||||
<Button
|
||||
type="primary"
|
||||
size="large"
|
||||
block
|
||||
icon={<Scan />}
|
||||
onClick={() => {
|
||||
console.log('点击了统一扫码按钮');
|
||||
startScan();
|
||||
}}
|
||||
>
|
||||
统一扫码测试
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
type="default"
|
||||
size="large"
|
||||
block
|
||||
icon={<Scan />}
|
||||
onClick={handleDirectScan}
|
||||
>
|
||||
直接扫码测试
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
type="warning"
|
||||
size="large"
|
||||
block
|
||||
onClick={() => {
|
||||
console.log('测试日志输出');
|
||||
console.log('startScan 函数:', startScan);
|
||||
console.log('startScan 类型:', typeof startScan);
|
||||
Taro.showToast({
|
||||
title: '查看控制台日志',
|
||||
icon: 'none'
|
||||
});
|
||||
}}
|
||||
>
|
||||
测试日志输出
|
||||
</Button>
|
||||
</View>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
export default ScanTest;
|
||||
@@ -9,6 +9,7 @@ import navTo from "@/utils/common";
|
||||
import {TenantId} from "@/config/app";
|
||||
import {useUser} from "@/hooks/useUser";
|
||||
import {useUserData} from "@/hooks/useUserData";
|
||||
import {useUniversalScanner} from "@/components/UniversalScanner";
|
||||
|
||||
function UserCard() {
|
||||
const {
|
||||
@@ -20,7 +21,17 @@ function UserCard() {
|
||||
getDisplayName,
|
||||
getRoleName
|
||||
} = useUser();
|
||||
const {data} = useUserData()
|
||||
const {data} = useUserData();
|
||||
|
||||
// 统一扫码处理
|
||||
const { startScan } = useUniversalScanner({
|
||||
onScanSuccess: (result) => {
|
||||
console.log('扫码成功:', result);
|
||||
},
|
||||
onScanError: (error) => {
|
||||
console.error('扫码失败:', error);
|
||||
}
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
// Taro.getSetting:获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限。
|
||||
@@ -190,7 +201,48 @@ function UserCard() {
|
||||
) : ''}
|
||||
</View>
|
||||
</View>
|
||||
{isAdmin() && <Scan onClick={() => navTo('/user/store/verification', true)}/>}
|
||||
{isLoggedIn && (
|
||||
<View
|
||||
onClick={() => {
|
||||
console.log('扫码按钮被点击了');
|
||||
|
||||
// 检查 Taro.scanCode 是否存在
|
||||
if (typeof Taro.scanCode === 'function') {
|
||||
console.log('Taro.scanCode 函数存在');
|
||||
|
||||
// 直接测试 Taro.scanCode
|
||||
Taro.scanCode({
|
||||
success: (res) => {
|
||||
console.log('直接扫码成功:', res.result);
|
||||
Taro.showModal({
|
||||
title: '扫码成功',
|
||||
content: res.result,
|
||||
showCancel: false
|
||||
});
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('直接扫码失败:', err);
|
||||
Taro.showModal({
|
||||
title: '扫码失败',
|
||||
content: `错误信息: ${JSON.stringify(err)}`,
|
||||
showCancel: false
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.error('Taro.scanCode 函数不存在');
|
||||
Taro.showModal({
|
||||
title: '错误',
|
||||
content: 'Taro.scanCode 函数不存在,请检查 Taro 版本',
|
||||
showCancel: false
|
||||
});
|
||||
}
|
||||
}}
|
||||
className="p-2 bg-blue-100 rounded cursor-pointer"
|
||||
>
|
||||
<Scan className="text-blue-500" />
|
||||
</View>
|
||||
)}
|
||||
<View className={'mr-4 text-sm px-3 py-1 text-black border-gray-400 border-solid border-2 rounded-3xl'}
|
||||
onClick={() => navTo('/user/profile/profile', true)}>
|
||||
{'个人资料'}
|
||||
|
||||
Reference in New Issue
Block a user