This commit is contained in:
2026-03-10 18:34:47 -03:00
parent 0754466359
commit b32415212f
165 changed files with 14613 additions and 2352 deletions
@@ -0,0 +1,19 @@
application.type=widget
application.code=dashconforme
application.title=dashconforme
application.description=dashconforme
application.fluig.version=null
application.category=SYSTEM
application.renderer=freemarker
developer.code=andrey.cunha
developer.name=andrey.cunha
developer.url=http://www.fluig.com
application.uiwidget=true
application.mobileapp=false
application.version=${build.version}-${build.revision}
view.file=view.ftl
edit.file=edit.ftl
locale.file.base.name=dashconforme
application.resource.js.1=/resources/js/dashconforme.js
application.resource.css.2=/resources/css/dashconforme.css
hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2
@@ -0,0 +1,4 @@
<div id="MyWidget_${instanceId}" class="super-widget wcm-widget-class fluig-style-guide" data-params="MyWidget.instance()">
</div>
@@ -0,0 +1,11 @@
<div id="dashConforme_${instanceId}" class="super-widget wcm-widget-class fluig-style-guide" data-params="DashConforme.instance()">
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Top Inconformidades</h3>
</div>
<div class="panel-body">
<canvas id="graficoConforme_${instanceId}" height="120"></canvas>
</div>
</div>
</div>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<context-root>/dashconforme</context-root>
<disable-cross-context>false</disable-cross-context>
</jboss-web>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
@@ -0,0 +1,3 @@
div[id^="dashConforme_"] canvas {
max-height: 420px;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

@@ -0,0 +1,149 @@
var DashConforme = SuperWidget.extend({
chart:null,
init:function(){
var self=this;
this.renderAmostra();
window.addEventListener("dashboardData",function(e){
self.render(e.detail || []);
});
},
render:function(dados){
var mapa = {};
dados.forEach(function(item){
var lista = String(item.listaNaoConforme || "").trim();
if(!lista){
return;
}
lista.split("|").forEach(function(indicador){
var chave = String(indicador || "").trim();
if(!chave){
return;
}
if(!mapa[chave]){
mapa[chave] = 0;
}
mapa[chave] += 1;
});
});
var pares = Object.keys(mapa).map(function(k){
return {nome:k,valor:mapa[k]};
});
pares.sort(function(a,b){
return b.valor - a.valor;
});
pares = pares.slice(0,10);
var labels = pares.map(function(p){ return p.nome; });
var valores = pares.map(function(p){ return p.valor; });
if(!labels.length){
labels = ["Aguardando filtro"];
valores = [0];
}
var ctx = document.getElementById("graficoConforme_"+this.instanceId);
if(!ctx){
return;
}
if(this.chart){
this.chart.destroy();
}
this.chart = new Chart(ctx,{
type:"bar",
data:{
labels:labels,
datasets:[{
label:"Ocorrências",
data:valores,
backgroundColor:"#f39c12"
}]
},
options:{
responsive:true,
maintainAspectRatio:false,
indexAxis:"x",
plugins:{
legend:{display:false},
tooltip:{
callbacks:{
title:function(items){
if(labels.length === 1 && labels[0] === "Aguardando filtro"){
return "Aguardando filtro";
}
return items && items.length ? labels[items[0].dataIndex] : "";
}
}
}
},
scales:{
x:{
ticks:{
autoSkip:false,
maxRotation:35,
minRotation:0,
callback:function(value,index){
var txt = labels[index] || "";
return txt.length > 38 ? txt.substring(0,38) + "..." : txt;
}
}
},
y:{
beginAtZero:true,
precision:0
}
}
}
});
},
renderAmostra:function(){
var ctx = document.getElementById("graficoConforme_"+this.instanceId);
if(!ctx){
return;
}
if(this.chart){
this.chart.destroy();
}
this.chart = new Chart(ctx,{
type:"bar",
data:{
labels:["Aguardando filtro"],
datasets:[{
label:"Ocorrências",
data:[0],
backgroundColor:"#cfd8dc"
}]
},
options:{
responsive:true,
maintainAspectRatio:false,
plugins:{legend:{display:false}},
scales:{
x:{ticks:{autoSkip:false,maxRotation:0,minRotation:0}},
y:{beginAtZero:true,precision:0}
}
}
});
}
});
@@ -0,0 +1,19 @@
application.type=widget
application.code=dashdata
application.title=dashdata
application.description=dashdata
application.fluig.version=null
application.category=SYSTEM
application.renderer=freemarker
developer.code=andrey.cunha
developer.name=andrey.cunha
developer.url=http://www.fluig.com
application.uiwidget=true
application.mobileapp=false
application.version=${build.version}-${build.revision}
view.file=view.ftl
edit.file=edit.ftl
locale.file.base.name=dashdata
application.resource.js.1=/resources/js/dashdata.js
application.resource.css.2=/resources/css/dashdata.css
hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2
@@ -0,0 +1,4 @@
<div id="MyWidget_${instanceId}" class="super-widget wcm-widget-class fluig-style-guide" data-params="MyWidget.instance()">
</div>
@@ -0,0 +1,4 @@
<div id="dashdata_${instanceId}"
class="super-widget wcm-widget-class"
data-params="DashData.instance()">
</div>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<context-root>/dashdata</context-root>
<disable-cross-context>false</disable-cross-context>
</jboss-web>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
@@ -0,0 +1 @@
/* Coloque aqui seu codigo CSS */
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

@@ -0,0 +1,123 @@
var DashData = SuperWidget.extend({
init:function(){
console.log("DashData carregado");
var self=this;
window.addEventListener("dashboardFiltro",function(e){
console.log("DashData recebeu filtros:",e.detail);
self.carregar(e.detail);
});
},
carregar:function(filtros){
console.log("Consultando dataset...", filtros);
var self=this;
$.ajax({
url:"/api/public/ecm/dataset/search",
type:"POST",
contentType:"application/json",
data:JSON.stringify({
datasetId:"ds_dashboard_checklist"
}),
success:function(res){
console.log("Resposta dataset:",res);
var dados=res.content || [];
console.log("Quantidade registros:", dados.length);
// FILTRO POR LOJA
if(filtros.loja){
dados = dados.filter(function(item){
return normalizaTexto(item.loja) === normalizaTexto(filtros.loja);
});
}
// FILTRO POR DATA
if(filtros.dataInicio || filtros.dataFim){
dados = dados.filter(function(item){
var dataInicioAuditoria = normalizaData(item.dataAuditoria);
var dataLimite = normalizaData(item.dataLimite);
var inicioFiltro = normalizaData(filtros.dataInicio);
var fimFiltro = normalizaData(filtros.dataFim);
// Mantem quando data de auditoria OU data limite estiver na faixa filtrada
return dataNaFaixa(dataInicioAuditoria, inicioFiltro, fimFiltro) ||
dataNaFaixa(dataLimite, inicioFiltro, fimFiltro);
});
}
// Mantem somente auditorias com status final (evita divergencia entre total e KPIs)
var antesStatus = dados.length;
dados = dados.filter(function(item){
var st = normalizaTexto(item.saidaAnalise || item.status || "");
return st === "CONFORME" || st === "NAO_CONFORME";
});
console.log("Registros com status final:", dados.length, "de", antesStatus);
// Ordena por data de auditoria mais recente
dados.sort(function(a,b){
var da = normalizaData(a.dataAuditoria);
var db = normalizaData(b.dataAuditoria);
if(da < db) return 1;
if(da > db) return -1;
return 0;
});
console.log("Registros filtrados:", dados);
window.dispatchEvent(
new CustomEvent("dashboardData",{detail:dados})
);
}
});
}
});
function normalizaTexto(valor){
return String(valor || "").trim().toUpperCase();
}
function normalizaData(valor){
var v = String(valor || "").trim();
return v;
}
function dataNaFaixa(data, inicio, fim){
if(!data){
return false;
}
if(inicio && data < inicio){
return false;
}
if(fim && data > fim){
return false;
}
return true;
}
@@ -0,0 +1,19 @@
application.type=widget
application.code=dashgrafico
application.title=dashgrafico
application.description=dashgrafico
application.fluig.version=null
application.category=SYSTEM
application.renderer=freemarker
developer.code=G-ALES1NT-TEC09
developer.name=andrey.cunha
developer.url=http://www.fluig.com
application.uiwidget=true
application.mobileapp=false
application.version=${build.version}-${build.revision}
view.file=view.ftl
edit.file=edit.ftl
locale.file.base.name=dashgrafico
application.resource.js.1=/resources/js/dashgrafico.js
application.resource.css.2=/resources/css/dashgrafico.css
hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2
@@ -0,0 +1,4 @@
<div id="MyWidget_${instanceId}" class="super-widget wcm-widget-class fluig-style-guide" data-params="MyWidget.instance()">
</div>
@@ -0,0 +1,9 @@
<div id="dashGrafico_${instanceId}"
class="super-widget wcm-widget-class fluig-style-guide"
data-params="DashGrafico.instance()">
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<div style="height:260px; max-width:360px; margin:0 auto;">
<canvas id="grafico_${instanceId}"></canvas>
</div>
</div>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<context-root>/dashgrafico</context-root>
<disable-cross-context>false</disable-cross-context>
</jboss-web>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
@@ -0,0 +1 @@
/* Coloque aqui seu codigo CSS */
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

@@ -0,0 +1,91 @@
var DashGrafico = SuperWidget.extend({
chart:null,
init:function(){
var self=this;
this.renderAmostra();
window.addEventListener("dashboardData",function(e){
self.render(e.detail);
});
},
render:function(dados){
var conforme=dados.filter(function(i){
return normalizaStatus(i)=="CONFORME";
}).length;
var nao=dados.filter(function(i){
return normalizaStatus(i)=="NAO_CONFORME";
}).length;
var ctx=document.getElementById("grafico_"+this.instanceId);
if(this.chart){
this.chart.destroy();
}
this.chart=new Chart(ctx,{
type:'doughnut',
data:{
labels:["Conforme ("+conforme+")","Não Conforme ("+nao+")"],
datasets:[{
data:[conforme,nao],
backgroundColor:["#2ecc71","#e74c3c"]
}]
},
options:{
responsive:true,
maintainAspectRatio:false,
cutout:"48%"
}
});
function normalizaStatus(item){
var raw = item.saidaAnalise || item.status || "";
return String(raw).trim().toUpperCase();
}
},
renderAmostra:function(){
var ctx=document.getElementById("grafico_"+this.instanceId);
if(!ctx){
return;
}
if(this.chart){
this.chart.destroy();
}
this.chart=new Chart(ctx,{
type:'doughnut',
data:{
labels:["Conforme (0)","Não Conforme (0)"],
datasets:[{
data:[1,0],
backgroundColor:["#cfd8dc","#eceff1"]
}]
},
options:{
responsive:true,
maintainAspectRatio:false,
cutout:"48%",
plugins:{
tooltip:{enabled:false}
}
}
});
}
});
@@ -0,0 +1,19 @@
application.type=widget
application.code=dashkpi
application.title=dashkpi
application.description=dashkpi
application.fluig.version=null
application.category=SYSTEM
application.renderer=freemarker
developer.code=andrey.cunha
developer.name=andrey.cunha
developer.url=http://www.fluig.com
application.uiwidget=true
application.mobileapp=false
application.version=${build.version}-${build.revision}
view.file=view.ftl
edit.file=edit.ftl
locale.file.base.name=dashkpi
application.resource.js.1=/resources/js/dashkpi.js
application.resource.css.2=/resources/css/dashkpi.css
hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2
@@ -0,0 +1,4 @@
<div id="MyWidget_${instanceId}" class="super-widget wcm-widget-class fluig-style-guide" data-params="MyWidget.instance()">
</div>
@@ -0,0 +1,44 @@
<div id="dashKPI_${instanceId}"
class="super-widget wcm-widget-class fluig-style-guide"
data-params="DashKPI.instance()">
<div class="row">
<div class="col-md-3">
<div class="panel panel-default">
<div class="panel-body">
<h4>Total Auditorias</h4>
<h2 id="kpi_total_${instanceId}">0</h2>
</div>
</div>
</div>
<div class="col-md-3">
<div class="panel panel-success">
<div class="panel-body">
<h4>Conformes</h4>
<h2 id="kpi_ok_${instanceId}">0</h2>
</div>
</div>
</div>
<div class="col-md-3">
<div class="panel panel-danger">
<div class="panel-body">
<h4>Não Conformes</h4>
<h2 id="kpi_nok_${instanceId}">0</h2>
</div>
</div>
</div>
<div class="col-md-3">
<div class="panel panel-info">
<div class="panel-body">
<h4>% Conformidade</h4>
<h2 id="kpi_pct_${instanceId}">0%</h2>
</div>
</div>
</div>
</div>
</div>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<context-root>/dashkpi</context-root>
<disable-cross-context>false</disable-cross-context>
</jboss-web>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
@@ -0,0 +1 @@
/* Coloque aqui seu codigo CSS */
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

@@ -0,0 +1,41 @@
var DashKPI = SuperWidget.extend({
init:function(){
var self=this;
window.addEventListener("dashboardData",function(e){
self.calcular(e.detail);
});
},
calcular:function(dados){
var total=dados.length;
var conformes=dados.filter(function(i){
return normalizaStatus(i)=="CONFORME";
}).length;
var nao=dados.filter(function(i){
return normalizaStatus(i)=="NAO_CONFORME";
}).length;
var pct= total ? Math.round((conformes/total)*100) : 0;
$("#kpi_total_"+this.instanceId).text(total);
$("#kpi_ok_"+this.instanceId).text(conformes);
$("#kpi_nok_"+this.instanceId).text(nao);
$("#kpi_pct_"+this.instanceId).text(pct+"%");
}
});
function normalizaStatus(item){
var raw = item.saidaAnalise || item.status || "";
return String(raw).trim().toUpperCase();
}
@@ -0,0 +1,19 @@
application.type=widget
application.code=dashregional
application.title=dashregional
application.description=dashregional
application.fluig.version=null
application.category=SYSTEM
application.renderer=freemarker
developer.code=andrey.cunha
developer.name=andrey.cunha
developer.url=http://www.fluig.com
application.uiwidget=true
application.mobileapp=false
application.version=${build.version}-${build.revision}
view.file=view.ftl
edit.file=edit.ftl
locale.file.base.name=dashregional
application.resource.js.1=/resources/js/dashregional.js
application.resource.css.2=/resources/css/dashregional.css
hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2
@@ -0,0 +1,4 @@
<div id="MyWidget_${instanceId}" class="super-widget wcm-widget-class fluig-style-guide" data-params="MyWidget.instance()">
</div>
@@ -0,0 +1,18 @@
<div id="dashRegional_${instanceId}"
class="super-widget wcm-widget-class fluig-style-guide"
data-params="DashRegional.instance()">
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Não Conformes por Regional</h3>
</div>
<div class="panel-body">
<canvas id="graficoRegional_${instanceId}" height="120"></canvas>
</div>
</div>
</div>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<context-root>/dashregional</context-root>
<disable-cross-context>false</disable-cross-context>
</jboss-web>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
@@ -0,0 +1,12 @@
div[id^="dashRegional_"] {
position: relative !important;
z-index: 1;
}
div[id^="dashRegional_"] .panel {
overflow: hidden;
}
div[id^="dashRegional_"] canvas {
max-height: 260px;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

@@ -0,0 +1,102 @@
var DashRegional = SuperWidget.extend({
chart:null,
init:function(){
var self=this;
this.renderAmostra();
window.addEventListener("dashboardData",function(e){
self.render(e.detail);
});
},
render:function(dados){
var mapa={};
// soma nao conformes por regional
dados.forEach(function(i){
var regional=i.regional || "Sem regional";
if(!mapa[regional]) mapa[regional]=0;
mapa[regional]+=parseInt(i.qtdNaoConforme||0,10) || 0;
});
// transformar em arrays
var labels=Object.keys(mapa);
var valores=Object.values(mapa);
if(!labels.length){
labels=["Aguardando filtro"];
valores=[0];
}
// canvas
var ctx=document.getElementById("graficoRegional_"+this.instanceId);
if(this.chart){
this.chart.destroy();
}
// criar gráfico
this.chart=new Chart(ctx,{
type:'bar',
data:{
labels:labels,
datasets:[{
label:"Não conformes",
data:valores,
backgroundColor:"#e74c3c"
}]
},
options:{
responsive:true,
plugins:{
legend:{display:false}
}
}
});
},
renderAmostra:function(){
var ctx=document.getElementById("graficoRegional_"+this.instanceId);
if(!ctx){
return;
}
if(this.chart){
this.chart.destroy();
}
this.chart=new Chart(ctx,{
type:'bar',
data:{
labels:["Aguardando filtro"],
datasets:[{
label:"Não conformes",
data:[0],
backgroundColor:"#cfd8dc"
}]
},
options:{
responsive:true,
plugins:{legend:{display:false}}
}
});
}
});
@@ -0,0 +1,19 @@
application.type=widget
application.code=dashtabela
application.title=dashtabela
application.description=dashtabela
application.fluig.version=null
application.category=SYSTEM
application.renderer=freemarker
developer.code=andrey.cunha
developer.name=andrey.cunha
developer.url=http://www.fluig.com
application.uiwidget=true
application.mobileapp=false
application.version=${build.version}-${build.revision}
view.file=view.ftl
edit.file=edit.ftl
locale.file.base.name=dashtabela
application.resource.js.1=/resources/js/dashtabela.js
application.resource.css.2=/resources/css/dashtabela.css
hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2
@@ -0,0 +1,4 @@
<div id="MyWidget_${instanceId}" class="super-widget wcm-widget-class fluig-style-guide" data-params="MyWidget.instance()">
</div>
@@ -0,0 +1,44 @@
<div id="dashTabela_${instanceId}"
class="super-widget wcm-widget-class fluig-style-guide"
data-params="DashTabela.instance()">
<table class="table table-hover">
<thead>
<tr>
<th>Data Início</th>
<th>Data Limite</th>
<th>Ciclo</th>
<th>Auditor</th>
<th>Responsável Loja</th>
<th>Loja</th>
<th>Status</th>
</tr>
</thead>
<tbody id="lista_${instanceId}">
<tr>
<td colspan="7" class="text-center">Aguardando filtro...</td>
</tr>
</tbody>
</table>
<div class="dash-table-footer">
<div class="dash-page-size">
<label for="page_size_${instanceId}">Itens por página</label>
<select id="page_size_${instanceId}" class="form-control input-sm">
<option value="5" selected>5</option>
<option value="10">10</option>
<option value="20">20</option>
<option value="50">50</option>
</select>
</div>
<div id="page_info_${instanceId}" class="dash-page-info">Aguardando filtro</div>
<div class="dash-page-actions">
<button id="page_prev_${instanceId}" type="button" class="btn btn-default btn-sm">Anterior</button>
<button id="page_next_${instanceId}" type="button" class="btn btn-default btn-sm">Próxima</button>
</div>
</div>
</div>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<context-root>/dashtabela</context-root>
<disable-cross-context>false</disable-cross-context>
</jboss-web>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
@@ -0,0 +1,53 @@
div[id^="dashTabela_"] table th,
div[id^="dashTabela_"] table td {
vertical-align: top;
}
div[id^="dashTabela_"] table th:nth-child(1),
div[id^="dashTabela_"] table td:nth-child(1),
div[id^="dashTabela_"] table th:nth-child(2),
div[id^="dashTabela_"] table td:nth-child(2),
div[id^="dashTabela_"] table th:nth-child(3),
div[id^="dashTabela_"] table td:nth-child(3) {
white-space: nowrap;
}
div[id^="dashTabela_"] table th:nth-child(6),
div[id^="dashTabela_"] table td:nth-child(6) {
min-width: 220px;
}
div[id^="dashTabela_"] .dash-table-footer {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
padding-top: 8px;
border-top: 1px solid #eee;
}
div[id^="dashTabela_"] .dash-page-size {
display: flex;
align-items: center;
gap: 8px;
}
div[id^="dashTabela_"] .dash-page-size label {
margin: 0;
font-size: 12px;
font-weight: 600;
}
div[id^="dashTabela_"] .dash-page-size select {
width: 72px;
}
div[id^="dashTabela_"] .dash-page-info {
font-size: 12px;
color: #666;
}
div[id^="dashTabela_"] .dash-page-actions {
display: flex;
gap: 6px;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

@@ -0,0 +1,122 @@
var DashTabela = SuperWidget.extend({
dados:[],
paginaAtual:1,
itensPorPagina:5,
init:function(){
var self=this;
$("#page_prev_"+this.instanceId).on("click",function(){
if(self.paginaAtual>1){
self.paginaAtual--;
self.renderPage();
}
});
$("#page_next_"+this.instanceId).on("click",function(){
var totalPaginas = self.getTotalPaginas();
if(self.paginaAtual<totalPaginas){
self.paginaAtual++;
self.renderPage();
}
});
$("#page_size_"+this.instanceId).on("change",function(){
self.itensPorPagina = parseInt($(this).val(),10) || 5;
self.paginaAtual = 1;
self.renderPage();
});
window.addEventListener("dashboardData",function(e){
self.render(e.detail || []);
});
},
render:function(dados){
this.dados = dados;
this.paginaAtual = 1;
this.renderPage();
},
renderPage:function(){
var html="";
var totalPaginas = this.getTotalPaginas();
if(this.paginaAtual > totalPaginas){
this.paginaAtual = totalPaginas;
}
var inicio = (this.paginaAtual - 1) * this.itensPorPagina;
var fim = inicio + this.itensPorPagina;
var paginaDados = this.dados.slice(inicio,fim);
paginaDados.forEach(function(item){
html+="<tr>";
html+="<td>"+esc(formataData(item.dataAuditoria))+"</td>";
html+="<td>"+esc(formataData(item.dataLimite))+"</td>";
html+="<td>"+esc(item.ciclo || "")+"</td>";
html+="<td>"+esc(item.auditor || item.usuarioRetorno)+"</td>";
html+="<td>"+esc(item.responsavelLoja)+"</td>";
html+="<td>"+esc(item.loja)+"</td>";
html+="<td>"+esc(statusResumido(item))+"</td>";
html+="</tr>";
});
if(!html){
html+="<tr><td colspan='7' class='text-center'>Sem dados para o filtro selecionado</td></tr>";
}
$("#lista_"+this.instanceId).html(html);
$("#page_info_"+this.instanceId).text("Página " + this.paginaAtual + " de " + totalPaginas + " (" + this.dados.length + " registros)");
$("#page_prev_"+this.instanceId).prop("disabled", this.paginaAtual <= 1);
$("#page_next_"+this.instanceId).prop("disabled", this.paginaAtual >= totalPaginas);
},
getTotalPaginas:function(){
if(!this.dados.length){
return 1;
}
return Math.ceil(this.dados.length / this.itensPorPagina);
}
});
function esc(v){
return String(v == null ? "" : v)
.replace(/&/g,"&amp;")
.replace(/</g,"&lt;")
.replace(/>/g,"&gt;")
.replace(/\"/g,"&quot;")
.replace(/'/g,"&#39;");
}
function formataData(v){
var s = String(v || "").trim();
if(!s){
return "";
}
if(/^\d{4}-\d{2}-\d{2}$/.test(s)){
var p = s.split("-");
return p[2] + "/" + p[1] + "/" + p[0];
}
return s;
}
function statusResumido(item){
var s = String(item.saidaAnalise || item.status || "").trim().toUpperCase();
if(s === "CONFORME"){
return "CONFORME";
}
return "NAO_CONFORME";
}
@@ -0,0 +1,19 @@
application.type=widget
application.code=filtrosDash
application.title=filtrosDash
application.description=filtrosDash
application.fluig.version=null
application.category=SYSTEM
application.renderer=freemarker
developer.code=andrey.cunha
developer.name=andrey.cunha
developer.url=http://www.fluig.com
application.uiwidget=true
application.mobileapp=false
application.version=${build.version}-${build.revision}
view.file=view.ftl
edit.file=edit.ftl
locale.file.base.name=filtrosDash
application.resource.js.1=/resources/js/filtrosDash.js
application.resource.css.2=/resources/css/filtrosDash.css
hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2
@@ -0,0 +1,4 @@
<div id="MyWidget_${instanceId}" class="super-widget wcm-widget-class fluig-style-guide" data-params="MyWidget.instance()">
</div>
@@ -0,0 +1,34 @@
<div id="filtroDash_${instanceId}"
class="super-widget wcm-widget-class fluig-style-guide"
data-params="FiltroDash.instance()">
<div class="row">
<div class="col-md-3">
<label>Data início</label>
<input type="date" class="form-control" id="dtInicio_${instanceId}">
</div>
<div class="col-md-3">
<label>Data fim</label>
<input type="date" class="form-control" id="dtFim_${instanceId}">
</div>
<div class="col-md-4">
<label>Filial</label>
<input class="form-control" id="filial_${instanceId}" list="filial_list_${instanceId}" placeholder="Todas">
<datalist id="filial_list_${instanceId}">
<option value="Todas"></option>
</datalist>
</div>
<div class="col-md-2">
<label>&nbsp;</label>
<button type="button" class="btn btn-primary btn-block" data-filtrar>
Filtrar
</button>
</div>
</div>
</div>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<context-root>/filtrosDash</context-root>
<disable-cross-context>false</disable-cross-context>
</jboss-web>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
@@ -0,0 +1,7 @@
div[id^="filtroDash_"] input[list] {
padding-right: 30px;
}
div[id^="filtroDash_"] .btn[data-filtrar] {
font-weight: 600;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

@@ -0,0 +1,111 @@
var FiltroDash = SuperWidget.extend({
lojasCarregadas:[],
init: function(){
console.log("FiltroDash carregado");
this.carregarLojas();
},
bindings: {
local:{
'filtrar': ['click_filtrar']
}
},
carregarLojas: function(){
var self = this;
var dataList = $("#filial_list_"+this.instanceId);
$.ajax({
url: "/api/public/ecm/dataset/search",
type: "POST",
contentType: "application/json",
data: JSON.stringify({
datasetId: "ds_lojas_api",
constraints: [],
fields: [],
order: []
}),
success: function(response){
var dados = response.content || [];
self.lojasCarregadas = dados.map(function(loja){
return String(loja.LOJA || "").trim();
}).filter(function(v){ return !!v; });
self.lojasCarregadas.sort(function(a,b){
return a.localeCompare(b);
});
self.lojasCarregadas.forEach(function(loja){
dataList.append(
'<option value="'+loja+'"></option>'
);
});
}
});
},
filtrar:function(){
console.log("Filtrar clicado");
var lojaDigitada = String($("#filial_"+this.instanceId).val() || "").trim();
var filtros = {
dataInicio: $("#dtInicio_"+this.instanceId).val(),
dataFim: $("#dtFim_"+this.instanceId).val(),
loja: this.resolverLoja(lojaDigitada)
};
console.log("Filtros enviados:", filtros);
window.dispatchEvent(
new CustomEvent("dashboardFiltro",{detail:filtros})
);
},
resolverLoja:function(lojaDigitada){
if(!lojaDigitada){
return "";
}
var buscado = lojaDigitada.toUpperCase();
if(buscado === "TODAS" || buscado === "TODOS"){
return "";
}
var lojas = this.lojasCarregadas || [];
for(var i=0;i<lojas.length;i++){
if(lojas[i].toUpperCase() === buscado){
return lojas[i];
}
}
for(var j=0;j<lojas.length;j++){
if(lojas[j].toUpperCase().indexOf(buscado) >= 0){
return lojas[j];
}
}
return lojaDigitada;
}
});
@@ -0,0 +1,21 @@
application.type=widget
application.code=helloWidget
application.title=Hello Widget
application.description=Primeira Widget
application.fluig.version=null
application.category=SYSTEM
application.renderer=freemarker
developer.code=G-ALES1NT-TEC09
developer.name=andrey.cunha
developer.url=http://www.fluig.com
application.uiwidget=true
application.mobileapp=false
application.version=${build.version}-${build.revision}
view.file=view.ftl
edit.file=edit.ftl
locale.file.base.name=helloWidget
application.resource.js.1=/resources/js/helloWidget.js
application.resource.css.2=/resources/css/helloWidget.css
hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2
application.resource.js.3=/resources/js/jsCustom.js
application.icon = dev.png
@@ -0,0 +1,15 @@
<div id="MyWidget_${instanceId}" class="super-widget wcm-widget-class fluig-style-guide" data-params="MyWidget.instance()">
<h2>Estou no arquivo edit.ftl</h2>
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">
<i class="flaticon flaticon-build icon-lg" aria-hidden="true"></i> Configurações da Widget Hello Widget
</h3>
</div>
<div class="panel-body">
.... configurações que ainda vamos criar
</div>
</div>
</div>
@@ -0,0 +1,33 @@
<div id="MyWidget_${instanceId}" class="super-widget wcm-widget-class fluig-style-guide" data-params="MyWidget.instance()">
<h2>Estou no arquivo view.ftl</h2>
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">Hello Widget</h3>
</div>
<div class="panel-body">
<button type="button" class="btn btn-primary" data-chamarEvento1>Botão 1</button>
<button type="button" class="btn btn-success" data-chamarEvento2>Botão 2</button>
<button type="button" class="btn btn-info" data-chamarEvento3>Botão 3</button>
<hr/>
<div class="row">
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail1_${instanceId}" placeholder="Enter email">
</div>
<button type="button" class="btn btn-info" data-chamarEvento4>Botão 4</button>
</div>
<hr/>
<p>Olá ${pageRender.getUser().fullName}</p>
</div>
</div>
</div>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<context-root>/helloWidget</context-root>
<disable-cross-context>false</disable-cross-context>
</jboss-web>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>

Some files were not shown because too many files have changed in this diff Show More