This commit is contained in:
hh
2021-12-31 17:24:58 +08:00
parent cab6a9cfa8
commit 6c59ae9f7f
12 changed files with 595 additions and 28 deletions

View File

@ -17,6 +17,7 @@
"dependencies": {
"@element-plus/icons": "0.0.11",
"@vueuse/core": "6.4.1",
"animate.css": "^4.1.1",
"axios": "0.24.0",
"echarts": "5.2.1",
"element-plus": "1.2.0-beta.3",

View File

@ -0,0 +1,9 @@
<template>
<div class="webFooter">
页面底部
</div>
</template>
<script setup lang="ts">
import { onMounted, reactive, watch } from "vue";
</script>

View File

@ -9,8 +9,8 @@
<li class="menu-item1">
<div
class="menu-item-tit"
:class="pagePath == '' ? 'active' : ''"
@click="handlePath('')"
:class="pagePath == '/' ? 'active' : ''"
@click="handlePath('/')"
>
首页
</div>
@ -136,7 +136,7 @@ dt {
list-style: none;
}
.webHead {
position: absolute;
position: fixed;
z-index: 2001;
top: 0;
left: 0;

View File

@ -36,6 +36,8 @@ import TreeSelect from '@/components/TreeSelect'
// 字典标签组件
import DictTag from '@/components/DictTag'
import 'animate.css'
const app = createApp(App)
// 全局方法挂载

View File

@ -37,8 +37,7 @@ export const constantRoutes = [
},
{
path: '',
name: 'index',
component: () => import('../views/website/index.vue'),
component: () => import('../views/website/index/index.vue'),
},
{
path: 'solution',

View File

@ -1,22 +0,0 @@
<template>
<div class="index">
index
</div>
</template>
<script setup>
</script>
<style lang="scss" scoped>
.index {
position: relative;
height: 100%;
width: 100%;
.content {
width: 100%;
padding-top: 80px;
min-height: 100%;
}
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

View File

@ -0,0 +1,166 @@
<template>
<div class="box">
<div>
<el-row>
<el-col :push="4" :sm="10" :md="12">
<div class="tab">
<div
v-for="(v,index) in queryParams.tabList"
:class="{ active: queryParams.tabIndex == index }"
@click="queryParams.tabIndex = index"
>{{ v }}</div>
</div>
</el-col>
</el-row>
<div style="height: 16px;"></div>
<el-row>
<el-col :push="4" :sm="10" :md="12">
<el-input v-model.trim="queryParams.input3" placeholder="请输入检索词">
<template #append>
<el-button class="x_btns" icon="Search" @click="handleQuery">搜索</el-button>
</template>
</el-input>
</el-col>
<el-col :push="4" :sm="10" :md="8">
<div class="btnsWrap">
<el-button class="x_btns" @click="handleQuery">发布需求</el-button>
<el-button class="x_btns" @click="handleQuery">专家机构录入</el-button>
</div>
</el-col>
</el-row>
<div style="height: 15vh"></div>
<el-row>
<el-col :push="3" :pull="3" :span="18">
<div class="numBox">
<div>
<div class="val">9800+</div>
<div class="des">专家数量</div>
</div>
<div>
<div class="val">98000+</div>
<div class="des">专利成果数量</div>
</div>
<div>
<div class="val">10000+</div>
<div class="des">需求数量</div>
</div>
<div>
<div class="val">120000+</div>
<div class="des">对接数量</div>
</div>
<div>
<div class="val">11000+</div>
<div class="des">实验室数量</div>
</div>
</div>
</el-col>
</el-row>
</div>
</div>
</template>
<script setup lang="ts">
import { onMounted, reactive } from "vue";
const queryParams = reactive({
pageNum: 1,
pageSize: 10,
input3: "",
tabList: [
'找企业', '找成果', '找实验室', '找专利', '找专家', '接需求'
],
tabIndex: 0,
});
function handleQuery() {
queryParams.pageNum = 1;
getList();
}
function getList() { }
onMounted(() => {
console.log("onmunted");
});
</script>
<style lang="scss" scoped>
.x_btns {
font-size: 14px !important;
font-weight: 400;
}
.box {
height: 100%;
width: 100%;
display: flex;
display: -webkit-flex;
align-items: center;
justify-content: center;
& > div {
width: 100%;
}
}
.btnsWrap {
margin: 0 0 0 40px;
.el-button {
height: 36px;
padding: 10px 25px;
}
}
.numBox {
display: flex;
display: -webkit-flex;
& > div {
flex: 1;
height: 200px;
display: -webkit-flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
.val {
font-size: 36px;
font-family: DIN;
font-weight: 400;
color: #333333;
margin-bottom: 10px;
}
.des {
font-size: 16px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #333333;
}
}
.tab {
width: 480px;
height: 42px;
overflow: hidden;
& > div {
width: 80px;
height: 42px;
line-height: 42px;
text-align: center;
font-size: 14px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #333333;
float: left;
cursor: pointer;
user-select: none;
}
& > div.active {
font-size: 14px;
font-weight: 500;
color: #ffffff;
line-height: 38px;
background-image: url(./img/index1-bg1.png);
background-size: cover;
}
}
.wrap {
padding-left: 460px;
}
.search {
width: 720px;
}
</style>

View File

@ -0,0 +1,245 @@
<template>
<div class="box">
<div class="wrap">
<div class="tit">
<div class="left">科技活动</div>
<div class="right">
<div class="publish">发布活动</div>
<div class="more">更多</div>
</div>
</div>
<div class="content">
<div class="item one">
<img
src="https://t7.baidu.com/it/u=1820929524,3700012367&fm=193&f=GIF"
style="width: 100%"
alt
/>
<div class="des">
<div class="left">
<div>助力工厂公辅系统数字化及节能提效</div>
<div class="time">活动时间2021-11-01 08:00</div>
<div>1988人已观看</div>
</div>
<div class="right">19.9元报名</div>
</div>
</div>
<div class="item">
<div class="img">
<img src="https://t7.baidu.com/it/u=1820929524,3700012367&fm=193&f=GIF" />
</div>
<div class="dess">
<div class="txt">助力工厂公辅系统数字化及节能提效助力工厂公辅系统数字化及节能提效</div>
<div class="dess1">
<div class="time">活动时间2021-11-01 08:00</div>
<div>1988人已观看</div>
</div>
<div class="enroll">19.9元报名</div>
</div>
</div>
<div class="item">
<div class="img">
<img src="https://t7.baidu.com/it/u=1820929524,3700012367&fm=193&f=GIF" />
</div>
<div class="dess">
<div class="txt">助力工厂公辅系统数字化及节能提效助力工厂公辅系统数字化及节能提效</div>
<div class="dess1">
<div class="time">活动时间2021-11-01 08:00</div>
<div>1988人已观看</div>
</div>
<div class="enroll">19.9元报名</div>
</div>
</div>
<div class="item">
<div class="img">
<img src="https://t7.baidu.com/it/u=1820929524,3700012367&fm=193&f=GIF" />
</div>
<div class="dess">
<div class="txt">助力工厂公辅系统数字化及节能提效助力工厂公辅系统数字化及节能提效</div>
<div class="dess1">
<div class="time">活动时间2021-11-01 08:00</div>
<div>1988人已观看</div>
</div>
<div class="enroll">19.9元报名</div>
</div>
</div>
<div class="item">
<div class="img">
<img src="https://t7.baidu.com/it/u=1820929524,3700012367&fm=193&f=GIF" />
</div>
<div class="dess">
<div class="txt">助力工厂公辅系统数字化及节能提效助力工厂公辅系统数字化及节能提效</div>
<div class="dess1">
<div class="time">活动时间2021-11-01 08:00</div>
<div>1988人已观看</div>
</div>
<div class="enroll end">已结束</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script lang="ts">
import { defineComponent, onMounted, reactive } from "vue";
export default defineComponent({
name: "music",
components: {},
setup() {
let state = reactive({});
onMounted(() => {
console.log("onmunted");
});
return {
state,
};
},
});
</script>
<style lang="scss" scoped>
.box {
height: 100%;
width: 100%;
display: flex;
display: -webkit-flex;
align-items: center;
justify-content: center;
div.wrap {
width: 1400px;
}
}
.tit {
overflow: hidden;
padding: 20px 0;
.left {
float: left;
font-size: 36px;
font-family: Source Han Sans CN;
font-weight: 300;
color: #333333;
}
.right {
float: right;
font-size: 20px;
font-family: Source Han Sans CN;
.publish {
display: inline-block;
font-weight: 500;
color: #0054ff;
margin-right: 20px;
cursor: pointer;
user-select: none;
}
.more {
display: inline-block;
font-weight: 400;
color: #333333;
cursor: pointer;
user-select: none;
}
}
}
.content {
width: 101%;
overflow: hidden;
.time {
display: inline-block;
padding: 2px 8px;
margin: 2px 0;
background: #0054ff;
border-radius: 10px;
font-size: 14px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #ffffff;
}
.item {
position: relative;
float: left;
width: 24%;
margin: 0 1% 1% 0;
.dess {
overflow: hidden;
.txt {
overflow: hidden;
text-overflow:ellipsis;
white-space: nowrap;
}
.dess1 {
float: left;
}
.enroll {
margin-top: 10px;
float: right;
width: 90px;
height: 30px;
line-height: 30px;
background: #0054FF;
font-size: 16px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #FFFFFF;
text-align: center;
&.end {
background: #B4B4B4;
}
}
}
img {
top: 0;
left: 0;
position: absolute;
width: 100%;
height: 100%;
}
.img {
position: relative;
width: 100%;
height: 0;
padding-bottom: 54%;
}
&.one {
width: 49%;
height: 0;
padding-bottom: 36.75%;
overflow: hidden;
.des {
position: absolute;
height: 94px;
width: 100%;
bottom: 0;
background: rgba(0, 0, 0, 0.2);
overflow: hidden;
.left {
float: left;
font-size: 16px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #ffffff;
margin: 16px 0 0 18px;
}
.right {
margin: 27px 38px;
float: right;
width: 120px;
height: 40px;
line-height: 40px;
background: #0054ff;
font-size: 16px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #ffffff;
text-align: center;
}
}
}
}
}
</style>

View File

@ -0,0 +1,19 @@
<template>
<div class="box">
<webFooter></webFooter>
</div>
</template>
<script setup lang="ts">
import { onMounted, reactive } from "vue";
import webFooter from "../../../../components/webFooter/index.vue";
onMounted(() => {
console.log("onmunted");
});
</script>
<style lang="scss" scoped>
.box {
}
</style>

View File

@ -0,0 +1,146 @@
<template>
<div class="home">
<transition-group
:enter-active-class="state.animate.in"
:leave-active-class="state.animate.out"
>
<div
v-for="(item, $index) in state.boxList"
class="box"
:key="$index"
:style="`z-index: ${item.zIndex};`"
v-show="state.showBox === $index"
>
<component :is="item.comp"></component>
</div>
</transition-group>
</div>
</template>
<script setup lang="ts">
import { reactive, onMounted } from "vue";
import index1 from './comp/index1.vue';
import index2 from './comp/index2.vue';
import index8 from './comp/index8.vue';
let state = reactive({
showBox: 0,
boxList: [
{
comp: index1,
zIndex: 1,
title: "index1",
},
{
comp: index2,
zIndex: 1,
title: "index2",
},
{
comp: index8,
zIndex: 1,
title: "index8",
},
],
animate: {
in: "animate__animated animate__fadeInDown",
out: "animate__animated animate__fadeOutDown",
},
});
function choice(i: number) {
if (i === state.showBox) return false;
// style 的 z-index 属性提升到最上面
state.boxList.forEach((item, idx) => {
if (idx === i) {
item.zIndex = 100;
} else {
item.zIndex = 1;
}
});
// 根据判断当前显示的 box 下标和点击的下标进行对比,修改动画方向
const animateType = "fade";
if (i > state.showBox) {
state.animate.in = `animate__animated animate__${animateType}InUp`;
state.animate.out = `animate__animated animate__${animateType}OutUp`;
} else {
state.animate.in = `animate__animated animate__${animateType}InDown`;
state.animate.out = `animate__animated animate__${animateType}OutDown`;
}
state.showBox = i;
}
const mouseWheelHandler = (event: any) => {
let i = state.showBox;
if (mouseWheelFlag(event) === "up") {
i = i - 1 < 0 ? state.boxList.length - 1 : i - 1;
} else {
i = i + 1 > state.boxList.length - 1 ? 0 : i + 1;
}
choice(i);
};
/**
* mouseWheelFlag
* @param event window.event
* @returns up | down
*/
const mouseWheelFlag: (event: any) => string = (event: any) => {
let delta = 0;
if (!event) event = window.event;
if (event.wheelDelta) {
//IE、chrome浏览器使用的是wheelDelta并且值为“正负120”
delta = event.wheelDelta / 120;
if ((window as any).opera) delta = -delta; //因为IE、chrome等向下滚动是负值FF是正值为了处理一致性在此取反处理
} else if (event.detail) {
//FF浏览器使用的是detail,其值为“正负3”
delta = -event.detail / 3;
}
return delta > 0 ? "up" : "down";
};
/**
* throttle 节流
* @param func 须要包装的函数
* @param delay 延迟时间单位ms
*/
const throttle: (func: any, delay: number, immediate?: boolean) => any = (
func,
delay = 100
) => {
let flag = false;
return (...args: any) => {
if (!flag) {
flag = true;
setTimeout(() => {
flag = false;
func.call(this, ...args);
}, delay);
}
};
};
onMounted(() => {
window.addEventListener("mousewheel", throttle(mouseWheelHandler, 600), true);
});
</script>
<style lang="scss" scoped>
.box {
height: calc(100vh - 80px);
width: 100%;
backdrop-filter: blur(4rpx);
}
.home {
position: relative;
height: calc(100vh - 80px);
overflow: hidden;
width: 100%;
.box {
position: absolute;
}
}
</style>

View File

@ -1,7 +1,9 @@
<template>
<div class="index">
<webHead></webHead>
<router-view class="content" />
<div class="content">
<router-view />
</div>
</div>
</template>