fixed file upload

This commit is contained in:
vabene1111
2025-06-22 10:03:34 +02:00
parent 1dd3f227ac
commit 6baf640e6d
5 changed files with 41 additions and 20 deletions

View File

@@ -79,11 +79,20 @@ onMounted(() => {
* save file to database via fileApi composable
*/
function saveFile() {
loading.value = true
let event: ("create" | "save") = isUpdate() ? 'save' : 'create'
createOrUpdateUserFile(editingObj.value.name, file.value, editingObj.value.id).then(r => {
editingObj.value = r
editingObjChanged.value = false
emit(event, r)
useMessageStore().addPreparedMessage(PreparedMessage.UPDATE_SUCCESS)
}).catch(err => {
useMessageStore().addError(ErrorMessageType.UPDATE_ERROR, err)
}).finally(() => {
editingObjChanged.value = false
loading.value = false
})
}

View File

@@ -1,7 +1,7 @@
import {useDjangoUrls} from "@/composables/useDjangoUrls";
import {ref} from "vue";
import {getCookie} from "@/utils/cookie";
import {RecipeFromSourceResponseFromJSON, RecipeImageFromJSON, UserFile, UserFileFromJSON} from "@/openapi";
import {RecipeFromSourceResponseFromJSON, RecipeImageFromJSON, ResponseError, UserFile, UserFileFromJSON} from "@/openapi";
/**
@@ -40,9 +40,13 @@ export function useFileApi() {
headers: {'X-CSRFToken': getCookie('csrftoken')},
body: formData
}).then(r => {
return r.json().then(r => {
return UserFileFromJSON(r)
})
if (r.ok) {
return r.json().then(r => {
return UserFileFromJSON(r)
})
} else {
throw new ResponseError(r)
}
}).finally(() => {
fileApiLoading.value = false
})
@@ -81,10 +85,10 @@ export function useFileApi() {
* @param file file object to upload
* @param text text to import
*/
function doAiImport(file: File|null, text: string = '') {
function doAiImport(file: File | null, text: string = '') {
let formData = new FormData()
if(file != null){
if (file != null) {
formData.append('file', file)
} else {
formData.append('file', '')

View File

@@ -21,7 +21,9 @@
<v-btn class="float-right" icon="$create" color="create" v-if="!genericModel.model.disableCreate">
<i class="fa-solid fa-plus"></i>
<model-edit-dialog :close-after-create="false" :model="model"
@create="loadItems({page: tablePage, itemsPerPage: useUserPreferenceStore().deviceSettings.general_tableItemsPerPage, search: searchQuery})"></model-edit-dialog>
@create="loadItems({page: tablePage, itemsPerPage: useUserPreferenceStore().deviceSettings.general_tableItemsPerPage, search: searchQuery})"
@save="loadItems({page: tablePage, itemsPerPage: useUserPreferenceStore().deviceSettings.general_tableItemsPerPage, search: searchQuery})"
@delete="loadItems({page: tablePage, itemsPerPage: useUserPreferenceStore().deviceSettings.general_tableItemsPerPage, search: searchQuery})"></model-edit-dialog>
</v-btn>
</template>
<v-card-actions v-if="genericModel.model.name == 'RecipeImport'">
@@ -51,7 +53,8 @@
<v-icon icon="$menu"></v-icon>
<v-menu activator="parent" close-on-content-click>
<v-list density="compact">
<v-list-item prepend-icon="$edit" :to="{name: 'ModelEditPage', params: {model: model, id: item.id}}" v-if="!genericModel.model.disableCreate && !genericModel.model.disableUpdate && !genericModel.model.disableDelete" >
<v-list-item prepend-icon="$edit" :to="{name: 'ModelEditPage', params: {model: model, id: item.id}}"
v-if="!genericModel.model.disableCreate && !genericModel.model.disableUpdate && !genericModel.model.disableDelete">
{{ $t('Edit') }}
</v-list-item>
<v-list-item prepend-icon="fa-solid fa-arrows-to-dot" v-if="genericModel.model.isMerge" link>
@@ -71,7 +74,7 @@
{{ $t('Import') }}
<sync-dialog :sync="item"></sync-dialog>
</v-list-item>
<v-list-item prepend-icon="fa-solid fa-rotate" v-if="genericModel.model.name == 'RecipeImport'" @click="importRecipe(item)">
<v-list-item prepend-icon="fa-solid fa-rotate" v-if="genericModel.model.name == 'RecipeImport'" @click="importRecipe(item)">
{{ $t('Import') }}
</v-list-item>
</v-list>
@@ -209,8 +212,8 @@ function changeModel(m: Model) {
* convert a RecipeImport to a "real" external recipes and reload the table
* @param item
*/
function importRecipe(item: RecipeImport){
let api = new ApiApi()
function importRecipe(item: RecipeImport) {
let api = new ApiApi()
api.apiRecipeImportImportRecipeCreate({id: item.id!, recipeImport: item}).then(r => {
loadItems({page: 1, itemsPerPage: useUserPreferenceStore().deviceSettings.general_tableItemsPerPage, search: searchQuery.value})
}).catch(err => {
@@ -221,7 +224,7 @@ let api = new ApiApi()
/**
* convert all RecipeImports to "real" external recipes and reload the table (should be empty afterwards)
*/
function importAllRecipes(){
function importAllRecipes() {
let api = new ApiApi()
api.apiRecipeImportImportAllCreate({recipeImport: {} as RecipeImport}).then(r => {