Browse Source

优化PPT加载方式,图表、表格提前加载

cxmo 1 year ago
parent
commit
19f977974e

+ 47 - 6
src/views/ppt_manage/mixins/pptMixins.js

@@ -453,7 +453,7 @@ export default {
       this.$store.commit('SET_CHART_INFO_MAP',chartInfoMap)
       this.addMyChartShow = false
     },
-    //编辑ppt时,初始化相关
+    //编辑ppt时,按页初始化相关
     async initPageElements(page,type="edit",only=false) {
       this.pptInitType = type
       const chartElements = page.elements.filter((item) => {
@@ -477,22 +477,62 @@ export default {
       await this.listHandle(chartElements);
       this.initCharts(chartElements, page);
     },
+    //图表,表格数据统一加载,不按照页
+    async initPPTAllPage(pageList){
+        let chartElements = []
+        let sheetElements = []
+        pageList.forEach(page=>{
+            const pageChartElements = page.elements.filter((item) => {
+                return item.type === "chart";
+            });
+            const pageSheetElements = page.elements.filter((item)=>{
+                return item.type === 'sheet'
+            })
+            chartElements.push(...pageChartElements)
+            sheetElements.push(...pageSheetElements)
+        })
+        
+        await this.sheetListHandle(sheetElements);
+        await this.listHandle(chartElements);
+    },
     async listHandle(chartElements,fromType='') {
+        let needGetDataArr = []
         for(let i=0;i<chartElements.length;i++) {
-            if(!this.optionMap[chartElements[i].chartId])
-                await this.getchartData(chartElements[i].chartId);
+            if(!this.optionMap[chartElements[i].chartId]){
+                needGetDataArr.push(new Promise((res,rej)=>{
+                    res(this.getchartData(chartElements[i].chartId))
+                }))
+            }
+                /* await this.getchartData(chartElements[i].chartId);
                 //由于演示页的图表没有await加载,在这里更新每一张图表的信息
                 if(fromType==='present'){
                     let temp = getChartInfo(this.optionMap[chartElements[i].chartId])
                     this.$store.commit('SET_CHART_INFO',{chartId:chartElements[i].chartId,chartInfo:temp})
+                } */
+        }
+        await Promise.all(needGetDataArr).then(()=>{
+            console.log('promise all then chart')
+            if(fromType==='present'){
+                for(let i=0;i<chartElements.length;i++) {
+                    let temp = getChartInfo(this.optionMap[chartElements[i].chartId])
+                    this.$store.commit('SET_CHART_INFO',{chartId:chartElements[i].chartId,chartInfo:temp})
                 }
             }
-        },
+        })
+    },
     async sheetListHandle(sheetElements){
+        let needGetDataArr = []
       for(let i=0;i<sheetElements.length;i++){
-        if(!this.sheetDataMap[sheetElements[i].sheetId])
-        await this.getsheetData(sheetElements[i].sheetId)
+        if(!this.sheetDataMap[sheetElements[i].sheetId]){
+            needGetDataArr.push(new Promise((res,rej)=>{
+                res(this.getsheetData(chartElements[i].sheetId))
+            }))
+        }
+        /* await this.getsheetData(sheetElements[i].sheetId) */
       }
+      await Promise.all(needGetDataArr).then(()=>{
+        console.log('promise all then sheet')
+    })
     },
     async getsheetData(id){
       const res = await sheetInterface.getSheetData({
@@ -505,6 +545,7 @@ export default {
       return 1
     },
     initCharts(elements, page) {
+        console.log('initCharts')
       const index = this.pageList.findIndex((i) => i.id === page.id)
       if(index===-1) return
       elements.forEach((item) => {

+ 1 - 0
src/views/ppt_manage/newVersion/components/catalog/pptContent.vue

@@ -140,6 +140,7 @@ export default {
       await this.initPageElements(this.pageList[0],'show')
       this.loadedPage++ */
       //全部加载
+      await this.initPPTAllPage(this.pageList)
       for(let i=0;i<this.pageList.length;i++){
         if(this.interruptLoad) return
         this.loadArr.push(this.pageList[i])

+ 1 - 0
src/views/ppt_manage/newVersion/components/catalog/pptContentEn.vue

@@ -136,6 +136,7 @@ export default {
       this.checkLimit()
       this.loadArr.push(this.firstPage)
       //全部加载
+      await this.initPPTAllPage(this.pageList)
       for(let i=0;i<this.pageList.length;i++){
         if(this.interruptLoad) return
         this.loadArr.push(this.pageList[i])

+ 1 - 0
src/views/ppt_manage/newVersion/pptEditor.vue

@@ -434,6 +434,7 @@ export default {
 				});
       await this.getpptData()
       //遍历pageList,初始化图表,文字
+      await this.initPPTAllPage(this.pageList)
       for(let i=0;i<this.pageList.length;i++){
         //计算图表总数
         const chartElements = this.pageList[i].elements.filter((item) => {

+ 1 - 0
src/views/ppt_manage/newVersion/pptEnEditor.vue

@@ -456,6 +456,7 @@ export default {
 				});
       await this.getpptData()
       //遍历pageList,初始化图表,文字
+      await this.initPPTAllPage(this.pageList)
       for(let i=0;i<this.pageList.length;i++){
         //计算图表总数
         const chartElements = this.pageList[i].elements.filter((item) => {

+ 1 - 0
src/views/ppt_manage/newVersion/pptEnPublish.vue

@@ -157,6 +157,7 @@ export default {
         });
         await this.getpptData()
         //加载每一页
+        await this.initPPTAllPage(this.pageList)
         for(let i=0;i<this.pageList.length;i++){
           await this.initPageElements(this.pageList[i],'show')
         }

+ 1 - 0
src/views/ppt_manage/newVersion/pptPublish.vue

@@ -179,6 +179,7 @@ export default {
         });
         await this.getpptData()
         //加载每一页
+        await this.initPPTAllPage(this.pageList)
         for(let i=0;i<this.pageList.length;i++){
           await this.initPageElements(this.pageList[i],'show')
         }