|
|
|
@ -1,128 +1,144 @@ |
|
|
|
|
<template> |
|
|
|
|
<ButtonToolbar> |
|
|
|
|
<BaseButton |
|
|
|
|
type="black" |
|
|
|
|
icon="user-add" |
|
|
|
|
:disabled="isLoading" |
|
|
|
|
:label="t('Add friend')" |
|
|
|
|
icon="user-add" |
|
|
|
|
type="black" |
|
|
|
|
@click="goToAdd" |
|
|
|
|
/> |
|
|
|
|
|
|
|
|
|
<BaseButton |
|
|
|
|
type="black" |
|
|
|
|
icon="refresh" |
|
|
|
|
:label="t('Refresh')" |
|
|
|
|
:disabled="isLoading" |
|
|
|
|
:label="t('Refresh')" |
|
|
|
|
icon="refresh" |
|
|
|
|
type="black" |
|
|
|
|
@click="reloadHandler" |
|
|
|
|
/> |
|
|
|
|
|
|
|
|
|
<BaseButton |
|
|
|
|
type="black" |
|
|
|
|
icon="delete-multiple-user" |
|
|
|
|
:label="t('Delete friends')" |
|
|
|
|
:disabled="isLoading || !selectedItems.length" |
|
|
|
|
:label="t('Delete friends')" |
|
|
|
|
icon="delete-multiple-user" |
|
|
|
|
type="black" |
|
|
|
|
@click="confirmDeleteMultiple" |
|
|
|
|
/> |
|
|
|
|
</ButtonToolbar> |
|
|
|
|
|
|
|
|
|
<div v-if="friendRequests.length"> |
|
|
|
|
<div |
|
|
|
|
class="text-h4 mb-2" |
|
|
|
|
v-t="'Requests'" |
|
|
|
|
class="text-h4 mb-2" |
|
|
|
|
/> |
|
|
|
|
|
|
|
|
|
<div |
|
|
|
|
v-for="(request, i) in friendRequests" |
|
|
|
|
:key="i" |
|
|
|
|
class="flex flex-row gap-2 items-center" |
|
|
|
|
v-for="(request, i) in friendRequests" |
|
|
|
|
:key="i" |
|
|
|
|
class="flex flex-row gap-2 items-center" |
|
|
|
|
> |
|
|
|
|
<BaseUserAvatar |
|
|
|
|
:image-url="request.user.illustrationUrl + '?w=80&h=80&fit=crop'" |
|
|
|
|
/> |
|
|
|
|
<BaseUserAvatar :image-url="request.user.illustrationUrl + '?w=80&h=80&fit=crop'" /> |
|
|
|
|
|
|
|
|
|
{{ request.user.username }} |
|
|
|
|
|
|
|
|
|
<BaseButton |
|
|
|
|
type="black" |
|
|
|
|
icon="user-add" |
|
|
|
|
only-icon |
|
|
|
|
type="black" |
|
|
|
|
@click="addFriend(request)" |
|
|
|
|
/> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div |
|
|
|
|
v-for="(request, i) in waitingRequests" |
|
|
|
|
:key="i" |
|
|
|
|
v-for="(request, i) in waitingRequests" |
|
|
|
|
:key="i" |
|
|
|
|
> |
|
|
|
|
<BaseUserAvatar |
|
|
|
|
:image-url="request.friend.illustrationUrl + '?w=80&h=80&fit=crop'" |
|
|
|
|
/> |
|
|
|
|
<BaseUserAvatar :image-url="request.friend.illustrationUrl + '?w=80&h=80&fit=crop'" /> |
|
|
|
|
|
|
|
|
|
{{ request.friend.username }} |
|
|
|
|
|
|
|
|
|
<BaseTag :label="t('Waiting')" type="info"/> |
|
|
|
|
<BaseTag |
|
|
|
|
:label="t('Waiting')" |
|
|
|
|
type="info" |
|
|
|
|
/> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div class="flex flex-row pt-2"> |
|
|
|
|
<div class="w-full"> |
|
|
|
|
<div class="text-h4 q-mb-md">Friends</div> |
|
|
|
|
|
|
|
|
|
<!-- :loading="isLoading"--> |
|
|
|
|
<!-- :loading="isLoading"--> |
|
|
|
|
<DataTable |
|
|
|
|
class="p-datatable-sm" |
|
|
|
|
:value="items" |
|
|
|
|
v-model:selection="selectedItems" |
|
|
|
|
dataKey="id" |
|
|
|
|
v-model:filters="friendFilter" |
|
|
|
|
sortBy="sendDate" |
|
|
|
|
sortOrder="asc" |
|
|
|
|
v-model:selection="selectedItems" |
|
|
|
|
:lazy="true" |
|
|
|
|
:paginator="false" |
|
|
|
|
:rowsPerPageOptions="[5, 10, 20, 50]" |
|
|
|
|
:totalRecords="totalItems" |
|
|
|
|
@page="onPage($event)" |
|
|
|
|
@sort="sortingChanged($event)" |
|
|
|
|
:value="items" |
|
|
|
|
class="p-datatable-sm" |
|
|
|
|
currentPageReportTemplate="Showing {first} to {last} of {totalRecords}" |
|
|
|
|
dataKey="id" |
|
|
|
|
paginatorTemplate="CurrentPageReport FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink RowsPerPageDropdown" |
|
|
|
|
:rowsPerPageOptions="[5, 10, 20, 50]" |
|
|
|
|
responsiveLayout="scroll" |
|
|
|
|
currentPageReportTemplate="Showing {first} to {last} of {totalRecords}" |
|
|
|
|
sortBy="sendDate" |
|
|
|
|
sortOrder="asc" |
|
|
|
|
@page="onPage($event)" |
|
|
|
|
@sort="sortingChanged($event)" |
|
|
|
|
> |
|
|
|
|
|
|
|
|
|
<Column selectionMode="multiple" style="width: 3rem" :exportable="false"></Column> |
|
|
|
|
|
|
|
|
|
<Column field="sender" :header="$t('User')" :sortable="false"> |
|
|
|
|
<template #body="slotProps"> |
|
|
|
|
<q-avatar size="40px"> |
|
|
|
|
<img :src="slotProps.data.friend.illustrationUrl + '?w=80&h=80&fit=crop'" /> |
|
|
|
|
</q-avatar> |
|
|
|
|
<Column |
|
|
|
|
:exportable="false" |
|
|
|
|
selectionMode="multiple" |
|
|
|
|
style="width: 3rem" |
|
|
|
|
></Column> |
|
|
|
|
|
|
|
|
|
<Column |
|
|
|
|
:header="$t('User')" |
|
|
|
|
:sortable="false" |
|
|
|
|
field="sender" |
|
|
|
|
> |
|
|
|
|
<template #body="slotProps"> |
|
|
|
|
<q-avatar size="40px"> |
|
|
|
|
<img :src="slotProps.data.friend.illustrationUrl + '?w=80&h=80&fit=crop'" /> |
|
|
|
|
</q-avatar> |
|
|
|
|
{{ slotProps.data.friend.username }} |
|
|
|
|
</template> |
|
|
|
|
</Column> |
|
|
|
|
|
|
|
|
|
<Column field="createdAt" :header="$t('Sent date')" :sortable="true"> |
|
|
|
|
<template #body="slotProps"> |
|
|
|
|
{{ $filters.relativeDatetime(slotProps.data.createdAt) }} |
|
|
|
|
</template> |
|
|
|
|
</Column> |
|
|
|
|
|
|
|
|
|
<Column :exportable="false"> |
|
|
|
|
<template #body="slotProps"> |
|
|
|
|
<!-- class="flex flex-row gap-2"--> |
|
|
|
|
<!-- <v-icon v-if="slotProps.data.relationType == 3" icon="mdi-check" />--> |
|
|
|
|
<v-btn |
|
|
|
|
tile |
|
|
|
|
</template> |
|
|
|
|
</Column> |
|
|
|
|
|
|
|
|
|
<Column |
|
|
|
|
:header="$t('Sent date')" |
|
|
|
|
:sortable="true" |
|
|
|
|
field="createdAt" |
|
|
|
|
> |
|
|
|
|
<template #body="slotProps"> |
|
|
|
|
{{ $filters.relativeDatetime(slotProps.data.createdAt) }} |
|
|
|
|
</template> |
|
|
|
|
</Column> |
|
|
|
|
|
|
|
|
|
<Column :exportable="false"> |
|
|
|
|
<template #body="slotProps"> |
|
|
|
|
<!-- class="flex flex-row gap-2"--> |
|
|
|
|
<!-- <v-icon v-if="slotProps.data.relationType == 3" icon="mdi-check" />--> |
|
|
|
|
<v-btn |
|
|
|
|
icon |
|
|
|
|
@click="confirmDeleteItem(slotProps.data)" > |
|
|
|
|
<v-icon icon="mdi-delete" /> |
|
|
|
|
</v-btn> |
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
</Column> |
|
|
|
|
</DataTable> |
|
|
|
|
tile |
|
|
|
|
@click="confirmDeleteItem(slotProps.data)" |
|
|
|
|
> |
|
|
|
|
<v-icon icon="mdi-delete" /> |
|
|
|
|
</v-btn> |
|
|
|
|
</template> |
|
|
|
|
</Column> |
|
|
|
|
</DataTable> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<Dialog v-model:visible="itemDialog" :style="{width: '450px'}" :header="$t('New folder')" :modal="true" class="p-fluid"> |
|
|
|
|
<Dialog |
|
|
|
|
v-model:visible="itemDialog" |
|
|
|
|
:header="$t('New folder')" |
|
|
|
|
:modal="true" |
|
|
|
|
:style="{ width: '450px' }" |
|
|
|
|
class="p-fluid" |
|
|
|
|
> |
|
|
|
|
<BaseInputText |
|
|
|
|
id="title" |
|
|
|
|
v-model.trim="item.title" |
|
|
|
@ -130,48 +146,90 @@ |
|
|
|
|
/> |
|
|
|
|
|
|
|
|
|
<template #footer> |
|
|
|
|
<Button label="Cancel" icon="pi pi-times" class="p-button-text" @click="hideDialog"/> |
|
|
|
|
<Button label="Save" icon="pi pi-check" class="p-button-text" @click="saveItem" /> |
|
|
|
|
<Button |
|
|
|
|
class="p-button-text" |
|
|
|
|
icon="pi pi-times" |
|
|
|
|
label="Cancel" |
|
|
|
|
@click="hideDialog" |
|
|
|
|
/> |
|
|
|
|
<Button |
|
|
|
|
class="p-button-text" |
|
|
|
|
icon="pi pi-check" |
|
|
|
|
label="Save" |
|
|
|
|
@click="saveItem" |
|
|
|
|
/> |
|
|
|
|
</template> |
|
|
|
|
</Dialog> |
|
|
|
|
|
|
|
|
|
<Dialog v-model:visible="deleteItemDialog" :style="{width: '450px'}" header="Confirm" :modal="true"> |
|
|
|
|
<Dialog |
|
|
|
|
v-model:visible="deleteItemDialog" |
|
|
|
|
:modal="true" |
|
|
|
|
:style="{ width: '450px' }" |
|
|
|
|
header="Confirm" |
|
|
|
|
> |
|
|
|
|
<div class="confirmation-content"> |
|
|
|
|
<i class="pi pi-exclamation-triangle p-mr-3" style="font-size: 2rem" /> |
|
|
|
|
<span v-if="item">Are you sure you want to delete <b>{{item.title}}</b>?</span> |
|
|
|
|
<i |
|
|
|
|
class="pi pi-exclamation-triangle p-mr-3" |
|
|
|
|
style="font-size: 2rem" |
|
|
|
|
/> |
|
|
|
|
<span v-if="item" |
|
|
|
|
>Are you sure you want to delete <b>{{ item.title }}</b |
|
|
|
|
>?</span |
|
|
|
|
> |
|
|
|
|
</div> |
|
|
|
|
<template #footer> |
|
|
|
|
<Button label="No" icon="pi pi-times" class="p-button-text" @click="deleteItemDialog = false"/> |
|
|
|
|
<Button label="Yes" icon="pi pi-check" class="p-button-text" @click="deleteItemButton(item)" /> |
|
|
|
|
<Button |
|
|
|
|
class="p-button-text" |
|
|
|
|
icon="pi pi-times" |
|
|
|
|
label="No" |
|
|
|
|
@click="deleteItemDialog = false" |
|
|
|
|
/> |
|
|
|
|
<Button |
|
|
|
|
class="p-button-text" |
|
|
|
|
icon="pi pi-check" |
|
|
|
|
label="Yes" |
|
|
|
|
@click="deleteItemButton(item)" |
|
|
|
|
/> |
|
|
|
|
</template> |
|
|
|
|
</Dialog> |
|
|
|
|
|
|
|
|
|
<Dialog v-model:visible="deleteMultipleDialog" :style="{width: '450px'}" header="Confirm" :modal="true"> |
|
|
|
|
<Dialog |
|
|
|
|
v-model:visible="deleteMultipleDialog" |
|
|
|
|
:modal="true" |
|
|
|
|
:style="{ width: '450px' }" |
|
|
|
|
header="Confirm" |
|
|
|
|
> |
|
|
|
|
<div class="confirmation-content"> |
|
|
|
|
<i class="pi pi-exclamation-triangle p-mr-3" style="font-size: 2rem" /> |
|
|
|
|
<i |
|
|
|
|
class="pi pi-exclamation-triangle p-mr-3" |
|
|
|
|
style="font-size: 2rem" |
|
|
|
|
/> |
|
|
|
|
<span v-if="item">Are you sure you want to delete the selected items?</span> |
|
|
|
|
</div> |
|
|
|
|
<template #footer> |
|
|
|
|
<Button label="No" icon="pi pi-times" class="p-button-text" @click="deleteMultipleDialog = false"/> |
|
|
|
|
<Button label="Yes" icon="pi pi-check" class="p-button-text" @click="deleteMultipleItems" /> |
|
|
|
|
<Button |
|
|
|
|
class="p-button-text" |
|
|
|
|
icon="pi pi-times" |
|
|
|
|
label="No" |
|
|
|
|
@click="deleteMultipleDialog = false" |
|
|
|
|
/> |
|
|
|
|
<Button |
|
|
|
|
class="p-button-text" |
|
|
|
|
icon="pi pi-check" |
|
|
|
|
label="Yes" |
|
|
|
|
@click="deleteMultipleItems" |
|
|
|
|
/> |
|
|
|
|
</template> |
|
|
|
|
</Dialog> |
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
<script> |
|
|
|
|
import { mapActions, mapGetters } from 'vuex'; |
|
|
|
|
import { mapFields } from 'vuex-map-fields'; |
|
|
|
|
import ListMixin from '../../mixins/ListMixin'; |
|
|
|
|
import ActionCell from '../../components/ActionCell.vue'; |
|
|
|
|
import ResourceFileLink from '../../components/documents/ResourceFileLink.vue'; |
|
|
|
|
|
|
|
|
|
import DataFilter from '../../components/DataFilter'; |
|
|
|
|
import DocumentsFilterForm from '../../components/documents/Filter'; |
|
|
|
|
import { ref, reactive, onMounted, computed } from 'vue'; |
|
|
|
|
import { useStore } from 'vuex'; |
|
|
|
|
import axios from "axios"; |
|
|
|
|
import {ENTRYPOINT} from "../../config/entrypoint"; |
|
|
|
|
import {RESOURCE_LINK_PUBLISHED} from "../../components/resource_links/visibility"; |
|
|
|
|
import { mapActions, mapGetters, useStore } from "vuex" |
|
|
|
|
import { mapFields } from "vuex-map-fields" |
|
|
|
|
import ListMixin from "../../mixins/ListMixin" |
|
|
|
|
import { ref } from "vue" |
|
|
|
|
import axios from "axios" |
|
|
|
|
import { RESOURCE_LINK_PUBLISHED } from "../../components/resource_links/visibility" |
|
|
|
|
import ButtonToolbar from "../../components/basecomponents/ButtonToolbar.vue" |
|
|
|
|
import BaseButton from "../../components/basecomponents/BaseButton.vue" |
|
|
|
|
import BaseUserAvatar from "../../components/basecomponents/BaseUserAvatar.vue" |
|
|
|
@ -181,8 +239,8 @@ import { useI18n } from "vue-i18n" |
|
|
|
|
import { useRouter } from "vue-router" |
|
|
|
|
|
|
|
|
|
export default { |
|
|
|
|
name: 'UserRelUserList', |
|
|
|
|
servicePrefix: 'userreluser', |
|
|
|
|
name: "UserRelUserList", |
|
|
|
|
servicePrefix: "userreluser", |
|
|
|
|
components: { |
|
|
|
|
BaseInputText, |
|
|
|
|
BaseTag, |
|
|
|
@ -192,68 +250,71 @@ export default { |
|
|
|
|
}, |
|
|
|
|
mixins: [ListMixin], |
|
|
|
|
setup() { |
|
|
|
|
const store = useStore(); |
|
|
|
|
const store = useStore() |
|
|
|
|
const router = useRouter() |
|
|
|
|
const { t } = useI18n() |
|
|
|
|
const user = store.getters["security/getUser"]; |
|
|
|
|
const isLoadingSelect = ref(false); |
|
|
|
|
const deleteItemDialog = ref(false); |
|
|
|
|
const item = ref({}); |
|
|
|
|
const friendRequests = ref([]); |
|
|
|
|
const waitingRequests = ref([]); |
|
|
|
|
const user = store.getters["security/getUser"] |
|
|
|
|
const isLoadingSelect = ref(false) |
|
|
|
|
const deleteItemDialog = ref(false) |
|
|
|
|
const item = ref({}) |
|
|
|
|
const friendRequests = ref([]) |
|
|
|
|
const waitingRequests = ref([]) |
|
|
|
|
|
|
|
|
|
const friendRequestFilter = { |
|
|
|
|
friend: user.id, |
|
|
|
|
relationType: 10 // friend request |
|
|
|
|
}; |
|
|
|
|
relationType: 10, // friend request |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const waitingFilter = { |
|
|
|
|
user: user.id, |
|
|
|
|
relationType: 10 |
|
|
|
|
}; |
|
|
|
|
relationType: 10, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const friendFilter = { |
|
|
|
|
user: user.id, |
|
|
|
|
relationType: 3, // friend status |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function addFriend(friend) { |
|
|
|
|
// Change from request to friend |
|
|
|
|
axios.put(friend['@id'], { |
|
|
|
|
relationType: 3, |
|
|
|
|
}).then(response => { |
|
|
|
|
console.log(response); |
|
|
|
|
reloadHandler(); |
|
|
|
|
}).catch(function (error) { |
|
|
|
|
console.log(error); |
|
|
|
|
}); |
|
|
|
|
axios |
|
|
|
|
.put(friend["@id"], { |
|
|
|
|
relationType: 3, |
|
|
|
|
}) |
|
|
|
|
.then((response) => { |
|
|
|
|
console.log(response) |
|
|
|
|
reloadHandler() |
|
|
|
|
}) |
|
|
|
|
.catch(function (error) { |
|
|
|
|
console.log(error) |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function reloadHandler() { |
|
|
|
|
store.dispatch('userreluser/resetList'); |
|
|
|
|
store.dispatch('userreluser/fetchAll', friendFilter); |
|
|
|
|
store.dispatch('userreluser/findAll', friendRequestFilter).then(response => { |
|
|
|
|
friendRequests.value = response; |
|
|
|
|
}); |
|
|
|
|
store.dispatch('userreluser/findAll', waitingFilter).then(response => { |
|
|
|
|
waitingRequests.value = response; |
|
|
|
|
}); |
|
|
|
|
store.dispatch("userreluser/resetList") |
|
|
|
|
store.dispatch("userreluser/fetchAll", friendFilter) |
|
|
|
|
store.dispatch("userreluser/findAll", friendRequestFilter).then((response) => { |
|
|
|
|
friendRequests.value = response |
|
|
|
|
}) |
|
|
|
|
store.dispatch("userreluser/findAll", waitingFilter).then((response) => { |
|
|
|
|
waitingRequests.value = response |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function deleteItemButton(item) { |
|
|
|
|
store.dispatch('userreluser/del', item); |
|
|
|
|
deleteItemDialog.value = false; |
|
|
|
|
reloadHandler(); |
|
|
|
|
store.dispatch("userreluser/del", item) |
|
|
|
|
deleteItemDialog.value = false |
|
|
|
|
reloadHandler() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
reloadHandler(); |
|
|
|
|
reloadHandler() |
|
|
|
|
|
|
|
|
|
const columns = ref([ |
|
|
|
|
{ label: t('User'), field: 'friend.username', name: 'friend', sortable: true}, |
|
|
|
|
{ label: t('Sent'), field: 'createdAt', name: 'createdAt', sortable: true}, |
|
|
|
|
{ label: t('Actions'), name: 'action', sortable: false} |
|
|
|
|
{ label: t("User"), field: "friend.username", name: "friend", sortable: true }, |
|
|
|
|
{ label: t("Sent"), field: "createdAt", name: "createdAt", sortable: true }, |
|
|
|
|
{ label: t("Actions"), name: "action", sortable: false }, |
|
|
|
|
]) |
|
|
|
|
const pageOptions = ref([10, 20, 50, t('All')]) |
|
|
|
|
const pageOptions = ref([10, 20, 50, t("All")]) |
|
|
|
|
const selected = ref([]) |
|
|
|
|
const selectedItems = ref([]) |
|
|
|
|
const itemDialog = ref(false) |
|
|
|
@ -261,7 +322,7 @@ export default { |
|
|
|
|
const submitted = ref(false) |
|
|
|
|
|
|
|
|
|
const goToAdd = () => { |
|
|
|
|
router.push({ name: 'UserRelUserAdd' }) |
|
|
|
|
router.push({ name: "UserRelUserAdd" }) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return { |
|
|
|
@ -281,105 +342,107 @@ export default { |
|
|
|
|
friendRequests, |
|
|
|
|
waitingRequests, |
|
|
|
|
friendFilter, |
|
|
|
|
deleteItemDialog |
|
|
|
|
deleteItemDialog, |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
computed: { |
|
|
|
|
// From crud.js list function |
|
|
|
|
...mapGetters('resourcenode', { |
|
|
|
|
resourceNode: 'getResourceNode' |
|
|
|
|
...mapGetters("resourcenode", { |
|
|
|
|
resourceNode: "getResourceNode", |
|
|
|
|
}), |
|
|
|
|
...mapGetters({ |
|
|
|
|
'isAuthenticated': 'security/isAuthenticated', |
|
|
|
|
'isAdmin': 'security/isAdmin', |
|
|
|
|
'currentUser': 'security/getUser', |
|
|
|
|
isAuthenticated: "security/isAuthenticated", |
|
|
|
|
isAdmin: "security/isAdmin", |
|
|
|
|
currentUser: "security/getUser", |
|
|
|
|
}), |
|
|
|
|
|
|
|
|
|
...mapGetters('userreluser', { |
|
|
|
|
items: 'list', |
|
|
|
|
...mapGetters("userreluser", { |
|
|
|
|
items: "list", |
|
|
|
|
}), |
|
|
|
|
|
|
|
|
|
//...getters |
|
|
|
|
|
|
|
|
|
// From ListMixin |
|
|
|
|
...mapFields('userreluser', { |
|
|
|
|
deletedItem: 'deleted', |
|
|
|
|
error: 'error', |
|
|
|
|
isLoading: 'isLoading', |
|
|
|
|
resetList: 'resetList', |
|
|
|
|
totalItems: 'totalItems', |
|
|
|
|
view: 'view' |
|
|
|
|
...mapFields("userreluser", { |
|
|
|
|
deletedItem: "deleted", |
|
|
|
|
error: "error", |
|
|
|
|
isLoading: "isLoading", |
|
|
|
|
resetList: "resetList", |
|
|
|
|
totalItems: "totalItems", |
|
|
|
|
view: "view", |
|
|
|
|
}), |
|
|
|
|
}, |
|
|
|
|
methods: { |
|
|
|
|
// prime |
|
|
|
|
onPage(event) { |
|
|
|
|
this.options.itemsPerPage = event.rows; |
|
|
|
|
this.options.page = event.page + 1; |
|
|
|
|
this.options.sortBy = event.sortField; |
|
|
|
|
this.options.sortDesc = event.sortOrder === -1; |
|
|
|
|
this.options.itemsPerPage = event.rows |
|
|
|
|
this.options.page = event.page + 1 |
|
|
|
|
this.options.sortBy = event.sortField |
|
|
|
|
this.options.sortDesc = event.sortOrder === -1 |
|
|
|
|
this.filters = { |
|
|
|
|
user: this.currentUser.id, |
|
|
|
|
relationType: 3 |
|
|
|
|
}; |
|
|
|
|
this.onUpdateOptions(this.options); |
|
|
|
|
relationType: 3, |
|
|
|
|
} |
|
|
|
|
this.onUpdateOptions(this.options) |
|
|
|
|
}, |
|
|
|
|
sortingChanged(event) { |
|
|
|
|
console.log('sortingChanged'); |
|
|
|
|
console.log(event); |
|
|
|
|
this.options.sortBy = event.sortField; |
|
|
|
|
this.options.sortDesc = event.sortOrder === -1; |
|
|
|
|
console.log("sortingChanged") |
|
|
|
|
console.log(event) |
|
|
|
|
this.options.sortBy = event.sortField |
|
|
|
|
this.options.sortDesc = event.sortOrder === -1 |
|
|
|
|
|
|
|
|
|
this.onUpdateOptions(this.options); |
|
|
|
|
this.onUpdateOptions(this.options) |
|
|
|
|
// ctx.sortBy ==> Field key for sorting by (or null for no sorting) |
|
|
|
|
// ctx.sortDesc ==> true if sorting descending, false otherwise |
|
|
|
|
}, |
|
|
|
|
hideDialog() { |
|
|
|
|
this.itemDialog = false; |
|
|
|
|
this.submitted = false; |
|
|
|
|
this.itemDialog = false |
|
|
|
|
this.submitted = false |
|
|
|
|
}, |
|
|
|
|
saveItem() { |
|
|
|
|
this.submitted = true; |
|
|
|
|
this.submitted = true |
|
|
|
|
|
|
|
|
|
if (this.item.title.trim()) { |
|
|
|
|
if (this.item.id) { |
|
|
|
|
} else { |
|
|
|
|
//this.products.push(this.product); |
|
|
|
|
this.item.filetype = 'folder'; |
|
|
|
|
this.item.parentResourceNodeId = this.$route.params.node; |
|
|
|
|
this.item.resourceLinkList = JSON.stringify([{ |
|
|
|
|
gid: this.$route.query.gid, |
|
|
|
|
sid: this.$route.query.sid, |
|
|
|
|
cid: this.$route.query.cid, |
|
|
|
|
visibility: RESOURCE_LINK_PUBLISHED, // visible by default |
|
|
|
|
}]); |
|
|
|
|
|
|
|
|
|
this.create(this.item); |
|
|
|
|
this.showMessage('Saved'); |
|
|
|
|
this.item.filetype = "folder" |
|
|
|
|
this.item.parentResourceNodeId = this.$route.params.node |
|
|
|
|
this.item.resourceLinkList = JSON.stringify([ |
|
|
|
|
{ |
|
|
|
|
gid: this.$route.query.gid, |
|
|
|
|
sid: this.$route.query.sid, |
|
|
|
|
cid: this.$route.query.cid, |
|
|
|
|
visibility: RESOURCE_LINK_PUBLISHED, // visible by default |
|
|
|
|
}, |
|
|
|
|
]) |
|
|
|
|
|
|
|
|
|
this.create(this.item) |
|
|
|
|
this.showMessage("Saved") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.itemDialog = false; |
|
|
|
|
this.item = {}; |
|
|
|
|
this.itemDialog = false |
|
|
|
|
this.item = {} |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
editItem(item) { |
|
|
|
|
this.item = {...item}; |
|
|
|
|
this.itemDialog = true; |
|
|
|
|
this.item = { ...item } |
|
|
|
|
this.itemDialog = true |
|
|
|
|
}, |
|
|
|
|
confirmDeleteItem(item) { |
|
|
|
|
this.item = item; |
|
|
|
|
this.deleteItemDialog = true; |
|
|
|
|
this.item = item |
|
|
|
|
this.deleteItemDialog = true |
|
|
|
|
}, |
|
|
|
|
confirmDeleteMultiple() { |
|
|
|
|
this.deleteMultipleDialog = true; |
|
|
|
|
this.deleteMultipleDialog = true |
|
|
|
|
}, |
|
|
|
|
deleteMultipleItems() { |
|
|
|
|
this.deleteMultipleAction(this.selectedItems); |
|
|
|
|
this.deleteMultipleAction(this.selectedItems) |
|
|
|
|
this.onRequest({ |
|
|
|
|
pagination: this.pagination, |
|
|
|
|
}); |
|
|
|
|
this.deleteMultipleDialog = false; |
|
|
|
|
this.selectedItems = null; |
|
|
|
|
}) |
|
|
|
|
this.deleteMultipleDialog = false |
|
|
|
|
this.selectedItems = null |
|
|
|
|
//this.onUpdateOptions(this.options); |
|
|
|
|
}, |
|
|
|
|
onRowSelected(items) { |
|
|
|
@ -392,23 +455,23 @@ export default { |
|
|
|
|
this.$refs.selectableTable.clearSelected() |
|
|
|
|
}, |
|
|
|
|
async deleteSelected() { |
|
|
|
|
this.deleteMultipleAction(this.selected); |
|
|
|
|
this.deleteMultipleAction(this.selected) |
|
|
|
|
this.onRequest({ |
|
|
|
|
pagination: this.pagination, |
|
|
|
|
}); |
|
|
|
|
}) |
|
|
|
|
}, |
|
|
|
|
//...actions, |
|
|
|
|
// From ListMixin |
|
|
|
|
...mapActions('userreluser', { |
|
|
|
|
getPage: 'fetchAll', |
|
|
|
|
create: 'create', |
|
|
|
|
update: 'update', |
|
|
|
|
deleteItem: 'del', |
|
|
|
|
deleteMultipleAction: 'delMultiple' |
|
|
|
|
...mapActions("userreluser", { |
|
|
|
|
getPage: "fetchAll", |
|
|
|
|
create: "create", |
|
|
|
|
update: "update", |
|
|
|
|
deleteItem: "del", |
|
|
|
|
deleteMultipleAction: "delMultiple", |
|
|
|
|
}), |
|
|
|
|
...mapActions('resourcenode', { |
|
|
|
|
findResourceNode: 'findResourceNode', |
|
|
|
|
...mapActions("resourcenode", { |
|
|
|
|
findResourceNode: "findResourceNode", |
|
|
|
|
}), |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
</script> |
|
|
|
|