happy monday _ bleh _ #9

Merged
rrise merged 3 commits from mmoooorr into master 2025-06-11 01:43:57 +00:00
Showing only changes of commit 85a9b2d818 - Show all commits

View File

@@ -67,7 +67,7 @@
COL COL
</div> </div>
<div class="w-full mt-3"> <div class="w-full mt-3">
<InputMask placeholder="0.000" v-model="load.col" mask="9.999" class="w-full" /> <InputMask :unmask="loading" :value="load.col" placeholder="0.000" v-model="load.col" mask="9.999" class="w-full" />
<Message v-if="v$.$dirty && v$.col.$invalid" :value="false" size="small" severity="error" <Message v-if="v$.$dirty && v$.col.$invalid" :value="false" size="small" severity="error"
variant="simple">COL Required variant="simple">COL Required
</Message> </Message>
@@ -75,15 +75,20 @@
<div class="w-full mt-5"> <div class="w-full mt-5">
<label>Picture</label> <label>Picture</label>
<Message v-if="v$.$dirty && !file" :value="false" size="small" severity="error" <Message v-if="v$.$dirty && (!route.params.id && !file)" :value="false" size="small" severity="error"
variant="simple">Picture Required variant="simple">Picture Required
</Message> </Message>
<div class="w-1/2">
<img v-if="pictureUrl && route.params.id && !loading" :src="pictureUrl" alt="picture" />
</div>
<FileUpload v-model="file" mode="basic" @select="fileSelected" customUpload /> <FileUpload v-model="file" mode="basic" @select="fileSelected" customUpload />
</div> </div>
</div> </div>
</template> </template>
<template #footer> <template #footer>
<Button label="Add" :icon="icons.add" @click="add" /> <Button v-if="!route.params.id" label="Add" :icon="icons.add" @click="add" />
<Button v-else label="Save" :icon="icons.edit" @click="add" />
<Button class="ml-3" severity="danger" v-if="route.params.id" label="Delete" :icon="icons.delete" @click="deleteLoad" />
</template> </template>
</Card> </Card>
@@ -161,6 +166,12 @@ const fileSelected = (e: FileUploadSelectEvent) => {
file.value = e.files[0] file.value = e.files[0]
} }
const pictureUrl = ref<string | null>(null)
const calcUrl = () => {
const cache = new Date().getMilliseconds()
pictureUrl.value = import.meta.env.VITE_API + `/load/${route.params.id}/photo?cache=${cache}`
}
const load = ref({ const load = ref({
bullet: '', bullet: '',
cartridge: '', cartridge: '',
@@ -243,7 +254,7 @@ const addCartridgeName = async () => {
const add = async () => { const add = async () => {
v$.value.$touch() v$.value.$touch()
if (v$.value.$invalid || !file.value) { if (v$.value.$invalid || (!route.params.id && !file.value)) {
toast.add({ toast.add({
severity: 'error', severity: 'error',
summary: 'Error', summary: 'Error',
@@ -254,6 +265,12 @@ const add = async () => {
return return
} }
let id = ""
if (route.params.id) {
id = "/" + route.params.id.toString()
}
const formData = new FormData() const formData = new FormData()
formData.append('bullet_id', load.value.bullet) formData.append('bullet_id', load.value.bullet)
formData.append('cartridge_id', load.value.cartridge) formData.append('cartridge_id', load.value.cartridge)
@@ -261,22 +278,43 @@ const add = async () => {
formData.append('powder_gr', load.value.powderGrs.toString()) formData.append('powder_gr', load.value.powderGrs.toString())
formData.append('primer_id', load.value.primer) formData.append('primer_id', load.value.primer)
formData.append('col', load.value.col) formData.append('col', load.value.col)
formData.append('photo', file.value) if (file.value) {
formData.append('photo', file.value)
}
try { try {
const response = await axios.post<any, Response<string>>(`${import.meta.env.VITE_API}/load`, formData, { const response = await axios.post<any, Response<string>>(`${import.meta.env.VITE_API}/load${id}`, formData, {
headers: { headers: {
'Content-Type': 'multipart/form-data', 'Content-Type': 'multipart/form-data',
}, },
}) })
const message = route.params.id ? 'Load updated' : 'Load added'
toast.add({ toast.add({
severity: 'success', severity: 'success',
summary: 'Success', summary: 'Success',
detail: 'Load added', detail: message,
life: 3000, life: 3000,
}) })
if (route.params.id) {
load.value = {
bullet: '',
cartridge: '',
powder: '',
powderGrs: 0,
primer: '',
col: '',
}
file.value = null
v$.value.$reset()
await fetchLoad()
return
}
await router.push(`/loads/edit/${response.data.payload}`) await router.push(`/loads/edit/${response.data.payload}`)
} catch (error) { } catch (error) {
toast.add({ toast.add({
@@ -287,6 +325,31 @@ const add = async () => {
}) })
} }
} }
const deleteLoad = async () => {
if (!route.params.id) {
return
}
try {
await axios.delete(`${import.meta.env.VITE_API}/load/${route.params.id}`)
toast.add({
severity: 'success',
summary: 'Success',
detail: 'Load deleted',
life: 3000,
})
await router.push('/loads/search')
} catch (error) {
toast.add({
severity: 'error',
summary: 'Error',
detail: 'Error deleting load',
life: 3000,
})
}
}
const fetchLoad = async () => { const fetchLoad = async () => {
if (!route.params.id) { if (!route.params.id) {
@@ -302,6 +365,18 @@ const fetchLoad = async () => {
load.value.powder = response.data.payload.powder.id load.value.powder = response.data.payload.powder.id
load.value.powderGrs = response.data.payload.powder_gr load.value.powderGrs = response.data.payload.powder_gr
load.value.primer = response.data.payload.primer.id load.value.primer = response.data.payload.primer.id
load.value.col = response.data.payload.col.toString()
if (!load.value.col.includes('.')) {
load.value.col = `${load.value.col}.000`
} else {
const parts = load.value.col.split('.')
if (parts[1].length < 3) {
load.value.col = `${parts[0]}.${parts[1].padEnd(3, '0')}`
}
}
calcUrl()
} else { } else {
toast.add({ toast.add({
severity: 'error', severity: 'error',
@@ -324,7 +399,9 @@ onMounted(() => {
fetchCartridges() fetchCartridges()
if (route.params.id) { if (route.params.id) {
fetchLoad() setTimeout(() => {
fetchLoad()
}, 100)
} }
}) })