@znap/components-vue2 1.1.7 → 1.2.0
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.
- package/dist/index.cjs.js +2 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.es.js +2856 -0
- package/dist/index.es.js.map +1 -0
- package/dist/style.css +1 -0
- package/dist/styles/handsontable/custom-handsontable.css +685 -0
- package/package.json +19 -17
- package/dist/demo.html +0 -1
- package/dist/index.common.js +0 -51192
- package/dist/index.common.js.map +0 -1
- package/dist/index.umd.js +0 -51219
- package/dist/index.umd.js.map +0 -1
- package/dist/index.umd.min.js +0 -278
- package/dist/index.umd.min.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/components/buttons/ClearFilterButton.vue","../src/components/buttons/CloseTableButton.vue","../src/components/buttons/RefreshButton.vue","../src/components/buttons/FiltersButton.vue","../src/components/buttons/ExportFileButton.vue","../src/components/buttons/ImportFileButton.vue","../src/components/buttons/NewItemButton.vue","../src/components/buttons/SaveButton.vue","../src/components/buttons/ConsolidateButton.vue","../src/components/buttons/DeleteItemButton.vue","../src/components/buttons/TextButton.vue","../src/components/buttons/DuplicatedItemButton.vue","../src/components/buttons/EditItemButton.vue","../src/components/buttons/UndoChangesButton.vue","../src/components/views/ViewHeader.vue","../src/components/views/BaseViewLayout.vue","../src/components/views/RequiredFilterMessage.vue","../src/components/forms/FormTitle.vue","../src/components/forms/RequiredFieldsIndicator.vue","../src/components/forms/FormFooter.vue","../src/components/forms/LoadingIndicator.vue","../src/components/forms/BaseFormLayout.vue","../src/components/forms/UnsavedChangesDialog.vue","../src/components/forms/ConfirmDeleteDialog.vue","../src/components/date-pickers/DatePicker.vue","../src/components/forms/BaseCrudForm.vue","../src/components/drawers/BaseCrudSecondaryFiltersDrawer.vue","../src/components/views/BaseCrudView.vue","../src/components/tables/HandsOnTable.vue","../src/components/selectors/MonthSelector.vue","../src/components/selectors/QuarterSelector.vue","../src/components/selectors/SemesterSelector.vue","../src/components/selectors/YearSelector.vue","../src/components/selectors/PeriodSelector.vue","../src/components/selectors/YearPeriodSelector.vue","../src/utils/views/generateCrudViewConfigs.ts","../src/index.ts"],"sourcesContent":["<template>\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n :color=\"color\"\n v-bind=\"$attrs\"\n v-on=\"{ ...on, ...$listeners }\"\n :min-width=\"minWidth\"\n :class=\"buttonClass\"\n >\n <v-icon>mdi-cancel</v-icon>\n </v-btn>\n </template>\n <span>\n {{ text }}\n </span>\n </v-tooltip>\n</template>\n\n<script>\nexport default {\n props: {\n minWidth: {\n default: \"48px\",\n required: false,\n type: String,\n },\n buttonClass: {\n default: \"\",\n required: false,\n type: String,\n },\n text: {\n default: \"Limpar filtros\",\n required: false,\n type: String,\n },\n size: {\n required: false,\n default: \"small\",\n type: String,\n },\n color: {\n required: false,\n default: \"secondary\",\n type: String,\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n :color=\"color\"\n v-bind=\"$attrs\"\n v-on=\"{ ...on, ...$listeners }\"\n :min-width=\"minWidth\"\n :class=\"buttonClass\"\n >\n <v-icon>mdi-close</v-icon>\n </v-btn>\n </template>\n <span>\n {{ text }}\n </span>\n </v-tooltip>\n</template>\n\n<script>\nexport default {\n props: {\n minWidth: {\n default: \"48px\",\n required: false,\n type: String,\n },\n buttonClass: {\n default: \"\",\n required: false,\n type: String,\n },\n text: {\n default: \"Fechar\",\n required: false,\n type: String,\n },\n size: {\n required: false,\n default: \"small\",\n type: String,\n },\n color: {\n required: false,\n default: \"primary\",\n type: String,\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n :color=\"color\"\n v-bind=\"$attrs\"\n v-on=\"{ ...on, ...$listeners }\"\n :min-width=\"minWidth\"\n :class=\"buttonClass\"\n >\n <v-icon>mdi-refresh</v-icon>\n </v-btn>\n </template>\n\n <span>\n {{ text }}\n </span>\n </v-tooltip>\n</template>\n\n<script>\nexport default {\n props: {\n minWidth: {\n default: \"48px\",\n required: false,\n type: String,\n },\n buttonClass: {\n default: \"\",\n required: false,\n type: String,\n },\n text: {\n default: \"Atualizar\",\n required: false,\n type: String,\n },\n size: {\n required: false,\n default: \"small\",\n type: String,\n },\n color: {\n required: false,\n default: \"primary\",\n type: String,\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n :color=\"color\"\n v-bind=\"$attrs\"\n v-on=\"{ ...on, ...$listeners }\"\n :min-width=\"minWidth\"\n :class=\"buttonClass\"\n >\n <v-icon>mdi-filter</v-icon>\n </v-btn>\n </template>\n <span>\n {{ text }}\n </span>\n </v-tooltip>\n</template>\n\n<script>\nexport default {\n props: {\n minWidth: {\n default: \"48px\",\n required: false,\n type: String,\n },\n buttonClass: {\n default: \"\",\n required: false,\n type: String,\n },\n text: {\n default: \"Filtros\",\n required: false,\n type: String,\n },\n size: {\n required: false,\n default: \"small\",\n type: String,\n },\n color: {\n required: false,\n default: \"secondary\",\n type: String,\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n :color=\"color\"\n v-bind=\"$attrs\"\n v-on=\"{ ...on, ...$listeners }\"\n :min-width=\"minWidth\"\n :class=\"buttonClass\"\n >\n <v-icon>{{ icon }}</v-icon>\n </v-btn>\n </template>\n <span>\n {{ text }}\n </span>\n </v-tooltip>\n</template>\n\n<script>\nexport default {\n props: {\n icon: {\n default: \"mdi-microsoft-excel\",\n required: false,\n type: String,\n },\n minWidth: {\n default: \"48px\",\n required: false,\n type: String,\n },\n buttonClass: {\n default: \"\",\n required: false,\n type: String,\n },\n text: {\n default: \"Exportar Excel\",\n required: false,\n type: String,\n },\n size: {\n required: false,\n default: \"small\",\n type: String,\n },\n color: {\n required: false,\n default: \"primary\",\n type: String,\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n :color=\"color\"\n v-bind=\"$attrs\"\n v-on=\"{ ...on, ...$listeners }\"\n :min-width=\"minWidth\"\n :class=\"buttonClass\"\n >\n <v-icon>{{ icon }}</v-icon>\n </v-btn>\n\n <input ref=\"uploader\" class=\"d-none\" type=\"file\" @change=\"onChangeFile\" />\n </template>\n <span>\n {{ text }}\n </span>\n </v-tooltip>\n</template>\n\n<script>\nexport default {\n props: {\n icon: {\n default: \"mdi-file-excel\",\n required: false,\n type: String,\n },\n minWidth: {\n default: \"48px\",\n required: false,\n type: String,\n },\n buttonClass: {\n default: \"\",\n required: false,\n type: String,\n },\n text: {\n default: \"Importar excel\",\n required: false,\n type: String,\n },\n size: {\n required: false,\n default: \"small\",\n type: String,\n },\n color: {\n required: false,\n default: \"primary\",\n type: String,\n },\n },\n emits: [\"getFileUploaderRef\", \"changeFile\"],\n mounted() {\n this.$emit(\"getFileUploaderRef\", this.$refs.uploader);\n },\n methods: {\n onChangeFile(e) {\n this.$emit(\"changeFile\", e);\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n :color=\"color\"\n v-bind=\"$attrs\"\n v-on=\"{ ...on, ...$listeners }\"\n :min-width=\"minWidth\"\n :class=\"buttonClass\"\n >\n <v-icon>mdi-plus</v-icon>\n </v-btn>\n </template>\n <span>\n {{ text }}\n </span>\n </v-tooltip>\n</template>\n\n<script>\nexport default {\n props: {\n minWidth: {\n default: \"48px\",\n required: false,\n type: String,\n },\n buttonClass: {\n default: \"\",\n required: false,\n type: String,\n },\n text: {\n default: \"Adicionar nova linha\",\n required: false,\n type: String,\n },\n size: {\n required: false,\n default: \"small\",\n type: String,\n },\n color: {\n required: false,\n default: \"primary\",\n type: String,\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n :color=\"color\"\n v-bind=\"$attrs\"\n v-on=\"{ ...on, ...$listeners }\"\n :min-width=\"minWidth\"\n :class=\"buttonClass\"\n :disabled=\"disabled\"\n >\n <v-icon>{{ icon }}</v-icon>\n </v-btn>\n </template>\n <span>\n {{ text }}\n </span>\n </v-tooltip>\n</template>\n\n<script>\nexport default {\n inheritAttrs: false,\n props: {\n icon: {\n default: \"mdi-content-save\",\n required: false,\n type: String,\n },\n minWidth: {\n default: \"48px\",\n required: false,\n type: String,\n },\n buttonClass: {\n default: \"\",\n required: false,\n type: String,\n },\n text: {\n default: \"Salvar\",\n required: false,\n type: String,\n },\n size: {\n required: false,\n default: \"small\",\n type: String,\n },\n color: {\n required: false,\n default: \"primary\",\n type: String,\n },\n disabled: {\n required: false,\n default: false,\n type: Boolean,\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n :color=\"color\"\n :class=\"buttonClass\"\n :min-width=\"minWidth\"\n v-bind=\"$attrs\"\n v-on=\"{ ...on, ...$listeners }\"\n :disabled=\"disabled\"\n >\n <v-icon>mdi-calculator-variant</v-icon>\n </v-btn>\n </template>\n <span>{{ text }}</span>\n </v-tooltip>\n</template>\n\n<script>\nexport default {\n props: {\n minWidth: {\n default: \"48px\",\n required: false,\n type: String,\n },\n buttonClass: {\n default: \"\",\n required: false,\n type: String,\n },\n text: {\n default: \"Consolidar valores\",\n required: false,\n type: String,\n },\n size: {\n required: false,\n default: \"small\",\n type: String,\n },\n color: {\n required: false,\n default: \"secondary\",\n type: String,\n },\n disabled: {\n required: false,\n default: false,\n type: Boolean,\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n :color=\"color\"\n :class=\"buttonClass\"\n :min-width=\"minWidth\"\n v-on=\"{ ...on, ...$listeners }\"\n v-bind=\"$attrs\"\n :disabled=\"disabled\"\n >\n <v-icon>mdi-delete-sweep</v-icon>\n </v-btn>\n </template>\n <span>{{ text }}</span>\n </v-tooltip>\n</template>\n\n<script>\nexport default {\n props: {\n minWidth: {\n default: \"48px\",\n required: false,\n type: String,\n },\n buttonClass: {\n default: \"\",\n required: false,\n type: String,\n },\n text: {\n default: \"Remover linha(s) selecionada(s)\",\n required: false,\n type: String,\n },\n size: {\n required: false,\n default: \"small\",\n type: String,\n },\n color: {\n required: false,\n default: \"primary\",\n type: String,\n },\n disabled: {\n required: false,\n default: false,\n type: Boolean,\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-btn\n :color=\"color\"\n text\n v-bind=\"$attrs\"\n v-on=\"{ ...$listeners }\"\n :class=\"buttonClass\"\n >\n {{ text }}\n </v-btn>\n</template>\n\n<script>\nexport default {\n props: {\n buttonClass: {\n default: \"\",\n required: false,\n type: String,\n },\n text: {\n default: \"\",\n required: false,\n type: String,\n },\n size: {\n required: false,\n default: \"small\",\n type: String,\n },\n color: {\n required: false,\n default: \"primary\",\n type: String,\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n :color=\"color\"\n v-bind=\"$attrs\"\n v-on=\"{ ...on, ...$listeners }\"\n :min-width=\"minWidth\"\n :class=\"buttonClass\"\n >\n <v-icon>mdi-content-duplicate</v-icon>\n </v-btn>\n </template>\n <span>\n {{ text }}\n </span>\n </v-tooltip>\n</template>\n\n<script>\nexport default {\n props: {\n minWidth: {\n default: \"48px\",\n required: false,\n type: String,\n },\n buttonClass: {\n default: \"\",\n required: false,\n type: String,\n },\n text: {\n default: \"Duplicar item selecionado\",\n required: false,\n type: String,\n },\n size: {\n required: false,\n default: \"small\",\n type: String,\n },\n color: {\n required: false,\n default: \"secondary\",\n type: String,\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n :color=\"color\"\n v-bind=\"$attrs\"\n v-on=\"{ ...on, ...$listeners }\"\n :min-width=\"minWidth\"\n :class=\"buttonClass\"\n >\n <v-icon>mdi-pencil</v-icon>\n </v-btn>\n </template>\n <span>\n {{ text }}\n </span>\n </v-tooltip>\n</template>\n\n<script>\nexport default {\n props: {\n minWidth: {\n default: \"48px\",\n required: false,\n type: String,\n },\n buttonClass: {\n default: \"\",\n required: false,\n type: String,\n },\n text: {\n default: \"Editar item selecionado\",\n required: false,\n type: String,\n },\n size: {\n required: false,\n default: \"small\",\n type: String,\n },\n color: {\n required: false,\n default: \"secondary\",\n type: String,\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n :color=\"color\"\n v-bind=\"$attrs\"\n v-on=\"{ ...on, ...$listeners }\"\n :min-width=\"minWidth\"\n :class=\"buttonClass\"\n >\n <v-icon>mdi mdi-undo-variant</v-icon>\n </v-btn>\n </template>\n <span>\n {{ text }}\n </span>\n </v-tooltip>\n</template>\n\n<script>\nexport default {\n props: {\n minWidth: {\n default: \"48px\",\n required: false,\n type: String,\n },\n buttonClass: {\n default: \"\",\n required: false,\n type: String,\n },\n text: {\n default: \"Desfazer alterações\",\n required: false,\n type: String,\n },\n size: {\n required: false,\n default: \"small\",\n type: String,\n },\n color: {\n required: false,\n default: \"secondary\",\n type: String,\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <section ref=\"cardHeaderRef\">\n <div class=\"d-flex align-center pt-2 pb-4\">\n <div class=\"d-flex align-start mr-4\">\n <v-icon x-large color=\"primary\">{{ tableIcon }}</v-icon>\n </div>\n\n <span\n class=\"text-h6 font-weight-regular\"\n style=\"\n display: inline-block;\n white-space: nowrap;\n overflow: hidden !important;\n text-overflow: ellipsis;\n \"\n >\n {{ tableName }}\n </span>\n\n <v-spacer></v-spacer>\n\n <slot />\n </div>\n </section>\n</template>\n\n<script lang=\"ts\">\nexport default {\n props: {\n tableIcon: {\n required: true,\n default: \"\",\n type: String,\n },\n tableName: {\n required: true,\n default: \"\",\n type: String,\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-container fluid fill-height app class=\"znap-crud-full-height-container\">\n <v-card\n color=\"white\"\n class=\"px-4 rounded-t d-flex flex-column\"\n style=\"width: 100%; height: 100%\"\n >\n <ViewHeader :tableIcon=\"tableIcon\" :tableName=\"tableName\">\n <slot name=\"action-buttons\" />\n\n <CloseTableButton\n v-if=\"closeTableButton.show\"\n :color=\"closeTableButton.color\"\n :min-width=\"closeTableButton.minWidth\"\n :text=\"closeTableButton.text\"\n buttonClass=\"pa-0\"\n @click=\"closeTable\"\n />\n </ViewHeader>\n\n <v-divider class=\"mb-2\"></v-divider>\n\n <section ref=\"filtersRef\" v-if=\"showPrimaryFilters\">\n <slot name=\"primary-filters\" />\n </section>\n\n <section\n class=\"w-100 flex-grow-1 d-flex flex-column\"\n ref=\"default-container\"\n >\n <slot />\n </section>\n </v-card>\n </v-container>\n</template>\n\n<script>\nimport { CloseTableButton } from \"../buttons\";\n\nimport ViewHeader from \"./ViewHeader.vue\";\n\nexport default {\n props: {\n tableIcon: {\n required: true,\n default: \"\",\n type: String,\n },\n tableName: {\n required: true,\n default: \"\",\n type: String,\n },\n showPrimaryFilters: {\n require: false,\n default: true,\n type: Boolean,\n },\n closeTableButton: {\n require: false,\n default: () => ({\n show: true,\n text: undefined,\n minWidth: undefined,\n color: undefined,\n }),\n },\n },\n components: {\n CloseTableButton,\n ViewHeader,\n },\n\n data() {\n return {\n isComponentMounted: false,\n };\n },\n\n emits: [\"closeTable\"],\n\n mounted() {\n window.addEventListener(\"resize\", this.adjustComponentLayout);\n\n this.isComponentMounted = true;\n\n this.$nextTick(() => {\n this.adjustComponentLayout();\n });\n },\n beforeDestroy() {\n this.isComponentMounted = false;\n window.removeEventListener(\"resize\", this.adjustComponentLayout);\n },\n methods: {\n closeTable() {\n this.$emit(\"closeTable\");\n },\n adjustComponentLayout() {\n if (!this.isComponentMounted || !this.$el) return;\n\n const appBar = document.querySelector(\".v-app-bar\");\n const appBarHeight = appBar ? appBar.offsetHeight : 64;\n\n const availableHeight = `calc(100vh - ${appBarHeight}px)`;\n\n const container = this.$el;\n if (container) {\n container.style.height = availableHeight;\n container.style.maxHeight = availableHeight;\n container.style.overflow = \"hidden\";\n }\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.znap-crud-full-height-container {\n height: calc(100vh - 64px);\n max-height: calc(100vh - 64px);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n position: relative;\n}\n\n.znap-crud-full-height-container :deep(.v-container) {\n height: 100%;\n max-height: 100%;\n padding: 16px;\n margin: 0;\n overflow: hidden;\n}\n\n.znap-crud-full-height-container :deep(.v-card) {\n height: 100%;\n max-height: 100%;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n border-radius: 4px;\n margin: 0;\n}\n\n.znap-crud-full-height-container :deep(.flex-grow-1) {\n flex: 1 1 auto;\n min-height: 0;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.znap-crud-full-height-container :deep(.v-layout) {\n height: 100%;\n flex: 1 1 auto;\n overflow: hidden;\n}\n\n.znap-crud-full-height-container :deep(.v-data-table) {\n height: 100%;\n max-height: none;\n display: flex;\n flex-direction: column;\n}\n\n.znap-crud-full-height-container :deep(.v-data-table__wrapper) {\n flex: 1 1 auto;\n overflow: auto;\n min-height: 0;\n}\n\n.znap-crud-full-height-container :deep(.v-data-table__header) {\n flex-shrink: 0;\n}\n\n.znap-crud-full-height-container :deep(.v-data-footer) {\n flex-shrink: 0;\n}\n\n.znap-crud-full-height-container :deep(.v-toolbar) {\n flex-shrink: 0;\n}\n</style>\n","<template>\n <v-row\n class=\"justify-center mb-5 mt-3 text-h6 primary--text\"\n style=\"color: #e71b7b; font-size: 1.25rem\"\n >\n {{ message }}\n </v-row>\n</template>\n\n<script lang=\"ts\">\nexport default {\n props: {\n message: {\n required: true,\n default: \"\",\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-card-title\n class=\"light--text\"\n :style=\"`background: linear-gradient(90deg, ${$vuetify.theme.themes.light.primary} 0%, ${$vuetify.theme.themes.light.secondary} 100%)`\"\n >\n <span ref=\"formTitle\" class=\"headline\">\n {{ formAction }} {{ formSubject }}\n </span>\n\n <v-spacer></v-spacer>\n\n <slot />\n\n <v-tooltip top v-if=\"showCloseButton\">\n <template v-slot:activator=\"{ on }\">\n <v-btn\n v-on=\"on\"\n class=\"pa-0\"\n @click=\"$emit('close')\"\n min-width=\"48px\"\n text\n dark\n >\n <v-icon color=\"light\">mdi-close</v-icon>\n </v-btn>\n </template>\n <span>Fechar</span>\n </v-tooltip>\n </v-card-title>\n</template>\n\n<script>\nexport default {\n props: {\n formAction: {\n default: \"\",\n },\n formSubject: {\n default: \"\",\n },\n showCloseButton: {\n default: true,\n },\n },\n emits: [\"close\"],\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <span class=\"text-caption primary--text ml-3\">* Campos obrigatórios</span>\n</template>\n\n<script>\nexport default {};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <div class=\"light\">\n <v-divider class=\"mx-4\"></v-divider>\n\n <v-card-actions class=\"px-6 py-6\">\n <RequiredFieldsIndicator v-if=\"showRequiredFieldsIndicator\" />\n\n <v-spacer></v-spacer>\n\n <v-btn\n v-if=\"showCancelButton\"\n color=\"primary\"\n text\n @click=\"$emit('close')\"\n class=\"mr-4\"\n >\n {{ cancelButtonText }}\n </v-btn>\n\n <v-btn\n v-if=\"showSubmitButton || readOnly\"\n color=\"primary\"\n @click=\"$emit('submit')\"\n :disabled=\"disableSubmitButton\"\n :loading=\"loading\"\n >\n {{ loading ? submitButtonLoadingText : submitButtonText }}\n </v-btn>\n </v-card-actions>\n </div>\n</template>\n\n<script>\nimport RequiredFieldsIndicator from \"./RequiredFieldsIndicator.vue\";\n\nexport default {\n props: {\n showRequiredFieldsIndicator: {\n default: true,\n },\n showCancelButton: {\n default: true,\n },\n cancelButtonText: {\n default: \"Cancelar\",\n },\n showSubmitButton: {\n default: true,\n },\n submitButtonText: {\n default: \"Salvar\",\n },\n submitButtonLoadingText: {\n default: \"Carregando...\",\n },\n disableSubmitButton: {\n default: false,\n },\n loading: {\n default: false,\n },\n readOnly: {\n default: false,\n },\n },\n components: {\n RequiredFieldsIndicator,\n },\n emits: [\"close\", \"submit\"],\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <section class=\"text-center\">\n <v-progress-circular\n color=\"primary\"\n indeterminate\n size=\"50\"\n ></v-progress-circular>\n </section>\n</template>\n\n<script>\nexport default {};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-dialog v-model=\"showModal\" :max-width=\"maxWidth\" :scrollable=\"scrollable\">\n <v-form\n @submit.prevent\n :lazy-validation=\"true\"\n ref=\"formRef\"\n :readonly=\"readOnly\"\n >\n <v-card>\n <FormTitle\n :form-action=\"formAction\"\n :form-subject=\"formSubject\"\n :show-close-button=\"showCloseButton\"\n @close=\"close\"\n />\n\n <v-card-text>\n <LoadingIndicator v-if=\"isLoadingData\" class=\"mt-3\" />\n\n <section v-else class=\"pa-5\">\n <slot />\n </section>\n </v-card-text>\n\n <FormFooter\n :loading=\"loading\"\n :read-only=\"readOnly\"\n :submit-button-loading-text=\"submitButtonLoadingText\"\n :submit-button-text=\"submitButtonText\"\n :show-submit-button=\"showSubmitButton\"\n :cancel-button-text=\"cancelButtonText\"\n :disable-submit-button=\"disableSubmitButton && !isLoadingData\"\n :show-cancel-button=\"showCancelButton\"\n @close=\"close\"\n @submit=\"submit\"\n />\n </v-card>\n </v-form>\n </v-dialog>\n</template>\n\n<script>\nimport FormFooter from \"./FormFooter.vue\";\nimport FormTitle from \"./FormTitle.vue\";\nimport LoadingIndicator from \"./LoadingIndicator.vue\";\n\nexport default {\n props: {\n formAction: {\n default: \"\",\n },\n formSubject: {\n default: \"\",\n },\n showCloseButton: {\n default: true,\n },\n isLoadingData: {\n default: false,\n },\n disableSubmitButton: {\n default: false,\n },\n loading: {\n default: false,\n },\n readOnly: {\n default: true,\n },\n submitButtonLoadingText: {\n required: false,\n },\n submitButtonText: {\n required: false,\n },\n showSubmitButton: {\n default: true,\n },\n cancelButtonText: {\n required: false,\n },\n showCancelButton: {\n default: true,\n },\n maxWidth: {\n default: \"80%\",\n },\n scrollable: {\n default: true,\n },\n validateOn: {\n default: \"submit\",\n },\n },\n data() {\n return {\n showModal: false,\n };\n },\n components: { FormTitle, FormFooter, LoadingIndicator },\n emits: [\"close\", \"submit\"],\n methods: {\n show() {\n this.showModal = true;\n this.resetFormValidation();\n },\n\n close() {\n this.$emit(\"close\");\n },\n\n hidden() {\n this.showModal = false;\n this.resetFormValidation();\n },\n\n submit() {\n this.$emit(\"submit\");\n },\n async validateForm() {\n const valid = await this.$refs?.formRef?.validate();\n\n return valid;\n },\n resetFormValidation() {\n this.$refs?.formRef?.resetValidation();\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-dialog v-model=\"showModal\" max-width=\"850px\">\n <v-card>\n <div class=\"d-flex justify-center\">\n <v-card-title class=\"headline\">\n Você possui edições não salvas. Tem certeza de que deseja continuar?\n </v-card-title>\n </div>\n\n <v-card-actions class=\"px-6 pb-6\">\n <v-spacer></v-spacer>\n <TextButton\n color=\"primary\"\n text=\"Cancelar\"\n buttonClass=\"mr-4\"\n @click=\"close\"\n />\n\n <TextButton\n color=\"secondary\"\n text=\"Continuar sem salvar\"\n buttonClass=\"mr-4\"\n @click=\"submit({ save: false })\"\n />\n\n <v-btn color=\"primary\" @click=\"submit({ save: true })\">\n Salvar e continuar\n </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { TextButton } from \"../buttons\";\n\nexport default {\n components: {\n TextButton,\n },\n data() {\n return {\n showModal: false,\n onSave: () => {},\n onWithoutSave: () => {},\n };\n },\n emits: [\"hidden\"],\n methods: {\n show({ onSave = () => {}, onWithoutSave = () => {} } = {}) {\n this.onSave = onSave;\n this.onWithoutSave = onWithoutSave;\n\n this.showModal = true;\n },\n close() {\n this.$emit(\"hidden\");\n },\n hidden() {\n this.onSave = () => {};\n this.onWithoutSave = () => {};\n\n this.showModal = false;\n },\n submit({ save = true }) {\n const handlerFunction = save ? this.onSave : this.onWithoutSave;\n\n this.hidden();\n handlerFunction();\n },\n },\n destroyed() {\n this.onSave = () => {};\n this.onWithoutSave = () => {};\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-dialog v-model=\"showModal\" max-width=\"850px\">\n <v-card>\n <div class=\"d-flex justify-center\">\n <v-card-title class=\"headline\">\n Tem certeza de que deseja excluir esta(s) linha(s)?\n </v-card-title>\n </div>\n\n <v-card-actions class=\"px-6 pb-6\">\n <v-spacer></v-spacer>\n <TextButton\n color=\"primary\"\n text=\"Cancelar\"\n buttonClass=\"mr-4\"\n @click=\"close\"\n />\n\n <v-btn color=\"primary\" @click=\"submit()\"> Confirmar </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { TextButton } from \"../buttons\";\n\nexport default {\n components: {\n TextButton,\n },\n data() {\n return {\n showModal: false,\n };\n },\n emits: [\"hidden\", \"submit\"],\n methods: {\n show() {\n this.showModal = true;\n },\n close() {\n this.$emit(\"hidden\");\n },\n hidden() {\n this.showModal = false;\n },\n submit() {\n this.hidden();\n this.$emit(\"submit\");\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-menu\n ref=\"menu\"\n v-model=\"menu\"\n :close-on-content-click=\"closeMenuOnContentClick\"\n transition=\"scale-transition\"\n offset-y\n min-width=\"auto\"\n >\n <template v-slot:activator=\"{ on }\">\n <v-text-field\n :value=\"formattedDates()\"\n :label=\"label\"\n append-icon=\"mdi-calendar\"\n readonly\n v-on=\"on\"\n :clearable=\"clearable\"\n @click:clear=\"clearSelectedFilter()\"\n hide-details=\"auto\"\n class=\"pb-2\"\n :disabled=\"disabled\"\n ></v-text-field>\n </template>\n\n <v-date-picker\n color=\"primary\"\n v-model=\"dates\"\n no-title\n scrollable\n :range=\"range\"\n @input=\"handleDateChange\"\n :disabled=\"disabled\"\n >\n </v-date-picker>\n </v-menu>\n</template>\n\n<script>\nimport moment from \"moment\";\n\nexport default {\n props: {\n label: { type: String, required: true },\n clearable: { type: Boolean, default: true },\n disabled: { type: Boolean, required: false },\n range: { type: Boolean, default: false },\n initialValue: { default: null },\n },\n\n data() {\n return {\n dates: \"\",\n menu: false,\n };\n },\n\n mounted() {\n this.dates = this.initialValue;\n },\n computed: {\n closeMenuOnContentClick() {\n return this.range ? false : true;\n },\n },\n methods: {\n handleDateChange(value) {\n this.dates = value;\n this.setDatepickerValue();\n },\n\n formattedDates() {\n if (!this.dates || this.dates.length === 0) return null;\n\n if (this.range) {\n return this.dates.length === 2\n ? `${moment(this.dates[0]).format(\"DD/MM/YYYY\")} - ${moment(\n this.dates[1]\n ).format(\"DD/MM/YYYY\")}`\n : moment(this.dates[0]).format(\"DD/MM/YYYY\");\n }\n\n return moment(this.dates).format(\"DD/MM/YYYY\");\n },\n\n setDatepickerValue() {\n let value = \"\";\n\n if (!this.range) {\n value = moment(this.dates).format(\"YYYY-MM-DD\");\n }\n\n if (this.range) {\n value =\n this.dates.length === 2\n ? [\n moment(this.dates[0]).format(\"YYYY-MM-DD\"),\n moment(this.dates[1]).format(\"YYYY-MM-DD\"),\n ]\n : [moment(this.dates[0]).format(\"YYYY-MM-DD\")];\n }\n\n this.$emit(\"setDatepickerValue\", value);\n },\n\n clearSelectedFilter() {\n this.dates = this.range ? [] : null;\n\n this.$emit(\"setDatepickerValue\", null);\n },\n },\n};\n</script>\n\n<style></style>\n","<template>\n <BaseFormLayout\n ref=\"formRef\"\n :form-action=\"formAction\"\n form-subject=\"item\"\n @close=\"close\"\n @submit=\"submit\"\n :read-only=\"false\"\n :is-loading-data=\"loadingData\"\n :loading=\"formSettings.loading\"\n >\n <template v-for=\"header in headers\">\n <v-row v-if=\"!header.hideInForm && header.type\" :key=\"header.value\">\n <v-col cols=\"12\">\n <v-autocomplete\n v-if=\"header.options && header.columnType !== 'radio'\"\n :label=\"getLabel(header)\"\n v-model=\"item[header.value]\"\n :items=\"getOptions(header, item)\"\n :clearable=\"!isRequired(header)\"\n item-label=\"text\"\n return-object\n :disabled=\"isDependentFieldEmpty(item, header)\"\n :messages=\"getDependentFieldMessage(item, header)\"\n :rules=\"getFieldValidations(item, header)\"\n @change=\"\n setSelectedOption(item, header.columnId, header.value, $event)\n \"\n hide-details=\"auto\"\n />\n\n <v-radio-group\n v-else-if=\"\n header.options &&\n header.columnType === 'radio' &&\n header.type === 'VARCHAR'\n \"\n class=\"mt-0 py-2\"\n v-model=\"item[header.value]\"\n :rules=\"getFieldValidations(item, header)\"\n hide-details=\"auto\"\n >\n <template v-slot:label>\n <span class=\"text-subtitle-1\">\n {{ getLabel(header) }}\n </span>\n </template>\n\n <template class=\"d-flex\">\n <v-radio\n v-for=\"option in getOptions(header, item)\"\n :key=\"option.id\"\n class=\"d-flex align-center\"\n :ripple=\"false\"\n :value=\"option.text\"\n >\n <template v-slot:label>\n <span class=\"mr-4\">{{ option.text }}</span>\n <span class=\"text-caption\">({{ option.description }})</span>\n </template>\n </v-radio>\n </template>\n </v-radio-group>\n\n <v-switch\n v-else-if=\"header.type === 'INT' && header.columnType === 'check'\"\n :label=\"getLabel(header)\"\n v-model=\"item[header.value]\"\n :rules=\"getFieldValidations(item, header)\"\n hide-details=\"auto\"\n />\n\n <v-text-field\n v-else-if=\"header.type === 'INT' && header.columnType !== 'check'\"\n v-model.number=\"item[header.value]\"\n :label=\"getLabel(header)\"\n type=\"number\"\n :counter=\"header.length\"\n :maxlength=\"header.length\"\n :rules=\"getFieldValidations(item, header)\"\n hide-details=\"auto\"\n />\n\n <v-text-field\n v-else-if=\"header.type === 'DECIMAL'\"\n v-model.number=\"item[header.value]\"\n @change=\"formatFloat(item[header.value])\"\n :label=\"getLabel(header)\"\n type=\"number\"\n :counter=\"header.length\"\n :maxlength=\"header.length\"\n :rules=\"getFieldValidations(item, header)\"\n hide-details=\"auto\"\n />\n\n <v-text-field\n v-else-if=\"header.type === 'VARCHAR' || header.type === 'TEXT'\"\n v-model=\"item[header.value]\"\n :label=\"getLabel(header)\"\n type=\"text\"\n :counter=\"header.length\"\n :maxlength=\"header.length\"\n :rules=\"getFieldValidations(item, header)\"\n hide-details=\"auto\"\n />\n\n <DatePicker\n v-else-if=\"header.type === 'DATE' || header.type === 'DATETIME'\"\n :label=\"header.text\"\n :initial-value=\"item[header.value]\"\n @setDatepickerValue=\"item[header.value] = $event\"\n :rules=\"getFieldValidations(item, header)\"\n hide-details=\"auto\"\n />\n </v-col>\n </v-row>\n </template>\n </BaseFormLayout>\n</template>\n\n<script>\nimport BaseFormLayout from \"./BaseFormLayout.vue\";\nimport { DatePicker } from \"../date-pickers\";\n\nexport default {\n components: {\n BaseFormLayout,\n DatePicker,\n },\n props: {\n headers: {\n type: Array,\n required: true,\n },\n primaryKey: {\n type: String,\n required: true,\n },\n formSettings: {\n type: Object,\n required: true,\n },\n },\n data() {\n return {\n formAction: \"Novo\",\n loadingData: false,\n item: {},\n };\n },\n emits: [\"hidden\", \"submit\"],\n created() {\n this.item = { ...(this.formSettings.baseModel ?? {}) };\n },\n\n computed: {\n formOptionsByColumnMap() {\n const optionsMap = new Map();\n\n if (!this.formSettings?.formOptions?.length) return optionsMap;\n\n for (const option of this.formSettings?.formOptions) {\n optionsMap.set(option.column, option);\n }\n\n return optionsMap;\n },\n headersByValueMap() {\n const headersMap = new Map();\n\n if (!this.headers.length) return headersMap;\n\n for (const header of this.headers) {\n headersMap.set(header.value, header);\n }\n\n return headersMap;\n },\n },\n\n methods: {\n async show(item = null) {\n try {\n this.loadingData = true;\n this.item = { ...(this.formSettings.baseModel ?? {}) };\n\n if (item) {\n this.formAction = item[this.primaryKey] ? \"Editar\" : \"Criar\";\n\n if (this?.formSettings?.hooks?.beforeSetItem)\n await this?.formSettings?.hooks?.beforeSetItem(item);\n\n this.item = { ...item };\n\n if (this?.formSettings?.hooks?.afterSetItem)\n await this?.formSettings?.hooks?.afterSetItem(this.item);\n }\n\n this.$refs?.formRef?.show();\n } catch (error) {\n this.$fnError(error);\n } finally {\n this.loadingData = false;\n }\n },\n close() {\n this.$emit(\"hidden\");\n },\n hidden() {\n this.$refs?.formRef?.hidden();\n this.formAction = \"Novo\";\n },\n async submit() {\n const isFormValid = await this.$refs.formRef?.validateForm();\n\n if (!isFormValid) return;\n\n this.$emit(\"submit\", { ...this.item });\n },\n getDependentFieldMessage(item, header) {\n const option = this.formOptionsByColumnMap.get(header.value);\n\n const dependsOnField = option?.dependsOn;\n\n if (!dependsOnField) return;\n\n if (!this.isDependentFieldEmpty(item, header)) return;\n\n const dependentFieldHeader = this.headersByValueMap.get(dependsOnField);\n\n if (!dependentFieldHeader) return;\n\n return `O campo ${header.text?.toLowerCase()} depende do campo ${dependentFieldHeader.text?.toLowerCase()}.`;\n },\n isDependentFieldEmpty(item, header) {\n const option = this.formOptionsByColumnMap.get(header.value);\n\n const dependsOnField = option?.dependsOn;\n\n if (!dependsOnField) return false;\n\n const isFieldEmpty =\n item[dependsOnField] === null ||\n item[dependsOnField] === undefined ||\n item[dependsOnField] === \"\";\n\n if (isFieldEmpty) return true;\n\n return false;\n },\n getOptions(header, item) {\n const option = this.formOptionsByColumnMap.get(header.value);\n\n if (!option) return [];\n\n if (!option.dependsOn) return option.items;\n\n const dependsOnField = option.dependsOn;\n const dependsOnItemField = item[dependsOnField];\n\n const fieldEmpty =\n dependsOnItemField === null ||\n dependsOnItemField === undefined ||\n dependsOnItemField === \"\";\n\n if (dependsOnField && fieldEmpty) {\n return [];\n }\n\n return option.items;\n },\n getRequiredFieldMessage(field) {\n return `O campo ${field} é obrigatorio!`;\n },\n getFieldValidations(item, header) {\n const field = header.value;\n const fieldValue = item[field];\n const validations = [];\n\n const isRequired = this.isRequired(header);\n const isFieldEmpty = [null, undefined, \"\"].includes(fieldValue);\n\n if (isRequired && isFieldEmpty) {\n validations.push(\n this.getRequiredFieldMessage(header?.text?.toLowerCase() ?? \"\")\n );\n }\n\n return validations;\n },\n formatFloat(float) {\n if (float === undefined || float === null) return \"\";\n\n return this?.$options?.filters?.floatFilter(float);\n },\n isRequired(header) {\n if (!header.rules) return false;\n return header.rules?.includes(\"required\");\n },\n getLabel(header) {\n const isRequired = this.isRequired(header);\n\n if (!isRequired) return header.text;\n\n return `${header.text} *`;\n },\n formatCheckboxValue(check) {\n if (!check) return false;\n\n return true;\n },\n setSelectedOption(item, columnId, column, option) {\n const formOption = this.formOptionsByColumnMap.get(column);\n\n if (formOption.hooks?.beforeChange) formOption.hooks?.beforeChange(item);\n\n const columnIdValue = option ? option.id : null;\n const columnValue = option ? option.text : null;\n\n item[columnId] = columnIdValue;\n item[column] = columnValue;\n\n if (formOption.hooks?.afterChange) formOption.hooks?.afterChange(item);\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <v-navigation-drawer\n temporary\n hide-overlay\n absolute\n right\n v-model=\"showDrawer\"\n width=\"500\"\n >\n <section class=\"d-flex justify-end mt-3 w-100 mb-2\">\n <ClearFilterButton\n button-class=\"mr-4\"\n min-width=\"48px\"\n @click=\"$emit('clear:filters')\"\n />\n <RefreshButton\n button-class=\"mr-4\"\n min-width=\"48px\"\n @click=\"$emit('refresh')\"\n />\n <CloseTableButton button-class=\"mr-3\" @click=\"close\" />\n </section>\n\n <section\n class=\"h-100 d-flex justify-center align-center\"\n v-if=\"isLoadingData\"\n >\n <LoadingIndicator class=\"mt-4\" />\n </section>\n\n <section v-else class=\"mx-3 mt-4\">\n <section v-if=\"filters?.length\">\n <v-tabs v-model=\"tabIndex\" height=\"30\">\n <v-tab v-for=\"[tabIndex, tab] in filters.entries()\" :key=\"tabIndex\">\n {{ tab.title }}\n </v-tab>\n </v-tabs>\n\n <v-tabs-items v-model=\"tabIndex\" class=\"mt-3\">\n <v-tab-item\n v-for=\"[tabIndex, tab] in filters.entries()\"\n :key=\"tabIndex\"\n >\n <v-row\n no-gutters\n v-for=\"filter of tab.filters\"\n :key=\"`${filter.column}-${filter.type}`\"\n >\n <v-col>\n <v-autocomplete\n v-if=\"filter.component === 'v-autocomplete'\"\n v-model=\"filter.value\"\n :items=\"filter.items\"\n item-text=\"text\"\n item-value=\"id\"\n :return-object=\"false\"\n v-bind=\"filter.componentProps\"\n @change=\"changeFilterValue($event, filter)\"\n :disabled=\"isFieldDependentFieldEmpty(filter)\"\n />\n\n <v-checkbox\n v-else-if=\"filter.component === 'v-checkbox'\"\n v-model=\"filter.value\"\n hide-details\n style=\"\n display: inline-block;\n white-space: nowrap;\n overflow: hidden !important;\n text-overflow: ellipsis;\n \"\n v-bind=\"filter.componentProps\"\n @change=\"changeFilterValue($event, filter)\"\n :disabled=\"isFieldDependentFieldEmpty(filter)\"\n />\n\n <DatePicker\n v-else-if=\"filter.component === 'date-picker'\"\n :initial-value=\"filter.value\"\n :label=\"filter.componentProps?.label\"\n v-bind=\"filter.componentProps\"\n @setDatepickerValue=\"changeFilterValue($event, filter)\"\n :disabled=\"isFieldDependentFieldEmpty(filter)\"\n />\n\n <v-text-field\n v-else-if=\"filter.component === 'v-text-field'\"\n v-model=\"filter.value\"\n type=\"text\"\n v-bind=\"filter.componentProps\"\n v-maska=\"filter.componentProps?.mask\"\n @change=\"changeFilterValue($event, filter)\"\n :disabled=\"isFieldDependentFieldEmpty(filter)\"\n />\n </v-col>\n </v-row>\n </v-tab-item>\n </v-tabs-items>\n </section>\n </section>\n </v-navigation-drawer>\n</template>\n\n<script>\nimport { ClearFilterButton, CloseTableButton, RefreshButton } from \"../buttons\";\nimport { DatePicker } from \"../date-pickers\";\nimport { LoadingIndicator } from \"../forms\";\n\nexport default {\n props: {\n filters: {\n type: Array,\n required: true,\n default: () => [],\n },\n },\n\n emits: [\"refresh\", \"hidden\", \"update:filter\", \"clear:filters\"],\n components: {\n LoadingIndicator,\n RefreshButton,\n CloseTableButton,\n ClearFilterButton,\n DatePicker,\n },\n data() {\n return {\n showDrawer: false,\n isLoadingData: false,\n tabIndex: 0,\n };\n },\n computed: {\n filterOptionIndexByColumnMap() {\n const filtersMap = new Map();\n\n if (!this.filters?.length) return filtersMap;\n\n for (const [tabIndex, tab] of this.filters.entries()) {\n for (const [filterIndex, primaryFilter] of tab?.filters.entries()) {\n filtersMap.set(primaryFilter.column, [tabIndex, filterIndex]);\n }\n }\n\n return filtersMap;\n },\n },\n methods: {\n show() {\n this.showDrawer = true;\n },\n close() {\n this.$emit(\"hidden\");\n },\n hidden() {\n this.showDrawer = false;\n },\n setFilter(value, key) {\n this.$emit(\"update:filter\", key, value);\n },\n isFieldDependentFieldEmpty(filter) {\n const dependsOnField = filter?.dependsOn;\n\n if (!dependsOnField) return false;\n\n const filterIndex = this.filterOptionIndexByColumnMap.get(dependsOnField);\n\n if (isNaN(filterIndex)) return true;\n\n const dependentFilter =\n this.filters[filterIndex[0]].filters[filterIndex[1]];\n\n const isFieldEmpty = !dependentFilter.value;\n\n if (isFieldEmpty) return true;\n\n return false;\n },\n changeFilterValue(value, filter) {\n filter.value = value;\n if (filter?.hooks.afterChange) filter?.hooks.afterChange(value);\n },\n },\n watch: {},\n created() {},\n destroyed() {},\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.h-100 {\n height: 100%;\n}\n</style>\n","<template>\n <BaseViewLayout\n ref=\"baseViewLayoutRef\"\n :table-icon=\"tableIcon\"\n :table-name=\"tableName\"\n @closeTable=\"closeTable\"\n >\n <template #action-buttons>\n <v-text-field\n append-icon=\"mdi-magnify\"\n label=\"Pesquisar\"\n hide-details\n single-line\n dense\n clearable\n class=\"mr-3\"\n :loading=\"loading\"\n @input=\"updateSearchFilter\"\n />\n\n <DuplicatedItemButton\n v-if=\"hasOnlyOneRowSelected\"\n buttonClass=\"mr-3 pa-0\"\n @click=\"duplicateSelectedItem(selectedRows[0])\"\n />\n\n <EditItemButton\n v-if=\"hasOnlyOneRowSelected\"\n buttonClass=\"mr-3 pa-0\"\n @click=\"showBaseCrudForm(selectedRows[0])\"\n />\n\n <UndoChangesButton\n v-if=\"hasOnlyOneRowSelected && selectedRowIsEdited\"\n @click=\"undoSelectedItemModification(selectedRows[0])\"\n buttonClass=\"mr-3 pa-0\"\n />\n\n <DeleteItemButton\n v-if=\"hasRowsSelected\"\n color=\"secondary\"\n buttonClass=\"mr-3 pa-0\"\n :loading=\"loadingDelete\"\n @click=\"showConfirmDeleteDialog()\"\n />\n\n <FiltersButton\n v-if=\"hasSecondaryFilters\"\n @click=\"showSecondaryFilters\"\n buttonClass=\"mr-4 pa-0\"\n />\n\n <NewItemButton\n :disabled=\"!hasFetch || !headers?.length\"\n buttonClass=\"mr-3 pa-0\"\n @click=\"showBaseCrudForm()\"\n />\n\n <RefreshButton\n :disabled=\"!allRequiredFilterAreFilled\"\n @click=\"handleReload\"\n :loading=\"loading\"\n buttonClass=\"mr-3 pa-0\"\n />\n\n <SaveButton\n :disabled=\"!rowsChanged.size\"\n @click=\"handleSave\"\n :loading=\"loadingSave\"\n buttonClass=\"mr-3 pa-0\"\n />\n\n <ImportFileButton\n @click=\"importFile\"\n @changeFile=\"handleImport\"\n @getFileUploaderRef=\"getFileUploaderRef\"\n :loading=\"loadingImport\"\n :disabled=\"!allRequiredFilterAreFilled\"\n buttonClass=\"mr-3 pa-0\"\n />\n\n <ExportFileButton\n @click=\"handleExport\"\n buttonClass=\"mr-3 pa-0\"\n :loading=\"loadingExport\"\n :disabled=\"!allRequiredFilterAreFilled\"\n />\n </template>\n\n <template #primary-filters>\n <section v-if=\"hasPrimaryFilters\">\n <v-tabs v-model=\"primaryFilterTab\" height=\"30\">\n <v-tab\n v-for=\"[tabIndex, tab] in filters.primary.entries()\"\n :key=\"tabIndex\"\n >\n {{ tab.title }}\n </v-tab>\n </v-tabs>\n\n <v-tabs-items v-model=\"primaryFilterTab\" class=\"mt-3\">\n <v-tab-item\n v-for=\"[tabIndex, tab] in filters.primary.entries()\"\n :key=\"tabIndex\"\n >\n <v-row>\n <v-col\n v-for=\"primaryFilter of tab.filters\"\n :key=\"primaryFilter.column\"\n class=\"flex-grow-1\"\n :cols=\"primaryFilter.componentProps?.cols || 'auto'\"\n :md=\"primaryFilter.componentProps?.md || undefined\"\n :sm=\"primaryFilter.componentProps?.sm || undefined\"\n :lg=\"primaryFilter.componentProps?.lg || undefined\"\n :xl=\"primaryFilter.componentProps?.xl || undefined\"\n >\n <v-autocomplete\n v-if=\"primaryFilter.component === 'v-autocomplete'\"\n v-model=\"primaryFilter.value\"\n :items=\"primaryFilter.items\"\n v-bind=\"{\n 'item-value':\n primaryFilter.componentProps?.itemValue ?? 'id',\n 'item-text':\n primaryFilter.componentProps?.itemText ?? 'text',\n ...primaryFilter.componentProps,\n }\"\n @change=\"changeFilterValue($event, primaryFilter)\"\n :disabled=\"isFieldDependentFieldEmpty(primaryFilter)\"\n />\n\n <v-checkbox\n v-else-if=\"primaryFilter.component === 'v-checkbox'\"\n v-model=\"primaryFilter.value\"\n hide-details\n style=\"\n display: inline-block;\n white-space: nowrap;\n overflow: hidden !important;\n text-overflow: ellipsis;\n \"\n v-bind=\"primaryFilter.componentProps\"\n @change=\"changeFilterValue($event, primaryFilter)\"\n :disabled=\"isFieldDependentFieldEmpty(primaryFilter)\"\n />\n\n <DatePicker\n v-else-if=\"primaryFilter.component === 'date-picker'\"\n :initial-value=\"primaryFilter.value\"\n @setDatepickerValue=\"changeFilterValue($event, primaryFilter)\"\n :label=\"primaryFilter.componentProps?.label\"\n v-bind=\"primaryFilter.componentProps\"\n />\n\n <v-text-field\n v-else-if=\"primaryFilter.component === 'v-text-field'\"\n v-model=\"primaryFilter.value\"\n v-bind=\"{\n type: 'text',\n ...primaryFilter.componentProps,\n }\"\n @change=\"changeFilterValue($event, primaryFilter)\"\n :disabled=\"isFieldDependentFieldEmpty(primaryFilter)\"\n v-maska=\"primaryFilter.componentProps?.mask\"\n />\n </v-col>\n </v-row>\n </v-tab-item>\n </v-tabs-items>\n </section>\n </template>\n\n <RequiredFilterMessage\n v-if=\"!allRequiredFilterAreFilled\"\n :message=\"requiredFilterMessage\"\n />\n\n <LoadingIndicator v-else-if=\"loading\" class=\"mt-4\" />\n\n <section\n v-else-if=\"!loading && !apiData.length && hasFetch\"\n class=\"d-flex justify-center align-center text-h6 primary--text\"\n >\n Não há dados disponíveis\n </section>\n\n <section v-else-if=\"!loading && !apiData.length && !hasFetch\"></section>\n\n <section v-else class=\"mt-4 flex-grow-1 d-flex flex-column\">\n <v-data-table\n :show-select=\"readOnly ? false : true\"\n v-model=\"selectedRows\"\n :headers=\"tableHeaders\"\n :items=\"apiData\"\n :loading=\"loading\"\n fixed-header\n class=\"text-no-wrap d-flex flex-column\"\n :item-key=\"primaryKey\"\n :options.sync=\"paginationOptions\"\n v-bind=\"{\n serverItemsLength: useServerSidePagination\n ? paginationSettings.serverItemsLength\n : undefined,\n search: !useServerSideSearch ? filters?.search : undefined,\n }\"\n :footer-props=\"{\n itemsPerPageOptions: paginationSettings.itemsPerPageOptions,\n }\"\n >\n <template v-slot:item=\"{ item, select, isSelected }\">\n <tr\n :class=\"{\n 'selected-row': isSelected,\n 'edited-row': itemHasBeenEdited(item),\n }\"\n class=\"table-row\"\n >\n <td>\n <v-simple-checkbox\n color=\"secondary\"\n :value=\"isSelected\"\n @input=\"select($event)\"\n :ripple=\"false\"\n />\n </td>\n\n <template v-for=\"(header, headerIndex) in tableHeaders\">\n <td\n :key=\"headerIndex\"\n :class=\"{\n 'actions-column text-end': header.value === 'actions',\n }\"\n >\n <template v-if=\"header.value === 'actions'\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn icon v-on=\"on\" @click=\"showBaseCrudForm(item)\">\n <v-icon> mdi-pencil </v-icon>\n </v-btn>\n </template>\n <span>Editar item</span>\n </v-tooltip>\n\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n icon\n v-on=\"on\"\n @click=\"showConfirmDeleteDialog(item)\"\n >\n <v-icon> mdi-delete </v-icon>\n </v-btn>\n </template>\n <span>Deletar item</span>\n </v-tooltip>\n </template>\n\n <div\n v-else-if=\"\n header.type === 'INT' && header.columnType === 'check'\n \"\n style=\"width: 100%\"\n class=\"d-flex justify-center align-center\"\n >\n <v-simple-checkbox\n color=\"primary\"\n :value=\"formatCheckboxValue(item[header.value])\"\n @input=\"setCheckboxValue($event, item, header.value)\"\n :ripple=\"false\"\n :disabled=\"header.editable\"\n >\n </v-simple-checkbox>\n </div>\n\n <div v-else-if=\"header.img\" class=\"d-flex justify-center\">\n <v-avatar v-if=\"item[header.value]\" class=\"my-1\" size=\"54\">\n <v-img :src=\"item[header.value]\">\n <template v-slot:placeholder>\n <v-skeleton-loader type=\"avatar\"></v-skeleton-loader>\n </template>\n </v-img>\n </v-avatar>\n\n <v-avatar v-else class=\"my-1\" size=\"54\">\n <v-sheet>\n <v-icon color=\"primary\" size=\"62\">\n mdi-account-circle\n </v-icon>\n </v-sheet>\n </v-avatar>\n </div>\n\n <v-edit-dialog\n v-else-if=\"header.options\"\n :return-value.sync=\"item[header.value]\"\n large\n cancel-text=\"Cancelar\"\n save-text=\"Alterar\"\n persistent\n @cancel=\"cancelItemEditDialog(header, item)\"\n @open=\"setBackupEditedItem(item)\"\n @save=\"saveItemEditDialog(item)\"\n >\n <template v-slot:input>\n <v-autocomplete\n v-if=\"header.columnType !== 'radio'\"\n :label=\"header.text\"\n v-model=\"item[header.value]\"\n :items=\"getOptions(header, item)\"\n item-label=\"text\"\n return-object\n :clearable=\"!isRequired(header)\"\n @change=\"\n setSelectedOption(\n item,\n header.columnId,\n header.value,\n $event\n )\n \"\n />\n\n <v-select\n v-else\n :label=\"header.text\"\n :items=\"header.options\"\n item-value=\"text\"\n v-model=\"item[header.value]\"\n :clearable=\"!isRequired(header)\"\n />\n </template>\n\n {{ getFormatedItemValue(header, item[header.value]) }}\n </v-edit-dialog>\n\n <v-edit-dialog\n v-else-if=\"!header.options && header.editable\"\n :return-value.sync=\"item[header.value]\"\n large\n cancel-text=\"Cancelar\"\n save-text=\"Alterar\"\n persistent\n @cancel=\"cancelItemEditDialog(header, item)\"\n @open=\"setBackupEditedItem(item)\"\n @save=\"saveItemEditDialog(item)\"\n >\n <template v-slot:input>\n <v-text-field\n v-if=\"header.type === 'VARCHAR' || header.type === 'TEXT'\"\n v-model=\"item[header.value]\"\n :label=\"header.text\"\n type=\"text\"\n single-line\n :counter=\"header.length\"\n :maxlength=\"header.length\"\n />\n\n <v-text-field\n v-if=\"\n header.type === 'INT' && header.columnType !== 'check'\n \"\n v-model.number=\"item[header.value]\"\n :label=\"header.text\"\n type=\"number\"\n single-line\n :counter=\"header.length\"\n :maxlength=\"header.length\"\n />\n\n <v-text-field\n v-if=\"header.type === 'DECIMAL'\"\n v-model.number=\"item[header.value]\"\n @change=\"formatFloat(item[header.value])\"\n :label=\"header.text\"\n type=\"number\"\n single-line\n :counter=\"header.length\"\n :maxlength=\"header.length\"\n />\n\n <DatePicker\n v-if=\"\n header.type === 'DATETIME' || header.type === 'DATE'\n \"\n :initial-value=\"item[header.value]\"\n :label=\"header.text\"\n @setDatepickerValue=\"item[header.value] = $event\"\n />\n </template>\n\n <span\n class=\"d-flex\"\n :class=\"\n header.align === 'center'\n ? ' justify-center'\n : 'justify-start'\n \"\n >\n {{ getFormatedItemValue(header, item[header.value]) }}\n </span>\n </v-edit-dialog>\n\n <div\n v-else\n class=\"d-flex\"\n :class=\"\n header.align === 'center'\n ? ' justify-center'\n : 'justify-start'\n \"\n >\n {{ getFormatedItemValue(header, item[header.value]) }}\n </div>\n </td>\n </template>\n </tr>\n </template>\n\n <template v-slot:footer.prepend>\n <slot name=\"footer-prepend\"></slot>\n </template>\n </v-data-table>\n </section>\n\n <UnsavedChangesDialog\n ref=\"unsavedChangesDialogRef\"\n @hidden=\"closeUnsavedChangesDialog\"\n />\n <ConfirmDeleteDialog\n ref=\"confirmDeleteDialogRef\"\n @submit=\"deleteSelectedRows\"\n @hidden=\"closeConfirmDeleteDialog\"\n />\n\n <BaseCrudForm\n ref=\"baseCrudFormRef\"\n @hidden=\"closeBaseCrudForm\"\n @submit=\"handleSubmit\"\n :headers=\"headers\"\n :primary-key=\"primaryKey\"\n :formSettings=\"formSettings\"\n />\n\n <BaseCrudSecondaryFiltersDrawer\n ref=\"baseCrudSecondaryFiltersDrawerRef\"\n :filters=\"filters?.secondary\"\n @hidden=\"closeSecondaryFilters\"\n @refresh=\"handleReload\"\n @clear:filters=\"clearSecondaryFilters\"\n />\n </BaseViewLayout>\n</template>\n\n<script>\nimport BaseViewLayout from \"./BaseViewLayout.vue\";\nimport {\n ImportFileButton,\n ExportFileButton,\n RefreshButton,\n DeleteItemButton,\n NewItemButton,\n DuplicatedItemButton,\n EditItemButton,\n SaveButton,\n UndoChangesButton,\n FiltersButton,\n} from \"../buttons\";\nimport {\n ConfirmDeleteDialog,\n LoadingIndicator,\n UnsavedChangesDialog,\n BaseCrudForm,\n} from \"../forms\";\nimport RequiredFilterMessage from \"./RequiredFilterMessage.vue\";\nimport { DatePicker } from \"../date-pickers\";\nimport { BaseCrudSecondaryFiltersDrawer } from \"../drawers\";\n\nexport default {\n props: {\n tableIcon: {\n type: String,\n required: true,\n },\n tableName: {\n type: String,\n required: true,\n },\n endpoint: {\n type: Array,\n required: true,\n },\n filters: {\n type: Object,\n required: false,\n },\n tableOptions: {\n type: Array,\n },\n formOptions: {\n type: Array,\n required: false,\n default: () => [],\n },\n apiData: {\n type: Array,\n required: true,\n default: () => [],\n },\n headers: {\n type: Array,\n required: true,\n default: () => [],\n },\n loading: {\n type: Boolean,\n required: true,\n default: false,\n },\n hasFetch: {\n type: Boolean,\n required: true,\n default: false,\n },\n paginationSettings: {\n type: Object,\n required: true,\n },\n useServerSidePagination: {\n type: Boolean,\n required: false,\n default: false,\n },\n useServerSideSearch: {\n type: Boolean,\n required: false,\n default: false,\n },\n primaryKey: {\n type: String,\n required: true,\n },\n rowsChanged: {\n type: Set,\n required: true,\n },\n onReload: {\n type: Function,\n required: true,\n },\n onExport: {\n type: Function,\n required: true,\n },\n onImport: {\n type: Function,\n required: true,\n },\n onSave: {\n type: Function,\n required: true,\n },\n onDelete: {\n type: Function,\n required: true,\n },\n formSettings: {\n type: Object,\n required: true,\n },\n \"update:rows-changed\": {\n type: Function,\n required: false,\n },\n \"update:row\": {\n type: Function,\n required: false,\n },\n },\n\n components: {\n BaseViewLayout,\n ImportFileButton,\n ExportFileButton,\n RefreshButton,\n DeleteItemButton,\n NewItemButton,\n DuplicatedItemButton,\n EditItemButton,\n UnsavedChangesDialog,\n RequiredFilterMessage,\n LoadingIndicator,\n DatePicker,\n SaveButton,\n ConfirmDeleteDialog,\n UndoChangesButton,\n BaseCrudForm,\n BaseCrudSecondaryFiltersDrawer,\n FiltersButton,\n },\n data() {\n return {\n selectedRows: [],\n selected: [],\n readOnly: false,\n fileUploaderRef: null,\n loadingExport: false,\n loadingImport: false,\n loadingSave: false,\n loadingDelete: false,\n backupEditedItemsMap: new Map(),\n tableMaxHeigth: 0,\n alreadySetTableHeigth: false,\n primaryFilterTab: 0,\n isComponentMounted: false,\n };\n },\n\n computed: {\n paginationOptions: {\n get() {\n return this.paginationSettings;\n },\n set(newValue) {\n const oldValue = this.paginationSettings;\n const isEqual =\n newValue.page === oldValue.page &&\n newValue.itemsPerPage === oldValue.itemsPerPage;\n\n if (isEqual) return;\n\n const paginationSettings = this.paginationSettings;\n\n paginationSettings.page = newValue.page;\n paginationSettings.itemsPerPage = newValue.itemsPerPage;\n paginationSettings.sortBy = newValue.sortBy;\n paginationSettings.sortDesc = newValue.sortDesc;\n\n if (this.useServerSidePagination) this.handleReload();\n },\n },\n itemsIndexByPrimaryKey() {\n const itemsMap = new Map();\n\n for (const [index, item] of this.apiData.entries()) {\n const itemPrimaryKey = item[this.primaryKey];\n\n itemsMap.set(itemPrimaryKey, index);\n }\n\n return itemsMap;\n },\n tableOptionsByColumnMap() {\n const tableOptionsMap = new Map();\n\n if (!this.tableOptions?.length) return tableOptionsMap;\n\n for (const tableOption of this.tableOptions) {\n tableOptionsMap.set(tableOption.column, tableOption);\n }\n\n return tableOptionsMap;\n },\n primaryFilterOptionIndexByColumnMap() {\n const primaryFiltersMap = new Map();\n\n if (!this.filters?.primary?.length) return primaryFiltersMap;\n\n for (const [tabIndex, tab] of this.filters?.primary.entries()) {\n for (const [filterIndex, primaryFilter] of tab?.filters.entries()) {\n primaryFiltersMap.set(primaryFilter.column, [tabIndex, filterIndex]);\n }\n }\n\n return primaryFiltersMap;\n },\n hasRowsSelected() {\n return this.selectedRows.length;\n },\n\n hasOnlyOneRowSelected() {\n return this.selectedRows.length === 1;\n },\n selectedRowIsEdited() {\n if (!this.hasOnlyOneRowSelected) return false;\n\n const itemPrimaryKey = this.selectedRows[0][this.primaryKey];\n\n if (!itemPrimaryKey) return false;\n\n const itemIndex = this.itemsIndexByPrimaryKey.get(itemPrimaryKey);\n\n if (isNaN(itemIndex)) return false;\n\n return this.rowsChanged.has(itemIndex);\n },\n requiredFilterMessage() {\n if (!this.filters?.primary?.length) return \"\";\n\n for (const tab of this?.filters?.primary) {\n for (const filter of tab.filters) {\n if (!filter?.componentProps?.required) continue;\n\n if (filter.value) continue;\n\n return this.getRequiredFilterMessage(filter?.componentProps?.label);\n }\n }\n\n return \"\";\n },\n allRequiredFilterAreFilled() {\n if (!this.filters?.primary?.length) return true;\n\n const requiredFilters = [];\n\n for (const tab of this?.filters?.primary) {\n requiredFilters.push(\n ...tab.filters.filter((filter) => filter?.componentProps?.required)\n );\n }\n\n if (!requiredFilters.length) return true;\n\n return requiredFilters.every((filter) => filter.value);\n },\n tableHeaders() {\n const headersArray = [];\n\n for (const header of this.headers) {\n if (header?.hideInTable) continue;\n\n headersArray.push(header);\n }\n\n return headersArray;\n },\n hasPrimaryFilters() {\n return this.filters?.primary.some((tab) => tab.filters.length);\n },\n hasSecondaryFilters() {\n return this.filters?.secondary.some((tab) => tab.filters.length);\n },\n },\n methods: {\n getOptions(header, item) {\n const tableOption = this.tableOptionsByColumnMap.get(header.value);\n\n if (tableOption?.filterFunction) {\n return tableOption.filterFunction(item) ?? [];\n }\n\n return tableOption?.items ?? [];\n },\n getFormatedItemValue(header, value) {\n const tableOption = this.tableOptionsByColumnMap.get(header.value);\n\n if (!tableOption) return value;\n\n if (tableOption?.formatter) return tableOption.formatter(value);\n\n return value;\n },\n changeFilterValue(value, filter) {\n filter.value = value;\n if (filter?.hooks.afterChange) filter?.hooks.afterChange(value);\n },\n isFieldDependentFieldEmpty(filter) {\n if (!this.filters?.primary.length) return false;\n\n const dependsOnField = filter?.dependsOn;\n\n if (!dependsOnField) return false;\n\n const filterIndex =\n this.primaryFilterOptionIndexByColumnMap.get(dependsOnField);\n\n if (isNaN(filterIndex)) return true;\n\n const dependentFilter =\n this.filters.primary[filterIndex[0]].filters[filterIndex[1]];\n\n const isFieldEmpty = !dependentFilter.value;\n\n if (isFieldEmpty) return true;\n\n return false;\n },\n setSelectedOption(item, columnId, column, option) {\n if (!option) {\n item[columnId] = null;\n item[column] = null;\n return;\n }\n\n item[columnId] = option.id;\n item[column] = option.text;\n },\n formatFloat(float) {\n if (float === undefined || float === null) return \"\";\n\n return this?.$options?.filters?.floatFilter(float);\n },\n isRequired(header) {\n if (!header.rules) return false;\n return header.rules?.includes(\"required\");\n },\n formatCheckboxValue(check) {\n if (!check) return false;\n\n return true;\n },\n setCheckboxValue(value, item, headerValue) {\n this.setBackupEditedItem(item);\n\n const itemPrimaryKey = item[this.primaryKey];\n\n if (!itemPrimaryKey) return;\n\n const itemIndex = this.itemsIndexByPrimaryKey.get(itemPrimaryKey);\n\n if (isNaN(itemIndex)) return;\n\n this.rowsChanged.add(itemIndex);\n this.$emit(\"update:rows-changed\");\n\n if (value) return (item[headerValue] = 1);\n item[headerValue] = 0;\n },\n getFileUploaderRef(e) {\n this.fileUploaderRef = e;\n },\n\n closeTable() {\n if (this.rowsChanged.size) {\n return this.showUnsavedChangesDialog({\n onSave: async () => {\n const res = await this.handleSave({ reload: false });\n\n if (res?.error) return;\n\n this.$router.push(\"/\");\n },\n onWithoutSave: () => {\n this.$router.push(\"/\");\n },\n });\n }\n\n this.$router.push(\"/\");\n },\n async handleSave({ reload = true, itemData = null } = {}) {\n try {\n this.loadingSave = true;\n await this.onSave({ reload, itemData });\n\n if (itemData) this.closeBaseCrudForm();\n } catch (error) {\n this.$fnError(error);\n return { error: true };\n } finally {\n this.loadingSave = false;\n }\n },\n async handleReload() {\n if (this.rowsChanged.size) {\n return this.showUnsavedChangesDialog({\n onSave: async () => {\n const res = await this.handleSave({ reload: false });\n\n if (res?.error) return;\n\n this.reload();\n },\n onWithoutSave: () => {\n this.reload();\n },\n });\n }\n\n this.reload();\n },\n showUnsavedChangesDialog({\n onSave = () => {},\n onWithoutSave = () => {},\n } = {}) {\n this.$refs.unsavedChangesDialogRef?.show({\n onSave,\n onWithoutSave,\n });\n },\n closeUnsavedChangesDialog() {\n this.$refs.unsavedChangesDialogRef?.hidden();\n },\n async reload() {\n if (!this.allRequiredFilterAreFilled) return;\n\n try {\n this.alreadySetTableHeigth = false;\n await this.onReload();\n } catch (error) {\n this.$fnError(error);\n }\n },\n getRequiredFilterMessage(requiredFilter) {\n return `Selecione o filtro obrigatório ${requiredFilter} e atualize para exibir dados`;\n },\n importFile() {\n this.fileUploaderRef?.click();\n },\n async handleImport(event) {\n try {\n this.loadingImport = true;\n\n await this.onImport(event);\n } catch (error) {\n this.$fnError(error);\n } finally {\n event.target.value = \"\";\n this.loadingImport = false;\n }\n },\n async handleExport() {\n try {\n this.loadingExport = true;\n await this.onExport();\n } catch (error) {\n this.$fnError(error);\n } finally {\n this.loadingExport = false;\n }\n },\n async deleteSelectedRows() {\n try {\n this.loadingDelete = true;\n\n await this.onDelete(this.selectedRows);\n\n this.selectedRows = [];\n } catch (error) {\n this.$fnError(error);\n } finally {\n this.loadingDelete = false;\n }\n },\n async showConfirmDeleteDialog(row = null) {\n if (row) this.selectedRows.push(row);\n\n this.$refs.confirmDeleteDialogRef?.show();\n },\n closeConfirmDeleteDialog() {\n this.$refs.confirmDeleteDialogRef?.hidden();\n },\n itemHasBeenEdited(item) {\n const itemPrimaryKey = item[this.primaryKey];\n\n if (!itemPrimaryKey) return;\n\n const itemIndex = this.itemsIndexByPrimaryKey.get(itemPrimaryKey);\n\n if (isNaN(itemIndex)) return;\n\n return this.rowsChanged.has(itemIndex);\n },\n setBackupEditedItem(item) {\n const itemPrimaryKey = item[this.primaryKey];\n\n if (!itemPrimaryKey) return;\n\n if (this.backupEditedItemsMap.has(itemPrimaryKey)) return;\n\n this.backupEditedItemsMap.set(itemPrimaryKey, { ...item });\n },\n cancelItemEditDialog(header, item) {\n const itemPrimaryKey = item[this.primaryKey];\n\n if (!itemPrimaryKey) return;\n\n if (!this.backupEditedItemsMap.has(itemPrimaryKey)) return;\n\n const itemBackup = this.backupEditedItemsMap.get(itemPrimaryKey);\n\n item[header.value] = itemBackup[header.value];\n\n if (header.columnId) {\n item[header.columnId] = itemBackup[header.columnId];\n }\n },\n saveItemEditDialog(item) {\n const itemPrimaryKey = item[this.primaryKey];\n\n if (!itemPrimaryKey) return;\n\n const itemIndex = this.itemsIndexByPrimaryKey.get(itemPrimaryKey);\n\n if (isNaN(itemIndex)) return;\n\n this.rowsChanged.add(itemIndex);\n this.$emit(\"update:rows-changed\");\n },\n undoSelectedItemModification(row) {\n if (!row) return;\n\n const itemPrimaryKey = row[this.primaryKey];\n\n if (!itemPrimaryKey) return;\n\n const backupItem = this.backupEditedItemsMap.get(itemPrimaryKey);\n\n if (!backupItem) return;\n\n const itemIndex = this.itemsIndexByPrimaryKey.get(itemPrimaryKey);\n\n if (isNaN(itemIndex)) return;\n\n this.$emit(\"update:row\", itemIndex, backupItem);\n this.rowsChanged.delete(itemIndex);\n this.$emit(\"update:rows-changed\");\n },\n showBaseCrudForm(row = null) {\n this.$refs.baseCrudFormRef?.show(row);\n },\n closeBaseCrudForm() {\n this.$refs.baseCrudFormRef?.hidden();\n },\n async handleSubmit(data) {\n try {\n await this.handleSave({ itemData: data });\n } catch (error) {\n this.$fnError(error);\n }\n },\n duplicateSelectedItem(row) {\n const duplicatedRowData = { ...row };\n\n delete duplicatedRowData[this.primaryKey];\n\n this.showBaseCrudForm(duplicatedRowData);\n },\n\n updateSearchFilter(value) {\n if (!this.filters) return;\n\n const filters = this.filters;\n\n filters.search = value;\n },\n\n showSecondaryFilters() {\n this.$refs.baseCrudSecondaryFiltersDrawerRef?.show();\n },\n closeSecondaryFilters() {\n this.$refs.baseCrudSecondaryFiltersDrawerRef?.hidden();\n },\n clearSecondaryFilters() {\n if (!this.filters?.secondary?.length) return;\n\n for (const tab of this?.filters?.secondary) {\n for (const filter of tab.filters) {\n if (filter.type !== \"filter\") continue;\n\n filter.value = null;\n }\n }\n },\n },\n created() {\n this.paginationOptions = this.paginationSettings;\n },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.edited-row {\n background-color: #fdebb9b6;\n}\n\n.edited-row:hover {\n background-color: #fad777b6 !important;\n}\n\n.sum-row {\n background-color: #ddd;\n font-weight: bold;\n}\n\n.sum-row:hover {\n background-color: #ddd !important;\n}\n\n.selected-row {\n background-color: #eee !important;\n}\n\n.selected-row:hover {\n background-color: #ddd !important;\n}\n</style>\n","<template>\n <HotTable\n ref=\"hotTable\"\n v-bind=\"$attrs\"\n v-on=\"$listeners\"\n :licenseKey=\"licenseKey\"\n language=\"pt-BR\"\n >\n <slot />\n </HotTable>\n</template>\n\n<script>\nimport { HotTable } from \"@handsontable/vue\";\nimport \"../../../public/styles/handsontable/custom-handsontable.css\";\nimport \"handsontable/dist/handsontable.full.min.css\";\n\nexport default {\n components: {\n HotTable,\n },\n computed: {\n licenseKey() {\n if (!this.$configs.licenseKey) return \"\";\n\n return this.$configs.licenseKey;\n },\n hotInstance() {\n return this.$refs.hotTable.hotInstance;\n },\n hotTableRef() {\n return this.$refs.hotTable;\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <div class=\"month-selector d-flex align-center\">\n <!-- Checkbox com Label -->\n <v-checkbox\n label=\"Mês\"\n v-model=\"showMonths\"\n :disabled=\"disabled\"\n dense\n hide-details\n class=\"pa-0 ma-0\"\n @change=\"onCheckboxChange\"\n />\n\n <!-- Botão de menu -->\n <v-menu bottom left :close-on-content-click=\"false\">\n <template v-slot:activator=\"{ on }\">\n <v-btn icon v-on=\"on\" x-small class=\"ma-0 pa-0\" :disabled=\"disabled\">\n <v-icon>mdi-dots-vertical</v-icon>\n </v-btn>\n </template>\n\n <v-sheet class=\"px-4 py-2\" max-width=\"260px\">\n <v-select\n v-model=\"selectedMonths\"\n :items=\"months\"\n label=\"Escolha os meses\"\n multiple\n return-object\n @change=\"updateSelection\"\n >\n <template v-slot:selection=\"{ item, index }\">\n <span v-if=\"index === 0\">{{ item.text }}</span>\n <span v-if=\"index === 1\">, {{ item.text }}</span>\n <template v-if=\"index === 2\">\n <span>...</span>\n <span class=\"grey--text text-caption pa-1\">\n +{{ selectedMonths.length - 2 }}\n </span>\n </template>\n </template>\n </v-select>\n\n <div class=\"d-flex justify-end\">\n <v-btn\n small\n color=\"primary\"\n class=\"ma-0 mb-2\"\n @click=\"selectAll\"\n :disabled=\"selectedMonths.length === 12\"\n >\n Selecionar todos\n </v-btn>\n </div>\n </v-sheet>\n </v-menu>\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n isYear2: {\n type: Boolean,\n default: false,\n },\n value: {\n type: Array,\n required: true,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n const months = [\n { text: \"Janeiro\", value: 1 },\n { text: \"Fevereiro\", value: 2 },\n { text: \"Março\", value: 3 },\n { text: \"Abril\", value: 4 },\n { text: \"Maio\", value: 5 },\n { text: \"Junho\", value: 6 },\n { text: \"Julho\", value: 7 },\n { text: \"Agosto\", value: 8 },\n { text: \"Setembro\", value: 9 },\n { text: \"Outubro\", value: 10 },\n { text: \"Novembro\", value: 11 },\n { text: \"Dezembro\", value: 12 },\n ];\n\n return {\n months,\n selectedMonths: this.value.length ? this.value : [...months],\n showMonths: !this.isYear2,\n };\n },\n\n watch: {\n value(newValue) {\n this.selectedMonths = newValue.length ? newValue : [...this.months];\n },\n },\n\n methods: {\n selectAll() {\n this.selectedMonths = [...this.months];\n this.$emit(\"input\", this.selectedMonths);\n },\n\n onCheckboxChange() {\n if (this.showMonths) {\n this.selectedMonths = [...this.months];\n } else {\n this.selectedMonths = [];\n }\n this.$emit(\"input\", this.selectedMonths);\n },\n\n updateSelection() {\n this.$emit(\"input\", this.selectedMonths);\n },\n },\n};\n</script>\n","<template>\n <div class=\"quarter-selector d-flex align-center\">\n <!-- Checkbox com Label -->\n <v-checkbox\n label=\"Tri\"\n v-model=\"showQuarters\"\n :disabled=\"disabled\"\n dense\n hide-details\n class=\"pa-0 ma-0\"\n @change=\"onCheckboxChange\"\n />\n\n <v-menu bottom left :close-on-content-click=\"false\">\n <template v-slot:activator=\"{ on }\">\n <v-btn icon v-on=\"on\" x-small class=\"ma-0 pa-0\" :disabled=\"disabled\">\n <v-icon>mdi-dots-vertical</v-icon>\n </v-btn>\n </template>\n\n <v-sheet class=\"px-4 py-2\" max-width=\"260px\">\n <v-select\n v-model=\"selectedQuarters\"\n :items=\"quarters\"\n label=\"Escolha os trimestres\"\n multiple\n return-object\n @change=\"updateSelection\"\n >\n <template v-slot:selection=\"{ item, index }\">\n <span v-if=\"index === 0\">{{ item.text }}</span>\n <span v-if=\"index === 1\">, {{ item.text }}</span>\n <template v-if=\"index === 2\">\n <span>...</span>\n <span class=\"grey--text text-caption pa-1\">\n +{{ selectedQuarters.length - 2 }}\n </span>\n </template>\n </template>\n </v-select>\n\n <div class=\"d-flex justify-end\">\n <v-btn\n small\n color=\"primary\"\n class=\"ma-0 mb-2\"\n @click=\"selectAll\"\n :disabled=\"selectedQuarters.length === 12\"\n >\n Selecionar todos\n </v-btn>\n </div>\n </v-sheet>\n </v-menu>\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n value: {\n type: Array,\n required: true,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n const quarters = [\n { text: \"1º Trimestre\", value: 1 },\n { text: \"2º Trimestre\", value: 2 },\n { text: \"3º Trimestre\", value: 3 },\n { text: \"4º Trimestre\", value: 4 },\n ];\n return {\n quarters,\n selectedQuarters: this.value.length ? this.value : [...quarters],\n showQuarters: false,\n };\n },\n\n watch: {\n value(newValue) {\n this.selectedQuarters = newValue;\n },\n },\n\n methods: {\n selectAll() {\n this.selectedQuarters = [...this.quarters];\n this.$emit(\"input\", this.selectedQuarters);\n },\n\n onCheckboxChange() {\n if (this.showQuarters) {\n this.selectedQuarters = [...this.quarters];\n } else {\n this.selectedQuarters = [];\n }\n this.$emit(\"input\", this.selectedQuarters, this.showQuarters);\n },\n\n updateSelection() {\n this.$emit(\"input\", this.selectedQuarters, this.showQuarters);\n },\n },\n};\n</script>\n","<template>\n <div class=\"semester-selector d-flex align-center\">\n <v-checkbox\n label=\"Sem\"\n v-model=\"showSemesters\"\n :disabled=\"disabled\"\n dense\n hide-details\n class=\"pa-0 ma-0\"\n @change=\"onCheckboxChange\"\n />\n\n <v-menu bottom left :close-on-content-click=\"false\">\n <template v-slot:activator=\"{ on }\">\n <v-btn icon v-on=\"on\" x-small class=\"ma-0 pa-0\" :disabled=\"disabled\">\n <v-icon>mdi-dots-vertical</v-icon>\n </v-btn>\n </template>\n\n <v-sheet class=\"px-4 py-2\" max-width=\"260px\">\n <v-select\n v-model=\"selectedSemesters\"\n :items=\"semesters\"\n label=\"Escolha os semestres\"\n multiple\n return-object\n @change=\"updateSelection\"\n >\n <template v-slot:selection=\"{ item, index }\">\n <span v-if=\"index === 0\">{{ item.text }}</span>\n <span v-if=\"index === 1\">, {{ item.text }}</span>\n </template>\n </v-select>\n\n <div class=\"d-flex justify-end\">\n <v-btn\n small\n color=\"primary\"\n class=\"ma-0 mb-2\"\n @click=\"selectAll\"\n :disabled=\"selectedSemesters.length === 2\"\n >\n Selecionar todos\n </v-btn>\n </div>\n </v-sheet>\n </v-menu>\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n value: {\n type: Array,\n required: true,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n const semesters = [\n { text: \"1º Semestre\", value: 1 },\n { text: \"2º Semestre\", value: 2 },\n ];\n return {\n semesters,\n selectedSemesters: this.value.length ? this.value : [...semesters],\n showSemesters: false,\n };\n },\n\n watch: {\n value(newValue) {\n this.selectedSemesters = newValue;\n },\n },\n\n methods: {\n selectAll() {\n this.selectedSemesters = [...this.semesters];\n this.$emit(\"input\", this.selectedSemesters);\n },\n\n onCheckboxChange() {\n if (this.showSemesters) {\n this.selectedSemesters = [...this.semesters];\n } else {\n this.selectedSemesters = [];\n }\n this.$emit(\"input\", this.selectedSemesters);\n },\n\n updateSelection() {\n this.$emit(\"input\", this.selectedSemesters);\n },\n },\n};\n</script>\n","<template>\n <div class=\"year-selector d-flex align-center\">\n <v-checkbox\n v-model=\"yearSelected\"\n label=\"Ano\"\n :disabled=\"disabled\"\n :input-value=\"yearSelected\"\n dense\n hide-details\n class=\"pa-0 ma-0\"\n @change=\"updateSelection\"\n />\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n value: {\n type: Boolean,\n default: true,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n return {\n yearSelected: this.value,\n };\n },\n\n watch: {\n value(newValue) {\n this.yearSelected = newValue;\n },\n },\n\n methods: {\n updateSelection() {\n this.$emit(\"input\", this.yearSelected);\n },\n },\n};\n</script>\n","<template>\n <div class=\"period-selector\">\n <span class=\"text-h6 mr-4\">{{ yearLabel }}</span>\n <div class=\"d-flex mt-1\">\n <MonthSelector\n :isYear2=\"isYear2\"\n :value=\"selectedMonths\"\n :disabled=\"disableActionButtons\"\n @input=\"updateMonths\"\n />\n\n <QuarterSelector\n :value=\"selectedQuarters\"\n :disabled=\"disableActionButtons\"\n @input=\"updateQuarters\"\n />\n\n <SemesterSelector\n :value=\"selectedSemesters\"\n :disabled=\"disableActionButtons\"\n @input=\"updateSemesters\"\n />\n\n <YearSelector\n :value=\"yearSelected\"\n :disabled=\"disableActionButtons\"\n @input=\"updateYear\"\n />\n </div>\n </div>\n</template>\n\n<script>\nimport MonthSelector from \"./MonthSelector.vue\";\nimport QuarterSelector from \"./QuarterSelector.vue\";\nimport SemesterSelector from \"./SemesterSelector.vue\";\nimport YearSelector from \"./YearSelector.vue\";\n\nexport default {\n components: {\n MonthSelector,\n QuarterSelector,\n SemesterSelector,\n YearSelector,\n },\n\n props: {\n year: {\n type: Number,\n required: true,\n },\n isYear2: {\n type: Boolean,\n default: false,\n },\n disableActionButtons: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n const months = [\n { text: \"Janeiro\", value: 1 },\n { text: \"Fevereiro\", value: 2 },\n { text: \"Março\", value: 3 },\n { text: \"Abril\", value: 4 },\n { text: \"Maio\", value: 5 },\n { text: \"Junho\", value: 6 },\n { text: \"Julho\", value: 7 },\n { text: \"Agosto\", value: 8 },\n { text: \"Setembro\", value: 9 },\n { text: \"Outubro\", value: 10 },\n { text: \"Novembro\", value: 11 },\n { text: \"Dezembro\", value: 12 },\n ];\n return {\n selectedMonths: this.isYear2 ? [] : months,\n selectedQuarters: [],\n selectedSemesters: [],\n yearSelected: !this.isYear2,\n };\n },\n\n computed: {\n yearLabel() {\n return this.year.toString();\n },\n },\n\n methods: {\n updateMonths(value) {\n this.selectedMonths = value;\n this.updateSelection();\n },\n\n updateQuarters(value) {\n this.selectedQuarters = value;\n this.updateSelection();\n },\n\n updateSemesters(value) {\n this.selectedSemesters = value;\n this.updateSelection();\n },\n\n updateYear(value) {\n this.yearSelected = value;\n this.updateSelection();\n },\n\n updateSelection() {\n this.$emit(\"update:selection\", {\n months: this.selectedMonths,\n quarters: this.selectedQuarters,\n semesters: this.selectedSemesters,\n yearSelected: this.yearSelected,\n });\n },\n },\n};\n</script>\n\n<style scoped>\n.period-selector {\n display: flex;\n align-items: center;\n}\n</style>\n","<template>\n <div class=\"view\">\n <v-row align=\"center\" no-gutters>\n <div class=\"d-flex justify-start\">\n <PeriodSelector\n :isYear2=\"false\"\n :year=\"year1\"\n :disable-action-buttons=\"disableActionButtons\"\n @update:selection=\"updateYear1Selection\"\n />\n\n <v-divider vertical v-if=\"year2\" class=\"mx-4\" />\n\n <PeriodSelector\n v-if=\"year2\"\n isYear2\n :year=\"year2\"\n :disable-action-buttons=\"disableActionButtons\"\n @update:selection=\"updateYear2Selection\"\n />\n </div>\n </v-row>\n </div>\n</template>\n\n<script>\nimport PeriodSelector from \"./PeriodSelector.vue\";\n\nexport default {\n components: {\n PeriodSelector,\n },\n\n props: {\n year1: {\n type: Number,\n required: true,\n },\n year2: {\n type: Number,\n default: null,\n },\n disableActionButtons: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n return {\n year1Selection: {},\n year2Selection: {},\n };\n },\n\n methods: {\n updateYear1Selection(selection) {\n this.year1Selection = selection;\n this.$emit(\"update:year1\", selection);\n },\n\n updateYear2Selection(selection) {\n this.year2Selection = selection;\n this.$emit(\"update:year2\", selection);\n },\n },\n};\n</script>\n","import {\n Column,\n CreateFilterTab,\n CrudViewConfigsParams,\n CurrentFiltersOptions,\n Endpoint,\n Filter,\n FiltersOptions,\n FilterTab,\n FormHooks,\n FormOption,\n FormSettings,\n Header,\n PaginationSettings,\n TableOption,\n} from \"./types\";\n\nexport class CrudViewConfigs {\n tableName = \"\";\n tableIcon = \"\";\n hasFetch = false;\n readOnly = false;\n allowExport = false;\n allowImport = false;\n baseTransaction = \"\";\n useServerSidePagination = false;\n useServerSideSearch = false;\n primaryKey = \"\";\n endpoint: Endpoint;\n paginationSettings: PaginationSettings = {\n page: 1,\n itemsPerPage: 15,\n serverItemsLength: null,\n sortBy: [],\n sortDesc: [],\n itemsPerPageOptions: [5, 10, 15, 25, 50, 100, -1],\n };\n headers: Header[] = [];\n columns: Column[] = [];\n apiData: any[] = [];\n searchColums: string[] = [];\n rowsChanged = new Set<number>();\n filters: FiltersOptions = {\n primary: [\n {\n filters: [],\n title: \"Filtros Principais\",\n },\n ],\n secondary: [{ filters: [], title: \"Filtros Secundários\" }],\n search: \"\",\n };\n currentFilters: CurrentFiltersOptions = {\n primary: [],\n secondary: [],\n search: \"\",\n };\n loading = false;\n tableOptions: TableOption[] = [];\n formSettings: FormSettings = {\n baseModel: {},\n formOptions: [],\n hooks: {},\n loading: false,\n };\n\n private avalibleFilterComponents = new Set([\n \"v-autocomplete\",\n \"v-checkbox\",\n \"date-picker\",\n \"v-text-field\",\n ]);\n private avalibleFormOptionHooks = new Set([\"afterChange\", \"beforeChange\"]);\n private avalibleFilterOptionHooks = new Set([\"afterChange\"]);\n private avalibleFormHooks = new Set([\"beforeSetItem\", \"afterSetItem\"]);\n\n constructor({\n viewTitle,\n viewIcon,\n primaryKey,\n endpoint,\n baseTransaction,\n readOnly = false,\n allowExport = true,\n allowImport = true,\n useServerSidePagination = false,\n useServerSideSearch = false,\n }: CrudViewConfigsParams) {\n this.tableName = viewTitle;\n this.tableIcon = viewIcon;\n this.primaryKey = primaryKey;\n this.readOnly = readOnly;\n this.allowExport = allowExport;\n this.allowImport = allowImport;\n this.baseTransaction = baseTransaction;\n this.endpoint = this.isValidEndpoint(endpoint)\n ? (endpoint as Endpoint)\n : CrudViewConfigs.generateEndpoint();\n\n this.useServerSidePagination = useServerSidePagination;\n if (useServerSidePagination) useServerSideSearch = true;\n\n this.useServerSideSearch = useServerSideSearch;\n }\n\n get viewConfigs() {\n return {\n tableName: this.tableName,\n tableIcon: this.tableIcon,\n headers: this.headers,\n columns: this.columns,\n apiData: this.apiData,\n useServerSidePagination: this.useServerSidePagination,\n useServerSideSearch: this.useServerSideSearch,\n paginationSettings: this.paginationSettings,\n searchColums: this.searchColums,\n primaryKey: this.primaryKey,\n loading: this.loading,\n rowsChanged: this.rowsChanged,\n filters: this.filters,\n currentFilters: this.currentFilters,\n tableOptions: this.tableOptions,\n formSettings: this.formSettings,\n endpoint: this.endpoint,\n hasFetch: this.hasFetch,\n };\n }\n\n get viewMethods() {\n return {\n getFilters: this.getFilters.bind(this),\n getDisplayFilters: this.getDisplayFilters.bind(this),\n fetchTableOptionsData: this.fetchTableOptionsData.bind(this),\n fetchFormOptionsData: this.fetchFormOptionsData.bind(this),\n fetchFiltersData: this.fetchFiltersData.bind(this),\n setCurrentFilters: this.setCurrentFilters.bind(this),\n validateFiltersKeyHaveChange:\n this.validateFiltersKeyHaveChange.bind(this),\n };\n }\n\n private validateFiltersKeyHaveChange(\n filters: FiltersOptions,\n currentFilters: CurrentFiltersOptions,\n keysToValidate = [\"search\", \"primary\", \"secondary\"]\n ) {\n const filtersToCheck = this.getCurrentFilters(filters);\n\n return keysToValidate.some((key) => {\n if (Array.isArray(filters[key])) {\n return filtersToCheck[key].some(\n (filterValue: any, index: number) =>\n filterValue !== currentFilters[key][index]\n );\n }\n\n return filters[key] !== currentFilters[key];\n });\n }\n\n private getSearchFilters(searchValue: string, searchColums: string[]) {\n return searchColums.map((column) => ({\n AndOr: \"OR\",\n column,\n operator: \"CONTAINS\",\n value: searchValue,\n type: \"search\",\n }));\n }\n\n private getFilters(filters: FiltersOptions, searchColums: string[]) {\n const conditions: any[] = [];\n\n filters?.primary?.forEach((tab) => {\n tab.filters.forEach((filter) => {\n if (filter?.type === \"display\") return;\n\n if ([null, undefined].includes(filter.value)) return;\n\n const isDateFilter = filter.component === \"date-picker\";\n\n if (isDateFilter) {\n const isRange = filter.componentProps?.range;\n return conditions.push({\n AndOr: \"AND\",\n column: filter.column,\n operator: isRange ? \"BETWEEN\" : \"=\",\n value: isRange ? filter.value[0] : filter.value,\n value2: isRange ? filter.value[1] : null,\n });\n }\n\n const isCheckBoxFilter = filter.component === \"v-checkbox\";\n\n if (isCheckBoxFilter) {\n return conditions.push({\n AndOr: \"AND\",\n column: filter.column,\n operator: \"=\",\n value: filter.value ? 1 : 0,\n });\n }\n\n if (!filter.componentProps?.multiple) {\n return conditions.push({\n AndOr: \"AND\",\n column: filter.column,\n operator: \"=\",\n value: filter.value,\n });\n }\n\n if (!filter.value.length) return;\n\n conditions.push({\n AndOr: \"AND\",\n column: filter.column,\n operator: \"IN\",\n value: filter.value,\n });\n });\n });\n\n filters?.secondary?.forEach((tab) => {\n tab.filters.forEach((filter) => {\n if (filter?.type === \"display\") return;\n if ([null, undefined].includes(filter.value)) return;\n\n const isDateInput = filter.component === \"date-picker\";\n\n if (isDateInput) {\n const isRange = filter.componentProps?.range;\n\n return conditions.push({\n AndOr: \"AND\",\n column: filter.column,\n operator: isRange ? \"BETWEEN\" : \"=\",\n value: isRange ? filter.value[0] : filter.value,\n value2: isRange ? filter.value[2] : null,\n });\n }\n\n const isCheckBoxFilter = filter.component === \"v-checkbox\";\n\n if (isCheckBoxFilter) {\n return conditions.push({\n AndOr: \"AND\",\n column: filter.column,\n operator: \"=\",\n value: filter.value ? 1 : 0,\n });\n }\n\n if (!filter.componentProps?.multiple) {\n return conditions.push({\n AndOr: \"AND\",\n column: filter.column,\n operator: \"=\",\n value: filter.value,\n });\n }\n\n if (!filter.value.length) return;\n\n conditions.push({\n AndOr: \"AND\",\n column: filter.column,\n operator: \"IN\",\n value: filter.value,\n });\n });\n });\n\n if (filters?.search && searchColums?.length) {\n const searchConditions = this.getSearchFilters(\n filters.search,\n searchColums\n );\n\n conditions.push(...searchConditions);\n }\n\n return conditions;\n }\n\n private getDisplayFilters(filters: FiltersOptions) {\n const displayFilters: [string, boolean | number][] = [];\n\n filters?.primary?.forEach((tab) => {\n tab.filters.forEach((filter) => {\n if (filter?.type !== \"display\") return;\n\n displayFilters.push([filter.column, filter.value]);\n });\n });\n\n filters?.secondary?.forEach((tab) => {\n tab.filters.forEach((filter) => {\n if (filter?.type !== \"display\") return;\n\n displayFilters.push([filter.column, filter.value]);\n });\n });\n\n return displayFilters;\n }\n\n private setCurrentFilters(filters: FiltersOptions) {\n this.currentFilters.primary = [];\n this.currentFilters.secondary = [];\n this.currentFilters.search = \"\";\n\n filters?.primary?.forEach((tab) => {\n tab.filters.forEach((filter) => {\n if (filter?.type === \"display\") return;\n\n this.currentFilters.primary.push(filter.value);\n });\n });\n\n filters?.secondary?.forEach((tab) => {\n tab.filters.forEach((filter) => {\n if (filter?.type === \"display\") return;\n this.currentFilters.secondary.push(filter.value);\n });\n });\n\n this.currentFilters.search = filters.search;\n\n return this.currentFilters;\n }\n\n getCurrentFilters(filters: FiltersOptions) {\n const currentFilters: CurrentFiltersOptions = {\n primary: [],\n secondary: [],\n search: \"\",\n };\n\n filters?.primary?.forEach((tab) => {\n tab.filters.forEach((filter) => {\n if (filter?.type === \"display\") return;\n\n currentFilters.primary.push(filter.value);\n });\n });\n\n filters?.secondary?.forEach((tab) => {\n tab.filters.forEach((filter) => {\n if (filter?.type === \"display\") return;\n currentFilters.secondary.push(filter.value);\n });\n });\n\n currentFilters.search = filters.search;\n\n return currentFilters;\n }\n\n async fetchTableOption(tableOption: TableOption, httpFetcher: any) {\n if (!tableOption.endpoint?.length || !tableOption?.endpoint[0]) return;\n\n try {\n const response = await httpFetcher.post(\n tableOption.endpoint[0],\n tableOption.endpoint[1] ?? {}\n );\n tableOption.items = response?.data?.rows ?? [];\n } catch (error) {\n console.error(error);\n }\n }\n\n private async fetchTableOptionsData(\n tableOptions: TableOption[],\n httpFetcher: any\n ) {\n const optionsPromises: any[] = [];\n\n tableOptions.forEach((option: any) => {\n if (option?.ignoreOnFetchFunction) return optionsPromises.push(null);\n\n optionsPromises.push(this.fetchTableOption(option, httpFetcher));\n });\n\n await Promise.all(optionsPromises);\n }\n\n async fetchFormOption(formOption: FormOption, httpFetcher: any) {\n if (!formOption.endpoint?.length || !formOption?.endpoint[0]) return;\n\n try {\n formOption.loading = true;\n\n const response = await httpFetcher.post(\n formOption.endpoint[0],\n formOption.endpoint[1] ?? {}\n );\n\n formOption.items = response?.data?.rows ?? [];\n } catch (error) {\n console.error(error);\n } finally {\n formOption.loading = false;\n }\n }\n\n private async fetchFormOptionsData(\n formOptions: FormOption[],\n httpFetcher: any\n ) {\n const optionsPromises: any[] = [];\n\n formOptions.forEach((option: any) => {\n if (option.ignoreOnFetchFunction) return;\n\n optionsPromises.push(this.fetchFormOption(option, httpFetcher));\n });\n\n await Promise.all(optionsPromises);\n }\n\n async fetchFilter(filter: Filter, httpFetcher: any): Promise<void> {\n if (!filter.endpoint?.length || !filter.endpoint[0]) return;\n\n try {\n filter.componentProps.loading = true;\n\n const response = await httpFetcher.post(\n filter.endpoint[0],\n filter.endpoint[1] ?? {}\n );\n\n filter.items = response?.data?.rows ?? [];\n } catch (error) {\n console.error(error);\n } finally {\n filter.componentProps.loading = false;\n }\n }\n\n private async fetchFiltersData(filters: FiltersOptions, httpFetcher: any) {\n const filterPromises: Promise<any>[] = [];\n\n filters.primary.forEach((tab) => {\n tab.filters.forEach((filter) => {\n if (filter.ignoreOnFetchFunction) return;\n\n filterPromises.push(this.fetchFilter(filter, httpFetcher));\n });\n });\n\n filters.secondary.forEach((tab) => {\n tab.filters.forEach((filter) => {\n if (filter.ignoreOnFetchFunction) return;\n\n filterPromises.push(this.fetchFilter(filter, httpFetcher));\n });\n });\n\n await Promise.all([filterPromises]);\n }\n\n static generateEndpoint(\n url = \"\",\n params = { conditions: [] as any[] }\n ): Endpoint {\n if (!url) return [\"\", params];\n\n return [url, params];\n }\n\n private isValidEndpoint(endpoint: any) {\n if (!Array.isArray(endpoint)) return false;\n\n if (!endpoint?.length) return false;\n\n if (typeof endpoint[0] !== \"string\") return false;\n\n return true;\n }\n\n private isValidColumn(column: any) {\n if (typeof column !== \"string\") return false;\n\n return true;\n }\n\n private isValidItemsArray(column: any) {\n if (!Array.isArray(column)) return false;\n\n return true;\n }\n\n createFilterTab(title: string): CreateFilterTab {\n const tab = { title, filters: [] } as FilterTab;\n\n const builder = {\n addFilter: (filterData: Filter) => {\n tab.filters.push(this.generateFilter(filterData));\n return builder;\n },\n build: () => tab,\n } as CreateFilterTab;\n\n return builder;\n }\n\n addNewPrimaryFilterTab(tab: FilterTab) {\n this.filters.primary.push(tab);\n return this;\n }\n\n addPrimaryFilter(filterData: Filter) {\n this.filters.primary[0].filters.push(this.generateFilter(filterData));\n return this;\n }\n\n addNewSecondaryFilterTab(tab: FilterTab) {\n this.filters.secondary.push(tab);\n return this;\n }\n\n addSecondaryFilter(filterData: Filter) {\n this.filters.secondary[0].filters.push(this.generateFilter(filterData));\n return this;\n }\n\n generateFilter({\n column = \"\",\n component,\n items = [],\n value = null,\n endpoint = CrudViewConfigs.generateEndpoint(),\n componentProps = {},\n hooks = {},\n dependsOn = \"\",\n ignoreOnFetchFunction = false,\n type = \"filter\",\n }: Filter) {\n if (!this.avalibleFilterComponents.has(component))\n throw new Error(\n `O componente: ${component} escolhido para o filtro do tipo: ${type} não é um componente valido!`\n );\n\n const hooksKeys = Object.keys(hooks);\n\n for (const hookKey of hooksKeys) {\n if (this.avalibleFilterOptionHooks.has(hookKey)) continue;\n\n throw new Error(\n `O hook ${hookKey}, não esta disponivel para o filtro: ${column} do tipo: ${type} do componente: ${component}!`\n );\n }\n\n return {\n column: this.isValidColumn(column) ? column : \"\",\n component,\n items: this.isValidItemsArray(items) ? items : [],\n value: value ?? null,\n endpoint: this.isValidEndpoint(endpoint)\n ? endpoint\n : CrudViewConfigs.generateEndpoint(),\n componentProps: {\n loading: false,\n returnObject: false,\n ...componentProps,\n },\n dependsOn,\n hooks,\n ignoreOnFetchFunction,\n type,\n };\n }\n\n setTableOptions(tableOptions: TableOption[] = []) {\n this.tableOptions = tableOptions;\n\n return this;\n }\n\n addTableOption({\n column = \"\",\n items = [],\n endpoint,\n formatter,\n filterFunction,\n ignoreOnFetchFunction = false,\n }: TableOption) {\n this.tableOptions.push({\n column: this.isValidColumn(column) ? column : \"\",\n endpoint: this.isValidEndpoint(endpoint)\n ? endpoint\n : CrudViewConfigs.generateEndpoint(),\n items: this.isValidItemsArray(items) ? items : [],\n formatter,\n filterFunction,\n ignoreOnFetchFunction,\n });\n\n return this;\n }\n\n setFormSettings({\n baseModel = {},\n formOptions = [],\n hooks = {},\n loading = false,\n }: FormSettings) {\n this.formSettings = {\n baseModel,\n formOptions,\n hooks,\n loading,\n };\n\n return this;\n }\n\n setFormModel(model: Record<PropertyKey, any>) {\n this.formSettings.baseModel = model;\n return this;\n }\n\n setFormOptions(formOptions: FormOption[]) {\n this.formSettings.formOptions = formOptions;\n return this;\n }\n\n addFormOption({\n column = \"\",\n items = [],\n dependsOn = \"\",\n endpoint,\n hooks,\n ignoreOnFetchFunction = false,\n componentProps,\n component,\n loading = false,\n }: FormOption) {\n if (hooks) {\n const hooksKeys = Object.keys(hooks);\n\n for (const hookKey of hooksKeys) {\n if (this.avalibleFormOptionHooks.has(hookKey)) continue;\n\n throw new Error(\n `O hook ${hookKey}, não esta disponivel para o form option: ${column}!`\n );\n }\n }\n\n this.formSettings.formOptions.push({\n column: this.isValidColumn(column) ? column : \"\",\n items: this.isValidItemsArray(items) ? items : [],\n loading,\n endpoint: this.isValidEndpoint(endpoint)\n ? (endpoint as Endpoint)\n : CrudViewConfigs.generateEndpoint(),\n dependsOn,\n hooks,\n ignoreOnFetchFunction,\n componentProps,\n component,\n });\n\n return this;\n }\n\n setFormHooks(hooks: FormHooks = {}) {\n const hooksKeys = Object.keys(hooks);\n\n for (const hookKey of hooksKeys) {\n if (this.avalibleFormHooks.has(hookKey)) continue;\n\n throw new Error(`O hook ${hookKey}, não esta disponivel como form hook!`);\n }\n\n this.formSettings.hooks = hooks;\n\n return this;\n }\n\n setPaginationSettings({\n page = 1,\n itemsPerPage = 15,\n itemsPerPageOptions = [],\n serverItemsLength = 0,\n sortBy = [],\n sortDesc = [],\n }: PaginationSettings) {\n this.paginationSettings.page = page;\n this.paginationSettings.itemsPerPage = itemsPerPage;\n this.paginationSettings.serverItemsLength = serverItemsLength;\n\n if (itemsPerPageOptions?.length)\n this.paginationSettings.itemsPerPageOptions = itemsPerPageOptions;\n if (sortBy.length) this.paginationSettings.sortBy = sortBy;\n if (sortDesc.length) this.paginationSettings.sortDesc = sortDesc;\n\n return this;\n }\n}\n","import * as components from \"./components\";\n\nexport const plugin = {\n install(Vue, options = {}) {\n Vue.prototype.$configs = options;\n\n Object.entries(components).forEach(([name, component]: [string, any]) => {\n Vue.component(name, component);\n });\n },\n};\n\nexport * as components from \"./components\";\nexport * as utils from \"./utils\";\n"],"names":["_sfc_main","e","_sfc_main$k","CloseTableButton","ViewHeader","appBar","availableHeight","container","_sfc_main$i","RequiredFieldsIndicator","FormTitle","FormFooter","LoadingIndicator","_b","_a","TextButton","onSave","onWithoutSave","save","handlerFunction","value","moment","BaseFormLayout","DatePicker","optionsMap","option","_c","headersMap","header","item","_d","_f","_e","_h","_g","_j","_i","error","dependsOnField","dependentFieldHeader","dependsOnItemField","fieldEmpty","field","fieldValue","validations","isRequired","isFieldEmpty","float","check","columnId","column","formOption","columnIdValue","columnValue","RefreshButton","ClearFilterButton","filtersMap","tabIndex","tab","filterIndex","primaryFilter","key","filter","BaseViewLayout","ImportFileButton","ExportFileButton","DeleteItemButton","NewItemButton","DuplicatedItemButton","EditItemButton","UnsavedChangesDialog","RequiredFilterMessage","SaveButton","ConfirmDeleteDialog","UndoChangesButton","BaseCrudForm","BaseCrudSecondaryFiltersDrawer","FiltersButton","newValue","oldValue","paginationSettings","itemsMap","index","itemPrimaryKey","tableOptionsMap","tableOption","primaryFiltersMap","itemIndex","requiredFilters","headersArray","headerValue","res","reload","itemData","requiredFilter","event","row","itemBackup","backupItem","data","duplicatedRowData","filters","HotTable","months","quarters","semesters","MonthSelector","QuarterSelector","SemesterSelector","YearSelector","PeriodSelector","selection","CrudViewConfigs","viewTitle","viewIcon","primaryKey","endpoint","baseTransaction","readOnly","allowExport","allowImport","useServerSidePagination","useServerSideSearch","__publicField","currentFilters","keysToValidate","filtersToCheck","filterValue","searchValue","searchColums","conditions","isRange","searchConditions","displayFilters","httpFetcher","response","tableOptions","optionsPromises","formOptions","filterPromises","url","params","title","builder","filterData","component","items","componentProps","hooks","dependsOn","ignoreOnFetchFunction","type","hooksKeys","hookKey","formatter","filterFunction","baseModel","loading","model","page","itemsPerPage","itemsPerPageOptions","serverItemsLength","sortBy","sortDesc","plugin","Vue","options","components","name"],"mappings":"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"}
|
package/dist/style.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.znap-crud-full-height-container[data-v-78062916]{height:calc(100vh - 64px);max-height:calc(100vh - 64px);overflow:hidden;display:flex;flex-direction:column;position:relative}.znap-crud-full-height-container[data-v-78062916] .v-container{height:100%;max-height:100%;padding:16px;margin:0;overflow:hidden}.znap-crud-full-height-container[data-v-78062916] .v-card{height:100%;max-height:100%;overflow:hidden;display:flex;flex-direction:column;border-radius:4px;margin:0}.znap-crud-full-height-container[data-v-78062916] .flex-grow-1{flex:1 1 auto;min-height:0;overflow:hidden;display:flex;flex-direction:column}.znap-crud-full-height-container[data-v-78062916] .v-layout{height:100%;flex:1 1 auto;overflow:hidden}.znap-crud-full-height-container[data-v-78062916] .v-data-table{height:100%;max-height:none;display:flex;flex-direction:column}.znap-crud-full-height-container[data-v-78062916] .v-data-table__wrapper{flex:1 1 auto;overflow:auto;min-height:0}.znap-crud-full-height-container[data-v-78062916] .v-data-table__header,.znap-crud-full-height-container[data-v-78062916] .v-data-footer,.znap-crud-full-height-container[data-v-78062916] .v-toolbar{flex-shrink:0}.h-100[data-v-af7a55c2]{height:100%}.edited-row[data-v-1cea94ef]{background-color:#fdebb9b6}.edited-row[data-v-1cea94ef]:hover{background-color:#fad777b6!important}.sum-row[data-v-1cea94ef]{background-color:#ddd;font-weight:700}.sum-row[data-v-1cea94ef]:hover{background-color:#ddd!important}.selected-row[data-v-1cea94ef]{background-color:#eee!important}.selected-row[data-v-1cea94ef]:hover{background-color:#ddd!important}:root{--header-bg-color: #e6e6e6;--header-bg-highlight-color: #d2d2d2;--header-border-color: #999999;--background-color: #ffffff;--border-light-color: #f1f1f1;--border-transparent: transparent;--primary-color: #ee488c;--primary-dark-color: #ff4190;--primary-light-color: #ffafd0;--primary-super-light-color: #fff0f6;--secondary-color: #faab48;--warning-color: #f7c383;--error-color: #f87979;--success-color: #78c07a;--text-color: #222222}.handsontable .table th,.handsontable .table td{color:var(--text-color)}.handsontable tr{background:var(--background-color)}.handsontable td{background-color:inherit;color:var(--text-color);white-space:pre!important;border-right:1px solid var(--border-transparent);border-bottom:1px solid var(--border-light-color)}.handsontable .table caption+thead tr:first-child th,.handsontable .table caption+thead tr:first-child td,.handsontable .table colgroup+thead tr:first-child th,.handsontable .table colgroup+thead tr:first-child td,.handsontable .table thead:first-child tr:first-child th,.handsontable .table thead:first-child tr:first-child td{border-top:1px solid var(--border-transparent)}.handsontableEditor.autocompleteEditor{-webkit-box-shadow:3px 3px 15px 3px #999!important;box-shadow:3px 3px 15px 3px #999!important;background-color:#fff!important}.handsontable .table-bordered th:first-child,.handsontable .table-bordered td:first-child{border-left:1px solid var(--border-transparent)}.handsontable .table-striped>tbody>tr:nth-of-type(2n){background-color:var(--background-color)}.handsontable th,.handsontable td{border-top-width:0;border-left-width:0;height:22px;font-size:14px;empty-cells:show;line-height:21px;padding:0 4px;background-color:var(--background-color);vertical-align:middle;overflow:hidden;outline-width:0;white-space:pre-wrap}.handsontable th:first-of-type{border-left:1px solid var(--header-border-color)}.handsontable td:last-of-type{border-right:1px solid var(--header-border-color)}.handsontable tr:last-of-type td{border-bottom:1px solid var(--header-border-color)}.handsontable td:nth-child(2){border-right:1px solid var(--header-border-color)}.handsontable th{background-color:var(--header-bg-color);color:var(--text-color);text-align:center;vertical-align:middle;font-weight:500;font-size:12px;white-space:nowrap;border:1px solid var(--header-border-color);border-left-width:0;border-top-width:0}.handsontable thead th{padding:0;border-top:1px solid var(--header-border-color)}.handsontable tbody th.ht__highlight,.handsontable thead th.ht__highlight{background-color:var(--header-bg-highlight-color)}.handsontable thead th.ht__highlight{border-bottom:3px solid var(--primary-color)}.handsontable tbody th.ht__highlight{border-right:3px solid var(--primary-color)}.handsontable th.active{background-color:var(--border-transparent)}.handsontable thead th .relative{padding:0}.handsontable span.colHeader{display:inline-block;line-height:1.1;margin:4px 0 0 -4px}.handsontable .wtBorder.current{z-index:10;background-color:var(--primary-color)!important}.handsontable .wtBorder.area{z-index:8;background-color:var(--primary-dark-color)!important}.ht_clone_top_left_corner thead tr th:nth-last-child(2){border-right:1px solid var(--header-border-color)}.handsontable{touch-action:manipulation;font-family:-apple-system,BlinkMacSystemFont,Roboto,Oxygen,Ubuntu,Helvetica Neue,Arial,sans-serif;font-size:13px;font-weight:400;color:#373737}.handsontable td.htInvalid{background-color:var(--error-color)!important}.handsontable .manualColumnResizer:hover,.handsontable .manualColumnResizer.active,.handsontable .manualRowResizer:hover,.handsontable .manualRowResizer.active{background-color:var(--primary-color)}.handsontable .manualColumnResizerGuide{position:absolute;right:unset;top:0;background-color:var(--primary-color);display:none;width:0;border-right:1px dashed #777;border-left:none;margin-left:5px;margin-right:unset}.handsontable .manualRowResizerGuide{position:absolute;left:0;bottom:0;background-color:var(--primary-color);display:none;height:0;border-bottom:1px dashed #777;margin-top:5px}.handsontable td.area:before,.handsontable td.area-1:before,.handsontable td.area-2:before,.handsontable td.area-3:before,.handsontable td.area-4:before,.handsontable td.area-5:before,.handsontable td.area-6:before,.handsontable td.area-7:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;bottom:-100% \ ;background:#ff006a}.handsontableInput{border:none;outline-width:0;margin:0;padding:1px 5px 0;font-family:inherit;line-height:21px;font-size:inherit;box-shadow:0 0 0 2px var(--secondary-color) inset;resize:none;display:block;color:#000;border-radius:0;background-color:var(--background-color)}.handsontable .htDimmed{color:var(--text-color)}.handsontable.listbox .ht_master table{border:1px solid var(--border-transparent);border-collapse:separate;background:#fff}.handsontable td.htSearchResult{background:#fcedd9;color:#583707}.handsontable.mobile .handsontableInput:focus{-webkit-box-shadow:0 0 0 2px var(--primary-color) inset;-moz-box-shadow:0 0 0 2px var(--primary-color) inset;box-shadow:0 0 0 2px var(--primary-color) inset;-webkit-appearance:none}.htCommentTextArea:focus{box-shadow:#0000001e 0 1px 3px,#0000003d 0 1px 2px,inset 0 0 0 1px var(--primary-color);border-left:3px solid #ee488c}.htContextMenu .ht_master table.htCore{border-color:var(--border-transparent);border-style:solid;border-top-width:1px;border-bottom-width:2px;border-left-width:1px;border-right-width:2px}.handsontable .changeType{border:none;color:#a6a6a6;font-size:10px;line-height:9px;margin:4px 12px 0 -12px;float:right}.handsontable .changeType:hover{border:none;color:#222;cursor:pointer}.htDropdownMenu table.htCore{border-color:#bbb;border-top-width:1px;border-bottom-width:2px;border-left-width:1px;border-right-width:2px}.font-smaller{font-size:10px!important}.font-small{font-size:12px!important}.font-normal{font-size:14px!important}.font-big{font-size:16px!important}.font-bigger{font-size:18px!important}.font-bold{font-weight:700!important}.font-light{font-weight:lighter!important}.font-italic{font-style:italic}.font-underline{text-decoration:underline}.bordeaux-1{background-color:#efbfbf!important}.bordeaux-2{background-color:#df7f7f!important}.bordeaux-3{background-color:#d04040!important}.bordeaux-4{background-color:#c00000!important}.red-1{background-color:#ffbfbf!important}.red-2{background-color:#ff7f7f!important}.red-3{background-color:#ff4040!important}.red-4{background-color:red!important}.gold-1{background-color:#ffefbf!important}.gold-2{background-color:#ffdf7f!important}.gold-3{background-color:#ffd040!important}.gold-4{background-color:#ffc000!important}.yellow-1{background-color:#ffffbf!important}.yellow-2{background-color:#ffff7f!important}.yellow-3{background-color:#ffff40!important}.yellow-4{background-color:#ff0!important}.lime-1{background-color:#e4f3d3!important}.lime-2{background-color:#c8e7a7!important}.lime-3{background-color:#addc7c!important}.lime-4{background-color:#92d050!important}.green-1{background-color:#bfebd3!important}.green-2{background-color:#7fd7a7!important}.green-3{background-color:#40c47c!important}.green-4{background-color:#00b050!important}.blue-1{background-color:#bfebfb!important}.blue-2{background-color:#7fd7f7!important}.blue-3{background-color:#40c4f4!important}.blue-4{background-color:#00b0f0!important}.royal-1{background-color:#bfdbef!important}.royal-2{background-color:#7fb7df!important}.royal-3{background-color:#4094d0!important}.royal-4{background-color:#0070c0!important}.navy-1{background-color:#bfc7d7!important}.navy-2{background-color:#7f8faf!important}.navy-3{background-color:#405888!important}.navy-4{background-color:#002060!important}.purple-1{background-color:#dbcbe7!important}.purple-2{background-color:#b797cf!important}.purple-3{background-color:#9464b8!important}.purple-4{background-color:#7030a0!important}.silver-1{background-color:#e8e8e8!important}.silver-2{background-color:#d2d2d2!important}.silver-3{background-color:#bbb!important}.silver-4{background-color:#a5a5a5!important}.total-column{background-color:var(--primary-super-light-color)!important}.border-sides-none{box-sizing:border-box!important;border-left:none!important;border-right:none!important}.border-sides-1{box-sizing:border-box!important;border-left:1px solid var(--header-border-color)!important;border-right:1px solid var(--header-border-color)!important}.border-sides-2{box-sizing:border-box!important;border-left:2px solid var(--header-border-color)!important;border-right:2px solid var(--header-border-color)!important}.border-all-1{box-sizing:border-box!important;border-bottom:1px solid!important;border-left:1px solid!important;border-top:1px solid!important}.border-all-2{box-sizing:border-box!important;border-bottom:2px solid!important;border-left:2px solid!important;border-top:2px solid!important}.border-all-4{box-sizing:border-box!important;border-bottom:4px solid!important;border-left:4px solid!important;border-top:4px solid!important}.border-all-8{box-sizing:border-box!important;border-bottom:8px solid!important;border-left:8px solid!important;border-top:8px solid!important}.border-sides-1{box-sizing:border-box!important;border-left:1px solid!important;border-right:1px solid!important}.border-sides-2{box-sizing:border-box!important;border-left:2px solid!important;border-right:2px solid!important}.border-bottom-1{box-sizing:border-box!important;border-bottom:1px solid!important}.border-bottom-2{box-sizing:border-box!important;border-bottom:2px solid!important}.border-bottom-4{box-sizing:border-box!important;border-bottom:4px solid!important}.border-bottom-8{box-sizing:border-box!important;border-bottom:8px solid!important}.border-top-1{box-sizing:border-box!important;border-top:1px solid!important}.border-top-2{box-sizing:border-box!important;border-top:2px solid!important}.border-top-4{box-sizing:border-box!important;border-top:4px solid!important}.border-top-8{box-sizing:border-box!important;border-top:8px solid!important}.border-black-top{border-top-color:#000!important}.border-black-bottom{border-bottom-color:#000!important}.border-gray-top{border-top-color:#f1f1f1!important}.border-gray-bottom{border-bottom-color:#f1f1f1!important}.border-white-top{border-top-color:#fff!important}.border-white-bottom{border-bottom-color:#fff!important}.read-only-column,.read-only-row{background-color:#f0f0f0!important}.allocation-warning-cell{background-color:var(--warning-color)!important}.allocation-error-cell{background-color:var(--error-color)!important}.allocation-success-cell{background-color:var(--success-color)!important}.handsontable .wtHolder tbody .listbox{white-space:normal!important;word-break:break-word!important;max-width:400px!important}.handsontable td.htDropdownEllipsis{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;max-width:100%!important}.handsontable td.htWrap{white-space:pre-wrap!important;word-break:break-word!important}.period-selector[data-v-617fd88c]{display:flex;align-items:center}
|