Skip to main content

数据展示

把数据画出来:表格、列表、树、卡片、统计卡、进度、时间轴、标签等。

ICETable

表格:列定义(宽度 / 对齐 / 排序 / 自定义单元格)+ 行选择 + 分页 + 空态 + 悬停/斑马纹。

  • 点表头排序:升 → 降 → 恢复,sorter 可为布尔或自定义比较函数;
  • 行选择 rowSelection: 'none' | 'single'(默认)| 'multiple':多选时最左侧多出 40px 选择列(表头全选 + 每行复选框),getSelectedRows() / selectAll() / clearSelection() 配合批量操作;选择变化触发 selectionchangeonSelectionChange
  • pagination: { pageSize, page, showTotal, onChange }:只渲染当前页并挂出 ICEPagination
  • 没有数据时渲染 ICEEmpty 空态(不会留一片空白)。

源码:src/components/ICETable.ts

方法

方法返回说明
setData(data: ICETableRow[])this
getTotalRows()number全量行数(排序后、分页前的总数)。
getPageCount()number总页数;不分页时为 1。
getPage()number
getPageSize()number
setPage(page: number)this换页:夹取到 [1, pageCount],重新渲染并回调。
setPageSize(pageSize: number)this
getPaginationNode()ICEPagination | null分页器节点(不分页 / 空数据时为 null)。
getRows()ICETableRow[]当前渲染顺序的数据(排序后)。
getSortState()ICETableSortState | null
getFilterState()ICETableFilterState当前筛选条件(只包含真的在筛的列)。
setFilter(key: string, values: string[], options: { silent?: boolean })this设置某列的筛选取值(空数组 = 该列不筛)。
clearFilters()this清空全部列筛选。
getFilteredRows()ICETableRow[]筛选后的行(原始顺序,不含排序),用于断言与导出。
getFilterNode(key: string)any表头漏斗节点(该列没声明 filters 时为 null)。
isFilterOpen()boolean
toggleFilter(key: string)this
openFilter(key: string)this
closeFilter()this
getFilterOptionNode(key: string, value: string)any候选节点(测试与 e2e 用)。
getFilterPanel()any
getFilterPanelLayout(){ anchorLeft: number; anchorTop: number; panel: { width: number; height: number } } | null面板与锚点列的位置关系(几何审计 / 测试用)。
isEditing()boolean
getEditingCell(){ rowIndex: number; key: string } | null
getEditNode()any盖在该格子上的输入框(测试 / e2e 用)。
getEditError()string | null上一次提交校验失败的原因(通过 / 未编辑时为 null)。
startEdit(rowIndex: number, key: string)this进入编辑态:在这一格上盖一个输入框(表格本身仍是那套渲染,不整体切换)。
commitEdit()boolean提交:写回行数据 + 回调(值没变就只是退出编辑态)。
cancelEdit()boolean
getEditErrorNode()any
getSummaryNode()any
getSummaryText(key: string)string
getExpandedRowKeys()string[]展开中的行 key(按展开顺序)。
isRowExpanded(key: string | ICETableRow)boolean
expandRow(key: string | ICETableRow, options: { silent?: boolean })this
collapseRow(key: string | ICETableRow, options: { silent?: boolean })this
toggleExpand(key: string | ICETableRow)this
getExpandToggleNode(key: string | ICETableRow)any行首的展开三角(该行不可展开 / 没渲染时为 null)。
getExpandedRowNode(key: string | ICETableRow)any展开区节点(该行没展开 / 不在当前页时为 null)。
getRowNode(index: number)any当前页第 index 行的行面板(测试与 e2e 断言版式用)。
getHeaderLabel(key: string)string表头文案(排序中的列带 ▲/▼ 指示)。
toggleSort(key: string)this点表头:升序 → 降序 → 恢复原始顺序。
sortBy(key: string, order: 'asc' | 'desc' | null)this显式设置排序(order: null 恢复原始顺序)。
getTreeExpandedKeys()string[]
isTreeRowExpanded(key: string)boolean
isTreeParent(key: string)boolean
toggleRowExpanded(key: string)this
setTreeExpandedKeys(keys: string[])this
getRowDepth(key: string)number
getRowIndent(key: string)number首列的缩进像素(树形层级 × 16)。
getRowTreeToggle(key: string)any父行首列的 ▸/▾ 三角(叶子行是 null)。
getSelectedRowKeys()string[]已选行的 key(树形数据下含被级联选中的后代)。
isTreeRowSelected(key: string)boolean
setTreeRowSelected(key: string, selected: boolean)this设置某一行的选中态(树形级联)。
moveTreeRow(dragKey: string, targetKey: string, position: 'before' | 'inside' | 'after')boolean树形数据的行拖拽:把 dragKey 那一行连同它的后代挪到目标位置。
getSelectionHintText()string
getSelectionHintNode()any
setSelectedRow(index: number)this
getSelectedIndex()number
getSelectionMode()ICETableSelectionMode
getSelectedIndexes()number[]
getSelectedRows()ICETableRow[]选中的行(多选按行序返回)。
setSelectedIndexes(indexes: number[])this批量设置选中行(多选模式用;单选模式只认第一个)。
selectAll()this
clearSelection()this
getSelectionNode(index: number)ICECheckBox | null
getHeaderCheckbox()ICECheckBox | null
getColumnWidths()Record<string, number>当前各列实际宽度(按列 key 给,方便断言与持久化)。
getColumnState()ICETableColumnState导出列版式(列宽 + 列顺序)。
getColumnOrder()string[]
getColumnDropIndicatorBox()any列头拖拽的落点指示线位置(没在拖 / 拖回原列时为 null)。
setColumnOrder(keys: string[])this按 key 列表重排(列表里没提到的列接在后面,新增列不会丢)。
moveColumn(from: number, to: number)this
setColumnState(state: Partial<ICETableColumnState> | null | undefined)this按版式还原:未知 key 忽略、缺的列保持原样;宽度会按 minWidth 夹取(脏数据也压不没列)。
setColumnWidth(key: string, width: number)boolean手动设置某列宽度(拖拽缩列走的就是它):宽度按 minWidth 夹取,改完重排整张表。
isResizable()boolean
isResizing()boolean
isVirtual()boolean
isScrollable()boolean
getRowRange(){ start: number; end: number; count: number }当前可视行窗口(``start, end)`,虚拟模式专用;普通模式返回整段)。
getRenderedRowCount()number真正建出来的行数(虚拟模式下的节点数上界,QA 拿它守「不会全量渲染」)。
getScroll(){ x: number; y: number }
getContentHeight()number内容总高度(虚拟模式下 = 行数 × 行高)。
getFrozenWidth()number固定列的总宽度(没有固定列就是 0)。
setScrollTop(y: number)this
setScrollLeft(x: number)this
scrollToRow(index: number)this把某一行滚进视口(贴顶)。
isRowDraggable()boolean
isRowDragging()boolean
getDropTarget()ICEDropTarget | null当前落点(拖拽中才有值;QA 用它断言指示线跟手)。
moveRow(from: number, target: ICEDropTarget)boolean把第 from 行移到落点处(拖拽松手时调用;也可以直接调它做「上移/下移」按钮)。

ICEList

列表(Swing JList 的最小版)。

  • 选择逻辑在 ICESelectionModel 里(single 替换 / multiple 切换),组件只负责渲染与交互;
  • 内容高于可视高度时自动套一层 ICEScrollPane(复用 A2 的滚动底座与子树裁剪);
  • 交互:点击行选中(disabled 行忽略);焦点在列表上时 ↑/↓ 移动激活行(跳过 disabled)、 Enter/Space 选中激活行。 行由 painter 画(2026-09-15,Swing 的 JList + ListCellRenderer 位):行不再是子节点, 点击用几何反查行下标(__indexAtPoint)。程序式点击/断言用 clickRow(key)(旧的 getRowNode(key).trigger('click') 已删除);行矩形用 getRowBox(key) 查。

源码:[`src/components/ICEList.ts``

构造参数 ICEListOptions

参数类型说明
id?string组件 id(引擎会用它做唯一标识,e2e/调试时可按 id 定位)
itemsICEListItem[]数据项
mode?ICESelectionMode
value?string[]当前值
left?number相对父容器的左边距
top?number相对父容器的上边距
width?number宽度(不传用组件默认值)
height?number高度(不传用组件默认值)
itemHeight?number
onChange?(keys: string[], item?: ICEListItem) => void值变化回调

方法

方法返回说明
getSelectedKeys()string[]
setSelectedKeys(keys: string[])this
getSelectionModel()ICESelectionModel
getActiveIndex()number
clickRow(key: string)this程序式点击某一行(等价于用户点中那一行;disabled 行无效)。
getRowBox(key: string){ left: number; top: number; width: number; height: number } | null某一行的矩形(内容盒坐标系;null = 没有这一行)。几何审计 / e2e 定位用。
getScrollPane()ICEScrollPane | null
getItems()ICEListItem[]
setItems(items: ICEListItem[])this
paintRows(ctx: any, theme: any, origin: [number, number])void画所有行(浏览器里由 content 的 painter 每帧自动调用;单测可直接调它断言行矩形/颜色)。
initEvents()void

ICETree

树(Swing JTree 的最小可用版)。

  • 可见行 = 深度优先遍历、只展开 expandedKeys 里的节点;
  • 每层缩进 16px,有子节点的行显示 ▸ / ▾(点箭头只切换展开,不改选择);
  • 选择走 ICESelectionModel(single / multiple);
  • 键盘:↑/↓ 移动激活行、→ 展开(已展开则进入首个子节点)、← 折叠(叶子则回父节点)、 Enter/Space 选中;
  • 内容超出可视高度时自动套 ICEScrollPane

源码:src/components/ICETree.ts

构造参数 ICETreeOptions

参数类型说明
id?string组件 id(引擎会用它做唯一标识,e2e/调试时可按 id 定位)
nodesICETreeNode[]树节点
mode?ICESelectionMode
value?string[]当前值
expandedKeys?string[]
defaultExpandAll?boolean
left?number相对父容器的左边距
top?number相对父容器的上边距
width?number宽度(不传用组件默认值)
height?number高度(不传用组件默认值)
itemHeight?number
indent?number
onSelect?(keys: string[], node?: ICETreeNode) => void选中回调
onExpand?(expandedKeys: string[]) => void
draggable?boolean开启节点拖拽(按住行拖:上 1/3 插前面、中 1/3 放进去、下 1/3 插后面)
onDrop?(info: { key: string; targetKey: string; position: string; nodes: ICETreeNode[] }) => void拖拽落下后的回调(与 nodedrop 事件同义)
virtualThreshold?number可见节点达到这个数量就只渲染可视窗口(默认 200;传 0 关闭虚拟化)
virtualBuffer?number虚拟窗口上下各多渲染几行(默认 2)

方法

方法返回说明
getExpandedKeys()string[]
getNodes()ICETreeNode[]当前树数据(跨父级移动 / 增删之后拿到的就是最新结构)。
setExpandedKeys(keys: string[])this
expandAll()this
collapseAll()this
getSelectedKeys()string[]
setSelectedKeys(keys: string[])this
getActiveKey()string | null
getRowNode(key: string)ICEWidget | null
getVisibleNodes()ICETreeNode[]
getRowDepth(key: string)number行所在层级(0 = 根层;缩进 = depth × indent)。
getScrollPane()ICEScrollPane | null
isVirtual()boolean
getRenderedRowKeys()string[]当前真的建了行的 key(虚拟时就是那个窗口)。
getScrollTop()number
getRowIndexAt(localY: number)number指针的局部纵坐标 → 全局行号(把滚动偏移加回来;命中计算与拖拽都靠它)。
setScrollTop(y: number)this直接设置滚动位置(会夹到可滚动范围),常用于「滚到某个节点」与测试。
isDraggable()boolean键盘:只有焦点在树上时生效。
isDragging()boolean
getDropTarget(){ index: number; position: 'before' | 'inside' | 'after' } | null
moveNode(dragKey: string, targetKey: string, position: 'before' | 'inside' | 'after')booleandragKey 移到 targetKey 的 before / inside / after。

ICECard

卡片:面板 + 标题,并提供右上角 extra 插槽(放“更多/操作”)。

源码:src/components/ICECard.ts

方法

方法返回说明
setTitle(title: string)this
setExtra(extra: any)this右上角插槽:放操作链接 / 按钮等。
getExtraNode()any
getTitleNode()any

ICEStatCard

统计卡:图标 + 标题 + 数值 + 涨跌趋势,用于仪表盘顶部指标。

源码:src/components/ICEStatCard.ts

方法

方法返回说明
setValue(value: string | number)this
setTitle(title: string)this
setTrend(trend: string)this

ICEStatistic

统计数值:标题 + 大号数字 + 前缀/后缀,支持千分位与精度。 传 countdown(剩余毫秒)时进入倒计时模式:按「N 天 HH:mm:ss」显示剩余时间, 归零触发 finish 事件与 onFinish 回调。

源码:src/components/ICEStatistic.ts

构造参数 ICEStatisticOptions — 统计数值:标题 + 大号数字 + 前缀/后缀,支持千分位与精度。 传 countdown(剩余毫秒)时进入倒计时模式:按「N 天 HH:mm:ss」显示剩余时间, 归零触发 finish 事件与 onFinish 回调。

参数类型说明
id?string组件 id(引擎会用它做唯一标识,e2e/调试时可按 id 定位)
title?string标题
value?number | string当前值
precision?number小数位数,默认 0
groupSeparator?boolean千分位分隔,默认 false
prefix?string
suffix?string
status?'default' | 'primary' | 'success' | 'warning' | 'error' | 'info'数值颜色状态(默认正文色)
countdown?number倒计时剩余毫秒;给了就进入倒计时模式
autoStart?boolean倒计时是否自动开始(默认 true;测试里可关掉,避免挂定时器)
onFinish?() => void倒计时归零回调(与 finish 事件同义)
left?number相对父容器的左边距
top?number相对父容器的上边距
width?number宽度(不传用组件默认值)
height?number高度(不传用组件默认值)
fontSize?number

方法

方法返回说明
getTitleText()string
getValueText()string
setTitle(title: string)this
setValue(value: number | string)this普通模式:改数值(字符串原样显示)。
getValue()number | string
isCountdown()boolean
getRemaining()number
isRunning()boolean
setCountdown(ms: number)this设置剩余毫秒。≤ 0 视为归零:文案变 00:00:00,停止计时并触发完成回调。
start()this开始(或继续)倒计时。
stop()this暂停倒计时(保留剩余时间)。

ICEDescriptions

描述列表:成对的「标签 / 值」,支持单列与多列。 常用于详情页(订单信息、用户资料)。

源码:src/components/ICEDescriptions.ts

构造参数 ICEDescriptionsOptions

参数类型说明
id?string组件 id(引擎会用它做唯一标识,e2e/调试时可按 id 定位)
itemsICEDescriptionsItem[]数据项
column?number
left?number相对父容器的左边距
top?number相对父容器的上边距
width?number宽度(不传用组件默认值)
itemHeight?number
labelWidth?number

方法

方法返回说明
getRowNodes()ICEWidget[]
setItems(items: ICEDescriptionsItem[])this替换数据并重排(列表内容随选中项变化时用)。

ICETimeline

时间线:竖线 + 节点圆点 + 标题/描述/时间。

源码:src/components/ICETimeline.ts

构造参数 ICETimelineOptions

参数类型说明
id?string组件 id(引擎会用它做唯一标识,e2e/调试时可按 id 定位)
itemsICETimelineItem[]数据项
left?number相对父容器的左边距
top?number相对父容器的上边距
width?number宽度(不传用组件默认值)
itemHeight?number

方法

方法返回说明
getItemNodes()ICEWidget[]
getDotColor(index: number)string
setItems(items: ICETimelineItem[])this替换数据并重排(内容随选中项变化时用)。

ICEProgressBar

进度环/进度条。

  • 线形(默认):ICEBoundedRangeModel 驱动填充条宽度;
  • 环形(type: 'circle'):底环 + 进度弧(Path2D 弧线,12 点方向顺时针)+ 居中百分比; size / strokeWidth / showText / format 可配,status: 'success' 走成功色。

源码:src/components/ICEProgressBar.ts

方法

方法返回说明
setValue(value: number)this
getValue()number
isCircle()boolean
getPercent()number归一化进度(0..1)。
getSweepRatio()number进度弧扫过的比例(0..1);线形模式同样返回归一化进度。
getRingNode()any
getTrackRingNode()any
getTextNode()ICELabel | null

ICEImageView

图片视图(基于引擎原语 ICEImage)。 名字带 View 后缀是为了避开引擎自己的 ICEImage(图片原语)——两个包同名不同物, 同时 import 会撞名,所以本库的控件一律叫 ICEImageView

  • 适配模式 fill(拉伸)/ contain(留白)/ cover(裁剪填满,居中);
  • 原始尺寸未知时先按容器盒铺满,图片载入后由引擎的 ImageCache 回调重排;
  • 视口开 clipChildren,cover 溢出的部分被裁掉;
  • 载入失败标记错误态(保留占位底)。

源码:src/components/ICEImageView.ts

方法

方法返回说明
getSrc()string
setSrc(src: string)this
getFit()ICEImageFit
setFit(fit: ICEImageFit)this
isLoaded()boolean
isErrored()boolean
markError()this
setNaturalSize(width: number, height: number)this已知原始尺寸时直接设定(图片 onload 回调 / 单测使用)。
getContentBox()ICEImageContentBox
getViewportNode()ICEWidget | null
getImageNode()EngineImage | null

ICEImagePreview

图片预览:全屏遮罩 + 居中图片 + 底部工具栏。

  • 上一张 / 下一张循环切换(change 事件 + onIndexChange);
  • 缩放(步进 + 上下限)与 90° 旋转,reset() 复位;
  • 关闭途径:工具栏关闭按钮、遮罩点击、Esc;打开期间接管 ←/→/+/− 快捷键;
  • 浮层挂在引擎工具层(复用 ICEOverlayManager),关闭后自动移除。

源码:src/components/ICEImagePreview.ts

构造参数 ICEImagePreviewOptions

参数类型说明
imagesstring[]
index?number初始索引,默认 0
zoomStep?number每次缩放的步进,默认 0.25
minZoom?number缩放下限,默认 0.25
maxZoom?number缩放上限,默认 3
maskClosable?boolean
closeOnEsc?boolean
onIndexChange?(index: number) => void
onClose?(reason: ICEImagePreviewCloseReason) => void关闭回调
manager?ICEOverlayManager浮层管理器(一般不用传,组件会取共享实例)
focusManager?ICEFocusManager

方法

方法返回说明
isOpen()boolean
getIndex()number
getZoom()number
getRotation()number
getMask()ICEPanel | null
getFrame()ICEWidget | null
getImageNode()ICEImageView | null
getToolbarButton(name: ICEPreviewToolbarButton)ICEButton | null
getImages()string[]
open(index?: number)this
close(reason: ICEImagePreviewCloseReason)this
setIndex(index: number)this
next()this
prev()this
zoomIn()this
zoomOut()this
rotateLeft()this
rotateRight()this
reset()this缩放与旋转同时复位。
on(name: string, handler: (evt: any) => void)this
off(name: string, handler: (evt: any) => void)this
trigger(name: string, evt: any, param?: any)this

ICECalendar

日历:月视图 + 日期选择。

  • 标题「YYYY 年 M 月」+ 上/下月切换(回调 onChangeMonth);
  • 6×7 网格:相邻月份补齐的格子弱化显示,点击仍然可选;
  • 选中日期实底高亮,今天带主色描边(today 可注入,便于测试与「业务今天」);
  • 键盘:←/→ 按天、↑/↓ 按周移动选中,PageUp/PageDown 切月。

源码:src/components/ICECalendar.ts

构造参数 ICECalendarOptions — 日历:月视图 + 日期选择。

参数类型说明
weekStart?number一周首日(0=周日 … 6=周六);缺省按 locale 推导(en-US → 周日,zh-CN → 周一),兜底周一
id?string组件 id(引擎会用它做唯一标识,e2e/调试时可按 id 定位)
value?string选中日期 YYYY-MM-DD
month?string当前显示的月份 YYYY-MM,默认取 value 所在月 / 今天所在月
today?string「今天」的日期(不传取系统时间;传了便于测试与业务定制)
width?number宽度(不传用组件默认值)
height?number高度(不传用组件默认值)
left?number相对父容器的左边距
top?number相对父容器的上边距
onSelect?(date: string) => void选中回调
onChangeMonth?(month: string) => void

方法

方法返回说明
getValue()string | null
setValue(value: any, options: { silent?: boolean })this
getFormValue()any
setFormValue(value: any)void
getVisibleMonth()string
setVisibleMonth(month: string, options: { silent?: boolean })this
prevMonth()this
nextMonth()this
getTitleText()string
getWeekdayTexts()string[]
getCellNodes()ICEWidget[]
getCellNode(date: string)ICEWidget | null
getCellBackground(date: string)string
getCellTextColor(date: string)string
isToday(date: string)boolean
selectDate(date: string)this程序式选中(不发事件)。
getPrevButton()ICEWidget | null
getNextButton()ICEWidget | null

ICEAvatar

文字头像:取首字母/汉字,背景色可配,自带描边把相邻头像分开。 装饰(圆底 + 首字)由 painter 画,组件自己只保存文本、宽高与背景色。

源码:src/components/ICEAvatar.ts

方法

方法返回说明
setText(text: string)this
getText()string

ICEAvatarGroup

头像组。

  • 头像横向重叠排布(每个左移 overlap),靠 ICEAvatar 自带的描边把相邻头像分开;
  • 超过 max 个时折叠:只显示前 max 个,末尾补一个 +N 头像;
  • 组件宽度按「最后一个头像的右边缘」算,方便直接放进工具栏/表格单元格。

源码:src/components/ICEAvatarGroup.ts

构造参数 ICEAvatarGroupOptions

参数类型说明
id?string组件 id(引擎会用它做唯一标识,e2e/调试时可按 id 定位)
avatarsICEAvatarGroupItem[]
size?number尺寸
max?number
overlap?number相邻头像的重叠像素;默认 size / 4
left?number相对父容器的左边距
top?number相对父容器的上边距

方法

方法返回说明
getCount()number
getVisibleCount()number
getRestCount()number
getAvatarNodes()ICEAvatar[]
getRestNode()ICEAvatar | null
setAvatars(avatars: ICEAvatarGroupItem[])this

ICETag

标签:默认 Bootstrap 实底(.text-bg-*),variant: 'soft' 切浅底 + 强调文字。

源码:src/components/ICETag.ts

方法

方法返回说明
setText(text: string)this

ICEBadge

徽标:数字/文字胶囊;dot 是红点模式,count 超过阈值自动显示 99+

源码:src/components/ICEBadge.ts

方法

方法返回说明
setText(text: string)this
isDot()boolean是否红点模式(只有圆点、没有文字)。
getText()string

ICECarousel

轮播。

  • 结构:裁剪视口(clipChildren)里一条横向轨道,幻灯片并排;轨道 left = -index * width;
  • goTo / next / prev 切换,loop 控制是否循环;箭头与圆点可点,方向键 ←/→ 也可切;
  • 切换用可注入 frame driver 的补间(duration: 0 时同步落位,便于测试);
  • 自动播放走可注入的调度器(play / pause / isPlaying)。

源码:src/components/ICECarousel.ts

构造参数 ICECarouselOptions

参数类型说明
id?string组件 id(引擎会用它做唯一标识,e2e/调试时可按 id 定位)
slides?ICEWidget[]
left?number相对父容器的左边距
top?number相对父容器的上边距
width?number宽度(不传用组件默认值)
height?number高度(不传用组件默认值)
initialIndex?number
loop?boolean
duration?number切换过渡时长(毫秒);0 = 立即落位
autoplay?number自动播放间隔(毫秒);> 0 时构造后即开始播放
arrows?boolean
dots?boolean
onChange?(index: number) => void值变化回调
driver?ICECarouselFrameDriver
scheduler?ICECarouselScheduler

方法

方法返回说明
getCount()number
getIndex()number
setSlides(slides: ICEWidget[])this
getSlideNode(index: number)ICEWidget | null
getTrackNode()ICEWidget | null
getPrevButton()ICEWidget | null
getNextButton()ICEWidget | null
getDotNode(index: number)ICEWidget | null
isPlaying()boolean
play()this
pause()this
setAutoplay(ms: number)this
goTo(index: number, animate: boolean)this
next()this
prev()this
activate()void

ICECollapse

折叠面板。

  • 每项 = 标题行(▸/▾ + 标题)+ 展开时的内容区;内容支持纯文本或组件工厂;
  • accordion: true 时同时只展开一个;展开/收起会重排并回调 onExpand(keys);
  • 标题行是独立命中区(点标题只切换展开,不触发内容交互)。

源码:src/components/ICECollapse.ts

构造参数 ICECollapseOptions

参数类型说明
id?string组件 id(引擎会用它做唯一标识,e2e/调试时可按 id 定位)
itemsICECollapseItem[]数据项
activeKeys?string[]
accordion?boolean
left?number相对父容器的左边距
top?number相对父容器的上边距
width?number宽度(不传用组件默认值)
headerHeight?number
contentHeight?number
onChange?(keys: string[]) => void值变化回调
onExpand?(keys: string[]) => void

方法

方法返回说明
getActiveKeys()string[]
setActiveKeys(keys: string[])this
getHeaderNode(key: string)ICEWidget | null
getContentNode(key: string)ICEWidget | null
getItemTop(key: string)number

ICEComment

评论:文字头像 + 作者 + 时间 + 正文 + 操作按钮 + 嵌套回复。 布局自上而下:头像在左,右侧依次是「作者 · 时间」「正文」「操作」「回复(缩进)」。 高度按内容自动累加(正文单行 20px,多行请自行用 content 组件工厂)。

源码:src/components/ICEComment.ts

构造参数 ICECommentOptions

参数类型说明
id?string组件 id(引擎会用它做唯一标识,e2e/调试时可按 id 定位)
authorstring
contentstring内容(纯文本,或返回组件的工厂函数)
time?string
avatarText?string文字头像(默认取 author 首字)
avatarColor?string
actions?ICECommentAction[]
onAction?(key: string) => void操作按钮回调
replies?ICECommentOptions[]
left?number相对父容器的左边距
top?number相对父容器的上边距
width?number宽度(不传用组件默认值)
indent?number

方法

方法返回说明
getActionButton(key: string)ICEButton | null
getReplyNodes()ICEComment[]

ICEWatermark

水印:把一段旋转文字平铺在自己的区域上。

  • 用于「内部资料 / 草稿 / 不可外传」这类页面级标记;
  • 不参与交互(interactive: false),不会挡住底下的点击;
  • 裁剪在自己的区域内(clipChildren):边缘瓦片被切掉半截,不会溢出到邻居身上;
  • 瓦片数量 = (⌈width/gapX⌉ + 1) × (⌈height/gapY⌉ + 1)gap 不传时按文字宽度自适应;
  • 颜色默认半透明灰(rgba(0,0,0,0.08)),可用 color / opacity 调整。

源码:src/components/ICEWatermark.ts

构造参数 ICEWatermarkOptions — 水印:把一段旋转文字平铺在自己的区域上。

参数类型说明
id?string组件 id(引擎会用它做唯一标识,e2e/调试时可按 id 定位)
textstring文案
fontSize?number
color?string文字颜色,默认 rgba(0,0,0,0.08)
opacity?number整体不透明度,默认 1(颜色本身已经半透明)
rotate?number旋转角度(度),默认 -22
gapX?number水平间距,默认按文字宽度 + 60 自适应
gapY?number垂直间距,默认 72
left?number相对父容器的左边距
top?number相对父容器的上边距
width?number宽度(不传用组件默认值)
height?number高度(不传用组件默认值)

方法

方法返回说明
getText()string
getTileCount()number
getTileNodes()ICELabel[]
setText(text: string)this
setSize(width: number, height: number)this改尺寸后重排瓦片(数量跟着变)。

ICETileMap

单个格子的绘制样式。

源码:src/components/ICETileMap.ts

构造参数 ICETileMapOptions

参数类型说明
id?string组件 id(引擎用它做唯一标识;e2e/调试时可按 id 定位)
left?number相对父容器的左边距
top?number相对父容器的上边距
rowsnumber行数
colsnumber
cellSize?number每格边长(含间隙),默认 20
gap?number格子之间的间隙,默认 2(均分在格子两边)
cellRadius?number格子圆角默认值,默认 4
width?number整块棋盘的宽高(默认 colscellSize / rowscellSize;给大了就留白,便于居中摆放)
height?number高度(不传用组件默认值)
palette?ICETileMapPalette
pulseColor?string脉冲默认颜色
highlightColor?string高亮默认描边色
labelFontSize?number标签默认字号 / 颜色(格子样式里可以逐项覆盖)
labelColor?string

方法

方法返回说明
getRows()number
getCols()number
getCellSize()number
getGap()number
setSize(rows: number, cols: number, cellSize?: number)this换网格尺寸(行列 / 格子大小一起换),并清空格子数据与高亮。
getCellRect(row: number, col: number){ left: number; top: number; width: number; height: number }格子在组件内的矩形(gap 均分在两边)。
getCellAt(x: number, y: number){ row: number; col: number } | null组件内坐标 → 格子(边界外返回 null;落在间隙里算最近的格子)。
setTiles(tiles: Array<string | number | null> | Array<Array<string | number | null>>)this设置格子数据:一维(长度 = rows*cols)或二维(rows 行);数字会被当成字符串 key。
getTiles()Array<string | null>
setLabels(labels: Array<string | number | null> | Array<Array<string | number | null>>)this设置标签层(和 tiles 一样长度,值可以是任意字符串)。
getLabels()Array<string | null>
setPalette(palette: ICETileMapPalette)this
getPalette()ICETileMapPalette调色板拷贝(改返回值不会影响组件内部)。
resolveCellStyle(key: string | null)ICETileMapCellStyle | null某个 key 对应的样式(未知 key 返回 null = 不绘制)。
setHighlights(highlights: ICETileMapHighlight[])this
getHighlights()ICETileMapHighlight[]
pulse(cells: ICETileMapPulse[], options: { duration?: number; color?: string; driver?: ICEFrameDriver })this闪一下(消行 / 吃到食物):用 tween 把 alpha 从 1 拉到 0,结束后自动清空。
getPulses()ICETileMapPulse[]
getPulseAlpha()number
getPaintCount()number
paintBoard()void自绘整块网格。浏览器里由 doRender() 自动调用;单测可以直接调来数自绘次数。
initEvents()void

ICEVirtualList

当前该渲染的区间:``start, end)`。

源码:[`src/components/ICEVirtualList.ts``

构造参数 ICEVirtualListOptions

参数类型说明
id?string组件 id(引擎用它做唯一标识;e2e/调试时可按 id 定位)
left?number相对父容器的左边距
top?number相对父容器的上边距
width?number宽度(不传用组件默认值)
height?number视口高度(列表本身的尺寸,内容由它决定滚动范围)
itemHeightnumber每行高度(固定行高才谈得上虚拟滚动)
buffer?number上下缓冲条数,默认 2
items?any[]数据项
renderItem?(context: ICEVirtualItemPaintContext) => void画一条:直接往 ctx 上画(不再给节点)。
scrollbar?boolean是否显示滚动条,默认 true

方法

方法返回说明
getItemCount()number
getItemHeight()number
getBuffer()number
getItems()any[]
getContentHeight()number内容总高度(撑开滚动条用)。
getScrollTop()number
getRange()ICEVirtualRange当前窗口(查询前会先同步一次,保证拿到的是最新状态)。
getRenderedCount()number当前窗口会画几条(= getRange().count)。
getScrollPane()ICEScrollPane对外暴露滚动视口(需要挂滚动监听时用)。
setItems(items: any[])this
setScrollTop(scrollTop: number)this
scrollToIndex(index: number)this把某一条滚进视口(贴顶对齐),下标会被夹进合法范围。
paintItems(ctx: any, origin: [number, number])void画当前窗口的每一行(浏览器里由 content 的 painter 每帧自动调用;

ICEKanban

看板:列 + 卡片,卡片可以跨列拖拽(CRM / 项目管理最常见的那块界面)。 结构很直白: ICEKanban ├── column[todo] ← 列标题 + 卡片(等距竖排) ├── column[doing] └── column[done] 拖拽的「落点」复用列表那套:列由指针的 x 决定,列内插入位置由 y 决定 (computeDropTarget 的上下半格语义),真正的数据搬运交给纯函数 moveKanbanCard

源码:src/components/ICEKanban.ts

构造参数 ICEKanbanOptions

参数类型说明
id?string组件 id(引擎用它做唯一标识;e2e/调试时可按 id 定位)
left?number相对父容器的左边距
top?number相对父容器的上边距
width?number宽度(不传用组件默认值)
height?number高度(不传用组件默认值)
columnsICEKanbanColumn[]列定义
columnWidth?number
cardHeight?number
gap?number
draggable?boolean
onCardMove?(info: { cardKey: string; columnKey: string; index: number; columns: ICEKanbanColumn[] }) => void

方法

方法返回说明
getColumns()ICEKanbanColumn[]
getCardNode(key: string)ICEWidget | null
getColumnNode(key: string)ICEWidget | null
isDraggable()boolean
isDragging()boolean
getDropTarget()ICEKanbanDropTarget | null
moveCard(cardKey: string, columnKey: string, index: number)boolean把卡片移到目标列的指定位置;真的动了才返回 true(判定见纯函数 moveKanbanCard)。