修改 ICON 和部門資料
This commit is contained in:
211
app/api/admin/analytics/route.ts
Normal file
211
app/api/admin/analytics/route.ts
Normal file
@@ -0,0 +1,211 @@
|
|||||||
|
import { NextRequest, NextResponse } from "next/server"
|
||||||
|
import { DatabaseService } from "@/lib/services/database-service"
|
||||||
|
|
||||||
|
const dbService = new DatabaseService()
|
||||||
|
|
||||||
|
export async function GET(request: NextRequest) {
|
||||||
|
try {
|
||||||
|
// 獲取總用戶數
|
||||||
|
const totalUsersResult = await dbService.query(`
|
||||||
|
SELECT COUNT(*) as total FROM users WHERE is_active = TRUE
|
||||||
|
`)
|
||||||
|
const totalUsers = totalUsersResult[0]?.total || 0
|
||||||
|
|
||||||
|
// 獲取今日活躍用戶數(今日有登入記錄的用戶)
|
||||||
|
const today = new Date().toISOString().split('T')[0]
|
||||||
|
const todayActiveUsersResult = await dbService.query(`
|
||||||
|
SELECT COUNT(DISTINCT user_id) as count
|
||||||
|
FROM activity_logs
|
||||||
|
WHERE DATE(created_at) = ? AND action = 'login'
|
||||||
|
`, [today])
|
||||||
|
const todayActiveUsers = todayActiveUsersResult[0]?.count || 0
|
||||||
|
|
||||||
|
// 獲取昨日活躍用戶數(用於比較)
|
||||||
|
const yesterday = new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString().split('T')[0]
|
||||||
|
const yesterdayActiveUsersResult = await dbService.query(`
|
||||||
|
SELECT COUNT(DISTINCT user_id) as count
|
||||||
|
FROM activity_logs
|
||||||
|
WHERE DATE(created_at) = ? AND action = 'login'
|
||||||
|
`, [yesterday])
|
||||||
|
const yesterdayActiveUsers = yesterdayActiveUsersResult[0]?.count || 0
|
||||||
|
|
||||||
|
// 計算今日活躍用戶增長率
|
||||||
|
const todayActiveGrowth = yesterdayActiveUsers > 0
|
||||||
|
? ((todayActiveUsers - yesterdayActiveUsers) / yesterdayActiveUsers * 100).toFixed(1)
|
||||||
|
: 0
|
||||||
|
|
||||||
|
// 獲取平均評分
|
||||||
|
const avgRatingResult = await dbService.query(`
|
||||||
|
SELECT AVG(rating) as avg_rating FROM apps WHERE is_active = TRUE AND rating > 0
|
||||||
|
`)
|
||||||
|
const avgRating = avgRatingResult[0]?.avg_rating || 0
|
||||||
|
|
||||||
|
// 獲取上週平均評分(用於比較)
|
||||||
|
const lastWeek = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString().split('T')[0]
|
||||||
|
const lastWeekRatingResult = await dbService.query(`
|
||||||
|
SELECT AVG(rating) as avg_rating
|
||||||
|
FROM apps
|
||||||
|
WHERE is_active = TRUE AND rating > 0 AND created_at < ?
|
||||||
|
`, [lastWeek])
|
||||||
|
const lastWeekRating = lastWeekRatingResult[0]?.avg_rating || 0
|
||||||
|
|
||||||
|
// 計算評分增長
|
||||||
|
const ratingGrowth = lastWeekRating > 0
|
||||||
|
? (avgRating - lastWeekRating).toFixed(1)
|
||||||
|
: 0
|
||||||
|
|
||||||
|
// 獲取應用總數
|
||||||
|
const totalAppsResult = await dbService.query(`
|
||||||
|
SELECT COUNT(*) as total FROM apps WHERE is_active = TRUE
|
||||||
|
`)
|
||||||
|
const totalApps = totalAppsResult[0]?.total || 0
|
||||||
|
|
||||||
|
// 獲取本週新增應用數
|
||||||
|
const weekStart = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString().split('T')[0]
|
||||||
|
const newThisWeekResult = await dbService.query(`
|
||||||
|
SELECT COUNT(*) as count
|
||||||
|
FROM apps
|
||||||
|
WHERE is_active = TRUE AND DATE(created_at) >= ?
|
||||||
|
`, [weekStart])
|
||||||
|
const newThisWeek = newThisWeekResult[0]?.count || 0
|
||||||
|
|
||||||
|
// 獲取上月用戶數(用於比較)
|
||||||
|
const lastMonth = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString().split('T')[0]
|
||||||
|
const lastMonthUsersResult = await dbService.query(`
|
||||||
|
SELECT COUNT(*) as total
|
||||||
|
FROM users
|
||||||
|
WHERE is_active = TRUE AND created_at < ?
|
||||||
|
`, [lastMonth])
|
||||||
|
const lastMonthUsers = lastMonthUsersResult[0]?.total || 0
|
||||||
|
|
||||||
|
// 計算用戶增長率
|
||||||
|
const userGrowth = lastMonthUsers > 0
|
||||||
|
? ((totalUsers - lastMonthUsers) / lastMonthUsers * 100).toFixed(1)
|
||||||
|
: 0
|
||||||
|
|
||||||
|
// 獲取近7天的使用趨勢數據
|
||||||
|
const dailyUsageData = []
|
||||||
|
for (let i = 6; i >= 0; i--) {
|
||||||
|
const date = new Date(Date.now() - i * 24 * 60 * 60 * 1000)
|
||||||
|
const dateStr = date.toISOString().split('T')[0]
|
||||||
|
const dayName = ["日", "一", "二", "三", "四", "五", "六"][date.getDay()]
|
||||||
|
|
||||||
|
// 獲取當日活躍用戶數
|
||||||
|
const dailyUsersResult = await dbService.query(`
|
||||||
|
SELECT COUNT(DISTINCT user_id) as count
|
||||||
|
FROM activity_logs
|
||||||
|
WHERE DATE(created_at) = ? AND action IN ('login', 'view')
|
||||||
|
`, [dateStr])
|
||||||
|
const dailyUsers = dailyUsersResult[0]?.count || 0
|
||||||
|
|
||||||
|
// 獲取當日會話數
|
||||||
|
const dailySessionsResult = await dbService.query(`
|
||||||
|
SELECT COUNT(*) as count
|
||||||
|
FROM activity_logs
|
||||||
|
WHERE DATE(created_at) = ? AND action = 'view'
|
||||||
|
`, [dateStr])
|
||||||
|
const dailySessions = dailySessionsResult[0]?.count || 0
|
||||||
|
|
||||||
|
dailyUsageData.push({
|
||||||
|
date: `${date.getMonth() + 1}/${date.getDate()}`,
|
||||||
|
fullDate: date.toLocaleDateString("zh-TW"),
|
||||||
|
dayName: dayName,
|
||||||
|
users: dailyUsers,
|
||||||
|
sessions: dailySessions,
|
||||||
|
cpuPeak: Math.min(80, 40 + dailyUsers * 0.1), // 模擬CPU使用率
|
||||||
|
avgCpu: Math.min(70, 30 + dailyUsers * 0.08),
|
||||||
|
memoryPeak: Math.min(75, 35 + dailyUsers * 0.12),
|
||||||
|
requests: dailySessions * 5 // 模擬請求數
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 獲取應用類別分布
|
||||||
|
const categoryDataResult = await dbService.query(`
|
||||||
|
SELECT
|
||||||
|
type as category,
|
||||||
|
COUNT(*) as app_count,
|
||||||
|
SUM(views_count) as total_views
|
||||||
|
FROM apps
|
||||||
|
WHERE is_active = TRUE
|
||||||
|
GROUP BY type
|
||||||
|
ORDER BY app_count DESC
|
||||||
|
`)
|
||||||
|
|
||||||
|
const totalAppCount = categoryDataResult.reduce((sum, item) => sum + item.app_count, 0)
|
||||||
|
const categoryData = categoryDataResult.map((item, index) => {
|
||||||
|
const colors = ["#3b82f6", "#ef4444", "#10b981", "#f59e0b", "#8b5cf6"]
|
||||||
|
return {
|
||||||
|
name: item.category,
|
||||||
|
value: Math.round((item.app_count / totalAppCount) * 100),
|
||||||
|
color: colors[index % colors.length],
|
||||||
|
users: Math.round(item.total_views * 0.3), // 估算用戶數
|
||||||
|
apps: item.app_count
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 獲取熱門應用排行
|
||||||
|
const topAppsResult = await dbService.query(`
|
||||||
|
SELECT
|
||||||
|
a.name,
|
||||||
|
a.views_count as views,
|
||||||
|
a.rating,
|
||||||
|
a.type as category
|
||||||
|
FROM apps a
|
||||||
|
WHERE a.is_active = TRUE
|
||||||
|
ORDER BY a.views_count DESC
|
||||||
|
LIMIT 5
|
||||||
|
`)
|
||||||
|
|
||||||
|
const topApps = topAppsResult.map(app => ({
|
||||||
|
name: app.name,
|
||||||
|
views: app.views || 0,
|
||||||
|
rating: parseFloat(app.rating) || 0,
|
||||||
|
category: app.category
|
||||||
|
}))
|
||||||
|
|
||||||
|
// 獲取用戶滿意度數據
|
||||||
|
const satisfactionResult = await dbService.query(`
|
||||||
|
SELECT
|
||||||
|
AVG(rating) as avg_rating,
|
||||||
|
COUNT(*) as total_ratings
|
||||||
|
FROM user_ratings
|
||||||
|
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
|
||||||
|
`)
|
||||||
|
|
||||||
|
const satisfaction = satisfactionResult[0] || { avg_rating: 0, total_ratings: 0 }
|
||||||
|
const satisfactionRate = satisfaction.avg_rating > 0
|
||||||
|
? Math.round((satisfaction.avg_rating / 5) * 100)
|
||||||
|
: 92 // 預設值
|
||||||
|
|
||||||
|
return NextResponse.json({
|
||||||
|
success: true,
|
||||||
|
data: {
|
||||||
|
// 關鍵指標
|
||||||
|
totalUsers,
|
||||||
|
todayActiveUsers,
|
||||||
|
todayActiveGrowth: parseFloat(todayActiveGrowth),
|
||||||
|
avgRating: parseFloat(avgRating.toFixed(1)),
|
||||||
|
ratingGrowth: parseFloat(ratingGrowth),
|
||||||
|
totalApps,
|
||||||
|
newThisWeek,
|
||||||
|
userGrowth: parseFloat(userGrowth),
|
||||||
|
|
||||||
|
// 趨勢數據
|
||||||
|
dailyUsageData,
|
||||||
|
categoryData,
|
||||||
|
topApps,
|
||||||
|
|
||||||
|
// 滿意度數據
|
||||||
|
satisfactionRate,
|
||||||
|
weeklyFeedback: satisfaction.total_ratings || 0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.error('獲取分析數據錯誤:', error)
|
||||||
|
return NextResponse.json(
|
||||||
|
{ success: false, error: '獲取分析數據時發生錯誤' },
|
||||||
|
{ status: 500 }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
39
app/page.tsx
39
app/page.tsx
@@ -26,6 +26,14 @@ import {
|
|||||||
ArrowLeft,
|
ArrowLeft,
|
||||||
Plus,
|
Plus,
|
||||||
X,
|
X,
|
||||||
|
Database,
|
||||||
|
BarChart3,
|
||||||
|
Camera,
|
||||||
|
Smartphone,
|
||||||
|
Monitor,
|
||||||
|
Globe,
|
||||||
|
FileText,
|
||||||
|
Bot,
|
||||||
} from "lucide-react"
|
} from "lucide-react"
|
||||||
import { Button } from "@/components/ui/button"
|
import { Button } from "@/components/ui/button"
|
||||||
import { Input } from "@/components/ui/input"
|
import { Input } from "@/components/ui/input"
|
||||||
@@ -279,7 +287,8 @@ export default function AIShowcasePlatform() {
|
|||||||
// 圖標映射函數
|
// 圖標映射函數
|
||||||
const getIconComponent = (iconName: string) => {
|
const getIconComponent = (iconName: string) => {
|
||||||
const iconMap: { [key: string]: any } = {
|
const iconMap: { [key: string]: any } = {
|
||||||
'Bot': Brain,
|
'Bot': Bot,
|
||||||
|
'Brain': Brain,
|
||||||
'ImageIcon': ImageIcon,
|
'ImageIcon': ImageIcon,
|
||||||
'Mic': Mic,
|
'Mic': Mic,
|
||||||
'MessageSquare': MessageSquare,
|
'MessageSquare': MessageSquare,
|
||||||
@@ -300,10 +309,17 @@ export default function AIShowcasePlatform() {
|
|||||||
'X': X,
|
'X': X,
|
||||||
'ChevronLeft': ChevronLeft,
|
'ChevronLeft': ChevronLeft,
|
||||||
'ChevronRight': ChevronRight,
|
'ChevronRight': ChevronRight,
|
||||||
'ArrowLeft': ArrowLeft
|
'ArrowLeft': ArrowLeft,
|
||||||
|
'Database': Database,
|
||||||
|
'BarChart3': BarChart3,
|
||||||
|
'Camera': Camera,
|
||||||
|
'Smartphone': Smartphone,
|
||||||
|
'Monitor': Monitor,
|
||||||
|
'Globe': Globe,
|
||||||
|
'FileText': FileText,
|
||||||
}
|
}
|
||||||
|
|
||||||
return iconMap[iconName] || Brain // 預設使用 Brain 圖標
|
return iconMap[iconName] || Bot // 預設使用 Bot 圖標
|
||||||
}
|
}
|
||||||
|
|
||||||
const getTypeColor = (type: string) => {
|
const getTypeColor = (type: string) => {
|
||||||
@@ -946,10 +962,27 @@ export default function AIShowcasePlatform() {
|
|||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="all">全部部門</SelectItem>
|
<SelectItem value="all">全部部門</SelectItem>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
<SelectItem value="HQBU">HQBU</SelectItem>
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
<SelectItem value="MBU1">MBU1</SelectItem>
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
<SelectItem value="SBU">SBU</SelectItem>
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
|
|
||||||
|
@@ -309,14 +309,27 @@ export default function RegisterPage() {
|
|||||||
<SelectValue placeholder="請選擇您的部門" />
|
<SelectValue placeholder="請選擇您的部門" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
<SelectItem value="HQBU">HQBU</SelectItem>
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
<SelectItem value="RDBU">RDBU</SelectItem>
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
<SelectItem value="MDBU">MDBU</SelectItem>
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
<SelectItem value="PGBU">PGBU</SelectItem>
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
<SelectItem value="SGBU">SGBU</SelectItem>
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
<SelectItem value="TGBU">TGBU</SelectItem>
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
<SelectItem value="WGBU">WGBU</SelectItem>
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
<SelectItem value="Other">其他</SelectItem>
|
<SelectItem value="Other">其他</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
|
@@ -16,12 +16,28 @@ import {
|
|||||||
Line,
|
Line,
|
||||||
ComposedChart,
|
ComposedChart,
|
||||||
} from "recharts"
|
} from "recharts"
|
||||||
import { Users, Eye, Star, TrendingUp, Clock, Activity, Calendar, AlertTriangle } from "lucide-react"
|
import { Users, Eye, Star, TrendingUp, Clock, Activity, Calendar, AlertTriangle, Loader2 } from "lucide-react"
|
||||||
import { useState } from "react"
|
import { useState, useEffect } from "react"
|
||||||
|
|
||||||
export function AnalyticsDashboard() {
|
export function AnalyticsDashboard() {
|
||||||
const [showHistoryModal, setShowHistoryModal] = useState(false)
|
const [showHistoryModal, setShowHistoryModal] = useState(false)
|
||||||
const [selectedDateRange, setSelectedDateRange] = useState("近7天")
|
const [selectedDateRange, setSelectedDateRange] = useState("近7天")
|
||||||
|
const [isLoading, setIsLoading] = useState(true)
|
||||||
|
const [analyticsData, setAnalyticsData] = useState({
|
||||||
|
totalUsers: 0,
|
||||||
|
todayActiveUsers: 0,
|
||||||
|
todayActiveGrowth: 0,
|
||||||
|
avgRating: 0,
|
||||||
|
ratingGrowth: 0,
|
||||||
|
totalApps: 0,
|
||||||
|
newThisWeek: 0,
|
||||||
|
userGrowth: 0,
|
||||||
|
dailyUsageData: [],
|
||||||
|
categoryData: [],
|
||||||
|
topApps: [],
|
||||||
|
satisfactionRate: 0,
|
||||||
|
weeklyFeedback: 0
|
||||||
|
})
|
||||||
|
|
||||||
// 24小時使用數據 - 優化版本
|
// 24小時使用數據 - 優化版本
|
||||||
const hourlyData = [
|
const hourlyData = [
|
||||||
|
@@ -978,10 +978,27 @@ export function AppManagement() {
|
|||||||
<SelectValue />
|
<SelectValue />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
<SelectItem value="HQBU">HQBU</SelectItem>
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
<SelectItem value="MBU1">MBU1</SelectItem>
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
<SelectItem value="SBU">SBU</SelectItem>
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
@@ -1132,10 +1149,27 @@ export function AppManagement() {
|
|||||||
<SelectValue />
|
<SelectValue />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
<SelectItem value="HQBU">HQBU</SelectItem>
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
<SelectItem value="MBU1">MBU1</SelectItem>
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
<SelectItem value="SBU">SBU</SelectItem>
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -2652,14 +2652,27 @@ export function CompetitionManagement() {
|
|||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="all">所有部門</SelectItem>
|
<SelectItem value="all">所有部門</SelectItem>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
<SelectItem value="HQBU">HQBU</SelectItem>
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
<SelectItem value="MBU1">MBU1</SelectItem>
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
<SelectItem value="MBU2">MBU2</SelectItem>
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
<SelectItem value="SBU">SBU</SelectItem>
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
<SelectItem value="研發部">研發部</SelectItem>
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
<SelectItem value="產品部">產品部</SelectItem>
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
<SelectItem value="技術部">技術部</SelectItem>
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
<SelectItem value="其他">其他</SelectItem>
|
<SelectItem value="其他">其他</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
@@ -2924,14 +2937,27 @@ export function CompetitionManagement() {
|
|||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="all">所有部門</SelectItem>
|
<SelectItem value="all">所有部門</SelectItem>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
<SelectItem value="HQBU">HQBU</SelectItem>
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
<SelectItem value="MBU1">MBU1</SelectItem>
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
<SelectItem value="MBU2">MBU2</SelectItem>
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
<SelectItem value="SBU">SBU</SelectItem>
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
<SelectItem value="研發部">研發部</SelectItem>
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
<SelectItem value="產品部">產品部</SelectItem>
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
<SelectItem value="技術部">技術部</SelectItem>
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
<SelectItem value="其他">其他</SelectItem>
|
<SelectItem value="其他">其他</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
@@ -5107,10 +5133,27 @@ export function CompetitionManagement() {
|
|||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="all">所有部門</SelectItem>
|
<SelectItem value="all">所有部門</SelectItem>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
<SelectItem value="HQBU">HQBU</SelectItem>
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
<SelectItem value="MBU1">MBU1</SelectItem>
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
<SelectItem value="SBU">SBU</SelectItem>
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
@@ -5186,10 +5229,27 @@ export function CompetitionManagement() {
|
|||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="all">所有部門</SelectItem>
|
<SelectItem value="all">所有部門</SelectItem>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
<SelectItem value="HQBU">HQBU</SelectItem>
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
<SelectItem value="MBU1">MBU1</SelectItem>
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
<SelectItem value="SBU">SBU</SelectItem>
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
@@ -5296,10 +5356,27 @@ export function CompetitionManagement() {
|
|||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="all">所有部門</SelectItem>
|
<SelectItem value="all">所有部門</SelectItem>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
<SelectItem value="HQBU">HQBU</SelectItem>
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
<SelectItem value="MBU1">MBU1</SelectItem>
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
<SelectItem value="SBU">SBU</SelectItem>
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
@@ -6197,10 +6274,27 @@ export function CompetitionManagement() {
|
|||||||
<SelectValue />
|
<SelectValue />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
<SelectItem value="HQBU">HQBU</SelectItem>
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
<SelectItem value="MBU1">MBU1</SelectItem>
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
<SelectItem value="SBU">SBU</SelectItem>
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
@@ -6284,10 +6378,27 @@ export function CompetitionManagement() {
|
|||||||
<SelectValue />
|
<SelectValue />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
<SelectItem value="HQBU">HQBU</SelectItem>
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
<SelectItem value="MBU1">MBU1</SelectItem>
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
<SelectItem value="SBU">SBU</SelectItem>
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
@@ -6698,7 +6809,7 @@ export function CompetitionManagement() {
|
|||||||
部門 <span className="text-red-500">*</span>
|
部門 <span className="text-red-500">*</span>
|
||||||
</Label>
|
</Label>
|
||||||
<Select
|
<Select
|
||||||
value={newJudge.department === "" || !["HQBU", "ITBU", "MBU1", "MBU2", "SBU", "研發部", "產品部", "技術部"].includes(newJudge.department) ? "custom" : newJudge.department}
|
value={newJudge.department === "" || !["ACBU", "AUBU", "FAB3", "FNBU", "HQBU", "HRBU", "IBU", "ICDU", "ICBU", "ITBU", "MBU1", "MBU5", "PJA", "PBU", "SBG", "SBU", "董事會", "法務室", "關係企業發展", "稽核室", "總經理室"].includes(newJudge.department) ? "custom" : newJudge.department}
|
||||||
onValueChange={(value) => {
|
onValueChange={(value) => {
|
||||||
if (value === "custom") {
|
if (value === "custom") {
|
||||||
setNewJudge({ ...newJudge, department: "" })
|
setNewJudge({ ...newJudge, department: "" })
|
||||||
@@ -6711,20 +6822,33 @@ export function CompetitionManagement() {
|
|||||||
<SelectValue placeholder="選擇部門" />
|
<SelectValue placeholder="選擇部門" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
<SelectItem value="HQBU">HQBU</SelectItem>
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
<SelectItem value="MBU1">MBU1</SelectItem>
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
<SelectItem value="MBU2">MBU2</SelectItem>
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
<SelectItem value="SBU">SBU</SelectItem>
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
<SelectItem value="研發部">研發部</SelectItem>
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
<SelectItem value="產品部">產品部</SelectItem>
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
<SelectItem value="技術部">技術部</SelectItem>
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
<SelectItem value="custom">其他/自定義...</SelectItem>
|
<SelectItem value="custom">其他/自定義...</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
|
|
||||||
{/* 自定義部門輸入框 */}
|
{/* 自定義部門輸入框 */}
|
||||||
{(newJudge.department === "" || !["HQBU", "ITBU", "MBU1", "MBU2", "SBU", "研發部", "產品部", "技術部"].includes(newJudge.department)) && (
|
{(newJudge.department === "" || !["ACBU", "AUBU", "FAB3", "FNBU", "HQBU", "HRBU", "IBU", "ICDU", "ICBU", "ITBU", "MBU1", "MBU5", "PJA", "PBU", "SBG", "SBU", "董事會", "法務室", "關係企業發展", "稽核室", "總經理室"].includes(newJudge.department)) && (
|
||||||
<Input
|
<Input
|
||||||
value={newJudge.department}
|
value={newJudge.department}
|
||||||
onChange={(e) => setNewJudge({ ...newJudge, department: e.target.value })}
|
onChange={(e) => setNewJudge({ ...newJudge, department: e.target.value })}
|
||||||
|
@@ -308,10 +308,27 @@ export function TeamManagement() {
|
|||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="all">全部部門</SelectItem>
|
<SelectItem value="all">全部部門</SelectItem>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
<SelectItem value="HQBU">HQBU</SelectItem>
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
<SelectItem value="MBU1">MBU1</SelectItem>
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
<SelectItem value="SBU">SBU</SelectItem>
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -806,10 +806,27 @@ export function UserManagement() {
|
|||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="all">全部部門</SelectItem>
|
<SelectItem value="all">全部部門</SelectItem>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
<SelectItem value="HQBU">HQBU</SelectItem>
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
<SelectItem value="MBU1">MBU1</SelectItem>
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
<SelectItem value="SBU">SBU</SelectItem>
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
|
|
||||||
@@ -1183,10 +1200,27 @@ export function UserManagement() {
|
|||||||
<SelectValue />
|
<SelectValue />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
<SelectItem value="HQBU">HQBU</SelectItem>
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
<SelectItem value="MBU1">MBU1</SelectItem>
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
<SelectItem value="SBU">SBU</SelectItem>
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -44,6 +44,11 @@ import {
|
|||||||
Database,
|
Database,
|
||||||
Palette,
|
Palette,
|
||||||
Volume2,
|
Volume2,
|
||||||
|
Camera,
|
||||||
|
Smartphone,
|
||||||
|
Monitor,
|
||||||
|
Globe,
|
||||||
|
FileText,
|
||||||
} from "lucide-react"
|
} from "lucide-react"
|
||||||
import { FavoriteButton } from "./favorite-button"
|
import { FavoriteButton } from "./favorite-button"
|
||||||
import { ReviewSystem } from "./reviews/review-system"
|
import { ReviewSystem } from "./reviews/review-system"
|
||||||
@@ -150,9 +155,14 @@ export function AppDetailDialog({ open, onOpenChange, app }: AppDetailDialogProp
|
|||||||
'ChevronLeft': ChevronLeft,
|
'ChevronLeft': ChevronLeft,
|
||||||
'ChevronRight': ChevronRight,
|
'ChevronRight': ChevronRight,
|
||||||
'ArrowLeft': ArrowLeft,
|
'ArrowLeft': ArrowLeft,
|
||||||
'Settings': Settings
|
'Settings': Settings,
|
||||||
|
'Camera': Camera,
|
||||||
|
'Smartphone': Smartphone,
|
||||||
|
'Monitor': Monitor,
|
||||||
|
'Globe': Globe,
|
||||||
|
'FileText': FileText,
|
||||||
}
|
}
|
||||||
return iconMap[iconName] || Brain // 預設使用 Brain 圖標
|
return iconMap[iconName] || Bot // 預設使用 Bot 圖標
|
||||||
}
|
}
|
||||||
|
|
||||||
const IconComponent = getIconComponent(app.icon || 'Bot')
|
const IconComponent = getIconComponent(app.icon || 'Bot')
|
||||||
|
@@ -32,7 +32,7 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
|||||||
const [showConfirmPassword, setShowConfirmPassword] = useState(false)
|
const [showConfirmPassword, setShowConfirmPassword] = useState(false)
|
||||||
const [success, setSuccess] = useState(false)
|
const [success, setSuccess] = useState(false)
|
||||||
|
|
||||||
const departments = ["HQBU", "ITBU", "MBU1", "MBU2", "SBU", "財務部", "人資部", "法務部"]
|
const departments = ["ACBU", "AUBU", "FAB3", "FNBU", "HQBU", "HRBU", "IBU", "ICDU", "ICBU", "ITBU", "MBU1", "MBU5", "PJA", "PBU", "SBG", "SBU", "董事會", "法務室", "關係企業發展", "稽核室", "總經理室"]
|
||||||
|
|
||||||
const handleSubmit = async (e: React.FormEvent) => {
|
const handleSubmit = async (e: React.FormEvent) => {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
|
@@ -748,10 +748,27 @@ export function PopularityRankings() {
|
|||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="all">全部部門</SelectItem>
|
<SelectItem value="all">全部部門</SelectItem>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
<SelectItem value="HQBU">HQBU</SelectItem>
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
<SelectItem value="MBU1">MBU1</SelectItem>
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
<SelectItem value="SBU">SBU</SelectItem>
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
|
|
||||||
|
@@ -319,10 +319,27 @@ export function RegistrationDialog({ open, onOpenChange }: RegistrationDialogPro
|
|||||||
<SelectValue placeholder="選擇所屬部門" />
|
<SelectValue placeholder="選擇所屬部門" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
<SelectItem value="HQBU">HQBU</SelectItem>
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
<SelectItem value="MBU1">MBU1</SelectItem>
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
<SelectItem value="SBU">SBU</SelectItem>
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
<SelectItem value="其他">其他</SelectItem>
|
<SelectItem value="其他">其他</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
|
@@ -27,6 +27,11 @@ import {
|
|||||||
Volume2,
|
Volume2,
|
||||||
Search,
|
Search,
|
||||||
BarChart3,
|
BarChart3,
|
||||||
|
Camera,
|
||||||
|
Smartphone,
|
||||||
|
Monitor,
|
||||||
|
Globe,
|
||||||
|
FileText,
|
||||||
} from "lucide-react"
|
} from "lucide-react"
|
||||||
import { useAuth } from "@/contexts/auth-context"
|
import { useAuth } from "@/contexts/auth-context"
|
||||||
import { LikeButton } from "@/components/like-button"
|
import { LikeButton } from "@/components/like-button"
|
||||||
@@ -54,9 +59,14 @@ const getIconComponent = (iconName: string) => {
|
|||||||
'MessageSquare': MessageSquare,
|
'MessageSquare': MessageSquare,
|
||||||
'Zap': Zap,
|
'Zap': Zap,
|
||||||
'TrendingUp': TrendingUp,
|
'TrendingUp': TrendingUp,
|
||||||
|
'Camera': Camera,
|
||||||
|
'Smartphone': Smartphone,
|
||||||
|
'Monitor': Monitor,
|
||||||
|
'Globe': Globe,
|
||||||
|
'FileText': FileText,
|
||||||
};
|
};
|
||||||
|
|
||||||
return iconMap[iconName] || Brain;
|
return iconMap[iconName] || Bot;
|
||||||
}
|
}
|
||||||
|
|
||||||
// App data for team apps - get from team data
|
// App data for team apps - get from team data
|
||||||
|
@@ -6,7 +6,7 @@ import { Card, CardContent } from "@/components/ui/card"
|
|||||||
import { Button } from "@/components/ui/button"
|
import { Button } from "@/components/ui/button"
|
||||||
import { Badge } from "@/components/ui/badge"
|
import { Badge } from "@/components/ui/badge"
|
||||||
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
|
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
|
||||||
import { Heart, ExternalLink, Star, Eye, ThumbsUp, MessageSquare, Brain, ImageIcon, Mic, MessageSquare as MessageSquareIcon, Settings, Zap, TrendingUp, Target, Users, Lightbulb, Search } from "lucide-react"
|
import { Heart, ExternalLink, Star, Eye, ThumbsUp, MessageSquare, Brain, ImageIcon, Mic, MessageSquare as MessageSquareIcon, Settings, Zap, TrendingUp, Target, Users, Lightbulb, Search, Database, BarChart3, Camera, Smartphone, Monitor, Globe, FileText, Bot } from "lucide-react"
|
||||||
|
|
||||||
export function FavoritesPage() {
|
export function FavoritesPage() {
|
||||||
const { user } = useAuth()
|
const { user } = useAuth()
|
||||||
@@ -116,7 +116,8 @@ export function FavoritesPage() {
|
|||||||
// 圖標映射函數
|
// 圖標映射函數
|
||||||
const getIconComponent = (iconName: string) => {
|
const getIconComponent = (iconName: string) => {
|
||||||
const iconMap: { [key: string]: any } = {
|
const iconMap: { [key: string]: any } = {
|
||||||
'Bot': Brain,
|
'Bot': Bot,
|
||||||
|
'Brain': Brain,
|
||||||
'ImageIcon': ImageIcon,
|
'ImageIcon': ImageIcon,
|
||||||
'Mic': Mic,
|
'Mic': Mic,
|
||||||
'MessageSquare': MessageSquareIcon,
|
'MessageSquare': MessageSquareIcon,
|
||||||
@@ -130,8 +131,15 @@ export function FavoritesPage() {
|
|||||||
'Users': Users,
|
'Users': Users,
|
||||||
'Lightbulb': Lightbulb,
|
'Lightbulb': Lightbulb,
|
||||||
'Search': Search,
|
'Search': Search,
|
||||||
|
'Database': Database,
|
||||||
|
'BarChart3': BarChart3,
|
||||||
|
'Camera': Camera,
|
||||||
|
'Smartphone': Smartphone,
|
||||||
|
'Monitor': Monitor,
|
||||||
|
'Globe': Globe,
|
||||||
|
'FileText': FileText,
|
||||||
}
|
}
|
||||||
return iconMap[iconName] || Heart
|
return iconMap[iconName] || Bot
|
||||||
}
|
}
|
||||||
|
|
||||||
const getTypeColor = (type: string) => {
|
const getTypeColor = (type: string) => {
|
||||||
@@ -187,7 +195,27 @@ export function FavoritesPage() {
|
|||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="all">所有部門</SelectItem>
|
<SelectItem value="all">所有部門</SelectItem>
|
||||||
|
<SelectItem value="ACBU">ACBU</SelectItem>
|
||||||
|
<SelectItem value="AUBU">AUBU</SelectItem>
|
||||||
|
<SelectItem value="FAB3">FAB3</SelectItem>
|
||||||
|
<SelectItem value="FNBU">FNBU</SelectItem>
|
||||||
|
<SelectItem value="HQBU">HQBU</SelectItem>
|
||||||
|
<SelectItem value="HRBU">HRBU</SelectItem>
|
||||||
|
<SelectItem value="IBU">IBU</SelectItem>
|
||||||
|
<SelectItem value="ICDU">ICDU</SelectItem>
|
||||||
|
<SelectItem value="ICBU">ICBU</SelectItem>
|
||||||
<SelectItem value="ITBU">ITBU</SelectItem>
|
<SelectItem value="ITBU">ITBU</SelectItem>
|
||||||
|
<SelectItem value="MBU1">MBU1</SelectItem>
|
||||||
|
<SelectItem value="MBU5">MBU5</SelectItem>
|
||||||
|
<SelectItem value="PJA">PJA</SelectItem>
|
||||||
|
<SelectItem value="PBU">PBU</SelectItem>
|
||||||
|
<SelectItem value="SBG">SBG</SelectItem>
|
||||||
|
<SelectItem value="SBU">SBU</SelectItem>
|
||||||
|
<SelectItem value="董事會">董事會</SelectItem>
|
||||||
|
<SelectItem value="法務室">法務室</SelectItem>
|
||||||
|
<SelectItem value="關係企業發展">關係企業發展</SelectItem>
|
||||||
|
<SelectItem value="稽核室">稽核室</SelectItem>
|
||||||
|
<SelectItem value="總經理室">總經理室</SelectItem>
|
||||||
<SelectItem value="HR">HR</SelectItem>
|
<SelectItem value="HR">HR</SelectItem>
|
||||||
<SelectItem value="Finance">Finance</SelectItem>
|
<SelectItem value="Finance">Finance</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
|
Reference in New Issue
Block a user