Files
mono/components/context/DESKTOP_CAPITAL_PROJECT_VOTING_SEGMENTS_WIDGET_README.md
T
2026-01-22 18:13:45 +05:00

5.6 KiB

ProjectVotingSegmentsWidget

Виджет для отображения участников голосования по методу Водянова с возможностью распределения голосов и просмотра результатов.

Назначение

Виджет предназначен для:

  • Отображения участников проекта, имеющих право голоса (фильтр has_vote: true)
  • Распределения голосующей суммы между участниками (до завершения голосования)
  • Валидации корректности распределения голосов
  • Отправки голосов через кнопку SubmitVoteButton
  • Просмотра результатов голосования после его завершения

Особенности

Визуальное оформление

Виджет использует ColorCard компоненты в двух строках для отображения информации о голосовании:

Первая строка (3 колонки):

  • Синяя карта: Общая сумма на распределение
  • Фиолетовая карта: Голосующая сумма для распределения (только для участников)
  • Зеленая/оранжевая карта: Статус голосования (зависит от состояния)

Вторая строка (2 колонки, только для участников до завершения):

  • Зеленая карта: Распределенная сумма
  • Красная карта: Остаток для распределения

До завершения голосования

  1. Автоматическая фильтрация: Загружает только сегменты с правом голоса
  2. Проверка участия в голосовании: Показывает поля ввода только участникам голосования
  3. Валидация голосования:
    • Нельзя голосовать за себя
    • Должны быть распределены голоса всем участникам кроме себя
    • Общая сумма должна равняться активной голосующей сумме
  4. Визуальная обратная связь: Показывает распределенную сумму (зеленая карта) и остаток (красная карта) в отдельных колонках
  5. Блокировка после голосования: После отправки голосов виджет переходит в режим readonly
  6. Блокировка разворота: Кнопка expand заблокирована с tooltip подсказкой, нельзя просмотреть голоса других участников до завершения голосования
  7. Сообщение для не участников: Не участники видят сообщение о том, что голосование только для авторов и создателей

После завершения голосования

  1. Отображение результатов: Показывает результаты голосования (voting_bonus) для всех участников
  2. Разблокировка разворота: Кнопка expand становится активной, можно просмотреть детальные голоса каждого участника
  3. Доступность для всех: Результаты видят все пользователи (участники и не участники)

Props

  • projectHash (string) - Хеш проекта для голосования
  • coopname (string) - Наименование кооператива
  • expanded (Record<string, boolean>) - Состояние разворота участников
  • project (IProject) - Объект проекта с данными голосования
  • currentUsername (string) - Имя текущего пользователя

События

  • toggle-expand - Переключение разворота участника
  • segment-click - Клик на строку участника
  • data-loaded - Загружены данные участников

Слоты

  • segment-content - Контент для отображения под строкой участника (например, SegmentVotesWidget)

Определение статуса голосования

Голосование считается завершенным если:

  • Статус проекта равен COMPLETED
  • ИЛИ все участники проголосовали (votes_received === total_voters)

Пример использования

<ProjectVotingSegmentsWidget
  :project-hash="project.project_hash"
  :coopname="info.coopname"
  :expanded="expandedSegments"
  :project="project"
  :current-username="username"
  @toggle-expand="handleSegmentToggleExpand"
  @segment-click="handleSegmentClick"
  @data-loaded="handleSegmentsDataLoaded"
>
  <template #segment-content="{ segment }">
    <SegmentVotesWidget
      :project-hash="project.project_hash"
      :coopname="info.coopname"
      :segment-username="segment.username"
    />
  </template>
</ProjectVotingSegmentsWidget>