Documents: Fix ui

pull/3890/head
Julio Montoya 4 years ago
parent 8840d3eb7e
commit dba1fed569
  1. 8
      assets/css/app.scss
  2. 8
      assets/vue/components/ActionCell.vue
  3. 57
      assets/vue/components/Toolbar.vue
  4. 11
      assets/vue/components/documents/Form.vue
  5. 8
      assets/vue/hooks/useState.js
  6. 18
      assets/vue/mixins/ListMixin.js
  7. 4
      assets/vue/store/index.js
  8. 1
      assets/vue/store/modules/crud.js
  9. 3
      assets/vue/utils/fetch.js
  10. 11
      assets/vue/views/documents/List.vue

@ -40,7 +40,7 @@
//@import "~bootstrap-select/sass/bootstrap-select"; //@import "~bootstrap-select/sass/bootstrap-select";
//@import '~pretty-checkbox/src/pretty-checkbox.scss'; //@import '~pretty-checkbox/src/pretty-checkbox.scss';
//@import '~jquery-ui/themes/base/all.css'; //@import '~jquery-ui/themes/base/all.css';
/*
@layer components { @layer components {
.card { .card {
@apply bg-white rounded shadow-lg; @apply bg-white rounded shadow-lg;
@ -62,6 +62,10 @@
@apply text-white bg-blue-700 hover:bg-blue-800; @apply text-white bg-blue-700 hover:bg-blue-800;
} }
.btn-success {
@apply text-white bg-green-700 hover:bg-green-800;
}
.btn-danger { .btn-danger {
@apply text-white bg-red-700 hover:bg-red-800; @apply text-white bg-red-700 hover:bg-red-800;
} }
@ -135,7 +139,7 @@
} }
@import "scss/index.scss"; @import "scss/index.scss";
}*/ }
a.router-link-exact-active { a.router-link-exact-active {
//@apply border-b-2 bg-gray-100 border-gray-500 text-gray-500 rounded-t; //@apply border-b-2 bg-gray-100 border-gray-500 text-gray-500 rounded-t;

@ -1,7 +1,10 @@
<template> <template>
<q-td slot="body-cell-action" auto-width> <!-- auto-width-->
<q-td slot="body-cell-action" >
<div class="p-4 flex flex-row gap-1">
<q-btn <q-btn
v-if="handleShow" v-if="handleShow"
no-caps
dense dense
color="secondary" color="secondary"
@click="handleShow" @click="handleShow"
@ -9,6 +12,7 @@
/> />
<q-btn <q-btn
v-if="handleEdit" v-if="handleEdit"
no-caps
dense dense
color="secondary" color="secondary"
@click="handleEdit" @click="handleEdit"
@ -16,6 +20,7 @@
/> />
<q-btn <q-btn
v-if="handleDelete" v-if="handleDelete"
no-caps
label="Delete" label="Delete"
dense dense
color="red" color="red"
@ -27,6 +32,7 @@
:handle-delete="handleDelete" :handle-delete="handleDelete"
:handle-cancel="() => (confirmDeleteClick = false)" :handle-cancel="() => (confirmDeleteClick = false)"
/> />
</div>
</q-td> </q-td>
</template> </template>

@ -1,8 +1,8 @@
<template> <template>
<q-toolbar class="q-my-md"> <div class="q-card">
<slot name="left" /> <slot name="left" />
<q-space /> <!-- <q-space />-->
<div class="p-4 flex flex-row gap-1">
<q-btn <q-btn
v-if="handleList" v-if="handleList"
:loading="isLoading" :loading="isLoading"
@ -12,10 +12,12 @@
> >
{{ $t('List') }} {{ $t('List') }}
</q-btn> </q-btn>
<q-btn <q-btn
v-if="handleEdit" v-if="handleEdit"
no-caps
class="btn btn-primary"
:loading="isLoading" :loading="isLoading"
color="primary"
@click="editItem" @click="editItem"
unelevated unelevated
> >
@ -24,8 +26,9 @@
<q-btn <q-btn
v-if="handleSubmit" v-if="handleSubmit"
no-caps
class="btn btn-primary"
:loading="isLoading" :loading="isLoading"
color="primary"
@click="submitItem" @click="submitItem"
unelevated unelevated
> >
@ -42,49 +45,56 @@
<!-- </v-btn>--> <!-- </v-btn>-->
<q-btn <q-btn
v-if="handleDelete" v-if="handleDelete"
color="red" no-caps
class="btn btn-danger"
unelevated unelevated
class="ml-sm-2"
@click="confirmDelete = true" @click="confirmDelete = true"
> >
{{ $t('Delete') }} {{ $t('Delete') }}
</q-btn> </q-btn>
<!-- color="primary"-->
<q-btn <q-btn
v-if="handleAdd" v-if="handleAdd"
color="primary" no-caps
class="btn btn-primary"
@click="addItem" @click="addItem"
> >
<font-awesome-icon icon="folder-plus" /> New folder <font-awesome-icon icon="folder-plus" />
New folder
</q-btn> </q-btn>
<q-btn <q-btn
no-caps
class="btn btn-primary"
v-if="handleAddDocument" v-if="handleAddDocument"
color="primary"
@click="addDocument" @click="addDocument"
> >
<font-awesome-icon icon="file-alt" /> New document <font-awesome-icon icon="file-alt" /> New document
</q-btn> </q-btn>
<q-btn <q-btn
no-caps
class="btn btn-primary"
v-if="handleUploadDocument" v-if="handleUploadDocument"
color="primary"
@click="uploadDocument" @click="uploadDocument"
> >
<font-awesome-icon icon="cloud-upload-alt" /> File upload <font-awesome-icon icon="cloud-upload-alt" /> File upload
</q-btn> </q-btn>
<!-- <DataFilter--> <!-- <DataFilter-->
<!-- v-if="filters"--> <!-- v-if="filters"-->
<!-- :handle-filter="onSendFilter"--> <!-- :handle-filter="onSendFilter"-->
<!-- :handle-reset="resetFilter"--> <!-- :handle-reset="resetFilter"-->
<!-- >--> <!-- >-->
<!-- <DocumentsFilterForm--> <!-- <DocumentsFilterForm-->
<!-- ref="filterForm"--> <!-- ref="filterForm"-->
<!-- slot="filter"--> <!-- slot="filter"-->
<!-- :values="filters"--> <!-- :values="filters"-->
<!-- />--> <!-- />-->
<!-- </DataFilter>--> <!-- </DataFilter>-->
<ConfirmDelete <ConfirmDelete
v-if="handleDelete" v-if="handleDelete"
@ -92,7 +102,8 @@
:handle-delete="handleDelete" :handle-delete="handleDelete"
@close="confirmDelete = false" @close="confirmDelete = false"
/> />
</q-toolbar> </div>
</div>
</template> </template>
<script> <script>

@ -1,15 +1,13 @@
<template> <template>
<!-- @input="$v.item.title.$touch()"-->
<!-- @blur="$v.item.title.$touch()"-->
<q-input <q-input
id="item_title" id="item_title"
v-model="item.title" v-model="item.title"
:error-messages="titleErrors" :error-messages="titleErrors"
:placeholder="$t('Title')" :placeholder="$t('Title')"
required required
@input="$v.item.title.$touch()"
@blur="$v.item.title.$touch()"
/> />
</template> </template>
<script> <script>
@ -45,16 +43,15 @@ export default {
}; };
}, },
computed: { computed: {
// eslint-disable-next-line
item() { item() {
return this.initialValues || this.values; return this.initialValues || this.values;
}, },
titleErrors() { titleErrors() {
const errors = []; const errors = [];
if (!this.$v.item.title.$dirty) return errors; /*if (!this.$v.item.title.$dirty) return errors;
has(this.violations, 'title') && errors.push(this.violations.title); has(this.violations, 'title') && errors.push(this.violations.title);
!this.$v.item.title.required && errors.push(this.$t('Field is required')); !this.$v.item.title.required && errors.push(this.$t('Field is required'));*/
return errors; return errors;
}, },

@ -5,11 +5,9 @@ const toggleSidebar = () => {
isSidebarOpen.value = !isSidebarOpen.value isSidebarOpen.value = !isSidebarOpen.value
} }
const isSettingsPanelOpen = ref(false) const isSettingsPanelOpen = ref(false);
const isSearchPanelOpen = ref(false);
const isSearchPanelOpen = ref(false) const isNotificationsPanelOpen = ref(false);
const isNotificationsPanelOpen = ref(false)
export default function useState() { export default function useState() {
return { return {

@ -15,7 +15,7 @@ export default {
sortBy: 'resourceNode.title', sortBy: 'resourceNode.title',
descending: false, descending: false,
page: 1, // page to be displayed page: 1, // page to be displayed
rowsPerPage: 3, // maximum displayed rows rowsPerPage: 10, // maximum displayed rows
rowsNumber: 10, // max number of rows rowsNumber: 10, // max number of rows
}, },
nextPage: null, nextPage: null,
@ -26,7 +26,7 @@ export default {
//sortBy: [], vuetify //sortBy: [], vuetify
//sortDesc: [], , vuetify //sortDesc: [], , vuetify
page: 1, page: 1,
itemsPerPage: 3 itemsPerPage: 10
}, },
//filters: {} //filters: {}
}; };
@ -70,6 +70,9 @@ export default {
const filter = props.filter; const filter = props.filter;
this.nextPage = page; this.nextPage = page;
if (isEmpty(this.nextPage)) {
this.nextPage = 1;
}
let params = {}; let params = {};
if (itemsPerPage > 0) { if (itemsPerPage > 0) {
@ -133,12 +136,14 @@ export default {
onSendFilter() { onSendFilter() {
this.resetList = true; this.resetList = true;
this.onUpdateOptions(this.options); this.pagination.page = 1;
this.onRequest({pagination: this.pagination})
}, },
resetFilter() { resetFilter() {
this.filters = {}; this.filters = {};
this.onUpdateOptions(this.options); this.pagination.page = 1;
this.onRequest({pagination: this.pagination})
}, },
addHandler() { addHandler() {
@ -216,7 +221,10 @@ export default {
}, },
deleteHandler(item) { deleteHandler(item) {
console.log(item); console.log(item);
this.deleteItem(item).then(() => this.onUpdateOptions(this.options)); this.pagination.page = 1;
this.deleteItem(item).then(() =>
this.onRequest({pagination: this.pagination})
);
}, },
formatDateTime formatDateTime
} }

@ -2,9 +2,9 @@ import { createStore, createLogger } from "vuex";
import notifications from './modules/notifications'; import notifications from './modules/notifications';
import SecurityModule from "./security"; import SecurityModule from "./security";
import createPersistedState from "vuex-persistedstate"; import createPersistedState from "vuex-persistedstate";
//createLogger(),
export default createStore({ export default createStore({
plugins: [createLogger(), createPersistedState()], plugins: [createPersistedState()],
modules: { modules: {
notifications, notifications,
security: SecurityModule, security: SecurityModule,

@ -94,7 +94,6 @@ export default function makeCrudModule({
.catch(e => handleError(commit, e)); .catch(e => handleError(commit, e));
}, },
del: ({ commit }, item) => { del: ({ commit }, item) => {
console.log('del'); console.log('del');
commit(ACTIONS.TOGGLE_LOADING); commit(ACTIONS.TOGGLE_LOADING);

@ -52,7 +52,6 @@ export default function(id, options = {}) {
.join('&'); .join('&');
id = `${id}?${queryString}`; id = `${id}?${queryString}`;
console.log(id, 'id'); console.log(id, 'id');
} }
@ -124,6 +123,8 @@ export default function(id, options = {}) {
}*/ }*/
return global.fetch(new URL(id, entryPoint), options).then(response => { return global.fetch(new URL(id, entryPoint), options).then(response => {
console.log(response);
if (response.ok) return response; if (response.ok) return response;
return response.json().then(json => { return response.json().then(json => {

@ -1,5 +1,4 @@
<template> <template>
<div class="q-pa-md">
<Toolbar <Toolbar
:handle-add="addHandler" :handle-add="addHandler"
:handle-add-document="addDocumentHandler" :handle-add-document="addDocumentHandler"
@ -11,7 +10,6 @@
<q-table <q-table
dense dense
flat
:rows="items" :rows="items"
:columns="columns" :columns="columns"
row-key="@id" row-key="@id"
@ -22,6 +20,7 @@
:no-results-label="$t('No results')" :no-results-label="$t('No results')"
:loading-label="$t('Loading...')" :loading-label="$t('Loading...')"
:rows-per-page-label="$t('Records per page:')" :rows-per-page-label="$t('Records per page:')"
:rows-per-page-options="[10, 20, 50, 0]"
:loading="isLoading" :loading="isLoading"
selection="multiple" selection="multiple"
v-model:selected="selectedItems" v-model:selected="selectedItems"
@ -75,7 +74,7 @@
</q-tr> </q-tr>
</template> </template>
</q-table> </q-table>
</div>
</template> </template>
<script> <script>
@ -87,12 +86,8 @@ import Toolbar from '../../components/Toolbar.vue';
import ResourceFileIcon from './ResourceFileIcon.vue'; import ResourceFileIcon from './ResourceFileIcon.vue';
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
//import { useToast } from 'primevue/usetoast';
import { ref, reactive, onMounted, computed } from 'vue'; import { ref, reactive, onMounted, computed } from 'vue';
import { useStore } from 'vuex'; import { useStore } from 'vuex';
/*const servicePrefix = 'documents';
const { getters, actions } = list(servicePrefix);*/
import isEmpty from 'lodash/isEmpty'; import isEmpty from 'lodash/isEmpty';
export default { export default {
@ -114,7 +109,7 @@ export default {
{name: 'resourceNode.resourceFile.size', label: this.$i18n.t('Size'), field: 'resourceNode.resourceFile.size', sortable: true}, {name: 'resourceNode.resourceFile.size', label: this.$i18n.t('Size'), field: 'resourceNode.resourceFile.size', sortable: true},
{name: 'action', label: this.$i18n.t('Actions'), field: 'action', sortable: false} {name: 'action', label: this.$i18n.t('Actions'), field: 'action', sortable: false}
], ],
pageOptions: [5, 10, 15, 20, this.$i18n.t('All')], //pageOptions: [5, 10, 15, 20, this.$i18n.t('All')],
selected: [], selected: [],
isBusy: false, isBusy: false,
options: [], options: [],

Loading…
Cancel
Save