feat(admin): 实现管理员模式切换和扫码登录功能
- 新增管理员模式切换方案,统一管理所有管理员功能 - 实现扫码登录功能,支持用户通过小程序扫描网页端二维码快速登录 - 添加管理员面板组件,集中展示所有管理员功能 - 开发扫码登录按钮和扫描器组件,方便集成到不同页面 - 优化用户界面设计,提高管理员用户的使用体验
This commit is contained in:
@@ -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>
|
||||
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user