You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
4.1 KiB
154 lines
4.1 KiB
<template>
|
|
<div>
|
|
<form @submit.prevent="submitGlossaryForm" name="glossary" id="glossary">
|
|
<div class="field">
|
|
<div class="p-float-label">
|
|
<input v-model="formData.name" id="glossary_title" name="name" type="text" class="p-inputtext p-component p-filled" />
|
|
|
|
<label for="glossary_title">
|
|
<span class="form_required">*</span>
|
|
Term
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="field">
|
|
<div class="p-float-label">
|
|
<textarea v-model="formData.description" id="description" name="description"></textarea>
|
|
|
|
<label for="description">
|
|
<span class="form_required">*</span>
|
|
Term definition
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="field 2">
|
|
<div class="8">
|
|
|
|
<label for="glossary_SubmitGlossary" class="h-4 ">
|
|
|
|
</label>
|
|
|
|
<button class="btn btn--primary" name="SubmitGlossary" type="submit" id="glossary_SubmitGlossary">
|
|
<em class="mdi mdi-plus"></em> Save term
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<div class="col-sm-offset-2 col-sm-10">
|
|
<span class="form_required">*</span>
|
|
<small>Required field</small>
|
|
</div>
|
|
</div>
|
|
<input name="_qf__glossary" type="hidden" value="" id="glossary__qf__glossary" />
|
|
<input name="sec_token" type="hidden" value="1e7d47c276bfdfe308a79e1b71d58089" id="glossary_sec_token" />
|
|
|
|
</form>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import axios from "axios";
|
|
import { ENTRYPOINT } from "../../config/entrypoint";
|
|
import { useRoute, useRouter } from 'vue-router';
|
|
import { useI18n } from "vue-i18n";
|
|
import { ref, onMounted } from "vue";
|
|
import {RESOURCE_LINK_PUBLISHED} from "../resource_links/visibility";
|
|
|
|
export default {
|
|
props: {
|
|
termId: {
|
|
type: Number,
|
|
default: null
|
|
}
|
|
},
|
|
setup(props) {
|
|
const route = useRoute();
|
|
const router = useRouter();
|
|
const { t } = useI18n();
|
|
|
|
const parentResourceNodeId = ref(Number(route.params.node));
|
|
|
|
const resourceLinkList = ref(
|
|
JSON.stringify([
|
|
{
|
|
sid: route.query.sid,
|
|
cid: route.query.cid,
|
|
visibility: RESOURCE_LINK_PUBLISHED, // visible by default
|
|
},
|
|
])
|
|
);
|
|
|
|
const formData = ref({
|
|
name: '',
|
|
description: '',
|
|
});
|
|
|
|
const fetchTerm = () => {
|
|
if (props.termId) {
|
|
axios.get(ENTRYPOINT + 'glossaries/' + props.termId)
|
|
.then(response => {
|
|
const glossary = response.data;
|
|
formData.value.name = glossary.name;
|
|
formData.value.description = glossary.description;
|
|
})
|
|
.catch(error => {
|
|
console.error('Error fetching link:', error);
|
|
});
|
|
}
|
|
};
|
|
|
|
onMounted(() => {
|
|
fetchTerm();
|
|
});
|
|
|
|
const submitGlossaryForm = () => {
|
|
|
|
const postData = {
|
|
name: formData.value.name,
|
|
description: formData.value.description,
|
|
parentResourceNodeId: parentResourceNodeId.value,
|
|
resourceLinkList: resourceLinkList.value,
|
|
sid: route.query.sid,
|
|
cid: route.query.cid,
|
|
};
|
|
|
|
if (props.termId) {
|
|
const endpoint = `${ENTRYPOINT}glossaries/${props.termId}`;
|
|
axios.put(endpoint, postData)
|
|
.then(response => {
|
|
console.log('Glossary updated:', response.data);
|
|
|
|
router.push({
|
|
name: "GlossaryList",
|
|
query: route.query,
|
|
});
|
|
})
|
|
.catch(error => {
|
|
console.error('Error updating Glossary:', error);
|
|
});
|
|
|
|
} else {
|
|
const endpoint = `${ENTRYPOINT}glossaries`;
|
|
axios.post(endpoint, postData)
|
|
.then(response => {
|
|
console.log('Glossary created:', response.data);
|
|
|
|
router.push({
|
|
name: "GlossaryList",
|
|
query: route.query,
|
|
});
|
|
})
|
|
.catch(error => {
|
|
console.error('Error creating Glossary:', error);
|
|
});
|
|
|
|
}
|
|
};
|
|
|
|
return {
|
|
formData,
|
|
submitGlossaryForm,
|
|
};
|
|
},
|
|
};
|
|
</script>
|
|
|