implemented delete configitem

This commit is contained in:
2024-02-21 10:45:53 +01:00
parent 6ebad13a03
commit 4b193ac5a1
11 changed files with 120 additions and 49 deletions

View File

@ -118,6 +118,7 @@ export const deleteConfigItemById = async (id, result) => {
try { try {
let sql = `DELETE FROM changedb WHERE primaryID = ?`; let sql = `DELETE FROM changedb WHERE primaryID = ?`;
const results = await ownConn.query(sql, [id]) const results = await ownConn.query(sql, [id])
results.insertId = results.insertId.toString();
result(null, results); result(null, results);
} }
catch (err) { catch (err) {

View File

@ -1,7 +1,7 @@
const clientsideConfig = { const clientsideConfig = {
// later for the server // later for the server
url: 'tueitapp.tueit.de', //url: 'tueitapp.tueit.de',
// url: 'localhost', url: 'localhost',
port: 3000, port: 3000,
}; };

View File

@ -76,7 +76,7 @@
</template> </template>
<script setup> <script setup>
import { ref, onMounted } from 'vue'; import { ref, onMounted, watch } from 'vue';
import Axios from '../axios.config.js'; import Axios from '../axios.config.js';
import clientsideConfig from '../../clientsideConfig.js'; import clientsideConfig from '../../clientsideConfig.js';
import { useStore } from 'vuex'; import { useStore } from 'vuex';
@ -85,9 +85,9 @@ import { computed } from 'vue';
const store = useStore(); const store = useStore();
const editable = computed(() => store.state.assetEditable); const editable = computed(() => store.state.assetEditable);
const chosenAssetId = computed(() => store.state.chosenAssetId); const chosenAssetId = computed(() => store.state.chosenAssetId);
const deleteAssetBool = computed(() => store.state.deleteAsset)
const darkMode = ref(true) const darkMode = ref(true)
// const editable = ref(false)
const item = ref({}); const item = ref({});
// get config item from id // get config item from id
@ -123,43 +123,61 @@ const updateConfigItem = async () => {
await Axios.put( await Axios.put(
`https://${clientsideConfig.url}:${clientsideConfig.port}/api/updateConfigItem`, `https://${clientsideConfig.url}:${clientsideConfig.port}/api/updateConfigItem`,
{ {
primaryID: item.value.primaryID, primaryID: item.value.primaryID,
assetName: item.value.assetName, assetName: item.value.assetName,
customerID: item.value.customerID, customerID: item.value.customerID,
customer: item.value.customer, customer: item.value.customer,
location: item.value.location, location: item.value.location,
remoteLocation: item.value.remoteLocation, remoteLocation: item.value.remoteLocation,
type: item.value.type, type: item.value.type,
description: item.value.description, description: item.value.description,
notes: item.value.notes, notes: item.value.notes,
state: item.value.state, state: item.value.state,
lastView: item.value.lastView, lastView: item.value.lastView,
user: item.value.user, user: item.value.user,
hardwareBool: item.value.hardwareBool, hardwareBool: item.value.hardwareBool,
model: item.value.model, model: item.value.model,
serialnumber: item.value.serialnumber, serialnumber: item.value.serialnumber,
CPU: item.value.CPU, CPU: item.value.CPU,
RAM: item.value.RAM, RAM: item.value.RAM,
storageConfiguration: item.value.storageConfiguration, storageConfiguration: item.value.storageConfiguration,
miscellaneous: item.value.miscellaneous, miscellaneous: item.value.miscellaneous,
softwareBool: item.value.softwareBool, softwareBool: item.value.softwareBool,
software: item.value.software, software: item.value.software,
version: item.value.version, version: item.value.version,
license: item.value.license, license: item.value.license,
networkBool: item.value.networkBool, networkBool: item.value.networkBool,
IPv4: item.value.IPv4, IPv4: item.value.IPv4,
IPv6: item.value.IPv6, IPv6: item.value.IPv6,
MAC: item.value.MAC, MAC: item.value.MAC,
subnetmask: item.value.subnetmask, subnetmask: item.value.subnetmask,
} }
) )
await getItemById(); await getItemById();
} catch (err) { } catch (err) {
console.log(err); console.log(err.response.statusText);
} }
} }
} }
const confirmDeleteAsset = async () => {
if (deleteAssetBool.value === true) {
if (confirm("Do you really want to delete this config item? It cannot be undone!")) {
try {
await Axios.delete(`https://${clientsideConfig.url}:${clientsideConfig.port}/api/deleteConfigItem/${chosenAssetId.value}`);
store.commit('undoDeleteAsset');
store.commit('changeToAssetlist');
} catch (err) {
console.log(err.response.statusText);
}
} else {
store.commit('undoDeleteAsset');
}
}
}
watch(deleteAssetBool, confirmDeleteAsset);
onMounted(() => { onMounted(() => {
getItemById(); getItemById();
}); });

View File

@ -128,7 +128,7 @@ const updateConfigItem = async () => {
); );
await getItemById(); await getItemById();
} catch (err) { } catch (err) {
console.log(err); console.log(err.response.statusText);
} }
} }

View File

@ -145,7 +145,7 @@ const updateConfigItem = async () => {
} }
); );
} catch (err) { } catch (err) {
console.log(err); console.log(err.response.statusText);
} }
} else { } else {
if (item.value.IPv4 == null) { if (item.value.IPv4 == null) {
@ -192,7 +192,7 @@ const updateConfigItem = async () => {
} }
); );
} catch (err) { } catch (err) {
console.log(err); console.log(err.response.statusText);
} }
} else { } else {
if (item.value.IPv6 == null) { if (item.value.IPv6 == null) {

View File

@ -79,7 +79,7 @@
<pre v-if="isExpanded" :class="['label', darkMode ? 'label-darkmode' : 'label-lightmode']">Edit</pre> <pre v-if="isExpanded" :class="['label', darkMode ? 'label-darkmode' : 'label-lightmode']">Edit</pre>
</Transition> </Transition>
</button> </button>
<button :class="[darkMode ? 'button-darkmode' : 'button-lightmode']" id="delete"> <button :class="[darkMode ? 'button-darkmode' : 'button-lightmode']" id="delete" @click="deleteAsset">
<div class="icon" id="delete-icon"> <div class="icon" id="delete-icon">
<img :class="[darkMode ? 'img-darkmode' : 'img-lightmode']" loading="lazy" <img :class="[darkMode ? 'img-darkmode' : 'img-lightmode']" loading="lazy"
src="../icons/actionbar-icons/Delete-Icon.svg" /> src="../icons/actionbar-icons/Delete-Icon.svg" />
@ -100,6 +100,9 @@ const store = useStore()
const toggleEditable = () => { const toggleEditable = () => {
store.commit('toggleEditableAsset'); store.commit('toggleEditableAsset');
}; };
const deleteAsset = () => {
store.commit('doDeleteAsset');
};
</script> </script>
@ -115,7 +118,6 @@ export default {
}, },
methods: { methods: {
toggleActionbar() { toggleActionbar() {
console.log('Actionbar toggled');
this.isExpanded = !this.isExpanded; this.isExpanded = !this.isExpanded;
}, },
}, },

View File

@ -4,6 +4,7 @@ const store = createStore({
state() { state() {
return { return {
assetEditable: false, assetEditable: false,
deleteAsset: false,
onAssetlist: true, onAssetlist: true,
onCustomerAssetlist: false, onCustomerAssetlist: false,
onAsset: false, onAsset: false,
@ -46,6 +47,12 @@ const store = createStore({
state.chosenAssetId = -1 state.chosenAssetId = -1
state.assetEditable = false state.assetEditable = false
}, },
doDeleteAsset(state) {
state.deleteAsset = true
},
undoDeleteAsset(state) {
state.deleteAsset = false
}
}, },
}); });

View File

@ -0,0 +1,22 @@
import { errorMsg } from "../../middleware/configItems";
import { OutgoingMessage } from 'http';
export default defineEventHandler(async (event) => {
const headers: Record<string, Parameters<OutgoingMessage['setHeader']>[1]> = {
'Access-Control-Allow-Origin': 'https://tueitapp.tueit.de',
'Access-Control-Allow-Headers': 'authorization, content-type',
'Access-Control-Allow-Methods': 'OPTIONS,GET,HEAD,PUT,PATCH,POST,DELETE',
};
setResponseHeaders(event, headers)
if (!(errorMsg === '')) {
throw createError({
statusCode: 400,
statusMessage: errorMsg,
})
}
setResponseStatus(event, 200)
return
})

View File

@ -11,8 +11,6 @@ export default defineEventHandler(async (event) => {
}; };
setResponseHeaders(event, headers) setResponseHeaders(event, headers)
console.log(event)
if (!loginSuccessful) { if (!loginSuccessful) {
throw createError({ throw createError({
statusCode: 400, statusCode: 400,

View File

@ -3,15 +3,6 @@ import { OutgoingMessage } from 'http';
export default defineEventHandler(async (event) => { export default defineEventHandler(async (event) => {
// const headers: Record<string, Parameters<OutgoingMessage['setHeader']>[1]> = {
// 'Access-Control-Allow-Origin': 'https://tueitapp.tueit.de',
// 'Access-Control-Allow-Headers': 'authorization, content-type',
// 'Access-Control-Allow-Methods': 'GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS',
// };
// setResponseHeaders(event, headers)
console.log(event)
if (!(errorMsg === '')) { if (!(errorMsg === '')) {
throw createError({ throw createError({
statusCode: 400, statusCode: 400,

View File

@ -107,6 +107,38 @@ export default defineEventHandler(async (event) => {
} }
} }
} }
if (event.path.startsWith("/api/deleteConfigItem")) {
let itemId = null;
const path = event._path;
const pathSegments = path.split('/');
itemId = pathSegments[pathSegments.length - 1];
// delete the config item in the backend
try {
let res = await axiosInstance.delete(`https://${serversideConfig.url}:${serversideConfig.port}/configItems/${itemId}`);
} catch (err) {
if (axios.isAxiosError(err)) {
const axiosError = err as AxiosError;
if (axiosError.response) {
// Axios error
console.error(axiosError.response.data.message);
errorMsg = axiosError.response.data.message;
} else if (axiosError.request) {
console.log(err)
// If error was caused by the request
console.error(axiosError.request);
} else {
// Other errors
console.error('Error', axiosError.message);
}
} else {
// No AxiosError
console.error('Error', err);
}
}
}
}) })
export { configItems, configItem, errorMsg }; export { configItems, configItem, errorMsg };