Список сущностей с пагинацией

Рендерит постраничный список сущностей Bitrix24 с компонентами B24UI и SDK-действием callList.
Нужные scope: crm, user_brief.

Этот рецепт собирает типичную «страницу списка» — карточку с сортируемой таблицей, пагинацией и пустым состоянием — используя компоненты B24UI и actions.v2.callList.make().

Используемые компоненты

  • B24Card — контейнер страницы с header / body / footer.
  • B24Table — адаптивная таблица данных.
  • B24Pagination — навигация по страницам.
  • B24Empty — пустое / ошибочное состояние.
  • B24Button — действия.
  • B24Skeleton — плейсхолдер загрузки.

Набросок

import { initializeB24Frame, EnumCrmEntityTypeId, type B24Frame } from '@bitrix24/b24jssdk'

type Company = { id: number, title: string, createdTime: string }

let $b24: B24Frame
const pageSize = 50
let page = 1

async function fetchPage(currentPage: number): Promise<{ items: Company[], total: number }> {
  const response = await $b24.actions.v2.callList.make<Company>({
    method: 'crm.item.list',
    params: {
      entityTypeId: EnumCrmEntityTypeId.company,
      filter: { '>ID': 0 },
      select: ['id', 'title', 'createdTime']
    },
    idKey: 'id',
    requestId: `companies-page-${currentPage}`
  })

  if (!response.isSuccess) {
    throw new Error(response.getErrorMessages().join('; '))
  }

  const items = response.getData() ?? []
  const total = items.length

  const offset = (currentPage - 1) * pageSize
  return { items: items.slice(offset, offset + pageSize), total }
}

async function init() {
  $b24 = await initializeB24Frame()
  const { items, total } = await fetchPage(page)
  // рендер <B24Table :items="items" /> и <B24Pagination :total="total" :page-size="pageSize" />
}

init().catch(console.error)
callList пагинирует, сортируя по idKey по возрастанию. Не передавайте пользовательский params.order — он может сломать пагинацию, создав пропуски. Сортируйте на клиенте после загрузки данных.

Полный исходник

Полная реализация на Vue + B24UI лежит в bitrix24/b24sdk-examples в демо entity-list.