Chamilo is a learning management system focused on ease of use and accessibility
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.
chamilo-lms/assets/vue/components/glossary/GlossaryImportForm.vue

118 lines
3.5 KiB

<template>
<form @submit.prevent="submitForm">
<div class="field 2">
<div class="8">
<label for="glossary_file" class="h-4">
File
</label>
<input class="mt-1" :ref="fileInputRef" name="file" type="file" id="glossary_file"/>
</div>
</div>
<div class="field">
<label>File type</label>
<div class="field-radiobutton">
<input name="file_type" value="csv" type="radio" id="qf_85f94d" v-model="fileType" checked="checked"/>
<label for="qf_85f94d" class="">CSV</label>
</div>
<div class="field-radiobutton">
<input name="file_type" value="xls" type="radio" id="qf_bff468" v-model="fileType"/>
<label for="qf_bff468" class="">XLS</label>
</div>
</div>
<div class="field 2">
<div class="8">
<div id="replace" class="field-checkbox">
<input class="appearance-none checked:bg-support-4 outline-none" name="replace" type="checkbox" value="1"
id="qf_5b8df0" v-model="replace"/>
<label for="qf_5b8df0" class="">
Delete all terms before import.
</label>
</div>
</div>
</div>
<div class="field 2">
<div class="8">
<div id="update" class="field-checkbox">
<input class="appearance-none checked:bg-support-4 outline-none" name="update" type="checkbox" value="1"
id="qf_594e6e" v-model="update"/>
<label for="qf_594e6e" class="">
Update existing terms.
</label>
</div>
</div>
</div>
<div class="field 2">
<div class="8">
<button class="btn btn--primary" name="SubmitImport" type="submit" id="glossary_SubmitImport">
<em class="mdi mdi-check"></em> Import
</button>
</div>
</div>
</form>
</template>
<script setup>
import axios from 'axios';
import {ENTRYPOINT} from "../../config/entrypoint";
import {useRoute, useRouter} from "vue-router";
import {useI18n} from "vue-i18n";
import {ref} from "vue";
import {RESOURCE_LINK_PUBLISHED} from "../resource_links/visibility";
const route = useRoute()
const router = useRouter()
const {t} = useI18n()
const fileInputRef = ref(null)
const fileType = ref("csv")
const replace = ref(false)
const update = ref(false)
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 submitForm = async () => {
const fileInput = document.getElementById('glossary_file')
const file = fileInput.files[0]
const formData = new FormData()
formData.append("file", file)
formData.append("file_type", fileType.value)
formData.append("replace", replace.value)
formData.append("update", update.value)
formData.append("sid", route.query.sid)
formData.append("cid", route.query.cid)
formData.append("parentResourceNodeId", parentResourceNodeId.value)
formData.append("resourceLinkList", resourceLinkList.value)
console.log('formData', formData)
console.log(ENTRYPOINT + 'glossaries/import')
try {
// eslint-disable-next-line no-unused-vars
const response = await axios.post(ENTRYPOINT + 'glossaries/import', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
router.push({
name: "GlossaryList",
query: route.query,
})
} catch (error) {
fileInputRef.value = null
fileType.value = "csv"
replace.value = false
update.value = false
}
}
</script>