This commit is contained in:
frankkeres 2025-03-11 13:58:21 +08:00
parent 359b51c293
commit 4307c1c594
54 changed files with 20245 additions and 0 deletions

13
.editorconfig Normal file
View File

@ -0,0 +1,13 @@
# editorconfig.org
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false

23
assets/CSS/styles.css Normal file
View File

@ -0,0 +1,23 @@
:root {
--footer-bg-color: #ffffff;
--footer-text-color: #000;
--footer-padding: 1rem;
--footer-link-color: #ff6702;
--font-size-title: clamp(5rem, 10vw, 15rem);
--font-size-subtitle: clamp(1.5rem, 6vw, 4rem); /* 初始较大,逐步缩小 */
--font-size-subtitle2: clamp(2.5rem, 6vw, 6rem); /* 初始较大,逐步缩小 */
--font-size-paragraph: clamp(1rem, 3vw, 1.2rem); /* 初始较大,逐步缩小 */
--footer-size-paragraph: clamp(0.6rem, 1vw, 1.2rem);
--button-font-size: clamp(1rem, 2vw, 1.2rem); /* 初始较大,逐步缩小 */
--min-width-leftBox: 50%;
--max-width-leftBox: 100%;
--min-width-rightBox: 0%;
--max-width-rightBox: 50%;
--dynamic-width-leftBox: clamp(var(--min-width-leftBox), 50vw, var(--max-width-leftBox));
--dynamic-width-rightBox: clamp(var(--min-width-rightBox), 50vw, var(--max-width-rightBox));
--font-size-title2: clamp(0.5rem, 5vw, 2rem); /* 动态计算标题的字体大小 */
--font-size-subtitle3: clamp(0.3rem, 3vw, 1.3rem); /* 动态计算副标题的字体大小 */
--font-size-paragraph2: clamp(0.2rem, 1vw, 1.25rem); /* 动态计算段落的字体大小 */
--font-size-title3: clamp(1.7rem, 5vw, 2rem)
}

BIN
assets/back/FRANK-03.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

BIN
assets/back/chengshi.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

BIN
assets/back/diannao.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 KiB

BIN
assets/back/jianzhu.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 395 KiB

BIN
assets/back/ri.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

BIN
assets/back/ri2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
assets/icon/24h.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
assets/icon/Arrow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
assets/icon/Building.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

BIN
assets/icon/Cart.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
assets/icon/Checklist.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
assets/icon/Email.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

BIN
assets/icon/Facebook.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
assets/icon/File.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

BIN
assets/icon/Globe.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
assets/icon/Grid.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
assets/icon/Grid2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
assets/icon/Location.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

BIN
assets/icon/Message.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

BIN
assets/icon/Phone.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

BIN
assets/icon/Phone2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
assets/icon/Question.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
assets/icon/Refresh.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
assets/icon/Send.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

BIN
assets/icon/Smile.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
assets/icon/User.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
assets/icon/Wexin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

BIN
assets/icon/Wi-Fi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
assets/icon/img.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
assets/icon/img_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

BIN
assets/icon/img_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
assets/icon/tg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

BIN
assets/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
assets/logo2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

353
components/FooterMenu.vue Normal file
View File

@ -0,0 +1,353 @@
<template>
<div>
<div class="footer">
<div class="footer-top">
<div class="footer-top-left">
<div class="footer-top-left-logo"><img src="../assets/logo2.png">
<div class="footer-logo">Buddys Cloud</div>
</div>
<p>不只是您的AWS云服务代理商 更是您云上旅程的可靠伙伴</p>
<p>Trusted AWS partners on the cloud, Tailor-made AWS cloud solutions</p>
</div>
<div class="footer-top-right">
<ul class="footer-top-right-ul">
<li class="title">服务器类型</li>
<li>
<router-link to="/contactUs">大带宽服务器</router-link>
</li>
<li>
<router-link to="/contactUs">轻量云服务器</router-link>
</li>
<li>
<router-link to="/contactUs">站群服务器</router-link>
</li>
<li>
<router-link to="/contactUs">高防服务器</router-link>
</li>
<li>
<router-link to="/contactUs">ec2服务器</router-link>
</li>
</ul>
<ul class="footer-top-right-ul">
<li class="title">网络</li>
<li>
<router-link to="/contactUs">CDN</router-link>
</li>
<li>
<router-link to="/contactUs">高防盾</router-link>
</li>
<li>
<router-link to="/contactUs">跨境数据传输</router-link>
</li>
<li>
<router-link to="/contactUs">全球骨干网</router-link>
</li>
</ul>
<ul class="footer-top-right-ul">
<li class="title">服务</li>
<li>
<router-link to="/contactUs">账户开通</router-link>
</li>
<li>
<router-link to="/contactUs">账单代付</router-link>
</li>
<li>
<router-link to="/contactUs">账户解锁</router-link>
</li>
</ul>
<ul>
<li class="title2" style="border-bottom: 2px solid white;margin-top: 10px">
关于我们
</li>
<li>
<router-link to="/contactUs">新闻资讯</router-link>
</li>
<li>
<router-link to="/contactUs">站点地图</router-link>
</li>
<li>
<router-link to="/contactUs">联系我们</router-link>
</li>
</ul>
<ul>
<li class="title2 display-none" style="border-bottom: 2px solid white;margin-top: 10px"></li>
<li>
<router-link to="/contactUs">博客</router-link>
</li>
<li>
<router-link to="/contactUs">隐私政策</router-link>
</li>
<li>
<router-link to="/contactUs">新闻稿</router-link>
</li>
</ul>
</div>
</div>
<div class="footer-bottom">
<div class="footer-social">
<a :href="contactLinks.telegram" target="_blank">
<img src="../assets/icon/Send.png" alt="telegram"/>
</a>
<a :href="contactLinks.phone" target="_blank">
<img src="../assets/icon/Phone.png" alt="phone"/>
</a>
<a :href="contactLinks.wechat" target="_blank">
<img src="../assets/icon/Wexin.png" alt="wechat"/>
</a>
<a :href="contactLinks.facebook" target="_blank">
<img src="../assets/icon/Facebook.png" alt="facebook"/>
</a>
<a :href="contactLinks.email" target="_blank">
<img src="../assets/icon/Email.png" alt="email"/>
</a>
</div>
</div>
</div>
<div class="footer2">
<p>
<router-link to="/contactUs">隐私</router-link>
|
<router-link to="/contactUs">网站条款</router-link>
|
<router-link to="/contactUs">Cookie 首选项</router-link>
|
&copy; 2022 Raylinx Inc. 或其附属公司. 保留所有权利.
</p>
</div>
</div>
</template>
<script>
import {contactLinks} from "../static/js/contact_link.js";
import '../assets/CSS/styles.css';
export default {
computed: {
contactLinks() {
return contactLinks
}
},
setup() {
return {}
}
}
</script>
<style scoped>
.footer {
background-color: #ff6702;
color: white;
padding: 3rem 5%;
}
.footer-top {
display: flex;
justify-content: space-between;
margin-bottom: 2rem;
}
.footer-top-left {
width: 30%;
}
.footer-top-left-logo {
display: flex;
align-items: flex-end;
}
.footer-logo {
font-size: 2rem;
font-weight: bold;
margin-bottom: 1rem;
}
.footer-top-right {
display: flex;
justify-content: left;
width: 60%;
}
.footer-top-right ul {
list-style-type: none;
padding-left: 0;
}
.footer-top-right-ul {
margin-right: clamp(1rem, 8rem, 8rem);
padding-top: 2%;
}
.footer-top-right li.title {
height: 30px;
font-size: clamp(0.2rem, 1vw, 1.3rem);
color: #ffffff;
margin-top: 6%;
}
.footer-top-right li.title2 {
height: 40px;
font-size: clamp(0.2rem, 1vw, 1.3rem);
color: #ffffff;
margin-top: 6%;
}
.footer-top-right li {
font-size: clamp(0.2rem, 1vw, 1rem);;
margin-bottom: 1rem;
color: rgba(255, 255, 255, 0.76);
}
.footer-top-right li a {
font-size: clamp(0.2rem, 1vw, 1rem);;
margin-bottom: 1rem;
color: rgba(255, 255, 255, 0.76);
}
.footer-bottom {
display: flex;
justify-content: flex-start;
}
.footer-social img {
width: 50px;
height: 50px;
margin-right: 20px;
}
/* Footer Section */
.footer2 {
background-color: var(--footer-bg-color);
color: #777777;
text-align: center;
font-size: var(--footer-size-paragraph); /* 动态调整字体大小 */
bottom: 0;
width: 100%;
display: flex; /* 添加 flex 布局 */
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
height: auto; /* 如果没有固定高度,允许内容根据内容自动调整 */
}
.footer2 p {
margin: 0;
display: flex;
justify-content: center;
align-items: center;
font-size: var(--footer-size-paragraph);
}
.footer2 a {
color: #777777;
text-decoration: none;
margin: 0 0.5rem;
font-size: var(--footer-size-paragraph);
}
.footer2 a:hover {
text-decoration: underline;
}
@media (max-width: 800px) {
.footer {
background-color: #ff6702;
color: white;
padding: 0;
}
.footer-top {
display: flex;
justify-content: center;
flex-direction: column;
width: 90%;
margin: 0 auto;
}
.footer-top-left {
width: 100%;
margin: 5% 0 3% 0;
border-bottom: 1px solid;
padding-bottom: 2%;
}
.footer-logo {
font-size: 2rem;
font-weight: 600;
margin: 0;
}
.footer-top-left-logo img {
width: 140px;
height: 88px;
}
.footer-top-left p {
font-size: 0.9rem;
margin: 0;
color: rgba(255, 255, 255, 0.76);
}
.footer-top-right {
display: flex;
flex-direction: column;
justify-content: left;
width: 100%;
}
.footer-top-right li.title {
height: auto;
font-size: max(1.2rem, min(1vw, 1.3rem));
color: #ffffff;
margin-top: 0;
width: 100%;
display: block;
}
.footer-top-right li.title2 {
height: auto;
font-size: max(1.2rem, min(1vw, 1.3rem));
color: #ffffff;
margin-top: 0;
width: 20%;
display: block;
}
.footer-top-right ul {
width: 100%;
margin-bottom: 0;
}
.footer-top-right-ul li {
display: inline-block;
}
.footer-top-right li a {
font-size: max(1rem, min(1vw, 1rem));
margin-bottom: 0;
}
.footer-top-right ul li {
display: inline-block;
}
.display-none {
display: none !important;
}
.footer-bottom {
border-top: 1px solid #fff;
display: flex;
justify-content: center;
width: 90%;
margin: 0 auto;
padding: 2% 0;
}
.footer-social img{
width: 50px;
height: 50px;
margin-right: 0;
}
}
</style>

View File

@ -0,0 +1,92 @@
<template>
<!-- <div @click="toggleMenu">-->
<label class="burger" for="burger">
<input type="checkbox" id="burger" v-model="isMenuChecked" @change="toggleMenu">
<span></span>
<span></span>
<span></span>
</label>
<!-- </div>-->
</template>
<script>
import {mapState} from "vuex";
export default {
name: "MenuClickButton",
computed: {
...mapState({
isMenuChecked: (state) => state.isMenuChecked, // Get menu state from Vuex
}),
},
methods: {
toggleMenu() {
this.$emit('toggle'); // toggleMenu
}
}
}
</script>
<style scoped>
.burger {
position: relative;
width: 45px;
height: 45px;
cursor: pointer;
display: block;
background: #ff6702;
border-radius: 50%;
}
.burger input {
display: none;
}
.burger span {
display: block;
position: absolute;
height: 5px;
width: 80%;
background: #ffffff;
border-radius: 9px;
opacity: 1;
left: 5px;
transform: rotate(0deg);
transition: .25s ease-in-out;
}
.burger span:nth-of-type(1) {
top: 20%;
transform-origin: left center;
}
.burger span:nth-of-type(2) {
top: 50%;
transform: translateY(-50%);
transform-origin: left center;
}
.burger span:nth-of-type(3) {
top: 80%;
transform-origin: left center;
transform: translateY(-100%);
}
.burger input:checked ~ span:nth-of-type(1) {
transform: rotate(45deg);
top: 8px;
left: 10px;
}
.burger input:checked ~ span:nth-of-type(2) {
width: 0;
opacity: 0;
}
.burger input:checked ~ span:nth-of-type(3) {
transform: rotate(-45deg);
top: 33px;
left: 8px;
}
</style>

238
components/NavMenu.vue Normal file
View File

@ -0,0 +1,238 @@
<template>
<div class="navbar">
<!-- Mobile view -->
<div v-if="isMobile" class="navbar-brand-drawer">
<div class="drawer-logo">
<img src="../assets/logo.png" alt="Logo" />
</div>
<div style="display: flex; justify-content: center; align-items: center;">
<div class="drawer-icons">
<a :href="contactLinks.telegram" target="_blank">
<img src="../assets/icon/tg.png" alt="Telegram" />
</a>
</div>
<div class="drawer-icons">
<a :href="contactLinks.phone" target="_blank">
<img src="../assets/icon/Phone2.png" alt="Phone" />
</a>
</div>
<div class="drawer-icons">
<a :href="contactLinks.email" target="_blank">
<img src="../assets/icon/Globe.png" alt="Globe" />
</a>
</div>
<MenuClickButton
class="MenuClickButton"
ref="menuButton"
@toggle="toggleMenu"
:burgerBackgroundColor="'#ff6702'"
:spanBackgroundColor="'#ffffff'"
/>
</div>
</div>
<!-- Drawer Menu -->
<div v-if="isMenuChecked" class="drawer-menu" ref="drawerMenu">
<ul class="navbar-list2">
<nuxt-link to="/home">
<li>首页</li>
</nuxt-link>
<nuxt-link to="/calculatePrice">
<li>AWS价格计算</li>
</nuxt-link>
<nuxt-link to="/aboutUs">
<li>关于我们</li>
</nuxt-link>
<nuxt-link to="/contactUs">
<li>联系我们</li>
</nuxt-link>
</ul>
<div class="drawer-menu-icon">
<img src="../assets/icon/img.png" alt="Icon" />
</div>
</div>
<!-- Desktop Menu -->
<div v-else class="pc-menu">
<ul class="navbar-list">
<li><nuxt-link to="/home">首页</nuxt-link></li>
<li><nuxt-link to="/calculatePrice">AWS价格计算</nuxt-link></li>
<li><img src="../assets/logo.png" alt="Buddy.com" class="logo" /></li>
<li><nuxt-link to="/aboutUs">关于我们</nuxt-link></li>
<li><nuxt-link to="/contactUs">联系我们</nuxt-link></li>
</ul>
</div>
</div>
</template>
<script>
import MenuClickButton from "../components/MenuClickButton.vue";
import { mapState, mapActions } from "vuex";
import { contactLinks } from '../static/js/contact_link.js';
export default {
components: {
MenuClickButton,
},
data() {
return {
isMobile: false, // Check if mobile
contactLinks,
};
},
computed: {
...mapState({
isMenuChecked: (state) => state.isMenuChecked, // Get menu state from Vuex
}),
},
mounted() {
// Check if it's mobile
this.isMobile = window.innerWidth <= 800;
window.addEventListener("resize", this.handleResize); // Resize event listener
document.addEventListener("click", this.handleClickOutside); // Global click event listener
},
destroyed() {
window.removeEventListener("resize", this.handleResize); // Clean up resize event listener
document.removeEventListener("click", this.handleClickOutside); // Clean up global click event listener
},
methods: {
...mapActions(["toggleMenu"]), // Map Vuex action to toggle menu
handleResize() {
this.isMobile = window.innerWidth <= 800; // Update mobile state
},
handleClickOutside(event) {
const menu = document.querySelector('.drawer-menu'); // drawer-menu
const menuButton = document.querySelector('.MenuClickButton'); // MenuClickButton
if (menu && !menu.contains(event.target) && menuButton && !menuButton.contains(event.target)) {
this.$store.dispatch('toggleMenu'); //
}
}
},
};
</script>
<style scoped>
.navbar {
border-bottom: 1px solid #ff6702;
padding: 0.3rem;
}
.navbar-list {
display: flex;
justify-content: space-around;
align-items: center;
list-style-type: none;
padding: 0;
margin: 0 auto;
}
.navbar-list li {
margin: 0 26px;
}
.navbar-list a {
color: #ff6702;
text-decoration: none;
font-size: 15px;
}
.navbar-list a:hover {
text-decoration: none;
color: rgba(237, 97, 5, 0.7);
}
.logo {
width: 100px;
height: auto;
}
.pc-menu {
margin: 0 auto;
}
/* Drawer Menu Styles */
.drawer-menu {
background-color: rgba(255, 255, 255, 0.8);
position: absolute;
top: 100%;
right: 0;
width: 100%;
height: auto;
display: flex;
flex-direction: column;
z-index: 1000;
transition: all 0.2s;
border-top: 1.5px solid #ff6702;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); /* Add shadow */
}
/* Mobile View */
@media (max-width: 800px) {
.navbar-brand-drawer {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
}
.MenuClickButton {
float: right;
}
.navbar-list {
display: none; /* Hide desktop menu */
}
.navbar-list2 {
list-style-type: none;
padding: 4%;
}
.navbar-list2 li {
margin: 0 26px 10px 26px;
height: 50px;
border: 2px solid #ff6702;
border-radius: 5px;
line-height: 50px;
padding-left: 3%;
background: white;
}
.navbar-list2 a {
color: #ff6702;
text-decoration: none;
font-size: 15px;
}
.navbar-list2 a:hover {
text-decoration: none;
color: rgba(237, 97, 5, 0.7);
}
.drawer-menu-icon {
width: 100%;
height: 18px;
position: absolute;
top: 90%;
right: 1%;
border-bottom: 1px solid #ff6702;
}
.drawer-menu-icon img {
width: 36px;
height: 100%;
float: right;
}
.drawer-icons img {
width: 40px;
height: 40px;
}
.drawer-logo img {
width: 100px;
height: auto;
margin-bottom: 10px;
}
}
</style>

43
nuxt.config.js Normal file
View File

@ -0,0 +1,43 @@
export default {
// Global page headers: https://go.nuxtjs.dev/config-head
head: {
title: 'buddy-nuxt-project',
htmlAttrs: {
lang: 'en'
},
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
{ hid: 'description', name: 'description', content: '' },
{ name: 'format-detection', content: 'telephone=no' }
],
link: [
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
]
},
// Global CSS: https://go.nuxtjs.dev/config-css
css: [
],
// Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
plugins: [
],
// Auto import components: https://go.nuxtjs.dev/config-components
components: true,
// Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules
buildModules: [
],
// Modules: https://go.nuxtjs.dev/config-modules
modules: [
// https://go.nuxtjs.dev/bootstrap
'bootstrap-vue/nuxt',
],
// Build Configuration: https://go.nuxtjs.dev/config-build
build: {
}
}

17265
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

21
package.json Normal file
View File

@ -0,0 +1,21 @@
{
"name": "buddy-nuxt-project",
"version": "1.0.0",
"private": true,
"scripts": {
"dev": "nuxt",
"build": "nuxt build",
"start": "nuxt start",
"generate": "nuxt generate"
},
"dependencies": {
"bootstrap": "^4.6.2",
"bootstrap-vue": "^2.22.0",
"core-js": "^3.25.3",
"nuxt": "^2.15.8",
"vue": "^2.7.10",
"vue-server-renderer": "^2.7.10",
"vue-template-compiler": "^2.7.10"
},
"devDependencies": {}
}

274
pages/aboutUs.vue Normal file
View File

@ -0,0 +1,274 @@
<template>
<div>
<NavMenu></NavMenu>
<div>
<div class="about-section">
<div class="about-content">
<div class="about-content-desc">
<h1 class="about-title">关于Buddy's Cloud</h1>
<span class="desc-title">定位:可信任的伙伴</span>
<p class="about-description-chinese">
在云计算的广阔海洋中所有寻求合适云服务的企业和个人都需要一个可靠的伙伴作为灯塔提供引导支持Buddys Cloud
就像一个温暖的灯塔我们不仅是云服务的代理商更是寻求可用云服务的用户在数字世界中的忠实伙伴我们一直在这里不管您何时来访都能找到我们的友谊收获适合您的云服务
</p>
<p class="about-description-english">
In the vast ocean of cloud computing, all businesses and individuals looking for the right cloud services
need a reliable partner to provide guidance as a beacon. Buddy's Cloud is like a warm beacon, we are not
only a reseller of cloud services, but also a user of reliable cloud services. We are always here to
continue our friendship and harvest whatever is right for you, no matter when you visit cloud services.
</p>
</div>
<div class="about-content2">
<div class="photo-left">
<!-- <img src="../assets/back/ri2.jpg" alt="">-->
</div>
<div class="desc2-right">
<div class="about-text">
<h2>初试与展望</h2>
<p>Buddy's
Cloud的创立来自于一个简单而质朴的想法:在技术的复杂世界里每个人都需要一个可信赖的伙伴一个一同成长的依靠我们的创始人一位资深的技术爱好者和行业分析师在使用aws云服务的过程中发现许多用户在选择适合的云服务时感到困惑和不安--不知道何种服务应该使用何种代理可以信任因此他决定创建一个网站作为永远可以信任的伙伴帮助用户简化选择过程提供永远可靠的服务量身定制云解决方案</p>
</div>
<div class="about-text">
<h2>品牌提升</h2>
<p>Buddy's
Cloud的使命是成为用户在云服务海洋中的领航者和可信任的伙伴我们致力于理解每位客户的独特需求提供个性化的建议和支持确保他们能够找到最适合自己的云服务并随着客户一同成长</p>
</div>
<div class="about-text">
<h2>个人化服务</h2>
<p>在Buddy's
Cloud我们相信没有一种云解决方案能够适合所有人这就是为什么我们提供个性化的咨询服务帮助客户了解他们的需求并从众多云服务中选择最合适的我们的服务不仅限于技术层面更包括帮助客户理解云服务助力他们的业务成长</p>
</div>
</div>
</div>
<div class="about-content2">
<div class="desc2-right">
<div class="about-text">
<h2>持续的合作伙伴</h2>
<p>Buddy's
Cloud的成功建立在与客户建立长期关系的基础上我们视每一位客户为合作伙伴与他们一起成长共同面对技术挑战和市场变化</p>
</div>
<div class="about-text">
<h2>未来愿景</h2>
<p>展望未来Buddy's
Cloud将继续作为云服务领域的领导者不断创新和改进我我们将持续扩大我们的合作伙伴网络为客户提供更多选择和更厂们的服务泛的服务</p>
</div>
<div class="about-text">
<h2>技术专长与人文关怀</h2>
<p>我们深知技术的力量和意义在于其能够改善人们的生活目Buddy's
Cloud专注于将最新的云技术与对客户的深切关怀结合起来我们的专家团队不仅拥有深厚的技术知识更拥有倾听和理解客户需求的热情</p>
</div>
<div class="about-text">
<h2>结语</h2>
<p>在Buddy's Cloud我们不仅仅是你的云服务代理商更是你数字旅程中的伙伴<br>
让我们一起在云计算的天空中翱翔发现新的可能性实现你的业务目标</p>
</div>
</div>
<div class="photo-left2">
</div>
</div>
<div class="end-about">
<div>Buddy's Cloud - Your Partner in the cloud Journey.</div>
<div>你云中旅程的伙伴</div>
</div>
</div>
</div>
</div>
<FooterMenu></FooterMenu>
</div>
</template>
<script>
import NavMenu from "../components/NavMenu.vue";
import FooterMenu from "../components/FooterMenu.vue";
export default {
components: {NavMenu, FooterMenu}
}
</script>
<style scoped>
.about-section {
font-family: Arial, sans-serif;
width: 80%;
margin: 0 auto;
padding: 5rem 0;
}
.desc-title {
color: #ff6702;
font-weight: bold;
font-size: clamp(1.1rem, 1.7vw, 5rem);
}
.about-title {
text-align: center;
font-size: 2.5rem;
margin-bottom: 5rem;
color: #ff6702;
}
.about-content {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
line-height: 1.6;
text-align: justify;
}
.about-description-chinese,
.about-description-english {
font-size: 1.1rem;
margin: 1rem 0;
}
.about-description-chinese {
font-size: clamp(0.7rem, 1.1vw, 3rem);
color: rgba(0, 0, 0, 0.6);
}
.about-description-english {
font-size: clamp(0.7rem, 1.1vw, 3rem);
color: rgba(0, 0, 0, 0.6);
}
.about-content2 {
width: 100%;
display: flex;
justify-content: center;
gap: 4rem;
align-items: stretch;
margin-top: 3rem;
}
.photo-left {
width: 30%;
height: auto;
background: url("../assets/back/ri2.jpg") no-repeat;
background-size: 100% 100%;
}
.photo-left2 {
width: 30%;
height: auto;
background: url("../assets/back/chengshi.jpg") no-repeat;
background-size: 100% 100%;
}
.photo-left img {
width: 100%;
height: 100%;
}
.desc2-right {
width: 80%;
height: auto;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.about-text {
margin-top: 1rem;
}
.about-text h2 {
font-size: clamp(1.1rem, 1.7vw, 5rem);
color: #ff6702;
font-weight: bold;
}
.about-text p {
font-size: clamp(0.7rem, 1.1vw, 3rem);
color: rgba(0, 0, 0, 0.6);
}
.end-about {
margin-top: 5rem;
width: 100%;
border-top: 2px solid #ff6702;
font-size: clamp(1.1rem, 1.7vw, 5rem);
font-weight: bold;
color: #ff6702;
text-align: center;
}
@media (max-width: 800px) {
.about-section{
width: 100%;
padding: 0;
}
.about-content2 {
width: 100%;
display: flex;
justify-content: center;
gap: 1rem;
align-items: stretch;
margin-top: 1rem;
}
.about-title {
text-align: center;
font-size: 1.8rem;
margin-bottom: 1rem;
color: white;
}
.about-content-desc{
background: #ff6702;
color: white;
padding: 1rem;
}
.desc-title{
color:white;
}
.about-description-chinese{
color: white;
}
.about-description-english{
color: white;
}
.about-text{
margin-top: 0;
}
.about-text p{
margin-bottom: 0;
}
.about-content2{
padding:0 1rem;
}
.photo-left {
width: 50%;
height: auto;
background: url("../assets/back/ri2.jpg") no-repeat;
background-size: 200% 110%;
background-position: right center;
}
.photo-left2 {
width: 40%;
height: auto;
background: url("../assets/back/chengshi.jpg") no-repeat;
background-size: 200% 100%;
}
.end-about {
margin-top: 1rem;
width: 100%;
border-top: 2px solid #ff6702;
font-weight: bold;
color: #ff6702;
text-align: center;
}
.about-text h2{
margin: 0.5rem 0 0.2rem 0;
}
}
</style>

262
pages/calculatePrice.vue Normal file
View File

@ -0,0 +1,262 @@
<!--价格计算page-->
<template>
<div>
<NavMenu></NavMenu>
<div class="pricbackground">
<div class="pricbackground-top">
<div class="pricimgs-leftBox">
</div>
<div class="pricimgs-rightBox">
<div class="pricimgs-rightBox_padding_top">
<div class="pricimgs-rightBox-wh"><img src="../assets/icon/img_1.png"></div>
<div class="pricimgs-rightBox-subtitle">
<div>如何选择合适的配置</div>
<div>How to choose the right configuration</div>
</div>
</div>
<div class="pricimgs-rightBox-CloudMassage">
<div>我们不仅是AWS服务代理商作为伙伴我们还希望能帮助您理解云服务助力您的业务</div>
<div>We are not only an AWS service reseller, but as a partner, we also want to helpyou understand cloud
services and help your business
</div>
</div>
</div>
</div>
<div class="pricbackground-between">
<div class="pricbackground-between-jgpz"><span
class="pricbackground-between-jg">Buddy's Cloud价格: 官网价格x<span
class="pricbackground-between-jg-bl">96</span>%</span> <span class="pricbackground-between-pz"><a :href="contactLinks.PriceCalculator"
target="_blank">点击前往AWS官网查看配置 <svg
t="1740226957523" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
p-id="4090" width="200" height="200"><path
d="M744.848 536L472.96 807.248a42.56 42.56 0 0 0 0 60.272 42.8 42.8 0 0 0 60.416 0l302.128-301.376a42.56 42.56 0 0 0 0-60.288L533.36 204.48a42.8 42.8 0 0 0-60.416 0 42.56 42.56 0 0 0 0 60.272L744.848 536z m-300.416 0L172.512 807.248a42.56 42.56 0 0 0 0 60.272 42.8 42.8 0 0 0 60.432 0L535.04 566.144a42.56 42.56 0 0 0 0-60.288L232.96 204.48a42.8 42.8 0 0 0-60.432 0 42.56 42.56 0 0 0 0 60.272L444.432 536z"
fill="#fff" p-id="4091"></path></svg></a></span>
</div>
<div class="pricbackground-between-kf"><img src="../assets/icon/Message.png" alt="zx"><a :href="contactLinks.PriceC_CustomerService"
target="_blank">价格详情咨询客服</a>
</div>
</div>
</div>
<FooterMenu></FooterMenu>
</div>
</template>
<script>
import '../assets/CSS/styles.css';
import NavMenu from "../components/NavMenu.vue";
import FooterMenu from "../components/FooterMenu.vue";
import { contactLinks } from '../static/js/contact_link.js';
export default {
components: {NavMenu, FooterMenu},
setup() {
return {
contactLinks
}
}
}
</script>
<style>
.pricbackground {
width: 100%;
height: 80%;
background-color: #ff6702;
color: white;
display: flex;
flex-direction: column;
flex-wrap: wrap;
align-items: center;
z-index: 1;
border-bottom: 1px solid #ffffff;
padding-top: 5rem;
}
.pricbackground-top {
width: 80%;
height: 55%;
color: white;
margin: 0 auto;
display: flex;
justify-content: left;
flex-wrap: nowrap;
align-items: center;
}
.pricimgs-leftBox {
transition: width 0.5s ease; /* 平滑过渡 */
width: 40%;
height: 500px;
padding-right: 5%;
background: url("../assets/helloIMG/priceleft.jpg") no-repeat;
background-size: 90% 100%;
}
.pricimgs-rightBox {
transition: width 0.5s ease; /* 平滑过渡 */
width: 50%;
height: 100%;
z-index: 2;
display: flex;
justify-content: flex-end;
flex-direction: column;
/* background-color: rgb(1, 7, 13); */
}
.pricimgs-rightBox-wh {
width: 100px;
height: 150px;
}
.pricimgs-rightBox-wh img {
width: 100%;
height: 100%;
}
.pricimgs-rightBox-subtitle {
font-size: clamp(1.2rem, 2vw, 2rem); /* 使用 clamp() 调整字体大小 */
font-weight: bold;
width: 100%;
margin-block: 10px;
}
.pricimgs-rightBox-CloudMassage {
font-size: clamp(0.9rem, 1.5vw, 1.5rem); /* 动态调整段落字体 */
font-weight: 400;
width: 100%;
}
.pricbackground-between {
width: 80%;
height: 20%;
}
.pricbackground-between-jgpz {
border-block-end-style: solid;
display: flex;
justify-content: space-between;
align-items: flex-end;
margin-top: 2%;
}
.pricbackground-between-jg {
font-size: clamp(1rem, 2vw, 2rem);
}
.pricbackground-between-jg-bl {
font-size: clamp(2rem, 3vw, 3rem);
}
.pricbackground-between-pz svg {
width: 25px;
height: 25px;
margin-bottom: 6px;
}
.pricbackground-between-pz {
font-size: max(0.7rem, min(1vw, 1.2rem));
}
.pricbackground-between-pz a {
font-size: max(0.7rem, min(1vw, 1.2rem));
color: white;
}
.pricbackground-between-kf {
font-size: var(--font-size-paragraph);
text-align: center;
margin: 20px;
}
.pricbackground-between-kf a {
font-size: var(--font-size-paragraph);
text-align: center;
margin: 20px;
color: white;
}
.pricbackground-between-kf img {
width: 5%;
}
@media (max-width: 800px) {
.pricbackground-top {
display: flex;
flex-direction: column;
width: 90%;
margin: 0 auto;
}
.pricbackground {
padding-top: 1rem;
border: none;
}
.pricimgs-leftBox {
width: 100%;
height: clamp(200px, 5vh, 400px);
padding: 0;
background: url("../assets/helloIMG/priceleft2.jpg") no-repeat;
background-size: 100% 100%;
}
.pricimgs-rightBox {
width: 100%;
border-bottom: 3px solid #ffffff;
border-right: 3px solid #ffffff;
border-left: 3px solid #ffffff;
padding: 1rem;
}
.pricimgs-rightBox_padding_top {
display: flex;
justify-content: left;
align-items: flex-end;
}
.pricimgs-rightBox-wh{
width: 90px;
height: 100px;
}
.pricimgs-rightBox-subtitle{
text-align: right;
}
.pricimgs-rightBox-CloudMassage{
text-align: center;
margin-top: 5%;
color: rgba(255, 255, 255, 0.84);
}
.pricbackground-between-jgpz {
border-bottom-style: solid;
display: flex;
align-items: center;
flex-direction: column;
margin-top: 2%;
padding-bottom: 2%;
}
.pricbackground-between-pz a{
color: rgba(255, 255, 255, 0.8);
}
.pricbackground-between-pz a svg{
width: 18px;
height: 18px;
margin-bottom: 2px;
}
.pricbackground-between-pz a:hover{
text-decoration: none;
}
.pricbackground-between-kf{
margin: 6px;
}
.pricbackground-between-kf img {
width: 13%;
}
.pricbackground-between-kf a {
margin: 5px;
}
}
</style>

164
pages/contactUs.vue Normal file
View File

@ -0,0 +1,164 @@
<template>
<div>
<NavMenu v-if="isContactPage"></NavMenu>
<div class="contact-view">
<div class="contact-view-bg">
<div class="contact-form-container">
<div class="contact-title">
<span class="chinese-title">联系我们</span>
<span class="english-title">Send us a message</span>
</div>
<form action="https://formspree.io/f/mrbzdeeg" class="contact-form">
<div class="contact-form-group">
<label for="name">昵称 <span> Enter your name </span></label>
<input type="text" id="name"/>
</div>
<div class="contact-form-group">
<label for="email">邮箱 <span> Enter your email </span></label>
<input type="email" id="email"/>
</div>
<div class="contact-form-group">
<label for="message">留言 <span>Your message </span></label>
<textarea id="message"></textarea>
</div>
<button type="submit" class="submit-button">发送</button>
</form>
<p class="response-text">我们将尽快给您回复 We will respond as soon as possible</p>
</div>
</div>
</div>
<FooterMenu v-if="isContactPage"></FooterMenu>
</div>
</template>
<script>
import NavMenu from "../components/NavMenu.vue";
import FooterMenu from "../components/FooterMenu.vue";
export default {
components: {
NavMenu,
FooterMenu
},
computed: {
// Use computed property to check if the current route is '/contactUs'
isContactPage() {
return this.$route.path === '/contactUs';
}
}
};
</script>
<style scoped>
.contact-view-bg {
width: 100%;
height: 100vh;
background: url("../assets/back/ri.jpg") no-repeat;
background-size: 100% 100%;
display: flex;
justify-content: left;
padding: 0 clamp(2rem, 10vw, 16rem);
align-items: center;
}
.contact-form-container {
background-color: rgba(255, 255, 255, 0.8); /* 半透明白色背景 */
padding: 40px;
width: 40%;
border-radius: 10px;
}
.contact-title {
text-align: left;
margin-bottom: 20px;
}
.chinese-title {
font-size: 1.8rem;
color: #ff6702;
display: block;
}
.english-title {
font-size: 1.2rem;
color: #ff6702;
}
.contact-form {
display: flex;
flex-direction: column;
}
.contact-form-group {
margin-bottom: 20px;
}
.contact-form-group label {
font-size: 1.2rem;
color: #ff6702;
display: block;
margin-bottom: 5px;
}
.contact-form-group label span {
font-size: 1rem;
color: #333;
margin-bottom: 5px;
}
.contact-form-group input,
.contact-form-group textarea {
width: 100%;
padding: 10px;
font-size: 1rem;
border: 1px solid #ff6702;
border-radius: 5px;
}
.contact-form-group textarea {
height: 120px;
}
.contact-form-group input:focus,
.contact-form-group textarea:focus {
border-color: #ff6702; /* 设置选中时的边框颜色 */
outline: none; /* 去除默认的聚焦框 */
}
.submit-button {
background-color: #ff6702;
color: white;
padding: 10px;
font-size: 1rem;
border: none;
border-radius: 5px;
cursor: pointer;
transition: background-color 0.3s;
}
.submit-button:hover {
background-color: #e45a00;
}
.response-text {
text-align: center;
font-size: 1rem;
color: #333;
margin-top: 20px;
}
@media (max-width: 850px) {
.contact-view-bg {
background: url("../assets/back/ri2.jpg") no-repeat;
background-size: 100% 100%;
padding: 0;
}
.contact-form-container {
width: 90%;
margin: 0 auto;
height: 68%;
}
}
</style>

1156
pages/home.vue Normal file

File diff suppressed because it is too large Load Diff

296
pages/index.vue Normal file
View File

@ -0,0 +1,296 @@
<template>
<div>
<!-- Banner Section -->
<div class="banner-view">
<div class="banner-view-leftBox">
<div class="banner-view-title">BuddyS</div>
<div class="banner-view-CloudTitle">Buddys Cloud</div>
<div class="banner-view-CloudMassage">Hey buddy!<br/>
Welcome back ,we have prepared a suitable AWS plan for you
</div>
<!-- <div class="banner-view-buttons">-->
<!-- <button>进入首页</button> <button>联系我们</button>-->
<!-- </div>-->
</div>
<div class="banner-view-rightBox">
<img src="../assets/helloIMG/StartHere.png" alt="buddy.com"/>
</div>
</div>
<!-- Welcome Message Section -->
<div class="welcomeMessage-view">
<div class="welcomeMessage-content">
<p class="welcomeMessage-content-title">Buddys Cloud</p>
<p class="welcomeMessage-content-text">More than just your AWS cloud service reseller, but also a reliable
partner for your cloud journey</p>
<div class="welcomeMessage-content-buttons">
<button @click="goToHomePage">进入首页</button>
<button @click="goToContactPage">联系我们</button>
</div>
</div>
<div class="footer">
<p>
<a href="#">隐私</a> |
<a href="#">网站条款</a> |
<a href="#">Cookie 首选项</a> |
&copy; 2022 Raylinx Inc. 或其附属公司. 保留所有权利.
</p>
</div>
</div>
</div>
</template>
<script>
import '../assets/CSS/styles.css';
export default {
name: 'IndexPage',
methods: {
goToHomePage() {
this.$router.push(`/home`);
},
goToContactPage() {
this.$router.push(`/contactUs`);
}
}
// data() {
// return {
// showHomeAndroid: false,
// screenWidth: null,
// }
// },
// methods: {
// bodyScale() {
// var devicewidth = document.documentElement.clientWidth; //
// if(devicewidth <= 1600) {
// var scale = devicewidth / 1600; // 稿
// requestAnimationFrame(() => {
// document.body.style.zoom = scale; //
// });
// }
// },
// },
//
// mounted() {
// this.screenWidth = document.body.clientWidth; //
// window.onresize = () => {
// setTimeout(() => {
// this.screenWidth = document.body.clientWidth;
// }, 0); // 使0
// };
// },
//
// watch: {
// screenWidth: {
// handler: function (val) {
// setTimeout(() => { // 使setTimeout
// if (val >= 800) {
// this.bodyScale();
// this.showHomeAndroid = false;
// // console.log(this.showHomeAndroid);
// } else if (val < 800) {
// // this.bodyScale();
// this.showHomeAndroid = true;
// // console.log(this.showHomeAndroid);
// }
// // this.$forceUpdate();
// }, 0);
// },
// immediate: true,
// deep: true,
// },
// },
}
</script>
<style scoped>
/* Banner Section */
.banner-view {
width: 100%;
height: 70vh;
background-color: #ff6702;
color: white;
padding: 0 5rem;
display: flex;
justify-content: right;
align-items: center;
z-index: 1;
}
.banner-view-rightBox {
width: var(--dynamic-width-rightBox); /* 使用 root 中的动态宽度 */
transition: width 0.5s ease; /* 平滑过渡 */
z-index: 2;
}
.banner-view-rightBox img {
width: 100%;
height: var(--dynamic-width-rightBox);
margin: 0 auto;
}
.banner-view-leftBox {
width: var(--dynamic-width-leftBox); /* 使用 root 中的动态宽度 */
transition: width 0.5s ease; /* 平滑过渡 */
position: absolute;
left: 5%;
}
.banner-view-title {
font-size: var(--font-size-title); /* 使用 clamp() 调整字体大小 */
font-weight: bold;
}
.banner-view-CloudTitle {
font-size: var(--font-size-subtitle); /* 动态调整字体大小 */
font-weight: 500;
margin-left: 10px;
}
.banner-view-CloudMassage {
font-size: var(--font-size-paragraph); /* 动态调整段落字体 */
font-weight: 400;
width: 60%;
margin-left: 10px;
}
.banner-view-buttons {
margin-left: 10px;
margin-top: 5%;
}
.banner-view-buttons button {
border-radius: 10px;
padding: 5px;
border: none;
color: #ff6702;
text-align: center;
width: 15%;
margin-right: 5%;
font-size: var(--button-font-size); /* 使用 clamp() 调整按钮字体 */
}
/* Welcome Message Section */
.welcomeMessage-view {
width: 100%;
height: 30vh;
background-color: #ffffff;
color: #000;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
position: relative;
}
.welcomeMessage-content {
font-size: var(--font-size-paragraph); /* 动态调整段落字体 */
}
.welcomeMessage-content-title {
font-size: var(--font-size-subtitle); /* 动态调整标题字体 */
font-weight: 500;
color: #ff6702;
}
.welcomeMessage-content-buttons {
margin: 0 auto;
display: flex;
justify-content: space-between;
width: 40%;
padding: 0 2%;
}
.welcomeMessage-content-buttons button {
background-color: #ff6702;
text-align: center;
width: 50%;
border-radius: 10px;
padding: 5px;
border: none;
font-size: var(--button-font-size); /* 使用 clamp() 调整按钮字体 */
color: #fff;
}
/* Footer Section */
.footer {
background-color: var(--footer-bg-color);
color: var(--footer-text-color);
text-align: center;
font-size: var(--footer-size-paragraph); /* 动态调整字体大小 */
position: fixed;
bottom: 0;
width: 100%;
display: flex; /* 添加 flex 布局 */
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
height: auto; /* 如果没有固定高度,允许内容根据内容自动调整 */
}
.footer p {
margin: 0;
display: flex;
justify-content: center;
align-items: center;
font-size: var(--footer-size-paragraph);
}
.footer a {
color: var(--footer-link-color);
text-decoration: none;
margin: 0 0.5rem;
font-size: var(--footer-size-paragraph);
}
.footer a:hover {
text-decoration: underline;
}
/* 当页面宽度小于 800px 时,动态调整宽度 */
@media (max-width: 800px) {
.banner-view {
display: block;
z-index: 1;
padding: 1rem;
}
.banner-view-leftBox {
width: 100%; /* 当宽度小于 800px 时左边盒子宽度变为100% */
position: relative;
}
.banner-view-CloudMassage {
width: 90%;
}
.banner-view-rightBox {
width: 90%;
z-index: 2;
margin: 0 auto;
}
.welcomeMessage-content-buttons {
margin: 0 auto;
display: flex;
justify-content: space-between;
gap: 1rem;
width: 50%;
padding: 0 2%;
}
.welcomeMessage-view {
width: 100%;
height: 25vh;
background-color: #ffffff;
color: #000;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
position: relative;
}
}
</style>

BIN
static/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

18
static/js/contact_link.js Normal file
View File

@ -0,0 +1,18 @@
// contact_link.js
export const contactLinks = {
telegram: "https://t.me/your_telegram",
phone: "tel:+1234567890", // Replace with your phone number
wechat: "https://weixin.qq.com", // WeChat link
facebook: "https://www.facebook.com/yourpage", // Replace with your Facebook page URL
email: "mailto:someone@example.com", // Replace with your email address
// 首页箭头按钮
Arrow:"https://t.me/your_telegram",
// 首页“联系客服”按钮
CustomerService:"https://t.me/your_telegram",
// 价格计算页面 "AWS官网"
PriceCalculator:"https://calculator.aws/",
// 价格计算页面联系客服按钮
PriceC_CustomerService:"https://t.me/your_telegram"
};

10
store/README.md Normal file
View File

@ -0,0 +1,10 @@
# STORE
**This directory is not required, you can delete it if you don't want to use it.**
This directory contains your Vuex Store files.
Vuex Store option is implemented in the Nuxt.js framework.
Creating a file in this directory automatically activates the option in the framework.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/vuex-store).

17
store/index.js Normal file
View File

@ -0,0 +1,17 @@
// store/index.js
export const state = () => ({
isMenuChecked: false, // 记录菜单是否展开的状态
});
export const mutations = {
toggleMenu(state) {
state.isMenuChecked = !state.isMenuChecked;
console.log('state.isMenuChecked:', state.isMenuChecked);
}
};
export const actions = {
toggleMenu({ commit }) {
commit('toggleMenu'); // 调用 mutation 切换菜单状态
},
};