修正競賽團隊編輯、個人賽顯示、團體賽顯示 bug
This commit is contained in:
@@ -60,10 +60,15 @@ export function TeamManagement() {
|
||||
|
||||
const [newMember, setNewMember] = useState({
|
||||
name: "",
|
||||
user_id: "",
|
||||
department: "HQBU",
|
||||
role: "成員",
|
||||
})
|
||||
|
||||
// 可用用戶狀態
|
||||
const [availableUsers, setAvailableUsers] = useState<any[]>([])
|
||||
const [isLoadingUsers, setIsLoadingUsers] = useState(false)
|
||||
|
||||
// 獲取團隊數據
|
||||
const fetchTeams = async () => {
|
||||
try {
|
||||
@@ -87,8 +92,30 @@ export function TeamManagement() {
|
||||
|
||||
useEffect(() => {
|
||||
fetchTeams()
|
||||
fetchAvailableUsers()
|
||||
}, [])
|
||||
|
||||
// 獲取可用用戶列表
|
||||
const fetchAvailableUsers = async () => {
|
||||
try {
|
||||
setIsLoadingUsers(true)
|
||||
const response = await fetch('/api/admin/users/available')
|
||||
const data = await response.json()
|
||||
|
||||
if (data.success) {
|
||||
setAvailableUsers(data.data)
|
||||
} else {
|
||||
console.error('獲取用戶列表失敗:', data.message)
|
||||
setError('獲取用戶列表失敗')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('獲取用戶列表失敗:', error)
|
||||
setError('獲取用戶列表失敗')
|
||||
} finally {
|
||||
setIsLoadingUsers(false)
|
||||
}
|
||||
}
|
||||
|
||||
const filteredTeams = apiTeams.filter((team) => {
|
||||
const matchesSearch =
|
||||
team.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
||||
@@ -102,31 +129,46 @@ export function TeamManagement() {
|
||||
setShowTeamDetail(true)
|
||||
}
|
||||
|
||||
const handleEditTeam = (team: any) => {
|
||||
const handleEditTeam = async (team: any) => {
|
||||
setSelectedTeam(team)
|
||||
|
||||
// 確保成員數據結構正確
|
||||
const members = team.members && Array.isArray(team.members)
|
||||
? team.members.map((member: any) => ({
|
||||
id: member.user_id || member.id,
|
||||
user_id: member.user_id || member.id,
|
||||
name: member.name,
|
||||
department: member.department,
|
||||
role: member.role || '成員'
|
||||
}))
|
||||
: []
|
||||
|
||||
setNewTeam({
|
||||
name: team.name,
|
||||
department: team.department,
|
||||
contactEmail: team.contact_email || team.contactEmail,
|
||||
description: team.description || '',
|
||||
members: members,
|
||||
leader: team.leader_id || team.leader,
|
||||
apps: team.apps || [],
|
||||
totalLikes: team.total_likes || team.totalLikes || 0,
|
||||
})
|
||||
setShowEditTeam(true)
|
||||
try {
|
||||
// 獲取團隊的詳細信息,包括成員
|
||||
const response = await fetch(`/api/admin/teams/${team.id}`)
|
||||
const data = await response.json()
|
||||
|
||||
if (data.success) {
|
||||
const teamDetails = data.data
|
||||
|
||||
// 確保成員數據結構正確
|
||||
const members = teamDetails.members && Array.isArray(teamDetails.members)
|
||||
? teamDetails.members.map((member: any) => ({
|
||||
id: member.user_id || member.id,
|
||||
user_id: member.user_id || member.id,
|
||||
name: member.name,
|
||||
department: member.department,
|
||||
role: member.role || '成員'
|
||||
}))
|
||||
: []
|
||||
|
||||
setNewTeam({
|
||||
name: teamDetails.name,
|
||||
department: teamDetails.department,
|
||||
contactEmail: teamDetails.contact_email || teamDetails.contactEmail,
|
||||
description: teamDetails.description || '',
|
||||
members: members,
|
||||
leader: teamDetails.leader_id || teamDetails.leader,
|
||||
apps: teamDetails.apps || [],
|
||||
totalLikes: teamDetails.total_likes || teamDetails.totalLikes || 0,
|
||||
})
|
||||
setShowEditTeam(true)
|
||||
} else {
|
||||
setError('獲取團隊詳情失敗')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('獲取團隊詳情失敗:', error)
|
||||
setError('獲取團隊詳情失敗')
|
||||
}
|
||||
}
|
||||
|
||||
const handleDeleteTeam = (team: Team) => {
|
||||
@@ -145,13 +187,20 @@ export function TeamManagement() {
|
||||
}
|
||||
|
||||
const handleAddMember = () => {
|
||||
if (!newMember.name.trim()) {
|
||||
setError("請輸入成員姓名")
|
||||
if (!newMember.user_id || !newMember.name.trim()) {
|
||||
setError("請選擇成員")
|
||||
return
|
||||
}
|
||||
|
||||
// 檢查是否已經添加過這個成員
|
||||
if (newTeam.members.some(member => member.user_id === newMember.user_id)) {
|
||||
setError("該成員已經在團隊中")
|
||||
return
|
||||
}
|
||||
|
||||
const member: TeamMember = {
|
||||
id: `m${Date.now()}`,
|
||||
id: newMember.user_id, // 使用真實的用戶 ID
|
||||
user_id: newMember.user_id,
|
||||
name: newMember.name,
|
||||
department: newMember.department,
|
||||
role: newMember.role,
|
||||
@@ -173,6 +222,7 @@ export function TeamManagement() {
|
||||
|
||||
setNewMember({
|
||||
name: "",
|
||||
user_id: "",
|
||||
department: "HQBU",
|
||||
role: "成員",
|
||||
})
|
||||
@@ -262,6 +312,9 @@ export function TeamManagement() {
|
||||
}))
|
||||
}
|
||||
|
||||
console.log('🔍 準備更新的團隊數據:', updateData)
|
||||
console.log('🔍 成員數據:', newTeam.members)
|
||||
|
||||
// 調用 API 更新團隊
|
||||
const response = await fetch(`/api/admin/teams/${selectedTeam.id}`, {
|
||||
method: 'PUT',
|
||||
@@ -731,13 +784,30 @@ export function TeamManagement() {
|
||||
<h4 className="font-semibold">新增成員</h4>
|
||||
<div className="grid grid-cols-3 gap-4">
|
||||
<div className="space-y-2">
|
||||
<Label htmlFor="editMemberName">成員姓名</Label>
|
||||
<Input
|
||||
id="editMemberName"
|
||||
value={newMember.name}
|
||||
onChange={(e) => setNewMember({ ...newMember, name: e.target.value })}
|
||||
placeholder="輸入成員姓名"
|
||||
/>
|
||||
<Label htmlFor="editMemberSelect">選擇成員</Label>
|
||||
<Select
|
||||
value={newMember.user_id}
|
||||
onValueChange={(value) => {
|
||||
const selectedUser = availableUsers.find(user => user.id === value)
|
||||
setNewMember({
|
||||
...newMember,
|
||||
user_id: value,
|
||||
name: selectedUser?.name || "",
|
||||
department: selectedUser?.department || "HQBU"
|
||||
})
|
||||
}}
|
||||
>
|
||||
<SelectTrigger>
|
||||
<SelectValue placeholder="選擇團隊成員" />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
{availableUsers.map((user) => (
|
||||
<SelectItem key={user.id} value={user.id}>
|
||||
{user.name} ({user.department})
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</div>
|
||||
<div className="space-y-2">
|
||||
<Label htmlFor="editMemberDepartment">部門</Label>
|
||||
|
Reference in New Issue
Block a user