344 lines
9.2 KiB
Vue
344 lines
9.2 KiB
Vue
<template>
|
||
<header class="head_container" :class="{ scrolled: isScrolled }">
|
||
<div class="logo">
|
||
<div class="logo_b"><img src="../../assets/images/logo.png" alt="河北秦安安全科技股份有限公司"/></div>
|
||
<div class="logo_w"> <img src="../../assets/images/logo1.png" alt="河北秦安安全科技股份有限公司"/></div>
|
||
</div>
|
||
<div style="display: flex">
|
||
<nav class="nav_list">
|
||
<ul>
|
||
<li :class="{ active: isActive('/') }"><NuxtLink to="/public">首页</NuxtLink></li>
|
||
<li
|
||
:class="{ active: isActive('/product') }"
|
||
@mouseenter="isProductHovered = true"
|
||
@mouseleave="isProductHovered = false"
|
||
>
|
||
<NuxtLink to="">产品</NuxtLink>
|
||
<span v-if="isProductHovered">
|
||
<NuxtLink
|
||
v-for="(item, index) in proList"
|
||
:key="index"
|
||
v-motion
|
||
:to="item.path"
|
||
:initial="{ opacity: 0, y: -10 }"
|
||
:enter="{ opacity: 1, y: 0, transition: { delay: index * 50, duration: 300 } }"
|
||
:leave="{ opacity: 0, y: -10, transition: { duration: 200 } }"
|
||
>
|
||
{{item.name}}
|
||
</NuxtLink>
|
||
</span>
|
||
</li>
|
||
<li :class="{ active: isActive('/solution') }">
|
||
<NuxtLink to="/solution">解决方案</NuxtLink>
|
||
</li>
|
||
<li :class="{ active: isActive('/new') }"><NuxtLink to="/new">新闻资讯</NuxtLink></li>
|
||
<li
|
||
:class="{ active: isActive('/rule/legal') }"
|
||
@mouseenter="isRuleHovered = true"
|
||
@mouseleave="isRuleHovered = false"
|
||
>
|
||
<NuxtLink to="">政策法规</NuxtLink>
|
||
<span v-if="isRuleHovered">
|
||
<NuxtLink
|
||
v-for="(item, index) in RuleList"
|
||
:key="index"
|
||
v-motion
|
||
:to="item.path"
|
||
:initial="{ opacity: 0, y: -10 }"
|
||
:enter="{ opacity: 1, y: 0, transition: { delay: index * 50, duration: 300 } }"
|
||
:leave="{ opacity: 0, y: -10, transition: { duration: 200 } }"
|
||
>
|
||
{{item.name}}
|
||
</NuxtLink>
|
||
</span>
|
||
</li>
|
||
<li :class="{ active: isActive('/evaluation') }"><NuxtLink to="/evaluation">安全评价</NuxtLink></li>
|
||
<li :class="{ active: isActive('/case') }"><NuxtLink to="/case">合作案例</NuxtLink></li>
|
||
<!-- <li :class="{ active: isActive('/service') }"><NuxtLink to="/service">服务流程</NuxtLink></li>-->
|
||
<!-- <li :class="{ active: isActive('/about') }"><NuxtLink to="/about">关于秦安</NuxtLink></li>-->
|
||
<li
|
||
:class="{ active: isActive('/product') }"
|
||
@mouseenter="isAboutHovered = true"
|
||
@mouseleave="isAboutHovered = false"
|
||
>
|
||
<NuxtLink to="">关于秦安</NuxtLink>
|
||
<span v-if="isAboutHovered">
|
||
<NuxtLink
|
||
v-for="(item, index) in AboutList"
|
||
:key="index"
|
||
v-motion
|
||
:to="item.path"
|
||
:initial="{ opacity: 0, y: -10 }"
|
||
:enter="{ opacity: 1, y: 0, transition: { delay: index * 50, duration: 300 } }"
|
||
:leave="{ opacity: 0, y: -10, transition: { duration: 200 } }"
|
||
>
|
||
{{item.name}}
|
||
</NuxtLink>
|
||
</span>
|
||
</li>
|
||
<li :class="{ active: isActive('https://safetyds.qhdsafety.com/#/safety_chat') }"><NuxtLink to="https://safetyds.qhdsafety.com/#/safety_chat" target="_blank">秦安安全大模型</NuxtLink></li>
|
||
</ul>
|
||
<div class="num">股票代码:871771</div>
|
||
</nav>
|
||
</div>
|
||
</header>
|
||
</template>
|
||
<script setup lang="ts">
|
||
import { ref, onMounted, onUnmounted } from "vue";
|
||
|
||
const isProductHovered = ref(false);
|
||
const isAboutHovered = ref(false);
|
||
const isRuleHovered = ref(false);
|
||
const isScrolled = ref(false);
|
||
const route = useRoute();
|
||
|
||
const handleScroll = () => {
|
||
isScrolled.value = window.scrollY > 50;
|
||
};
|
||
|
||
onMounted(() => {
|
||
window.addEventListener("scroll", handleScroll);
|
||
});
|
||
|
||
onUnmounted(() => {
|
||
window.removeEventListener("scroll", handleScroll);
|
||
});
|
||
|
||
const isActive = (path: string) => {
|
||
if (path === "/") {
|
||
return route.path === "/";
|
||
}
|
||
return route.path.startsWith(path);
|
||
};
|
||
|
||
const proList = [
|
||
{ name: "基层监管平台", path: "/product/regulatory" },
|
||
{ name: "GBS数字底座", path: "" },
|
||
{ name: "一体化智能云平台", path: "" },
|
||
{ name: "安全培训开发者平台", path: "" },
|
||
{ name: "服务机构自我赋能平台", path: "" },
|
||
{ name: "应急管理大数据中心", path: "" },
|
||
];
|
||
const AboutList=[
|
||
{ name: "公司简介", path: "/about" },
|
||
{ name: "领导致词", path: "/about/leaderSpeech" },
|
||
{ name: "发展战略", path: "/about/developmentStrategy" },
|
||
{ name: "组织架构", path: "/about/organizationalStructure" },
|
||
{ name: "资质荣誉", path: "/about/honor" },
|
||
{ name: "发展历程", path: "/about/developmentHistory" },
|
||
];
|
||
const RuleList= [
|
||
{ name: "法律法规", path: "/rule/legal" },
|
||
{ name: "政府规章", path: "/rule/government" },
|
||
{ name: "规范文件", path: "/rule/specification" },
|
||
{ name: "技术标准", path: "/rule/technicalStandards" },
|
||
];
|
||
</script>
|
||
<style scoped lang="scss">
|
||
.head_container{
|
||
min-width: 1400px;
|
||
width: 100%;
|
||
height: 70px;
|
||
background: rgba(4,17,40,0.52);
|
||
display: flex;
|
||
justify-content: space-between;
|
||
border-bottom: 1px solid rgba(255,255,255,0.2);
|
||
align-items: center;
|
||
padding: 0 20px;
|
||
box-sizing: border-box;
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
z-index: 999;
|
||
transition: all 0.3s ease;
|
||
|
||
&.scrolled{
|
||
position: fixed;
|
||
background: #ffffff;
|
||
border-bottom: 1px solid #eeeeee;
|
||
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
||
|
||
.nav_list{
|
||
.num{
|
||
color: #222222;
|
||
}
|
||
ul li{
|
||
color: #222222;
|
||
a{
|
||
color: #222222;
|
||
text-decoration: none;
|
||
&:before{
|
||
background-color: #1d78ff;
|
||
left: 50%;
|
||
right: 50%;
|
||
}
|
||
}
|
||
|
||
&.active a:before,
|
||
&:hover a:before{
|
||
left: 0;
|
||
right: 0;
|
||
}
|
||
|
||
&.active a{
|
||
color: #222222;
|
||
|
||
}
|
||
&:hover{
|
||
color: #1d78ff;
|
||
background: #ddebff;
|
||
}
|
||
span{
|
||
a{
|
||
color: #222222;
|
||
&:before{
|
||
display: none;
|
||
}
|
||
&:hover{
|
||
color: #222222;
|
||
background: #ddebff;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.logo{
|
||
position: relative;
|
||
width: 150px;
|
||
height: 50px;
|
||
|
||
.logo_b, .logo_w{
|
||
position: absolute;
|
||
top: 10px;
|
||
left: 0;
|
||
width: 128px;
|
||
height: 32px;
|
||
transition: opacity 0.3s ease;
|
||
|
||
img{
|
||
width: 128px;
|
||
height: 32px;
|
||
object-fit: contain;
|
||
}
|
||
}
|
||
|
||
.logo_w{
|
||
opacity: 0;
|
||
}
|
||
|
||
.logo_b{
|
||
opacity: 1;
|
||
}
|
||
}
|
||
|
||
&.scrolled{
|
||
.logo{
|
||
.logo_b{
|
||
opacity: 0;
|
||
}
|
||
.logo_w{
|
||
opacity: 1;
|
||
}
|
||
}
|
||
}
|
||
|
||
.nav_list{
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
|
||
.num{
|
||
color: #ffffff;
|
||
font-size: 14px;
|
||
margin-left: 50px;
|
||
}
|
||
ul{
|
||
display: flex;
|
||
justify-content: space-between;
|
||
li{
|
||
list-style: none;
|
||
color: #ffffff;
|
||
padding: 0 15px;
|
||
font-size: 14px;
|
||
box-sizing: border-box;
|
||
position: relative;
|
||
a{
|
||
color: #ffffff;
|
||
text-decoration: none;
|
||
cursor: pointer;
|
||
display: inline-block;
|
||
position: relative;
|
||
height: 70px;
|
||
line-height: 70px;
|
||
&:before{
|
||
content: "";
|
||
position: absolute;
|
||
z-index: 1;
|
||
transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
||
bottom: 0;
|
||
background-color: #ffffff;
|
||
height: 2px;
|
||
left: 50%;
|
||
right: 50%;
|
||
border-radius: 2px 2px 0 0;
|
||
opacity: 0;
|
||
}
|
||
}
|
||
|
||
&.active{
|
||
a{
|
||
&:before{
|
||
opacity: 1;
|
||
left: 0;
|
||
right: 0;
|
||
}
|
||
}
|
||
}
|
||
&:hover{
|
||
a{
|
||
&:before{
|
||
opacity: 1;
|
||
left: 0;
|
||
right: 0;
|
||
}
|
||
}
|
||
}
|
||
|
||
span{
|
||
position: absolute;
|
||
top: 70px;
|
||
background: #fff;
|
||
width: 200px;
|
||
text-align: center;
|
||
left: 50%;
|
||
margin-left: -100px;
|
||
box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.08);
|
||
padding: 10px 0;
|
||
border-radius: 4px;
|
||
z-index: 999999;
|
||
border-bottom: 1px solid #eeeeee !important;
|
||
a{
|
||
color: #333333;
|
||
display: block;
|
||
width: 100%;
|
||
height: 50px;
|
||
line-height: 50px;
|
||
border-bottom: 1px solid #eeeeee !important;
|
||
text-decoration: none;
|
||
&:hover{
|
||
color: #222222;
|
||
background: #ddebff;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
</style>
|