public-components-skill

📁 mahailiang999-creator/public-components-skill 📅 Jan 29, 2026
11
总安装量
8
周安装量
#28136
全站排名
安装命令
npx skills add https://github.com/mahailiang999-creator/public-components-skill --skill public-components-skill

Agent 安装分布

claude-code 8
opencode 7
mcpjam 5
junie 5
windsurf 5

Skill 文档

Public Components Library Skill

这是一个专为前端开发设计的 AI 技能,专门用于理解和使用 @arim-aisdc/public-components 组件库。该技能涵盖了组件库的所有核心功能、使用模式、主题配置和最佳实践。

When to use

自动触发条件: 当用户提到以下任何关键词时,AI 应自动加载此技能:

核心组件关键词

  • @arim-aisdc/public-components – 组件库包名
  • TableMax – 高级表格组件
  • ConfigProvider – 全局配置提供者
  • PermissionProvider、Restricted、PermissionContext – 权限控制
  • ThemeProvider – 主题提供者
  • CustomForm – 自定义表单
  • QueryFilter – 查询筛选器
  • SchemaForm – Schema驱动表单
  • BaseInfo – 基础信息展示
  • CenterModal – 居中弹窗
  • DrawerCom – 抽屉组件
  • SplitPane、SplitterPane – 分割面板
  • CacheTabs – 缓存标签页
  • DraggableBox – 可拖拽盒子
  • Empty – 空状态组件
  • Icon – 图标组件
  • ColorSelector – 颜色选择器
  • MessageTip、ModalTip – 全局提示
  • MicroComponent – 微组件

Filter 组件系列

  • FilterSelect – 选择器筛选
  • FilterInputNumber – 数值筛选
  • FilterSlider – 滑块筛选
  • FilterSwitch – 开关筛选
  • FilterColor – 颜色筛选
  • FilterRadio – 单选筛选
  • ConditionExpression – 条件表达式

Hooks 关键词

  • useTranslation – 国际化翻译
  • useEventBus – 事件总线
  • usePageCacheState – 页面缓存状态
  • useCenterModalState – 弹窗状态管理
  • useConfig – 配置获取

国际化关键词

  • public_zhCN – 中文语言包
  • public_enUS – 英文语言包
  • public_viVN – 越南文语言包

类型和枚举关键词

  • TableMaxProps、TableMaxColumnType – 表格类型
  • FilterType、InputType – 筛选和输入类型
  • CustomFormItemType – 表单项类型
  • ColumnVisibleConfigType、ColumnPinningConfigType – 列配置类型
  • ProFieldValueTypeEnum、DataSourceTypeEnum – Schema表单类型

手动使用场景: 当用户需要:

  • 使用 @arim-aisdc/public-components 组件库开发前端应用
  • 配置 TableMax 高级表格(分页、筛选、排序、编辑、导出等)
  • 构建复杂表单(CustomForm、QueryFilter、SchemaForm)
  • 设置主题、权限、国际化等全局配置
  • 实现拖拽、分割面板等交互功能
  • 处理权限控制和条件渲染
  • 解决组件库使用中的常见问题
  • 实现表格 CRUD 操作、虚拟滚动、行拖拽等高级功能
  • 自定义主题变量和样式
  • 实现多语言国际化

Instructions

核心组件能力

1. TableMax 高级表格组件

这是组件库的核心组件,基于 TanStack React Table 构建,功能极其强大:

核心特性:

  • 数据管理: 支持前端/后端分页、排序、筛选
  • 交互功能: 行选择、行拖拽、列拖拽、行编辑
  • 展示优化: 虚拟列表、列固定、列宽调整、紧凑模式
  • 数据操作: 导出 Excel、上传数据、刷新、删除
  • 缓存机制: 自动缓存用户的列设置、筛选条件、排序状态

完整 API 参数:

<TableMax
  // 基础配置
  tableId="unique-table-id" // 【必须】用于缓存,必须唯一
  columns={columns} // 【必须】列配置
  datas={data} // 【必须】表格数据
  // 分页配置
  totalCount={1000} // 数据总条数
  pageSize={20} // 每页条数
  skipCount={0} // 数据从第几条开始
  showSizeChanger={true} // 是否显示每页条数选择器
  changePagination={handlePagination} // 分页变化回调
  pageSizeOptions={[10, 20, 50, 100]} // 自定义每页条数选项
  showLessItems={false} // 翻页组件显示较少页码
  // 列配置
  columnVisibleConfig={{ name: true }} // 控制列显示隐藏
  columnPinningConfig={{
    // 列固定配置
    left: ['selection', 'name'],
    right: ['actions'],
  }}
  disableColumnDrag={false} // 禁止列拖拽
  columnResizeMode="onEnd" // 列宽调整时机: "onEnd" | "onChange"
  // 选择功能
  canSelection={true} // 是否支持多选
  defaultSelectedRowIds={[1, 2]} // 默认选中的行ID数组
  defaultSelectedRowId="1" // 默认选中的行ID(单选)
  selectionWithoutChecked={false} // 多选不显示勾选框
  canSelectionUseShift={true} // 是否支持Shift多选
  enableRowSelection={true} // 行是否可选
  selectRowWhenClick={true} // 点击行时是否选中
  onRowCheckboxClick={handleRowCheckboxClick} // 行checkbox点击回调
  onSelectChange={handleSelectChange} // 行选择变化回调
  rowSelectionChange={handleRowSelectionChange} // 行多选变化回调
  selectedRowChange={handleSelectedRowChange} // 【已废弃】行单选回调
  onSelectAllChange={handleSelectAllChange} // 全选回调
  // 拖拽功能
  canRowDrag={true} // 是否支持行拖拽
  disableDragRowIds={[1, 2]} // 禁止拖拽的行ID
  dragBeforeStart={() => true} // 拖拽开始前回调
  dragBeforeEnd={dragValidator} // 拖拽结束前验证
  rowOrderChange={handleRowOrderChange} // 行拖拽顺序变化回调
  // 筛选功能
  canFilter={true} // 是否支持筛选
  defaultEnableFilters={false} // 默认是否开启筛选
  defaultColumnFilters={[]} // 默认筛选条件
  manualFiltering={false} // 是否后端筛选
  onFilteringChange={handleFilteringChange} // 筛选变化回调(推荐)
  manualFilteringChange={manualFilterHandler} // 【已废弃】后端筛选回调
  getColumnFiltersData={getFilterData} // 【已废弃】筛选参数变化回调
  getDynamicFilterOptionsFn={getDynamicOptions} // 动态筛选选项获取函数
  openNullValueFilter={true} // 开启空值过滤
  // 排序功能
  canSorting={true} // 是否支持排序
  enableMultiSort={false} // 是否支持多列排序
  manualSorting={false} // 是否后端排序
  onSortingChange={handleSortingChange} // 排序变化回调(推荐)
  manualSortingChange={manualSortHandler} // 【已废弃】后端排序回调
  // 编辑功能
  canEditting={true} // 是否支持编辑
  canEditRowWhenDClick={false} // 是否双击行进入编辑
  saveEditing={handleSaveEditing} // 保存编辑内容回调
  onEditValueChange={handleEditValueChange} // 编辑值变化回调
  // 展示配置
  rowHeight={42} // 行高度
  defaultHeaderRowNum={1} // 表头默认行数
  defaultCompactMode={false} // 是否默认紧凑模式
  canCompact={true} // 是否显示紧凑模式按钮
  enableVirtualList={false} // 是否开启虚拟列表
  openVirtualColumns={false} // 开启虚拟列
  openVirtualRows={false} // 开启虚拟行
  autoHeight={false} // 高度是否自动占满父级
  tooltip={true} // 单元格是否显示tooltip
  // 数据操作
  canRefresh={true} // 是否显示刷新按钮
  refreshFun={handleRefresh} // 刷新回调
  canUpload={false} // 是否显示上传按钮
  uploadProps={{}} // 上传组件属性
  canDownload={false} // 是否显示下载按钮
  downloadProps={{}} // 下载配置
  canDelete={false} // 是否显示删除按钮
  deleteFun={handleDelete} // 删除回调
  canExport={false} // 是否导出表格数据
  exportConfig={{}} // 导出配置
  request={customRequest} // 自定义请求函数(用于下载)
  // 缓存配置
  version="1.0.0" // 缓存版本
  openMemo={true} // 是否开启memo缓存
  // 总计行
  hasTotalRow={false} // 是否有总计行
  totalDatas={[]} // 总计行数据
  // 序号列
  openIndexColumn={false} // 开启序号列
  // 自定义渲染
  renderOperate={customRender} // 自定义表格顶部所有内容
  tableTitle="表格标题" // 表格顶部左侧标题
  renderOperateLeft={customLeftRender} // 自定义表格顶部左侧内容
  renderOperateRight={customRightRender} // 自定义表格顶部右侧内容
  renderSubComponent={subComponentRender} // 子表渲染组件
  getRowCanExpand={() => true} // 行是否可展开
  // 样式配置
  rowClassName={rowClassGetter} // 行类名函数
  cellClassName={cellClassGetter} // 单元格类名函数
  rowStyle={{}} // 行内样式
  getCellProps={cellPropsGetter} // 单元格属性获取函数
  getHeaderCellProps={headerPropsGetter} // 表头单元格属性获取函数
  // 事件处理
  onRowMouseEnter={handleRowMouseEnter} // 鼠标进入行事件
  onRowMouseLeave={handleRowMouseLeave} // 鼠标离开行事件
  onRowMouseClick={handleRowMouseClick} // 鼠标点击行事件
  onRowMouseDoubleClick={handleRowDblClick} // 鼠标双击行事件
  getContextMenu={getContextMenu} // 获取右键菜单
  onClickContextMenu={handleContextMenuClick} // 点击菜单选项
  getRowHoverTipConfig={getHoverTip} // 获取行hover提示配置
  // 其他配置
  rowKey="id" // 行唯一标识字段
  canSetting={true} // 是否显示设置按钮
  loading={false} // 加载状态
  defaultHighLightRowId="1" // 默认高亮行ID
  // 【已废弃】属性
  theme="light" // 【已废弃】主题
  defaultScrollY={600} // 【已废弃】表格内容区高度
  emptyDataHeight={300} // 【已废弃】空数据高度
/>

完整列配置参数:

const columns: TableMaxColumnType[] = [
  {
    // 基础配置
    id: 'name', // 【必须】列唯一标识
    header: '姓名', // 表头文案或渲染函数
    accessorKey: 'name', // 数据字段名
    accessorFn: (row, index) => row.name, // 自定义取值函数
    size: 120, // 列宽度
    parent: false, // 是否为父列(分组)
    child: false, // 是否为子列
    columns: [], // 子列配置(分组用)

    // 筛选配置
    filterType: FilterType.Input, // 筛选组件类型
    filterOptions: [
      // 筛选可选值
      { label: '选项1', value: '1' },
      { label: '选项2', value: '2' },
    ],
    filterKey: 'customFilterKey', // 自定义筛选值key
    enableColumnFilter: true, // 是否可筛选
    filterFn: customFilterFunction, // 自定义筛选函数
    filterComProps: {
      // 筛选组件属性配置
      showTime: true, // 时间筛选是否显示时分秒
      format: 'YYYY-MM-DD', // 时间格式
      picker: 'date', // 时间选择器类型
      rangePresets: [
        // 时间快捷选项
        { label: '最近7天', value: [dayjs().subtract(7, 'day'), dayjs()] },
      ],
    },
    dynamicFilterOptionsLabelField: 'name', // 动态选项标签字段
    dynamicFilterOptionsValueField: 'id', // 动态选项值字段
    dynamicFilterOptionsLabelFn: option => option.name, // 动态选项标签函数
    getFilterOptionsFn: getFilterOptions, // 动态获取筛选选项
    isFilterOptionsFrontSearch: false, // 筛选选项是否前端搜索

    // 编辑配置
    editable: true, // 是否可编辑
    editComType: InputType.Input, // 编辑组件类型
    editOptions: [
      // 编辑选项(select用)
      { label: '选项1', value: '1' },
      { label: '选项2', value: '2' },
    ],
    getEditOptionsFn: getEditOptions, // 动态获取编辑选项
    editComDisabled: false, // 编辑组件是否禁用
    required: true, // 编辑时是否必填
    unitsChangeFn: value => value, // 单位转换函数

    // 排序配置
    enableSorting: true, // 是否可排序
    sortingFn: customSortFunction, // 自定义排序函数
    sortUndefined: false, // undefined值处理方式
    sortingKey: 'customSortKey', // 自定义排序key

    // 样式配置
    tooltip: true, // 是否显示tooltip
    ellipsis: false, // 【已废弃】是否省略显示
    columnClassName: ['custom-col'], // 列类名
    enableResizing: true, // 是否可调整列宽

    // 元数据配置
    meta: {
      isDate: true, // 是否为日期字段
      dateFormat: 'YYYY-MM-DD', // 日期格式
    },

    // 其他配置
    openMemo: true, // 是否缓存单元格
    disabledExport: false, // 是否禁止导出
    exportValueFormat: value => formatValue(value), // 导出值格式化函数
  },
];

列配置模式:

const columns: TableMaxColumnType[] = [
  {
    id: 'name',
    header: '姓名',
    accessorKey: 'name',
    size: 120,
    enableSorting: true,
    enableColumnFilter: true,
    filterType: FilterType.Input, // 筛选组件类型
    editable: true, // 可编辑
    editComType: InputType.Input, // 编辑组件类型
    tooltip: true, // 显示tooltip
  },
];

2. ConfigProvider 全局配置

提供全局配置能力,是使用组件库的基础:

<ConfigProvider
  config={{
    // 基础配置
    theme: 'dark', // 主题:'light' | 'dark'
    userId: 'user123', // 用户ID,用于缓存隔离
    tableKeyPrefixCls: 'my-app', // 表格缓存前缀,默认'TableMax'
    locale: public_zhCN, // 国际化语言配置
    dateFormat: 'YYYY-MM-DD HH:mm', // 日期格式

    // 主题配置
    themePackageName: 'DefaultThemePackage', // 主题包名称
    variablesJson: {
      // 主题变量配置
      '--global-primary-color': '#1890ff',
      '--table-row-hover-bgc': '#f0f0f0',
    },
    autoSetCssVars: true, // 是否自动设置CSS变量
    root: '#root', // 项目根节点选择器
    getRootContainer: () => document.getElementById('root'), // 获取根容器函数

    // TableMax 全局配置
    tableMax: {
      canExport: true, // 全局导出权限
      pageSizeOptions: [10, 20, 50, 100], // 全局分页选项
      cacheMaxAge: 3600000, // 缓存过期时间(毫秒)
      openMemo: true, // 是否开启memo缓存
      canSelectionUseShift: true, // Shift多选
      openNullValueFilter: true, // 空值过滤
      openIndexColumn: false, // 序号列
    },
    tableMaxNewPagination: false, // 是否使用新翻页组件

    // 自定义配置
    renderEmpty: theme => <CustomEmpty theme={theme} />, // 自定义空状态组件
    request: customRequest, // 自定义请求函数(用于下载等)

    // KeepAlive 配置
    keepAliveActivateKey: 1, // 激活key
    keepAliveUnactivateKey: 2, // 非激活key
  }}
>
  <App />
</ConfigProvider>

默认配置值:

const DEFAULT_CONTEXT = {
  theme: 'light',
  userId: '',
  tableKeyPrefixCls: 'TableMax',
  locale: public_zhCN,
  dateFormat: 'YYYY-MM-DD HH:mm',
};

3. Permission 权限控制

提供细粒度的权限控制能力:

// 权限提供者
<PermissionProvider
  permissions={['user:read', 'user:write', 'admin']}
>
  <App />
</PermissionProvider>

// 权限限制组件
<Restricted
  permissions={['user:write']}              // 需要的权限列表
  fallback={<NoPermission />}               // 无权限时的fallback组件(可选)
>
  <Button>编辑用户</Button>
</Restricted>

// 使用Context直接访问
import { PermissionContext } from '@arim-aisdc/public-components';

const { hasPermission, permissions, currentUser } = useContext(PermissionContext);

// 检查权限
if (hasPermission('user:write')) {
  // 有权限时的操作
}

// 检查多个权限
if (hasPermission(['user:read', 'user:write'])) {
  // 有所有权限时的操作
}

权限类型定义:

type Permission = string;

// 常见权限模式
('user:read'); // 用户读取权限
('user:write'); // 用户写入权限
('user:delete'); // 用户删除权限
('admin:system'); // 系统管理权限
('data:export'); // 数据导出权限

4. Filter 组件系列

提供各种筛选组件,用于表格筛选或表单筛选:

// 选择器筛选
<FilterSelect
  value={value}                                   // 当前值
  onChange={setValue}                               // 值变化回调
  options={[                                      // 选项列表
    { label: '选项1', value: '1' },
    { label: '选项2', value: '2' }
  ]}
  placeholder="请选择"                            // placeholder
  allowClear={true}                               // 是否可清除
  showSearch={true}                               // 是否支持搜索
  mode="multiple"                                 // 多选模式
  maxTagCount={3}                                 // 最多显示tag数量
/>

// 数值范围筛选
<FilterInputNumber
  value={value}                                   // 当前值(单值或数组)
  onChange={setValue}                               // 值变化回调
  min={0}                                        // 最小值
  max={100}                                      // 最大值
  step={1}                                       // 步长
  precision={2}                                   // 保留小数位数
  placeholder="请输入数值"                         // placeholder
  isShowInterval={true}                            // 是否显示为区间输入
  suffix="元"                                     // 后缀单位
/>

// 滑块筛选
<FilterSlider
  value={value}                                   // 当前值
  onChange={setValue}                               // 值变化回调
  range={[0, 100]}                                // 滑块范围
  min={0}                                        // 最小值
  max={100}                                      // 最大值
  step={1}                                       // 步长
  marks={{                                        // 刻度标记
    0: '0%',
    50: '50%',
    100: '100%'
  }}
  tooltipVisible={true}                            // 是否显示tooltip
/>

// 开关筛选
<FilterSwitch
  value={value}                                   // 当前值
  onChange={setValue}                               // 值变化回调
  checkedChildren="开启"                           // 选中时文字
  unCheckedChildren="关闭"                         // 未选中时文字
  disabled={false}                                // 是否禁用
/>

// 颜色筛选
<FilterColor
  value={value}                                   // 当前值
  onChange={setValue}                               // 值变化回调
  showText={true}                                 // 是否显示文字
  allowClear={true}                               // 是否可清除
  presets={[                                      // 预设颜色
    { label: '红色', value: '#ff0000' },
    { label: '蓝色', value: '#0000ff' }
  ]}
/>

// 单选筛选
<FilterRadio
  value={value}                                   // 当前值
  onChange={setValue}                               // 值变化回调
  options={[                                      // 选项列表
    { label: '选项1', value: '1' },
    { label: '选项2', value: '2' }
  ]}
  optionType="button"                              // 选项类型:'default' | 'button'
  disabled={false}                                // 是否禁用
/>

筛选组件通用属性:

// 所有筛选组件都支持的属性
interface FilterComponentProps {
  value: any; // 当前值
  onChange: (value: any) => void; // 值变化回调
  placeholder?: string; // placeholder
  disabled?: boolean; // 是否禁用
  allowClear?: boolean; // 是否可清除
  className?: string; // 自定义类名
  style?: React.CSSProperties; // 自定义样式
}

5. ConditionExpression 条件表达式

用于构建复杂的查询条件,支持多条件组合和多分组:

<ConditionExpression
  value={conditions} // 条件表达式值
  onChange={setConditions} // 值变化回调
  showParameter={true} // 是否显示参数选择框
  parameterOptions={[
    // 参数选项
    { label: '姓名', value: 'name' },
    { label: '年龄', value: 'age' },
    { label: '创建时间', value: 'createTime' },
  ]}
  labelInValue={false} // Select的labelInValue属性
  canFrontFilter={true} // 是否支持前端筛选
  frontendFilterOptionFun={(input, option) => {
    // 自定义前端筛选函数
    return option.label.toLowerCase().includes(input.toLowerCase());
  }}
/>

数据结构定义:

// 条件项类型
type conditionItemType = {
  arguments?: any; // 参数值
  operator?: any; // 操作符:'=', '!=', '>', '>=', '<', '<=', 'Between', 'In'等
  argumentsValue?: any; // 参数具体值
  logicOperator?: string | null; // 逻辑操作符:'and', 'or', null
};

// 条件表达式项类型
type conditionExpressionItemType = {
  conditionItem: conditionItemType[]; // 条件项数组
  logicOperator?: string | null; // 与下一组的连接符:'and', 'or', null
};

// 组件Props类型
type ConditionExpressionPropsType = {
  value?: conditionExpressionItemType[]; // 组件的值
  onChange?: (value: conditionExpressionItemType[]) => void; // 值变化回调
  showParameter?: boolean; // 第一个参数是否展示
  parameterOptions?: { label: any; value: any }[]; // 参数选项
  labelInValue?: boolean; // Select的labelInValue属性
  canFrontFilter?: boolean; // 是否支持前端筛选
  frontendFilterOptionFun?: (input: any, option: any) => boolean; // 前端筛选函数
};

// 默认值结构
const defaultConditions = [
  {
    conditionItem: [
      {
        arguments: null,
        operator: '=',
        argumentsValue: null,
        logicOperator: null,
      },
    ],
    logicOperator: null,
  },
];

操作符说明:

const operatorOptions = [
  { label: '=', value: '=' },
  { label: '!=', value: '!=' },
  { label: '>', value: '>' },
  { label: '>=', value: '>=' },
  { label: '<', value: '<' },
  { label: '<=', value: '<=' },
  { label: '在...之间', value: 'Between' }, // 需要两个值,用逗号分隔
  { label: '不在...之间', value: 'NotBetween' },
  { label: '包含', value: 'In' }, // 需要多个值,用逗号分隔
  { label: '不包含', value: 'NotIn' },
];

// 特殊操作符提示
const tooltipList = ['Between', 'NotBetween', 'In', 'NotIn'];
const tooltipTitle = '请使用逗号隔开多个参数值,如:1,2';

6. ThemeProvider 主题系统

支持明暗主题切换和自定义主题变量:

<ThemeProvider
  theme="dark" // 主题类型:'light' | 'dark'
  variablesConfig={{
    // 自定义主题变量
    '--global-primary-color': '#1890ff',
    '--global-default-text-color': '#ffffff',
    '--table-row-hover-bgc': '#f0f0f0',
    '--global-curd-input-background-color': '#494c5d',
  }}
>
  <App />
</ThemeProvider>

主题类型定义:

type ThemeType = 'light' | 'dark';

type VariablesConfigType = {
  [key: string]: string | number; // CSS变量键值对
};

type ThemeProviderPropsType = {
  theme: ThemeType; // 主题类型
  variablesConfig?: VariablesConfigType; // 自定义主题变量配置
  children?: ReactNode; // 子组件
};

内置主题变量:

/* 主要颜色变量 */
--global-primary-color              /* 全局主色 */
--global-curd-input-background-color /* 输入框背景色 */
--global-desc-text-disabled-color    /* 禁用文字颜色 */
--scrollThumb                       /* 滚动条颜色 */
--rowHoverBackgroundColor           /* 行hover背景色 */

/* 表格颜色变量 */
--tableColor1                      /* 表格字体颜色 */
--tableColor2                      /* 表格边框颜色 */
--tableColor3                      /* 表格边框颜色 */
--selectTableRow                    /* 选中行颜色 */
--tableTooltipBgc                  /* 表格tooltip背景色 */

/* 布局颜色变量 */
--globalColor0 ~ globalColor17    /* 布局颜色系列 */
--splite-line                       /* 分割线颜色 */
--global-tip-text-color            /* 提示文字颜色 */

7. Empty 空状态组件

用于显示空数据状态:

<Empty
  emptyDarkImage={customDarkImage}              // 自定义暗色主题空状态图片
  emptyLightImage={customLightImage}            // 自定义亮色主题空状态图片
  text="暂无数据"                               // 自定义文本
/>

// 使用ConfigProvider的默认空状态
<Empty />

8. SchemaForm Schema驱动表单

基于 ProComponents 的 Schema 驱动表单,支持动态表单配置和多种数据源。

import { SchemaForm, ProFieldValueTypeEnum, DataSourceTypeEnum } from '@arim-aisdc/public-components';

<SchemaForm
  layoutType="ModalForm"                        // 布局类型:'ModalForm' | 'DrawerForm' | 'Form'
  title="创建用户"                              // 表单标题
  open={visible}                                // 是否显示
  onOpenChange={setVisible}                     // 显示状态变化回调
  columns={[                                    // 表单列配置
    {
      title: '用户名',
      dataIndex: 'username',
      valueType: ProFieldValueTypeEnum.Text,    // 字段类型
      formItemProps: {
        rules: [{ required: true, message: '请输入用户名' }],
      },
    },
    {
      title: '角色',
      dataIndex: 'role',
      valueType: ProFieldValueTypeEnum.Select,
      dataSourceType: DataSourceTypeEnum.Remote, // 数据源类型
      request: async () => {                     // 远程数据请求
        const roles = await fetchRoles();
        return roles.map(r => ({ label: r.name, value: r.id }));
      },
    },
  ]}
  onFinish={async (values) => {                 // 提交回调
    await createUser(values);
    return true;
  }}
/>

ProFieldValueTypeEnum 字段类型:

  • Text – 文本输入
  • Select – 下拉选择
  • Radio – 单选
  • Checkbox – 复选
  • DatePicker – 日期选择
  • DateTimePicker – 日期时间选择
  • DateRangePicker – 日期范围
  • TextArea – 文本域
  • Digit – 数字输入
  • Money – 金额输入
  • Password – 密码输入
  • Switch – 开关

DataSourceTypeEnum 数据源类型:

  • Static – 静态数据
  • Remote – 远程数据

9. 其他核心组件

// CenterModal 居中弹窗(支持拖拽和调整大小)
<CenterModal
  visible={visible}                             // 是否显示
  title="标题"                                 // 弹窗标题
  onOk={handleOk}                             // 确认回调
  onCancel={handleCancel}                       // 取消回调
  okText="确认"                                // 确认按钮文字
  cancelText="取消"                             // 取消按钮文字
  width={520}                                 // 弹窗宽度
  maskClosable={false}                         // 点击遮罩是否关闭
  destroyOnClose={true}                        // 关闭时销毁
  draggable={true}                             // 是否可拖拽
  resizable={true}                             // 是否可调整大小
/>

// Drawer 抽屉组件
<DrawerCom
  visible={visible}                             // 是否显示
  title="标题"                                 // 抽屉标题
  placement="right"                            // 位置:'left' | 'right' | 'top' | 'bottom'
  onClose={handleClose}                         // 关闭回调
  width={300}                                 // 宽度(left/right时)
  height={300}                                // 高度(top/bottom时)
  mask={true}                                 // 是否显示遮罩
  maskClosable={false}                        // 点击遮罩是否关闭
/>

// SplitPane 分割面板
<SplitPane
  defaultSize="50%"                            // 默认尺寸
  minSize="10%"                               // 最小尺寸
  maxSize="90%"                               // 最大尺寸
  split="vertical"                             // 分割方向:'vertical' | 'horizontal'
  onDragFinished={handleResize}                // 拖拽完成回调
>
  <SplitPane left>
    左侧内容
  </SplitPane>
  <SplitPane right>
    右侧内容
  </SplitPane>
</SplitPane>

// QueryFilter 查询筛选器
<QueryFilter
  fields={filterFields}                         // 筛选字段配置
  initialValues={initialFilterValues}            // 初始筛选值
  onSubmit={handleSubmit}                       // 提交回调
  onReset={handleReset}                        // 重置回调
  layout="inline"                              // 布局方式
  submitText="查询"                             // 提交按钮文字
  resetText="重置"                             // 重置按钮文字
/>

// DraggableBox 可拖拽盒子
<DraggableBox
  position={{ x: 100, y: 100 }}            // 初始位置
  onDrag={handleDrag}                         // 拖拽中回调
  onDragEnd={handleDragEnd}                   // 拖拽结束回调
  bounds="parent"                              // 边界限制
  disabled={false}                             // 是否禁用拖拽
>
  拖拽内容
</DraggableBox>

// Icon 图标组件
<Icon
  prefix="other"                              // 图标前缀
  name="add"                                  // 图标名称
  size={16}                                   // 图标大小
  color="#1890ff"                               // 图标颜色
  className="custom-icon"                      // 自定义类名
  onClick={handleClick}                        // 点击回调
/>

// CacheTabs 缓存标签页
<CacheTabs
  activeKey={activeKey}                       // 当前激活标签
  onChange={handleChange}                       // 标签变化回调
  items={tabItems}                             // 标签配置
  type="card"                                 // 标签类型
  size="default"                               // 标签大小
  tabBarExtraContent={extraContent}             // 标签栏额外内容
/>

// BaseInfo 基础信息展示
<BaseInfo
  data={infoData}                             // 展示数据
  columns={infoColumns}                        // 信息列配置
  layout="vertical"                            // 布局方式
  labelWidth={120}                             // label宽度
  bordered={true}                              // 是否显示边框
  size="default"                              // 尺寸大小
/>

Hooks 能力

1. useTranslation 国际化翻译

强大的国际化翻译 Hook,支持嵌套键查找、占位符替换和数组翻译辅助函数。

import { useTranslation } from '@arim-aisdc/public-components';

const [t, localeCode] = useTranslation();

// 基础翻译
const title = t('global.title'); // 获取翻译文本

// 嵌套键翻译
const message = t('user.profile.name'); // 支持点号分隔的嵌套键

// 占位符替换
const greeting = t('global.welcome', 'John', '2024'); // "欢迎 {0} 在 {1} 年加入"

// 获取当前语言代码
console.log(localeCode); // 'zh-CN' | 'en-US' | 'vi-VN'

数组翻译辅助函数:

// tA - 通用数组翻译(自定义字段)
const translatedData = t.tA(data, {
  fieldKey: 'type', // 指定哪个字段作为翻译键
  labelKey: 'typeName', // 指定哪个字段保存翻译后的值
  groupPrefix: 'status', // 可选的分组前缀
});

// tT - 翻译 TableMax 列配置
const columns = t.tT([
  { id: 'name', accessorKey: 'name' },
  { id: 'age', accessorKey: 'age' },
]);
// 自动将 header 设置为 t(`apiField.${accessorKey}`)

// tQ - 翻译 QueryFilter 配置
const filterFields = t.tQ([
  { field: 'name', formType: 'text' },
  { field: 'status', formType: 'select' },
]);
// 自动设置 label 和 inputTips

// tF - 翻译 CustomForm 配置
const formFields = t.tF([
  { field: 'name', formType: CustomFormItemType.Text },
  { field: 'email', formType: CustomFormItemType.Text },
]);

// tB - 翻译 BaseInfo 配置
const infoFields = t.tB([
  { field: 'name', value: 'John' },
  { field: 'age', value: 25 },
]);
// 自动将 text 设置为 t(`apiField.${field}`)

自定义语言包:

const customLocales = {
  'zh-CN': {
    myApp: {
      title: '我的应用',
      welcome: '欢迎使用',
    },
  },
  'en-US': {
    myApp: {
      title: 'My App',
      welcome: 'Welcome',
    },
  },
};

const [t] = useTranslation(customLocales);
const title = t('myApp.title'); // 自动合并自定义语言包

2. useEventBus 事件总线

全局事件总线 Hook,用于跨组件通信。

import { useEventBus, events } from '@arim-aisdc/public-components';

// 发送事件(任何地方)
events.emit('data-changed', { id: 1, name: 'test' });
events.emit('user-login', { userId: '123', username: 'john' });

// 监听事件(在组件中)
useEventBus('data-changed', data => {
  console.log('数据变化:', data);
  // 自动在组件卸载时清理监听器
});

// 一次性监听
events.once('init-complete', () => {
  console.log('初始化完成');
});

// 手动移除监听器
const handler = data => console.log(data);
events.on('my-event', handler);
events.off('my-event', handler);

// 调用所有监听器并返回结果数组
const results = events.invoke('calculate', 10, 20);

3. usePageCacheState 页面缓存状态

自动缓存页面状态到 localStorage/sessionStorage,刷新页面后自动恢复。

import { usePageCacheState } from '@arim-aisdc/public-components';

// 基础用法
const [state, setState] = usePageCacheState('page-key', { count: 0 });

// 更新状态(自动缓存)
setState({ count: 1 });

// 支持嵌套字段更新
const [formData, setFormData] = usePageCacheState('form-data', {
  user: { name: '', age: 0 },
  settings: { theme: 'light' },
});

setFormData({ user: { name: 'John' } }); // 深度合并

// 初始化状态(重置为初始值)
const [state, setState, initState] = usePageCacheState('key', initialValue);
initState();

// 清除缓存
const [state, setState, initState, clearState] = usePageCacheState('key', initialValue);
clearState();

缓存特性:

  • 自动缓存到 localStorage
  • 缓存有效期:1小时
  • 支持深度合并嵌套对象
  • 组件卸载时保留缓存
  • 刷新页面自动恢复状态

4. useCenterModalState 弹窗状态管理

简化 CenterModal 状态管理的 Hook。

import { useCenterModalState, CenterModal } from '@arim-aisdc/public-components';

const [modalProps, setModalProps, closeModal] = useCenterModalState();

// 打开弹窗
const openModal = () => {
  setModalProps({
    visible: true,
    title: '编辑用户',
    width: 600,
    // 其他 CenterModal 属性
  });
};

// 关闭弹窗
const handleOk = () => {
  // 处理确认逻辑
  closeModal();
};

// 渲染弹窗
<CenterModal
  {...modalProps}
  onOk={handleOk}
  onCancel={closeModal}
>
  弹窗内容
</CenterModal>

5. useConfig 配置获取

获取 ConfigProvider 提供的全局配置。

import { useConfig } from '@arim-aisdc/public-components';

const config = useConfig();

// 访问配置
const theme = config.theme; // 'light' | 'dark'
const locale = config.locale; // 语言包对象
const userId = config.userId; // 用户ID
const dateFormat = config.dateFormat; // 日期格式
const tableMaxConfig = config.tableMax; // TableMax 全局配置

核心使用模式

1. 表格 CRUD 操作模式

// 1. 定义列配置
const columns = useMemo(
  () => [
    {
      id: 'id',
      header: 'ID',
      accessorKey: 'id',
      size: 80,
    },
    {
      id: 'name',
      header: '姓名',
      accessorKey: 'name',
      editable: true,
      filterType: FilterType.Input,
    },
  ],
  [],
);

// 2. 处理数据变更
const handlePagination = useCallback(({ skipCount, pageSize }) => {
  fetchData({ skipCount, pageSize });
}, []);

const handleSort = useCallback((sortValueArr, sortValueStr, sortedData) => {
  fetchData({ sort: sortValueStr });
}, []);

const handleFilter = useCallback(({ filters, formatFiltersV2 }) => {
  fetchData({ filters: formatFiltersV2 });
}, []);

// 3. 渲染表格
<TableMax
  tableId="user-table"
  columns={columns}
  datas={users}
  totalCount={total}
  pageSize={pageSize}
  skipCount={skipCount}
  canSelection={true}
  canEditting={true}
  canFilter={true}
  manualSorting={true}
  manualFiltering={true}
  changePagination={handlePagination}
  onSortingChange={handleSort}
  onFilteringChange={handleFilter}
/>;

2. CustomForm 表单配置模式

import { CustomForm, CustomFormItemType, CustomSearchFieldType } from '@arim-aisdc/public-components';

const formFields: CustomSearchFieldType[] = [
  {
    field: 'name', // 【必须】字段名
    label: '姓名', // 字段标签
    formType: CustomFormItemType.Text, // 表单类型
    defaultValue: '', // 默认值
    inputTips: '请输入姓名', // placeholder
    required: true, // 是否必填
    maxLength: 50, // 最大长度(文本域)
    span: 8, // 栅格占位格数
    tooltip: '姓名用于用户标识', // tooltip提示
  },
  {
    field: 'status',
    label: '状态',
    formType: CustomFormItemType.Select,
    defaultValue: 'active',
    setting: [
      // 下拉选项配置
      { label: '启用', value: 'active' },
      { label: '禁用', value: 'inactive' },
    ],
    showSearch: true, // 是否支持搜索
    mode: 'multiple', // 多选模式
    maxTagCount: 3, // 最多显示tag数量
    required: true,
  },
  {
    field: 'age',
    label: '年龄',
    formType: CustomFormItemType.Number,
    defaultValue: 18,
    min: 0, // 最小值
    max: 120, // 最大值
    step: 1, // 步长
    precision: 0, // 保留小数位数
    unit: '岁', // 单位
    required: true,
  },
  {
    field: 'createTime',
    label: '创建时间',
    formType: CustomFormItemType.DateTime,
    defaultValue: null,
    picker: 'date', // 时间选择器类型
    showTime: true, // 是否显示时间
    format: 'YYYY-MM-DD HH:mm:ss', // 显示格式
    allowClear: true, // 是否可清除
    disabledDate: current => {
      // 禁用日期
      return current && current > dayjs().endOfDay();
    },
  },
  {
    field: 'description',
    label: '描述',
    formType: CustomFormItemType.TextArea,
    defaultValue: '',
    rows: 4, // 文本域行数
    maxLength: 500,
    isShowToolTip: true, // 是否显示tooltip
  },
  {
    field: 'condition',
    label: '条件表达式',
    formType: CustomFormItemType.ConditionExpression,
    showParameter: true, // 是否显示参数选择框
    parameterOptions: [
      // 参数选项
      { label: '姓名', value: 'name' },
      { label: '年龄', value: 'age' },
    ],
    canFrontFilter: true,
  },
  {
    field: 'avatar',
    label: '头像',
    formType: CustomFormItemType.UploadImg,
    defaultValue: '',
    baseUrl: '/api/upload', // 上传地址
    token: 'your-upload-token', // 上传token
    method: 'POST', // 上传方法
  },
];

<CustomForm
  data={formFields} // 【必须】表单字段配置
  initialValues={initialData} // 初始值
  handleSubmit={handleSubmit} // 【必须】提交回调
  handleCancel={handleCancel} // 取消回调
  layout="horizontal" // 布局方式:'horizontal' | 'inline' | 'vertical'
  labelCol="120px" // label宽度
  span={24} // 栅格配置
  showButton={true} // 是否显示按钮
  isOkText="提交" // 确认按钮文字
  cancelText="取消" // 取消按钮文字
  submitLoading={false} // 提交loading状态
  labelAlign="right" // label对齐方式
  btnSpan={24} // 按钮栅格占位
  usage="submit" // 用途:'filter' | 'submit'
/>;

表单类型枚举:

enum CustomFormItemType {
  Text = 'text', // 文本输入
  TextArea = 'textArea', // 文本域
  Number = 'number', // 数字输入
  Switch = 'switch', // 开关
  Select = 'select', // 选择器
  Cascader = 'cascader', // 级联选择
  RemoteCascader = 'remoteCascader', // 远程级联选择
  DateTime = 'datetime', // 日期时间
  DateRang = 'daterang', // 日期范围
  Interval = 'interval', // 区间输入
  Radio = 'radio', // 单选
  StartEnd = 'start-end', // 起止输入
  AutoComplete = 'autoComplete', // 自动完成
  MinMax = 'min-max', // 最小最大值
  CheckBox = 'checkbox', // 复选框
  Color = 'color', // 颜色选择
  ConditionExpression = 'conditionExpression', // 条件表达式
  RemoteSelect = 'remoteSelect', // 远程选择
  UploadImg = 'uploadImg', // 图片上传
}

3. 主题配置模式

// 在应用入口配置主题
const App = () => {
  return (
    <ConfigProvider
      config={{
        theme: 'dark',
        userId: getCurrentUserId(),
        variablesJson: {
          '--global-primary-color': '#1890ff',
          '--table-row-hover-bgc': '#1f1f1f',
        },
      }}
    >
      <ThemeProvider theme="dark">
        <Router>
          <Routes>
            <Route path="/" element={<HomePage />} />
          </Routes>
        </Router>
      </ThemeProvider>
    </ConfigProvider>
  );
};

最佳实践指导

1. 性能优化

  • 使用 useMemo 缓存列配置
  • 使用 useCallback 缓存事件处理函数
  • 大数据量时开启虚拟列表 enableVirtualList={true}
  • 合理设置缓存时间 cacheMaxAge

2. 缓存策略

  • 每个表格必须设置唯一的 tableId
  • 通过 ConfigProvider 设置用户 ID 实现缓存隔离
  • 使用 version 参数控制缓存版本

3. 国际化配置

// 支持的语言
import {
  public_zhCN, // 中文
  public_enUS, // 英文
  public_viVN, // 越南文
} from '@arim-aisdc/public-components';

4. 错误处理

  • 使用 to 工具函数处理 Promise 错误
  • 表格操作时添加 loading 状态
  • 合理处理空数据状态

常见问题解决方案

1. 表格缓存问题

// 清除特定表格缓存
localStorage.removeItem(`${tableKeyPrefixCls}-${pathname}-${tableId}-${userId}`);

// 升级缓存版本
<TableMax version="1.0.1" />;

2. 主题变量覆盖

// 通过CSS变量覆盖主题
:root {
  --global-primary-color: #custom-color;
  --table-row-hover-bgc: #custom-hover;
}

3. 权限控制集成

// 与后端权限系统集成
const userPermissions = await fetchUserPermissions();
<PermissionProvider permissions={userPermissions}>
  <App />
</PermissionProvider>;

技术栈兼容性

  • React: 17.0.1+
  • Ant Design: 5.27.3+
  • TypeScript: 支持,但 strict 模式关闭
  • 构建工具: Father (打包) + Dumi (文档)
  • 样式: Less + CSS 变量

工具函数

组件库提供了一些实用的工具函数:

import { getTextWidth, to, judgeHasPermission } from '@arim-aisdc/public-components';

// 1. getTextWidth - 计算文本宽度
const width = getTextWidth('Hello World', 14); // 返回像素宽度
// 用途:动态计算列宽、文本截断判断

// 2. to - Promise 错误处理(Go 风格)
const [error, data] = await to(fetchUserData());
if (error) {
  console.error('请求失败:', error);
  return;
}
console.log('数据:', data);

// 3. judgeHasPermission - 权限数组比较
const hasPermission = judgeHasPermission(
  ['user:read', 'user:write'], // 需要的权限
  ['user:read', 'user:write', 'admin'] // 用户拥有的权限
);
// 返回 true(用户拥有所有需要的权限)

重要提醒

AI 助手使用指南:

  1. 自动触发检测 – 当检测到上述关键词时,立即加载此技能
  2. 优先使用本技能 – 优先遵循本技能的 API 模式和最佳实践
  3. 缓存唯一性 – 确保总是提醒用户为 TableMax 提供唯一的 tableId
  4. 全局配置 – 确保总是检查 ConfigProvider 的正确配置
  5. 性能建议 – 根据使用场景主动提供性能优化建议
  6. 类型安全 – 使用正确的类型定义(TableMaxProps、TableMaxColumnType、CustomFormItemType 等)
  7. 国际化支持 – 优先使用 useTranslation 的辅助函数(tT、tQ、tF、tB)进行配置翻译
  8. 错误处理 – 推荐使用 to() 工具函数进行 Promise 错误处理

开发者使用提醒:

  1. TableMax 必须配置:

    • 总是为 TableMax 组件提供唯一的 tableId
    • 根据数据量选择是否开启虚拟滚动(enableVirtualList)
    • 后端分页时设置 manualSorting 和 manualFiltering 为 true
  2. 全局配置最佳实践:

    • 在应用根组件配置 ConfigProvider
    • 设置 userId 以实现用户级缓存隔离
    • 配置 tableKeyPrefixCls 避免缓存冲突
    • 使用 ThemeProvider 实现主题切换
  3. 性能优化策略:

    • 使用 useMemo 缓存列配置
    • 使用 useCallback 缓存事件处理函数
    • 大数据量(>1000行)开启虚拟列表
    • 合理设置 cacheMaxAge 控制缓存时间
  4. 权限控制集成:

    • 使用 PermissionProvider 包裹应用根组件
    • 使用 Restricted 组件进行条件渲染
    • 使用 judgeHasPermission 工具函数进行权限判断
  5. 国际化配置:

    • 在 ConfigProvider 中配置 locale
    • 使用 useTranslation 的辅助函数简化配置翻译
    • 支持自定义语言包扩展

常见问题快速解决:

  1. 表格缓存问题:清除 localStorage 中的表格缓存或升级 version
  2. 主题不生效:检查 ConfigProvider 的 autoSetCssVars 是否为 true
  3. 权限不生效:确保 PermissionProvider 包裹了需要权限控制的组件
  4. 国际化不生效:检查 ConfigProvider 的 locale 配置是否正确
  5. 虚拟滚动问题:确保设置了正确的 rowHeight

技能版本信息:

  • 组件库版本:@arim-aisdc/public-components v2.3.77
  • 技能创建时间:2026-01-29
  • 技能维护:此技能应随组件库版本更新而更新
  • 最后更新:2026-01-29

组件库核心依赖:

  • React: >=17.0.1
  • Ant Design: ^5.27.3
  • @tanstack/react-table: ^8.9.1(TableMax 核心)
  • @tanstack/react-virtual: ^3.13.12(虚拟滚动)
  • dayjs: ^1.11.11(日期处理)
  • react-dnd: ^16.0.1(拖拽功能)
  • xlsx: ^0.18.5(Excel 导出)

这个技能将帮助 AI 模型更好地理解和使用这个组件库,提供准确、高效的前端开发解决方案。