|
@@ -1,7 +1,7 @@
|
|
|
<template>
|
|
|
- <div class="detail-main" v-loading="loading">
|
|
|
+ <div class="detail-main">
|
|
|
<div class="c-details">
|
|
|
- <div class="d-left">
|
|
|
+ <div class="d-left" v-loading="loading">
|
|
|
<div class="tops">
|
|
|
<h1>
|
|
|
<div>
|
|
@@ -12,6 +12,7 @@
|
|
|
<div class="cd-tips">
|
|
|
<ul>
|
|
|
<li class="li-tags" v-for="item in getContentTags" :key="item">{{ item }}</li>
|
|
|
+ <li class="type-tag" :class="datas.productType === 2 ? 'boutique' : 'free'">{{ datas.productType === 2 ? '付费精品' : '会员免费' }}</li>
|
|
|
<li>{{ datas.viewTimes || 0 }}次浏览<el-divider direction="vertical"></el-divider></li>
|
|
|
<li>{{ datas.downTimes || 0 }}次下载<el-divider direction="vertical"></el-divider></li>
|
|
|
<li>共{{ datas.docPageSize }}页<el-divider direction="vertical"></el-divider></li>
|
|
@@ -22,27 +23,56 @@
|
|
|
</div>
|
|
|
<el-divider class="heng-line" v-if="lineShow"></el-divider>
|
|
|
</div>
|
|
|
- <div class="middles" :class="{ 'actives': buyed == 0}">
|
|
|
+ <div class="middles middles-summary" :class="{ 'actives': buyed == 0}" v-if=" buyed == 0 && datas.source === 1 && !islogin">
|
|
|
<h3>摘要</h3>
|
|
|
<p>{{ datas.docSummary }}</p>
|
|
|
- <div class="continue" v-show="buyed == 0">全文共{{ datas.docPageSize }}页,<span @click="continued">阅读全文<i
|
|
|
- class="el-icon-arrow-down"></i></span></div>
|
|
|
+ <div class="continue" v-if="buyed == 0">全文共{{ datas.docPageSize }}页,<span @click="continued">阅读全文<i
|
|
|
+ class="el-icon-arrow-down"></i></span></div>
|
|
|
</div>
|
|
|
- <div class="head-tip" id="fixedTop" :class="{ 'is-fixed': fixed }">
|
|
|
+ <div class="middles preview-page" v-if="buyed === 0 && (islogin || (!islogin && datas.source === 2))">
|
|
|
+ <div class="preview-content">
|
|
|
+ <!--剑鱼文档全为PDF-->
|
|
|
+ <div v-if="datas.source === 1 ">
|
|
|
+ <div class="cont-p" id="previewPdfPage"></div>
|
|
|
+ </div>
|
|
|
+ <div class="file-content file-word-docx" v-else>
|
|
|
+ <img v-for="(iUrl, ind) in previewConfig.docinImg" :key="'iUrl_' + ind" :src="iUrl" alt="预览" oncontextmenu="return false">
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="continue" v-if="unreadPage > 0 && datas.docPageSize > 1 && guideText">
|
|
|
+ 剩余{{ unreadPage }}页未读,<span @click="continued">{{ guideText }}
|
|
|
+ <i class="el-icon-arrow-down"></i></span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="head-tip" id="fixedTop" :class="{ 'is-fixed': fixed }" v-if="!docLoadError">
|
|
|
<h3 v-show="fixed">
|
|
|
<i :class="'el-icon-jy-' + fileType(datas.docFileType)"></i>
|
|
|
<span>{{ datas.docName }}</span>
|
|
|
</h3>
|
|
|
<span v-if="page_count" class="pages"><i>{{ page_num }}</i> / <i>{{ page_count }}</i></span>
|
|
|
</div>
|
|
|
+<!-- 豆丁的文档渲染错误后,需要处理成最多预览5页图片-->
|
|
|
+ <div class="bottoms-preview" v-if="docLoadError && buyed === 1">
|
|
|
+ <div class="preview-content">
|
|
|
+ <!--剑鱼文档全为PDF-->
|
|
|
+ <div class="file-content">
|
|
|
+ <img v-for="(iUrl, ind) in previewConfig.docinImg" :key="'iUrl_' + ind" :src="iUrl" alt="预览" oncontextmenu="return false" >
|
|
|
+ </div>
|
|
|
+ <div class="continue" v-if="unreadPage > 0 && datas.docPageSize > 1 && guideText">
|
|
|
+ 剩余{{ unreadPage }}页未读,<span @click="continued">{{ guideText }}
|
|
|
+ <i class="el-icon-arrow-down"></i></span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
<div class="bottoms" id="colWidth">
|
|
|
- <div class="page">
|
|
|
+ <div class="page" v-show="!docLoadError">
|
|
|
<div class="cont-p" v-show="fileTypeThis !== 'docx' && fileTypeThis !== 'xlsx'" id="pdfPage"></div>
|
|
|
<div class="file-content file-word-docx" id="docxPage" v-if="fileTypeThis === 'docx'">
|
|
|
<vue-office-docx
|
|
|
:src="fileSrc.docSrc"
|
|
|
style="margin-bottom: 24px; height: 100vh;"
|
|
|
@rendered="rendered"
|
|
|
+ @error="errorHandler()"
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="file-content file-word-docx" id="xlsxPage" v-if="fileTypeThis === 'xlsx' || fileTypeThis === 'xls'">
|
|
@@ -96,7 +126,7 @@
|
|
|
<span>{{ datas.price }}</span>
|
|
|
<span>原价下载</span>
|
|
|
</el-button>
|
|
|
- <el-button class="prime-cost" @click="downLoadFreeEvent" v-if="islogin && buyed !== 1 && !docsInfo.docStatus && docsInfo.freeDownload !== 1">
|
|
|
+ <el-button class="prime-cost" @click="downLoadFreeEvent" v-if="islogin && buyed !== 1 && !isDocVip && docsInfo.freeDownload !== 1">
|
|
|
<span>使用免费下载特权</span>
|
|
|
<span>(1次机会)</span>
|
|
|
</el-button>
|
|
@@ -107,7 +137,7 @@
|
|
|
</div>
|
|
|
<!-- 精品文档 -->
|
|
|
<div class="file-action-content member-pay" v-else>
|
|
|
- <el-button class="prime-cost origin-cost" type="primary" @click="primeLoadFile" v-if="!docsInfo.docStatus && buyed === 0">
|
|
|
+ <el-button class="prime-cost origin-cost" type="primary" @click="primeLoadFile" v-if="!isDocVip && buyed === 0">
|
|
|
<i class="el-icon-jy-iconJianYu"></i>
|
|
|
<span>{{ datas.price }}</span>
|
|
|
<span>原价下载</span>
|
|
@@ -212,9 +242,9 @@ export default {
|
|
|
config: {
|
|
|
PAGE_TO_VIEW: 0,
|
|
|
SCALE: 1.0,
|
|
|
- CMAP_URL: 'https://cdn.jsdelivr.net/npm/pdfjs-dist@2.1.266/cmaps/',
|
|
|
+ CMAP_URL: 'https://cdn-common.jianyu360.com/cdn/lib/pdfjs-dist/2.1.266/cmaps/',
|
|
|
CMAP_PACKED: true,
|
|
|
- workerSrc: 'https://cdn.jsdelivr.net/npm/pdfjs-dist@2.1.266/build/pdf.worker.min.js'
|
|
|
+ workerSrc: 'https://cdn-common.jianyu360.com/cdn/lib/pdfjs-dist/2.1.266/build/pdf.worker.min.js'
|
|
|
},
|
|
|
pData: {
|
|
|
heightList: []
|
|
@@ -245,7 +275,13 @@ export default {
|
|
|
fileTypeThis: '', // 当前文件类型
|
|
|
excelOptions: {
|
|
|
xls: false
|
|
|
- }
|
|
|
+ },
|
|
|
+ previewConfig: {
|
|
|
+ pageNums: 1,
|
|
|
+ docinImg: []
|
|
|
+ },
|
|
|
+ // 文档加载失败
|
|
|
+ docLoadError: false
|
|
|
}
|
|
|
},
|
|
|
created () {
|
|
@@ -284,8 +320,52 @@ export default {
|
|
|
const nArr = arr.concat(oldArr)
|
|
|
return nArr.splice(0, 3)
|
|
|
},
|
|
|
+ isDocVip () {
|
|
|
+ return this.docsInfo.docStatus > 0
|
|
|
+ },
|
|
|
showCostBtn () {
|
|
|
- return (this.buyed !== 1 && !this.docsInfo.docStatus && this.docsInfo.freeDownload === 1 && this.downloadStatus !== 1) || !this.islogin
|
|
|
+ return (this.buyed !== 1 && !this.isDocVip && this.docsInfo.freeDownload === 1 && this.downloadStatus !== 1) || !this.islogin
|
|
|
+ },
|
|
|
+ // 未购买预览时,未读页码; 或者豆丁渲染错误,
|
|
|
+ unreadPage () {
|
|
|
+ return this.datas.docPageSize - this.previewConfig.pageNums
|
|
|
+ },
|
|
|
+ // P620需求:1、未购买预览时,引流文案
|
|
|
+ // 或者,购买豆丁文件加载时错误后,最多预览5页,最后的引流文案
|
|
|
+ guideText () {
|
|
|
+ // 未登录
|
|
|
+ if (!this.islogin) {
|
|
|
+ // 精品
|
|
|
+ if (this.datas.productType === 2) {
|
|
|
+ return `开通文库会员${this.datas.docMemberDiscount}折下载文档阅读全文`
|
|
|
+ } else {
|
|
|
+ // 会员免费文档
|
|
|
+ return '开通文库会员免费阅读全文'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 预览加载错误直接展示该文案
|
|
|
+ if (this.docLoadError) {
|
|
|
+ return '下载文档阅读全文'
|
|
|
+ }
|
|
|
+ let btnText = '下载文档阅读全文'
|
|
|
+ // 会员
|
|
|
+ if (this.docsInfo?.docStatus > 0 || (this.buyed === 1 && this.datas.source === 2 && this.datas.docFileType !== 2)) {
|
|
|
+ btnText = '下载文档阅读全文'
|
|
|
+ } else if (this.docsInfo?.docStatus <= 0 && this.buyed === 0) {
|
|
|
+ if (this.datas.productType === 2) {
|
|
|
+ btnText = `开通文库会员${this.datas.docMemberDiscount}折下载文档阅读全文`
|
|
|
+ } else {
|
|
|
+ btnText = '开通文库会员免费阅读全文'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 会员免费文档+未下载+不是会员+未使用1次免费下载特权
|
|
|
+ if (this.islogin && this.datas.productType === 1 && this.buyed === 0 && !this.isDocVip && this.docsInfo.freeDownload !== 1) {
|
|
|
+ btnText = '使用免费下载特权阅读全文'
|
|
|
+ }
|
|
|
+ if (this.buyed === 1 && this.datas.docFileType === 2) {
|
|
|
+ btnText = ''
|
|
|
+ }
|
|
|
+ return btnText
|
|
|
}
|
|
|
},
|
|
|
watch: {
|
|
@@ -314,10 +394,11 @@ export default {
|
|
|
},
|
|
|
methods: {
|
|
|
rendered () {
|
|
|
- console.log("渲染完成")
|
|
|
+ console.log('渲染完成')
|
|
|
},
|
|
|
errorHandler () {
|
|
|
- console.log("渲染失败")
|
|
|
+ this.ddNotPdfPreview()
|
|
|
+ console.log('渲染失败')
|
|
|
},
|
|
|
// 使用免费下载特权
|
|
|
downLoadFreeEvent () {
|
|
@@ -374,7 +455,7 @@ export default {
|
|
|
this.btnName = '下载文档'
|
|
|
} else {
|
|
|
if (this.datas.productType === 2) {
|
|
|
- this.btnName = `开通文库会员${this.datas.docMemberDiscount}折下载`
|
|
|
+ this.btnName = `开通文库会员,享${this.datas.docMemberDiscount}折下载`
|
|
|
} else {
|
|
|
this.btnName = '开通文库会员免费下载'
|
|
|
}
|
|
@@ -401,8 +482,12 @@ export default {
|
|
|
this.$nextTick(() => {
|
|
|
// 获取到达页面顶端的值
|
|
|
const heights = document.getElementById('fixedTop')
|
|
|
- // this.offsetTop = heights.offsetTop
|
|
|
- this.offsetTop = heights.getBoundingClientRect().top
|
|
|
+ this.offsetTop = heights ? heights.getBoundingClientRect().top : 0
|
|
|
+ const headerNav = document.getElementById('public-nav')
|
|
|
+ if (headerNav && heights) {
|
|
|
+ const headerTop = headerNav.offsetHeight
|
|
|
+ heights.style.top = headerTop + 'px'
|
|
|
+ }
|
|
|
})
|
|
|
},
|
|
|
initHeight () {
|
|
@@ -411,15 +496,16 @@ export default {
|
|
|
this.fixed = !!(scrollTop > this.offsetTop && this.buyed)
|
|
|
this.watchPage()
|
|
|
let t = document.getElementById('pdfPage')
|
|
|
- if (this.fileTypeThis === 'docx') {
|
|
|
- t = document.getElementById('docxPage')
|
|
|
- } else if (this.fileTypeThis === 'xlsx' || this.fileTypeThis === 'xls') {
|
|
|
- t = document.getElementById('xlsxPage')
|
|
|
+ if (this.fileTypeThis !== 'pdf' && this.buyed) {
|
|
|
+ t = document.getElementsByClassName('bottoms-preview')[0]
|
|
|
+ }
|
|
|
+ if (!this.buyed) {
|
|
|
+ t = document.getElementsByClassName('preview-page')[0]
|
|
|
}
|
|
|
const targetElement = this.$refs.transitionDom
|
|
|
const rect = targetElement.getBoundingClientRect()
|
|
|
const innerHeight = window.innerHeight
|
|
|
- const b = t.getBoundingClientRect().bottom
|
|
|
+ const b = t?.getBoundingClientRect().bottom || 0
|
|
|
const dom = document.getElementById('footp')
|
|
|
if (b < 500 || rect.top < innerHeight) {
|
|
|
dom.style.position = 'unset'
|
|
@@ -441,8 +527,11 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
- renders () {
|
|
|
- const container = document.getElementById('pdfPage')
|
|
|
+ renders (type) {
|
|
|
+ let container = document.getElementById('pdfPage')
|
|
|
+ if (type === 'preview') {
|
|
|
+ container = document.getElementById('previewPdfPage')
|
|
|
+ }
|
|
|
return this.pdfDocument.getPage(this.config.PAGE_TO_VIEW).then((pdfPage) => {
|
|
|
var pdfPageView = new pdfjsViewer.PDFPageView({
|
|
|
container: container,
|
|
@@ -457,7 +546,7 @@ export default {
|
|
|
return pdfPageView.draw()
|
|
|
})
|
|
|
},
|
|
|
- init () {
|
|
|
+ init (type) {
|
|
|
pdfjsLib.GlobalWorkerOptions.workerSrc = this.config.workerSrc
|
|
|
const loadingTask = pdfjsLib.getDocument({
|
|
|
url: this.conts.data,
|
|
@@ -468,9 +557,19 @@ export default {
|
|
|
this.pdfDocument = pdfDocument
|
|
|
this.updateText({ type: 'count', value: this.pdfDocument.numPages })
|
|
|
this.updateText({ type: 'num', value: 1 })
|
|
|
- for (let i = 0; i < this.pdfDocument.numPages; i++) {
|
|
|
+ const numPages = type === 'preview' ? this.previewConfig.pageNums : this.pdfDocument.numPages
|
|
|
+ for (let i = 0; i < numPages; i++) {
|
|
|
this.config.PAGE_TO_VIEW++
|
|
|
- this.renders()
|
|
|
+ this.renders(type)
|
|
|
+ }
|
|
|
+ this.loading = false
|
|
|
+ }).catch((e) => {
|
|
|
+ console.log('-------加载错误了------')
|
|
|
+ console.warn(e)
|
|
|
+ this.loading = false
|
|
|
+ // 文档加载失败
|
|
|
+ if (this.datas.source === 2) {
|
|
|
+ this.ddNotPdfPreview()
|
|
|
}
|
|
|
})
|
|
|
},
|
|
@@ -485,7 +584,8 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
- buyShow () {
|
|
|
+ buyShow (type) {
|
|
|
+ this.loading = true
|
|
|
getShow({ docId: this.docIds }).then(res => {
|
|
|
if (res.data.error_code === 0) {
|
|
|
this.conts = res.data
|
|
@@ -496,28 +596,39 @@ export default {
|
|
|
FileIndex = index
|
|
|
}
|
|
|
})
|
|
|
+
|
|
|
this.fileTypeThis = fileExtensions[FileIndex]
|
|
|
- switch (fileExtensions[FileIndex]) {
|
|
|
- case 'docx':
|
|
|
- this.fileSrc.docSrc = res.data.data
|
|
|
- break
|
|
|
- case 'xlsx':
|
|
|
- this.excelOptions.xls = false
|
|
|
- this.fileSrc.excelSrc = res.data.data
|
|
|
- break
|
|
|
- case 'xls':
|
|
|
- this.excelOptions.xls = true
|
|
|
- this.fileSrc.excelSrc = res.data.data
|
|
|
- default:
|
|
|
- this.init()
|
|
|
- break
|
|
|
+ // switch (fileExtensions[FileIndex]) {
|
|
|
+ // case 'docx':
|
|
|
+ // this.fileSrc.docSrc = res.data.data
|
|
|
+ // break
|
|
|
+ // case 'xlsx':
|
|
|
+ // this.excelOptions.xls = false
|
|
|
+ // this.fileSrc.excelSrc = res.data.data
|
|
|
+ // break
|
|
|
+ // case 'xls':
|
|
|
+ // this.excelOptions.xls = true
|
|
|
+ // this.fileSrc.excelSrc = res.data.data
|
|
|
+ // default:
|
|
|
+ // this.init(type)
|
|
|
+ // break
|
|
|
+ // }
|
|
|
+ // P620购买后,由于excel以及word用插件加载会出现压缩的情况,所以直接用预览最多5张展示处理
|
|
|
+ if (fileExtensions[FileIndex] === 'pdf') {
|
|
|
+ this.init(type)
|
|
|
+ } else {
|
|
|
+ this.loading = false
|
|
|
+ this.ddNotPdfPreview()
|
|
|
}
|
|
|
} else {
|
|
|
+ this.loading = false
|
|
|
Message({
|
|
|
message: res.data.error_msg,
|
|
|
type: 'warning'
|
|
|
})
|
|
|
}
|
|
|
+ }).catch(() => {
|
|
|
+ this.loading = false
|
|
|
})
|
|
|
},
|
|
|
coined () {
|
|
@@ -584,6 +695,8 @@ export default {
|
|
|
document.getElementById('footp').style.bottom = '0'
|
|
|
} else {
|
|
|
document.getElementById('fixedTop').style.display = 'none'
|
|
|
+ // 处理预览展示
|
|
|
+ this.disposePreviewContent(this.datas)
|
|
|
}
|
|
|
this.getDocInfo()
|
|
|
this.coined()
|
|
@@ -595,7 +708,7 @@ export default {
|
|
|
// 监听滚轮
|
|
|
setTimeout(() => {
|
|
|
this.initHeight()
|
|
|
- }, 500);
|
|
|
+ }, 500)
|
|
|
} else {
|
|
|
Message({
|
|
|
message: res.error_msg,
|
|
@@ -604,6 +717,41 @@ export default {
|
|
|
}
|
|
|
})
|
|
|
},
|
|
|
+ // 处理预览展示
|
|
|
+ disposePreviewContent (details) {
|
|
|
+ this.previewConfig.docinImg = []
|
|
|
+ // P620需求 总页数≥3页:最多预览2页;总页数≤2页:最多预览1页。
|
|
|
+ // 预览页数
|
|
|
+ this.previewConfig.pageNums = details.docPageSize >= 3 ? 2 : 1
|
|
|
+ // 豆丁预览图片
|
|
|
+ // source 2豆丁 1 剑鱼
|
|
|
+ if (details.source === 2) {
|
|
|
+ for (let i = 1; i <= this.previewConfig.pageNums; i++) {
|
|
|
+ const ddUrl = `https://docimg1.docin.com/docinviewpic.jsp?file=${details.imgId}&width=920&pageno=${i}&sview=1&clogo=1`
|
|
|
+ this.previewConfig.docinImg.push(ddUrl)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 剑鱼文档,返回的格式全部为pdf
|
|
|
+ if (this.islogin) {
|
|
|
+ this.buyShow('preview')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 豆丁预览(如果购买后的全文加载失败,则走预览逻辑)、非pdf得也走预览逻辑
|
|
|
+ ddNotPdfPreview () {
|
|
|
+ this.docLoadError = true
|
|
|
+ this.fixed = true
|
|
|
+ this.previewConfig.docinImg = []
|
|
|
+ this.previewConfig.pageNums = this.datas.docPageSize >= 5 ? 5 : this.datas.docPageSize
|
|
|
+ for (let i = 1; i <= this.previewConfig.pageNums; i++) {
|
|
|
+ const ddUrl = `https://docimg1.docin.com/docinviewpic.jsp?file=${this.datas.imgId}&width=920&pageno=${i}&sview=1&clogo=1`
|
|
|
+ this.previewConfig.docinImg.push(ddUrl)
|
|
|
+ }
|
|
|
+ // 监听滚轮
|
|
|
+ setTimeout(() => {
|
|
|
+ this.initHeight()
|
|
|
+ }, 1000)
|
|
|
+ },
|
|
|
adverse () {
|
|
|
// 获取广告信息
|
|
|
getJyAdListApi({ codes: ['jydoc-content-right', 'jy-pc-docmember-detail'] }).then(res => {
|
|
@@ -617,7 +765,7 @@ export default {
|
|
|
shoucang () {
|
|
|
if (!this.islogin) {
|
|
|
try {
|
|
|
- window.openLoginDig()
|
|
|
+ window.openLoginDig(false, 'reload')
|
|
|
} catch (e) {
|
|
|
console.log(e)
|
|
|
}
|
|
@@ -648,13 +796,13 @@ export default {
|
|
|
continued () {
|
|
|
if (!this.islogin) {
|
|
|
try {
|
|
|
- window.openLoginDig()
|
|
|
+ window.openLoginDig(false, 'reload')
|
|
|
} catch (e) {
|
|
|
console.log(e)
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
- if (this.buyed !== 1 && !this.docsInfo.docStatus && this.docsInfo.freeDownload !== 1 && this.datas.productType === 1) {
|
|
|
+ if (this.buyed !== 1 && !this.isDocVip && this.docsInfo.freeDownload !== 1 && this.datas.productType === 1) {
|
|
|
this.downLoadFreeEvent()
|
|
|
} else {
|
|
|
this.loadFile()
|
|
@@ -663,7 +811,7 @@ export default {
|
|
|
loadFile () {
|
|
|
if (!this.islogin) {
|
|
|
try {
|
|
|
- window.openLoginDig()
|
|
|
+ window.openLoginDig(false, 'reload')
|
|
|
} catch (e) {
|
|
|
console.log(e)
|
|
|
}
|
|
@@ -743,7 +891,7 @@ export default {
|
|
|
primeLoadFile () {
|
|
|
if (!this.islogin) {
|
|
|
try {
|
|
|
- window.openLoginDig()
|
|
|
+ window.openLoginDig(false, 'reload')
|
|
|
} catch (e) {
|
|
|
console.log(e)
|
|
|
}
|
|
@@ -790,7 +938,7 @@ export default {
|
|
|
}
|
|
|
.cont-p {
|
|
|
.page, .canvasWrapper, canvas {
|
|
|
- width: 100%!important;
|
|
|
+ max-width: 100% !important;
|
|
|
height: auto;
|
|
|
}
|
|
|
}
|
|
@@ -881,7 +1029,22 @@ export default {
|
|
|
border-right: none !important;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+ .type-tag {
|
|
|
+ padding: 1px 8px 1px 8px;
|
|
|
+ font-size: 12px;
|
|
|
+ line-height: 18px;
|
|
|
+ text-align: center;
|
|
|
+ margin-right: 8px;
|
|
|
+ border-radius: 4px;
|
|
|
+ &.free {
|
|
|
+ background: linear-gradient(98deg, #FFA674 0%, #F01212 100%);
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+ &.boutique{
|
|
|
+ background: linear-gradient(270deg, #F1D090 0%, #FAE7CA 100%);
|
|
|
+ color: #B1700E;
|
|
|
+ }
|
|
|
+ }
|
|
|
.coin {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
@@ -1022,11 +1185,12 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- .middles {
|
|
|
- padding: 24px 40px;
|
|
|
+ .middles, .bottoms-preview {
|
|
|
+ padding: 24px 0;
|
|
|
background: #fff;
|
|
|
border-radius: 4px;
|
|
|
margin: 16px 0;
|
|
|
+ position: relative;
|
|
|
|
|
|
h3 {
|
|
|
font-size: 18px;
|
|
@@ -1043,11 +1207,19 @@ export default {
|
|
|
}
|
|
|
|
|
|
.continue {
|
|
|
+ position: absolute;
|
|
|
+ width: 100%;
|
|
|
+ height: 400px;
|
|
|
color: #686868;
|
|
|
font-size: 16px;
|
|
|
line-height: 24px;
|
|
|
- text-align: center;
|
|
|
- margin-top: 36px;
|
|
|
+ display: flex;
|
|
|
+ align-items: flex-end;
|
|
|
+ justify-content: center;
|
|
|
+ padding-bottom: 27px;
|
|
|
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, #fff 75%);
|
|
|
+ bottom: 24px;
|
|
|
+ left:0;
|
|
|
|
|
|
span {
|
|
|
color: #2CB7CA;
|
|
@@ -1059,7 +1231,15 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+ .middles.middles-summary{
|
|
|
+ padding: 24px 40px;
|
|
|
+ .continue {
|
|
|
+ position: unset;
|
|
|
+ height: unset;
|
|
|
+ color: #686868;
|
|
|
+ margin-top: 36px;
|
|
|
+ }
|
|
|
+ }
|
|
|
.actives {
|
|
|
// height: 656px;
|
|
|
padding: 24px 40px 48px;
|
|
@@ -1121,10 +1301,15 @@ export default {
|
|
|
top: 0;
|
|
|
width: 920px;
|
|
|
}
|
|
|
-
|
|
|
+ .bottoms-preview{
|
|
|
+ padding: 24px 0;
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 4px;
|
|
|
+ margin: 16px 0;
|
|
|
+ }
|
|
|
.bottoms {
|
|
|
- // position: fixed;
|
|
|
- // bottom: 0;
|
|
|
+ //position: fixed;
|
|
|
+ //bottom: 0;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
|
|
@@ -1239,4 +1424,22 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+::v-deep {
|
|
|
+ .page:not(:first-of-type) {
|
|
|
+ border-top: 6px solid #f2f2f2;
|
|
|
+ }
|
|
|
+ // pdf自带的注释层样式
|
|
|
+ .annotationLayer {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+}
|
|
|
+.preview-content {
|
|
|
+ img:not(:first-of-type) {
|
|
|
+ border-top: 6px solid #f2f2f2;
|
|
|
+ }
|
|
|
+}
|
|
|
+.bottoms-preview{
|
|
|
+ top: 0 !important;
|
|
|
+}
|
|
|
</style>
|