From c7d1d097411bdc6ce44c92ac7d3d1bb52b4c6b43 Mon Sep 17 00:00:00 2001 From: Edward Oliveira Date: Fri, 28 Nov 2025 14:56:33 -0300 Subject: [PATCH] WIP - VueJS components --- frontend/src/__apps/painel/main.js | 26 +++- frontend/src/components/PainelHeader.vue | 71 +++++++++++ .../src/components/PainelParlamentares.vue | 36 ++++++ frontend/src/components/StopWatch.vue | 117 ++++++++++++++++++ sapl/painel/consumers.py | 9 +- sapl/templates/painel/painel_v2.html | 42 +------ 6 files changed, 252 insertions(+), 49 deletions(-) create mode 100644 frontend/src/components/PainelHeader.vue create mode 100644 frontend/src/components/PainelParlamentares.vue create mode 100644 frontend/src/components/StopWatch.vue diff --git a/frontend/src/__apps/painel/main.js b/frontend/src/__apps/painel/main.js index 5e86aff6e..9bb9481c6 100644 --- a/frontend/src/__apps/painel/main.js +++ b/frontend/src/__apps/painel/main.js @@ -2,6 +2,14 @@ import './scss/painel.scss' // main.js (Vue 2) import Vue from 'vue' +import StopWatch from '../../components/StopWatch.vue' +import PainelHeader from '../../components/PainelHeader.vue' +import PainelParlamentares from '../../components/PainelParlamentares.vue' + +// register components +Vue.component('cronometro', StopWatch) +Vue.component('painel-header', PainelHeader) +Vue.component('painel-parlamentares', PainelParlamentares) new Vue({ el: '#painel', @@ -45,12 +53,18 @@ new Vue({ const msg = JSON.parse(evt.data) // SETUP STATE console.log(`FROM VUEJS: ${evt.data}`) // DEBUG - this.state.parlamentares = msg.presentes - //TODO: group in a single sessao object - this.state.sessao_plenaria = msg.sessao.sessao_plenaria - this.state.sessao_plenaria_data = msg.sessao.sessao_plenaria_data - this.state.sessao_plenaria_hora_inicio = msg.sessao.sessao_plenaria_hora_inicio - this.state.brasao = msg.sessao.brasao + + const parlamentaresInstance = this.$refs.parlamentares + parlamentaresInstance.parlamentares = msg.parlamentares + + //TODO: group in a single SessaoPlenaria object + const headerInstance = this.$refs.painelHeader; + + //TODO: setup as child's props? + headerInstance.sessao_plenaria = msg.sessao.sessao_plenaria + headerInstance.sessao_plenaria_data = msg.sessao.sessao_plenaria_data + headerInstance.sessao_plenaria_hora_inicio = msg.sessao.sessao_plenaria_hora_inicio + headerInstance.brasao = msg.sessao.brasao this.state.oradores = msg.oradores this.state.materia_legislativa_ementa = msg.mensagem_legislativa_ementa diff --git a/frontend/src/components/PainelHeader.vue b/frontend/src/components/PainelHeader.vue new file mode 100644 index 000000000..dc72df77e --- /dev/null +++ b/frontend/src/components/PainelHeader.vue @@ -0,0 +1,71 @@ + + + \ No newline at end of file diff --git a/frontend/src/components/PainelParlamentares.vue b/frontend/src/components/PainelParlamentares.vue new file mode 100644 index 000000000..b955eb09f --- /dev/null +++ b/frontend/src/components/PainelParlamentares.vue @@ -0,0 +1,36 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/components/StopWatch.vue b/frontend/src/components/StopWatch.vue new file mode 100644 index 000000000..e12b2752a --- /dev/null +++ b/frontend/src/components/StopWatch.vue @@ -0,0 +1,117 @@ + + + + + \ No newline at end of file diff --git a/sapl/painel/consumers.py b/sapl/painel/consumers.py index 09a4b186d..08bf0aa6e 100644 --- a/sapl/painel/consumers.py +++ b/sapl/painel/consumers.py @@ -34,7 +34,7 @@ def get_dados_painel(pk: int) -> dict: etapa_sessao='expediente').values_list('parlamentar_id', 'nome_parlamentar', 'filiacao', ) - presentes = [dict(zip(['parlamentar_id', 'nome_parlamentar', 'filiacao'], p)) for p in presentes] + parlamentares = [dict(zip(['parlamentar_id', 'nome_parlamentar', 'filiacao'], p)) for p in presentes] oradores = SessaoOradorView.objects.filter(sessao_plenaria_id=pk, etapa_sessao='expediente').values_list('ordem_pronunciamento', @@ -42,7 +42,9 @@ def get_dados_painel(pk: int) -> dict: ) oradores = [dict(zip(['ordem_pronunciamento', 'nome_parlamentar'], o)) for o in oradores] - votos = SessaoMateriaVotacaoView.objects.get(sessao_plenaria_id=pk, etapa_sessao='expediente', materia_id=31919) + votos = SessaoMateriaVotacaoView.objects.get(sessao_plenaria_id=pk, + etapa_sessao='expediente', + materia_id=31919) # TODO: recover stopwatch state from DB/Cache stopwatch = { @@ -55,7 +57,6 @@ def get_dados_painel(pk: int) -> dict: dados_sessao = { "type": "data", - "data": {}, # legacy "sessao": { "status_painel": sessao.painel_aberto, "brasao": brasao, @@ -68,7 +69,7 @@ def get_dados_painel(pk: int) -> dict: "tema_solene": sessao.tema_solene, "status_painel": False, # TODO: recover from DB **and** move status to other place. }, - "presentes": presentes, + "parlamentares": parlamentares, "oradores": oradores, "votacao": votos.total_votos, # TODO unify into single json "votos_parlamentar": votos.votos_parlamentares, # TODO: unify into single JSON diff --git a/sapl/templates/painel/painel_v2.html b/sapl/templates/painel/painel_v2.html index a13dd8f32..4583667aa 100644 --- a/sapl/templates/painel/painel_v2.html +++ b/sapl/templates/painel/painel_v2.html @@ -46,49 +46,12 @@ -
-

[[ state.sessao_plenaria ]]

-
- -
-
- [[ state.sessao_plenaria_data ]] -
-
- [[ state.sessao_plenaria_data ]] -
-
- -
-
- -
-
+
-
-

-
- -
-
-
-
-
-
-

Parlamentares

- - - - - - - -
[[ p.nome_parlamentar ]] [[ p.filiacao ]]
-
-
+

Oradores

@@ -110,6 +73,7 @@
+ Discurso:
Aparte:
Questão de Ordem: