feat(admin): 实现管理员模式切换和扫码登录功能

- 新增管理员模式切换方案,统一管理所有管理员功能
- 实现扫码登录功能,支持用户通过小程序扫描网页端二维码快速登录
- 添加管理员面板组件,集中展示所有管理员功能
- 开发扫码登录按钮和扫描器组件,方便集成到不同页面
- 优化用户界面设计,提高管理员用户的使用体验
This commit is contained in:
2025-09-01 14:26:00 +08:00
parent 7a7d8b4605
commit cbcf591f71
16 changed files with 1785 additions and 33 deletions

View File

@@ -11,6 +11,9 @@ import {TenantId} from "@/config/app";
import {useUser} from "@/hooks/useUser";
import {useUserData} from "@/hooks/useUserData";
import {getStoredInviteParams} from "@/utils/invite";
import {useQRLogin} from "@/hooks/useQRLogin";
import {useAdminMode} from "@/hooks/useAdminMode";
import AdminPanel from "@/components/AdminPanel";
const UserCard = forwardRef<any, any>((_, ref) => {
const {
@@ -21,6 +24,15 @@ const UserCard = forwardRef<any, any>((_, ref) => {
const [IsLogin, setIsLogin] = useState<boolean>(false)
const [userInfo, setUserInfo] = useState<User>()
// 扫码登录Hook
const { startScan, isLoading: isScanLoading } = useQRLogin();
// 管理员模式Hook
const { isAdminMode, toggleAdminMode } = useAdminMode();
// 管理员面板显示状态
const [showAdminPanel, setShowAdminPanel] = useState(false);
// 下拉刷新
const handleRefresh = async () => {
await refresh()
@@ -168,6 +180,25 @@ const UserCard = forwardRef<any, any>((_, ref) => {
})
}
// 处理扫码登录
const handleQRLogin = async () => {
try {
await startScan();
} catch (error) {
console.error('扫码登录失败:', error);
}
};
// 打开管理员面板
const handleOpenAdminPanel = () => {
setShowAdminPanel(true);
};
// 关闭管理员面板
const handleCloseAdminPanel = () => {
setShowAdminPanel(false);
};
return (
<View className={'header-bg pt-20'}>
<View className={'p-4'}>
@@ -205,7 +236,31 @@ const UserCard = forwardRef<any, any>((_, ref) => {
) : ''}
</View>
</View>
{isAdmin() && <Scan onClick={() => navTo('/user/store/verification', true)} />}
{isAdmin() && (
<View className="flex items-center space-x-2">
{/* 管理员模式切换按钮 */}
<View
className={`px-3 py-1 rounded-full text-xs font-medium transition-all ${
isAdminMode
? 'bg-blue-500 text-white'
: 'bg-gray-100 text-gray-600 border border-gray-300'
}`}
onClick={toggleAdminMode}
>
{isAdminMode ? '管理员' : '普通用户'}
</View>
{/* 管理员功能入口 */}
{isAdminMode && (
<View
className="px-3 py-1 bg-blue-50 border border-blue-200 rounded-full text-xs text-blue-600 font-medium"
onClick={handleOpenAdminPanel}
>
</View>
)}
</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)}>
{'个人资料'}
@@ -234,6 +289,14 @@ const UserCard = forwardRef<any, any>((_, ref) => {
</View>
</View>
</View>
{/* 管理员面板 */}
{isAdmin() && (
<AdminPanel
visible={showAdminPanel}
onClose={handleCloseAdminPanel}
/>
)}
</View>
)