master
鲁洪霞 2026-03-11 17:57:29 +08:00
parent 669cf00f58
commit 4d4074df21
84 changed files with 1190 additions and 262 deletions

View File

@ -1,75 +1,806 @@
@charset "UTF-8";
.cm-navbar .navbar-nav .nav-link {
font-size: 18px;
padding-left: 16px;
padding-right: 16px;
color: #212529;
}
.cm-navbar .navbar-nav .nav-link.active {
color: #007bff;
}
.navbar-nav-scroll {
max-width: 100%;
height: 2.5rem;
/*margin-top: .25rem;*/
overflow: hidden;
}
.navbar-nav-scroll .navbar-nav {
/*padding-bottom: 2rem;*/
overflow-x: auto;
white-space: nowrap;
margin-left: -0.5rem;
margin-right: -0.5rem;
-webkit-overflow-scrolling: touch;
}
.cm-hidden {
display: none;
}
.cm-pointer {
cursor: pointer;
}
.cm-ff-yh {
font-family: "Microsoft YaHei", , "MicrosoftJhengHei", serif;
}
.cm-block-head-bottom {
border-bottom: solid 2px;
border-color: #007bff;
display: inline-block;
padding-bottom: 0.3rem;
}
.cm-trans-bottom {
.head_container{
min-width: 1400px;
width: 100%;
bottom: 0;
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;
background-color: rgba(0, 0, 0, 0.4);
top: 0;
left: 0;
z-index: 99999;
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);
z-index: 99999;
.nav_list{
ul{
margin: 0;
}
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;
margin:0;
li{
list-style: none;
color: #ffffff;
padding: 0;
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: 55px;
&: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;
}
}
}
}
}
}
}
.cm-media-img {
max-width: 180px;
max-height: 120px;
}
.index_banner{
width: 100%;
height: 600px;
text-align: center;
position: relative;
@media screen and (max-width: 767px) {
.cm-media-img {
max-width: 120px;
max-height: 80px;
.carousel-item{
height:600px !important;}
.carousel-indicators{
bottom:60px !important;
}
.content{
width: 1400px;
margin: 0 auto;
text-align: center;
color: #ffffff;
h1{
font-size: 60px;
margin: 0;
}
p{
font-size: 22px;
margin-top: 10px;
}
.btn{
border-radius: 50px;
padding: 10px 30px;
display: inline-block;
background-color: rgb(65, 106, 234);
box-shadow: 4.974px 3.355px 20px 0 rgba(6, 22, 46, 0.5);
}
}
.info{
width: 1400px;
position: absolute;
bottom: -50px;
display: flex;
justify-content: space-between;
left: 50%;
transform: translate(-50%);
z-index: 999;
.item{
border-style: solid;
border-width: 2px;
border-color: rgb(255, 255, 255);
border-radius: 4px;
background: #ffffff;
box-shadow: 0 5px 10px 0 rgba(35, 24, 21, 0.1);
width: 24%;
padding: 10px;
p{
margin: 0;
text-align: center;
}
.num{
font-size: 26px;
color: #1483ff;
}
.text{
color: #222222;
font-size: 16px;
}
.notes{
color: #697c9e;
font-size: 14px;
}
}
}
}
/*新闻中心*/
.news_container{
width: 1400px;
margin: 80px auto 0;
.title{
text-align: center;
.tit{
margin: 0;
padding: 0;
font-size: 36px;
color: #4c4b4b;
}
p{
margin: 0;
padding: 0;
color: #999999;
font-size: 14px;
}
}
.new_main{
width: 100%;
display: flex;
justify-content: space-between;
margin-top: 20px;
.new_left{
width: 50%;
background: #ffffff;
box-shadow: 0 5px 10px 0 rgba(35, 24, 21, 0.1);
padding: 10px;
height:560px;
.item{
.img{
width: 100%;
}
.text{
.title{
text-align: left;
margin: 10px;
}
}
}
}
.new_right{
flex: 1;
margin-left: 20px;
ul{
margin:0px;
padding:0px;
}
.item{
display: flex;
border-bottom: 1px solid #eeeeee;
padding-bottom: 10px;
margin-bottom: 15px;
.img{
width: 170px;
margin-right: 10px;
}
.info{
width: calc(100% - 170px);
text-align: left;
p{
margin-bottom:5px
}
.title{
text-align: left;
font-size: 16px;
a{
color: #222222;
font-size: 16px;
}
}
.time{
color: #999999;
margin: 10px 0;
}
.text{
color: #434343;
font-size: 14px;
}
}
}
}
}
}
.cm-link {
color: #212529;
}
.cm-link:hover {
color: rgb(0, 98.4, 204);
}
.es-highlight em {
color: #dc3545;
font-style: normal;
}
/*推荐产品*/
.product_container{
width: 100%;
background: #f8f8f8 url("../img/img3.png") no-repeat right bottom;
padding: 50px;
box-sizing: border-box;
margin-top: 50px;
.product_main{
width: 1400px;
margin: 0 auto;
.title{
text-align: center;
.tit{
margin: 0;
padding: 0;
font-size: 36px;
color: #4c4b4b;
}
p{
margin: 0;
padding: 0;
color: #999999;
font-size: 14px;
}
}
.product_wrap{
width: 100%;
.top_container{
width: 100%;
display: flex;
margin-top: 30px;
justify-content: space-around;
.item{
border-radius: 29px;
padding: 10px 30px;
color: #222222;
cursor: pointer;
&:hover{
background: #1d78ff url("../img/img4.png") no-repeat right bottom;
color: #ffffff;
}
}
.active{
background: #1d78ff url("../img/img4.png") no-repeat right bottom;
color: #ffffff;
}
}
.main_container{
width: 100%;
background: #ffffff;
padding: 50px;
border-radius: 4px;
margin-top: 20px;
display: flex;
align-items: center;
.left{
width: 50%;
padding-left: 50px;
.title{
text-align: left;
font-size: 24px;
font-weight: bold;
margin-top: 20px;
}
.notes{
color: #32344e;
margin-top: 10px;
}
.info{
margin-top: 30px;
font-size: 14px;
color: #536080;
line-height: 30px;
.list{
vertical-align: middle;
img{
margin-top: 2px;
}
}
}
}
.right{
text-align: center;
padding-left: 50px;
}
}
}
}
}
/*解决方案*/
.solution{
width:100% ;
background: #ffffff;
padding: 50px;
box-sizing: border-box;
.solution_container{
width: 1400px;
margin: 0 auto;
.title{
text-align: center;
.tit{
margin: 0;
padding: 0;
font-size: 36px;
color: #4c4b4b;
}
p{
margin: 0;
padding: 0;
color: #999999;
font-size: 14px;
}
}
.solution_main{
width: 100%;
display: flex;
margin-top: 30px;
flex-wrap: wrap;
.item{
width: 330px;
height: 195px;
position: relative;
margin: 10px;
overflow: hidden;
.img{
width: 100%;
height: 100%;
img{
width: 100%;
height: 100%;
border-radius: 10px;
}
}
.title{
position: absolute;
top:15px;
left: 15px;
background: rgba(0,0,0,0.23);
padding: 10px 20px;
border-radius: 50px;
color: #ffffff;
font-weight: bold;
z-index: 2;
transition: background 0.3s ease;
}
.info{
width: 100%;
height: 100%;
background: rgba(0,22,60,0.6);
border-radius: 10px;
position: absolute;
left: 0;
top: 0;
box-sizing: border-box;
color: #ffffff;
padding: 80px 20px;
z-index: 1;
opacity: 0;
transform: translateY(100%);
transition: all 0.4s ease;
.more{
text-align: right;
margin-top: 20px;
}
}
&:hover{
.info{
opacity: 1;
transform: translateY(0);
}
.title{
background: #1d78ff;
}
}
}
}
}
}
/*客户案例*/
.case{
width: 100%;
background: #ecf5ff;
padding: 50px 0;
box-sizing: border-box;
.case_container{
width: 1400px;
margin: 0 auto;
.title{
text-align: center;
.tit{
margin: 0;
padding: 0;
font-size: 36px;
color: #4c4b4b;
}
p{
margin: 0;
padding: 0;
color: #999999;
font-size: 14px;
}
}
.case_main{
width: 100%;
margin-top: 30px;
display:flex;
justify-content: space-between;
.item{
width: 440px;
background: #ffffff;
border-radius: 16px;
.img{
width: 100%;
height: 250px;
background: url("../img/img17.png") no-repeat top center;
border-radius: 20px;
}
.info{
background: #ffffff;
padding: 20px;
border-radius: 20px;
margin-top: -40px;
.title{
font-size: 18px;
text-align: left;
margin-bottom: 20px;
color: #222222;
}
.text{
font-size: 14px;
color: #575d63;
}
.details{
color: #1d78ff;
text-align: right;
font-size: 14px;
margin-top: 20px;
}
}
}
}
}
.case_img{
width: 100%;
img{
width: 100%
}
}
}
/*foot*/
.foot_container{
width: 100%;
.top{
width: 100%;
height: 176px;
background: url("../img/foot.png") no-repeat top center;
.foot_main{
width: 1400px;
margin: 0 auto;
padding: 40px 0;
.text{
font-size: 28px;
color: #222222;
}
.btn{
display: inline-block;
background: #3f79ff;
color: #ffffff;
padding: 6px 30px;
border-radius: 4px;
margin-top: 10px;
}
}
}
.foot_bottem{
width: 100%;
background: #0c1d35;
padding: 20px 0;
.wrap{
width: 1400px;
margin: 0 auto;
display: flex;
justify-content: space-between;
.item{
.tit{
color: #ffffff;
font-size: 18px;
}
.main{
color: #cecece;
font-size: 14px;
p{
cursor: pointer;
}
.QRCode{
display: flex;
align-items: center;
margin-top: 20px;
img{
margin-right: 20px;
}
}
.phone{
margin-top: 20px;
color: #ffffff;
font-size: 14px;
}
.btn{
background: #1d78ff;
color: #ffffff;
display: inline-block;
padding: 6px 30px;
border-radius: 4px;
margin-top: 10px;
}
}
}
}
.Copyright{
width: 1400px;
margin: 0 auto;
border-top: 1px solid #20334e;
color: #2f425d;
text-align: center;
font-size: 14px;
padding-top: 20px;
}
}
}
.kefu{
position:fixed;
z-index:99999;
top:30%;
right:50px;
width:48px;
ul{
li{
position:relative;
margin-bottom:12px;
list-style: none;
cursor: pointer;
a, div{
width:48px;
height:48px;
background:#fff;
border:1px solid #eee;
display:block;
text-align:center;
line-height:40px;
color:#333;
border-radius:50px;
box-shadow: 0 4px 16px rgba(28,67,125,.08);
transition: all 0.5s ease-out 0s;
font-size: 18px;
img{
width:24px;
height: 24px;
margin: 12px auto;
}
}
span{
position: absolute;
box-shadow: rgba(28, 67, 125, 0.08) 0 4px 16px;
font-size: 16px;
line-height: 22px;
top: 0;
text-align: center;
right: 20px;
padding: 16px 10px;
white-space: nowrap;
background: rgb(255, 255, 255);
border-width: 1px;
border-style: solid;
border-color: rgba(180, 183, 192, 0.12);
border-image: initial;
border-radius: 4px;
transition: 0.3s;
font-weight: bold;
color: #1d78ff;
display: none;
img{
margin-right: 10px;
}
&::after {
position: absolute;
box-sizing: border-box;
background-color: inherit;
width: 12px;
height: 12px;
top: 20px;
right: -4.25px;
transform: rotate(315deg);
content: "";
transition: 250ms ease-in-out;
border-right: 1px solid rgba(180, 183, 192, 0.12);
border-bottom: 1px solid rgba(180, 183, 192, 0.12);
}
}
&:hover{
span{
display: block;
}
a,div{
background: #90ceff;
border:1px solid #90ceff;
}
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 394 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 993 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 906 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 860 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 579 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 622 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

View File

@ -6625,7 +6625,7 @@ a.close.disabled {
.carousel-indicators {
position: absolute;
right: 0;
bottom: 0;
bottom: 100px;
left: 0;
z-index: 15;
display: -ms-flexbox;
@ -6642,8 +6642,8 @@ a.close.disabled {
box-sizing: content-box;
-ms-flex: 0 1 auto;
flex: 0 1 auto;
width: 30px;
height: 3px;
width: 50px;
height: 10px;
margin-right: 3px;
margin-left: 3px;
text-indent: -999px;

View File

@ -1,36 +1,60 @@
[#escape x as (x)!?html]
<div class="bg-gray-600 gray-300 mt-4">
<div class="container py-4 text-center small">
<p>
<a href="${dy}/sitemap.xml" class="text-reset">站点地图</a>
<span class="ml-2">在线访客: <span id="onlineVisitors"></span></span>
<span class="ml-2">今日访问量: <span id="siteTodayViews"></span></span>
<span class="ml-2">昨日访问量: <span id="siteYesterdayViews"></span></span>
<span class="ml-2">总访问量: <span id="siteViews"></span></span>
<script>
axios.get('${api}/visit/online-visitors').then(function (response) {
$('#onlineVisitors').text(response.data);
});
axios.get('${api}/site/view/${site.id?c}').then(function (response) {
$('#siteTodayViews').text(response.data.todayViews);
$('#siteYesterdayViews').text(response.data.yesterdayViews);
$('#siteViews').text(response.data.views);
});
</script>
</p>
<p>
<span>&copy; ${.now?string('yyyy')} ${site.customs['company']} 版权所有</span>
<span class="ml-2">Powered by <strong><a href="https://www.ujcms.com" class="text-reset" target="_blank">UJCMS</a></strong></span>
</p>
<p>
[#if site.customs['gongan_icp']??]
<span class="ml-2">
<img src="//www.beian.gov.cn/img/new/gongan.png" alt="gongan beian">
<a href="https://www.beian.gov.cn/portal/registerSystemInfo?recordcode=${site.customs['gongan_code']}" target="_blank" class="text-reset">${site.customs['gongan_icp']}</a>
</span>
[/#if]
<span class="ml-2"><a href="https://beian.miit.gov.cn" target="_blank" class="text-reset">${site.customs['icp']}</a></span>
</p>
<div class="foot_container">
<div class="top">
<div class="foot_main">
<div class="text">具有专业化背景的数字化服务公司</div>
<div class="btn">了解详情</div>
</div>
</div>
<div class="foot_bottem">
<div class="wrap">
<div class="item">
<div class="tit">微信开发</div>
<div class="main">
<p>微信小程序开发</p>
<p>微信定制开发</p>
<p>微网站</p>
<p>微商城</p>
<p>H5页面</p>
</div>
</div>
<div class="item">
<div class="tit">业务服务</div>
<div class="main">
<p>安全评价</p>
<p>安全标准化评审与咨询</p>
<p>职业卫生检测与评价</p>
<p>金属非金属矿山设备检测</p>
<p>环境卫生检测检验</p>
<p>应急救援指挥</p>
</div>
</div>
<div class="item">
<div class="tit">平台系统</div>
<div class="main">
<p>双重预防机制建设平台</p>
<p>安全生产线上培训平台</p>
<p>联安众课件商城</p>
<p>联安云-十小监管</p>
<p>数据化标准库平台</p>
<p>北戴河应急管理平台</p>
</div>
</div>
<div class="item">
<div class="tit">关注或联系我们</div>
<div class="main">
<div class="QRCode">
<img src="${'${files}/img/img19.png'}" alt="${site.name}">
<img src="${'${files}/img/img20.png'}" alt="${site.name}">
</div>
<div class="phone">咨询热线13303358557 0335-8909696</div>
<div class="btn">联系我们</div>
</div>
</div>
</div>
<div class="Copyright">
© 2022 河北秦安安全科技股份有限公司.版权所有 冀ICP备08007564号 地址秦皇岛市海港区西港北路85号港城创业基地2栋104室
</div>
</div>
</div>
[/#escape]

View File

@ -1,97 +1,24 @@
[#escape x as (x)!?html]
<nav class="navbar navbar-expand navbar-light[#if headerShadow!false] shadow-sm[/#if] border-bottom cm-navbar">
<div class="container flex-column flex-xl-row justify-content-start align-items-stretch align-items-xl-center px-lg-3">
<div class="d-flex align-items-center">
<div class="flex-grow-1">
<a class="navbar-brand" href="${site.url}" title="${site.name}"><img src="${site.logo!'${files}/img/logo.png'}" alt="${site.name}" height="50"></a>
</div>
[#if user??]
<div class="dropdown mr-2 d-xl-none">
<img src="${user.smallAvatar!config.register.avatar}" alt="${user.username}" title="${user.username}" class="rounded-circle dropdown-toggle" data-toggle="dropdown"
style="width:36px;height:36px;cursor:pointer;">
<div class="dropdown-menu dropdown-menu-right">
<a class="dropdown-item" href="${def}${user.homepage}"><i class="far fa-user"></i> <span>个人主页</span></a>
<a class="dropdown-item" href="${def}/settings/profile"><i class="fas fa-cog"></i> <span>设置</span></a>
<form action="${ctx}/logout" method="post">
<button class="dropdown-item" type="submit"><i class="fas fa-sign-out-alt"></i> <span>退出</span></button>
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}">
</form>
</div>
</div>
[/#if]
<button class="btn d-xl-none collapsed p-0" type="button" data-toggle="collapse" data-target="#navbarNavDropdown"
aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30" focusable="false">
<path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path>
</svg>
</button>
</div>
<div class="navbar-nav-scroll mr-auto">
<ul class="navbar-nav flex-row">
<li class="nav-item">
<a class="nav-link[#if isHome??] active[/#if]" href="${dy}/">首页</a>
</li>
[@ChannelList isNav='true' offset='0'; list]
[#list list as item]
<li class="nav-item">
<a class="nav-link[#if (channel?? && channel.paths[0].id == item.id) || (channelAlias?? && channelAlias == item.alias)] active[/#if]" href="${item.url}"[#if item.targetBlank] target="_blank"[/#if]>${item.name}</a>
</li>
[/#list]
[/@ChannelList]
</ul>
</div>
[#--<div class="collapse d-xl-block mt-1 mt-xl-0" id="navbarNavDropdown">--]
[#-- <form action="${dy}/search">--]
[#-- <div class="input-group">--]
[#-- <input type="text" class="form-control" id="q" name="q" value="${Params.q}" placeholder="搜索" aria-label="搜索">--]
[#-- <div class="input-group-append">--]
[#-- <button class="btn btn-outline-secondary" type="submit">--]
[#-- <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-search" fill="currentColor" xmlns="http://www.w3.org/2000/svg">--]
[#-- <path fill-rule="evenodd" d="M10.442 10.442a1 1 0 0 1 1.415 0l3.85 3.85a1 1 0 0 1-1.414 1.415l-3.85-3.85a1 1 0 0 1 0-1.415z"></path>--]
[#-- <path fill-rule="evenodd" d="M6.5 12a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11zM13 6.5a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0z"></path>--]
[#-- </svg>--]
[#-- </button>--]
[#-- </div>--]
[#-- </div>--]
[#-- </form>--]
[#--</div>--]
<div class="collapse d-xl-block" id="navbarNavDropdown">
<div class="d-flex justify-content-end mt-2 mt-xl-0 py-2 py-xl-0">
[@Site id='2'; bean]
[#if bean??]
<div class="d-flex align-items-center"><a href="${bean.url}" class="small">EN</a></div>
[/#if]
[/@Site]
<div class="ml-3">
<a class="btn btn-light text-primary" href="${dy}/search">
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-search" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M10.442 10.442a1 1 0 0 1 1.415 0l3.85 3.85a1 1 0 0 1-1.414 1.415l-3.85-3.85a1 1 0 0 1 0-1.415z"></path>
<path fill-rule="evenodd" d="M6.5 12a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11zM13 6.5a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0z"></path>
</svg>
</a>
</div>
[#if user??]
<div class="dropdown ml-3 d-none d-xl-block">
<img src="${user.smallAvatar!config.register.avatar}" alt="${user.username}" title="${user.username}" class="rounded-circle dropdown-toggle" data-toggle="dropdown"
style="width:36px;height:36px;cursor:pointer;">
<div class="dropdown-menu dropdown-menu-right">
<a class="dropdown-item" href="${def}${user.homepage}"><i class="far fa-user"></i> <span>个人主页</span></a>
<a class="dropdown-item" href="${def}/settings/profile"><i class="fas fa-cog"></i> <span>设置</span></a>
<form action="${ctx}/logout" method="post">
<button class="dropdown-item" type="submit"><i class="fas fa-sign-out-alt"></i> <span>退出</span></button>
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}">
</form>
</div>
</div>
[#else]
<div class="ml-3">
<a class="btn btn-light text-primary" href="${def}/login">登录</a>
<a class="btn btn-primary" href="${def}/register">注册</a>
</div>
</div>
[/#if]
</div>
</div>
</nav>
<header class="head_container">
<div class="logo">
<a class="navbar-brand" href="${site.url}" title="${site.name}"><img src="${site.logo!'${files}/img/logo.png'}" alt="${site.name}"></a>
</div>
<div style="display: flex">
<nav class="nav_list">
<ul>
<li>
<a class="nav-link[#if isHome??] active[/#if]" href="${dy}/">首页</a>
</li>
[@ChannelList isNav='true' offset='0'; list]
[#list list as item]
<li>
<a class="nav-link[#if (channel?? && channel.paths[0].id == item.id) || (channelAlias?? && channelAlias == item.alias)] active[/#if]" href="${item.url}"[#if item.targetBlank] target="_blank"[/#if]>${item.name}</a>
</li>
[/#list]
[/@ChannelList]
</ul>
<div class="num">股票代码871771</div>
</nav>
</div>
</header>
[/#escape]

View File

@ -5,7 +5,6 @@
<script src="${files}/vendor/axios/dist/axios.min.js"></script>
<script src="${files}/vendor/js-cookie/dist/js.cookie.min.js"></script>
<script src="${files}/vendor/dayjs/dayjs.min.js"></script>
<script src="${files}/vendor/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="${files}/vendor/jquery-validation/dist/additional-methods.js"></script>
<script src="${files}/vendor/jquery-validation/dist/localization/messages_zh.js"></script>

View File

@ -0,0 +1,34 @@
[#escape x as (x)!?html]
<div class="right_con">
<div class="kefu">
<ul>
<li>
<div class="kf-gy kf-a1">
<img src="${site.logo!'${files}/img/kf-a1.png'}" alt="${site.name}">
</div>
<span>定制方案</span>
</li>
<li>
<div class="kf-gy kf-a1">
<img src="${site.logo!'${files}/img/kf-b1.png'}" alt="${site.name}">
</div>
<span>13303358557 0335-8909696</span>
</li>
<li>
<div class="kf-gy kf-a1">
<img src="${site.logo!'${files}/img/kf-d1.png'}" alt="${site.name}">
</div>
<span>
<img src="${site.logo!'${files}/img/img19.png'}" alt="${site.name}">
<img src="${site.logo!'${files}/img/img20.png'}" alt="${site.name}">
</span>
</li>
<li >
<div class="kf-gy kf-a1">
<img src="${site.logo!'${files}/img/kf-e1.png'}" alt="${site.name}">
</div>
</li>
</ul>
</div>
</div>
[/#escape]

View File

@ -23,69 +23,274 @@
<body>
[#assign headerShadow=true/]
[#include 'inc_header.html'/]
<div class="container mt-4">
<div class="row">
<div class="col col-lg-8">
[@BlockItemList block='focus' limit='5'; beans]
<div id="carouselCaptions" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
[#list beans as bean]
<li data-target="#carouselCaptions" data-slide-to="${bean_index?c}" class="[#if bean_index==0]active[/#if]"></li>
[/#list]
</ol>
<div class="carousel-inner rounded-sm">
[#list beans as bean]
<div class="carousel-item[#if bean_index==0] active[/#if]">
[@A bean=bean class="text-reset text-decoration-none"]
<img src="${bean.image}" class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<p>${bean.title}</p>
</div>
[/@A]
</div>
[/#list]
</div>
<a class="carousel-control-prev" href="#carouselCaptions" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselCaptions" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
<!--banner-->
<div class="index_banner">
[@BlockItemList block='focus' limit='5'; beans]
<div id="carouselCaptions" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
[#list beans as bean]
<li data-target="#carouselCaptions" data-slide-to="${bean_index?c}" class="[#if bean_index==0]active[/#if]"></li>
[/#list]
</ol>
<div class="carousel-inner rounded-sm">
[#list beans as bean]
<div class="carousel-item[#if bean_index==0] active[/#if]">
[@A bean=bean class="text-reset text-decoration-none"]
<img src="${bean.image}" class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<p>${bean.title}</p>
</div>
<script>$('.carousel').carousel();</script>
[/@BlockItemList]
<script>var lastArticleDate = null;</script>
<div class="mt-4 h4">最新文章</div>
[@ArticleList channel='news' isIncludeSubChannel='true' limit=pageSize!10 orderBy='publishDate_desc'; list]
<ul id="articleList" class="list-unstyled mt-4">
[#include 'part_article_items.html'/]
</ul>
[/@ArticleList]
<div class="text-center">
<button id="appendArticlesButton" type="button" class="btn btn-outline-primary btn-sm" onclick="appendArticles()">点击加载更多</button>
[/@A]
</div>
<script>
function appendArticles() {
var $button = $('#appendArticlesButton');
var buttonText = $button.text();
$button.text('加载中...');
axios.get('${dy}/app/articles', {params: {lastArticleDate}}).then(function (response) {
if (response.data) {
$('#articleList').append(response.data);
$button.text(buttonText);
} else {
$button.text('没有更多了').attr('disabled', true);
}
});
}
</script>
[/#list]
</div>
<a class="carousel-control-prev" href="#carouselCaptions" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselCaptions" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
<script>$('.carousel').carousel();</script>
[/@BlockItemList]
<div class="info">
<div class="item">
<p class="num">10+</p>
<p class="text">安全生产业务评价检测资质</p>
<p class="notes">24小时随时匹配覆盖</p>
</div>
<div class="item">
<p class="num">10+</p>
<p class="text">软件著作知识产权</p>
<p class="notes">辨识风险,瞬息到位</p>
</div>
<div class="item">
<p class="num">20000 +</p>
<p class="text">自制研发安全培训课件</p>
<p class="notes">自带考题,完美闭环</p>
</div>
<div class="item">
<p class="num">100000 +</p>
<p class="text">安全评价、职业卫生评价</p>
<p class="notes">检测报告、标准化评审报告</p>
</div>
[#include 'inc_right.html'/]
</div>
</div>
<!-- 新闻中心-->
<div class="news_container">
<div class="title">
<div class="tit">新闻中心</div>
<p>助力提升安全管理效益,满足多行业的安全生产需求</p>
</div>
<div class="new_main">
<div class="new_left">
<div class="item">
<div class="img"> <img src="${site.logo!'${files}/img/img1.png'}" alt="${site.name}"> </div>
<div class="text">
<p class="title">厚积薄发十五载,上市一年更精彩,秦安充满期待,值得信赖!</p>
</div>
</div>
</div>
<div class="new_right">
[@ArticleList channel='news' isIncludeSubChannel='true' limit=4 orderBy='publishDate_desc'; list]
<ul>
[#include 'part_article_items.html'/]
</ul>
[/@ArticleList]
</div>
</div>
</div>
<!-- 核心产品-->
<div class="product_container">
<div class="product_main">
<div class="title">
<div class="tit">核心产品</div>
<p>安全生产数智化管理平台,满足多行业的安全生产需求</p>
</div>
<div class="product_wrap">
<div class="top_container">
<div class="item">基层监管平台</div>
<div class="item">基层监管平台</div>
<div class="item">基层监管平台</div>
<div class="item">基层监管平台</div>
<div class="item">基层监管平台</div>
</div>
<div class="main_container">
<div class="left">
<div class="img">
<img src="${'${files}/img/img5.png'}" alt="${site.name}">
</div>
<div class="title">基层监管平台</div>
<div class="notes">提供企业管理与政府监管的一体化服务平台。</div>
<div class="info">
<div class="list">
<img src="${'${files}/img/img6.png'}" alt="${site.name}">
使用门槛低ChatBI 对话式分析,小白用户通过简单对话就能获取数据和洞察结论
</div>
<div class="list">
<img src="${'${files}/img/img6.png'}" alt="${site.name}">
使用门槛低ChatBI 对话式分析,小白用户通过简单对话就能获取数据和洞察结论
</div>
<div class="list">
<img src="${'${files}/img/img6.png'}" alt="${site.name}">
使用门槛低ChatBI 对话式分析,小白用户通过简单对话就能获取数据和洞察结论
</div>
</div>
</div>
<div class="right">
<img src="${'${files}/img/img7.png'}" alt="${site.name}">
</div>
</div>
</div>
</div>
</div>
<!-- 解决方案-->
<div class="solution">
<div class="solution_container">
<div class="title">
<div class="tit">解决方案</div>
<p>助力提升安全管理效益,满足多行业的安全生产需求</p>
</div>
<div class="solution_main">
<div class="item">
<div class="img">
<img src="${'${files}/img/img8.png'}" alt="${site.name}">
</div>
<div class="title">政府机构</div>
<div class="info">
<div>涉及民用爆破器材的生产、销售、流通及爆破服务的提供等领域</div>
<div class="more">
<img src="${'${files}/img/img15.png'}" alt="${site.name}">
</div>
</div>
</div>
<div class="item">
<div class="img">
<img src="${'${files}/img/img9.png'}" alt="${site.name}">
</div>
<div class="title">民爆</div>
<div class="info">
<div>涉及民用爆破器材的生产、销售、流通及爆破服务的提供等领域</div>
<div class="more"> <img src="${'${files}/img/img15.png'}" alt="${site.name}"></div>
</div>
</div>
<div class="item">
<div class="img"> <img src="${'${files}/img/img10.png'}" alt="${site.name}"> </div>
<div class="title">机械</div>
<div class="info">
<div>涉及民用爆破器材的生产、销售、流通及爆破服务的提供等领域</div>
<div class="more">
<img src="${'${files}/img/img15.png'}" alt="${site.name}">
</div>
</div>
</div>
<div class="item">
<div class="img">
<img src="${'${files}/img/img11.png'}" alt="${site.name}">
</div>
<div class="title">军工</div>
<div class="info">
<div>涉及民用爆破器材的生产、销售、流通及爆破服务的提供等领域</div>
<div class="more">
<img src="${'${files}/img/img15.png'}" alt="${site.name}">
</div>
</div>
</div>
<div class="item">
<div class="img">
<img src="${'${files}/img/img16.png'}" alt="${site.name}">
</div>
<div class="title">水务</div>
<div class="info">
<div>涉及民用爆破器材的生产、销售、流通及爆破服务的提供等领域</div>
<div class="more"> <img src="${'${files}/img/img15.png'}" alt="${site.name}"></div>
</div>
</div>
<div class="item">
<div class="img"> <img src="${'${files}/img/img12.png'}" alt="${site.name}"></div>
<div class="title">农牧</div>
<div class="info">
<div>涉及民用爆破器材的生产、销售、流通及爆破服务的提供等领域</div>
<div class="more"> <img src="${'${files}/img/img15.png'}" alt="${site.name}"></div>
</div>
</div>
<div class="item">
<div class="img"> <img src="${'${files}/img/img13.png'}" alt="${site.name}"></div>
<div class="title">风电</div>
<div class="info">
<div>涉及民用爆破器材的生产、销售、流通及爆破服务的提供等领域</div>
<div class="more"> <img src="${'${files}/img/img15.png'}" alt="${site.name}"></div>
</div>
</div>
<div class="item">
<div class="img"> <img src="${'${files}/img/img14.png'}" alt="${site.name}"></div>
<div class="title">其他</div>
<div class="info">
<div>涉及民用爆破器材的生产、销售、流通及爆破服务的提供等领域</div>
<div class="more"> <img src="${'${files}/img/img15.png'}" alt="${site.name}"></div>
</div>
</div>
</div>
</div>
</div>
<!--客户案例-->
<div class="case">
<div class="case_container">
<div class="title">
<div class="tit">客户案例</div>
<p>助力提升安全管理效益,满足多行业的安全生产需求</p>
</div>
<div class="case_main">
<div class="item">
<div class="img"></div>
<div class="info">
<div class="title">秦皇岛港股份有限公司</div>
<div class="text">把危险化学品安全摆在防范化解重大风险的突出位置,推进新一代信息技术和危险化学品安全生产深度融合,实现数字化转型...</div>
<div class="details">了解详情 ></div>
</div>
</div>
<div class="item">
<div class="img"></div>
<div class="info">
<div class="title">秦皇岛港股份有限公司</div>
<div class="text">把危险化学品安全摆在防范化解重大风险的突出位置,推进新一代信息技术和危险化学品安全生产深度融合,实现数字化转型...</div>
<div class="details">了解详情 ></div>
</div>
</div>
<div class="item">
<div class="img"></div>
<div class="info">
<div class="title">秦皇岛港股份有限公司</div>
<div class="text">把危险化学品安全摆在防范化解重大风险的突出位置,推进新一代信息技术和危险化学品安全生产深度融合,实现数字化转型...</div>
<div class="details">了解详情 ></div>
</div>
</div>
</div>
</div>
<div class="case_img">
<img src="${'${files}/img/img18.png'}" alt="${site.name}">
</div>
</div>
[#include 'inc_right1.html'/]
[#include 'inc_footer.html'/]
[#include 'inc_message_box.html'/]
</body>

View File

@ -1,21 +1,29 @@
[#escape x as (x)!?html]
[#list list as bean]
<li class="mt-3 media border-bottom position-relative pb-3">
[#if bean.image??][@A bean=bean class="mr-3"]<img src="${bean.image}" class="rounded-sm cm-media-img" alt="${bean.title}">[/@A][/#if]
<div class="media-body">
<p class="mt-0 mb-1">[@A bean=bean class="cm-link text-decoration-none"/]</p>
<p class="text-muted d-none d-sm-block mb-2">
<li class="item">
<div class="img">
[#if bean.image??][@A bean=bean class="mr-3"]
<img src="${bean.image}" alt="${bean.title}" width="160px">
[/@A][/#if]
</div>
<div class=" info">
<p class="title">[@A bean=bean class="cm-link text-decoration-none"/]</p>
<p class="text-muted ">
[@A bean=bean class="text-reset small text-decoration-none"]${substring(bean.description,60,'...')}[/@A]
</p>
<div class="small text-muted mt-2 mt-xl-3 clearfix">
<div class="small text-muted mt-xl-3 clearfix">
<div class="float-left">
<span>[#list bean.channel.paths as c][@A bean=c/][#if c_has_next] > [/#if][/#list]</span>
<i class="ml-2 far fa-eye"></i> ${bean.views}
</div>
<div class="float-right"><i class="ml-2 far fa-clock"></i> ${format(bean.publishDate, 'yyyy-MM-dd')}</div>
</div>
</div>
</li>
[#if !bean_has_next]
<script>lastArticleDate = '${bean.publishDate.format()}'</script>
[/#if]

View File

@ -148,7 +148,7 @@
.carousel-indicators {
position: absolute;
right: 0;
bottom: 0;
bottom: 100px;
left: 0;
z-index: 15;
display: flex;