DSDSWeb/src/views/home.vue

1266 lines
34 KiB
Vue
Raw Normal View History

2024-07-11 18:02:47 +08:00
<template>
<div class="index">
<div class="banner">
<img src="../../static/images/banner_index.jpg" alt="">
<div class="banner_con">
<div class="banner_top">
<p>
面向数据样品贡献方需求构建用户体验良好的数据样品目录信息平台
</p>
<p>
提供便捷安全的数据录入统计分析和可视化检索工具服务数据样品贡献者资助机构和管理机构
</p>
</div>
<div class="banner_bot">
<div class="bot_left">
<div class="left1">
<p>建立深海所海洋地球科学数据样品信息目录</p>
</div>
<div class="left2">
<div class="left2_1">
2024-09-13 13:59:25 +08:00
<p>{{ statistics.DataTotal }}</p>
2024-07-11 18:02:47 +08:00
<span>数据样品数</span>
</div>
<div class="left2_1">
2024-09-13 13:59:25 +08:00
<p>{{ statistics.DatasetTotal }}</p>
2024-07-11 18:02:47 +08:00
<span>数据集个数</span>
</div>
</div>
</div>
<div class="bot_right">
<div class="right1">
<p>依托两器两船等各类海洋科考平台设备开展航次科考</p>
</div>
<div class="right2">
<div class="right2_1">
2024-09-13 13:59:25 +08:00
<p>{{ statistics.VoyageTotal }}</p>
2024-07-11 18:02:47 +08:00
<span>航次个数</span>
</div>
<div class="right2_1">
2024-09-13 13:59:25 +08:00
<p>{{ statistics.DayTotal }}</p>
2024-07-11 18:02:47 +08:00
<span>航次天数</span>
</div>
<div class="right2_1">
2024-09-13 13:59:25 +08:00
<p>{{ statistics.ShenHaiTotal }}</p>
2024-07-11 18:02:47 +08:00
<span>深海勇士号潜次数</span>
</div>
<div class="right2_1">
2024-09-13 13:59:25 +08:00
<p>{{ statistics.FenDouTotal }}</p>
2024-07-11 18:02:47 +08:00
<span>奋斗者号潜次数</span>
</div>
<div class="right2_1">
2024-09-13 13:59:25 +08:00
<p>{{ statistics.MileageTotal }}</p>
2024-07-11 18:02:47 +08:00
<span>航行里程</span>
</div>
</div>
</div>
</div>
</div>
</div>
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
<div class="guiji">
<div class="guiji_1">
<img src="../../static/images/guiji.png" alt="">
</div>
<div class="guiji_2">
2026-04-02 18:05:51 +08:00
<div id="homeMap" ref="homeMap" onmouseleave="document.getElementById('mouseWheelTip').style.display = 'none'"
onmouseenter="document.getElementById('mouseWheelTip').style.display = ''" style="height: 100%;width:100%;">
2024-07-11 18:02:47 +08:00
<div class="son" style="display: none;">弹框插槽</div>
<div id="mouseWheelTip" style="display: none;">地图缩放按下 Ctrl + 鼠标滚轮</div>
<el-popover placement="left-start" title="航次列表" width="300" trigger="hover">
<div class="contour-line">
<span>等深线</span>
<el-button size="mini" v-for="depth in depthOptions" :key="depth"
:type="selectedDepths.includes(depth) ? 'primary' : ''" @click="toggleDepth(depth)">
{{ depth }}
</el-button>
</div>
<el-table ref="multipleTable" :data="voyageList" @selection-change="handleSelectionChange"
@row-click="handleRowClick" highlight-current-row :current-row-key="currentVoyage">
<el-table-column type="selection" width="50" />
<el-table-column property="voyage_name" label="航次" />
</el-table>
<div class="right-top" slot="reference">
<img class="boat" src="../../static/images/boat_icon.png" alt="">
</div>
</el-popover>
2024-07-11 18:02:47 +08:00
</div>
</div>
</div>
2025-04-23 13:48:08 +08:00
<div class="bg-box"></div>
2024-09-13 13:59:25 +08:00
2024-07-11 18:02:47 +08:00
<div class="dongtai">
<el-row>
<el-col :span="12">
<div class="dongtai_top">
<img src="../../static/images/shuju3.png" alt="">
</div>
</el-col>
<el-col :span="12">
<div class="dongtai_top">
<img src="../../static/images/shuju4.png" alt="">
</div>
</el-col>
</el-row>
<div class="dongtai_bot">
<ul>
2024-09-13 13:59:25 +08:00
<li v-for="(item, index) in dataUpdateList" :key="index" @click="turnDetailPage(item)">
2024-07-11 18:02:47 +08:00
<div class="date">
<p>{{ item.voyage_end_date.slice(8, 10) }}</p>
<span class="text-ellipsis--3-lines">{{ item.voyage_end_date.slice(0, 7) }}</span>
2024-07-11 18:02:47 +08:00
</div>
<div class="des">
2024-09-13 13:59:25 +08:00
<p>{{ item.voyage_name }}</p>
<span class="text-ellipsis--3-lines">{{ item.voyage_remark }}</span>
2024-09-13 13:59:25 +08:00
</div>
</li>
</ul>
<ul>
<li v-for="(item, index) in sampleDataUpdateList" :key="index">
<div class="date">
<p>{{ item.create_time.slice(8, 10) }}</p>
<span class="text-ellipsis--3-lines">{{ item.create_time.slice(0, 7) }}</span>
2024-09-13 13:59:25 +08:00
</div>
<div class="des">
<p>{{ item.dataset_name }}</p>
<span class="text-ellipsis--3-lines">{{ item.job_type }}</span>
2024-07-11 18:02:47 +08:00
</div>
</li>
</ul>
</div>
</div>
2024-09-13 13:59:25 +08:00
2025-04-23 13:48:08 +08:00
<div class="shuju" style="padding-bottom: 1px;">
<!-- <div class="shuju1">-->
<!-- <div class="shuju1_top">-->
<!-- <img src="../../static/images/shuju.png" alt="">-->
<!-- </div>-->
<!-- <div class="shuju1_con">-->
<!-- <ul>-->
<!-- <li @click="turnPage('physicalIndex')">-->
<!-- <img src="../../static/images/diqiu.png" alt="">-->
<!-- <p>海洋地球物理与物理海洋</p>-->
<!-- <p class="sourceData">数据集<span>-</span> &nbsp;&nbsp;&nbsp;体量<span>-</span> GB</p>-->
<!-- </li>-->
<!-- <li @click="turnPage('biologyIndex')">-->
<!-- <img src="../../static/images/yangpin.png" alt="">-->
<!-- <p>海洋生物样品信息待开发</p>-->
<!-- <p class="sourceData">数据集<span>-</span> &nbsp;&nbsp;&nbsp;体量<span>-</span> GB</p>-->
<!-- </li>-->
<!-- <li>-->
<!-- <img src="../../static/images/dizhi.png" alt="">-->
<!-- <p>海洋地质与地球化学待开发</p>-->
<!-- <p class="sourceData">数据集<span>-</span> &nbsp;&nbsp;&nbsp;体量<span>-</span> GB</p>-->
<!-- </li>-->
<!-- <li>-->
<!-- <img src="../../static/images/dongwu.png" alt="">-->
<!-- <p>哺乳动物与海洋声学待开发</p>-->
<!-- <p class="sourceData">数据集<span>-</span> &nbsp;&nbsp;&nbsp;体量<span>-</span> GB</p>-->
<!-- </li>-->
<!-- <li @click="turnPage('phoneVideoIndex')">-->
<!-- <img src="../../static/images/shipin.png" alt="">-->
<!-- <p>深海视频音像图元待开发</p>-->
<!-- <p class="sourceData">数据集<span>-</span> &nbsp;&nbsp;&nbsp;体量<span>-</span> GB</p>-->
<!-- </li>-->
<!-- </ul>-->
<!-- </div>-->
<!-- </div>-->
<div class="shuju2">
<div class="shuju2_top cursor" @click="turnPage('physicalDataSearchCTD')">
<img src="../../static/images/shuju1.png" alt="">
</div>
<div class="shuju2_con">
<div class="swiper-visualization wow fadeInUp">
<div class="swiper-visualization-box">
<swiper ref="visualizationSwiper" :options="swiperOptions">
<swiper-slide v-for="(item, index) in visualizationList" :key="index">
<div class="pic">
<img :src="item.pic" alt="">
</div>
<div class="txt">
<p>0{{ index + 1 }}</p>
<div class="txt1">
<p>{{ item.title }}</p>
<span>{{ item.des }}</span>
</div>
</div>
<div class="mask" />
</swiper-slide>
</swiper>
<div class="swiper-arrow swiper-prev" />
<div class="swiper-arrow swiper-next" />
</div>
</div>
</div>
2024-07-11 18:02:47 +08:00
</div>
</div>
2024-08-26 17:13:38 +08:00
<!-- <div class="gongju">-->
<!-- <div class="gongju_top">-->
<!-- <img src="../../static/images/shuju5.png" alt="">-->
<!-- </div>-->
<!-- <div class="gongju_con">-->
<!-- <ul>-->
<!-- <li @click="turnPage('http://10.0.82.239/analysisTools/index', 'url')">-->
<!-- <img src="../../static/images/mofang.png" alt="">-->
<!-- <p>blast基因分析工具</p>-->
<!-- </li>-->
<!-- <li @click="turnPage('http://10.0.82.239/analysisTools/index', 'url')">-->
<!-- <img src="../../static/images/mofang.png" alt="">-->
<!-- <p>温盐深分析工具</p>-->
<!-- </li>-->
<!-- <li @click="turnPage('http://10.0.82.239/analysisTools/index', 'url')">-->
<!-- <img src="../../static/images/mofang.png" alt="">-->
<!-- <p>影像数据物种智能识别</p>-->
<!-- </li>-->
<!-- <li @click="turnPage('http://10.0.82.239/analysisTools/index', 'url')">-->
<!-- <img src="../../static/images/mofang.png" alt="">-->
<!-- <p>海洋物理生态耦合模式分析</p>-->
<!-- </li>-->
<!-- </ul>-->
<!-- </div>-->
<!-- </div>-->
2025-04-23 13:48:08 +08:00
2024-08-26 17:13:38 +08:00
<Footer />
2024-07-11 18:02:47 +08:00
</div>
</template>
<script>
import Vue from 'vue'
2024-08-26 17:13:38 +08:00
import Footer from '../components/public/Footer'
import { getVoyage, statisticsNums } from '../api/home'
2024-07-11 18:02:47 +08:00
import { swiper, swiperSlide } from 'vue-awesome-swiper'
import 'swiper/swiper-bundle.css'
2024-09-13 13:59:25 +08:00
import { sampleDatasetList, voyageRegList } from '@/api/dataTransfer'
import { loadVectorLayer } from '@/utils/vector-layer-utils'
import { ColorGenerator } from '@/utils/color-generator';
2026-04-02 18:05:51 +08:00
import { initMapbox, handleWheel, initSprites, triggerLayerClick } from "@/utils/mapbox-utils";
2024-07-11 18:02:47 +08:00
export default {
name: 'Index',
components: {
swiper,
2024-08-26 17:13:38 +08:00
swiperSlide,
Footer
2024-07-11 18:02:47 +08:00
},
data() {
return {
2024-09-13 13:59:25 +08:00
statistics: {},
2024-07-13 11:32:22 +08:00
movementTimer: null,
iconImgW: require('../../static/images/14-w.png'),
2024-07-11 18:02:47 +08:00
map: null,
visualizationList: [
{
pic: require('../../static/images/shuju2_bg2.png'),
title: '专业数据分析',
2025-04-23 13:48:08 +08:00
des: '载人深潜温盐深数据',
routerName: ''
2024-07-11 18:02:47 +08:00
},
{
pic: require('../../static/images/shuju2_bg.png'),
title: '服务资助航次',
2025-04-23 13:48:08 +08:00
des: '深海技术创新中心共享航次',
routerName: ''
2024-07-11 18:02:47 +08:00
},
{
pic: require('../../static/images/shuju2_bg3.png'),
2025-10-31 16:15:28 +08:00
title: '构建应急搜寻处置快速响应能力',
2025-04-23 13:48:08 +08:00
des: '应急搜捞应用',
routerName: 'SalvageHome'
2024-07-11 18:02:47 +08:00
}
],
swiperOptions: {
loop: true,
loopAdditionalSlides: 3,
initialSlide: 1,
spaceBetween: 35,
navigation: {
nextEl: '.swiper-visualization .swiper-next',
prevEl: '.swiper-visualization .swiper-prev'
},
breakpoints: {
768: {
spaceBetween: 10
}
}
},
voyageList: [], // 航次列表数据
currentVoyage: null, // 当前选中的航次名称
highlightLayer: null, // 存储当前高亮图层实例
2024-09-13 13:59:25 +08:00
dataUpdateList: [],
sampleDataUpdateList: [],
multipleSelection: [], // 当前选中的航次数组
trackLayerMap: {}, // 存储每个航次对应的轨迹图层实例 { voyage_name: layerInstance }
depthOptions: [4500, 6000], // 可扩展更多深度值
selectedDepths: [], // 存储当前选中的深度值
contourLayerMap: {}, // 改为对象形式以深度值作为key存储对应的图层实例
2024-07-11 18:02:47 +08:00
}
},
computed: {
swiper() {
return this.$refs.visualizationSwiper.swiper
}
},
2024-07-13 11:32:22 +08:00
created() {
this.getVoyageList()
2024-09-13 13:59:25 +08:00
this.getStatisticsNums()
this.dataUpdate()
this.sampleDataUpdate()
2024-07-13 11:32:22 +08:00
},
2024-07-11 18:02:47 +08:00
mounted() {
2026-04-02 18:05:51 +08:00
initMapbox("homeMap", {
tileKey: "World_Imagery",
2026-04-03 11:10:58 +08:00
zoom: 1.5,
2026-04-02 18:05:51 +08:00
center: [122, 15],
2026-04-03 11:10:58 +08:00
minZoom: 1,
2026-04-02 18:05:51 +08:00
maxZoom: 29,
coastlineOn: false,
contourOn: false
});
Vue.config.maps["homeMap"].on('load', () => {
handleWheel("homeMap");
Vue.config.maps["homeMap"].scrollZoom.disable();
// 加载海岸线
// loadVectorLayer("GSHHS_f_L1", ["line"], ["#FEFEFE"], "homeMap", 'ougp');
// 加载等深线(默认不显示)
loadVectorLayer("contour-4500m", ["line"], ["#FEFEFE"], "none", "homeMap", 'ougp');
loadVectorLayer("contour-6000m", ["line"], ["#FEFEFE"], "none", "homeMap", 'ougp');
});
2024-07-11 18:02:47 +08:00
},
methods: {
2024-07-13 11:32:22 +08:00
// 查询航次列表
getVoyageList() {
getVoyage({
start: 0,
limit: 10
}).then(res => {
this.voyageList = res.page.records;
let i = 0;
const colors = ColorGenerator.generateDivergingColors(this.voyageList.length);
this.voyageList.forEach(element => {
// 加载轨迹图层
2026-04-02 18:05:51 +08:00
loadVectorLayer(element.voyage_name, ["line", "symbol"], [colors[i], colors[i]], "visible", "homeMap", "dsds");
i++;
});
this.$nextTick(() => {
// 默认全选当前页
this.$refs.multipleTable.toggleAllSelection()
})
2024-07-13 11:32:22 +08:00
})
2024-07-11 18:02:47 +08:00
},
// 行点击事件处理
handleRowClick(row, column, event) {
// 原高亮逻辑改为图层显示/隐藏控制
2026-04-02 18:05:51 +08:00
let visibility = Vue.config.maps["homeMap"].getLayoutProperty(`vector-${row.voyage_name}-symbol`, "visibility");
visibility = visibility == "visible" ? "none" : "visible";
2026-04-02 18:05:51 +08:00
Vue.config.maps["homeMap"].setLayoutProperty(`vector-${row.voyage_name}-symbol`, "visibility", visibility);
Vue.config.maps["homeMap"].setLayoutProperty(`vector-${row.voyage_name}-line`, "visibility", visibility);
this.$refs.multipleTable.toggleRowSelection(row);
},
// 处理表格选择项变化
handleSelectionChange(val) {
// 获取新旧选中的航次名称数组
const newVoyages = val.map(item => item.voyage_name);
const oldVoyages = this.multipleSelection.map(item => item.voyage_name);
// 找出需要新增的航次(在新数组不在旧数组)
const voyagesToAdd = newVoyages.filter(voyage => !oldVoyages.includes(voyage));
// 找出需要移除的航次(在旧数组不在新数组)
const voyagesToRemove = oldVoyages.filter(voyage => !newVoyages.includes(voyage));
// 移除不再需要的轨迹图层
voyagesToRemove.forEach(voyage => {
2026-04-02 18:05:51 +08:00
Vue.config.maps["homeMap"].setLayoutProperty(`vector-${voyage}-symbol`, "visibility", "none");
Vue.config.maps["homeMap"].setLayoutProperty(`vector-${voyage}-line`, "visibility", "none");
});
// 添加新选择的轨迹图层
voyagesToAdd.forEach(voyage => {
// 从val中找出对应航次的完整数据项
const correspondingItem = val.find(item => item.voyage_name === voyage);
if (correspondingItem) {
2026-04-02 18:05:51 +08:00
Vue.config.maps["homeMap"].setLayoutProperty(`vector-${voyage}-symbol`, "visibility", "visible");
Vue.config.maps["homeMap"].setLayoutProperty(`vector-${voyage}-line`, "visibility", "visible");
2025-09-08 23:17:11 +08:00
}
});
// 更新当前选中项
this.multipleSelection = val;
2024-07-13 11:32:22 +08:00
},
toggleDepth(depth) {
// **方案1: 如果要求同时只能有一个按钮被选中**
// this.selectedDepths = [depth]; // 数组只保留当前点击的深度
// **方案2: 允许同时多个按钮被选中,点击切换自身状态**
const index = this.selectedDepths.indexOf(depth);
if (index > -1) {
this.selectedDepths.splice(index, 1); // 如果已选中,则移除
2026-04-02 18:05:51 +08:00
Vue.config.maps["homeMap"].setLayoutProperty(`vector-contour-${depth}m-line`, "visibility", "none");
} else {
this.selectedDepths.push(depth); // 如果未选中,则添加
2026-04-02 18:05:51 +08:00
Vue.config.maps["homeMap"].setLayoutProperty(`vector-contour-${depth}m-line`, "visibility", "visible");
}
},
2024-09-13 13:59:25 +08:00
// 统计数据
getStatisticsNums() {
statisticsNums().then(res => {
this.statistics = res.map
})
},
// 数据更新动态
dataUpdate() {
voyageRegList({
start: 0,
limit: 3,
group: 10,
order: 'voyage_end_date',
type: 'DESC'
}).then(res => {
this.dataUpdateList = res.page.records
})
2024-08-26 17:13:38 +08:00
},
2024-09-13 13:59:25 +08:00
// 跳转到航次详情页
turnDetailPage(item) {
this.$router.push({
name: 'dataDetail',
query: {
voyage_name: item.voyage_name
}
})
},
// 样品数据引用动态
sampleDataUpdate() {
sampleDatasetList({
start: 0,
limit: 3,
group: 10,
}).then(res => {
console.log(res)
this.sampleDataUpdateList = res.page.records
})
2025-04-23 13:48:08 +08:00
},
2024-07-11 18:02:47 +08:00
}
}
</script>
<style scoped lang="scss">
.index {
width: 100%;
height: 100%;
background: #ecf2f4;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.banner {
width: 100%;
height: 700px;
position: relative;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
img {
width: 100%;
height: 100%;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.banner_con {
position: absolute;
left: 0;
top: 35%;
z-index: 999;
width: 100%;
height: auto;
display: flex;
flex-direction: column;
align-items: center;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.banner_top {
margin-bottom: 6%;
width: 80%;
height: auto;
display: flex;
flex-direction: column;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
p {
font-size: 21px;
color: #fff;
line-height: 36px;
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.banner_bot {
width: 80%;
height: 150px;
border-radius: 10px;
background: rgba($color: #fff, $alpha: 0.3);
box-sizing: border-box;
padding: 25px;
display: flex;
align-items: center;
justify-content: space-between;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.bot_left {
width: 35%;
height: 100%;
display: flex;
flex-direction: column;
border-right: 1px solid rgba($color: #fff, $alpha: 0.3);
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.left1 {
width: 100%;
height: 100%;
text-align: center;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
p {
font-size: 16px;
color: #fff;
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.left2 {
width: 100%;
height: auto;
display: flex;
align-items: center;
justify-content: center;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.left2_1 {
display: flex;
flex-direction: column;
align-items: center;
width: 40%;
height: auto;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
p {
font-size: 34px;
color: #fff;
font-weight: bold;
line-height: 40px;
font-family: DIN-Bold;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
span {
margin-top: 8px;
font-size: 14px;
color: #fff;
}
}
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.bot_right {
width: 62%;
height: 100%;
display: flex;
align-items: center;
flex-direction: column;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.right1 {
width: 100%;
height: 100%;
text-align: center;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
p {
font-size: 16px;
color: #fff;
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.right2 {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: space-around;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.right2_1 {
width: 20%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
p {
font-size: 34px;
color: #fff;
font-weight: bold;
line-height: 40px;
font-family: DIN-Bold;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
span {
margin-top: 8px;
font-size: 14px;
color: #fff;
}
}
}
}
}
}
}
.guiji {
width: 100%;
height: auto;
margin: 50px 0;
2024-07-11 18:02:47 +08:00
margin-bottom: 0;
display: flex;
flex-direction: column;
align-items: center;
2024-08-26 17:13:38 +08:00
position: relative;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.guiji_1 {
margin-bottom: 20px;
width: 100%;
height: auto;
display: flex;
align-items: center;
justify-content: center;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
img {
width: auto;
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.guiji_2 {
position: relative;
width: 100%;
height: 800px;
display: flex;
/* 导航列表居中显示 */
justify-content: center;
align-items: center;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.daohang {
position: absolute;
top: 20px;
max-width: 50%;
2024-07-11 18:02:47 +08:00
height: 60px;
background: rgba($color: #000, $alpha: 0.7);
border-radius: 10px;
z-index: 8888;
overflow: hidden;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
ul {
width: 100%;
height: 60px;
box-sizing: border-box;
padding-left: 15px;
display: flex;
align-items: center;
overflow: auto;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
&::-webkit-scrollbar {
width: 8px;
height: 8px;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
/* 滚动槽 */
&::-webkit-scrollbar-track {
-webkit-box-shadow: inset006pxrgba(0, 0, 0, 0.3);
border-radius: 10px;
background: #010e32;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
/* 滚动条滑块 */
&::-webkit-scrollbar-thumb {
border-radius: 10px;
/* background:rgba(0,0,0,0.3); */
background: #203e86;
-webkit-box-shadow: inset006pxrgba(0, 0, 0, 0.5);
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
li {
// margin-right: 20px;
width: 120px;
height: 50px;
white-space: nowrap;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
&.active {
a {
background: #0a84c1;
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
a {
display: block;
line-height: 40px;
margin-top: 5px;
height: 40px;
font-size: 15px;
color: #fff;
padding: 0 15px;
border-radius: 5px;
2025-09-08 09:38:12 +08:00
cursor: pointer;
2024-07-11 18:02:47 +08:00
}
}
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
img {
width: 100%;
height: 100%;
}
}
2024-08-26 17:13:38 +08:00
.cover {
width: 100%;
height: 800px;
position: absolute;
top: 0;
left: 0;
z-index: 3000;
background-color: pink;
}
2024-07-11 18:02:47 +08:00
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.shuju {
padding-bottom: 170px;
padding-top: 70px;
width: 100%;
height: auto;
background: url(../../static/images/secBg.jpg) center no-repeat;
background-size: 100% 100%;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.shuju1 {
width: 100%;
height: auto;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
margin-bottom: 70px;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.shuju1_top {
margin-bottom: 50px;
width: 100%;
height: auto;
display: flex;
align-items: center;
justify-content: center;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
img {
width: auto;
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.shuju1_con {
width: 85%;
height: 390px;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
ul {
width: 100%;
height: 390px;
display: flex;
align-items: center;
justify-content: space-between;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
li {
position: relative;
width: 18%;
height: 340px;
border-radius: 10px;
overflow: hidden;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.35s;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
&::after {
display: none;
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba($color: #0a84c1, $alpha: 0.5);
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
&:hover {
height: 390px;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
&::after {
display: block;
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
&:first-child {
background: url(../../static/images/diqiu_bg.png) center no-repeat;
background-size: cover;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
&:nth-child(2) {
background: url(../../static/images/diqiu_bg1.png) center no-repeat;
background-size: cover;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
&:nth-child(3) {
background: url(../../static/images/dizhi_bg.png) center no-repeat;
background-size: cover;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
&:nth-child(4) {
background: url(../../static/images/dongwu_bg.png) center no-repeat;
background-size: cover;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
&:nth-child(5) {
background: url(../../static/images/shipin_bg.png) center no-repeat;
background-size: cover;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
img {
position: relative;
z-index: 99;
width: auto;
height: auto;
margin-bottom: 15px;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
p {
position: relative;
z-index: 99;
width: 70%;
font-size: 20px;
color: #fff;
text-align: center;
}
2024-07-13 11:32:22 +08:00
.sourceData {
padding-top: 55px;
2024-07-11 18:02:47 +08:00
width: 96%;
font-size: 14px;
color: #fff;
}
}
}
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.shuju2 {
width: 100%;
height: auto;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
margin-bottom: 70px;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.shuju2_top {
margin-bottom: 50px;
width: 100%;
height: auto;
display: flex;
align-items: center;
justify-content: center;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
img {
width: auto;
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.shuju2_con {
width: 100%;
height: auto;
position: relative;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.swiper-visualization {
overflow: hidden;
padding: 40px 0;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.swiper-visualization-box {
position: relative;
width: 883px;
margin: 0 auto;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.swiper-arrow {
position: absolute;
width: 62px;
height: 62px;
top: 224px;
background-repeat: no-repeat;
// border: 2px solid #ffffff;
background-position: center;
z-index: 2;
cursor: pointer;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.swiper-prev {
left: -50px;
background-image: url(../../static/images/arrow-left.png);
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.swiper-next {
right: -50px;
background-image: url(../../static/images/arrow-right.png);
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.swiper-container {
overflow: visible;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.swiper-slide {
position: relative;
opacity: 0.6;
transform: scale(0.9);
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.pic {
display: block;
position: relative;
padding-top: 55.28%;
border: 2px solid #ffffff;
box-shadow: 0px 0px 40px 0px rgba(0, 0, 0, 0.22);
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
img {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.txt {
position: absolute;
top: 5%;
left: 5%;
z-index: 10;
font-weight: bold;
display: flex;
flex-direction: column;
justify-content: center;
align-items: baseline;
font-size: 22px;
padding: 52px 0 40px;
opacity: 0.3;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
p {
font-size: 60px;
color: #fff;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.txt1 {
margin-top: 50px;
display: flex;
flex-direction: column;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
p {
font-size: 36px;
color: #fff;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
span {
font-size: 28px;
color: #fff;
}
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.mask {
position: absolute;
width: 1083px;
height: 186px;
bottom: -40px;
left: -109px;
right: 0;
// background: url(~@/assets/images/daoying.png) no-repeat center /
// cover;
// opacity: 0;
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.swiper-slide-active {
opacity: 1;
transform: scale(1);
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.txt,
.mask {
opacity: 1;
}
}
}
}
}
}
}
}
2025-04-23 13:48:08 +08:00
.bg-box {
margin-top: -450px;
background: url(../../static/images/secBg.jpg) center no-repeat;
background-size: 100% 100%;
height: 700px;
}
2024-07-11 18:02:47 +08:00
.dongtai {
margin-top: -180px;
width: 100%;
height: auto;
display: flex;
flex-direction: column;
align-items: center;
2025-04-23 13:48:08 +08:00
//background-color: #ccc;
2024-07-13 11:32:22 +08:00
.el-row {
width: 92%;
2024-07-11 18:02:47 +08:00
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.dongtai_top {
width: 100%;
height: auto;
margin-bottom: 50px;
display: flex;
align-items: center;
justify-content: center;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
img {
width: auto;
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.dongtai_bot {
width: 85%;
height: auto;
2024-09-13 13:59:25 +08:00
display: flex;
justify-content: space-between;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
ul {
2024-09-13 13:59:25 +08:00
width: 45%;
2024-07-11 18:02:47 +08:00
height: auto;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
li {
margin-bottom: 35px;
2024-09-13 13:59:25 +08:00
width: 100%;
2024-07-11 18:02:47 +08:00
height: 170px;
background: #fff;
border-radius: 10px;
box-sizing: border-box;
padding: 25px;
display: flex;
align-items: center;
box-shadow: 0 0 5px #ccc;
cursor: pointer;
transition: all 0.35s;
&:hover {
box-shadow: 0 10px 15px #ccc;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.date {
background: #13a1f0;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
p {
color: #fff;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
span {
color: #fff;
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.des {
p {
color: #13a1f0;
}
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.date {
margin-right: 30px;
width: 100px;
height: 100px;
border-radius: 10px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
background: #ebeff5;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
p {
font-size: 32px;
color: #02203c;
line-height: 35px;
font-family: DIN-Bold;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
span {
color: #02203c;
font-size: 16px;
font-family: DIN-Bold;
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.des {
width: 85%;
height: 100px;
display: flex;
flex-direction: column;
align-items: baseline;
justify-content: space-between;
p {
font-size: 18px;
color: #212121;
font-weight: bold;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
span {
font-size: 14px;
color: #999;
}
}
}
}
}
}
.gongju {
margin-top: 60px;
margin-bottom: 70px;
height: auto;
width: 100%;
display: flex;
flex-direction: column;
align-items: center;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.gongju_top {
margin-bottom: 30px;
width: 100%;
height: auto;
display: flex;
align-items: center;
justify-content: center;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
img {
width: auto;
}
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
.gongju_con {
width: 85%;
height: 240px;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
ul {
width: 100%;
height: 240px;
display: flex;
align-items: center;
justify-content: space-between;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
li {
cursor: pointer;
width: 23%;
height: 240px;
border-radius: 5px;
background: url(../../static/images/sanBg.png) center no-repeat;
background-size: 100% 100%;
overflow: hidden;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
img {
2025-11-24 17:25:45 +08:00
width: auto;
height: auto;
2024-07-11 18:02:47 +08:00
display: block;
margin-bottom: 20px;
}
2024-07-13 11:32:22 +08:00
2024-07-11 18:02:47 +08:00
p {
font-size: 18px;
color: #fff;
}
}
}
}
}
}
</style>
<style>
.BMap_cpyCtrl {
display: none;
}
2024-07-13 11:32:22 +08:00
.son {
position: absolute;
left: 1450px;
top: 418px;
background-color: #062f59c7;
color: rgb(253, 253, 253);
border-radius: 10px;
padding: 20px;
border: 1px solid #7ba9cacf;
font-size: 12px;
z-index: 1000;
}
#mouseWheelTip {
position: absolute;
left: 5px;
bottom: 5px;
z-index: 100;
color: #fff;
}
2024-07-13 11:32:22 +08:00
#map {
position: relative;
}
2025-09-08 19:29:49 +08:00
.right-top {
width: 30px;
height: 30px;
position: absolute;
right: 20px;
top: 20px;
z-index: 1000;
background-color: rgba(0, 0, 0, 0.7);
border-radius: 50%;
cursor: pointer;
padding: 8px;
}
.boat {
border-radius: 50%;
}
.text-ellipsis--3-lines {
2025-09-08 19:29:49 +08:00
/* 限制显示的行数 */
-webkit-line-clamp: 3;
2025-09-08 19:29:49 +08:00
/* 将对象作为弹性伸缩盒子模型显示(必要) */
display: -webkit-box;
/* 设置或检索伸缩盒对象的子元素的排列方式为垂直(必要) */
-webkit-box-orient: vertical;
/* 隐藏超出容器的内容 */
overflow: hidden;
/* 文本溢出时显示省略号 */
text-overflow: ellipsis;
}
/* 增强当前行高亮效果 */
.el-table__body tr.current-row>td {
background-color: #ecf5ff !important;
color: #409eff;
}
/* 鼠标悬停效果 */
.el-table__body tr:hover>td {
background-color: #f5f7fa !important;
cursor: pointer;
}
2024-07-11 18:02:47 +08:00
</style>