@@ -4,7 +4,7 @@ import request from './request' | |||||
* 数字人视频 | * 数字人视频 | ||||
* @returns request | * @returns request | ||||
*/ | */ | ||||
export const videoList = (num = 1, size = 10) => { | |||||
export const videoList = (num = 1, size = 100) => { | |||||
return request({ | return request({ | ||||
method: 'GET', | method: 'GET', | ||||
url: `/aigc/videoList?pageNum=${num}&pageSize=${size}` | url: `/aigc/videoList?pageNum=${num}&pageSize=${size}` | ||||
@@ -15,7 +15,7 @@ export const videoList = (num = 1, size = 10) => { | |||||
* 数字人直播(共用轮播) | * 数字人直播(共用轮播) | ||||
* @returns request | * @returns request | ||||
*/ | */ | ||||
export const shuzirenZhiBoList = (num = 1, size = 10) => { | |||||
export const shuzirenZhiBoList = (num = 1, size = 100) => { | |||||
return request({ | return request({ | ||||
method: 'GET', | method: 'GET', | ||||
url: `/aigc/shuzirenZhiBoList?pageNum=${num}&pageSize=${size}` | url: `/aigc/shuzirenZhiBoList?pageNum=${num}&pageSize=${size}` | ||||
@@ -32,6 +32,17 @@ export const hotlist = (num = 1, size = 10) => { | |||||
}) | }) | ||||
} | } | ||||
/** | |||||
* 热点文章 | |||||
* @returns request | |||||
*/ | |||||
export const carArticle = () => { | |||||
return request({ | |||||
method: 'GET', | |||||
url: '/news/list?pageNum=1&pageSize=6&type=2' | |||||
}) | |||||
} | |||||
/** | /** | ||||
* 广告 | * 广告 | ||||
* @returns request | * @returns request | ||||
@@ -48,10 +48,10 @@ export const hotnews = (num = 1, size = 10) => { | |||||
* 资讯 | * 资讯 | ||||
* @returns request | * @returns request | ||||
*/ | */ | ||||
export const zixun = (num = 1, size = 10, flag = 'XR') => { | |||||
export const zixun = (num = 1, size = 10) => { | |||||
return request({ | return request({ | ||||
method: 'GET', | method: 'GET', | ||||
url: `/news/list?pageNum=${num}&pageSize=4&type=3&subType=31&tag=${flag}` | |||||
url: `/news/list?pageNum=${num}&pageSize=4&type=3&subType=31` | |||||
}) | }) | ||||
} | } | ||||
@@ -0,0 +1,174 @@ | |||||
<template> | |||||
<div class="hotnews" > | |||||
<div class="imgtxt" @click="routerToarticleDetails(hotnews.detail)"> | |||||
<img :src="hotnews.img"> | |||||
<a class="newsTitle">{{ hotnews.title }}</a> | |||||
</div> | |||||
<div class="hottxt"> | |||||
<div id="htitle"> | |||||
<a class="tle">热点新闻</a> | |||||
<el-button type="text" @click="routerTo">MORE+</el-button> | |||||
</div> | |||||
<div class="hotList"> | |||||
<div class="list" v-for="(item, index) in hotnewsList" :key="index" @click="routerToarticleDetails(item.detail)"> | |||||
<img :src="item.img"> | |||||
<a>{{ item.title }}</a> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</template> | |||||
<script> | |||||
export default { | |||||
props: { | |||||
}, | |||||
data() { | |||||
return {} | |||||
} | |||||
} | |||||
</script> | |||||
<style lang="scss" scoped> | |||||
.hotnews { | |||||
min-height: 100px; | |||||
margin-top: 20px; | |||||
min-height: 470px; | |||||
background-color: #FFFFFF; | |||||
display: flex; | |||||
margin-bottom: 30px; | |||||
background-image: url('../../assets/hotTopLeft.png'); | |||||
background-position: 101% 0; /* 调整这些值来改变显示的部分 */ | |||||
background-size: 30% 50%; /* 使用 'cover' 或 'contain',或者设置具体尺寸 */ | |||||
background-repeat: no-repeat; | |||||
.imgtxt { | |||||
width: 560px; | |||||
position: relative; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
margin-left: 20px; | |||||
img { | |||||
width: 560px; | |||||
} | |||||
.newsTitle{ | |||||
position: absolute; | |||||
bottom: 5%; | |||||
left: 0; | |||||
display: inline-block; | |||||
font-size: 18px; | |||||
font-weight: bold; | |||||
color: #FFFFFF; | |||||
line-height: 48px; | |||||
width: 100%; | |||||
background-color: #0000007e; | |||||
} | |||||
} | |||||
.hottxt { | |||||
display: flex; | |||||
justify-content: space-around; | |||||
flex-direction: column; | |||||
align-items: center; | |||||
flex: 1; | |||||
margin-left: 35px; | |||||
.htitle { | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
width: 95%; | |||||
.tle { | |||||
z-index: 9; | |||||
font-size: 26px; | |||||
font-weight: bold; | |||||
color: #00161C; | |||||
line-height: 48px; | |||||
display: inline-block; | |||||
position: relative; | |||||
text-decoration: none; /* 移除默认的下划线 */ | |||||
} | |||||
.tle::after { | |||||
content: ''; | |||||
position: absolute; | |||||
left: -15px; | |||||
bottom: 10px; | |||||
width: 65%; | |||||
height: 6px; /* 横线高度为文字高度的一半 */ | |||||
background-color: #07CAAF;; /* 横线颜色与文字颜色相同 */ | |||||
z-index: -1; | |||||
} | |||||
.el-button { | |||||
font-size: 16px; | |||||
font-weight: bold; | |||||
color: #07CAAF; | |||||
line-height: 48px; | |||||
cursor: pointer; | |||||
z-index: 9999; | |||||
} | |||||
} | |||||
} | |||||
.hotList { | |||||
height: 76%; | |||||
display: flex; | |||||
flex-wrap: wrap; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
.list { | |||||
z-index: 999; | |||||
display: flex; | |||||
flex-direction: column; | |||||
align-items: center; | |||||
justify-content: center; | |||||
width: 150px; | |||||
margin-right: 39px; | |||||
img { | |||||
width: 150px; | |||||
height: 112px; | |||||
border-radius: 10px; | |||||
} | |||||
a { | |||||
font-size: 14px; | |||||
font-weight: 400; | |||||
color: #010101; | |||||
margin-top: 14px; | |||||
white-space: nowrap; | |||||
overflow: hidden; | |||||
text-overflow: ellipsis; | |||||
width: 150px; | |||||
// line-height: 48px; | |||||
} | |||||
} | |||||
} | |||||
.top { | |||||
margin-bottom: 30px; | |||||
background-color: #FFFFFF; | |||||
display: flex; | |||||
background-image: url('../../assets/hotTopLeft.png'); | |||||
background-position: 101% 0; /* 调整这些值来改变显示的部分 */ | |||||
background-size: 30% 50%; /* 使用 'cover' 或 'contain',或者设置具体尺寸 */ | |||||
background-repeat: no-repeat; | |||||
.imgtxt { | |||||
width: 560px; | |||||
position: relative; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
margin-left: 20px; | |||||
img { | |||||
width: 560px; | |||||
} | |||||
.newsTitle{ | |||||
position: absolute; | |||||
bottom: 5%; | |||||
left: 0; | |||||
display: inline-block; | |||||
font-size: 18px; | |||||
font-weight: bold; | |||||
color: #FFFFFF; | |||||
line-height: 48px; | |||||
width: 100%; | |||||
background-color: #0000007e; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
</style> |
@@ -4,21 +4,19 @@ | |||||
<div class="swiper-containerhor"> | <div class="swiper-containerhor"> | ||||
<div class="swiper-wrapper"> | <div class="swiper-wrapper"> | ||||
<div class="swiper-slide" v-for="(item, index) in bannerArray" :key="index"> | <div class="swiper-slide" v-for="(item, index) in bannerArray" :key="index"> | ||||
<div v-if="item.flag === 'image'" class="imagezb"> | |||||
<img class="swiperimg" :src="item.img"> | |||||
<div v-if="type === 'image'" class="imagezb"> | |||||
<img class="swiperimg" :src="item.image"> | |||||
<el-button>进入直播间</el-button> | <el-button>进入直播间</el-button> | ||||
<div class="textzb"> | <div class="textzb"> | ||||
<a class="titlezb">主播: {{ item.name }}</a> | |||||
<a class="contentzb">内容: {{ item.content }}</a> | |||||
<a class="titlezb">主播: {{ item.title }}</a> | |||||
<a class="contentzb">内容: {{ item.subTitle }}</a> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<div v-else class="videozb"> | <div v-else class="videozb"> | ||||
<video :id="'davideo'+index" :poster="item.img" @click="videoPlayer(`davideo${index}`, `daplay${index}`)"> | |||||
<source :src="item.video"> | |||||
</video> | |||||
<img class="play" src="@/assets/play.png" @click="videoPlayer(`davideo${index}`, `daplay${index}`)" :id="'daplay'+index"> | |||||
<img class="swiperimg" :src="item.image"> | |||||
<img class="play" src="@/assets/play.png" @click.prevent="videoFn(item)"> | |||||
<div class="textzb"> | <div class="textzb"> | ||||
<a class="contentzb">{{ item.content }}</a> | |||||
<a>{{ item.title }}</a> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
@@ -30,6 +28,9 @@ | |||||
<!-- Add Pagination --> | <!-- Add Pagination --> | ||||
<!-- <div class="swiper-paginationhor"></div> --> | <!-- <div class="swiper-paginationhor"></div> --> | ||||
</div> | </div> | ||||
<el-dialog :visible.sync="videoDialogVisible" width="400px" > | |||||
<VideoDialog :url="videoUrl"></VideoDialog> | |||||
</el-dialog> | |||||
</div> | </div> | ||||
</template> | </template> | ||||
@@ -38,13 +39,22 @@ | |||||
import Swiper from 'swiper' | import Swiper from 'swiper' | ||||
import 'swiper/dist/js/swiper' | import 'swiper/dist/js/swiper' | ||||
import 'swiper/dist/css/swiper.css' | import 'swiper/dist/css/swiper.css' | ||||
import VideoDialog from '@/components/video' | |||||
export default { | export default { | ||||
name: 'bannerSwiper', | name: 'bannerSwiper', | ||||
props: { | props: { | ||||
bannerArray: Array | |||||
bannerArray: Array, | |||||
type: { | |||||
type: String, | |||||
default: '' | |||||
} | |||||
}, | }, | ||||
components: { VideoDialog }, | |||||
data() { | data() { | ||||
return { } | |||||
return { | |||||
videoDialogVisible: false, | |||||
videoUrl: '', | |||||
} | |||||
}, | }, | ||||
mounted() { | mounted() { | ||||
setTimeout(() => { | setTimeout(() => { | ||||
@@ -67,16 +77,9 @@ export default { | |||||
loop: true | loop: true | ||||
}) | }) | ||||
}, | }, | ||||
videoPlayer (value, play) { | |||||
const id = document.getElementById(value) | |||||
const playid = document.getElementById(play) | |||||
if (id.paused) { | |||||
id.play() | |||||
playid.style.display = 'none' | |||||
} else { | |||||
id.pause() | |||||
playid.style.display = 'block' | |||||
} | |||||
videoFn (item) { | |||||
this.videoUrl = item.link | |||||
this.videoDialogVisible = true | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -113,6 +116,10 @@ export default { | |||||
width: 230px; | width: 230px; | ||||
display: block; | display: block; | ||||
} | } | ||||
.imagezb{ | |||||
position: relative; | |||||
width: 230px; | |||||
} | |||||
.el-button { | .el-button { | ||||
margin-left: -73px; | margin-left: -73px; | ||||
border: none; | border: none; | ||||
@@ -152,9 +159,10 @@ export default { | |||||
.play { | .play { | ||||
position: absolute; | position: absolute; | ||||
margin: 0 auto; | margin: 0 auto; | ||||
top: 50%; | |||||
margin-left: 40%; | |||||
margin-top: -60px; | |||||
top: 165px; | |||||
left: 50%; | |||||
margin-left: -27.5px; | |||||
width: 55px; | |||||
} | } | ||||
video { | video { | ||||
width: 230px; | width: 230px; | ||||
@@ -170,8 +178,11 @@ export default { | |||||
a { | a { | ||||
width: 100%; | width: 100%; | ||||
display: inline-block; | display: inline-block; | ||||
text-align: left; | |||||
line-height: 30px; | |||||
text-align: center; | |||||
font-size: 18px; | |||||
font-weight: 400; | |||||
color: #030303; | |||||
line-height: 24px; | |||||
} | } | ||||
.contentzb{ | .contentzb{ | ||||
margin-top: 10px; | margin-top: 10px; | ||||
@@ -50,9 +50,9 @@ | |||||
<div class="content"> | <div class="content"> | ||||
<div class="top"> | <div class="top"> | ||||
<div id="szr"> | <div id="szr"> | ||||
<a>数字人直播</a> | |||||
<a>正在直播</a> | |||||
</div> | </div> | ||||
<SwiperHor :banner-array="aigczb" /> | |||||
<SwiperHor :banner-array="aigczb" type="image"/> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="gg gg2" v-if="gg2.img"> | <div class="gg gg2" v-if="gg2.img"> | ||||
@@ -67,7 +67,7 @@ | |||||
<div id="szr"> | <div id="szr"> | ||||
<a>数字人短视频</a> | <a>数字人短视频</a> | ||||
</div> | </div> | ||||
<SwiperHor :banner-array="aigcsp" /> | |||||
<SwiperHor :banner-array="aigcsp" type="video" /> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
@@ -169,29 +169,13 @@ export default { | |||||
async getshuzirenZhiBoList () { | async getshuzirenZhiBoList () { | ||||
const { data: { message, data } } = await shuzirenZhiBoList() | const { data: { message, data } } = await shuzirenZhiBoList() | ||||
if (message === 'success') { | if (message === 'success') { | ||||
for (const iter of data.list) { | |||||
this.aigczb.push({ | |||||
img: iter.image.split('?')[0], | |||||
name: iter.title, | |||||
content: iter.subTitle, | |||||
flag: 'image' | |||||
}) | |||||
} | |||||
this.aigczb = data.list | |||||
} | } | ||||
}, | }, | ||||
async getvideoList () { | async getvideoList () { | ||||
const { data: { message, data } } = await videoList() | const { data: { message, data } } = await videoList() | ||||
if (message === 'success') { | if (message === 'success') { | ||||
for (const iter of data.list) { | |||||
console.log(iter, '111111') | |||||
this.aigcsp.push({ | |||||
video: iter.link ? iter.link : '', | |||||
img: iter.image.split('?')[0], | |||||
name: iter.subTitle ? iter.subTitle : '主播名', | |||||
content: iter.title, | |||||
flag: 'video' | |||||
}) | |||||
} | |||||
this.aigcsp = data.list | |||||
} | } | ||||
}, | }, | ||||
changenews (item) { | changenews (item) { | ||||
@@ -174,16 +174,6 @@ export default { | |||||
const { data: { message, data: { list } } } = await yuanyuzhouHotList() | const { data: { message, data: { list } } } = await yuanyuzhouHotList() | ||||
if (message === 'success') { | if (message === 'success') { | ||||
this.daliay = list | this.daliay = list | ||||
// for (const iter of list) { | |||||
// this.daliay.left.push({ | |||||
// title: iter.news.title, | |||||
// content: iter.news.detail | |||||
// }) | |||||
// this.daliay.right.push({ | |||||
// img: iter.news.image, | |||||
// video: iter.news.video | |||||
// }) | |||||
// } | |||||
} | } | ||||
}, | }, | ||||
async gethotnewsConfig () { | async gethotnewsConfig () { | ||||
@@ -195,15 +185,6 @@ export default { | |||||
videoPlayer (item) { | videoPlayer (item) { | ||||
this.videoUrl = item.news.video | this.videoUrl = item.news.video | ||||
this.videoDialogVisible = true | this.videoDialogVisible = true | ||||
// const id = document.getElementById(value) | |||||
// const playid = document.getElementById(play) | |||||
// if (id.paused) { | |||||
// id.play() | |||||
// playid.style.display = 'none' | |||||
// } else { | |||||
// id.pause() | |||||
// playid.style.display = 'block' | |||||
// } | |||||
}, | }, | ||||
async gethotlist () { | async gethotlist () { | ||||
const { data: { message, data } } = await hotnews() | const { data: { message, data } } = await hotnews() | ||||
@@ -53,10 +53,10 @@ | |||||
</div> | </div> | ||||
<div id="hotList"> | <div id="hotList"> | ||||
<div class="list" v-for="(item, index) in carList" :key="index" @click="routerToarticleDetails(item.detail)"> | <div class="list" v-for="(item, index) in carList" :key="index" @click="routerToarticleDetails(item.detail)"> | ||||
<img :src="item.img"> | |||||
<img :src="item.image"> | |||||
<div class="txt"> | <div class="txt"> | ||||
<a class="title">{{ item.title }}</a> | <a class="title">{{ item.title }}</a> | ||||
<a class="subtitle">{{ item.subtitle }}</a> | |||||
<a class="subtitle">{{ item.detailText }}</a> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
@@ -70,7 +70,7 @@ | |||||
<script> | <script> | ||||
/* eslint-disable */ | /* eslint-disable */ | ||||
import Swiper from '@/components/swiper' | import Swiper from '@/components/swiper' | ||||
import { lunboList, hotNewsConfig, guanggao, hotlist, videoList } from '@/api/car.js' | |||||
import { lunboList, hotNewsConfig, guanggao, hotlist, videoList, carArticle } from '@/api/car.js' | |||||
import VideoDialog from '@/components/video' | import VideoDialog from '@/components/video' | ||||
export default { | export default { | ||||
name: 'information', | name: 'information', | ||||
@@ -105,7 +105,7 @@ export default { | |||||
this.getguanggao() | this.getguanggao() | ||||
this.gethotlist() | this.gethotlist() | ||||
this.getvideoList() | this.getvideoList() | ||||
this.getCarArticle() | |||||
}, | }, | ||||
methods: { | methods: { | ||||
routerToarticleDetails (value) { | routerToarticleDetails (value) { | ||||
@@ -154,12 +154,6 @@ export default { | |||||
subtitle: data.list[index].subTitle, | subtitle: data.list[index].subTitle, | ||||
detail: data.list[index].detail | detail: data.list[index].detail | ||||
}) | }) | ||||
this.carList.push({ | |||||
title: data.list[index].title, | |||||
img: data.list[index].image, | |||||
subtitle: data.list[index].subTitle, | |||||
detail: data.list[index].detail | |||||
}) | |||||
} | } | ||||
} | } | ||||
}, | }, | ||||
@@ -172,6 +166,12 @@ export default { | |||||
videoPlayer (item) { | videoPlayer (item) { | ||||
this.videoUrl = item.link | this.videoUrl = item.link | ||||
this.videoDialogVisible = true | this.videoDialogVisible = true | ||||
}, | |||||
async getCarArticle() { | |||||
const { data: { message, data } } = await carArticle() | |||||
if (message === 'success') { | |||||
this.carList = data.list | |||||
} | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -30,21 +30,16 @@ | |||||
</div> | </div> | ||||
<div id="daliay"> | <div id="daliay"> | ||||
<div class="content"> | <div class="content"> | ||||
<!-- <div class="top"> | |||||
</div> --> | |||||
<div class="htitle"> | <div class="htitle"> | ||||
<a class="tle">资讯</a> | <a class="tle">资讯</a> | ||||
<!-- <div class="item"> | |||||
<a v-for="item in information" :key="item" @click="changenews(item)" :class="{ clk: informationitem === item }">{{ item }}</a> | |||||
</div> --> | |||||
<el-button type="text" @click="routerTo">MORE+</el-button> | <el-button type="text" @click="routerTo">MORE+</el-button> | ||||
</div> | </div> | ||||
<div id="hotList"> | <div id="hotList"> | ||||
<div class="list" v-for="(item, index) in zixun" :key="index" @click="routerToarticleDetails(item.detail)"> | <div class="list" v-for="(item, index) in zixun" :key="index" @click="routerToarticleDetails(item.detail)"> | ||||
<img :src="item.img"> | |||||
<img :src="item.image"> | |||||
<div class="txt"> | <div class="txt"> | ||||
<a class="title">{{ item.title }}</a> | <a class="title">{{ item.title }}</a> | ||||
<a class="subtitle">{{ item.subtitle }}</a> | |||||
<a class="subtitle">{{ item.detailText }}</a> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
@@ -66,10 +61,10 @@ | |||||
</div> | </div> | ||||
<div id="hotList"> | <div id="hotList"> | ||||
<div class="list" v-for="(item, index) in shendu" :key="index" @click="routerToarticleDetails(item.detail)"> | <div class="list" v-for="(item, index) in shendu" :key="index" @click="routerToarticleDetails(item.detail)"> | ||||
<img :src="item.img"> | |||||
<img :src="item.image"> | |||||
<div class="txt"> | <div class="txt"> | ||||
<a class="title">{{ item.title }}</a> | <a class="title">{{ item.title }}</a> | ||||
<a class="subtitle">{{ item.subtitle }}</a> | |||||
<a class="subtitle">{{ item.detailText }}</a> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
@@ -84,9 +79,8 @@ export default { | |||||
name: 'metadaily', | name: 'metadaily', | ||||
data () { | data () { | ||||
return { | return { | ||||
information: ['XR', 'Web3', 'Ai'], | |||||
informationitem: 'XR', | |||||
depth: ['XR', 'Web3', 'Ai'], | |||||
information: ['XR', 'Web3', 'AI'], | |||||
depth: ['XR', 'Web3', 'AI'], | |||||
depthitem: 'XR', | depthitem: 'XR', | ||||
carouselList: [], | carouselList: [], | ||||
hotnews: {}, | hotnews: {}, | ||||
@@ -118,7 +112,6 @@ export default { | |||||
this.$router.push({ path: '/articleList' }) | this.$router.push({ path: '/articleList' }) | ||||
}, | }, | ||||
changenews (item) { | changenews (item) { | ||||
this.informationitem = item | |||||
this.getzixun() | this.getzixun() | ||||
}, | }, | ||||
changedepth (item) { | changedepth (item) { | ||||
@@ -172,31 +165,15 @@ export default { | |||||
} | } | ||||
}, | }, | ||||
async getshendu () { | async getshendu () { | ||||
this.shendu = [] | |||||
const { data: { message, data } } = await shendu(1, 10, this.depthitem) | const { data: { message, data } } = await shendu(1, 10, this.depthitem) | ||||
if (message === 'success') { | if (message === 'success') { | ||||
for (const iter of data.list) { | |||||
this.shendu.push({ | |||||
title: iter.title, | |||||
img: iter.image, | |||||
subtitle: iter.subTitle, | |||||
detail: iter.detail | |||||
}) | |||||
} | |||||
this.shendu = data.list | |||||
} | } | ||||
}, | }, | ||||
async getzixun () { | async getzixun () { | ||||
this.zixun = [] | |||||
const { data: { message, data } } = await zixun(1, 10, this.informationitem) | |||||
const { data: { message, data } } = await zixun(1, 10) | |||||
if (message === 'success') { | if (message === 'success') { | ||||
for (const iter of data.list) { | |||||
this.zixun.push({ | |||||
title: iter.title, | |||||
img: iter.image, | |||||
subtitle: iter.subTitle, | |||||
detail: iter.detail | |||||
}) | |||||
} | |||||
this.zixun = data.list | |||||
} | } | ||||
} | } | ||||
} | } | ||||