bx-1379-redesign #15

Merged
ksenia_mikhailova merged 124 commits from bx-1379-redesign into dev 2024-09-06 15:39:13 +03:00
7 changed files with 56 additions and 26 deletions
Showing only changes of commit 8544b0d858 - Show all commits

View File

@ -2,5 +2,5 @@
<Suspense> <Suspense>
<RouterView /> <RouterView />
</Suspense> </Suspense>
<Nav/> <Nav />
</template> </template>

View File

@ -5,7 +5,7 @@ $white: #fff;
.nav { .nav {
background-color: $white; background-color: $white;
padding: 1rem; padding: 1rem;
height: 2rem; // height: 2rem;
position: fixed; position: fixed;
right: 0; right: 0;
left: 0; left: 0;
@ -20,8 +20,8 @@ $white: #fff;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
font-size: 1.75rem; font-size: 1.75rem;
width: 2rem; width: 2.25rem;
height: 2rem; height: 2.25rem;
border-radius: 50%; border-radius: 50%;
overflow: hidden; overflow: hidden;
@ -32,6 +32,7 @@ $white: #fff;
a, a,
a[href].router-link-active { a[href].router-link-active {
color: $white; color: $white;
line-height: 0;
} }
&.active { &.active {

View File

@ -2,19 +2,16 @@
import { useRouter, useRoute } from "vue-router"; import { useRouter, useRoute } from "vue-router";
import KLogo from "../../assets/promo/logo.svg"; import KLogo from "../../assets/promo/logo.svg";
import { SERVER_URL } from "../../constants"; import { useItem } from "../../stores/item";
import Gallery from "./gallery.vue";
const router = useRouter() const router = useRouter()
const route = useRoute() const route = useRoute()
const page = useItem()
const startColor = `hsl(${(Math.random() * 360).toFixed()}, 100%, 50%)` const startColor = `hsl(${(Math.random() * 360).toFixed()}, 100%, 50%)`
const endColor = `hsl(${(Math.random() * 360).toFixed()}, 100%, 50%)` const endColor = `hsl(${(Math.random() * 360).toFixed()}, 100%, 50%)`
const res = await fetch(`${SERVER_URL}/api/item/${route.params.item ? (route.params.item + '/') : '?is_front=true'}`) await page.load(route.params)
const pageArray = await res.json()
const page = Array.isArray(pageArray) ? pageArray[0] : pageArray
</script> </script>
<template> <template>
<div class="main"> <div class="main">

View File

@ -1,32 +1,28 @@
<script setup lang="ts"> <script setup lang="ts">
import { Icon } from '@iconify/vue'; import { Icon } from '@iconify/vue';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import { usePromoSidebar } from '../stores/promo_sidebar';
import { useItem } from '../stores/item';
const route = useRoute() const route = useRoute()
const sidebar = usePromoSidebar() const page = useItem()
const sidebarFunc = () => {
if (sidebar.is_open) {
sidebar.close()
} else {
sidebar.open()
}
}
console.log(route.params) // console.log(route.name)
</script> </script>
<template> <template>
<div class="nav"> <div class="nav">
<div class="nav-group"> <div class="nav-group">
<span class="nav-icon" :class="[{ 'active': route.name == 'home' }]"> <span class="nav-icon" :class="[{ 'active': route.name == 'home' || route.fullPath == '/' }]">
<RouterLink :to="`/${route.params.item ? route.params.item.toString() : ''}`" @click.prevent="sidebarFunc"> <RouterLink :to="`/${page.slug}`">
<Icon icon="mdi:home-outline" /> <Icon icon="mdi:home-outline" />
</RouterLink> </RouterLink>
</span> </span>
<span class="nav-icon" :class="[{ 'active': route.name == 'scene' }]"> <span class="nav-icon" :class="[{ 'active': route.name == 'scene' }]" style="font-size: 1.875rem;">
<RouterLink :to="`/${page.slug}/${page.scene_3d}`">
<Icon icon="mdi:video-3d" /> <Icon icon="mdi:video-3d" />
</RouterLink>
</span> </span>
<span class="nav-icon"> <span class="nav-icon" style="font-size: 1.375rem;">
<Icon icon="mdi:vector-arrange-below" /> <Icon icon="mdi:vector-arrange-below" />
</span> </span>
</div> </div>

15
front/src/index.d.ts vendored
View File

@ -77,3 +77,18 @@ interface EnvVars {
env_displacementmap?: string, env_displacementmap?: string,
env_normalmap?: string env_normalmap?: string
} }
interface PageItem {
id: number;
images: Image[];
name: string;
slug: string;
is_front: boolean;
scene_3d: number;
}
interface Image {
id: number;
file: string;
alt: string;
title: string;
}

View File

@ -9,7 +9,7 @@ import Promo from './components/Promo/index.vue'
import PromoMain from './components/Promo/main.vue' import PromoMain from './components/Promo/main.vue'
const routes = [ const routes = [
{ path: '/', component: Promo, name: 'index' }, { path: '/', component: Promo, name: 'home_no' },
{ path: '/:item', component: Promo, name: 'home' }, { path: '/:item', component: Promo, name: 'home' },
{ path: '/:item/:target', component: PromoMain, name: 'scene' }, { path: '/:item/:target', component: PromoMain, name: 'scene' },
] ]

21
front/src/stores/item.ts Normal file
View File

@ -0,0 +1,21 @@
import { defineStore } from 'pinia'
import { SERVER_URL } from '../constants'
export const useItem = defineStore('item', {
state: () => {
return {
} as PageItem
},
actions: {
async load(params: any) {
const res = await fetch(`${SERVER_URL}/api/item/${params.item ? (params.item + '/') : '?is_front=true'}`)
const pageArray = await res.json()
const page = Array.isArray(pageArray) ? pageArray[0] : pageArray
// this.$state = Object.assign(this.$state, page)
for (const key in page) {
this[key] = page[key]
}
return page
}
}
})