|
@@ -8,25 +8,25 @@
|
|
|
</div>
|
|
</div>
|
|
|
<div class="event-list">
|
|
<div class="event-list">
|
|
|
<div
|
|
<div
|
|
|
- v-for="(event, index) in events"
|
|
|
|
|
|
|
+ v-for="(period, index) in periods"
|
|
|
:key="index"
|
|
:key="index"
|
|
|
class="event-item"
|
|
class="event-item"
|
|
|
:class="{ active: selectedIndex === index }"
|
|
:class="{ active: selectedIndex === index }"
|
|
|
@click="selectEvent(index)"
|
|
@click="selectEvent(index)"
|
|
|
>
|
|
>
|
|
|
- <div class="event-year">{{ event.year }}</div>
|
|
|
|
|
- <div class="event-title">{{ event.title }}</div>
|
|
|
|
|
|
|
+ <div class="event-year">{{ period.year }}</div>
|
|
|
|
|
+ <div class="event-title">{{ period.title }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="event-detail">
|
|
<div class="event-detail">
|
|
|
<div class="detail-header">
|
|
<div class="detail-header">
|
|
|
- <div class="detail-year">{{ currentEvent.year }}</div>
|
|
|
|
|
- <div class="detail-title">{{ currentEvent.title }}</div>
|
|
|
|
|
|
|
+ <div class="detail-year">{{ currentPeriod.year }}</div>
|
|
|
|
|
+ <div class="detail-title">{{ currentPeriod.title }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="detail-content">{{ currentEvent.description }}</div>
|
|
|
|
|
|
|
+ <div class="detail-content">{{ currentPeriod.description }}</div>
|
|
|
<div class="detail-impact">
|
|
<div class="detail-impact">
|
|
|
<div class="impact-label">重要意义</div>
|
|
<div class="impact-label">重要意义</div>
|
|
|
- <div class="impact-text">{{ currentEvent.impact }}</div>
|
|
|
|
|
|
|
+ <div class="impact-text">{{ currentPeriod.impact }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -35,15 +35,15 @@
|
|
|
<div class="timeline-container">
|
|
<div class="timeline-container">
|
|
|
<div class="timeline-track">
|
|
<div class="timeline-track">
|
|
|
<div
|
|
<div
|
|
|
- v-for="(event, index) in events"
|
|
|
|
|
|
|
+ v-for="(period, index) in periods"
|
|
|
:key="index"
|
|
:key="index"
|
|
|
class="timeline-item"
|
|
class="timeline-item"
|
|
|
:class="{ active: selectedIndex === index }"
|
|
:class="{ active: selectedIndex === index }"
|
|
|
@click="selectEvent(index)"
|
|
@click="selectEvent(index)"
|
|
|
>
|
|
>
|
|
|
<div class="timeline-dot"></div>
|
|
<div class="timeline-dot"></div>
|
|
|
- <div class="timeline-year">{{ event.year }}</div>
|
|
|
|
|
- <div class="timeline-label">{{ event.shortTitle }}</div>
|
|
|
|
|
|
|
+ <div class="timeline-year">{{ period.year }}</div>
|
|
|
|
|
+ <div class="timeline-label">{{ period.shortTitle }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -52,66 +52,110 @@
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script setup>
|
|
<script setup>
|
|
|
-import { ref, computed } from "vue"
|
|
|
|
|
|
|
+import { ref, computed, onMounted, onUnmounted } from "vue"
|
|
|
|
|
+import { historyPeriods, slideshowConfig } from "@/assets/images/水利发展/historyConfig.js"
|
|
|
|
|
|
|
|
-const emit = defineEmits(["changeVideo"])
|
|
|
|
|
-
|
|
|
|
|
-const events = ref([
|
|
|
|
|
- {
|
|
|
|
|
- year: "1954",
|
|
|
|
|
- title: "昆山水文站成立",
|
|
|
|
|
- shortTitle: "水文站成立",
|
|
|
|
|
- description: "1954年,昆山水文站在国家水利部门的统一规划下正式成立,成为江苏省首批设立的水文监测站点之一。建站初期,工作人员克服了设备简陋、技术条件有限等困难,在淀山湖、阳澄湖等重要水域建立了首个水文观测点,开始系统开展水位、流量、降雨量等基础水文要素的监测工作,开启了昆山水文事业的历史起点。",
|
|
|
|
|
- impact: "昆山水文站的成立奠定了昆山水文监测体系的坚实基础,为后续水资源规划、防汛抗旱、水环境保护等工作提供了宝贵的基础数据支撑,标志着昆山水利事业进入了科学监测的新阶段。"
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- year: "1978",
|
|
|
|
|
- title: "自动化监测起步",
|
|
|
|
|
- shortTitle: "自动化起步",
|
|
|
|
|
- description: "1978年,乘着改革开放的东风,昆山水文站引入了首批自动化水位自动记录设备,结束了人工定时观测记录的历史。这些设备能够24小时不间断监测水位变化,自动记录数据,大大提高了数据采集的效率和准确性。同时,水文站开始逐步建立数据档案管理系统,为后续信息化建设打下了基础。",
|
|
|
|
|
- impact: "自动化监测设备的引入显著提升了水文监测的准确性和时效性,减轻了工作人员的劳动强度,使水文数据的连续性和可靠性得到了质的飞跃,为昆山水利决策提供了更加科学的数据支持。"
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- year: "2005",
|
|
|
|
|
- title: "信息化建设启动",
|
|
|
|
|
- shortTitle: "信息化建设",
|
|
|
|
|
- description: "2005年,昆山水文站启动了大规模的水文信息化建设工程,投资建设了现代化的数据中心,配备了服务器、网络设备和专业软件系统。通过建立远程监测网络,实现了各监测站点数据的实时传输和集中管理。同时,开发了初步的水文数据管理系统,实现了数据的电子化存储、查询和分析。",
|
|
|
|
|
- impact: "信息化建设推动了昆山水文管理向数字化、智能化方向发展,实现了监测数据的实时传输和集中管理,大大提升了水文信息的处理效率和服务能力,为昆山水资源管理和防汛抗旱决策提供了更加及时、全面的信息支持。"
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- year: "2015",
|
|
|
|
|
- title: "智慧水务平台上线",
|
|
|
|
|
- shortTitle: "智慧水务平台",
|
|
|
|
|
- description: "2015年,昆山市智慧水务综合管理平台正式上线运行,这是昆山水利信息化建设的重要里程碑。该平台整合了水文监测、水质监测、水资源管理、防汛抗旱等各类数据,通过先进的大数据分析和可视化技术,实现了水利信息的统一展示和智能分析。平台还具备预警预测功能,能够对可能出现的水情异常进行及时预警。",
|
|
|
|
|
- impact: "智慧水务平台的上线实现了水文数据的全面整合和智能分析,使水利管理决策更加科学精准,同时提升了公众对水资源状况的了解和参与度,标志着昆山水利管理进入了智慧化时代。"
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- year: "2023",
|
|
|
|
|
- title: "融合发展新阶段",
|
|
|
|
|
- shortTitle: "融合发展",
|
|
|
|
|
- description: "2023年,昆山水文事业进入了多部门融合发展的新阶段。水文站与环保、城管、应急管理等部门建立了协同工作机制,实现了数据共享和联合预警。同时,引入了物联网、人工智能等先进技术,建设了更加完善的监测网络,实现了对水资源、水环境、水生态的全方位监测和管理。此外,还加强了与科研机构的合作,开展水文模型研究和应用。",
|
|
|
|
|
- impact: "融合发展新阶段开启了水文管理现代化的新篇章,通过多部门协同和技术创新,实现了水文管理的全面升级,为昆山经济社会可持续发展和水安全保障提供了更加有力的支撑。"
|
|
|
|
|
- }
|
|
|
|
|
-])
|
|
|
|
|
|
|
+const emit = defineEmits(["changeImages"])
|
|
|
|
|
|
|
|
|
|
+const periods = ref(historyPeriods)
|
|
|
const selectedIndex = ref(0)
|
|
const selectedIndex = ref(0)
|
|
|
|
|
+const currentImages = ref([])
|
|
|
|
|
+let slideshowTimer = null
|
|
|
|
|
+
|
|
|
|
|
+const currentPeriod = computed(() => periods.value[selectedIndex.value])
|
|
|
|
|
+
|
|
|
|
|
+// 预导入所有图片
|
|
|
|
|
+const allImages = {
|
|
|
|
|
+ // 古代水文技术
|
|
|
|
|
+ '古代水文技术': [
|
|
|
|
|
+ new URL('@/assets/images/水利发展/古代水文技术/1-1.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/古代水文技术/1-2.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/古代水文技术/1-3.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/古代水文技术/1-4.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/古代水文技术/1-5.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/古代水文技术/1-6.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/古代水文技术/1-7.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/古代水文技术/1-8.png', import.meta.url).href
|
|
|
|
|
+ ],
|
|
|
|
|
+ // 近代水文技术
|
|
|
|
|
+ '近代水文技术': [
|
|
|
|
|
+ new URL('@/assets/images/水利发展/近代水文技术/2-1.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/近代水文技术/2-2.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/近代水文技术/2-3.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/近代水文技术/2-4.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/近代水文技术/2-5.png', import.meta.url).href
|
|
|
|
|
+ ],
|
|
|
|
|
+ // 新中国早期
|
|
|
|
|
+ '新中国早期': [
|
|
|
|
|
+ new URL('@/assets/images/水利发展/新中国早期/3-1.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/新中国早期/3-2.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/新中国早期/3-3.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/新中国早期/3-4.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/新中国早期/4-1.png', import.meta.url).href
|
|
|
|
|
+ ],
|
|
|
|
|
+ // 水文自动化转型
|
|
|
|
|
+ '水文自动化转型': [
|
|
|
|
|
+ new URL('@/assets/images/水利发展/水文自动化转型/4-2.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/水文自动化转型/4-3.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/水文自动化转型/4-4.png', import.meta.url).href
|
|
|
|
|
+ ],
|
|
|
|
|
+ // 智慧水文时代
|
|
|
|
|
+ '智慧水文时代': [
|
|
|
|
|
+ new URL('@/assets/images/水利发展/智慧水文时代/5-1.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/智慧水文时代/5-2.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/智慧水文时代/5-3.png', import.meta.url).href,
|
|
|
|
|
+ new URL('@/assets/images/水利发展/智慧水文时代/5-4.png', import.meta.url).href
|
|
|
|
|
+ ]
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
-const currentEvent = computed(() => events.value[selectedIndex.value])
|
|
|
|
|
|
|
+// 动态加载文件夹中的所有图片
|
|
|
|
|
+function loadImages(folderName) {
|
|
|
|
|
+ console.log('加载文件夹:', folderName)
|
|
|
|
|
+ const images = allImages[folderName] || []
|
|
|
|
|
+ console.log('加载到的图片:', images)
|
|
|
|
|
+ console.log('图片数量:', images.length)
|
|
|
|
|
+ return Promise.resolve(images)
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
-function selectEvent(index) {
|
|
|
|
|
|
|
+// 选择历史时期
|
|
|
|
|
+async function selectEvent(index) {
|
|
|
selectedIndex.value = index
|
|
selectedIndex.value = index
|
|
|
- if (index === 1) {
|
|
|
|
|
- emit("changeVideo", "auto")
|
|
|
|
|
- } else if (index === 2) {
|
|
|
|
|
- emit("changeVideo", "3d")
|
|
|
|
|
- } else if (index === 3) {
|
|
|
|
|
- emit("changeVideo", "smart")
|
|
|
|
|
- } else if (index === 4) {
|
|
|
|
|
- emit("changeVideo", "wisdom")
|
|
|
|
|
- } else {
|
|
|
|
|
- emit("changeVideo", "manual")
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ const period = periods.value[index]
|
|
|
|
|
+
|
|
|
|
|
+ // 加载对应文件夹的图片
|
|
|
|
|
+ const images = await loadImages(period.folder)
|
|
|
|
|
+ currentImages.value = images
|
|
|
|
|
+
|
|
|
|
|
+ console.log('选中时期:', index, period.title, '图片数量:', images.length)
|
|
|
|
|
+
|
|
|
|
|
+ // 发送事件给父组件,传递图片列表
|
|
|
|
|
+ emit("changeImages", {
|
|
|
|
|
+ index: index,
|
|
|
|
|
+ images: images,
|
|
|
|
|
+ folder: period.folder
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+// 初始化
|
|
|
|
|
+onMounted(async () => {
|
|
|
|
|
+ // 加载默认时期的图片
|
|
|
|
|
+ const images = await loadImages(periods.value[0].folder)
|
|
|
|
|
+ currentImages.value = images
|
|
|
|
|
+
|
|
|
|
|
+ console.log('初始化加载图片:', periods.value[0].folder, '数量:', images.length)
|
|
|
|
|
+
|
|
|
|
|
+ emit("changeImages", {
|
|
|
|
|
+ index: 0,
|
|
|
|
|
+ images: images,
|
|
|
|
|
+ folder: periods.value[0].folder
|
|
|
|
|
+ })
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+onUnmounted(() => {
|
|
|
|
|
+ if (slideshowTimer) {
|
|
|
|
|
+ clearInterval(slideshowTimer)
|
|
|
|
|
+ }
|
|
|
|
|
+})
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
<style lang="scss">
|
|
<style lang="scss">
|