134 lines
4.2 KiB
TypeScript
134 lines
4.2 KiB
TypeScript
/**
|
||
* CSS Grid 布局骨架配置
|
||
*
|
||
* 每种布局只定义网格结构(行、列、区域划分),不指定具体模块。
|
||
* 具体模块由后端 bclData 动态决定,通过 position + per-position-index 映射到 grid-area 名。
|
||
*
|
||
* 区域命名规则:{position}-{areaIdx}
|
||
* areaIdx = 按 position 各自从 0 递增编号(非全局 index)
|
||
* 例如 left-0 = 左侧第 1 个模块,right-2 = 右侧第 3 个模块
|
||
*
|
||
* 相同区域名出现多次 = 合并单元格(如某侧只有 1 个模块时撑满多行)
|
||
* "." = 空白区域(透出底图)
|
||
*/
|
||
|
||
export interface GridSkeleton {
|
||
/** CSS grid-template-areas 字符串 */
|
||
gridTemplateAreas: string;
|
||
/** CSS grid-template-columns 字符串 */
|
||
gridTemplateColumns: string;
|
||
/** CSS grid-template-rows 字符串 */
|
||
gridTemplateRows: string;
|
||
}
|
||
|
||
export const LAYOUT_GRID_SKELETONS: Record<string, GridSkeleton> = {
|
||
// 左3右3加底
|
||
layout1: {
|
||
gridTemplateAreas:
|
||
'"left-0 . right-0" "left-1 . right-1" "left-2 bottom-0 right-2"',
|
||
gridTemplateColumns: '440px 1fr 440px',
|
||
gridTemplateRows: '1fr 1fr 1fr'
|
||
},
|
||
//左4右4加底
|
||
layout2: {
|
||
gridTemplateAreas:
|
||
'"left-0 . right-0" "left-1 . right-1" "left-2 . right-2" "left-3 bottom-0 right-3"',
|
||
gridTemplateColumns: '440px 1fr 440px',
|
||
gridTemplateRows: '1fr 1fr 1fr 1fr'
|
||
},
|
||
// 左三右三(无底部)
|
||
layout3: {
|
||
gridTemplateAreas:
|
||
'"left-0 . right-0" "left-1 . right-1" "left-2 . right-2"',
|
||
gridTemplateColumns: '440px 1fr 440px',
|
||
gridTemplateRows: '1fr 1fr 1fr'
|
||
},
|
||
//左4右4无底
|
||
layout4: {
|
||
gridTemplateAreas:
|
||
'"left-0 . right-0" "left-1 . right-1" "left-2 . right-2" "left-3 . right-3"',
|
||
gridTemplateColumns: '440px 1fr 440px',
|
||
gridTemplateRows: '1fr 1fr 1fr 1fr'
|
||
},
|
||
|
||
// 右二(无左侧、无底部)
|
||
layout5: {
|
||
gridTemplateAreas: '". . right-0" ". . right-1"',
|
||
gridTemplateColumns: '440px 1fr 440px',
|
||
gridTemplateRows: '1fr 1fr'
|
||
},
|
||
// 左2右1加底
|
||
layout6: {
|
||
gridTemplateAreas:
|
||
'"left-0 . right-0" "left-1 . right-0" "bottom-0 bottom-0 bottom-0"',
|
||
gridTemplateColumns: '440px 1fr 440px',
|
||
gridTemplateRows: '1fr 1fr 1fr'
|
||
},
|
||
//仅左3
|
||
layout7: {
|
||
gridTemplateAreas: '"left-0 . ." "left-1 . ." "left-2 . ."',
|
||
gridTemplateColumns: '440px 1fr 440px',
|
||
gridTemplateRows: '1fr 1fr 1fr'
|
||
},
|
||
//左2右3加底
|
||
layout8: {
|
||
gridTemplateAreas:
|
||
'"left-0 . right-0" "left-1 . right-1" "bottom-0 bottom-0 right-2"',
|
||
gridTemplateColumns: '440px 1fr 440px',
|
||
gridTemplateRows: '1fr 1fr 1fr'
|
||
},
|
||
//左3加底
|
||
layout9: {
|
||
gridTemplateAreas: '"left-0 . ." "left-1 . ." "left-2 bottom-0 bottom-0"',
|
||
gridTemplateColumns: '440px 1fr 440px',
|
||
gridTemplateRows: '1fr 1fr 1fr'
|
||
},
|
||
|
||
// 左二右二 + 底部(底部撑满全宽)
|
||
layout10: {
|
||
gridTemplateAreas:
|
||
'"left-0 . right-0" "left-1 . right-1" "bottom-0 bottom-0 bottom-0"',
|
||
gridTemplateColumns: '440px 1fr 440px',
|
||
gridTemplateRows: '1fr 1fr 1fr'
|
||
},
|
||
// 左3右1无底
|
||
layout11: {
|
||
gridTemplateAreas: '"left-0 . right-0" "left-1 . right-0" "left-2 . ."',
|
||
gridTemplateColumns: '440px 1fr 440px',
|
||
gridTemplateRows: '1fr 1fr 1fr'
|
||
},
|
||
//右一无底
|
||
layout12: {
|
||
gridTemplateAreas: '". . right-0" ". . right-0" ". . ." ". . ."',
|
||
gridTemplateColumns: '440px 1fr 440px',
|
||
gridTemplateRows: '1fr 1fr 1fr 1fr'
|
||
},
|
||
//右1(2/3高)无底
|
||
layout13: {
|
||
gridTemplateAreas: '". . right-0" ". . right-0" ". . ." ',
|
||
gridTemplateColumns: '440px 1fr 440px',
|
||
gridTemplateRows: '1fr 1fr 1fr '
|
||
},
|
||
//左一右一无底
|
||
layout14: {
|
||
gridTemplateAreas: '". left-0 . right-0" "left-0 . right-0" ". . ."',
|
||
gridTemplateColumns: '440px 1fr 440px',
|
||
gridTemplateRows: '1fr 1fr 1fr'
|
||
},
|
||
//左4右3满底
|
||
layout15: {
|
||
gridTemplateAreas:
|
||
' "left-0 . right-0" "left-1 . right-1" "left-2 . right-2" "left-3 bottom-0 bottom-0"',
|
||
gridTemplateColumns: '440px 1fr 440px',
|
||
gridTemplateRows: '1fr 1fr 1fr'
|
||
},
|
||
//左(2/3+1/3)右3加底
|
||
layout16: {
|
||
gridTemplateAreas:
|
||
'"left-0 . right-0" "left-0 . right-1" "bottom-0 bottom-0 right-2" ',
|
||
gridTemplateColumns: '440px 1fr 440px',
|
||
gridTemplateRows: '1fr 1fr 1fr'
|
||
},
|
||
// TODO: 后续补充其余布局的骨架配置
|
||
};
|