Skip to content
API 风格:

Индикатор выполнения ​

LhProgress показывает ход выполнения задачи или степень заполнения; поддерживает линейную и круглую формы, настраиваемые цвет и текст.

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

Линейный индикатор
60%
vue
<script setup lang="ts">
</script>

<template>
  <LhProgress :percentage="60" />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhProgress :percentage="60" />
</template>

Состояния ​

normal / success / warning / exception, при достижении 100 автоматически success
100%
80%
40%
vue
<script setup lang="ts">
</script>

<template>
  <div style="display: flex; flex-direction: column; gap: 12px">
    <LhProgress :percentage="100" />
    <LhProgress :percentage="80" status="warning" />
    <LhProgress :percentage="40" status="exception" />
  </div>
</template>
vue
<script>
export default {}
</script>

<template>
  <div style="display: flex; flex-direction: column; gap: 12px">
    <LhProgress :percentage="100" />
    <LhProgress :percentage="80" status="warning" />
    <LhProgress :percentage="40" status="exception" />
  </div>
</template>

Пользовательские цвет и текст ​

color принимает строку или функцию, format задаёт текст
55%
70 баллов
vue
<script setup lang="ts">
</script>

<template>
  <div style="display: flex; flex-direction: column; gap: 12px">
    <LhProgress :percentage="55" color="#B8860B" />
    <LhProgress
      :percentage="70"
      :color="(p: number) => `hsl(${p * 1.2}, 60%, 45%)`"
      :format="(p: number) => `${p} баллов`"
    />
  </div>
</template>
vue
<script>
export default {}
</script>

<template>
  <div style="display: flex; flex-direction: column; gap: 12px">
    <LhProgress :percentage="55" color="#B8860B" />
    <LhProgress
      :percentage="70"
      :color="(p: number) => `hsl(${p * 1.2}, 60%, 45%)`"
      :format="(p: number) => `${p} баллов`"
    />
  </div>
</template>

Круглый индикатор ​

type равен circle
75%
100%
vue
<script setup lang="ts">
</script>

<template>
  <div style="display: flex; align-items: center; gap: 24px">
    <LhProgress type="circle" :percentage="75" />
    <LhProgress type="circle" :percentage="100" :width="100" :stroke-width="8" />
  </div>
</template>
vue
<script>
export default {}
</script>

<template>
  <div style="display: flex; align-items: center; gap: 24px">
    <LhProgress type="circle" :percentage="75" />
    <LhProgress type="circle" :percentage="100" :width="100" :stroke-width="8" />
  </div>
</template>

Без текста ​

showText равен false
vue
<script setup lang="ts">
</script>

<template>
  <LhProgress :percentage="45" :show-text="false" />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhProgress :percentage="45" :show-text="false" />
</template>

API ​

Props ​

СвойствоОписаниеТипПо умолчанию
percentageПроцент выполнения; при выходе за [0, 100] значение автоматически клампитсяnumber0
typeФорма"line" | "circle"'line'
statusСостояние; при normal и достижении 100 автоматически становится success"normal" | "success" | "warning" | "exception"'normal'
colorЦвет индикатора: строка или функция, возвращающая цвет по процентуstring | ((percentage: number) => string)—
strokeWidthТолщина линии, px (для line — высота, для circle — толщина обводки)number6
widthШирина полотна в круглом режиме, pxnumber126
showTextПоказывать ли текстbooleantrue
formatПользовательское форматирование текста(percentage: number) => string—
sxСвойства быстрой разметки sxLhSxProps—

Slots ​

СлотОписаниеОбласть видимости
textПользовательское текстовое содержимое{ percentage }

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

  • Корневой элемент имеет role="progressbar" и aria-valuemin / aria-valuemax / aria-valuenow в соответствии с паттерном progressbar из WAI-ARIA
  • aria-valuetext синхронизирован с видимым текстом: по умолчанию это проценты, а при переданном format объявляется отформатированный текст (например, «42 баллов»)
  • Клампленное значение попадает в aria-valuenow, объявлений выхода за границы не бывает

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

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

LhProgressProps
ts
export interface LhProgressProps {
  /** Процент выполнения 0-100 (при выходе за границы значение автоматически клампится) */
  percentage: number
  type?: LhProgressType
  status?: LhProgressStatus
  /** Цвет индикатора: строка или функция, возвращающая цвет по проценту */
  color?: string | ((percentage: number) => string)
  /** Толщина линии, px (для line — высота, для circle — толщина обводки) */
  strokeWidth?: number
  /** Ширина полотна в круглом режиме, px */
  width?: number
  showText?: boolean
  /** Пользовательское форматирование текста */
  format?: (percentage: number) => string
  /** Свойства быстрой разметки sx */
  sx?: LhSxProps
}
LhProgressType (из @lh-ui/share/core/progress)
ts
export type LhProgressType = 'line' | 'circle'
LhProgressStatus (из @lh-ui/share/core/progress)
ts
export type LhProgressStatus = 'normal' | 'success' | 'warning' | 'exception'

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