<template>
|
<div class="page">
|
<div class="page-header">
|
<p><span>王永炎院士学术成果</span></p>
|
</div>
|
<div class="page-main-father">
|
<ul class="page-main">
|
<li class="page-main-name">
|
<p>
|
<el-button icon="el-icon-arrow-left" @click="goBack()">返回</el-button>
|
</p>
|
<p>{{ details.name }}</p>
|
</li>
|
<li class="page-main-time">
|
<p>
|
<span>{{ details.source }}</span>
|
<span>{{ details.year }}</span>
|
<span v-if="details.DOI">doi:{{ details.DOI }}</span>
|
</p>
|
</li>
|
<li class="page-main-title">
|
<p>
|
<span v-for="(item, index) in details.author" :key="index">{{ item }}</span>
|
</p>
|
<p v-if="details.cleanAbstract">
|
<span class="abstract-title">摘要:</span>
|
<span class="page-main-abstract-main" v-html="details.cleanAbstract"></span>
|
</p>
|
<p v-if="details.keyWords && details.keyWords.length > 0">
|
<span>关键词:</span>
|
<span class="page-main-keyword" v-for="(item, index) in details.keyWords" :key="index">{{ item
|
}}</span>
|
</p>
|
<p v-if="details.cmsItemType != 'video' && details.cmsItemType != 'audio'">
|
<el-button @click="openPdf(details.name)">查看全文</el-button>
|
</p>
|
<p class="page-main-video" v-if="details.cmsItemType == 'video'">
|
<video :src="details.src" controls autoplay class="video" width="70%"></video>
|
</p>
|
<p class="page-main-audio" v-if="details.cmsItemType == 'audio'">
|
<audio :src="details.src" controls autoplay class="video" width="100%"></audio>
|
</p>
|
</li>
|
<li class="page-main-literature">
|
<p class="literature-header">相关文献</p>
|
<div class="content-right" v-loading="loading" element-loading-text="检索结果加载中"
|
element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0)">
|
<!-- 结果展示 -->
|
<ul class="right-main" v-for="(item, index) in resultList" :key="index">
|
<li class="main-name">
|
<p>{{ item.name }}</p>
|
<p>
|
<el-button @click="goPage(item.id)">详情</el-button>
|
<el-button>AI智能阅读</el-button>
|
</p>
|
</li>
|
<li class="main-sources">
|
<span>{{ item.resourceTypeName }}</span>
|
<span>{{ item.source }}</span>
|
<span>{{ item.year }}</span>
|
<span v-if="item.DOI">doi:{{ item.DOI }}</span>
|
</li>
|
<li class="main-author">
|
{{ item.author }}
|
</li>
|
<li class="main-title" :title="item.abstract" v-if="item.cleanAbstract">
|
<span>摘要: </span>
|
<span class="page-main-abstract" v-html="item.cleanAbstract"></span>
|
</li>
|
<li class="main-keyword" v-if="item.keyWords && item.keyWords.length > 0">
|
<span>关键词:</span>
|
<span class="keyWord" v-for="(citem, cindex) in item.keyWords" :key="cindex">
|
{{ citem }}
|
</span>
|
</li>
|
</ul>
|
</div>
|
</li>
|
</ul>
|
</div>
|
<el-empty v-if="!loading && details == ''"></el-empty>
|
<el-dialog v-model="dialogVisible" :title="pdfName" width="60vw" top="3vh" bottom="2vh"
|
:visible.sync="dialogVisible" class="custom-dialog">
|
<div class="pdfInfoBox" v-loading="pdfLoading" element-loading-text="图片加载中"
|
element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0)">
|
<div v-for="(item, index) in pdfList" :key="index" class="pdfItem" :page="index + 1">
|
<img :src="item.showSrc" alt="" style="min-height: 550px" loading="lazy" />
|
<el-divider content-position="center"> 第 {{ index + 1 }} 页 </el-divider>
|
</div>
|
</div>
|
<el-empty v-if="!pdfLoading && !pdfList.length"></el-empty>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script>
|
import { requestCtx, appRefCode } from "@/assets/js/config";
|
import fileApi from "@/assets/js/middleGround/api/file";
|
import MG from "@/assets/js/middleGround/WebMiddleGroundApi.js";
|
import moment from "moment";
|
export default {
|
data() {
|
return {
|
observer: null,
|
pdfName: "",
|
dialogVisible: false,
|
pdfList: [],
|
relatedList: [],
|
// 输入框的内容
|
inputValue: "",
|
// 选择的类型
|
inputType: "",
|
//类型选择
|
inputOptions: [
|
{ value: "all", label: "全部" },
|
{ value: "Name", label: "标题" },
|
{ value: "author", label: "作者" },
|
{ value: "keyWords", label: "关键词" },
|
{ value: "abstract", label: "摘要" },
|
{ value: "source", label: "来源" },
|
],
|
isDisplay: false,
|
details: {},
|
// 类型
|
category: {
|
title: "类型",
|
isDisplay: true,
|
id: "",
|
index: "",
|
list: [
|
{
|
name: "期刊",
|
num: 190,
|
check: false,
|
},
|
{
|
name: "图书",
|
num: 190,
|
check: false,
|
},
|
{
|
name: "视频",
|
num: 190,
|
check: false,
|
},
|
{
|
name: "音频",
|
num: 190,
|
check: false,
|
},
|
],
|
},
|
resourceTypeRefCode: "resourceType",
|
resourceTypeValueList: [],
|
// 查询结果
|
resultList: [],
|
loading: false,
|
pdfLoading: false,
|
};
|
},
|
async mounted() {
|
await this.getContent(this.$route.query.id);
|
await this.getSelectData();
|
// 查找关键词相匹配的文章
|
if (this.details.keyWords && this.details.keyWords.length) {
|
for (let i = 0; i < this.details.keyWords.length; i++) {
|
const item = this.details.keyWords[i];
|
this.inputValue = item
|
this.inputType = "keyWords"
|
await this.getItemListOne()
|
}
|
this.loading = false;
|
console.log(this.resultList, "处理好的");
|
} else {
|
this.getItemList()
|
}
|
if (this.resultList.length == 0) {
|
this.getItemList()
|
}
|
|
//处理文件
|
if (this.details.cmsItemType == "video" || this.details.cmsItemType == "audio") {
|
if (this.details.file != "") {
|
this.details.src = await this.getResourcePath(this.details.file)
|
console.log(this.details.src, "视频地址");
|
}
|
}
|
|
|
|
|
this.observer = new IntersectionObserver(this.pageChangeCallback, {
|
root: null, // 指定根元素,这里设为 null,表示选取整个视窗作为根元素。
|
rootMargin: '0px', // 指定根元素的边界,这里设为 "0px",表示根元素的边界和视窗的边界重合
|
threshold: 0.1 // 指定交叉比例,这里设为 0.5,表示当目标元素一半或更多显示在视窗中时触发回调函数。
|
})
|
},
|
methods: {
|
// 根据id请求该页面数据
|
async getContent(id) {
|
this.loading = true;
|
const res = await MG.resource
|
.getItem({
|
path: "*",
|
queryType: "*",
|
fields: {
|
cmsType: ["cmsItem"],
|
"Id=": [id + ""],
|
source: [],
|
year: [],
|
abstract: [],
|
keyWords: [],
|
author: [],
|
DOI: [],
|
AIReading: [],
|
file: [],
|
IssueNumber: [],
|
},
|
})
|
res.datas.forEach((item) => {
|
item.year = moment(item.year).format("YYYY-MM-DD")
|
if (typeof item.keyWords === 'string') {
|
item.keyWords = item.keyWords.split(";;");
|
} else {
|
// 设置一个默认值或者进行其他错误处理
|
item.keyWords = [];
|
}
|
if (item.author && item.author.length > 0) {
|
item.author = item.author.split(";");
|
}
|
if (item.abstract) {
|
item.cleanAbstract = item.abstract.replace(/<[^>]+>/g, "");
|
}
|
|
const foundItem = this.category.list.find((citem) => citem.value == item.cmsItemType);
|
item.resourceTypeName = foundItem ? foundItem.name : '';
|
})
|
this.details = res.datas[0]
|
},
|
|
// 在此点击详情
|
async goPage(id) {
|
await this.getContent(id);
|
await this.getSelectData();
|
this.resultList = [];
|
// 查找关键词相匹配的文章
|
if (this.details.keyWords && this.details.keyWords.length) {
|
for (let i = 0; i < this.details.keyWords.length; i++) {
|
const item = this.details.keyWords[i];
|
this.inputValue = item
|
this.inputType = "keyWords"
|
this.getItemListOne()
|
}
|
} else {
|
this.getItemList()
|
}
|
if (this.resultList.length == 0) {
|
this.getItemList()
|
}
|
|
//处理文件
|
if (this.details.cmsItemType == "video" || this.details.cmsItemType == "audio") {
|
if (this.details.file != "") {
|
this.details.src = await this.getResourcePath(this.details.file)
|
}
|
}
|
// 滚动到页面顶部
|
this.$nextTick(() => {
|
const pageMain = document.querySelector('.page-main-father');
|
if (pageMain) {
|
pageMain.scrollTo({
|
top: 0,
|
behavior: 'smooth'
|
});
|
}
|
});
|
},
|
|
goBack() {
|
this.$router.go(-1);
|
},
|
|
// 获取阿里云加速地址 (视频,音频)
|
async getResourcePath(md5) {
|
try {
|
// 调用 fileApi.getAliVod 方法获取资源路径
|
const res = await fileApi.getAliVod({
|
md5,
|
appRefCode,
|
});
|
|
// 如果返回的数据不为空且定义明确,则直接返回 res.data
|
if (res.data && res.data !== "") {
|
return res.data;
|
}
|
|
// 如果返回的数据为空或未定义,则拼接默认下载路径
|
return requestCtx + "/file/api/ApiDownload?md5=" + md5;
|
} catch (error) {
|
// 捕获异常并打印错误日志
|
console.error("获取资源路径失败:", error);
|
// 返回一个默认值或抛出错误(根据业务需求)
|
return requestCtx + "/file/api/ApiDownload?md5=" + md5;
|
}
|
},
|
|
// 获取相关资源
|
async getPDFInfo(md5) {
|
const res = await this.MG.file.getPdfInfo({
|
md5
|
})
|
if (!res || !res.totalPages) return (this.pdfList = [])
|
for (let index = 0; index < res.totalPages; index++) {
|
const src =
|
requestCtx + '/file/GetPdfPageImage?md5=' + md5 + '&index=' + (index + 1) + '&dpi=300' + '&width=800'
|
this.pdfList.push({
|
src,
|
showSrc: ''
|
})
|
}
|
this.pdfLoading = false;
|
// 启动页码观察
|
setTimeout(() => {
|
this.initObservation()
|
}, 500)
|
},
|
|
initObservation() {
|
const sections = document.querySelectorAll('.pdfItem')
|
sections.forEach((section) => {
|
// observer 观察每个元素,以便在它们进入或离开视窗时触发回调函数。
|
const isObserver = section.getAttribute('observer')
|
if (!isObserver) {
|
this.observer.observe(section)
|
|
section.setAttribute('observer', '1')
|
}
|
})
|
// 预加载前几页资源
|
const preloadPages = 3
|
for (let i = 0; i < Math.min(preloadPages, sections.length); i++) {
|
const section = sections[i]
|
const page = section.getAttribute('page')
|
if (this.pdfList[page - 1].showSrc == '') {
|
this.pdfList[page - 1].showSrc = this.pdfList[page - 1].src
|
}
|
}
|
},
|
|
pageChangeCallback(entries, observer) {
|
//entries:代表观察到的目标元素的集合。 observer:代表观察者对象。
|
entries.forEach((entry) => {
|
//entry.isIntersecting:检查当前目标元素是否与根元素相交。
|
if (entry.isIntersecting) {
|
const target = entry.target
|
//entry.target:获取当前目标元素
|
const page = target.getAttribute('page')
|
if (this.pdfList[page - 1].showSrc == '') {
|
this.pdfList[page - 1].showSrc = this.pdfList[page - 1].src
|
}
|
}
|
})
|
},
|
|
|
|
//获取下拉选择框的内容
|
async getSelectData() {
|
try {
|
// 同时发起两个异步请求,并等待它们的结果
|
const [resourceListResult] = await Promise.all([
|
this.getSelectContent(this.resourceTypeRefCode),
|
]);
|
this.category.list = resourceListResult.option;
|
if (this.category.list && this.category.list.length) {
|
this.category.list.forEach((item) => {
|
this.resourceTypeValueList.push(item.value)
|
});
|
}
|
|
} catch (error) {
|
console.error("获取下拉框数据失败:", error);
|
}
|
},
|
|
//获取选择内容
|
getSelectContent(refCode) {
|
let requestData = { refCodes: [refCode] };
|
return MG.store
|
.getProductTypeField(requestData)
|
.then((res) => {
|
const selestList = JSON.parse(res[0].config);
|
return selestList;
|
}).catch((error) => {
|
console.error("获取选择内容失败:", error);
|
return null;
|
});
|
},
|
|
// 复制一份
|
async getItemListOne() {
|
let searchData = {}; // 初始化一个空对象来存储搜索数据
|
if (this.inputValue) { // 如果输入值存在
|
if (this.inputType != "all") { // 如果输入类型不是"all"
|
// 将输入值与输入类型关联,并添加一个星号(*)作为后缀
|
searchData[this.inputType + "*"] = this.inputValue;
|
} else { // 如果输入类型是"all"
|
// 遍历输入选项
|
for (let index = 0; index < this.inputOptions.length; index++) {
|
const item = this.inputOptions[index]; // 获取当前选项
|
if (item.value !== "all") { // 如果当前选项的值不是"all"
|
if (!Object.keys(searchData).length) { // 如果searchData是空的
|
// 将第一个选项的值与输入值关联,并添加一个星号(*)作为后缀
|
searchData[item.value + "*"] = this.inputValue;
|
} else { // 如果searchData不是空的
|
// 使用"||"作为前缀,将后续选项的值与输入值关联,并添加一个星号(*)作为后缀
|
// 这通常用于构建一个逻辑或(OR)查询
|
searchData["||" + item.value + "*"] = this.inputValue;
|
}
|
}
|
}
|
}
|
}
|
const res = await MG.resource
|
.getItem({
|
path: "*",
|
queryType: "*",
|
paging: {
|
size: 99999
|
},
|
fields: {
|
cmsType: ["cmsItem"],
|
// 'id=':[this.$route.params.key],
|
"resourceType*": this.resourceTypeValueList,
|
source: [],
|
year: [],
|
abstract: [],
|
keyWords: [],
|
author: [],
|
DOI: [],
|
AIReading: [],
|
file: [],
|
IssueNumber: [],
|
...searchData,
|
},
|
})
|
res.datas.forEach((item) => {
|
item.year = moment(item.year).format("YYYY-MM-DD")
|
if (typeof item.keyWords === 'string') {
|
item.keyWords = item.keyWords.split(";;");
|
} else {
|
// 设置一个默认值或者进行其他错误处理
|
item.keyWords = [];
|
}
|
if (item.abstract) {
|
item.cleanAbstract = item.abstract.replace(/<[^>]+>/g, "");
|
}
|
const foundItem = this.category.list.find((citem) => citem.value == item.cmsItemType);
|
item.resourceTypeName = foundItem ? foundItem.name : '';
|
console.log(this.details.id, "");
|
|
if (!this.resultList.find(citem => citem.id === item.id) && item.id != this.details.id && this.resultList.length < 11) {
|
this.resultList.push(item);
|
}
|
});
|
},
|
|
async openPdf(name) {
|
this.pdfLoading = true;
|
this.pdfList = []
|
this.pdfName = name;
|
this.dialogVisible = true;
|
await this.getPDFInfo(this.details.file);
|
},
|
|
// 请求所有的数据
|
getItemList() {
|
MG.resource
|
.getItem({
|
path: "*",
|
queryType: "*",
|
paging: {
|
size: 5
|
},
|
fields: {
|
cmsType: ["cmsItem"],
|
"resourceType*": this.resourceTypeValueList,
|
source: [],
|
year: [],
|
abstract: [],
|
keyWords: [],
|
author: [],
|
DOI: [],
|
AIReading: [],
|
file: [],
|
IssueNumber: [],
|
},
|
})
|
.then((res) => {
|
res.datas.forEach((item) => {
|
item.year = moment(item.year).format("YYYY-MM-DD")
|
if (typeof item.keyWords === 'string') {
|
item.keyWords = item.keyWords.split(";;");
|
} else {
|
// 设置一个默认值或者进行其他错误处理
|
item.keyWords = [];
|
}
|
if (item.abstract) {
|
item.cleanAbstract = item.abstract.replace(/<[^>]+>/g, "");
|
}
|
const foundItem = this.category.list.find((citem) => citem.value == item.cmsItemType);
|
item.resourceTypeName = foundItem ? foundItem.name : '';
|
})
|
this.resultList = res.datas
|
this.loading = false;
|
}).catch((err) => {
|
console.log("替换数据请求失败");
|
});
|
},
|
|
//去重
|
uniqueById(array) {
|
const uniqueItems = new Map();
|
array.forEach(item => {
|
if (!uniqueItems.has(item.id)) {
|
uniqueItems.set(item.id, item);
|
}
|
});
|
return Array.from(uniqueItems.values());
|
}
|
},
|
};
|
</script>
|
|
<style lang="less" scoped>
|
.page {
|
width: 100%;
|
height: 100%;
|
box-sizing: border-box;
|
background-color: #e9e1d4;
|
position: relative;
|
overflow: hidden;
|
display: flex;
|
flex-direction: column;
|
}
|
|
.page-header {
|
padding: 8px 0;
|
height: 9.4%;
|
width: 100%;
|
text-align: left;
|
border-bottom: 2px solid #937950;
|
background-color: #e9e1d4;
|
position: sticky;
|
top: 0;
|
z-index: 100;
|
|
p {
|
height: 100%;
|
font-family: Alimama DongFangDaKai;
|
font-size: 30px;
|
text-indent: 1em;
|
border-bottom: 1px solid #937950;
|
display: flex;
|
align-items: center;
|
}
|
}
|
|
.page-main-father {
|
flex: 1;
|
width: 100%;
|
height: 100%;
|
min-width: 1200px;
|
overflow: auto;
|
padding-top: 2%;
|
padding-bottom: 2%;
|
}
|
|
|
.page-main {
|
background-color: #fcfaf3;
|
width: 77.3%;
|
margin: 0 auto;
|
margin-top: 1%;
|
|
.page-main-name {
|
display: flex;
|
align-items: center;
|
padding: 21px 28px;
|
border-bottom: 1px solid #d8cbb6;
|
|
::v-deep .el-button {
|
font-size: 14px;
|
background-color: transparent;
|
color: #937950;
|
border: 1px solid #937950;
|
border-radius: 0;
|
|
&:hover {
|
background-color: #937950;
|
color: #fffdf8;
|
}
|
}
|
|
p:nth-child(1) {
|
width: 8%;
|
}
|
|
p:nth-child(2) {
|
width: 92%;
|
text-align: center;
|
font-family: Source Han Sans;
|
font-size: 32px;
|
font-weight: 350;
|
color: #937950;
|
}
|
}
|
|
.page-main-time {
|
padding: 8px 0 16px 0;
|
display: flex;
|
justify-content: center;
|
font-family: Source Han Sans;
|
font-size: 14px;
|
font-weight: normal;
|
line-height: 22px;
|
border-bottom: 1px solid #d8cbb6;
|
|
p {
|
span {
|
margin-right: 20px;
|
}
|
}
|
}
|
|
.page-main-title {
|
padding: 13px 185px 25px 185px;
|
border-bottom: 1px solid #d8cbb6;
|
|
::v-deep .el-button {
|
font-size: 14px;
|
background-color: #937950;
|
color: #fff;
|
border: 1px solid #937950;
|
border-radius: 0;
|
|
&:hover {
|
background-color: #937950;
|
color: #fffdf8;
|
}
|
}
|
|
.page-main-abstract {
|
font-family: Source Han Sans !important;
|
font-size: 14px !important;
|
line-height: 26px !important;
|
color: #333333 !important;
|
font-weight: 100 !important;
|
}
|
|
p:nth-child(1) {
|
display: flex;
|
justify-content: center;
|
margin-bottom: 13px;
|
|
span {
|
font-family: Source Han Sans;
|
font-size: 14px;
|
font-weight: 350;
|
color: #604d2f;
|
border-right: 1px solid #937950;
|
padding: 0 21px;
|
}
|
|
span:last-child {
|
border: none;
|
}
|
}
|
|
p:nth-child(2) {
|
margin-bottom: 13px;
|
font-family: Source Han Sans;
|
font-size: 14px;
|
line-height: 26px;
|
color: #333333;
|
overflow: hidden;
|
display: -webkit-box;
|
-webkit-box-orient: vertical;
|
|
.abstract-title{
|
font-weight: bold;
|
}
|
span {
|
font-family: Source Han Sans;
|
font-size: 14px;
|
color: #333333;
|
}
|
|
}
|
|
p:nth-child(3) {
|
margin-bottom: 24px;
|
|
span:nth-child(1) {
|
font-family: Source Han Sans;
|
font-weight: 700;
|
font-size: 14px;
|
}
|
|
.page-main-keyword {
|
padding: 5px 10px;
|
color: #937950;
|
border: 1px solid #937950;
|
font-family: Source Han Sans;
|
font-size: 12px;
|
font-weight: 350;
|
line-height: 28px;
|
margin-right: 13px;
|
}
|
}
|
}
|
|
.page-main-video {
|
padding: 10px;
|
height: 377px;
|
width: auto;
|
display: flex;
|
justify-content: center;
|
|
video {
|
border-radius: 10px;
|
border: 1px solid #dcdcdc;
|
box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1);
|
}
|
}
|
|
.page-main-audio {
|
padding: 10px;
|
display: flex;
|
justify-content: center;
|
|
audio {}
|
}
|
|
.page-main-literature {
|
padding: 10px 93px 20px 185px;
|
|
.literature-header {
|
font-family: Source Han Sans;
|
font-size: 14px;
|
font-weight: bold;
|
line-height: 26px;
|
}
|
|
.content-right {
|
min-height: 600px;
|
padding: 14px 20px 20px 14px;
|
|
.right-header {
|
display: flex;
|
|
li {
|
background: #ffffff;
|
border: 1px solid #937950;
|
padding: 3px 10px;
|
margin-right: 13px;
|
display: flex;
|
align-items: center;
|
font-family: Poppins;
|
font-size: 13px;
|
color: #937950;
|
|
img {
|
cursor: pointer;
|
height: 16px;
|
width: auto;
|
margin-left: 5px;
|
}
|
}
|
}
|
|
.right-number {
|
display: flex;
|
justify-content: flex-end;
|
align-items: flex-start;
|
margin-bottom: 12px;
|
|
.number-number {
|
font-family: Source Han Sans;
|
font-weight: 350;
|
font-size: 14px;
|
color: #2c2c2c;
|
margin-right: 20px;
|
|
span {
|
color: #937950;
|
}
|
}
|
|
.number-time {
|
font-family: Source Han Sans;
|
font-size: 12px;
|
font-weight: 350;
|
color: #2c2c2c;
|
|
span {
|
margin-left: 11px;
|
}
|
|
img {
|
height: 12px;
|
width: auto;
|
}
|
}
|
}
|
|
|
.right-main {
|
margin-bottom: 20px;
|
padding: 19px 30px 15px 30px;
|
border: 1px solid #decaac;
|
|
.main-name {
|
display: flex;
|
align-items: center;
|
justify-content: space-between;
|
font-family: Source Han Sans;
|
font-size: 16px;
|
font-weight: bold;
|
color: #937950;
|
margin-bottom: 5px;
|
|
::v-deep .el-button {
|
font-size: 14px;
|
background-color: transparent;
|
color: #937950;
|
border: 1px solid #937950;
|
border-radius: 0;
|
|
&:hover {
|
background-color: #937950;
|
color: #fffdf8;
|
}
|
}
|
}
|
|
.main-sources {
|
span:nth-child(1) {
|
padding: 3px 5px;
|
background-color: #87a8b9;
|
color: #fff;
|
margin-right: 10px;
|
|
}
|
|
span:nth-child(2) {
|
font-family: Source Han Sans;
|
font-size: 12px;
|
font-weight: 350;
|
padding-right: 10px;
|
color: #333;
|
|
}
|
|
span:nth-child(3) {
|
font-family: Source Han Sans;
|
font-size: 12px;
|
font-weight: 350;
|
padding-left: 10px;
|
padding-right: 10px;
|
color: #333;
|
border-left: 1px solid #2c2c2c;
|
}
|
|
span:nth-child(4) {
|
font-family: Source Han Sans;
|
font-size: 12px;
|
font-weight: 350;
|
padding-left: 10px;
|
color: #333;
|
border-left: 1px solid #2c2c2c;
|
}
|
margin-bottom: 15px;
|
}
|
|
.main-author {
|
margin-bottom: 12px;
|
font-family: Source Han Sans;
|
font-size: 12px;
|
font-weight: 350;
|
color: #333;
|
}
|
|
.main-title {
|
margin-bottom: 15px;
|
font-family: Source Han Sans;
|
font-size: 14px;
|
font-weight: 350;
|
line-height: 26px;
|
color: #333333;
|
overflow: hidden;
|
display: -webkit-box;
|
-webkit-box-orient: vertical;
|
-webkit-line-clamp: 3;
|
|
span {
|
font-family: Source Han Sans;
|
font-weight: 700;
|
font-size: 14px;
|
}
|
}
|
|
.page-main-abstract {
|
font-family: Source Han Sans !important;
|
font-size: 14px !important;
|
font-weight: 350 !important;
|
line-height: 26px !important;
|
color: #333333 !important;
|
}
|
|
.main-keyword {
|
span:nth-child(1) {
|
font-family: Source Han Sans;
|
font-weight: 700;
|
font-size: 14px;
|
}
|
|
.keyWord {
|
|
padding: 5px 10px;
|
color: #937950;
|
border: 1px solid #937950;
|
font-family: Source Han Sans;
|
font-size: 12px;
|
font-weight: 350;
|
line-height: 28px;
|
margin-right: 13px;
|
}
|
}
|
}
|
}
|
}
|
}
|
|
|
.pdfInfoBox {
|
height: 85vh;
|
margin-top: 20px;
|
overflow: auto;
|
width: 100%;
|
|
img {
|
display: block;
|
margin: 0 auto;
|
width: 70%;
|
box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.1);
|
object-fit: contain;
|
}
|
}
|
|
::v-deep .el-loading-spinner {
|
.el-loading-text {
|
font-size: 14px;
|
color: #937950;
|
}
|
|
.el-icon-loading {
|
font-size: 14px;
|
color: #937950;
|
}
|
}
|
</style>
|
|
<style lang="less">
|
.custom-dialog {
|
overflow: hidden !important;
|
|
.el-dialog__body {
|
padding: 0;
|
}
|
|
.el-dialog__header {
|
background-color: #937950;
|
|
.el-dialog__title {
|
display: flex;
|
justify-content: space-between;
|
align-items: center;
|
color: #fff;
|
font-weight: 900;
|
font-size: 16px;
|
|
span:nth-child(2):hover {
|
cursor: pointer;
|
}
|
}
|
|
|
.el-dialog__title,
|
.el-dialog__headerbtn .el-dialog__close {
|
color: #fff;
|
font-weight: 900;
|
font-size: 16px;
|
}
|
}
|
}
|
</style>
|