added drag&drop for Report items on Dashboard,

added temporary buttons for testing
This commit is contained in:
Igor Miňo 2025-04-13 15:39:11 +02:00
parent ee4729b8ef
commit 345e70a402
4 changed files with 200 additions and 30 deletions

View File

@ -1,15 +1,16 @@
{ {
"name": "bugreport", "name": "bugreport",
"version": "0.0.0", "version": "0.0.1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "bugreport", "name": "bugreport",
"version": "0.0.0", "version": "0.0.1",
"dependencies": { "dependencies": {
"vue": "^3.5.13", "vue": "^3.5.13",
"vue-router": "^4.5.0" "vue-router": "^4.5.0",
"vuedraggable": "^4.1.0"
}, },
"devDependencies": { "devDependencies": {
"@vitejs/plugin-vue": "^5.2.1", "@vitejs/plugin-vue": "^5.2.1",
@ -1172,6 +1173,12 @@
"fsevents": "~2.3.2" "fsevents": "~2.3.2"
} }
}, },
"node_modules/sortablejs": {
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz",
"integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==",
"license": "MIT"
},
"node_modules/source-map": { "node_modules/source-map": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@ -1343,6 +1350,18 @@
"peerDependencies": { "peerDependencies": {
"vue": "^3.2.0" "vue": "^3.2.0"
} }
},
"node_modules/vuedraggable": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz",
"integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==",
"license": "MIT",
"dependencies": {
"sortablejs": "1.14.0"
},
"peerDependencies": {
"vue": "^3.0.1"
}
} }
} }
} }

View File

@ -10,7 +10,8 @@
}, },
"dependencies": { "dependencies": {
"vue": "^3.5.13", "vue": "^3.5.13",
"vue-router": "^4.5.0" "vue-router": "^4.5.0",
"vuedraggable": "^4.1.0"
}, },
"devDependencies": { "devDependencies": {
"@vitejs/plugin-vue": "^5.2.1", "@vitejs/plugin-vue": "^5.2.1",

View File

@ -66,17 +66,19 @@ h1 {
button { button {
border-radius: 8px; border-radius: 8px;
border: 1px solid transparent; border: 1px solid var(--color-bg0);
padding: 0.6em 1.2em; padding: 0.6em 1.2em;
font-size: 1em; font-size: 1em;
font-weight: 500; font-weight: 500;
font-family: inherit; font-family: inherit;
background-color: #1a1a1a; background-color: var(--color-bg2);
color: var(--color-text0);
cursor: pointer; cursor: pointer;
transition: border-color 0.25s; transition: all 0.3s;
} }
button:hover { button:hover {
border-color: #646cff; border-color: var(--color-bg1);
background-color: var(--color-bg0);
} }
button:focus, button:focus,
button:focus-visible { button:focus-visible {
@ -116,6 +118,7 @@ button:focus-visible {
padding: 5px 10px; padding: 5px 10px;
border-radius: 5px; border-radius: 5px;
margin-left: 20px; margin-left: 20px;
transition: all 0.3s;
} }
#header .menu a:hover { #header .menu a:hover {
color: var(--color-text1); color: var(--color-text1);
@ -163,7 +166,7 @@ button:focus-visible {
flex-direction: row; flex-direction: row;
justify-content: space-between; justify-content: space-between;
border-top-right-radius: 5px; border-top-right-radius: 5px;
cursor: grab;
} }
#dashboard .report .report-header .report-title { #dashboard .report .report-header .report-title {
@ -184,6 +187,9 @@ button:focus-visible {
padding: 5px; padding: 5px;
border-bottom-right-radius: 5px; border-bottom-right-radius: 5px;
} }
#dashboard .report:hover {
filter: brightness(1.2);
}
/* ---------------------------------------------------- /* ----------------------------------------------------
99 - LIGHT MODE 99 - LIGHT MODE

View File

@ -2,40 +2,184 @@
<div id="dashboard"> <div id="dashboard">
<div id="inbox"> <div id="inbox">
<h2>Nezaradené</h2> <h2>Nezaradené</h2>
<draggable
<Report title="Pridať bug" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum." date="2025-04-13 01:30:18" /> v-model="itemsUncategorized"
<Report title="Resetovat pismo" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum." date="2025-04-13 01:30:18" /> item-key="id"
:group="{ name: 'itemsUncategorized', pull: true, put: true }"
@change="onDragChange"
>
<template #item="{ element }">
<div class="draggable-item">
<Report
:title="element.title"
:description="element.description"
:date="element.date"
/>
</div>
</template>
</draggable>
</div> </div>
<div id="waiting"> <div id="waiting">
<h2>Čakajúce</h2> <h2>Čakajúce</h2>
<draggable
<Report title="Vymena obrazkov za ikonky" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum." date="2025-04-13 01:30:18" /> v-model="itemsWaiting"
<Report title="Doplnit serverove ikoky a toto bude dlhy nadpis, ze ako sa s tym vysporiada" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum." date="2025-04-13 01:30:18" /> item-key="id"
<Report title="Rozdelit na 2 polozky na fakture" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum." date="2025-04-13 01:30:18" /> :group="{ name: 'itemsWaiting', pull: true, put: true }"
<Report title="Rozdelit na 2 polozky na fakture" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum." date="2025-04-13 01:30:18" /> @change="onDragChange"
<Report title="Rozdelit na 2 polozky na fakture" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum." date="2025-04-13 01:30:18" /> >
<Report title="Rozdelit na 2 polozky na fakture" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum." date="2025-04-13 01:30:18" /> <template #item="{ element }">
<Report title="Rozdelit na 2 polozky na fakture" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum." date="2025-04-13 01:30:18" /> <div class="draggable-item">
<Report title="Rozdelit na 2 polozky na fakture" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum." date="2025-04-13 01:30:18" /> <Report
<Report title="Rozdelit na 2 polozky na fakture" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum." date="2025-04-13 01:30:18" /> :title="element.title"
:description="element.description"
:date="element.date"
/>
</div>
</template>
</draggable>
</div> </div>
<div id="inprogress"> <div id="inprogress">
<h2>Rozpracované</h2> <h2>Rozpracované</h2>
<draggable
v-model="itemsInProgress"
item-key="id"
:group="{ name: 'itemsInProgress', pull: true, put: true }"
@change="onDragChange"
>
<template #item="{ element }">
<div class="draggable-item">
<Report
:title="element.title"
:description="element.description"
:date="element.date"
/>
</div>
</template>
</draggable>
</div> </div>
<div id="done"> <div id="done">
<h2>Hotové</h2> <h2>Hotové</h2>
<draggable
v-model="itemsDone"
item-key="id"
:group="{ name: 'itemsDone', pull: true, put: true }"
@change="onDragChange"
>
<template #item="{ element }">
<div class="draggable-item">
<Report
:title="element.title"
:description="element.description"
:date="element.date"
/>
</div>
</template>
</draggable>
</div> </div>
</div> </div>
<button @click="vypisData">Vypíš data</button>
<button @click="pridajJedno">Pridaj jedno</button>
</template> </template>
<script> <script>
import Report from '../components/Report.vue'; import Report from "../components/Report.vue";
import draggable from "vuedraggable";
export default { export default {
components: { components: {
Report Report,
} draggable,
} },
data() {
return {
itemsUncategorized: [
{
id: 1,
title: "Pridať bug",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum.",
date: "2025-04-13 01:30:18",
},
{
id: 2,
title: "Resetovat pismo",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum.",
date: "2025-04-13 01:30:18",
},
],
itemsWaiting: [
{
id: 11,
title: "Vymena obrazkov za ikonky",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum.",
date: "2025-04-13 01:30:18",
},
{
id: 12,
title:
"Doplnit serverove ikoky a toto bude dlhy nadpis, ze ako sa s tym vysporiada",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum.",
date: "2025-04-13 01:30:18",
},
{
id: 13,
title: "Rozdelit na 2 polozky na fakture",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum.",
date: "2025-04-13 01:30:18",
},
],
itemsInProgress: [
{
id: 21,
title: "Imeplemtovat logovanie",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum.",
date: "2025-04-13 15:11:23",
},
],
itemsDone: [
{
id: 31,
title: "Doplnit preklady",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum.",
date: "2025-04-13 01:30:18",
},
],
};
},
methods: {
onDragChange(event) {
// console.log("Presunuté:", event);
// Napr. uložiť poradie do API
if (event.added) {
console.log("Pridané:", event.added.element);
}
if (event.moved) {
console.log("Presunuté:", event.moved.element);
}
if (event.removed) {
console.log("Odstranené:", event.removed.element);
}
},
vypisData() {
console.log(this.itemsUncategorized);
console.log(this.itemsWaiting);
console.log(this.itemsInProgress);
console.log(this.itemsDone);
},
pridajJedno() {
this.itemsUncategorized.push({
id: this.itemsUncategorized.length + 1,
title: "Pridať bug",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam massa eros, porta id, vestibulum sit amet, malesuada in, sapien. Donec nec justo eget felis facilisis fermentum.",
date: "2025-04-13 01:30:18",
});
},
},
};
</script> </script>