add: frontend login proto

v0.5
rrr-marble 3 years ago
parent bf7c4ad023
commit 834be04ebb

@ -0,0 +1,45 @@
<template>
<va-modal v-model="showModal" @ok="handleSubmit" @close="$emit('closeModal')">
<va-form autofocus tag="form" @submit.prevent="handleSubmit" class="login-form">
<va-input label="Username" v-model="username" class="form-item" />
<va-input type="password" label="Password" v-model="password" class="form-item" />
</va-form>
</va-modal>
</template>
<script>
export default {
name: 'login-form',
props: {
showModal: {
type: Boolean,
required: true,
}
},
data() {
return {
username: 'demo',
password: 'demo',
}
},
methods: {
handleSubmit() {
this.$router.push('/admin')
}
},
}
</script>
<style lang="css" scoped>
.login-form {
display: flex;
flex-direction: column;
width: 30rem;
}
.form-item {
margin: 1rem auto;
}
</style>

@ -0,0 +1,45 @@
<template>
<navbar />
<va-modal v-model="showModal" :overlay="false" no-dismiss without-transitions hide-default-actions>
<va-form autofocus tag="form" @submit.prevent="handleSubmit" class="login-form">
<va-input label="Username" v-model="username" class="form-item" />
<va-input type="password" label="Password" v-model="password" class="form-item" />
<va-button type="submit" class="form-item">Login</va-button>
</va-form>
</va-modal>
</template>
<script>
import Navbar from '@/components/Navbar.vue';
export default {
name: 'login-screen',
components: { Navbar },
data() {
return {
showModal: true,
username: 'demo',
password: 'demo',
}
},
methods: {
handleSubmit() {
this.$router.push('/admin')
}
},
}
</script>
<style lang="css" scoped>
.login-form {
margin: auto;
display: flex;
flex-direction: column;
width: 30rem;
}
.form-item {
margin: 1rem auto;
}
</style>

@ -9,7 +9,7 @@
</template> </template>
<template #right> <template #right>
<va-navbar-item class="top-icon"> <va-navbar-item class="top-icon">
<va-icon size="3rem" color="gray" name="account_box" @click="$router.push('/admin')" /> <va-icon size="3rem" color="gray" name="account_box" @click="$emit('accountClick')" />
</va-navbar-item> </va-navbar-item>
</template> </template>
</va-navbar> </va-navbar>

@ -6,6 +6,7 @@ import ActiveSchemaScreen from "@/components/ActiveSchemaScreen";
import PgwebEmbed from "@/components/PgwebEmbed"; import PgwebEmbed from "@/components/PgwebEmbed";
import UploadScreen from "@/components/UploadScreen"; import UploadScreen from "@/components/UploadScreen";
import NotFound from "@/components/NotFound"; import NotFound from "@/components/NotFound";
import LoginScreen from "@/components/LoginScreen";
@ -28,6 +29,11 @@ const routes = [
component: ItemView, component: ItemView,
name: 'item-details', name: 'item-details',
}, },
{
path: '/login',
component: LoginScreen,
name: 'login-screen'
},
{ {
path: '/:pathMatch(.*)*', path: '/:pathMatch(.*)*',
component: NotFound, component: NotFound,

@ -1,5 +1,5 @@
<template> <template>
<navbar /> <navbar @accountClick="$router.push('/login')" />
<div class="central-view"> <div class="central-view">
<sidebar> <sidebar>
@ -46,9 +46,9 @@ export default {
} }
}, },
methods: { methods: {
activeRouteChange(route){ activeRouteChange(route) {
this.sidebarItems.forEach(item => { this.sidebarItems.forEach(item => {
if(item.route === route){ if (item.route === route) {
item.active = true item.active = true
} }
else { else {

@ -1,5 +1,5 @@
<template> <template>
<navbar> <navbar @accountClick="showModal=!showModal">
<va-input v-model="searchQuery"></va-input> <va-input v-model="searchQuery"></va-input>
</navbar> </navbar>
<div class="central-view"> <div class="central-view">
@ -10,6 +10,7 @@
<overview-screen :items="filteredAndSearchedItems" :columns="filteredColumns" @mapClick="applyFilters" /> <overview-screen :items="filteredAndSearchedItems" :columns="filteredColumns" @mapClick="applyFilters" />
</div> </div>
</div> </div>
<login-modal :showModal="showModal" @closeModal="showModal=false" />
</template> </template>
@ -18,9 +19,10 @@ import Navbar from "@/components/Navbar.vue";
import Sidebar from "@/components/Sidebar.vue"; import Sidebar from "@/components/Sidebar.vue";
import OverviewScreen from "@/components/OverviewScreen.vue"; import OverviewScreen from "@/components/OverviewScreen.vue";
import FilterPanel from "@/components/FilterPanel.vue"; import FilterPanel from "@/components/FilterPanel.vue";
import LoginModal from "@/components/LoginModal.vue";
export default { export default {
name: "front-view", name: "front-view",
components: { Navbar, Sidebar, OverviewScreen, FilterPanel }, components: { Navbar, Sidebar, OverviewScreen, FilterPanel, LoginModal },
data() { data() {
return { return {
items: [], items: [],
@ -48,6 +50,7 @@ export default {
"org", "org",
"category", "category",
], ],
showModal: false,
} }
}, },
methods: { methods: {
@ -58,7 +61,7 @@ export default {
.catch((e) => console.log(e)) .catch((e) => console.log(e))
}, },
async fetchColumns(){ async fetchColumns() {
fetch(`/api/v1/headers/`) fetch(`/api/v1/headers/`)
.then(res => res.json()) .then(res => res.json())
.then(data => this.columns = data) .then(data => this.columns = data)
@ -76,7 +79,7 @@ export default {
}; };
}, },
}, },
mounted () { mounted() {
this.fetchAllItems(); this.fetchAllItems();
this.fetchColumns(); this.fetchColumns();
}, },
@ -84,20 +87,20 @@ export default {
filteredItems() { filteredItems() {
return [...this.items].filter(item => { return [...this.items].filter(item => {
for (let [filterParam, filterValues] of Object.entries(this.currentFilters)) { for (let [filterParam, filterValues] of Object.entries(this.currentFilters)) {
if(filterParam === "depth"){ if (filterParam === "depth") {
if (item.depth_max < filterValues[0] || item.depth_min > filterValues[1]){ if (item.depth_max < filterValues[0] || item.depth_min > filterValues[1]) {
return false; return false;
} }
} else if (!filterValues.includes(item[filterParam])){ } else if (!filterValues.includes(item[filterParam])) {
return false; return false;
} }
} }
return true; return true;
}) })
}, },
filteredAndSearchedItems(){ filteredAndSearchedItems() {
return this.filteredItems.filter(item => { return this.filteredItems.filter(item => {
if (this.searchQuery.trim() == ''){ if (this.searchQuery.trim() == '') {
return true return true
} }
let result = false; let result = false;
@ -119,7 +122,7 @@ export default {
}) })
}, },
filteredColumns(){ filteredColumns() {
return this.columns return this.columns
.filter(header => this.showColumns.includes(header.database)) .filter(header => this.showColumns.includes(header.database))
.sort((header1, header2) => { .sort((header1, header2) => {

@ -1,5 +1,5 @@
<template> <template>
<navbar /> <navbar @accountClick="showModal=!showModal" />
<div class="central-view"> <div class="central-view">
<sidebar> <sidebar>
<item-sidebar-menu :sidebarItems="sidebarItems" /> <item-sidebar-menu :sidebarItems="sidebarItems" />
@ -8,6 +8,7 @@
<item-details /> <item-details />
</div> </div>
</div> </div>
<login-modal :showModal="showModal" @closeModal="showModal=false" />
</template> </template>
@ -16,8 +17,9 @@ import Navbar from "@/components/Navbar.vue";
import ItemDetails from "@/components/ItemDetails.vue"; import ItemDetails from "@/components/ItemDetails.vue";
import Sidebar from "@/components/Sidebar.vue"; import Sidebar from "@/components/Sidebar.vue";
import ItemSidebarMenu from "@/components/ItemSidebarMenu.vue"; import ItemSidebarMenu from "@/components/ItemSidebarMenu.vue";
import LoginModal from "@/components/LoginModal.vue";
export default { export default {
components: { Navbar, ItemDetails, Sidebar, ItemSidebarMenu }, components: { Navbar, ItemDetails, Sidebar, ItemSidebarMenu, LoginModal },
data() { data() {
return { return {
sidebarItems: [ sidebarItems: [
@ -53,7 +55,7 @@ export default {
}, },
], ],
showModal: false,
} }
}, },

Loading…
Cancel
Save