5.6 KiB
5.6 KiB
ProjectVotingSegmentsWidget
Виджет для отображения участников голосования по методу Водянова с возможностью распределения голосов и просмотра результатов.
Назначение
Виджет предназначен для:
- Отображения участников проекта, имеющих право голоса (фильтр
has_vote: true) - Распределения голосующей суммы между участниками (до завершения голосования)
- Валидации корректности распределения голосов
- Отправки голосов через кнопку
SubmitVoteButton - Просмотра результатов голосования после его завершения
Особенности
Визуальное оформление
Виджет использует ColorCard компоненты в двух строках для отображения информации о голосовании:
Первая строка (3 колонки):
- Синяя карта: Общая сумма на распределение
- Фиолетовая карта: Голосующая сумма для распределения (только для участников)
- Зеленая/оранжевая карта: Статус голосования (зависит от состояния)
Вторая строка (2 колонки, только для участников до завершения):
- Зеленая карта: Распределенная сумма
- Красная карта: Остаток для распределения
До завершения голосования
- Автоматическая фильтрация: Загружает только сегменты с правом голоса
- Проверка участия в голосовании: Показывает поля ввода только участникам голосования
- Валидация голосования:
- Нельзя голосовать за себя
- Должны быть распределены голоса всем участникам кроме себя
- Общая сумма должна равняться активной голосующей сумме
- Визуальная обратная связь: Показывает распределенную сумму (зеленая карта) и остаток (красная карта) в отдельных колонках
- Блокировка после голосования: После отправки голосов виджет переходит в режим readonly
- Блокировка разворота: Кнопка expand заблокирована с tooltip подсказкой, нельзя просмотреть голоса других участников до завершения голосования
- Сообщение для не участников: Не участники видят сообщение о том, что голосование только для авторов и создателей
После завершения голосования
- Отображение результатов: Показывает результаты голосования (
voting_bonus) для всех участников - Разблокировка разворота: Кнопка expand становится активной, можно просмотреть детальные голоса каждого участника
- Доступность для всех: Результаты видят все пользователи (участники и не участники)
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>