|
@@ -0,0 +1,384 @@
|
|
|
+<template>
|
|
|
+ <div class="info-view">
|
|
|
+ <div class="content-wrap">
|
|
|
+ <div class="top-area">
|
|
|
+ <TableTitle
|
|
|
+ class="title"
|
|
|
+ text-cn="新闻资讯"
|
|
|
+ text-en="NEWS AND INFORMATION"
|
|
|
+ />
|
|
|
+ <div class="content">
|
|
|
+ <img
|
|
|
+ class="photo"
|
|
|
+ :src="`${$env.BASE_URL}images/demo-photo-${newsPageIdx * 3 + activeNewsIdx}.jpg`"
|
|
|
+ alt=""
|
|
|
+ draggable="false"
|
|
|
+ @click="onClickNews(newsList[newsPageIdx * 3 + activeNewsIdx].id)"
|
|
|
+ >
|
|
|
+ <ul class="list">
|
|
|
+ <div
|
|
|
+ v-for="n in 3"
|
|
|
+ :key="n"
|
|
|
+ class="list-item-wrap"
|
|
|
+ >
|
|
|
+ <li
|
|
|
+ class="list-item"
|
|
|
+ :class="{
|
|
|
+ active: activeNewsIdx === n - 1,
|
|
|
+ }"
|
|
|
+ @mouseenter="activeNewsIdx = n - 1"
|
|
|
+ @click="onClickNews(newsList[newsPageIdx * 3 + n - 1].id)"
|
|
|
+ >
|
|
|
+ <div class="left">
|
|
|
+ <div class="month-day">
|
|
|
+ {{ newsList[newsPageIdx * 3 + n - 1].date.substring(5, 10) }}
|
|
|
+ </div>
|
|
|
+ <div class="year">
|
|
|
+ {{ newsList[newsPageIdx * 3 + n - 1].date.substring(0, 4) }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="splitter" />
|
|
|
+ <div class="right">
|
|
|
+ <div
|
|
|
+ class="title"
|
|
|
+ :title="newsList[newsPageIdx * 3 + n - 1].title"
|
|
|
+ >
|
|
|
+ {{ newsList[newsPageIdx * 3 + n - 1].title }}
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ class="desc"
|
|
|
+ :title="newsList[newsPageIdx * 3 + n - 1].desc"
|
|
|
+ >
|
|
|
+ {{ newsList[newsPageIdx * 3 + n - 1].desc }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </li>
|
|
|
+ <div
|
|
|
+ v-show="n !== 3"
|
|
|
+ class="splitter"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </ul>
|
|
|
+ </div>
|
|
|
+ <div class="page-ctrl">
|
|
|
+ <button
|
|
|
+ :class="{
|
|
|
+ show: newsPageIdx > 0,
|
|
|
+ }"
|
|
|
+ class="prev"
|
|
|
+ @click="newsPageIdx--"
|
|
|
+ />
|
|
|
+ <button
|
|
|
+ :class="{
|
|
|
+ show: newsPageIdx < newsList.length / 3 - 1,
|
|
|
+ }"
|
|
|
+ class="next"
|
|
|
+ @click="newsPageIdx++"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="notification-area">
|
|
|
+ <TableTitle
|
|
|
+ class="title"
|
|
|
+ text-cn="通知公告"
|
|
|
+ text-en="NOTICE ANNOUNCEMENT"
|
|
|
+ />
|
|
|
+ <div class="splitter" />
|
|
|
+ <ul
|
|
|
+ class="table"
|
|
|
+ >
|
|
|
+ <li
|
|
|
+ v-for="(item, idx) in notificationList"
|
|
|
+ :key="idx"
|
|
|
+ >
|
|
|
+ <div
|
|
|
+ class="line"
|
|
|
+ @click="onClickNotification(item.id)"
|
|
|
+ >
|
|
|
+ <div
|
|
|
+ class="key"
|
|
|
+ :title="item.title"
|
|
|
+ >
|
|
|
+ <span class="dot">·</span> <span class="text">{{ item.title }}</span>
|
|
|
+ <span
|
|
|
+ v-show="item.isNew"
|
|
|
+ class="icon-new"
|
|
|
+ >新</span>
|
|
|
+ </div>
|
|
|
+ <span
|
|
|
+ class="value"
|
|
|
+ :title="item.desc"
|
|
|
+ >{{ item.date }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="line-splitter" />
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
+ <router-view />
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+import { ref, computed, watch, onMounted, onBeforeUnmount, inject } from "vue"
|
|
|
+import { useRoute, useRouter } from "vue-router"
|
|
|
+import { useStore } from "vuex"
|
|
|
+
|
|
|
+const route = useRoute()
|
|
|
+const router = useRouter()
|
|
|
+const store = useStore()
|
|
|
+
|
|
|
+const $env = inject('$env')
|
|
|
+
|
|
|
+const newsList = staticConfig.newsList
|
|
|
+const newsPageIdx = ref(0)
|
|
|
+const activeNewsIdx = ref(0)
|
|
|
+
|
|
|
+const notificationList = staticConfig.notificationList
|
|
|
+
|
|
|
+function onClickNews(id) {
|
|
|
+ router.push({
|
|
|
+ name: 'InfoDetail'
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+function onClickNotification(id) {
|
|
|
+ router.push({
|
|
|
+ name: 'InfoDetail'
|
|
|
+ })
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="less" scoped>
|
|
|
+.info-view{
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ top: 0;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ >.content-wrap{
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ top: 0;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ overflow: auto;
|
|
|
+ >.top-area{
|
|
|
+ height: 811px;
|
|
|
+ padding-left: calc(243 / 1920 * 100vw);
|
|
|
+ padding-right: calc(243 / 1920 * 100vw);
|
|
|
+ background-color: #fff;
|
|
|
+ position: relative;
|
|
|
+ >.title{
|
|
|
+ margin-top: 80px;
|
|
|
+ }
|
|
|
+ >.content{
|
|
|
+ margin-top: 51px;
|
|
|
+ height: 482px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ >img.photo{
|
|
|
+ flex: 0 0 auto;
|
|
|
+ width: 700px;
|
|
|
+ height: 100%;
|
|
|
+ object-fit: cover;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+ >ul.list{
|
|
|
+ flex: 0 0 auto;
|
|
|
+ height: 100%;
|
|
|
+ width: calc(100% - 700px);
|
|
|
+ >.list-item-wrap{
|
|
|
+ width: 100%;
|
|
|
+ >li.list-item{
|
|
|
+ height: 160px;
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-evenly;
|
|
|
+ align-items: center;
|
|
|
+ cursor: pointer;
|
|
|
+ color: #474747;
|
|
|
+ >.left{
|
|
|
+ flex: 0 0 auto;
|
|
|
+ width: 197px;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ >.month-day{
|
|
|
+ font-family: Source Han Serif CN, Source Han Serif CN;
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 40px;
|
|
|
+ }
|
|
|
+ >.year{
|
|
|
+ margin-top: 0.2em;
|
|
|
+ font-family: Source Han Serif CN, Source Han Serif CN;
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 18px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ >.splitter{
|
|
|
+ flex: 0 0 auto;
|
|
|
+ width: 1px;
|
|
|
+ height: 80px;
|
|
|
+ background-color: #474747;
|
|
|
+ }
|
|
|
+ >.right{
|
|
|
+ flex: 1 0 1px;
|
|
|
+ margin-left: 35px;
|
|
|
+ margin-right: 38px;
|
|
|
+ >.title{
|
|
|
+ display: -webkit-box;
|
|
|
+ -webkit-box-orient: vertical;
|
|
|
+ -webkit-line-clamp: 1;
|
|
|
+ overflow: hidden;
|
|
|
+ font-family: Source Han Sans CN, Source Han Sans CN;
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 24px;
|
|
|
+ }
|
|
|
+ >.desc{
|
|
|
+ margin-top: 18px;
|
|
|
+ display: -webkit-box;
|
|
|
+ -webkit-box-orient: vertical;
|
|
|
+ -webkit-line-clamp: 2;
|
|
|
+ overflow: hidden;
|
|
|
+ font-family: Source Han Sans CN, Source Han Sans CN;
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 18px;
|
|
|
+ line-height: 29px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ >li.list-item.active{
|
|
|
+ color: #fff;
|
|
|
+ background: #589498;
|
|
|
+ }
|
|
|
+ >.splitter{
|
|
|
+ height: 1px;
|
|
|
+ background: #D9D9D9;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ >.page-ctrl{
|
|
|
+ position: absolute;
|
|
|
+ bottom: 40px;
|
|
|
+ right: calc(243 / 1920 * 100vw);
|
|
|
+ >button{
|
|
|
+ width: 60px;
|
|
|
+ height: 60px;
|
|
|
+ opacity: 0;
|
|
|
+ pointer-events: none;
|
|
|
+ }
|
|
|
+ >button.show{
|
|
|
+ opacity: 1;
|
|
|
+ pointer-events: initial;
|
|
|
+ }
|
|
|
+ >button.prev{
|
|
|
+ background-image: url(@/assets/images/icon_arrow-left-round.png);
|
|
|
+ background-size: cover;
|
|
|
+ background-repeat: no-repeat;
|
|
|
+ background-position: center center;
|
|
|
+ }
|
|
|
+ >button.next{
|
|
|
+ margin-left: 22px;
|
|
|
+ background-image: url(@/assets/images/icon_arrow-right-round.png);
|
|
|
+ background-size: cover;
|
|
|
+ background-repeat: no-repeat;
|
|
|
+ background-position: center center;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ >.notification-area{
|
|
|
+ height: 790px;
|
|
|
+ background-image: url(@/assets/images/about/institu-p3-bg.jpg);
|
|
|
+ background-size: cover;
|
|
|
+ background-repeat: no-repeat;
|
|
|
+ background-position: center center;
|
|
|
+ padding-left: calc(243 / 1920 * 100vw);
|
|
|
+ padding-right: calc(243 / 1920 * 100vw);
|
|
|
+ position: relative;
|
|
|
+ >.title{
|
|
|
+ margin-top: 32px;
|
|
|
+ }
|
|
|
+ >.splitter{
|
|
|
+ margin-top: 9px;
|
|
|
+ height: 1px;
|
|
|
+ background: #589498;
|
|
|
+ }
|
|
|
+ >ul.table{
|
|
|
+ margin-top: 30px;
|
|
|
+ height: 580px;
|
|
|
+ overflow: auto;
|
|
|
+ padding-right: 15px;
|
|
|
+ >li{
|
|
|
+ width: 100%;
|
|
|
+ >.line{
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ height: 88px;
|
|
|
+ cursor: pointer;
|
|
|
+ >.key{
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ width: calc(100% - 150px);
|
|
|
+ flex: 0 0 auto;
|
|
|
+ font-family: Source Han Sans CN, Source Han Sans CN;
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 24px;
|
|
|
+ color: #474747;
|
|
|
+ >.dot{
|
|
|
+ font-size: 48px;
|
|
|
+ }
|
|
|
+ >.text{
|
|
|
+ overflow: hidden;
|
|
|
+ white-space: pre;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ }
|
|
|
+ >.icon-new{
|
|
|
+ margin-left: 16px;
|
|
|
+ width: 29px;
|
|
|
+ height: 29px;
|
|
|
+ background: #B31E23;
|
|
|
+ border-radius: 3px 3px 3px 3px;
|
|
|
+ font-family: Source Han Sans CN, Source Han Sans CN;
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 18px;
|
|
|
+ color: #FFFFFF;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ >span.value{
|
|
|
+ width: 130px;
|
|
|
+ display: inline-block;
|
|
|
+ flex: 0 0 auto;
|
|
|
+ font-family: Source Han Sans CN, Source Han Sans CN;
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 24px;
|
|
|
+ color: #474747;
|
|
|
+ overflow: hidden;
|
|
|
+ white-space: pre;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ >.line-splitter{
|
|
|
+ height: 1px;
|
|
|
+ border: 1px dashed rgba(88,148,152,0.5);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ >li:last-of-type{
|
|
|
+ >.line-splitter{
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|