功能迭代:用户管理与存客宝同步、管理后台与小程序优化、开发文档更新
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -9,7 +9,8 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@
|
||||
import { Badge } from "@/components/ui/badge"
|
||||
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog"
|
||||
import { Switch } from "@/components/ui/switch"
|
||||
import { Search, UserPlus, Trash2, Edit3, Key, Save, X, RefreshCw, Users, Eye } from "lucide-react"
|
||||
import { Search, UserPlus, Trash2, Edit3, Key, Save, X, RefreshCw, Users, Eye, Link2, History } from "lucide-react"
|
||||
import { UserDetailModal } from "@/components/modules/user/user-detail-modal"
|
||||
|
||||
interface User {
|
||||
id: string
|
||||
@@ -51,6 +52,10 @@ function UsersContent() {
|
||||
const [referralsData, setReferralsData] = useState<any>({ referrals: [], stats: {} })
|
||||
const [referralsLoading, setReferralsLoading] = useState(false)
|
||||
const [selectedUserForReferrals, setSelectedUserForReferrals] = useState<User | null>(null)
|
||||
|
||||
// 用户详情弹窗
|
||||
const [showDetailModal, setShowDetailModal] = useState(false)
|
||||
const [selectedUserIdForDetail, setSelectedUserIdForDetail] = useState<string | null>(null)
|
||||
|
||||
// 初始表单状态
|
||||
const [formData, setFormData] = useState({
|
||||
@@ -219,6 +224,12 @@ function UsersContent() {
|
||||
}
|
||||
}
|
||||
|
||||
// 查看用户详情
|
||||
const handleViewDetail = (user: User) => {
|
||||
setSelectedUserIdForDetail(user.id)
|
||||
setShowDetailModal(true)
|
||||
}
|
||||
|
||||
// 保存密码
|
||||
const handleSavePassword = async () => {
|
||||
if (!newPassword) {
|
||||
@@ -422,6 +433,14 @@ function UsersContent() {
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
|
||||
{/* 用户详情弹窗 */}
|
||||
<UserDetailModal
|
||||
open={showDetailModal}
|
||||
onClose={() => setShowDetailModal(false)}
|
||||
userId={selectedUserIdForDetail}
|
||||
onUserUpdated={loadUsers}
|
||||
/>
|
||||
|
||||
{/* 绑定关系弹窗 */}
|
||||
<Dialog open={showReferralsModal} onOpenChange={setShowReferralsModal}>
|
||||
<DialogContent className="bg-[#0f2137] border-gray-700 text-white max-w-2xl max-h-[80vh] overflow-auto">
|
||||
@@ -626,11 +645,21 @@ function UsersContent() {
|
||||
</TableCell>
|
||||
<TableCell className="text-right">
|
||||
<div className="flex items-center justify-end gap-1">
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
onClick={() => handleViewDetail(user)}
|
||||
className="text-gray-400 hover:text-blue-400 hover:bg-blue-400/10"
|
||||
title="查看详情"
|
||||
>
|
||||
<Eye className="w-4 h-4" />
|
||||
</Button>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
onClick={() => handleEditUser(user)}
|
||||
className="text-gray-400 hover:text-[#38bdac] hover:bg-[#38bdac]/10"
|
||||
title="编辑"
|
||||
>
|
||||
<Edit3 className="w-4 h-4" />
|
||||
</Button>
|
||||
@@ -639,6 +668,7 @@ function UsersContent() {
|
||||
size="sm"
|
||||
onClick={() => handleChangePassword(user)}
|
||||
className="text-gray-400 hover:text-yellow-400 hover:bg-yellow-400/10"
|
||||
title="修改密码"
|
||||
>
|
||||
<Key className="w-4 h-4" />
|
||||
</Button>
|
||||
@@ -647,6 +677,7 @@ function UsersContent() {
|
||||
size="sm"
|
||||
className="text-red-400 hover:text-red-300 hover:bg-red-500/10"
|
||||
onClick={() => handleDelete(user.id)}
|
||||
title="删除"
|
||||
>
|
||||
<Trash2 className="w-4 h-4" />
|
||||
</Button>
|
||||
|
||||
Reference in New Issue
Block a user