Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
E
exhibition_page
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
龙菲
exhibition_page
Commits
bfec4d17
提交
bfec4d17
authored
12月 16, 2022
作者:
龙菲
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化展览预览图为middleUrl;优化默认主题的视频播放列表样式
上级
fe93a2d6
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
494 行增加
和
274 行删除
+494
-274
index.vue
src/components/SlideImage/index.vue
+1
-1
Detail.vue
src/views/display/Detail.vue
+0
-1
ChStyle.vue
src/views/display/components/ChStyle.vue
+1
-1
NormalStyle.vue
src/views/display/components/NormalStyle.vue
+255
-173
RedStyle.vue
src/views/display/components/RedStyle.vue
+237
-98
没有找到文件。
src/components/SlideImage/index.vue
浏览文件 @
bfec4d17
...
...
@@ -13,7 +13,7 @@
v-for=
"(item, index) in imgList"
:key=
"index"
>
<img
:src=
"$getFullUrl(item
.pressUrl
)"
alt=
""
/>
<img
:src=
"$getFullUrl(item
[imgKey]
)"
alt=
""
/>
<div
class=
"enlarge"
@
click=
"handelPreviewImages(imgList,index)"
>
<img
src=
"@/assets/imgs/enlarge-s.png"
alt=
""
/>
</div>
...
...
src/views/display/Detail.vue
浏览文件 @
bfec4d17
...
...
@@ -48,7 +48,6 @@ export default {
"displayType"
,
"displayCharacter"
,
]);
debugger
this
.
loadDetail
();
},
...
...
src/views/display/components/ChStyle.vue
浏览文件 @
bfec4d17
...
...
@@ -24,7 +24,7 @@
v-for=
"(item, index) in displayDetail.imagesVo"
:key=
"index"
>
<img
:src=
"$getFullUrl(item.
press
Url || item.url)"
alt=
""
/>
<img
:src=
"$getFullUrl(item.
middle
Url || item.url)"
alt=
""
/>
<div
class=
"modal"
></div>
</div>
</div>
...
...
src/views/display/components/NormalStyle.vue
浏览文件 @
bfec4d17
...
...
@@ -20,12 +20,22 @@
<!-- 展览基本信息 -->
<div
class=
"content-item display-detail_basic_info"
>
<div
class=
"info-container"
>
<div
v-if=
"displayDetail.imagesVo && displayDetail.imagesVo.length > 0"
class=
"info-container-left"
>
<SlideImage
:imgList=
"displayDetail.imagesVo"
v-if=
"
displayDetail.imagesVo && displayDetail.imagesVo.length > 0
"
/>
<SlideImage
:imgList=
"[
{ pressUrl: displayDetail.faceImagePressUrl }]"
v-else-if="displayDetail.faceImagePressUrl" />
<div
v-if=
"displayDetail.imagesVo && displayDetail.imagesVo.length > 0"
class=
"info-container-left"
>
<SlideImage
:imgList=
"displayDetail.imagesVo"
:imgKey=
"'middleUrl'"
v-if=
"
displayDetail.imagesVo && displayDetail.imagesVo.length > 0
"
/>
<SlideImage
:imgList=
"[
{ middleUrl: displayDetail.faceImagePressUrl }]"
:imgKey="'middleUrl'"
v-else-if="displayDetail.faceImagePressUrl"
/>
</div>
<div
class=
"info-container-right"
>
<div
class=
"info-title"
>
...
...
@@ -45,7 +55,7 @@
关键词:
</span>
<span
class=
"value"
>
{{
displayDetail
.
keyword
||
"暂无"
displayDetail
.
keyword
||
"暂无"
}}
</span>
</div>
<div
class=
"body-item"
>
...
...
@@ -54,7 +64,7 @@
展览类型:
</span>
<span
class=
"value"
>
{{
dicts
.
displayType
[
displayDetail
.
type
]
||
"暂无"
dicts
.
displayType
[
displayDetail
.
type
]
||
"暂无"
}}
</span>
</div>
<div
class=
"body-item"
>
...
...
@@ -63,9 +73,9 @@
展览性质:
</span>
<span
class=
"value"
>
{{
dicts
.
displayCharacter
[
dicts
.
displayCharacter
[
displayDetail
.
displayCharacter
]
||
"暂无"
]
||
"暂无"
}}
</span>
</div>
<div
class=
"body-item"
>
...
...
@@ -74,7 +84,7 @@
展览单位:
</span>
<span
class=
"value"
>
{{
displayDetail
.
deptName
||
"暂无"
displayDetail
.
deptName
||
"暂无"
}}
</span>
</div>
<div
class=
"body-item"
>
...
...
@@ -83,7 +93,7 @@
展览地区:
</span>
<span
class=
"value"
>
{{
displayDetail
.
regionName
||
"暂无"
displayDetail
.
regionName
||
"暂无"
}}
</span>
</div>
</div>
...
...
@@ -96,33 +106,56 @@
/>
-->
</div>
<div
class=
"tools"
>
<ReaderOperations
:loveCount=
"displayDetail.loveCount"
<ReaderOperations
:loveCount=
"displayDetail.loveCount"
:loveCountStatus=
"Boolean(displayDetail.loveCountStatus)"
:collectCount=
"displayDetail.collectCount"
:collectCountStatus=
"
:collectCount=
"displayDetail.collectCount"
:collectCountStatus=
"
Boolean(displayDetail.collectCountStatus)
"
:sourceId=
"displayDetail.exhibitionId"
:title=
"displayDetail.title"
:sourceType=
"'biz_exhibition'"
@
reload=
"reload"
/>
"
:sourceId=
"displayDetail.exhibitionId"
:title=
"displayDetail.title"
:sourceType=
"'biz_exhibition'"
@
reload=
"reload"
/>
</div>
</el-col>
</el-row>
</div>
</div>
<div
class=
"audio"
:style=
"
{ animationPlayState: audioPlaying ? 'running' : 'paused' }"
@click="handleClickAudio" v-if="displayDetail.audiosVo
&&
displayDetail.audiosVo.length > 0">
<div
class=
"audio"
:style=
"
{ animationPlayState: audioPlaying ? 'running' : 'paused' }"
@click="handleClickAudio"
v-if="displayDetail.audiosVo
&&
displayDetail.audiosVo.length > 0"
>
<img
src=
"@/assets/imgs/display/normal/music.png"
alt=
""
/>
<!--
<svg-icon
icon-class=
"music"
></svg-icon>
-->
<AudioPlayer
style=
"display: none"
:url=
"$getFullUrl(displayDetail.audiosVo[0].url)"
ref=
"AudioPlayer"
/>
<AudioPlayer
style=
"display: none"
:url=
"$getFullUrl(displayDetail.audiosVo[0].url)"
ref=
"AudioPlayer"
/>
</div>
</div>
<div
class=
"content-item display-detail_tabbar"
id=
"tabbar"
:class=
"
{ isFixed: isFixed }">
<div
class=
"content-item display-detail_tabbar"
id=
"tabbar"
:class=
"
{ isFixed: isFixed }"
>
<span
v-for=
"(item, index) in tabbarData"
:key=
"index"
>
<span
@
click=
"handleClickTabItem(item)"
:class=
"[
'tab-item',
currentTab && currentTab.domId == item.domId ? 'active' : '',
]"
v-html=
"item.name"
v-if=
"
displayDetail[item.domId] &&
displayDetail[item.domId].length > 0
"
>
<span
@
click=
"handleClickTabItem(item)"
:class=
"[
'tab-item',
currentTab && currentTab.domId == item.domId ? 'active' : '',
]"
v-html=
"item.name"
v-if=
"
displayDetail[item.domId] &&
displayDetail[item.domId].length > 0
"
>
</span>
</span>
</div>
...
...
@@ -135,11 +168,18 @@
</div>
<div
class=
"intro-content"
>
<div
class=
"left-box"
>
简介
</div>
<div
class=
"intro-content-container"
v-html=
"displayDetail.intro"
></div>
<div
class=
"intro-content-container"
v-html=
"displayDetail.intro"
></div>
</div>
</div>
<div
class=
"display-detail_virtual content-item"
v-if=
"displayDetail.virtualVo.length > 0"
id=
"virtualVo"
>
<div
class=
"display-detail_virtual content-item"
v-if=
"displayDetail.virtualVo.length > 0"
id=
"virtualVo"
>
<div
class=
"custom_title"
>
<div
class=
"center"
>
<!--
<svg-icon
icon-class=
"wenxian"
></svg-icon>
-->
...
...
@@ -147,8 +187,12 @@
</div>
</div>
<div
class=
"vr-content"
>
<div
class=
"img-container"
@
click=
"handleToVR(item)"
v-for=
"(item, index) in displayDetail.virtualVo"
:key=
"index"
>
<div
class=
"img-container"
@
click=
"handleToVR(item)"
v-for=
"(item, index) in displayDetail.virtualVo"
:key=
"index"
>
<img
:src=
"$getFullUrl(item.faceImagePressUrl)"
alt=
""
/>
<div
class=
"modal"
>
<svg-icon
icon-class=
"360"
></svg-icon>
...
...
@@ -158,13 +202,16 @@
</div>
</div>
<!-- 展览视频 -->
<div
id=
"videosVo"
class=
"content-item videos"
v-if=
"displayDetail.videosVo && displayDetail.videosVo.length > 0"
>
<div
id=
"videosVo"
class=
"content-item videos"
v-if=
"displayDetail.videosVo && displayDetail.videosVo.length > 0"
>
<div
class=
"video-title"
>
<!--
<i
class=
"el-icon-video-camera"
></i>
-->
展览视频
</div>
<div
class=
"video-names"
>
<
!--
<
div
class=
"video-names"
>
<swiper
class=
"swiper video-swiper"
:options=
"videoSwiperOption"
ref=
"unitSwiper"
v-if=
"currentVideo"
>
<swiper-slide
:class=
"[
'slide-item',
...
...
@@ -180,48 +227,81 @@
<div
class=
"swiper-button-next video-swiper-button-next"
slot=
"button-next"
>
<i
class=
"el-icon-arrow-right"
></i>
</div>
<!--
<div
class=
"video-item"
v-for=
"(item, index) in displayDetail.videosVo"
:key=
"index"
@
click=
"handleChangeCurrentVideo(item)"
>
<div
:class=
"[
'name',
currentVideo && item.fileId == currentVideo.fileId
? 'active'
: '',
]"
>
{{
item
.
name
.
split
(
"."
)[
0
]
}}
</div>
</div>
-->
</div>
-->
<div
class=
"video-content"
>
<div
class=
"player"
>
<video-player
v-if=
"currentVideo && currentVideo.url"
:src=
"$getFullUrl(currentVideo.url)"
class=
"video-player"
>
</video-player>
</div>
<div
class=
"video-name-list"
>
<div
class=
"title"
>
播放列表
</div>
<el-row>
<el-col
:span=
"12"
:class=
"[
'name',
item.fileId == currentVideo.fileId ? 'active' : '',
]"
v-for=
"(item, index) in displayDetail.videosVo"
:key=
"index"
@
click
.
native=
"handleChangeCurrentVideo(item)"
>
{{
item
.
name
.
split
(
"."
)[
0
]
}}
</el-col
>
</el-row>
</div>
</div>
<video-player
v-if=
"currentVideo && currentVideo.url"
:src=
"$getFullUrl(currentVideo.url)"
class=
"video-box"
>
</video-player>
</div>
<!--展览单元 -->
<div
class=
"content-item display-detail_units"
ref=
"units"
v-if=
"displayDetail.exhibitionUnits.length > 0"
id=
"exhibitionUnits"
>
<div
class=
"content-item display-detail_units"
ref=
"units"
v-if=
"displayDetail.exhibitionUnits.length > 0"
id=
"exhibitionUnits"
>
<div
class=
"custom_title"
>
<div
class=
"center"
>
<span
class=
"title"
>
展览单元
</span>
</div>
</div>
<NormalStyleUnit
:curUnit=
"curUnit"
:exhibitionUnits=
"displayDetail.exhibitionUnits"
@
handleClickUnit=
"handleClickUnit"
@
handelPreviewImages=
"handelPreviewImages"
@
handleToCr=
"handleToCr"
/>
<NormalStyleUnit
:curUnit=
"curUnit"
:exhibitionUnits=
"displayDetail.exhibitionUnits"
@
handleClickUnit=
"handleClickUnit"
@
handelPreviewImages=
"handelPreviewImages"
@
handleToCr=
"handleToCr"
/>
</div>
<!--展览相关文物 -->
<div
class=
"content-item display-detail_relateRc"
ref=
"units"
v-if=
"
displayDetail.culturalRelicVo &&
displayDetail.culturalRelicVo.length > 0
"
id=
"culturalRelicVo"
>
<div
class=
"content-item display-detail_relateRc"
ref=
"units"
v-if=
"
displayDetail.culturalRelicVo &&
displayDetail.culturalRelicVo.length > 0
"
id=
"culturalRelicVo"
>
<div
class=
"cr-title"
>
展览文物
</div>
<SlideImageGroup
:imgList=
"displayDetail.culturalRelicVo"
>
<template
slot-scope=
"
{ item }" slot="img">
<img
:src=
"$getFullUrl(item.faceImagePressUrl)"
alt=
""
style=
"
<img
:src=
"$getFullUrl(item.faceImagePressUrl)"
alt=
""
style=
"
width: 100%;
height: 100%;
object-fit: fill;
cursor: pointer;
"
@
click=
"handleToCr(item)"
/>
"
@
click=
"handleToCr(item)"
/>
</
template
>
<
template
slot-scope=
"{ item }"
slot=
"info"
>
<div
class=
"name"
>
{{
item
.
name
}}
</div>
...
...
@@ -229,9 +309,13 @@
</SlideImageGroup>
</div>
<!-- 相关文献 -->
<div
class=
"content-item display-detail_lts"
v-if=
"
displayDetail.literatureVo && displayDetail.literatureVo.length > 0
"
id=
"literatureVo"
>
<div
class=
"content-item display-detail_lts"
v-if=
"
displayDetail.literatureVo && displayDetail.literatureVo.length > 0
"
id=
"literatureVo"
>
<div
class=
"custom_title"
>
<div
class=
"center"
>
<!-- <svg-icon icon-class="wenxian"></svg-icon> -->
...
...
@@ -239,19 +323,31 @@
</div>
</div>
<div
class=
"lts-content"
>
<div
class=
"lt-item"
v-for=
"(item, index) in displayDetail.literatureVo"
:key=
"index"
@
click=
"handleViewLt(item)"
>
<div
class=
"lt-item"
v-for=
"(item, index) in displayDetail.literatureVo"
:key=
"index"
@
click=
"handleViewLt(item)"
>
<span
class=
"lt-order"
>
[{{ index + 1 }}]
</span>
<span
class=
"lt-authors"
v-if=
"item.authors"
>
{{ item.authors }}.
</span>
<span
class=
"lt-authors"
v-if=
"item.authors"
>
{{ item.authors }}.
</span
>
<span
class=
"lt-name"
v-if=
"item.name"
>
{{ item.name }}.
</span>
<span
class=
"lt-source"
v-if=
"item.source"
>
{{ item.source }}.
</span>
<span
class=
"lt-source"
v-if=
"item.source"
>
{{ item.source }}.
</span
>
<span
class=
"lt-date"
v-if=
"item.date"
>
{{ item.date }}
</span>
</div>
</div>
</div>
</div>
</div>
<el-image-viewer
v-if=
"imgViewerVisible"
:on-close=
"closeImgViewer"
:url-list=
"imgList"
/>
<el-image-viewer
v-if=
"imgViewerVisible"
:on-close=
"closeImgViewer"
:url-list=
"imgList"
/>
</div>
</template>
...
...
@@ -264,7 +360,7 @@ import SlideImageGroup from "@/components/SlideImageGroup";
import
{
swiper
,
swiperSlide
}
from
"vue-awesome-swiper"
;
import
"swiper/dist/css/swiper.css"
;
import
{
isElementInViewport2
}
from
"@/utils/index"
;
import
NormalStyleUnit
from
'./NormalStyleUnit.vue'
import
NormalStyleUnit
from
"./NormalStyleUnit.vue"
;
import
videoPlayer
from
"@/components/VideoPlayer"
;
export
default
{
name
:
"NormalStyle"
,
...
...
@@ -369,7 +465,7 @@ export default {
this
.
displayDetail
.
exhibitionUnits
.
length
>
0
)
{
this
.
curUnit
=
this
.
displayDetail
.
exhibitionUnits
[
0
];
this
.
expandUnitInfo
()
this
.
expandUnitInfo
()
;
}
processUnit
(
this
.
displayDetail
.
exhibitionUnits
);
...
...
@@ -388,7 +484,6 @@ export default {
};
}
function
processUnit
(
list
)
{
for
(
let
o
of
list
||
[])
{
if
(
o
.
children
)
{
...
...
@@ -438,13 +533,12 @@ export default {
};
},
// 预览关联文献
handleViewLt
(
item
)
{
if
(
item
.
files
[
0
].
url
)
{
previewFile
(
item
.
files
[
0
].
url
,
item
.
files
[
0
].
name
);
}
else
{
this
.
$message
.
info
(
'当前文献暂不支持在线浏览'
)
this
.
$message
.
info
(
"当前文献暂不支持在线浏览"
);
}
},
...
...
@@ -474,7 +568,7 @@ export default {
handleClickUnit
(
item
)
{
this
.
curUnit
=
item
;
this
.
expandUnitInfo
()
this
.
expandUnitInfo
()
;
},
handleToCr
(
item
)
{
...
...
@@ -518,18 +612,22 @@ export default {
expandUnitInfo
()
{
// 将每个单元下的所有数据变成key-value形式,方便遍历
let
newUnits
=
{}
traveseUnits
(
this
.
curUnit
)
this
.
$set
(
this
.
curUnit
,
'expandUnitInfo'
,
JSON
.
parse
(
JSON
.
stringify
(
newUnits
)))
let
newUnits
=
{};
traveseUnits
(
this
.
curUnit
);
this
.
$set
(
this
.
curUnit
,
"expandUnitInfo"
,
JSON
.
parse
(
JSON
.
stringify
(
newUnits
))
);
function
traveseUnits
(
obj
)
{
newUnits
[
obj
.
title
]
=
obj
newUnits
[
obj
.
title
]
=
obj
;
if
(
obj
.
children
&&
obj
.
children
.
length
>
0
)
{
obj
.
children
.
map
(
item
=>
{
traveseUnits
(
item
)
})
obj
.
children
.
map
(
(
item
)
=>
{
traveseUnits
(
item
)
;
})
;
}
}
}
}
,
},
};
</
script
>
...
...
@@ -546,9 +644,9 @@ export default {
cursor
:
pointer
;
}
.display-detail_intro
{
.intro-content
{
p
{
.display-detail_intro
{
.intro-content
{
p
{
font-family
:
$defaultFontFamily
!
important
;
}
}
...
...
@@ -705,7 +803,6 @@ $titleFontFamily: SourceHanSerifCN-Bold;
overflow
:
hidden
;
.imagesVo-image-container
{
// position: relative;
.img-container
{
height
:
100%
;
...
...
@@ -870,7 +967,6 @@ $titleFontFamily: SourceHanSerifCN-Bold;
cursor
:
pointer
;
position
:
relative
;
&
:hover
{
color
:
$themeColor
;
...
...
@@ -978,36 +1074,25 @@ $titleFontFamily: SourceHanSerifCN-Bold;
margin-right
:
10px
;
}
}
.video-names
{
.video-content
{
display
:
flex
;
justify-content
:
center
;
margin-bottom
:
30px
;
position
:
relative
;
.video-swiper-button-next
,
.video-swiper-button-prev
{
// background-color: rgba(0,0,0,0.2);
// border-radius: 50%;
background-image
:
none
;
width
:
60px
;
height
:
60px
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
color
:
$themeColor
;
font-weight
:
bolder
;
font-size
:
28px
;
transform
:
translateY
(
-6px
);
.player
{
flex
:
1
;
margin-right
:
20px
;
height
:
600px
;
}
.swiper-container
{
width
:
90%
;
.slide-item
{
.video-name-list
{
width
:
300px
;
&
>
.title
{
font-size
:
18px
;
font-weight
:
bold
;
color
:
#333
;
margin-bottom
:
8px
;
}
.name
{
padding
:
8px
;
border-radius
:
4px
;
//
border-radius: 4px;
color
:
$themeColor
;
cursor
:
pointer
;
text-overflow
:
ellipsis
;
...
...
@@ -1015,73 +1100,68 @@ $titleFontFamily: SourceHanSerifCN-Bold;
width
:
100%
;
white-space
:
nowrap
;
border
:
1px
solid
$themeColor
;
font-size
:
14px
;
&
:hover
{
background
:
$themeColor
;
color
:
$themeSecondaryColor
;
}
&
:not
(
&
:last-child
)
{
border-bottom
:
none
;
}
// margin-bottom: 12px;
}
.active
{
background
:
$themeColor
;
color
:
#fff
;
color
:
$themeSecondaryColor
;
}
}
// .video-item {
// font-size: 18px;
// margin: 8px 30px;
// .name {
// color: #999;
// position: relative;
// cursor: pointer;
// &:hover {
// color: $themeColor;
// &::after {
// display: inline-block;
// }
// &::before {
// display: inline-block;
// }
// }
// }
// .active::after,
// .name::after {
// content: "";
// width: 50%;
// height: 1px;
// background-color: $themeColor;
// position: absolute;
// left: 0;
// bottom: -9px;
// left: 50%;
// transform: translateX(-50%);
// display: none;
// }
// .active::before,
// .name::before {
// content: "";
// width: 0;
// height: 0;
// border: 8px solid transparent;
// border-top-color: $themeColor;
// position: absolute;
// left: 50%;
// bottom: -25px;
// transform: translateX(-50%);
// display: none;
// }
// .active::after,
// .active::before {
// display: inline-block;
// }
// }
}
// .video-names {
// display: flex;
// justify-content: center;
// margin-bottom: 30px;
// position: relative;
// .video-swiper-button-next,
// .video-swiper-button-prev {
// // background-color: rgba(0,0,0,0.2);
// // border-radius: 50%;
// background-image: none;
// width: 60px;
// height: 60px;
// display: flex;
// justify-content: center;
// align-items: center;
// color: $themeColor;
// font-weight: bolder;
// font-size: 28px;
// transform: translateY(-6px);
// }
// .swiper-container {
// width: 90%;
// .slide-item {
// padding: 8px;
// border-radius: 4px;
// color: $themeColor;
// cursor: pointer;
// text-overflow: ellipsis;
// overflow: hidden;
// width: 100%;
// white-space: nowrap;
// border: 1px solid $themeColor;
// font-size: 14px;
// }
// .active {
// background: $themeColor;
// color: #fff;
// }
// }
// }
.video-box
{
height
:
600px
;
...
...
@@ -1091,7 +1171,6 @@ $titleFontFamily: SourceHanSerifCN-Bold;
height
:
100%
;
}
}
}
// 虚拟展
...
...
@@ -1220,7 +1299,7 @@ $titleFontFamily: SourceHanSerifCN-Bold;
border-bottom
:
1px
dashed
#ccc
;
padding-bottom
:
9px
;
&
>
span
{
&
>
span
{
padding
:
0
4px
;
}
}
...
...
@@ -1252,8 +1331,11 @@ $titleFontFamily: SourceHanSerifCN-Bold;
}
//有子节点 且已展开
::v-deep
.el-tree
.el-tree-node__expand-icon.expanded.el-icon-caret-right
:before
{
background
:
url("~@/assets/imgs/display/normal/tree-node-s.png")
no-repeat
0
3px
;
::v-deep
.el-tree
.el-tree-node__expand-icon.expanded.el-icon-caret-right
:before
{
background
:
url("~@/assets/imgs/display/normal/tree-node-s.png")
no-repeat
0
3px
;
content
:
""
;
display
:
block
;
width
:
16px
;
...
...
src/views/display/components/RedStyle.vue
浏览文件 @
bfec4d17
...
...
@@ -2,12 +2,16 @@
<div
class=
"display-detail"
>
<div
class=
"content"
id=
"content"
>
<!-- 展览图片 -->
<div
class=
"
<div
class=
"
content-item
display-detail_imgs
wow
animate__animated animate__fadeInDownBig
"
ref=
"imgs"
v-if=
"displayDetail.imagesVo && displayDetail.imagesVo.length > 0"
>
"
ref=
"imgs"
v-if=
"displayDetail.imagesVo && displayDetail.imagesVo.length > 0"
>
<!--
<el-carousel
height=
"430px"
>
<el-carousel-item
v-for=
"(item, index) in displayDetail.imagesVo"
...
...
@@ -18,20 +22,30 @@
</div>
</el-carousel-item>
</el-carousel>
-->
<img
id=
"faceImage"
v-if=
"displayDetail.faceImagePressUrl"
class=
"animate__animated animate__fadeInDownBig"
:src=
"$getFullUrl(displayDetail.faceImagePressUrl)"
/>
<img
class=
"animate__animated animate__fadeInDownBig"
v-else-if=
"displayDetail.imagesVo && displayDetail.imagesVo.length > 0"
id=
"faceImage"
:src=
"$getFullUrl(displayDetail.imagesVo[0].pressUrl)"
/>
<img
id=
"faceImage"
v-if=
"displayDetail.faceImageMiddleUrl"
class=
"animate__animated animate__fadeInDownBig"
:src=
"$getFullUrl(displayDetail.faceImageMiddleUrl)"
/>
<img
class=
"animate__animated animate__fadeInDownBig"
v-else-if=
"
displayDetail.imagesVo && displayDetail.imagesVo.length > 0
"
id=
"faceImage"
:src=
"$getFullUrl(displayDetail.imagesVo[0].middleUrl)"
/>
</div>
<!-- 展览基本信息 -->
<div
class=
"
<div
class=
"
content-item
display-detail_basic_info
wow
animate__animated animate__fadeInUp
"
>
"
>
<div
class=
"wrapper"
>
<div
class=
"top"
>
<div
class=
"top-wrapper"
>
...
...
@@ -55,11 +69,16 @@
</div>
<div
class=
"info-container"
>
<div
class=
"info-container-left"
>
<SlideImage
:imgList=
"displayDetail.imagesVo"
v-if=
"
displayDetail.imagesVo && displayDetail.imagesVo.length > 0
"
/>
<SlideImage
:imgList=
"[
{ pressUrl: displayDetail.faceImagePressUrl }]"
v-else-if="displayDetail.faceImagePressUrl" />
<SlideImage
:imgList=
"displayDetail.imagesVo"
v-if=
"
displayDetail.imagesVo && displayDetail.imagesVo.length > 0
"
/>
<SlideImage
:imgList=
"[
{ pressUrl: displayDetail.faceImagePressUrl }]"
v-else-if="displayDetail.faceImagePressUrl"
/>
<!--
<el-carousel>
<el-carousel-item
v-for=
"(item, index) in displayDetail.imagesVo"
:key=
"index"
class=
"imagesVo-image-container"
>
...
...
@@ -101,7 +120,7 @@
关键词:
</span>
<span
class=
"value"
>
{{
displayDetail
.
keyword
||
"暂无"
displayDetail
.
keyword
||
"暂无"
}}
</span>
</div>
<div
class=
"body-item"
>
...
...
@@ -109,7 +128,7 @@
<svg-icon
icon-class=
"zllx"
></svg-icon>
展览类型:
</span>
<span
class=
"value"
>
{{
dicts
.
displayType
[
displayDetail
.
type
]
||
"暂无"
dicts
.
displayType
[
displayDetail
.
type
]
||
"暂无"
}}
</span>
</div>
<div
class=
"body-item"
>
...
...
@@ -117,9 +136,9 @@
<svg-icon
icon-class=
"zlxz"
></svg-icon>
展览性质:
</span>
<span
class=
"value"
>
{{
dicts
.
displayCharacter
[
dicts
.
displayCharacter
[
displayDetail
.
displayCharacter
]
||
"暂无"
]
||
"暂无"
}}
</span>
</div>
<div
class=
"body-item"
>
...
...
@@ -127,7 +146,7 @@
<svg-icon
icon-class=
"zldw"
></svg-icon>
展览单位:
</span>
<span
class=
"value"
>
{{
displayDetail
.
deptName
||
"暂无"
displayDetail
.
deptName
||
"暂无"
}}
</span>
</div>
<div
class=
"body-item"
>
...
...
@@ -135,18 +154,25 @@
<svg-icon
icon-class=
"zldq"
></svg-icon>
展览地区:
</span>
<span
class=
"value"
>
{{
displayDetail
.
regionName
||
"暂无"
displayDetail
.
regionName
||
"暂无"
}}
</span>
</div>
</div>
</el-col>
<el-col
:span=
"11"
class=
"reader-operations"
>
<ReaderOperations
:loveCount=
"displayDetail.loveCount"
:loveCountStatus=
"Boolean(displayDetail.loveCountStatus)"
:collectCount=
"displayDetail.collectCount"
<ReaderOperations
:loveCount=
"displayDetail.loveCount"
:loveCountStatus=
"Boolean(displayDetail.loveCountStatus)"
:collectCount=
"displayDetail.collectCount"
:collectCountStatus=
"
Boolean(displayDetail.collectCountStatus)
"
:sourceId=
"displayDetail.exhibitionId"
:title=
"displayDetail.title"
:sourceType=
"'biz_exhibition'"
@
reload=
"reload"
:selectColor=
"'#a30e0c'"
/>
"
:sourceId=
"displayDetail.exhibitionId"
:title=
"displayDetail.title"
:sourceType=
"'biz_exhibition'"
@
reload=
"reload"
:selectColor=
"'#a30e0c'"
/>
</el-col>
</el-row>
</div>
...
...
@@ -154,52 +180,77 @@
</div>
</div>
<!-- 展览简介 -->
<div
class=
"
<div
class=
"
content-item
display-detail_intro
wow
animate__animated animate__fadeInUp
"
>
"
>
<div
class=
"wrapper"
>
<div
class=
"custom-title"
>
展览简介
</div>
<div
class=
"intro-content"
>
<div
class=
"intro-content-container"
v-html=
"displayDetail.intro"
></div>
<div
class=
"intro-content-container"
v-html=
"displayDetail.intro"
></div>
</div>
</div>
</div>
<!-- 视频 -->
<div
class=
"
<div
class=
"
content-item
display-detail_videos
wow
animate__animated animate__fadeInRight
"
v-if=
"displayDetail.videosVo && displayDetail.videosVo.length > 0"
>
"
v-if=
"displayDetail.videosVo && displayDetail.videosVo.length > 0"
>
<div
class=
"wrapper"
>
<div
class=
"video-title"
>
<i
class=
"el-icon-video-camera"
></i>
展览视频
</div>
<div
class=
"video-names"
>
<div
class=
"video-item"
v-for=
"(item, index) in displayDetail.videosVo"
:key=
"index"
@
click=
"handleChangeCurrentVideo(item)"
>
<div
:class=
"[
'name',
currentVideo && item.fileId == currentVideo.fileId
? 'active'
: '',
]"
>
<div
class=
"video-item"
v-for=
"(item, index) in displayDetail.videosVo"
:key=
"index"
@
click=
"handleChangeCurrentVideo(item)"
>
<div
:class=
"[
'name',
currentVideo && item.fileId == currentVideo.fileId
? 'active'
: '',
]"
>
{{
item
.
name
.
split
(
"."
)[
0
]
}}
</div>
</div>
</div>
<video-player
v-if=
"currentVideo"
:src=
"$getFullUrl(currentVideo.url)"
class=
"video-box"
></video-player>
<video-player
v-if=
"currentVideo"
:src=
"$getFullUrl(currentVideo.url)"
class=
"video-box"
></video-player>
</div>
</div>
<!-- 虚拟展厅 -->
<div
class=
"display-detail_virtual content-item"
v-if=
"displayDetail.virtualVo.length > 0"
>
<div
class=
"display-detail_virtual content-item"
v-if=
"displayDetail.virtualVo.length > 0"
>
<div
class=
"wrapper"
>
<div
class=
"img-container"
@
click=
"handleToVR(item)"
v-for=
"(item, index) in displayDetail.virtualVo"
:key=
"index"
>
<div
class=
"img-container"
@
click=
"handleToVR(item)"
v-for=
"(item, index) in displayDetail.virtualVo"
:key=
"index"
>
<img
:src=
"item.faceImagePressUrl"
alt=
""
/>
<div
class=
"modal"
>
<svg-icon
icon-class=
"360"
></svg-icon>
...
...
@@ -209,21 +260,32 @@
</div>
</div>
<!--展览单元 -->
<div
class=
"
<div
class=
"
content-item
display-detail_units
wow
animate__animated animate__fadeInUp
"
ref=
"units"
v-if=
"displayDetail.exhibitionUnits.length > 0"
>
"
ref=
"units"
v-if=
"displayDetail.exhibitionUnits.length > 0"
>
<div
class=
"wrapper unit-wraraper"
>
<div
class=
"custom-title units"
>
展览单元
</div>
<div
class=
"units-content"
>
<div
class=
"left-menu"
>
<div
class=
"left-menu-item"
v-for=
"(item, index) in displayDetail.exhibitionUnits"
:key=
"index"
@
click=
"handleClickUnitTitle(item)"
>
<div
class=
"left-menu-item"
v-for=
"(item, index) in displayDetail.exhibitionUnits"
:key=
"index"
@
click=
"handleClickUnitTitle(item)"
>
<!--
{{
item
.
imagesVo
}}
-->
<div
:class=
"
{ 'base-img': true, active: currentUnit == item }" :id="item.euId"
v-if="item.imagesVo
&&
item.imagesVo.length > 0">
<div
:class=
"
{ 'base-img': true, active: currentUnit == item }"
:id="item.euId"
v-if="item.imagesVo
&&
item.imagesVo.length > 0"
>
<img
:src=
"$getFullUrl(item.imagesVo[0].pressUrl)"
alt=
""
/>
</div>
<div
class=
"text"
>
...
...
@@ -233,46 +295,92 @@
</div>
<div
class=
"right-content"
>
<div
class=
"unit-content"
>
<div
class=
"unit-content-container"
v-for=
"(unitValue, unitTitle) in currentUnit.expandUnitInfo"
:key=
"unitTitle"
>
<div
class=
"unit-content-container"
v-for=
"(unitValue, unitTitle) in currentUnit.expandUnitInfo"
:key=
"unitTitle"
>
<div
class=
"unit-content-title"
>
{{
unitTitle
}}
</div>
<div
class=
"text-indent unit-content_intro"
v-if=
"currentUnit.intro"
v-html=
"unitValue.intro"
></div>
<div
class=
"unit-content_images"
v-if=
"unitValue.imagesVo && unitValue.imagesVo.length > 0"
>
<div
class=
"text-indent unit-content_intro"
v-if=
"currentUnit.intro"
v-html=
"unitValue.intro"
></div>
<div
class=
"unit-content_images"
v-if=
"unitValue.imagesVo && unitValue.imagesVo.length > 0"
>
<div
class=
"imgs-title"
>
单元图片
</div>
<div
class=
"unit-imgs"
>
<SlideImageGroup
:imgList=
"unitValue.imagesVo"
:needEnlarge=
"true"
v-if=
"unitValue.imagesVo.length > 3"
>
<SlideImageGroup
:imgList=
"unitValue.imagesVo"
:needEnlarge=
"true"
v-if=
"unitValue.imagesVo.length > 3"
>
<template
slot-scope=
"
{ item }" slot="img">
<img
:src=
"$getFullUrl(item.pressUrl)"
alt=
""
style=
"width: 100%; height: 100%; object-fit: contain"
/>
<img
:src=
"$getFullUrl(item.pressUrl)"
alt=
""
style=
"
width: 100%;
height: 100%;
object-fit: contain;
"
/>
</
template
>
</SlideImageGroup>
<el-row
v-if=
"unitValue.imagesVo.length > 0 && unitValue.imagesVo.length < 4"
:gutter=
"10"
>
<el-col
v-for=
"(item, index) in unitValue.imagesVo"
:key=
"index"
:span=
"24 / unitValue.imagesVo.length"
style=
"height:300px"
>
<img
:src=
"$getFullUrl(item.pressUrl)"
alt=
""
style=
"width: 100%; height: 100%; object-fit: contain;cursor: pointer;"
@
click=
"handelPreviewImages(unitValue.imagesVo)"
/>
<el-row
v-if=
"
unitValue.imagesVo.length > 0 &&
unitValue.imagesVo.length < 4
"
:gutter=
"10"
>
<el-col
v-for=
"(item, index) in unitValue.imagesVo"
:key=
"index"
:span=
"24 / unitValue.imagesVo.length"
style=
"height: 300px"
>
<img
:src=
"$getFullUrl(item.pressUrl)"
alt=
""
style=
"
width: 100%;
height: 100%;
object-fit: contain;
cursor: pointer;
"
@
click=
"handelPreviewImages(unitValue.imagesVo)"
/>
</el-col>
</el-row>
</div>
</div>
<div
class=
"unit-content_crs"
v-if=
"
unitValue.culturalRelics && unitValue.culturalRelics.length > 0
"
>
<div
class=
"unit-content_crs"
v-if=
"
unitValue.culturalRelics &&
unitValue.culturalRelics.length > 0
"
>
<div
class=
"imgs-title"
>
单元文物
</div>
<SlideImageGroup
:imgList=
"unitValue.culturalRelics"
>
<
template
slot-scope=
"{ item }"
slot=
"img"
>
<img
:src=
"$getFullUrl(item.faceImagePressUrl)"
alt=
""
style=
"
width: 100%;
height: 100%;
object-fit: fill;
cursor: pointer;
"
@
click=
"handleToCr(item)"
/>
<img
:src=
"$getFullUrl(item.faceImagePressUrl)"
alt=
""
style=
"
width: 100%;
height: 100%;
object-fit: fill;
cursor: pointer;
"
@
click=
"handleToCr(item)"
/>
</
template
>
<
template
slot-scope=
"{ item }"
slot=
"info"
>
<div
class=
"name"
>
{{
item
.
name
}}
</div>
...
...
@@ -398,25 +506,48 @@
</div>
</div>
<!-- 相关文献 -->
<div
class=
"
<div
class=
"
content-item
display-detail_lts
wow
animate__animated animate__fadeInUp
"
v-if=
"
"
v-if=
"
displayDetail.literatureVo && displayDetail.literatureVo.length > 0
"
>
"
>
<div
class=
"wrapper"
>
<div
class=
"custom-title"
>
相关文献
</div>
<div
class=
"lts-content"
>
<el-table
:data=
"displayDetail.literatureVo"
:header-cell-style=
"{
background: '#eeeeee',
color: '#333',
}"
:row-style=
"tableRowStyle"
>
<el-table-column
prop=
"name"
label=
"名称"
align=
"center"
></el-table-column>
<el-table-column
prop=
"authors"
label=
"作者"
align=
"center"
></el-table-column>
<el-table-column
prop=
"date"
label=
"出版时间"
align=
"center"
></el-table-column>
<el-table-column
align=
"center"
prop=
"source"
label=
"出版所在刊物"
></el-table-column>
<el-table
:data=
"displayDetail.literatureVo"
:header-cell-style=
"{
background: '#eeeeee',
color: '#333',
}"
:row-style=
"tableRowStyle"
>
<el-table-column
prop=
"name"
label=
"名称"
align=
"center"
></el-table-column>
<el-table-column
prop=
"authors"
label=
"作者"
align=
"center"
></el-table-column>
<el-table-column
prop=
"date"
label=
"出版时间"
align=
"center"
></el-table-column>
<el-table-column
align=
"center"
prop=
"source"
label=
"出版所在刊物"
></el-table-column>
<el-table-column
label=
"阅读"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<div
class=
"pdf-img"
@
click=
"handleViewLt(scope.row)"
>
...
...
@@ -429,7 +560,11 @@
</div>
</div>
</div>
<el-image-viewer
v-if=
"imgViewerVisible"
:on-close=
"closeImgViewer"
:url-list=
"imgList"
/>
<el-image-viewer
v-if=
"imgViewerVisible"
:on-close=
"closeImgViewer"
:url-list=
"imgList"
/>
</div>
</template>
...
...
@@ -518,7 +653,7 @@ export default {
this
.
displayDetail
.
exhibitionUnits
.
length
>
0
?
this
.
displayDetail
.
exhibitionUnits
[
0
]
:
null
;
this
.
expandUnitInfo
()
this
.
expandUnitInfo
()
;
function
processUnit
(
list
)
{
for
(
let
o
of
list
||
[])
{
if
(
o
.
children
)
{
...
...
@@ -545,7 +680,7 @@ export default {
// this.$message.info("正在播放当前文物讲解音频,点击按钮可关闭");
// this.$refs.AudioPlayer.play();
// }
//
this.replaceFaceImage();
this
.
replaceFaceImage
();
});
},
...
...
@@ -619,20 +754,24 @@ export default {
handleClickUnitTitle
(
item
)
{
this
.
currentUnit
=
item
;
this
.
expandUnitInfo
()
this
.
expandUnitInfo
()
;
},
expandUnitInfo
()
{
// 将每个单元下的所有数据变成key-value形式,方便遍历
let
newUnits
=
{}
traveseUnits
(
this
.
currentUnit
)
this
.
$set
(
this
.
currentUnit
,
'expandUnitInfo'
,
JSON
.
parse
(
JSON
.
stringify
(
newUnits
)))
let
newUnits
=
{};
traveseUnits
(
this
.
currentUnit
);
this
.
$set
(
this
.
currentUnit
,
"expandUnitInfo"
,
JSON
.
parse
(
JSON
.
stringify
(
newUnits
))
);
function
traveseUnits
(
obj
)
{
newUnits
[
obj
.
title
]
=
obj
newUnits
[
obj
.
title
]
=
obj
;
if
(
obj
.
children
&&
obj
.
children
.
length
>
0
)
{
obj
.
children
.
map
(
item
=>
{
traveseUnits
(
item
)
})
obj
.
children
.
map
(
(
item
)
=>
{
traveseUnits
(
item
)
;
})
;
}
}
},
...
...
@@ -751,7 +890,6 @@ $themeColor: #a30e0c;
overflow
:
hidden
;
&
:hover
{
.top-list
,
.bottom-list
{
animation-play-state
:
paused
;
...
...
@@ -806,7 +944,6 @@ $themeColor: #a30e0c;
overflow
:
hidden
;
.imagesVo-image-container
{
// position: relative;
.img-container
{
height
:
100%
;
...
...
@@ -1084,7 +1221,8 @@ $themeColor: #a30e0c;
// height: 750px;
// height: calc(100vh);
background-image
:
url("@/assets/imgs/display/red/unit-bg.jpg")
;
background-size
:
100%
100%
;
padding-bottom
:
32px
;
.wrapper
{
// width;
display
:
flex
;
...
...
@@ -1192,7 +1330,8 @@ $themeColor: #a30e0c;
// flex: 1;
padding
:
60px
40px
0
;
.unit-content-container
{}
.unit-content-container
{
}
.unit-content-title
{
font-size
:
24px
;
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论