功能迭代:用户管理与存客宝同步、管理后台与小程序优化、开发文档更新

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
卡若
2026-01-29 17:15:00 +08:00
parent 8f01de4f9a
commit d87fa5c175
18 changed files with 2693 additions and 149 deletions

View File

@@ -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>