|
@@ -21,7 +21,8 @@
|
|
|
<div class="ppt-wrap flex-center">
|
|
|
<!-- 封面 -->
|
|
|
<div class="ppt-item" id="cover" style="background-size:20%;">
|
|
|
- <Cover :pageInfo="coverInfo.page"></Cover>
|
|
|
+ <!-- <Cover :pageInfo="coverInfo.page"></Cover> -->
|
|
|
+ <CustomCover :pageInfo="coverInfo.page"></CustomCover>
|
|
|
</div>
|
|
|
<!-- 内容 -->
|
|
|
<div class="ppt-item" v-for="(item,index) in pageList" :key="item.id">
|
|
@@ -43,57 +44,6 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
- <!-- 虚拟列表 -->
|
|
|
- <template v-else>
|
|
|
- <div class="list-wrap" id="scroller" @scroll="handleScroll">
|
|
|
- <div class="ppt-wrap flex-center" id="scroller-inner">
|
|
|
- <!-- <div class="ppt-item" v-for="(item,index) in loadList" :key="item.id" :data-set="item.title">
|
|
|
- <span style="font-size:24px;">第{{index}}项,title{{item.title}}</span>
|
|
|
- </div> -->
|
|
|
- <template v-for="(item) in loadList">
|
|
|
- <template v-if="item.index">
|
|
|
- <!-- 是封面 -->
|
|
|
- <div class="ppt-item" id="cover" v-if="coverInfo.page" :key="item.id" :data-set="item.title">
|
|
|
- <Cover :pageInfo="coverInfo.page"></Cover>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <template v-else-if="item.idName==='back'">
|
|
|
- <!-- 是封底 -->
|
|
|
- <div class="ppt-item" id="back" :key="item.id" :data-set="item.title">
|
|
|
- <img src="~@/assets/img/pptlastimg.png" class="pptbg" />
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <template v-else>
|
|
|
- <!-- 是内容 -->
|
|
|
- <div class="ppt-item" :key="item.id" :data-set="item.title">
|
|
|
- <div class="title-wrap">
|
|
|
- {{item.title}}
|
|
|
- </div>
|
|
|
- <component
|
|
|
- :is="getComponentName(item.modelId)"
|
|
|
- :ref="`pptPage_${item.sourceIndex}`"
|
|
|
- :pageIndex="item.sourceIndex"
|
|
|
- :pageItem="item"
|
|
|
- type="show"
|
|
|
- >
|
|
|
- </component>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </template>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <!-- 封面封底 -->
|
|
|
- <template v-if="isPublish&&!loadingAll">
|
|
|
- <div class="fixed-wrap">
|
|
|
- <div class="ppt-item" id="changecover">
|
|
|
- <Cover :pageInfo="coverInfo.page"></Cover>
|
|
|
- </div>
|
|
|
- <div class="ppt-item" id="changeback" style="overflow:hidden;">
|
|
|
- <img src="~@/assets/img/pptlastimg.png" class="pptbg" style="width:100%;"/>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
<!-- <trans-report
|
|
|
v-if="coverInfo.page"
|
|
|
:transReportShow="transReportShow"
|
|
@@ -106,6 +56,7 @@
|
|
|
|
|
|
<script>
|
|
|
import Cover from './components/Cover.vue';
|
|
|
+import CustomCover from './components/CustomCover.vue';
|
|
|
import TransReport from './components/catalog/transReport.vue';
|
|
|
//import {pageList} from './utils/mock';
|
|
|
import {countComponentName,pptInit,pptConfigInit,toTextProps,toJson,svg2Base64,getImgRealSize,calcScale,getShapeOptions,createRandomCode,getTableData} from './utils/untils';
|
|
@@ -125,7 +76,7 @@ import {uploadFileDirect} from "@/utils/common.js"
|
|
|
HightchartsExport(Highcharts)
|
|
|
HighchartszhCN(Highcharts)
|
|
|
export default {
|
|
|
- components: {Cover,TransReport},
|
|
|
+ components: {Cover,TransReport,CustomCover},
|
|
|
mixins:[pptmixin,mixins,virtualScroll],
|
|
|
data() {
|
|
|
return {
|
|
@@ -172,11 +123,11 @@ export default {
|
|
|
methods: {
|
|
|
async transHandle(){
|
|
|
//需要校验PPT
|
|
|
- const {result,hintText} = this.checkPPT()
|
|
|
+ /* const {result,hintText} = this.checkPPT()
|
|
|
if(!result){
|
|
|
this.$message.warning(hintText)
|
|
|
return
|
|
|
- }
|
|
|
+ } */
|
|
|
this.loadingInstance = this.$loading({
|
|
|
lock:true,
|
|
|
fullscreen: true,
|
|
@@ -184,12 +135,15 @@ export default {
|
|
|
});
|
|
|
this.isPublish = true
|
|
|
if(this.loadingAll){
|
|
|
- await this.pageToPptx()
|
|
|
- }else{
|
|
|
- //将滚动条置顶
|
|
|
- this.scroller.scrollTop = 0
|
|
|
- await this.pageToPptx()
|
|
|
- }
|
|
|
+ //await this.pageToPptx()
|
|
|
+ //mock本地生成封面调试
|
|
|
+ let pptx = pptInit(new pptxgen(),this.LayoutType,'ch')
|
|
|
+ let cover = pptx.addSlide()
|
|
|
+ let mockContent1 = JSON.stringify([{ "id": 1234, "type": "text", "left": 624, "top": 433, "width": 227, "height": 84, "fontSize": 12, "content": "请输入内容", "richContent": "<p><span style=\"font-size: 48px;\">😔😄😔</span></p>", "realWidth": 227, "realHeight": 84, "percentageLeft": 0.6446280991735537, "percentageTop": 0.6390200708382527, "percentageWidth": 0.23450413223140495, "percentageHeight": 0.12396694214876035 }, { "id": 5678, "type": "text", "left": 571, "top": 313, "width": 352, "height": 96, "fontSize": 12, "content": "请输入内容", "richContent": "<p><span style=\"color: #ecf0f1; font-size: 24px;\">哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈</span></p>", "realWidth": 352, "realHeight": 96, "percentageLeft": 0.5898760330578512, "percentageTop": 0.4619244391971665, "percentageWidth": 0.36363636363636365, "percentageHeight": 0.14167650531286896 }])
|
|
|
+ let mockContent2=''
|
|
|
+ cover = this.setPPTCover(cover,mockContent2,this.coverInfo.page.Title)
|
|
|
+ pptx.writeFile({ fileName: "test.pptx" })
|
|
|
+ }
|
|
|
this.isPublish = false
|
|
|
},
|
|
|
//计算ppt的版式名称
|
|
@@ -290,13 +244,6 @@ export default {
|
|
|
const length = this.pageList.length;
|
|
|
for (let i = 0; i < length; i++) {
|
|
|
//console.log(`正在生成,第${i+1}页...`,`lastVisibleItemIndex:`,this.lastVisibleItemIndex)
|
|
|
- if(!this.loadingAll){
|
|
|
- if(this.lastVisibleItemIndex<=i+this.buffer+1){
|
|
|
- //将滚动条触底,加载下一页
|
|
|
- const {scrollHeight} = this.scroller
|
|
|
- this.scroller.scrollTop = scrollHeight
|
|
|
- }
|
|
|
- }
|
|
|
let slide = pptx.addSlide({ masterName: pptSlideMaster.title });
|
|
|
//添加背景图片
|
|
|
//slide.background = { path: "/static/pptnextimg.png" };
|
|
@@ -473,14 +420,14 @@ export default {
|
|
|
size: { type: "contain" },
|
|
|
})
|
|
|
//生成的ppt需要可以在封面页更改标题和类型,所以封面信息手动写入
|
|
|
- const coverInfo = [
|
|
|
- //{text:'—————————————————————————————————\n',options:{fontSize:16*0.75,breakLine:true}},
|
|
|
+ /* const coverInfo = [
|
|
|
+ {text:'—————————————————————————————————\n',options:{fontSize:16*0.75,breakLine:true}},
|
|
|
{text:this.coverInfo.page.Title,options:{fontSize:28*0.75,breakLine:true}},
|
|
|
{text:`\n— ${this.pptCoverCompenyName||'ETA'} ● ${this.coverInfo.page.ReportType} —`,
|
|
|
options:{fontSize:16*0.75,breakLine:false}},
|
|
|
{text:`\n${this.pptCoverDepartName||'投研部'}`,options:{fontSize:16*0.75,breakLine:true}},
|
|
|
{text:this.coverInfo.page.PptDate,options:{fontSize:16*0.75,breakLine:true}},
|
|
|
- //{text:'\n—————————————————————————',options:{fontSize:16*0.75,breakLine:true}}
|
|
|
+ {text:'\n—————————————————————————',options:{fontSize:16*0.75,breakLine:true}}
|
|
|
]
|
|
|
cover.addText(coverInfo,{
|
|
|
x:'38%',
|
|
@@ -490,7 +437,8 @@ export default {
|
|
|
color:(this.pptCoverTextColor||'#ffffff').slice(1),
|
|
|
align:'center',
|
|
|
fontFace:'SimHei'
|
|
|
- })
|
|
|
+ }) */
|
|
|
+ cover = this.setPPTCover(cover,this.pptCoverContent,this.coverInfo.page.Title)
|
|
|
//遍历pptx.slides,重新给每一项的部分属性赋值,再推入pptx2.slides中
|
|
|
//第一页不需要,因为是空白的
|
|
|
for(let i=1;i<pptx.slides.length;i++){
|
|
@@ -746,10 +694,6 @@ export default {
|
|
|
mounted(){
|
|
|
this.init()
|
|
|
this._scrollTop = 0
|
|
|
- if(!this.loadingAll){
|
|
|
- this.scroller = document.getElementById('scroller')
|
|
|
- this.scrollerInner = document.getElementById("scroller-inner")
|
|
|
- }
|
|
|
},
|
|
|
updated(){
|
|
|
/*
|