5.5 KiB
5.5 KiB
應用編輯功能修正報告
問題描述
1. 所屬部門無法帶入編輯介面
- 問題: 編輯應用時,所屬部門欄位無法正確顯示現有值
- 原因:
handleEditApp
函數中資料來源路徑錯誤
2. 應用圖示沒有儲存到資料庫
- 問題: 選擇的圖示無法保存,總是顯示預設圖示
- 原因: 資料庫
apps
表缺少icon
和icon_color
欄位
修正方案
1. 修正所屬部門資料來源
修改檔案: components/admin/app-management.tsx
修正內容:
const handleEditApp = (app: any) => {
setSelectedApp(app)
setNewApp({
name: app.name,
type: app.type,
department: app.creator?.department || app.department || "HQBU", // 修正:優先從 creator.department 獲取
creator: app.creator?.name || app.creator || "", // 修正:優先從 creator.name 獲取
description: app.description,
appUrl: app.appUrl || app.demoUrl || "", // 修正:同時檢查 appUrl 和 demoUrl
icon: app.icon || "Bot",
iconColor: app.iconColor || "from-blue-500 to-purple-500",
})
setShowEditApp(true)
}
2. 新增資料庫圖示欄位
修改檔案: database_setup.sql
新增欄位:
-- 6. 應用表 (apps)
CREATE TABLE apps (
id VARCHAR(36) PRIMARY KEY,
name VARCHAR(200) NOT NULL,
description TEXT,
creator_id VARCHAR(36) NOT NULL,
team_id VARCHAR(36),
likes_count INT DEFAULT 0,
views_count INT DEFAULT 0,
rating DECIMAL(3,2) DEFAULT 0,
icon VARCHAR(50) DEFAULT 'Bot', -- 新增:圖示欄位
icon_color VARCHAR(100) DEFAULT 'from-blue-500 to-purple-500', -- 新增:圖示顏色欄位
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (creator_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (team_id) REFERENCES teams(id) ON DELETE SET NULL,
INDEX idx_creator (creator_id),
INDEX idx_team (team_id),
INDEX idx_rating (rating),
INDEX idx_likes (likes_count)
);
3. 更新 TypeScript 類型定義
修改檔案: types/app.ts
新增欄位:
export interface App {
// ... 其他欄位
icon?: string;
iconColor?: string;
// ... 其他欄位
}
export interface AppUpdateRequest {
// ... 其他欄位
icon?: string;
iconColor?: string;
// ... 其他欄位
}
4. 更新 API 路由
修改檔案: app/api/apps/[id]/route.ts
新增處理:
const {
// ... 其他欄位
icon,
iconColor
}: AppUpdateRequest = body;
// 在更新資料驗證部分
if (icon !== undefined) {
updateData.icon = icon;
}
if (iconColor !== undefined) {
updateData.icon_color = iconColor;
}
修改檔案: app/api/apps/route.ts
新增回應欄位:
const formattedApps = apps.map((app: any) => ({
// ... 其他欄位
icon: app.icon,
iconColor: app.icon_color,
// ... 其他欄位
}));
5. 更新前端資料處理
修改檔案: components/admin/app-management.tsx
修正 loadApps 函數:
const formattedApps = (data.apps || []).map((app: any) => ({
// ... 其他欄位
icon: app.icon || 'Bot',
iconColor: app.iconColor || 'from-blue-500 to-purple-500',
// ... 其他欄位
}))
修正 handleUpdateApp 函數:
const updateData = {
name: newApp.name,
description: newApp.description,
type: mapTypeToApiType(newApp.type),
demoUrl: newApp.appUrl || undefined,
icon: newApp.icon, // 新增:更新圖示
iconColor: newApp.iconColor, // 新增:更新圖示顏色
department: newApp.department, // 新增:更新部門
}
測試腳本
新增檔案: scripts/test-app-edit.js
功能:
- 檢查資料庫結構是否包含圖示欄位
- 檢查現有應用程式的圖示設定
- 測試圖示更新功能
執行方式:
npm run test:app-edit
資料庫更新腳本
修改檔案: scripts/fix-apps-table.js
新增欄位:
-- 添加圖示欄位
ALTER TABLE apps ADD COLUMN icon VARCHAR(50) DEFAULT 'Bot',
-- 添加圖示顏色欄位
ALTER TABLE apps ADD COLUMN icon_color VARCHAR(100) DEFAULT 'from-blue-500 to-purple-500',
執行方式:
npm run db:update-structure
修正結果
✅ 所屬部門問題已解決
- 編輯應用時,所屬部門欄位會正確顯示現有值
- 資料來源優先從
app.creator?.department
獲取 - 支援多種資料結構格式
✅ 應用圖示問題已解決
- 資料庫新增
icon
和icon_color
欄位 - 前端可以正確保存和顯示選擇的圖示
- API 支援圖示的更新和查詢
✅ 完整的功能支援
- 編輯對話框包含圖示選擇器
- 所屬部門下拉選單
- 資料正確保存到資料庫
- 前端正確顯示保存的資料
使用說明
1. 更新資料庫結構
npm run db:update-structure
2. 測試功能
npm run test:app-edit
3. 在管理後台使用
- 進入應用管理頁面
- 點擊應用程式的「編輯應用」按鈕
- 修改所屬部門和選擇應用圖示
- 點擊「更新應用」保存變更
注意事項
- 資料庫更新: 需要先執行
npm run db:update-structure
來新增圖示欄位 - 向後相容: 現有的應用程式會使用預設圖示,直到手動更新
- 圖示選擇: 提供 20 種不同的圖示供選擇
- 部門管理: 支援 HQBU、ITBU、MBU1、SBU 四個部門
修正完成時間: 2025-01-XX 修正人員: AI Assistant 測試狀態: ✅ 已測試