diff --git a/src/components/BoardManager.tsx b/src/components/BoardManager.tsx index 96aefcb..f505822 100644 --- a/src/components/BoardManager.tsx +++ b/src/components/BoardManager.tsx @@ -21,6 +21,7 @@ interface StudentListConfig { id: string name: string sql: string + viewMode: BoardStudentViewMode } interface BoardConfig { @@ -40,6 +41,8 @@ interface BoardManagerProps { canManage: boolean } +type BoardStudentViewMode = "list" | "card" | "grid" + interface BoardStudentCardData { key: string name: string @@ -66,6 +69,7 @@ const createDefaultList = (): StudentListConfig => ({ id: makeId(), name: "学生积分榜", sql: getDefaultSql(), + viewMode: "card", }) const createDefaultBoard = (): BoardConfig => ({ @@ -86,6 +90,10 @@ const normalizeBoards = (input: unknown): BoardConfig[] => { name: typeof list?.name === "string" && list.name.trim() ? list.name.trim() : "学生列表", sql: typeof list?.sql === "string" && list.sql.trim() ? list.sql : getDefaultSql(), + viewMode: + list?.viewMode === "list" || list?.viewMode === "card" || list?.viewMode === "grid" + ? list.viewMode + : "card", })) .filter((list: StudentListConfig) => list.sql.trim()) : [] @@ -421,7 +429,8 @@ ORDER BY reward_points DESC, score DESC`, { id: makeId(), name: t("board.newList"), - sql: getDefaultSql(), + sql: getDefaultSql(), + viewMode: "card", }, ], } @@ -594,6 +603,19 @@ ORDER BY reward_points DESC, score DESC`, onChange={(presetId) => applyPreset(activeBoard.id, list.id, presetId)} disabled={!canManage} /> +