Jonathan Druart
0b380ecfa3
This is picking some improvements made by Agustin on bug 32607. This patch is only a POC and we should apply this change to the different delete route. We will then remove the *FormConfirmDelete components, and the /delete routes Initially I wanted to have the same behaviour as in other areas of Koha, and have a separate view for the deletion step. But it's too much overhead for not much gain. Additionally we will have to remove messages.js, the aim of this file was to import the methods to add messages very easily (only 1 import line). Now we will need 2 lines (it was more when I added messages.js, because I didn't inject the store). Not a big deal. Finally, there is something weird in Main.vue we need to fix. The console is showing a warning "[Vue warn]: setup() return property "_is_loading" should not start with "$" or "_" which are reserved prefixes for Vue internals." I had a hard time to display this "loading" modal when the app is loading all the things it needs. Pinia/store is not available as we are accessing the methods/actions too earlier. It will be good to fix that before we decide to move forward with this approach. Signed-off-by: Matt Blenkinsop <matt.blenkinsop@ptfs-europe.com> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> Signed-off-by: Pedro Amorim <pedro.amorim@ptfs-europe.com> Signed-off-by: Agustín Moyano <agustinmoyano@theke.io> Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
248 lines
9.6 KiB
Vue
248 lines
9.6 KiB
Vue
<template>
|
|
<div v-if="_is_loading">
|
|
<Dialog />
|
|
</div>
|
|
<div v-else-if="ERMModule">
|
|
<Breadcrumb />
|
|
<div class="main container-fluid">
|
|
<div class="row">
|
|
<div class="col-sm-10 col-sm-push-2">
|
|
<main>
|
|
<Dialog />
|
|
<router-view />
|
|
</main>
|
|
</div>
|
|
|
|
<div class="col-sm-2 col-sm-pull-10">
|
|
<aside>
|
|
<div id="navmenu">
|
|
<div id="navmenulist">
|
|
<h5>{{ $__("E-resource management") }}</h5>
|
|
<ul>
|
|
<li>
|
|
<router-link
|
|
to="/cgi-bin/koha/erm/agreements"
|
|
>
|
|
<i class="fa fa-check-circle-o"></i>
|
|
{{ $__("Agreements") }}</router-link
|
|
>
|
|
</li>
|
|
<li>
|
|
<router-link
|
|
to="/cgi-bin/koha/erm/licenses"
|
|
>
|
|
<i class="fa fa-gavel"></i>
|
|
{{ $__("Licenses") }}</router-link
|
|
>
|
|
</li>
|
|
<li>
|
|
<router-link
|
|
to="/cgi-bin/koha/erm/eholdings"
|
|
class="disabled"
|
|
>
|
|
<i class="fa fa-crosshairs"></i>
|
|
{{ $__("eHoldings") }}
|
|
</router-link>
|
|
</li>
|
|
|
|
<li>
|
|
<ul>
|
|
<li
|
|
v-for="provider in erm_providers"
|
|
:key="provider"
|
|
>
|
|
<router-link
|
|
v-if="provider == 'local'"
|
|
:to="`/cgi-bin/koha/erm/eholdings/local`"
|
|
class="disabled"
|
|
>
|
|
<i
|
|
class="fa fa-map-marker"
|
|
></i>
|
|
{{
|
|
$__("Local")
|
|
}}</router-link
|
|
>
|
|
<router-link
|
|
v-else-if="
|
|
provider == 'ebsco'
|
|
"
|
|
:to="`/cgi-bin/koha/erm/eholdings/ebsco`"
|
|
class="disabled"
|
|
>
|
|
<i class="fa fa-globe"></i>
|
|
{{
|
|
$__("EBSCO")
|
|
}}</router-link
|
|
>
|
|
<ul>
|
|
<li>
|
|
<router-link
|
|
:to="`/cgi-bin/koha/erm/eholdings/${provider}/packages`"
|
|
>
|
|
<i
|
|
class="fa fa-archive"
|
|
></i>
|
|
{{
|
|
$__("Packages")
|
|
}}</router-link
|
|
>
|
|
</li>
|
|
<li>
|
|
<router-link
|
|
:to="`/cgi-bin/koha/erm/eholdings/${provider}/titles`"
|
|
>
|
|
<i
|
|
class="fa fa-sort-alpha-asc"
|
|
></i>
|
|
{{
|
|
$__("Titles")
|
|
}}</router-link
|
|
>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</aside>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div v-else>
|
|
{{
|
|
$__(
|
|
"The e-resource management module is disabled, turn on 'ERMModule' to use it"
|
|
)
|
|
}}
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { inject } from "vue"
|
|
import Breadcrumb from "../../components/Breadcrumb.vue"
|
|
import Dialog from "../../components/Dialog.vue"
|
|
import { APIClient } from "../../fetch/api-client.js"
|
|
import "vue-select/dist/vue-select.css"
|
|
import { storeToRefs } from "pinia"
|
|
|
|
export default {
|
|
setup() {
|
|
const vendorStore = inject("vendorStore")
|
|
|
|
const AVStore = inject("AVStore")
|
|
|
|
const mainStore = inject("mainStore")
|
|
|
|
// Note that we cannot use loading and loaded from messages
|
|
// Pinia is not initiated yet there
|
|
const { _is_loading } = storeToRefs(mainStore)
|
|
|
|
return {
|
|
vendorStore,
|
|
AVStore,
|
|
mainStore,
|
|
erm_providers,
|
|
ERMModule,
|
|
_is_loading,
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
component: "agreement",
|
|
}
|
|
},
|
|
beforeCreate() {
|
|
this.mainStore._is_loading = true
|
|
|
|
const acq_client = APIClient.acquisition
|
|
acq_client.vendors.getAll().then(
|
|
vendors => {
|
|
this.vendorStore.vendors = vendors
|
|
this.initialized = true
|
|
},
|
|
error => {}
|
|
)
|
|
|
|
const av_client = APIClient.authorised_values
|
|
const authorised_values = {
|
|
av_agreement_statuses: "ERM_AGREEMENT_STATUS",
|
|
av_agreement_closure_reasons: "ERM_AGREEMENT_CLOSURE_REASON",
|
|
av_agreement_renewal_priorities: "ERM_AGREEMENT_RENEWAL_PRIORITY",
|
|
av_user_roles: "ERM_USER_ROLES",
|
|
av_license_types: "ERM_LICENSE_TYPE",
|
|
av_license_statuses: "ERM_LICENSE_STATUS",
|
|
av_agreement_license_statuses: "ERM_AGREEMENT_LICENSE_STATUS",
|
|
av_agreement_license_location: "ERM_AGREEMENT_LICENSE_LOCATION",
|
|
av_package_types: "ERM_PACKAGE_TYPE",
|
|
av_package_content_types: "ERM_PACKAGE_CONTENT_TYPE",
|
|
av_title_publication_types: "ERM_TITLE_PUBLICATION_TYPE",
|
|
}
|
|
|
|
let av_cat_array = Object.keys(authorised_values).map(function (
|
|
av_cat
|
|
) {
|
|
return '"' + authorised_values[av_cat] + '"'
|
|
})
|
|
|
|
av_client.values
|
|
.getCategoriesWithValues(av_cat_array)
|
|
.then(av_categories => {
|
|
Object.entries(authorised_values).forEach(
|
|
([av_var, av_cat]) => {
|
|
const av_match = av_categories.find(
|
|
element => element.category_name == av_cat
|
|
)
|
|
this.AVStore[av_var] = av_match.authorised_values
|
|
}
|
|
)
|
|
})
|
|
.then(() => (this.mainStore._is_loading = false))
|
|
},
|
|
components: {
|
|
Breadcrumb,
|
|
Dialog,
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
#navmenulist a.router-link-active {
|
|
font-weight: 700;
|
|
}
|
|
#menu ul ul,
|
|
#navmenulist ul ul {
|
|
padding-left: 2em;
|
|
font-size: 100%;
|
|
}
|
|
|
|
form .v-select {
|
|
display: inline-block;
|
|
background-color: white;
|
|
width: 30%;
|
|
}
|
|
|
|
.v-select,
|
|
input:not([type="submit"]):not([type="search"]):not([type="button"]):not([type="checkbox"]),
|
|
textarea {
|
|
border-color: rgba(60, 60, 60, 0.26);
|
|
border-width: 1px;
|
|
border-radius: 4px;
|
|
min-width: 30%;
|
|
}
|
|
.flatpickr-input {
|
|
width: 30%;
|
|
}
|
|
|
|
#navmenulist ul li a.disabled {
|
|
color: #666;
|
|
pointer-events: none;
|
|
font-weight: 700;
|
|
}
|
|
#navmenulist ul li a.disabled.router-link-active {
|
|
color: #000;
|
|
}
|
|
</style>
|