|
@@ -0,0 +1,565 @@
|
|
|
+<template>
|
|
|
+ <div
|
|
|
+ class="home"
|
|
|
+ >
|
|
|
+ <transition name="fade-out">
|
|
|
+ <HomeFadeIn
|
|
|
+ v-if="isShowFadeInMask"
|
|
|
+ class="fade-in-mask"
|
|
|
+ />
|
|
|
+ </transition>
|
|
|
+ <h1 :title="'离开的监管机构'">
|
|
|
+ 离开的监管机构
|
|
|
+ </h1>
|
|
|
+ <form @submit="onSearch">
|
|
|
+ <input
|
|
|
+ v-model="filterKeyword"
|
|
|
+ type="text"
|
|
|
+ placeholder="请输入企业名称"
|
|
|
+ >
|
|
|
+ <button type="submit">
|
|
|
+ <img
|
|
|
+ class=""
|
|
|
+ src="@/assets/images/icon_search.png"
|
|
|
+ alt=""
|
|
|
+ draggable="false"
|
|
|
+ >
|
|
|
+ </button>
|
|
|
+ </form>
|
|
|
+ <ul>
|
|
|
+ <li
|
|
|
+ v-for="(decade) in corpListMap.keys()"
|
|
|
+ :key="decade"
|
|
|
+ >
|
|
|
+ <h2>
|
|
|
+ <img
|
|
|
+ class=""
|
|
|
+ src="@/assets/images/decade-decorator-left.png"
|
|
|
+ alt=""
|
|
|
+ draggable="false"
|
|
|
+ >
|
|
|
+ <span>{{ decade }}</span>
|
|
|
+ <img
|
|
|
+ class=""
|
|
|
+ src="@/assets/images/decade-decorator-right.png"
|
|
|
+ alt=""
|
|
|
+ draggable="false"
|
|
|
+ >
|
|
|
+ </h2>
|
|
|
+ <div
|
|
|
+ v-for="(corpItem) in corpListMap.get(decade)"
|
|
|
+ :key="corpItem.id"
|
|
|
+ class="corp-item"
|
|
|
+ :class="{
|
|
|
+ active: activeCorpId === corpItem.id
|
|
|
+ }"
|
|
|
+ @click="activeCorpId = corpItem.id"
|
|
|
+ >
|
|
|
+ <div class="item-icon" />
|
|
|
+ <div class="verticle-line" />
|
|
|
+ <span
|
|
|
+ class="corp-name"
|
|
|
+ :title="corpItem.name"
|
|
|
+ >
|
|
|
+ {{ corpItem.name }}
|
|
|
+ </span>
|
|
|
+ <span class="corp-time">
|
|
|
+ {{ corpItem.time }}
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ <nav
|
|
|
+ :style="{
|
|
|
+ bottom: isShowNavBar ? '0' : '-112px',
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <button
|
|
|
+ class="tab-item"
|
|
|
+ :class="{
|
|
|
+ active: activeNavItemIdx === 0
|
|
|
+ }"
|
|
|
+ @click="activeNavItemIdx = 0"
|
|
|
+ >
|
|
|
+ 概述总览
|
|
|
+ <img
|
|
|
+ class="decorator"
|
|
|
+ src="@/assets/images/nav-item-active-decorator.png"
|
|
|
+ alt=""
|
|
|
+ draggable="false"
|
|
|
+ >
|
|
|
+ </button>
|
|
|
+ <button
|
|
|
+ class="tab-item"
|
|
|
+ :class="{
|
|
|
+ active: activeNavItemIdx === 1
|
|
|
+ }"
|
|
|
+ @click="activeNavItemIdx = 1"
|
|
|
+ >
|
|
|
+ 历史回顾
|
|
|
+ <img
|
|
|
+ class="decorator"
|
|
|
+ src="@/assets/images/nav-item-active-decorator.png"
|
|
|
+ alt=""
|
|
|
+ draggable="false"
|
|
|
+ >
|
|
|
+ </button>
|
|
|
+ <button
|
|
|
+ class="tab-item"
|
|
|
+ :class="{
|
|
|
+ active: activeNavItemIdx === 2
|
|
|
+ }"
|
|
|
+ @click="activeNavItemIdx = 2"
|
|
|
+ >
|
|
|
+ 国之重器
|
|
|
+ <img
|
|
|
+ class="decorator"
|
|
|
+ src="@/assets/images/nav-item-active-decorator.png"
|
|
|
+ alt=""
|
|
|
+ draggable="false"
|
|
|
+ >
|
|
|
+ </button>
|
|
|
+ <button
|
|
|
+ class="tab-item"
|
|
|
+ :class="{
|
|
|
+ active: activeNavItemIdx === 3
|
|
|
+ }"
|
|
|
+ @click="activeNavItemIdx = 3"
|
|
|
+ >
|
|
|
+ 工业元宇宙
|
|
|
+ <img
|
|
|
+ class="decorator"
|
|
|
+ src="@/assets/images/nav-item-active-decorator.png"
|
|
|
+ alt=""
|
|
|
+ draggable="false"
|
|
|
+ >
|
|
|
+ </button>
|
|
|
+ </nav>
|
|
|
+ <button
|
|
|
+ class="show-hide"
|
|
|
+ :style="{
|
|
|
+ backgroundImage: isShowNavBar ? `url(${require(`@/assets/images/arrow-down.png`)})` : `url(${require(`@/assets/images/arrow-up.png`)})`,
|
|
|
+ }"
|
|
|
+ @click="isShowNavBar = !isShowNavBar"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import HomeFadeIn from "@/views/HomeFadeIn.vue"
|
|
|
+import {
|
|
|
+ computed,
|
|
|
+ onMounted,
|
|
|
+ reactive,
|
|
|
+ ref,
|
|
|
+} from 'vue'
|
|
|
+import deepClone from 'lodash/cloneDeep'
|
|
|
+
|
|
|
+export default {
|
|
|
+ name: 'HomeView',
|
|
|
+ components: {
|
|
|
+ HomeFadeIn,
|
|
|
+ },
|
|
|
+
|
|
|
+ setup () {
|
|
|
+ const isShowFadeInMask = ref(false)
|
|
|
+ onMounted(() => {
|
|
|
+ setTimeout(() => {
|
|
|
+ isShowFadeInMask.value = false
|
|
|
+ }, 2000)
|
|
|
+ })
|
|
|
+
|
|
|
+ const isShowNavBar = ref(true)
|
|
|
+ const activeNavItemIdx = ref(0)
|
|
|
+
|
|
|
+ const filterKeyword = ref('')
|
|
|
+
|
|
|
+ const corpListRaw = reactive([
|
|
|
+ {
|
|
|
+ name: '撒旦解放了',
|
|
|
+ time: '2022-12-03',
|
|
|
+ id: 1,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '撒旦解放了',
|
|
|
+ time: '2022-11-03',
|
|
|
+ id: 2,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '撒旦解放了',
|
|
|
+ time: '2022-07-03',
|
|
|
+ id: 3,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '撒旦解放了',
|
|
|
+ time: '2021-12-03',
|
|
|
+ id: 4,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '撒旦解放了',
|
|
|
+ time: '2021-07-03',
|
|
|
+ id: 5,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '撒旦解放了',
|
|
|
+ time: '2020-12-03',
|
|
|
+ id: 6,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '撒旦解放了',
|
|
|
+ time: '2020-05-03',
|
|
|
+ id: 7,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '撒旦解放了',
|
|
|
+ time: '2019-05-03',
|
|
|
+ id: 8,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '撒旦解放了',
|
|
|
+ time: '2011-07-03',
|
|
|
+ id: 9,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '撒旦解放了',
|
|
|
+ time: '2009-07-03',
|
|
|
+ id: 10,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '撒旦解放了',
|
|
|
+ time: '2000-07-03',
|
|
|
+ id: 11,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '撒旦解放了',
|
|
|
+ time: '1995-11-03',
|
|
|
+ id: 12,
|
|
|
+ },
|
|
|
+ ])
|
|
|
+ const corpListMap = computed(() => {
|
|
|
+ const corpListFiltered = corpListRaw.filter((item) => {
|
|
|
+ console.log(item.name, filterKeyword)
|
|
|
+ return !filterKeyword.value || item.name.includes(filterKeyword.value)
|
|
|
+ })
|
|
|
+ const afterSort = deepClone(corpListFiltered)
|
|
|
+ afterSort.sort((a, b) => {
|
|
|
+ return Date.parse(b.time) - Date.parse(a.time)
|
|
|
+ })
|
|
|
+ const ret = new Map()
|
|
|
+ afterSort.forEach(element => {
|
|
|
+ const t = element.time[2]
|
|
|
+ const decade = Number(t) < 3 ? `本世纪${t}0年代` : `上世纪${t}0年代`
|
|
|
+ if (!ret.get(decade)) {
|
|
|
+ ret.set(decade, [])
|
|
|
+ }
|
|
|
+ ret.get(decade).push(element)
|
|
|
+ })
|
|
|
+ return ret
|
|
|
+ })
|
|
|
+ const activeCorpId = ref(null)
|
|
|
+
|
|
|
+ return {
|
|
|
+ isShowFadeInMask,
|
|
|
+ isShowNavBar,
|
|
|
+ activeNavItemIdx,
|
|
|
+ filterKeyword,
|
|
|
+ corpListMap,
|
|
|
+ activeCorpId,
|
|
|
+ }
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ ...mapState([
|
|
|
+ ]),
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.$mitt.emit('test', { msg: 'home mounted' })
|
|
|
+ },
|
|
|
+ unmounted() {
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ ...mapMutations([
|
|
|
+ ]),
|
|
|
+ onSearch() {
|
|
|
+ console.log('search!')
|
|
|
+ }
|
|
|
+ },
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="less" scoped>
|
|
|
+.home {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ background-image: url(@/assets/images/main-bg.jpg);
|
|
|
+ background-size: cover;
|
|
|
+ background-repeat: no-repeat;
|
|
|
+ background-position: center center;
|
|
|
+ >.fade-in-mask {
|
|
|
+ z-index: 5;
|
|
|
+ }
|
|
|
+ >h1 {
|
|
|
+ position: absolute;
|
|
|
+ top: 51px;
|
|
|
+ left: 81px;
|
|
|
+ max-width: 50%;
|
|
|
+ overflow: hidden;
|
|
|
+ white-space: pre;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ font-size: 48px;
|
|
|
+ font-family: Source Han Sans CN-Heavy, Source Han Sans CN;
|
|
|
+ font-weight: 800;
|
|
|
+ color: #FFFFFF;
|
|
|
+ padding-top: 20px;
|
|
|
+ padding-bottom: 20px;
|
|
|
+ border-top: 1px solid rgba(217, 217, 217, 0.2);
|
|
|
+ border-bottom: 1px solid rgba(217, 217, 217, 0.2);
|
|
|
+ }
|
|
|
+ >form {
|
|
|
+ position: absolute;
|
|
|
+ top: 196px;
|
|
|
+ left: 81px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ >input {
|
|
|
+ background: rgba(255,255,255,0.1);
|
|
|
+ border-radius: 3px 3px 3px 3px;
|
|
|
+ border: 1px solid rgba(255, 255, 255, 0.5);
|
|
|
+ width: 220px;
|
|
|
+ height: 40px;
|
|
|
+ padding-left: 13px;
|
|
|
+ padding-right: 13px;
|
|
|
+ font-size: 16px;
|
|
|
+ font-family: Source Han Sans CN-Regular, Source Han Sans CN;
|
|
|
+ font-weight: 400;
|
|
|
+ color: #FFFFFF;
|
|
|
+ &:focus {
|
|
|
+ border: 1px solid rgba(255, 255, 255, 1);
|
|
|
+ }
|
|
|
+ &::placeholder {
|
|
|
+ font-size: 16px;
|
|
|
+ font-family: Source Han Sans CN-Regular, Source Han Sans CN;
|
|
|
+ font-weight: 400;
|
|
|
+ color: rgba(255, 255, 255, 0.5);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ >button {
|
|
|
+ margin-left: 8px;
|
|
|
+ width: 40px;
|
|
|
+ height: 40px;
|
|
|
+ background: rgba(255,255,255,0.3);
|
|
|
+ border-radius: 3px 3px 3px 3px;
|
|
|
+ opacity: 1;
|
|
|
+ border: 1px solid #FFFFFF;
|
|
|
+ &:hover {
|
|
|
+ background: rgba(255,255,255,0.5);
|
|
|
+ }
|
|
|
+ >img {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ >ul {
|
|
|
+ position: absolute;
|
|
|
+ top: 272px;
|
|
|
+ left: 81px;
|
|
|
+ max-height: 520px;
|
|
|
+ overflow: auto;
|
|
|
+ >li {
|
|
|
+ display: block;
|
|
|
+ color: #fff;
|
|
|
+ >h2 {
|
|
|
+ width: 323px;
|
|
|
+ height: 47px;
|
|
|
+ background: linear-gradient(92deg, rgba(176,161,121,0) 0%, rgba(176,161,121,0.3) 50%, rgba(176,161,121,0) 100%);
|
|
|
+ border-radius: 3px 3px 3px 3px;
|
|
|
+ font-size: 16px;
|
|
|
+ font-family: Source Han Sans CN-Bold, Source Han Sans CN;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #FFFFFF;
|
|
|
+ text-shadow: 0px 0px 5px #FFD15B;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 17px;
|
|
|
+ >span {
|
|
|
+ margin-left: 13px;
|
|
|
+ margin-right: 13px;
|
|
|
+ }
|
|
|
+ >img {
|
|
|
+ width: 60px;
|
|
|
+ height: 15px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ >.corp-item {
|
|
|
+ position: relative;
|
|
|
+ width: 363px;
|
|
|
+ height: 50px;
|
|
|
+ background: linear-gradient(90deg, #3A454F 0%, rgba(22,28,33,0) 100%);
|
|
|
+ backdrop-filter: blur(3px);
|
|
|
+ border-radius: 3px 3px 3px 3px;
|
|
|
+ opacity: 1;
|
|
|
+ border: 1px solid;
|
|
|
+ border-right: none;
|
|
|
+ border-image: linear-gradient(98deg, rgba(78, 96, 112, 1), rgba(78, 96, 112, 0)) 1 1;
|
|
|
+ padding-left: 72px;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ justify-content: space-around;
|
|
|
+ align-items: flex-start;
|
|
|
+ margin-bottom: 24px;
|
|
|
+ cursor: pointer;
|
|
|
+ >.item-icon {
|
|
|
+ position: absolute;
|
|
|
+ border-radius: 50%;
|
|
|
+ left: 35px;
|
|
|
+ top: 50%;
|
|
|
+ transform: translateY(-50%);
|
|
|
+ width: 8px;
|
|
|
+ height: 8px;
|
|
|
+ background: #6D9DC6;
|
|
|
+ z-index: 2;
|
|
|
+ }
|
|
|
+ >.verticle-line {
|
|
|
+ position: absolute;
|
|
|
+ top: -1px;
|
|
|
+ left: 38px;
|
|
|
+ width: 2px;
|
|
|
+ height: 75px;
|
|
|
+ background: #B0A179 50%;
|
|
|
+ z-index: 1;
|
|
|
+ }
|
|
|
+ &:first-of-type {
|
|
|
+ >.verticle-line {
|
|
|
+ top: 50%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ &:last-of-type {
|
|
|
+ >.verticle-line {
|
|
|
+ top: initial;
|
|
|
+ bottom: 50%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ &:first-of-type:last-of-type {
|
|
|
+ >.verticle-line {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ >span.corp-name {
|
|
|
+ display: block;
|
|
|
+ font-size: 16px;
|
|
|
+ font-family: Source Han Sans CN-Bold, Source Han Sans CN;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #FFFFFF;
|
|
|
+ overflow: hidden;
|
|
|
+ white-space: pre;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ }
|
|
|
+ &.active {
|
|
|
+ >span.corp-name {
|
|
|
+ font-size: 20px;
|
|
|
+ font-family: Source Han Sans CN-Bold, Source Han Sans CN;
|
|
|
+ text-shadow: 0px 0px 16px #BD9D48;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ >span.corp-time {
|
|
|
+ display: block;
|
|
|
+ font-size: 16px;
|
|
|
+ font-family: Source Han Sans CN-Regular, Source Han Sans CN;
|
|
|
+ font-weight: 400;
|
|
|
+ color: #FFFFFF;
|
|
|
+ }
|
|
|
+ &:hover {
|
|
|
+ background: linear-gradient(90deg, #B0A179 0%, rgba(255,209,91,0) 100%);
|
|
|
+ border-image: linear-gradient(98deg, rgba(176, 161, 121, 1), rgba(176, 161, 121, 0)) 1 1;
|
|
|
+ >.item-icon {
|
|
|
+ background: #FFFFFF;
|
|
|
+ box-shadow: 0px 0px 12px 0px #FFD15B, 0px 0px 8px 0px #FFD15B, 0px 0px 10px 0px #FFD15B, 0px 0px 5px 0px #FFD15B;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ &.active {
|
|
|
+ background: linear-gradient(90deg, #B0A179 0%, rgba(255,209,91,0) 100%);
|
|
|
+ border-image: linear-gradient(98deg, rgba(176, 161, 121, 1), rgba(176, 161, 121, 0)) 1 1;
|
|
|
+ >.item-icon {
|
|
|
+ background: #FFFFFF;
|
|
|
+ box-shadow: 0px 0px 12px 0px #FFD15B, 0px 0px 8px 0px #FFD15B, 0px 0px 10px 0px #FFD15B, 0px 0px 5px 0px #FFD15B;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ &::-webkit-scrollbar { background: transparent; width: 4px; } /*宽度是对垂直滚动条而言,高度是对水平滚动条而言*/
|
|
|
+ &::-webkit-scrollbar-thumb {
|
|
|
+ background: transparent;
|
|
|
+ border-radius: 2px;
|
|
|
+ }
|
|
|
+ &:hover {
|
|
|
+ &::-webkit-scrollbar-thumb {
|
|
|
+ background: rgba(220, 231, 240, 0.2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ >nav {
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ width: 100%;
|
|
|
+ height: 112px;
|
|
|
+ border-radius: 5px 5px 0 0;
|
|
|
+ border-top: solid 1px #D2BD84;
|
|
|
+ box-shadow: inset 0px 2px 2px 0px rgba(210,189,132,0.45), 0px -9px 24px 0px rgba(183,162,109,0.25);
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ transition: all 0.5s;
|
|
|
+ >button.tab-item {
|
|
|
+ font-size: 30px;
|
|
|
+ font-family: Source Han Sans CN-Regular, Source Han Sans CN;
|
|
|
+ font-weight: 400;
|
|
|
+ color: #FFFFFF;
|
|
|
+ margin-left: 200px;
|
|
|
+ opacity: 0.5;
|
|
|
+ position: relative;
|
|
|
+ >img.decorator {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+ &:first-of-type {
|
|
|
+ margin-left: initial;
|
|
|
+ }
|
|
|
+ &.active {
|
|
|
+ opacity: initial;
|
|
|
+ >img.decorator {
|
|
|
+ display: initial;
|
|
|
+ position: absolute;
|
|
|
+ left: 50%;
|
|
|
+ bottom: -15px;
|
|
|
+ transform: translateX(-50%);
|
|
|
+ width: 150%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ @media only screen and (max-width: 1400px) {
|
|
|
+ >button.tab-item {
|
|
|
+ margin-left: 100px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ >button.show-hide {
|
|
|
+ position: absolute;
|
|
|
+ right: 82px;
|
|
|
+ bottom: 34px;
|
|
|
+ width: 36px;
|
|
|
+ height: 36px;
|
|
|
+ background-size: cover;
|
|
|
+ background-repeat: no-repeat;
|
|
|
+ background-position: center center;
|
|
|
+ }
|
|
|
+ @media only screen and (max-width: 1400px) {
|
|
|
+ >button.show-hide {
|
|
|
+ right: 10px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|