Skip to content
API 风格:

Перенос ​

Список из двух панелей с перемещением отмеченных элементов; разбиение данных и логика перемещения выполнены в слое core неизменяемым образом. Обе панели — role="listbox" (паттерн listbox из APG).

Базовое использование ​

Базовое использование
1 / 3
  • Первый
2 / 3
  • Второй
  • Третий
vue
<script setup>
import { ref } from 'vue'
const source = ref(['a'])
const items = [
  { key: 'a', label: 'Первый' },
  { key: 'b', label: 'Второй' },
  { key: 'c', label: 'Третий', disabled: true },
]
</script>

<template>
  <LhTransfer :data="items" v-model="source" />
</template>
vue
<script>
export default {
  data() {
    return {
      source: ['a'],
      items: [
        { key: 'a', label: 'Первый' },
        { key: 'b', label: 'Второй' },
        { key: 'c', label: 'Третий', disabled: true },
      ],
    }
  },
}
</script>

<template>
  <LhTransfer :data="items" v-model="source" />
</template>

Отключение ​

disabled отключает весь перенос.

Отключённый перенос
1 / 3
  • Первый
2 / 3
  • Второй
  • Третий
vue
<script setup lang="ts">
import { ref } from 'vue'

const source = ref(['a'])
const items = [
  { key: 'a', label: 'Первый' },
  { key: 'b', label: 'Второй' },
  { key: 'c', label: 'Третий', disabled: true },
]
</script>

<template>
  <LhTransfer :data="items" v-model="source" disabled />
</template>
vue
<script>
export default {
  data() {
    return {
      source: ['a'],
      items: [
        { key: 'a', label: 'Первый' },
        { key: 'b', label: 'Второй' },
        { key: 'c', label: 'Третий', disabled: true },
      ],
    }
  },
}
</script>

<template>
  <LhTransfer :data="items" v-model="source" disabled />
</template>

API ​

LhTransfer Props ​

СвойствоОписаниеТипЗначение по умолчанию
dataполный массив данных[LhTransferItem](#type-LhTransferItem)[]—
modelValueсписок ключей левой (исходной) панели (управляемый v-model)(string | number)[]() => []
disabledотключеноbooleanfalse
sxсвойства быстрой раскладки sxLhSxProps—

Events ​

СобытиеОписаниеКолбэк
update:modelValueвызывается при изменении списка ключей правой (целевой) панели, использовать совместно с v-model(keys: Array<string | number>)
changeвызывается после завершения перемещения элементов(keys: Array<string | number>, direction: 'left-to-right' | 'right-to-left')

LhTransferItem ​

ПолеОписаниеТип
keyуникальный ключstring | number
labelотображаемый текстstring
disabledотключено (нельзя переместить)boolean

Доступность ​

  • Обе панели — role="listbox" + aria-multiselectable; элементы — role="option" + aria-selected / aria-disabled
  • Кнопки перемещения — настоящие <button> с названиями (переместить влево / переместить вправо); выбор всех — нативный checkbox с настоящим состоянием indeterminate
  • У каждой панели собственное поле поиска с aria-label; отключённые элементы блокируются на всех уровнях (отметка, выбор всех, перемещение)

Определения типов ​

Ниже приведены структуры типов TypeScript, экспортируемые этим компонентом (автоматически извлечены из packages/components/transfer/src/types.ts и исходников @lh-ui/share/core/*; раскройте каждый пункт, чтобы увидеть полное определение; описания свойств — в таблице Props выше):

LhTransferProps
ts
export interface LhTransferProps {
  /** полный массив данных */
  data: LhTransferItem[]
  /** список ключей левой (исходной) панели (управляемый v-model) */
  modelValue?: Array<string | number>
  /** отключено */
  disabled?: boolean
  /** sx: свойства быстрой раскладки */
  sx?: LhSxProps
}
LhTransferSide (из @lh-ui/share/core/transfer)
ts
/** сторона панели */
export type LhTransferSide = 'left' | 'right'
LhTransferItem (из @lh-ui/share/core/transfer)
ts
/** элемент данных переноса */
export interface LhTransferItem {
  /** уникальный ключ */
  key: string | number
  /** отображаемый текст */
  label: string
  /** отключено (нельзя переместить) */
  disabled?: boolean
}

Красота традиций — основа кода