@nixweb/nixloc-ui 0.0.91 → 0.0.94

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/package.json +4 -2
  2. package/src/component/forms/EscolherEstatico.vue +0 -3
  3. package/src/component/layout/BarraRolagem.vue +9 -2
  4. package/src/component/layout/Menu.vue +16 -9
  5. package/src/component/layout/Moldura.vue +8 -3
  6. package/src/component/layout/Tag.vue +66 -0
  7. package/src/component/shared/FiltroHorizontal.vue +8 -2
  8. package/src/component/shared/Progresso.vue +14 -1
  9. package/src/component/shared/Tabela.vue +5 -15
  10. package/src/component/shared/query-builder/Campo.vue +116 -0
  11. package/src/component/shared/query-builder/ConverteParaOdata.js +73 -0
  12. package/src/component/shared/query-builder/Filtro.vue +85 -0
  13. package/src/component/shared/query-builder/QueryBuilder.vue +164 -0
  14. package/src/component/shared/query-builder/Rodape.vue +38 -0
  15. package/src/component/shared/query-builder/Tags.vue +84 -0
  16. package/src/component/shared/query-builder/components/CustomSelect.vue +115 -0
  17. package/src/component/shared/query-builder/components/QueryBuilderChildren.vue +46 -0
  18. package/src/component/shared/query-builder/components/QueryBuilderGroup.vue +151 -0
  19. package/src/component/shared/query-builder/components/QueryBuilderRule.vue +81 -0
  20. package/src/component/shared/query-builder/layouts/Bootstrap/BootstrapGroup.vue +120 -0
  21. package/src/component/shared/query-builder/layouts/Bootstrap/BootstrapRule.vue +171 -0
  22. package/src/component/shared/query-builder/main.js +81 -0
  23. package/src/component/shared/query-builder/utilities.js +22 -0
  24. package/src/component/template/ModeloRelatorioListaView.vue +153 -0
  25. package/src/component/template/ModeloRelatorioView.vue +455 -0
  26. package/src/store/modulos/generic.js +11 -0
  27. package/src/store/modulos/relatorio.js +149 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nixweb/nixloc-ui",
3
- "version": "0.0.91",
3
+ "version": "0.0.94",
4
4
  "description": "Componentes UI",
5
5
  "author": "Fábio Ávila <fabio@nixweb.com.br>",
6
6
  "private": false,
@@ -15,18 +15,20 @@
15
15
  "sass-loader": "^12.4.0",
16
16
  "vodal": "^2.4.0",
17
17
  "vue-color": "^2.7.0",
18
+ "vue-currency-filter": "^3.3.0",
18
19
  "vue-js-toggle-button": "^1.3.0",
19
20
  "vue-loading-template": "^1.3.0",
20
21
  "vue-moment": "^4.0.0",
21
22
  "vue-multiselect": "^2.1.0",
22
23
  "vue-numeric": "^2.4.1",
23
24
  "vue-the-mask": "^0.11.1",
24
- "vue-sidebar-menu": "^3.6.3",
25
+ "vue-simple-progress": "^1.1.1",
25
26
  "vue-toasted": "^1.1.28",
26
27
  "vue-toggles": "^1.1.4",
27
28
  "vue-upload-file": "^1.1.0",
28
29
  "vue2-datepicker": "^2.13.0",
29
30
  "vue2-editor": "^2.6.6"
31
+
30
32
  },
31
33
  "devDependencies": {
32
34
  "@vue/cli-plugin-babel": "~4.5.0",
@@ -119,9 +119,6 @@ export default {
119
119
  </script>
120
120
 
121
121
  <style scoped>
122
- .titulo {
123
- color: #5f7587;
124
- }
125
122
  div.antes-lista {
126
123
  padding: 8px;
127
124
  }
@@ -1,5 +1,11 @@
1
1
  <template>
2
- <div :id="id" class="barra-rolagem div" :style="'height:' + altura + 'px'">
2
+ <div
3
+ :id="id"
4
+ class="barra-rolagem div"
5
+ :style="
6
+ 'max-height:' + alturaMaxima + 'px' + ';' + 'min-height:' + alturaMinima + 'px'
7
+ "
8
+ >
3
9
  <slot></slot>
4
10
  </div>
5
11
  </template>
@@ -11,7 +17,8 @@ export default {
11
17
  name: "BarraRolagem",
12
18
  props: {
13
19
  id: String,
14
- altura: Number,
20
+ alturaMaxima: Number,
21
+ alturaMinima: Number,
15
22
  },
16
23
  mounted() {
17
24
  const listElm = document.querySelector("#" + this.id);
@@ -14,7 +14,13 @@
14
14
  :class="sessaoDestaque('home')"
15
15
  >
16
16
  <div class="div-icone lado-a-lado">
17
- <i class="fas fa-chart-area icone-dash" :style="'color:' + corBase"></i>
17
+ <i
18
+ :class="{
19
+ 'icone-ativo': menuAtivo == 'Dashboard',
20
+ 'icone-normal': menuAtivo != 'Dashboard',
21
+ }"
22
+ class="fas fa-chart-area icone-dash"
23
+ ></i>
18
24
  </div>
19
25
  <div class="titulo">Dashboard</div>
20
26
  </a>
@@ -28,7 +34,14 @@
28
34
  :class="sessaoDestaque(item.modulo)"
29
35
  >
30
36
  <div class="div-icone lado-a-lado">
31
- <i :class="item.icone" class="icone" :style="'color:' + corBase"></i>
37
+ <span
38
+ :class="{
39
+ 'icone-ativo': menuAtivo == item.modulo,
40
+ 'icone-normal': menuAtivo != item.modulo
41
+ }"
42
+ > <i :class="item.icone"></i>
43
+ </span>
44
+
32
45
  </div>
33
46
  <div class="titulo">{{ item.titulo }}</div>
34
47
  </a>
@@ -83,7 +96,7 @@ export default {
83
96
  },
84
97
  corBaseAtivo: {
85
98
  type: String,
86
- default: "#d98621",
99
+ default: "#3F529B",
87
100
  },
88
101
  urlImagem: String,
89
102
  },
@@ -157,12 +170,6 @@ export default {
157
170
  z-index: 1000;
158
171
  }
159
172
 
160
- .menu-ativo {
161
- border-left: 3px solid #d98621;
162
- color: #d98621 ;
163
- background-color: #FAFAFC;
164
- }
165
-
166
173
  .div-logo {
167
174
  padding-top: 5px;
168
175
  padding-bottom: 15px;
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="moldura">
2
+ <div class="moldura" :style="'border-radius:' + bordaArredondada + 'px'">
3
3
  <slot></slot>
4
4
  </div>
5
5
  </template>
@@ -7,13 +7,18 @@
7
7
  <script>
8
8
  export default {
9
9
  name: "Moldura",
10
+ props: {
11
+ bordaArredondada: {
12
+ type: Number,
13
+ default: 3,
14
+ },
15
+ },
10
16
  };
11
17
  </script>
12
18
  <style scoped>
13
19
  .moldura {
14
20
  border: 1px solid #dbdfe9;
15
- background-color: white;
16
- border-radius: 3px;
21
+ background-color: transparent;
17
22
  padding: 15px;
18
23
  }
19
24
  </style>
@@ -0,0 +1,66 @@
1
+ <template>
2
+ <div class="div-tag">
3
+ <div class="tag">
4
+ <span @click="executar()">{{ titulo }}: {{ valor }}</span>
5
+ <i @click="remover()" class="icone fas fa-times-circle"></i>
6
+ </div>
7
+ </div>
8
+ </template>
9
+
10
+ <script>
11
+ import { mapMutations } from "vuex";
12
+
13
+ export default {
14
+ name: "Tag",
15
+ props: {
16
+ titulo: String,
17
+ valor: String,
18
+ nomeEvento: String,
19
+ dadosEvento: Object,
20
+ },
21
+ methods: {
22
+ ...mapMutations("generic", ["insereEvento"]),
23
+ executar() {
24
+ if (this.nomeEvento)
25
+ this.insereEvento({
26
+ nome: this.nomeEvento,
27
+ dados: this.dadosEvento,
28
+ });
29
+ },
30
+ remover() {
31
+ this.insereEvento({
32
+ nome: "tagRemovida",
33
+ dados: this.dadosEvento,
34
+ });
35
+ },
36
+ },
37
+ };
38
+ </script>
39
+
40
+ <style scoped>
41
+ .tag {
42
+ align-items: center;
43
+ background: #e0e0e0;
44
+ border-radius: 32px;
45
+ box-sizing: border-box;
46
+ display: flex;
47
+ font-size: 13px;
48
+ height: 32px;
49
+ margin: 4px 8px 4px 0;
50
+ width: 100%;
51
+ outline: none;
52
+ padding: 0 6px 0 16px;
53
+ position: relative;
54
+ white-space: nowrap;
55
+ cursor: pointer;
56
+ }
57
+
58
+ .div-tag {
59
+ margin-right: 10px;
60
+ }
61
+
62
+ .icone {
63
+ color: #9e9e9e;
64
+ padding-left: 5px;
65
+ }
66
+ </style>
@@ -13,10 +13,10 @@
13
13
  }"
14
14
  >
15
15
  <b-row>
16
- <b-col sm="10">
16
+ <b-col :sm="mostrarTotalPorPagina ? 10 : 12">
17
17
  <slot name="conteudo-filtro-horizontal"></slot>
18
18
  </b-col>
19
- <b-col xs="12" sm="12" md="12" lg="2" xl="2">
19
+ <b-col xs="12" sm="12" md="12" lg="2" xl="2" v-if="mostrarTotalPorPagina">
20
20
  <EscolherEstatico
21
21
  titulo="Mostrar"
22
22
  campoAlvo="totalPorPagina"
@@ -43,6 +43,12 @@ import Escolher from "../forms/Escolher";
43
43
  export default {
44
44
  name: "ModeloLista",
45
45
  components: { Escolher, EscolherEstatico, EsconderMostrar },
46
+ props: {
47
+ mostrarTotalPorPagina: {
48
+ type: Boolean,
49
+ default: true,
50
+ },
51
+ },
46
52
  };
47
53
  </script>
48
54
 
@@ -1,8 +1,21 @@
1
1
  <template>
2
- <div>barra de progresso</div>
2
+ <div>
3
+ <progress-bar :size="tamanho" :text="texto" :val="valor" :max="maximo"></progress-bar>
4
+ </div>
3
5
  </template>
4
6
  <script>
7
+ import ProgressBar from "vue-simple-progress";
8
+
5
9
  export default {
6
10
  name: "Progresso",
11
+ components: {
12
+ ProgressBar,
13
+ },
14
+ props: {
15
+ texto: String,
16
+ valor: Number,
17
+ maximo: Number,
18
+ tamanho: String,
19
+ },
7
20
  };
8
21
  </script>
@@ -243,7 +243,7 @@ tr:hover {
243
243
  }
244
244
 
245
245
  .tabela-numero {
246
- font-size: 16px;
246
+ font-size: 15px;
247
247
  font-weight: bold;
248
248
  }
249
249
 
@@ -253,33 +253,23 @@ tr:hover {
253
253
  }
254
254
 
255
255
  .tabela-valor {
256
- font-size: 16px;
256
+ font-size: 15px;
257
257
  min-width: 100px;
258
258
  }
259
259
 
260
260
  .link {
261
- color: #0057A9;
262
- font-size: 14px;
261
+ color: #0c63c0;
262
+ font-size: 15px;
263
263
  font-weight: 400;
264
264
  cursor: pointer;
265
265
  }
266
266
 
267
267
  .link:hover {
268
- font-size: 14.5px;
268
+ text-decoration: underline;
269
269
  transition: 0.1s;
270
270
  }
271
271
 
272
272
  .icone-link:hover {
273
273
  font-size: 12.5px;
274
274
  }
275
-
276
- .receita {
277
- font-size: 14px;
278
- color: darkblue;
279
- }
280
-
281
- .despesa {
282
- font-size: 14px;
283
- color: red;
284
- }
285
275
  </style>
@@ -0,0 +1,116 @@
1
+ <template>
2
+ <div>
3
+ <b-row>
4
+ <b-col sm="6">
5
+ <BarraRolagem :alturaMinima="200" :alturaMaxima="250">
6
+ <div class="div-opcoes">
7
+ <CheckboxMultiplo
8
+ :empilhado="true"
9
+ :valorInicial="opcoes.valorInicial"
10
+ :opcoes="opcoes.opcoes"
11
+ v-model="campoSelecionado"
12
+ />
13
+ </div>
14
+ </BarraRolagem>
15
+ </b-col>
16
+ <b-col sm="6">
17
+ <Opcoes
18
+ :opcoes="[
19
+ { text: 'Crescente', value: 'asc' },
20
+ { text: 'Decrescente', value: 'desc' },
21
+ ]"
22
+ v-model="ordenar"
23
+ />
24
+ <EscolherEstatico
25
+ titulo="Ordenar"
26
+ campoAlvo="ordenar"
27
+ :valorInicial="valorInicial"
28
+ :dados="ordenacao"
29
+ v-model="campoOrdenado"
30
+ />
31
+ </b-col>
32
+ </b-row>
33
+ </div>
34
+ </template>
35
+ <script>
36
+ import EscolherEstatico from "@nixweb/nixloc-ui/src/component/forms/EscolherEstatico";
37
+ import Opcoes from "@nixweb/nixloc-ui/src/component/forms/Opcoes";
38
+ import CheckboxMultiplo from "@nixweb/nixloc-ui/src/component/forms/CheckboxMultiplo";
39
+ import BarraRolagem from "@nixweb/nixloc-ui/src/component/layout/BarraRolagem.vue";
40
+
41
+ import { mapMutations, mapGetters } from "vuex";
42
+
43
+ export default {
44
+ name: "CampoRelatorio",
45
+ components: {
46
+ CheckboxMultiplo,
47
+ EscolherEstatico,
48
+ BarraRolagem,
49
+ Opcoes,
50
+ },
51
+ data() {
52
+ return {
53
+ ordenar: "asc",
54
+ valorInicial: {},
55
+ };
56
+ },
57
+ created() {
58
+ this.valorInicial = this.ordenacao[0];
59
+ let obj = {
60
+ conteudo: this.valorInicial.conteudo,
61
+ id: this.valorInicial.id,
62
+ ordenar: this.ordenar,
63
+ };
64
+ this.atualizaCampoOrdenado(obj);
65
+ },
66
+ computed: {
67
+ ...mapGetters("relatorio", ["opcoes"]),
68
+ campoSelecionado: {
69
+ get() {
70
+ return this.$store.state.relatorio.campoSelecionado;
71
+ },
72
+ set(value) {
73
+ this.atualizaCampoSelecionado(value);
74
+ },
75
+ },
76
+ campoOrdenado: {
77
+ get() {
78
+ return this.$store.state.relatorio.campoOrdenado;
79
+ },
80
+ set(value) {
81
+ let obj = { conteudo: value.conteudo, id: value.id, ordenar: this.ordenar };
82
+ this.atualizaCampoOrdenado(obj);
83
+ },
84
+ },
85
+ ordenacao() {
86
+ let ordenacao = [];
87
+ this.opcoes.opcoes.forEach((opcao) => {
88
+ let obj = { conteudo: opcao.text, id: opcao.value };
89
+ ordenacao.push(obj);
90
+ });
91
+ return ordenacao;
92
+ },
93
+ },
94
+ methods: {
95
+ ...mapMutations("relatorio", ["atualizaCampoSelecionado", "atualizaCampoOrdenado"]),
96
+ },
97
+ watch: {
98
+ ordenar: {
99
+ handler(value) {
100
+ let obj = {
101
+ conteudo: this.campoOrdenado.conteudo,
102
+ id: this.campoOrdenado.id,
103
+ ordenar: this.ordenar,
104
+ };
105
+ this.atualizaCampoOrdenado(obj);
106
+ },
107
+ deep: true,
108
+ },
109
+ },
110
+ };
111
+ </script>
112
+ <style scoped>
113
+ .div-opcoes {
114
+ margin-left: 10px;
115
+ }
116
+ </style>
@@ -0,0 +1,73 @@
1
+ export default class ConverteParaOdata {
2
+ converteFiltro(query) {
3
+ let campo = query.rule;
4
+ let valor = query.value;
5
+ let tipo = query.tipo;
6
+ let label = query.label;
7
+
8
+ if (query.operator === "igual") return `${campo} eq '${valor}'`;
9
+ if (query.operator === "diferente") return `${campo} ne '${valor}'`;
10
+ if (query.operator === "contem") return `contains(${campo},'${valor}')`;
11
+ if (query.operator === "periodo") return this.convertePeriodo(valor);
12
+ if (query.operator === "checkbox") return this.converteCheckbox(campo, valor, tipo, label);
13
+ if (query.operator === "=") return `${campo} eq ${valor}`;
14
+ if (query.operator === "!=") return `${campo} ne ${valor}`;
15
+ if (query.operator === "<") return `${campo} lt ${valor}`;
16
+ if (query.operator === "<=") return `${campo} le ${valor}`;
17
+ if (query.operator === ">") return `${campo} gt ${valor}`;
18
+ if (query.operator === ">=") return `${campo} ge ${valor}`;
19
+ }
20
+ convertePeriodo(valor) {
21
+ let inicio = this.converteData(valor[0]);
22
+ let fim = this.converteData(valor[1]);
23
+ return `data ge ${inicio} and data le ${fim}`;
24
+ }
25
+ converteCheckbox(campo, valor, tipo, label) {
26
+ let consulta = "";
27
+ let sequencia = 0;
28
+ var tamanho = valor.length;
29
+ let self = this;
30
+ valor.forEach(function (value) {
31
+ if (tipo == "campo") {
32
+ consulta += `${campo} eq ${value}`;
33
+ if (sequencia + 1 != tamanho) consulta += ` or `;
34
+ }
35
+ if (tipo == "resumo") {
36
+ let nome = self.converteNome(value);
37
+ consulta += `${campo} with ${value} as ${nome}${label}`;
38
+ if (sequencia + 1 != tamanho) consulta += `,`;
39
+ }
40
+ sequencia++;
41
+ });
42
+
43
+ if (tamanho > 1 && tipo == "campo") return `(${consulta})`;
44
+ return `${consulta}`;
45
+ }
46
+ converteData(data) {
47
+ let str = data.replace("/", "").replace("/", "");
48
+
49
+ let date = {
50
+ dia: str.substr(0, 2),
51
+ mes: str.substr(2, 2),
52
+ ano: str.substr(4, 4),
53
+ };
54
+
55
+ var iso = date.ano + "-" + date.mes + "-" + date.dia;
56
+
57
+ /*
58
+ iso += date.dia + "T";
59
+ iso += "00:00:00.000Z";
60
+ iso += d.getHours().toString().padStart(2, "0") + ":";
61
+ iso += d.getMinutes().toString().padStart(2, "0") + ":";
62
+ iso += d.getSeconds().toString().padStart(2, "0");
63
+ */
64
+
65
+ return iso;
66
+ }
67
+ converteNome(value) {
68
+ if (value === "sum") return "soma";
69
+ if (value === "average") return "media";
70
+ if (value === "max") return "maximo";
71
+ if (value === "minimo") return "minimo";
72
+ }
73
+ }
@@ -0,0 +1,85 @@
1
+ <template>
2
+ <div>
3
+ <BarraRolagem :alturaMinima="450" :alturaMaxima="600">
4
+ <QueryBuilder :rules="relatorio.filtro" v-model="filtroSelecionado" />
5
+ </BarraRolagem>
6
+ </div>
7
+ </template>
8
+
9
+ <script>
10
+ import QueryBuilder from "./QueryBuilder.vue";
11
+ import BarraRolagem from "@nixweb/nixloc-ui/src/component/layout/BarraRolagem.vue";
12
+
13
+ import { mapMutations, mapState } from "vuex";
14
+
15
+ export default {
16
+ name: "Filtro",
17
+ components: { BarraRolagem, QueryBuilder },
18
+ computed: {
19
+ ...mapState("relatorio", ["relatorio"]),
20
+ filtroSelecionado: {
21
+ get() {
22
+ return this.$store.state.relatorio.filtroSelecionado;
23
+ },
24
+ set(value) {
25
+ this.atualizaFiltroSelecionado(value);
26
+ },
27
+ },
28
+ },
29
+ methods: {
30
+ ...mapMutations("relatorio", ["atualizaFiltroSelecionado"]),
31
+ },
32
+ };
33
+ </script>
34
+
35
+ <style>
36
+ .btn-secondary {
37
+ background-color: #4ab4e2 !important;
38
+ border: 0px !important;
39
+ font-size: 14px !important;
40
+ border-radius: 20px !important;
41
+ }
42
+
43
+ .vue-query-builder .vqb-group.depth-1 .vqb-rule,
44
+ .vue-query-builder .vqb-group.depth-2 {
45
+ border-left: 2px solid #577696 !important;
46
+ }
47
+
48
+ .vue-query-builder .vqb-rule {
49
+ background-color: #fafafc !important;
50
+ }
51
+
52
+ .form-i nline label {
53
+ font-size: 14px !important;
54
+ }
55
+
56
+ .card-header {
57
+ padding: 5px !important;
58
+ }
59
+
60
+ .card {
61
+ padding: 10px !important;
62
+ }
63
+
64
+ .vqb-rule {
65
+ margin-bottom: 10px !important;
66
+ }
67
+
68
+ .rule-actions {
69
+ margin-bottom: 10px !important;
70
+ }
71
+
72
+ .mr-2 {
73
+ font-size: 14px !important;
74
+ margin-left: 10px !important;
75
+ }
76
+
77
+ .form-inline .form-control {
78
+ min-width: 200px !important;
79
+ }
80
+
81
+ option {
82
+ font-size: 14px !important;
83
+ padding: 5px !important;
84
+ }
85
+ </style>