fix(fe general and archive): added backoffice components first logic and archive page table with simple items fetch
This commit is contained in:
parent
4a7d898cf9
commit
e5b136dec4
5 changed files with 171 additions and 3 deletions
79
resources/js/components/content/Archive.vue
Normal file
79
resources/js/components/content/Archive.vue
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import axios from "axios";
|
||||||
|
import {useAuthStore} from "@/stores/auth.store.ts";
|
||||||
|
import {ref, onMounted, reactive, computed} from "vue";
|
||||||
|
const auth = useAuthStore()
|
||||||
|
const items = ref([])
|
||||||
|
|
||||||
|
const listData = reactive({
|
||||||
|
'per_page': 5,
|
||||||
|
'first_page': null,
|
||||||
|
'last_page': null,
|
||||||
|
'total_items': 0,
|
||||||
|
'current_page': 1,
|
||||||
|
})
|
||||||
|
|
||||||
|
const active_columns = reactive({
|
||||||
|
'track_title': 'Track Title',
|
||||||
|
'artist_name': 'Artist',
|
||||||
|
'genre': 'Genre',
|
||||||
|
'track_type': 'Track Type',
|
||||||
|
'length': 'Length',
|
||||||
|
'mtime': 'Uploaded'
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ToDo: understand why per_page and other filters doesn't work
|
||||||
|
* @param page_info created by v-data-table-server on update
|
||||||
|
*/
|
||||||
|
const getItems = (page_info) => {
|
||||||
|
console.log(page_info);
|
||||||
|
return axios.get(`/file`, {
|
||||||
|
params: {
|
||||||
|
page: page_info.page,
|
||||||
|
per_page: page_info.per_page,
|
||||||
|
}
|
||||||
|
}).then((response) => {
|
||||||
|
console.log(response)
|
||||||
|
listData.per_page = response.data.per_page;
|
||||||
|
listData.first_page = response.data.from;
|
||||||
|
listData.last_page = response.data.last_page;
|
||||||
|
listData.current_page = response.data.current_page;
|
||||||
|
listData.total_items = response.data.total;
|
||||||
|
|
||||||
|
items.value = response.data.data.map((el) => {
|
||||||
|
Object.keys(el).forEach((key) => {
|
||||||
|
if (Object.keys(active_columns).includes(key)) {
|
||||||
|
el[active_columns[key]] = el[key];
|
||||||
|
}
|
||||||
|
delete el[key];
|
||||||
|
})
|
||||||
|
return el;
|
||||||
|
});
|
||||||
|
console.log(listData);
|
||||||
|
}).catch((error) => {
|
||||||
|
console.log("Error: "+error);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<v-data-table-server
|
||||||
|
v-model:items-per-page="listData.per_page"
|
||||||
|
:items="items"
|
||||||
|
:items-length="listData.total_items"
|
||||||
|
loading-text="Loading..."
|
||||||
|
:loading="items.length === 0"
|
||||||
|
@update:options="getItems"
|
||||||
|
disable-sort
|
||||||
|
>
|
||||||
|
</v-data-table-server>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.v-data-table {
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
</style>
|
11
resources/js/components/content/Dashboard.vue
Normal file
11
resources/js/components/content/Dashboard.vue
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div>dashboard</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
25
resources/js/layouts/partials/Content.vue
Normal file
25
resources/js/layouts/partials/Content.vue
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import {computed, defineAsyncComponent} from 'vue';
|
||||||
|
const props = defineProps({
|
||||||
|
page: Object,
|
||||||
|
});
|
||||||
|
|
||||||
|
const currentPage = computed(() => props.page.id)
|
||||||
|
|
||||||
|
const tabs = {
|
||||||
|
dashboard: defineAsyncComponent(() => import('../../components/content/Dashboard.vue')),
|
||||||
|
archive: defineAsyncComponent(() => import('../../components/content/Archive.vue')),
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<v-col>
|
||||||
|
<keep-alive>
|
||||||
|
<Component :is="tabs[currentPage]" />
|
||||||
|
</keep-alive>
|
||||||
|
</v-col>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
34
resources/js/layouts/partials/Sidebar.vue
Normal file
34
resources/js/layouts/partials/Sidebar.vue
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
const pages = [
|
||||||
|
{
|
||||||
|
id: 'dashboard',
|
||||||
|
name: 'Dashboard',
|
||||||
|
component: '../../components/content/Dashboard.vue',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'archive',
|
||||||
|
name: 'Archive',
|
||||||
|
component: '../../components/content/Dashboard.vue',
|
||||||
|
}
|
||||||
|
];
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<v-col>
|
||||||
|
<v-btn
|
||||||
|
v-for="page in pages"
|
||||||
|
:key="page.id"
|
||||||
|
size="large"
|
||||||
|
@click="$emit('showPage', page)"
|
||||||
|
>{{ page.name }}</v-btn>
|
||||||
|
</v-col>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.v-col {
|
||||||
|
width: 20vw;
|
||||||
|
max-width:250px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -1,18 +1,37 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {useAuthStore} from "@/stores/auth.store.ts";
|
import {useAuthStore} from "@/stores/auth.store.ts";
|
||||||
import Header from "@/layouts/partials/Header.vue";
|
import Header from "@/layouts/partials/Header.vue";
|
||||||
|
import Sidebar from "@/layouts/partials/Sidebar.vue";
|
||||||
|
import Content from "@/layouts/partials/Content.vue";
|
||||||
|
import {reactive} from "vue";
|
||||||
|
|
||||||
const auth = useAuthStore();
|
const page = reactive({
|
||||||
|
id: 'dashboard',
|
||||||
|
name: 'Dashboard',
|
||||||
|
})
|
||||||
|
|
||||||
|
const changePage = (currentPage) => {
|
||||||
|
page.id = currentPage.id;
|
||||||
|
page.name = currentPage.name;
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<Header />
|
<Header />
|
||||||
<router-link to="/login"> Take me to login page </router-link>
|
<v-row :fluid="true">
|
||||||
|
<Sidebar
|
||||||
|
@show-page="changePage"
|
||||||
|
/>
|
||||||
|
<Content
|
||||||
|
:page="page"
|
||||||
|
/>
|
||||||
|
</v-row>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
.v-row {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
Loading…
Add table
Add a link
Reference in a new issue