|
@@ -0,0 +1,322 @@
|
|
|
+<template>
|
|
|
+ <div class="app-container home">
|
|
|
+ <div class="main-page-top">
|
|
|
+ <div class="content-wrapper">
|
|
|
+ <div class="content">
|
|
|
+ <div class="image-container">
|
|
|
+ <img src="../assets/images/home/shanghai.png" alt="上海天际线"/>
|
|
|
+ </div>
|
|
|
+ <div class="right-part">
|
|
|
+ <div class="side-bar" v-for="(item,index) in firstRouteData" :key="index" >
|
|
|
+ <div
|
|
|
+ @click="!item.disabled && goToPage(item.path)"
|
|
|
+ @mouseover="!item.disabled && (item.isHovered = true)"
|
|
|
+ @mouseleave="!item.disabled && (item.isHovered = false)"
|
|
|
+ :style="dynamicStyle(item)"
|
|
|
+ :disabled="item.disabled"
|
|
|
+ class="button-with-arrow"
|
|
|
+ >{{ item.name }}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="main-page-lower">
|
|
|
+ <div class="recent-news">
|
|
|
+ <h2>最新成效</h2>
|
|
|
+ <ul>
|
|
|
+ <li>
|
|
|
+ <div class="number-square">1</div>
|
|
|
+ <span class="news-title">上海市人民政府办公厅关于印发《本市系统化全域推进海绵城市建设的实施意见》的通知</span>
|
|
|
+ <span class="news-date">2024-06-18</span>
|
|
|
+ </li>
|
|
|
+ <li>
|
|
|
+ <div class="number-square">2</div>
|
|
|
+ <span class="news-title">沪府办〔2016〕165号-关于印发《上海市海绵城市规划建设技术导则(试行)》的通知</span>
|
|
|
+ <span class="news-date">2024-06-18</span>
|
|
|
+ </li>
|
|
|
+ <li>
|
|
|
+ <div class="number-square">3</div>
|
|
|
+ <span class="news-title">上海市人民政府办公厅转发市水务局、市环保局制订的《关于加快本市城乡小河...</span>
|
|
|
+ <span class="news-date">2024-06-18</span>
|
|
|
+ </li>
|
|
|
+ <li>
|
|
|
+ <div class="number-square">4</div>
|
|
|
+ <span class="news-title">沪府办〔2017〕80号上海市人民政府办公厅关于转发市水务局制订的《苏州河环...</span>
|
|
|
+ <span class="news-date">2024-06-18</span>
|
|
|
+ </li>
|
|
|
+ <li>
|
|
|
+ <div class="number-square">5</div>
|
|
|
+ <span class="news-title">关于印发《开展上海市雨污混接综合整治攻坚战的实施意见》的通知</span>
|
|
|
+ <span class="news-date">2024-06-18</span>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup name="IndexHmcs" lang="ts">
|
|
|
+import {nextTick} from "vue";
|
|
|
+import {ref} from "vue";
|
|
|
+import usePermissionStore from '@/store/modules/permission';
|
|
|
+import { RouteRecordRaw } from 'vue-router';
|
|
|
+import {func} from "vue-types";
|
|
|
+const router = useRouter();
|
|
|
+const permissionStore = usePermissionStore();
|
|
|
+const routes = computed<RouteRecordRaw[]>(() => permissionStore.getRoutes());
|
|
|
+let firstRouteData = ref([
|
|
|
+ {
|
|
|
+ name:'规划计划',
|
|
|
+ disabled:true,
|
|
|
+ isHovered: false, // 初始悬浮状态
|
|
|
+ bgUrl:'../assets/images/home/ghjh1.png',
|
|
|
+ hoverUrl:'../assets/images/home/ghjh2.png'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name:'项目管理',
|
|
|
+ disabled:true,
|
|
|
+ isHovered: false,
|
|
|
+ bgUrl:'../assets/images/home/xmgl1.png',
|
|
|
+ hoverUrl:'../assets/images/home/xmgl2.png'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name:'设备设施监测',
|
|
|
+ disabled:true,
|
|
|
+ isHovered: false,
|
|
|
+ bgUrl:'../assets/images/home/sbss1.png',
|
|
|
+ hoverUrl:'../assets/images/home/sbss2.png'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name:'成效评估',
|
|
|
+ disabled:true,
|
|
|
+ isHovered: false,
|
|
|
+ bgUrl:'../assets/images/home/cxpg1.png',
|
|
|
+ hoverUrl:'../assets/images/home/cxpg2.png'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name:'政策公开',
|
|
|
+ disabled:true,
|
|
|
+ isHovered: false,
|
|
|
+ bgUrl:'../assets/images/home/zzk1.png',
|
|
|
+ hoverUrl:'../assets/images/home/zzs2.png'
|
|
|
+ }
|
|
|
+]);
|
|
|
+function dynamicStyle(item) {
|
|
|
+ const bgUrl = getBackgroundUrl(item);
|
|
|
+ return {
|
|
|
+ //backgroundImage: `url(${bgUrl})`,
|
|
|
+ pointerEvents: item.disabled ? 'none' : 'auto',
|
|
|
+ opacity: item.disabled ? 0.5 : 1
|
|
|
+ };
|
|
|
+}
|
|
|
+function getBackgroundUrl(item) {
|
|
|
+ // 自定义逻辑生成 URL
|
|
|
+ if (item.isHovered) {
|
|
|
+ return new URL(item.hoverUrl, import.meta.url).href;
|
|
|
+ } else {
|
|
|
+ return new URL(item.bgUrl, import.meta.url).href;
|
|
|
+ }
|
|
|
+}
|
|
|
+function goToPage(path) {
|
|
|
+ router.push({ path: path});
|
|
|
+}
|
|
|
+onMounted(() => {
|
|
|
+ nextTick(() => {
|
|
|
+ routes.value.forEach(bigItem => {
|
|
|
+ firstRouteData.value.forEach(smallItem => {
|
|
|
+ if (bigItem?.meta?.title === smallItem.name) {
|
|
|
+ // 递归拼接每一层的路径
|
|
|
+ const buildFullPath = (item, currentPath = "") => {
|
|
|
+ let fullPath = `${currentPath}/${item.path}`.replace(/\/+/, "/"); // 拼接路径并去掉多余的 "/"
|
|
|
+
|
|
|
+ if (item.children && item.children.length > 0) {
|
|
|
+ // 递归处理子项,继续拼接路径
|
|
|
+ return buildFullPath(item.children[0], fullPath);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 去掉末尾的 /index
|
|
|
+ return fullPath.replace(/\/index$/, "");
|
|
|
+ };
|
|
|
+
|
|
|
+ smallItem.disabled = false;
|
|
|
+ smallItem.path = buildFullPath(bigItem); // 获取完整路径
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ })
|
|
|
+})
|
|
|
+
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped lang="scss">
|
|
|
+.home {
|
|
|
+ box-sizing: border-box;
|
|
|
+ height: calc(100%);
|
|
|
+ overflow-y: auto;
|
|
|
+ .main-page-top {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ //background-color: #F5F5F5;
|
|
|
+ padding-top: 30px;
|
|
|
+ padding-bottom: 30px;
|
|
|
+ height: 60%;
|
|
|
+ .content-wrapper {
|
|
|
+ display: flex;
|
|
|
+ width: 90%;
|
|
|
+ justify-content: center; /* 居中对齐 */
|
|
|
+ .content {
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: flex-start;
|
|
|
+ .image-container {
|
|
|
+ flex-shrink: 0;
|
|
|
+ width: 60%;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ img {
|
|
|
+ width: 920px; /* 设定图片的最大宽度 */
|
|
|
+ height: 520px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .right-part{
|
|
|
+ .side-bar {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ width: 350px;
|
|
|
+ margin-left: 20px;
|
|
|
+ div {
|
|
|
+ display: block;
|
|
|
+ height: 96px;
|
|
|
+ padding: 29px;
|
|
|
+ margin-bottom: 10px;
|
|
|
+ border: 2px solid var(--commonTextColor);
|
|
|
+ cursor: pointer;
|
|
|
+ border-radius: 4px;
|
|
|
+ font-weight: bold;
|
|
|
+ font-family: "MicrosoftYaHei-Bold", sans-serif;
|
|
|
+ text-align: left;
|
|
|
+ font-size: 20px;
|
|
|
+ //background-color: #FFFFFF;
|
|
|
+ color:var(--commonTextColor);
|
|
|
+ /* 其他样式 */
|
|
|
+ box-shadow: none; /* 移除阴影效果 */
|
|
|
+ }
|
|
|
+ div:focus {
|
|
|
+ outline: none; /* 移除聚焦时的默认边框 */
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .button-with-arrow {
|
|
|
+ position: relative;
|
|
|
+ padding-right: 10px; /* 调整箭头与按钮文本之间的间距 */
|
|
|
+ background-size: cover;
|
|
|
+ color:var(--commonTextColor)
|
|
|
+ }
|
|
|
+ .button-with-arrow:disabled {
|
|
|
+ cursor: not-allowed; /* 禁用时鼠标样式 */
|
|
|
+ color: gray !important; /* 禁用时字体颜色 */
|
|
|
+ }
|
|
|
+ .button-with-arrow::after {
|
|
|
+ content: '→'; /* 使用Unicode编码或者直接使用箭头字符 */
|
|
|
+ position: absolute;
|
|
|
+ top: 50%;
|
|
|
+ right: 30px; /* 箭头与按钮右侧的距离 */
|
|
|
+ transform: translateY(-50%);
|
|
|
+ font-size: 28px; /* 调整箭头的大小 */
|
|
|
+ color: #B3B3B3; /* 箭头的颜色 */
|
|
|
+ }
|
|
|
+
|
|
|
+ .button-with-arrow:hover{
|
|
|
+ color: #0080FF; /* 箭头的颜色 */
|
|
|
+ }
|
|
|
+
|
|
|
+ .button-with-arrow:hover::after {
|
|
|
+ color: #0080FF; /* 箭头悬停时的颜色 */
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .main-page-lower {
|
|
|
+ height: 40%;
|
|
|
+ display: flex;
|
|
|
+ padding: 20px;
|
|
|
+ //background-color: #FFFFFF;
|
|
|
+ .recent-news {
|
|
|
+ flex-grow: 1;
|
|
|
+ padding: 20px;
|
|
|
+ border-radius: 5px;
|
|
|
+ h2 {
|
|
|
+ margin-top: 0;
|
|
|
+ font-weight: bold; /* 标题加粗 */
|
|
|
+ font-size: 24px;
|
|
|
+ text-align: center; /* 文本居中对齐 */
|
|
|
+ display: inline-block; /* 将h2设为内联块级元素 */
|
|
|
+ position: relative; /* 相对定位,以便于伪元素的绝对定位 */
|
|
|
+ margin-left: 350px;
|
|
|
+ }
|
|
|
+ h2::before {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ left: -20px;
|
|
|
+ height: 100%;
|
|
|
+ width: 10%; /* 控制背景色占据的宽度 */
|
|
|
+ background-color: #0080FF; /* 与h2背景色一致 */
|
|
|
+ z-index: -1; /* 确保伪元素在文本下面 */
|
|
|
+ }
|
|
|
+ ul {
|
|
|
+ list-style: none;
|
|
|
+ padding: 0;
|
|
|
+ li {
|
|
|
+ display: flex;
|
|
|
+ align-items: center; /* 垂直居中 */
|
|
|
+ justify-content: space-between;
|
|
|
+ padding: 10px 350px;
|
|
|
+ //background-color: rgba(31, 98, 167, 0.1); /* 半透明背景色 */
|
|
|
+ .number-square {
|
|
|
+ width: 30px;
|
|
|
+ height: 30px;
|
|
|
+ opacity: 0.35;
|
|
|
+ background-color: #0080FF; /* 数字方块背景色 */
|
|
|
+ color: white;
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 16px;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ border-radius: 4px;
|
|
|
+ margin-right: 23px;
|
|
|
+ }
|
|
|
+ .news-title {
|
|
|
+ flex-grow: 1; /* 让标题占据剩余空间 */
|
|
|
+ text-align: left; /* 文本向左对齐 */
|
|
|
+ font-size: 20px;
|
|
|
+ font-family: "MicrosoftYaHei-Bold", sans-serif; /* 设置字体为 MicrosoftYaHei-Bold */
|
|
|
+ font-weight: bold; /* 字重加粗 */
|
|
|
+ }
|
|
|
+ .news-title:hover {
|
|
|
+ color: #0080FF;
|
|
|
+ }
|
|
|
+ .news-date {
|
|
|
+ font-weight: bold; /* 日期加粗 */
|
|
|
+ text-align: right; /* 文本向右对齐 */
|
|
|
+ font-size: 16px;
|
|
|
+ color: #595959;
|
|
|
+ opacity: 0.7;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ li:hover {
|
|
|
+ //background-color: #eff6ff;
|
|
|
+ cursor: pointer; /* 鼠标悬停时显示手型 */
|
|
|
+ .number-square {
|
|
|
+ opacity: 1; /* 鼠标悬浮时完全不透明 */
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|