This commit is contained in:
Thien Pham Van
2026-03-17 14:08:57 +07:00
parent c9940afc82
commit cf144ea896
34 changed files with 10875 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
<template>
<footer class="footer">
<div class="container">
<div class="columns">
<div class="column"><FooterInfo /></div>
<div class="column">
<!-- <h3>Lien he</h3> -->
</div>
</div>
<div class="copy-right">
<img src="/icons/shield.svg" alt="" />
<span>BigDataTech Cloud. All rights reserved.</span>
</div>
</div>
</footer>
</template>
<script>
import FooterInfo from './FooterInfo.vue';
</script>
<style lang="scss">
.footer {
// padding: 0 0 20px;
padding-bottom: 0;
.copy-right {
display: flex;
justify-content: center;
align-items: center;
gap: 10px;
img {
width: 32px;
height: 32px;
}
}
}
</style>

View File

@@ -0,0 +1,42 @@
<template>
<div class="company">
<p class="logo">
<img src="/logo.png" alt="Logo" />
</p>
<p class="company-item">
<img class="icon" src="/icons/map.svg" alt="icon-map" />
<span>{{ companyInfo.address }}</span>
</p>
<p class="company-item">
<img class="icon" src="/icons/phone-call.svg" alt="icon-phone" />
<span>{{ companyInfo.phone.hotline }}</span>
</p>
<p class="company-item">
<img class="icon" src="/icons/email.svg" alt="icon-email" />
<span>{{ companyInfo.email.contact }}</span>
</p>
</div>
</template>
<script setup>
import { companyInfo } from '~/config/company';
</script>
<style lang="scss">
.company {
.logo {
width: 200px;
}
.company-item {
display: flex;
gap: 10px;
& + .company-item {
margin-top: 10px;
}
.icon {
width: 28px;
height: 28px;
}
}
}
</style>

View File

@@ -0,0 +1,25 @@
<template>
<header class="header">
<div class="container">
<HeaderLogo />
<HeaderMenu />
</div>
</header>
</template>
<script setup>
import HeaderLogo from './HeaderLogo.vue';
import HeaderMenu from './HeaderMenu.vue';
</script>
<style lang="scss">
.header {
box-shadow: 4px 4px 4px 0px #00000040;
.container {
height: 60px;
display: flex;
align-items: center;
gap: 10px;
}
}
</style>

View File

@@ -0,0 +1,16 @@
<template>
<div class="logo">
<NuxtLink to="/">
<img src="/logo.png" alt="" srcset="" />
</NuxtLink>
</div>
</template>
<style lang="scss">
.logo {
a {
display: inline-block;
width: 150px;
}
}
</style>

View File

@@ -0,0 +1,85 @@
<template>
<nav class="navbar">
<div class="navbar-menu">
<div class="navbar-start">
<NuxtLink :key="index" v-for="(item, index) in listPage" :to="item.path" class="navbar-item"
>{{ item.title }}
</NuxtLink>
</div>
<div class="navbar-end" v-if="!isUser">
<NuxtLink to="#" class="navbar-item"> Đăng nhập </NuxtLink>
<NuxtLink to="#" class="navbar-item"> Đăng </NuxtLink>
</div>
<HeaderUser v-else />
</div>
</nav>
</template>
<script setup>
import HeaderUser from './HeaderUser.vue';
const isUser = ref(false);
const listPage = [
// {
// path: '/',
// title: 'Trang chủ',
// },
// {
// path: '/about',
// title: 'Giới thiệu',
// },
{
path: '#service-pricing',
title: 'Bảng giá',
},
{
path: '#contact',
title: 'Liên hệ',
},
];
</script>
<style lang="scss">
.navbar {
flex: auto;
min-height: fit-content;
.navbar-menu {
justify-content: flex-end;
gap: 30px;
}
.navbar-start {
margin-inline-end: unset;
flex: auto;
justify-content: flex-end;
gap: 10px;
}
.navbar-end {
margin-inline-start: unset;
gap: 10px;
}
.navbar-item {
border-radius: 24px;
padding: 10px 20px;
font-size: 16px;
line-height: 16px;
font-weight: 600;
}
.router-link-active {
background-color: var(--color-primary);
color: #fff;
}
a.navbar-item:focus,
a.navbar-item:focus-within,
a.navbar-item:hover,
.navbar-link:focus,
.navbar-link:focus-within,
.navbar-link:hover {
background-color: var(--color-hover);
color: #fff;
}
}
</style>

View File

@@ -0,0 +1,63 @@
<template>
<div class="navbar-end">
<ul class="menu-user">
<li class="menu-user-item">
<img class="img-avatar" src="/icons/avatar.svg" alt="avatar" /> <span> Nguyễn Văn Nam </span>
<ul class="sub-menu">
<li>Tài khoản</li>
<li>Đăng xuất</li>
</ul>
</li>
</ul>
</div>
</template>
<style lang="scss">
.header {
.menu-user {
min-width: 180px;
.menu-user-item {
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
position: relative;
cursor: pointer;
&:hover {
.sub-menu {
display: block;
}
}
}
.img-avatar {
width: 32px;
height: 32px;
border-radius: 100%;
}
}
.sub-menu {
display: none;
position: absolute;
top: 100%;
left: 0;
width: 100%;
background-color: #fff;
box-shadow: 2px 2px 2px 0px #00000040;
border-radius: 16px;
padding: 20px 10px;
li {
padding: 5px;
& + li {
margin-top: 0.625rem;
}
&:hover {
cursor: pointer;
background-color: var(--color-hover);
color: #fff;
border-radius: 5px;
}
}
}
}
</style>

View File

@@ -0,0 +1,111 @@
<template>
<div class="pricing-item">
<h3 class="pricing-name">CX23</h3>
<p class="price">
<span class="price-value">300.000</span>&nbsp;
<span class="price-unit">VND/Tháng</span>
</p>
<div class="list-info">
<div class="info-item">
<p class="info-icon">
<img src="/icons/cpu.svg" alt="CPU" />
</p>
<p class="info-text">8 Core</p>
</div>
<div class="info-item">
<p class="info-icon">
<img src="/icons/ram.svg" alt="CPU" />
</p>
<p class="info-text">8 GB</p>
</div>
<div class="info-item">
<p class="info-icon">
<img src="/icons/hard-drive.svg" alt="CPU" />
</p>
<p class="info-text">8 GB</p>
</div>
<div class="info-item">
<p class="info-icon">
<img src="/icons/measure.svg" alt="CPU" />
</p>
<p class="info-text">100 Mbps</p>
</div>
<div class="info-item">
<p class="info-icon">
<img src="/icons/ip-address.svg" alt="CPU" />
</p>
<p class="info-text">IPv4</p>
</div>
</div>
<div class="btn-action">
<button class="btn-register">Đăng ngay</button>
</div>
</div>
</template>
<style lang="scss">
.pricing-item {
background-color: #dcfce7;
padding: 50px 30px;
border-radius: 16px;
box-shadow: 4px 4px 4px 0 rgba($color: #000000, $alpha: 0.2);
.pricing-name {
text-align: center;
font-weight: 700;
font-size: 32px;
margin-bottom: 16px;
}
.price {
font-style: italic;
text-align: center;
margin-bottom: 20px;
.price-value {
font-size: 32px;
font-weight: 700;
}
.price-unit {
font-weight: 700;
}
}
.list-info {
margin: 20px 0;
.info-item {
background-color: #fff;
border-radius: 16px;
display: flex;
gap: 8px;
padding:5px 10px;
align-items: center;
box-shadow: 2px 2px 4px 0 rgba($color: #000000, $alpha: 0.1);
& + .info-item {
margin-top: 15px;
}
.info-icon {
width: 32px;
height: 32px;
}
.info-text {
font-weight: 700;
font-size: 16px;
}
}
}
.btn-action {
.btn-register {
width: 100%;
text-align: center;
color: #fff;
background-color: var(--color-primary);
padding: 10px;
font-weight: 700;
font-size: 18px;
border-radius: 16px;
}
}
}
</style>