Răsfoiți Sursa

Merge branch 'ppt-loading-fix'

cxmo 1 an în urmă
părinte
comite
1870296f5c

+ 5 - 0
src/main.js

@@ -219,6 +219,8 @@ router.beforeEach(async(to, from, next) => {
     if (window._hmt) {
       window._hmt.push(["_trackPageview", "/#" + to.fullPath]);
     }
+/*     //store没做持久化存储,在请求前先获取旧的
+    store.dispatch('getPermissionButtonsOld') */
     //获取权限按钮
     to.path != "/login"&&to.path!='/temppage'&&await store.dispatch('getPermissionButtons')
     next();
@@ -295,3 +297,6 @@ if (
     false
   );
 }
+/* window.addEventListener('beforeunload',()=>{
+    sessionStorage.setItem('permissionBtn',JSON.stringify(store.state.permissionButton.permissionButtons))
+}) */

+ 73 - 10
src/views/ppt_manage/mixins/pptMixins.js

@@ -200,6 +200,7 @@ export default {
     */
     //获取图表数据
     async getchartData(id,lang='ch') {
+        console.log('getChartData')
       const currentLang = this.currentLang || lang
       const res = await dataBaseInterface.getChartByCode({
         UniqueCode: id,
@@ -453,7 +454,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 +478,83 @@ 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);
-                //由于演示页的图表没有await加载,在这里更新每一张图表的信息
-                if(fromType==='present'){
+            if(!this.optionMap[chartElements[i].chartId]){
+                /* needGetDataArr.push(new Promise((res,rej)=>{
+                    res(this.getchartData(chartElements[i].chartId))
+                })) */
+                needGetDataArr.push(chartElements[i].chartId)
+            }
+        }
+        if(needGetDataArr.length){
+            //由于存在加载过程中会切换PPT/页面的情况,不能一股脑加载
+            const chunkArray = (array, chunkSize)=>{
+                let result = [];
+                for (let i = 0; i < array.length; i += chunkSize) {
+                result.push(array.slice(i, i + chunkSize));
+                }
+                return result;
+            }
+            //将需要加载的数据分组
+            const chunkedArray = chunkArray(needGetDataArr, 6);
+            for(let i=0;i<chunkedArray.length;i++){
+                if(!chunkedArray[i].length) continue
+                if(this.interruptLoad) return
+                const promisesList = chunkedArray[i].map(chartId=>{
+                    return new Promise((res,rej)=>{
+                        res(this.getchartData(chartId))
+                    })
+                })
+                await Promise.all(promisesList).then(()=>{}).catch((e)=>{
+                    console.log('catch',e)
+                })
+                console.log(`第${i}组加载完成`)
+            }
+            console.log('全部加载完成')
+            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(sheetElements[i].sheetId))
+            }))
+        }
+        /* await this.getsheetData(sheetElements[i].sheetId) */
       }
+      if(needGetDataArr.length)
+        await Promise.all(needGetDataArr).then(()=>{
+            //console.log('promise all then sheet')
+        }).catch((e)=>{
+            console.log('catch',e)
+        })
     },
     async getsheetData(id){
       const res = await sheetInterface.getSheetData({
@@ -500,11 +562,12 @@ export default {
 			})
       if(res.Ret !== 200) return 0
       const {TableInfo} = res.Data
-      console.log('get')
+      //console.log('get')
       this.sheetDataMap[id] = _.cloneDeep(TableInfo.TableDataList)
       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) => {
@@ -547,7 +610,7 @@ export default {
     /* 主题样式*/
     const chartTheme =  ChartThemeStyle ? JSON.parse(ChartThemeStyle) : null;
 
-      console.log(options)
+      //console.log(options)
       this.$nextTick(() => {
         let is_linear = options.series 
           ? options.series.some(_ => _.chartType === 'linear')

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

@@ -128,7 +128,7 @@ export default {
         text: `${this.$t('Slides.retrieving_ppt_data')}...`,
         spinner: 'el-icon-loading',
         customClass:'loading',
-        target:document.querySelector('.ppt-content-wrap'),
+        target:document.querySelector('.catalog-wrap'),
         background: 'rgba(255, 255, 255, 0.8)'
       });
       await this.getpptData()
@@ -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])

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

@@ -128,7 +128,7 @@ export default {
         text: `${this.$t('Slides.retrieving_ppt_data')}...`,
         spinner: 'el-icon-loading',
         customClass:'loading',
-        target:document.querySelector('.ppt-content-wrap'),
+        target:document.querySelector('.catalog-wrap'),
         background: 'rgba(255, 255, 255, 0.8)'
       });
       await this.getpptData()
@@ -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])

+ 5 - 2
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) => {
@@ -464,6 +465,8 @@ export default {
       })     
       this.dataLoading.close();
       $('.ppt-item').css('background-image',`url(${this.pptBgImage})`);
+      //开启自动保存
+      this.autoSave()
     },
     async getpptData(){
       const {id} = this.$route.query
@@ -478,8 +481,8 @@ export default {
           this.currentItem = this.pageList[0]
           this.ReportId=ReportId
           this.CoverContent = this.result.CoverContent
-          //开启自动保存
-          this.autoSave()
+          /* //开启自动保存
+          this.autoSave() */
         }else{
           this.$message.error(this.$t('Slides.error_ppt_data_msg') )
           this.dataLoading.close();

+ 6 - 2
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) => {
@@ -485,6 +486,8 @@ export default {
       })
       this.dataLoading.close();
       $('.ppt-item').css('background-image',`url(${this.pptBgImage})`);
+      //开启自动保存
+      this.autoSave()
     },
     async getpptData(){
       const {id} = this.$route.query
@@ -499,8 +502,8 @@ export default {
           this.currentItem = this.pageList[0]
           this.ReportId=ReportId
           this.CoverContent = this.result.CoverContent
-          //开启自动保存
-          this.autoSave()
+          /* //开启自动保存
+          this.autoSave() */
         }else{
           this.$message.error(this.$t('Slides.error_ppt_data_msg') )
           this.dataLoading.close();
@@ -1068,6 +1071,7 @@ export default {
     //自动保存PPT
     autoSave(){
       if(this.loopTimer) return 
+      if(!this.$route.query.id&&!this.pptId) return
       this.loopTimer = setInterval(()=>{
         const ppt_id = this.$route.query.id||this.pptId
         const {Title,ReportType,PptDate,BackgroundImg,BackIndex} = this.firstPage

+ 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')
         }

+ 5 - 0
src/vuex/modules/permissionButton.js

@@ -34,6 +34,11 @@ const permissionButtons = {
                 commit('SET_PERMISSION_BUTTONS',buttons)
                 resolve('获取权限按钮成功') */
             })
+        },
+        getPermissionButtonsOld({commit}){
+            const permissionList = JSON.parse(sessionStorage.getItem('permissionBtn'))||[]
+            commit('SET_PERMISSION_BUTTONS',permissionList)
+            sessionStorage.removeItem('permissionBtn')
         }
     },
     getters:{}