Browse Source

Merge branch 'master' into eta2.2.0

Karsa 6 months ago
parent
commit
f7fbd7fc11

+ 19 - 0
src/api/intervalAnalysis.js

@@ -0,0 +1,19 @@
+import { get,post } from "./index";
+
+//区间分析
+export default{  
+  // 不含图表的所有目录
+  classifyListNoChart:params=>{
+    return get('/range_analysis/chart_classify/tree',params)
+  },
+
+  // 图表刷新
+  chartRefresh:params=>{
+    return get('/range_analysis/chart_info/refresh',params)
+  },
+  // 图表另存为
+  chartSaveOther:params=>{
+    return post('/range_analysis/chart_info/copy',params)
+  },
+  
+}

+ 4 - 4
src/hooks/chart/render.js

@@ -108,7 +108,7 @@ export function chartRender({data,renderId,lang='zh',changeLangIsCheck,showChart
     chartData.value=data
    /*  useSelfLimit = ['/myETA/chartdetail','/chartETA/chartdetail'].includes(window.location.pathname) */
    useSelfLimit = shouldUseSelfLimit
-    if([1,11].includes(data.ChartInfo.Source)){
+    if([1,11,12].includes(data.ChartInfo.Source)){
         const chartSetMap = {
             1: setSplineOpt,
             2: setSeasonOpt,
@@ -895,8 +895,8 @@ function setSplineOpt(e){
                 maxLimit = axisLimitState[`${limitMap[item.IsAxis][1]}`]||0
             }
         }
-        const textZh = item.ConvertUnit||item.Unit
-        const textEn = item.ConvertEnUnit||item.UnitEn||item.ConvertUnit||item.Unit
+        const textZh =e.ChartInfo.Source===12?item.ConvertUnit : item.ConvertUnit||item.Unit
+        const textEn =e.ChartInfo.Source===12?item.ConvertEnUnit : item.ConvertEnUnit||item.UnitEn||item.ConvertUnit||item.Unit
         let yItem={
             ...basicYAxis,
             IsAxis:item.IsAxis,
@@ -2061,7 +2061,7 @@ function filterInvalidData(item){
     let temArr=[]
     commodityXData.value.forEach((i,index)=>{
       if(i.IsHide!==1){
-        temArr.push(arr[index]||null)
+        temArr.push(arr[index])
       }
     })
 

+ 12 - 3
src/layouts/Index.vue

@@ -4,12 +4,14 @@ import {Base64} from 'js-base64'
 import { useRouter } from 'vue-router'
 import {useUserInfo} from '@/hooks/common'
 import {useCachedViewsStore} from '@/store/modules/cachedViews'
+import {_apiLogin} from '@/api/user'
 
 const cachedViewsStore=useCachedViewsStore()
 
 const cachedViewsList=computed(()=>{
     return cachedViewsStore.cachesList||[]
 })
+let CompanyName = ref('')
 
 const router=useRouter()
 
@@ -31,7 +33,14 @@ function goBack(){
     }
 }
 
-
+function getCompanyName(){
+    _apiLogin.getBaseInfo().then(res=>{
+        if(res.Ret == 200){
+            CompanyName.value = res.Data.CompanyName.ConfVal;
+        }
+    })
+}
+getCompanyName()
 
 </script>
 
@@ -57,11 +66,11 @@ function goBack(){
                     </div>
                     <div class="info-item">
                         <span>公司名称:</span>
-                        <span>弘则弥道(上海)投资咨询有限公司</span>
+                        <span>{{ CompanyName }}</span>
                     </div>
                     <div class="info-item">
                         <span>所属部门:</span>
-                        <span>{{userInfo.DepartmentName}}</span>
+                        <span>{{userInfo.GroupName || userInfo.DepartmentName}}</span>
                     </div>
                     <div class="info-item">
                         <span>角色:</span>

+ 2 - 1
src/views/Login.vue

@@ -132,7 +132,8 @@ function userLogin(params,values){
             RoleTypeCode:res.Data.RoleTypeCode,
             SysRoleTypeCode:res.Data.SysRoleTypeCode,
             AdminId:res.Data.AdminId,
-            DepartmentName:res.Data.DepartmentName
+            DepartmentName:res.Data.DepartmentName,
+            GroupName:res.Data.GroupName,
         }
         localStorage.setItem('userInfo',Base64.encode(JSON.stringify(userInfo)))
         router.replace('/')

+ 1 - 1
src/views/dataEDB/Detail.vue

@@ -302,7 +302,7 @@ function isMoreOptShow(){
 }
 .edb-detail-page{
     padding-bottom: 120px;
-    overflow-x: hidden;
+    // overflow-x: hidden;
 }
 .fix-bottom-box{
     position: fixed;

+ 5 - 2
src/views/myETA/ChartDetail.vue

@@ -10,6 +10,7 @@ import apiCrossVarietyChart from '@/api/crossVarietyChart'
 import apiMyETAChart from '@/api/myETA'
 import apiDataEDB from '@/api/dataEDB'
 import apiSheet from '@/api/sheet'
+import apiIntervalAnalysis from '@/api/intervalAnalysis'
 import { useRoute, useRouter } from 'vue-router'
 import {useChartRender} from '@/hooks/chart/render'
 import {yearSelectOpt,sameOptionType} from '@/hooks/chart/config'
@@ -141,7 +142,7 @@ async function getChartInfo(){
         temEndTime.value=chartState.endTime.split('-')
     }
     //仅ETA图库图表需要初始化上下限
-    if(res.Data.ChartInfo.Source===1&&![7,10,11].includes(res.Data.ChartInfo.ChartType)){
+    if(res.Data.ChartInfo.Source===1&&![7,10,11,12].includes(res.Data.ChartInfo.ChartType)){
         isUseSelfLimit.value = true
         setLimitData(res.Data)
     }else{
@@ -562,6 +563,8 @@ async function handleChartRefresh(){
         res=await apiCrossVarietyChart.refreshChart({ ChartInfoId })
     }else if(Source===11){
         res=await apiSheet.sheetRefresh({ChartInfoId})
+    }else if(Source===12){
+        res=await apiIntervalAnalysis.chartRefresh({ChartInfoId})
     }
     if(res.Ret!==200)return
     showToast('刷新成功')
@@ -801,7 +804,7 @@ const isShowAddToMyETADialog=ref(false)
                     >{{chartState.startTime?chartState.startTime+'~'+(chartState.endTime?chartState.endTime:'至今'):'请选择时间段'}}</span>
                 </div>
                 <div class="right-action-box">
-                    <div class="item" @click="handleShowAxisLimitOpt" v-if="[1,2,5,10].includes(chartInfo.Source)&&checkAuthBtn(myETABtn.myChart_editLimit)">
+                    <div class="item" @click="handleShowAxisLimitOpt" v-if="[1,2,5,10,12].includes(chartInfo.Source)&&checkAuthBtn(myETABtn.myChart_editLimit)">
                         <img src="@/assets/imgs/myETA/icon_limit2.png" alt="">
                         <span>上下限设置</span>
                     </div>

+ 6 - 1
src/views/myETA/components/ChartSaveOther.vue

@@ -6,6 +6,7 @@ import apiFuture from '@/api/futureChart'
 import apiLineEquationChart from '@/api/lineEquationChart'
 import apiStatisticFeatureChart from '@/api/statisticFeatureChart'
 import apiCrossVarietyChart from '@/api/crossVarietyChart'
+import apiIntervalAnalysis from '@/api/intervalAnalysis'
 import { showToast } from 'vant'
 import { useWindowSize } from '@vueuse/core'
 
@@ -54,6 +55,8 @@ async function getOpts(){
         res=await apiLineEquationChart.chartClassifyList({})
     }else if([7,8,9].includes(props.source)){
         res=await apiStatisticFeatureChart.chartClassifyList({})
+    }else if(props.source==12){
+        res=await apiIntervalAnalysis.classifyListNoChart()
     }else{
         res=await apiETAChart.ETAChartClassifyList({})
     }
@@ -115,6 +118,8 @@ async function handleConfirmSave(){
         res=await apiStatisticFeatureChart.chartSaveOther(params)
     }else if(props.source===10){
         res=await apiCrossVarietyChart.saveOtherChart(params)
+    }else if(props.source===12){
+        res=await apiIntervalAnalysis.chartSaveOther(params)
     }else{
         res=await apiETAChart.ETAChartSaveOther(params)
     }
@@ -138,7 +143,7 @@ async function handleConfirmSave(){
                 <div class="title">另存为</div>
             </div>
             <div class="content">
-                <template v-if="[2,3,5,6,7,8,9].includes(source)">
+                <template v-if="[2,3,5,6,7,8,9,12].includes(source)">
                     <ul class="list-box">
                         <li 
                             :class="['item',activeIds==item.ChartClassifyId?'active':'']"

+ 11 - 2
src/views/ppt/components/ChartWrap.vue

@@ -1,7 +1,10 @@
 <script setup>
 import {computed,onMounted,ref} from 'vue'
 import apiChart from '@/api/chart.js'
-import {chartRender} from '@/hooks/chart/render'
+import {chartRender,useChartRender} from '@/hooks/chart/render'
+
+
+const {setLimitData,isUseSelfLimit}=useChartRender()
 
 const props=defineProps({
     itemData:{
@@ -34,12 +37,18 @@ async function getChartInfo(){
         if((Source==1&&[2,7,10].includes(ChartType))||(Source==2&&ChartType==8)){
             showChartTitle=true
         }
+
+        //初始化上下限
+        isUseSelfLimit.value = true
+        setLimitData(res.Data)
+
         chartRender({
             data:res.Data,
             renderId:renderId.value,
             lang:window.location.pathname.startsWith('/ppten')?'en':'zh',
             changeLangIsCheck:true,
-            showChartTitle
+            showChartTitle,
+            shouldUseSelfLimit:true,
         })
     }
 }

+ 15 - 8
src/views/ppt/template/FormatEight.vue

@@ -19,14 +19,21 @@ const lang=ref(window.location.pathname.startsWith('/ppten')?'en':'zh')
 		<!-- 自定义标题 -->
 		<div class="custom-title-wrap" 
 			:style="pageData.titleDetail?{
-				left:pageData.titleDetail.baseLeft+'px',
-				top:pageData.titleDetail.baseTop+'px',
-				width:pageData.titleDetail.baseWidth+'px',
-				height:pageData.titleDetail.baseHeight+'px',
-			}:{
-				left:'90px',top:'34.65px',width:'612px',height:'44.1px'
-			}">
-			<div class="title" v-html="pageData.title"></div>
+				 left:pageData.titleDetail.left+'%',
+						top:pageData.titleDetail.top+'%',
+						width:pageData.titleDetail.width+'%',
+						height:pageData.titleDetail.height+'%',
+				}:{
+						left:'10%',top:'6.6%',width:'68%',height:'5%',
+				}"
+		>
+			<div class="title" v-html="pageData.title"
+				:style="pageData.titleDetail?{
+						color:pageData.titleDetail.color||'#333',
+						fontSize:(pageData.titleDetail.fontSize||22)+'px',
+						fontFamily:pageData.titleDetail.fontFamily||'helvetica'
+				}:{ color:'#333',fontSize:'22px',fontFamily:'helvetica' }"
+			></div>
 		</div>
 		<div class="ppt-content-box">
 			<div class="container">

+ 15 - 8
src/views/ppt/template/FormatEle.vue

@@ -19,14 +19,21 @@ const lang=ref(window.location.pathname.startsWith('/ppten')?'en':'zh')
 		<!-- 自定义标题 -->
 		<div class="custom-title-wrap" 
 			:style="pageData.titleDetail?{
-				left:pageData.titleDetail.baseLeft+'px',
-				top:pageData.titleDetail.baseTop+'px',
-				width:pageData.titleDetail.baseWidth+'px',
-				height:pageData.titleDetail.baseHeight+'px',
-			}:{
-				left:'90px',top:'34.65px',width:'612px',height:'44.1px'
-			}">
-			<div class="title" v-html="pageData.title"></div>
+				 left:pageData.titleDetail.left+'%',
+						top:pageData.titleDetail.top+'%',
+						width:pageData.titleDetail.width+'%',
+						height:pageData.titleDetail.height+'%',
+				}:{
+						left:'10%',top:'6.6%',width:'68%',height:'5%',
+				}"
+		>
+			<div class="title" v-html="pageData.title"
+				:style="pageData.titleDetail?{
+						color:pageData.titleDetail.color||'#333',
+						fontSize:(pageData.titleDetail.fontSize||22)+'px',
+						fontFamily:pageData.titleDetail.fontFamily||'helvetica'
+				}:{ color:'#333',fontSize:'22px',fontFamily:'helvetica' }"
+			></div>
 		</div>
 		<div class="ppt-content-box">
 			<div class="container">

+ 15 - 8
src/views/ppt/template/FormatFive.vue

@@ -19,14 +19,21 @@ const lang=ref(window.location.pathname.startsWith('/ppten')?'en':'zh')
 		<!-- 自定义标题 -->
 		<div class="custom-title-wrap" 
 			:style="pageData.titleDetail?{
-				left:pageData.titleDetail.baseLeft+'px',
-				top:pageData.titleDetail.baseTop+'px',
-				width:pageData.titleDetail.baseWidth+'px',
-				height:pageData.titleDetail.baseHeight+'px',
-			}:{
-				left:'90px',top:'34.65px',width:'612px',height:'44.1px'
-			}">
-			<div class="title" v-html="pageData.title"></div>
+				 left:pageData.titleDetail.left+'%',
+						top:pageData.titleDetail.top+'%',
+						width:pageData.titleDetail.width+'%',
+						height:pageData.titleDetail.height+'%',
+				}:{
+						left:'10%',top:'6.6%',width:'68%',height:'5%',
+				}"
+		>
+			<div class="title" v-html="pageData.title"
+				:style="pageData.titleDetail?{
+						color:pageData.titleDetail.color||'#333',
+						fontSize:(pageData.titleDetail.fontSize||22)+'px',
+						fontFamily:pageData.titleDetail.fontFamily||'helvetica'
+				}:{ color:'#333',fontSize:'22px',fontFamily:'helvetica' }"
+			></div>
 		</div>
 		<div class="ppt-content-box">
 			<div class="container">

+ 15 - 8
src/views/ppt/template/FormatFour.vue

@@ -19,14 +19,21 @@ const lang=ref(window.location.pathname.startsWith('/ppten')?'en':'zh')
 		<!-- 自定义标题 -->
 		<div class="custom-title-wrap" 
 			:style="pageData.titleDetail?{
-				left:pageData.titleDetail.baseLeft+'px',
-				top:pageData.titleDetail.baseTop+'px',
-				width:pageData.titleDetail.baseWidth+'px',
-				height:pageData.titleDetail.baseHeight+'px',
-			}:{
-				left:'90px',top:'34.65px',width:'612px',height:'44.1px'
-			}">
-			<div class="title" v-html="pageData.title"></div>
+				 left:pageData.titleDetail.left+'%',
+						top:pageData.titleDetail.top+'%',
+						width:pageData.titleDetail.width+'%',
+						height:pageData.titleDetail.height+'%',
+				}:{
+						left:'10%',top:'6.6%',width:'68%',height:'5%',
+				}"
+		>
+			<div class="title" v-html="pageData.title"
+				:style="pageData.titleDetail?{
+						color:pageData.titleDetail.color||'#333',
+						fontSize:(pageData.titleDetail.fontSize||22)+'px',
+						fontFamily:pageData.titleDetail.fontFamily||'helvetica'
+				}:{ color:'#333',fontSize:'22px',fontFamily:'helvetica' }"
+			></div>
 		</div>
 		<div class="ppt-content-box">
 			<div class="container">

+ 15 - 8
src/views/ppt/template/FormatNine.vue

@@ -19,14 +19,21 @@ const lang=ref(window.location.pathname.startsWith('/ppten')?'en':'zh')
 		<!-- 自定义标题 -->
 		<div class="custom-title-wrap" 
 			:style="pageData.titleDetail?{
-				left:pageData.titleDetail.baseLeft+'px',
-				top:pageData.titleDetail.baseTop+'px',
-				width:pageData.titleDetail.baseWidth+'px',
-				height:pageData.titleDetail.baseHeight+'px',
-			}:{
-				left:'90px',top:'34.65px',width:'612px',height:'44.1px'
-			}">
-			<div class="title" v-html="pageData.title"></div>
+				 left:pageData.titleDetail.left+'%',
+						top:pageData.titleDetail.top+'%',
+						width:pageData.titleDetail.width+'%',
+						height:pageData.titleDetail.height+'%',
+				}:{
+						left:'10%',top:'6.6%',width:'68%',height:'5%',
+				}"
+		>
+			<div class="title" v-html="pageData.title"
+				:style="pageData.titleDetail?{
+						color:pageData.titleDetail.color||'#333',
+						fontSize:(pageData.titleDetail.fontSize||22)+'px',
+						fontFamily:pageData.titleDetail.fontFamily||'helvetica'
+				}:{ color:'#333',fontSize:'22px',fontFamily:'helvetica' }"
+			></div>
 		</div>
 		<div class="ppt-content-box">
 			<div class="container">

+ 15 - 8
src/views/ppt/template/FormatOne.vue

@@ -19,14 +19,21 @@ const lang=ref(window.location.pathname.startsWith('/ppten')?'en':'zh')
 		<!-- 自定义标题 -->
 		<div class="custom-title-wrap" 
 			:style="pageData.titleDetail?{
-				left:pageData.titleDetail.baseLeft+'px',
-				top:pageData.titleDetail.baseTop+'px',
-				width:pageData.titleDetail.baseWidth+'px',
-				height:pageData.titleDetail.baseHeight+'px',
-			}:{
-				left:'90px',top:'34.65px',width:'612px',height:'44.1px'
-			}">
-			<div class="title" v-html="pageData.title"></div>
+				 left:pageData.titleDetail.left+'%',
+						top:pageData.titleDetail.top+'%',
+						width:pageData.titleDetail.width+'%',
+						height:pageData.titleDetail.height+'%',
+				}:{
+						left:'10%',top:'6.6%',width:'68%',height:'5%',
+				}"
+		>
+			<div class="title" v-html="pageData.title"
+				:style="pageData.titleDetail?{
+						color:pageData.titleDetail.color||'#333',
+						fontSize:(pageData.titleDetail.fontSize||22)+'px',
+						fontFamily:pageData.titleDetail.fontFamily||'helvetica'
+				}:{ color:'#333',fontSize:'22px',fontFamily:'helvetica' }"
+			></div>
 		</div>
 		<div class="ppt-content-box">
 			<div class="container">

+ 15 - 8
src/views/ppt/template/FormatSeven.vue

@@ -19,14 +19,21 @@ const lang=ref(window.location.pathname.startsWith('/ppten')?'en':'zh')
 		<!-- 自定义标题 -->
 		<div class="custom-title-wrap" 
 			:style="pageData.titleDetail?{
-				left:pageData.titleDetail.baseLeft+'px',
-				top:pageData.titleDetail.baseTop+'px',
-				width:pageData.titleDetail.baseWidth+'px',
-				height:pageData.titleDetail.baseHeight+'px',
-			}:{
-				left:'90px',top:'34.65px',width:'612px',height:'44.1px'
-			}">
-			<div class="title" v-html="pageData.title"></div>
+				 left:pageData.titleDetail.left+'%',
+						top:pageData.titleDetail.top+'%',
+						width:pageData.titleDetail.width+'%',
+						height:pageData.titleDetail.height+'%',
+				}:{
+						left:'10%',top:'6.6%',width:'68%',height:'5%',
+				}"
+		>
+			<div class="title" v-html="pageData.title"
+				:style="pageData.titleDetail?{
+						color:pageData.titleDetail.color||'#333',
+						fontSize:(pageData.titleDetail.fontSize||22)+'px',
+						fontFamily:pageData.titleDetail.fontFamily||'helvetica'
+				}:{ color:'#333',fontSize:'22px',fontFamily:'helvetica' }"
+			></div>
 		</div>
 		<div class="ppt-content-box">
 			<div class="container">

+ 15 - 8
src/views/ppt/template/FormatSix.vue

@@ -16,14 +16,21 @@ const props=defineProps({
 		<!-- 自定义标题 -->
 		<div class="custom-title-wrap" 
 			:style="pageData.titleDetail?{
-				left:pageData.titleDetail.baseLeft+'px',
-				top:pageData.titleDetail.baseTop+'px',
-				width:pageData.titleDetail.baseWidth+'px',
-				height:pageData.titleDetail.baseHeight+'px',
-			}:{
-				left:'90px',top:'34.65px',width:'612px',height:'44.1px'
-			}">
-			<div class="title" v-html="pageData.title"></div>
+				 left:pageData.titleDetail.left+'%',
+						top:pageData.titleDetail.top+'%',
+						width:pageData.titleDetail.width+'%',
+						height:pageData.titleDetail.height+'%',
+				}:{
+						left:'10%',top:'6.6%',width:'68%',height:'5%',
+				}"
+		>
+			<div class="title" v-html="pageData.title"
+				:style="pageData.titleDetail?{
+						color:pageData.titleDetail.color||'#333',
+						fontSize:(pageData.titleDetail.fontSize||22)+'px',
+						fontFamily:pageData.titleDetail.fontFamily||'helvetica'
+				}:{ color:'#333',fontSize:'22px',fontFamily:'helvetica' }"
+			></div>
 		</div>
 		<div class="ppt-content-box">
 			<div class="container">

+ 15 - 8
src/views/ppt/template/FormatTen.vue

@@ -19,14 +19,21 @@ const lang=ref(window.location.pathname.startsWith('/ppten')?'en':'zh')
 		<!-- 自定义标题 -->
 		<div class="custom-title-wrap" 
 			:style="pageData.titleDetail?{
-				left:pageData.titleDetail.baseLeft+'px',
-				top:pageData.titleDetail.baseTop+'px',
-				width:pageData.titleDetail.baseWidth+'px',
-				height:pageData.titleDetail.baseHeight+'px',
-			}:{
-				left:'90px',top:'34.65px',width:'612px',height:'44.1px'
-			}">
-			<div class="title" v-html="pageData.title"></div>
+				 left:pageData.titleDetail.left+'%',
+						top:pageData.titleDetail.top+'%',
+						width:pageData.titleDetail.width+'%',
+						height:pageData.titleDetail.height+'%',
+				}:{
+						left:'10%',top:'6.6%',width:'68%',height:'5%',
+				}"
+		>
+			<div class="title" v-html="pageData.title"
+				:style="pageData.titleDetail?{
+						color:pageData.titleDetail.color||'#333',
+						fontSize:(pageData.titleDetail.fontSize||22)+'px',
+						fontFamily:pageData.titleDetail.fontFamily||'helvetica'
+				}:{ color:'#333',fontSize:'22px',fontFamily:'helvetica' }"
+			></div>
 		</div>
 		<div class="ppt-content-box">
 			<div class="container">

+ 15 - 8
src/views/ppt/template/FormatThirteen.vue

@@ -19,14 +19,21 @@ const lang=ref(window.location.pathname.startsWith('/ppten')?'en':'zh')
 		<!-- 自定义标题 -->
 		<div class="custom-title-wrap" 
 			:style="pageData.titleDetail?{
-				left:pageData.titleDetail.baseLeft+'px',
-				top:pageData.titleDetail.baseTop+'px',
-				width:pageData.titleDetail.baseWidth+'px',
-				height:pageData.titleDetail.baseHeight+'px',
-			}:{
-				left:'90px',top:'34.65px',width:'612px',height:'44.1px'
-			}">
-			<div class="title" v-html="pageData.title"></div>
+				 left:pageData.titleDetail.left+'%',
+						top:pageData.titleDetail.top+'%',
+						width:pageData.titleDetail.width+'%',
+						height:pageData.titleDetail.height+'%',
+				}:{
+						left:'10%',top:'6.6%',width:'68%',height:'5%',
+				}"
+		>
+			<div class="title" v-html="pageData.title"
+				:style="pageData.titleDetail?{
+						color:pageData.titleDetail.color||'#333',
+						fontSize:(pageData.titleDetail.fontSize||22)+'px',
+						fontFamily:pageData.titleDetail.fontFamily||'helvetica'
+				}:{ color:'#333',fontSize:'22px',fontFamily:'helvetica' }"
+			></div>
 		</div>
 		<div class="ppt-content-box">
 			<div class="container">

+ 15 - 8
src/views/ppt/template/FormatThree.vue

@@ -16,14 +16,21 @@ const props=defineProps({
 		<!-- 自定义标题 -->
 		<div class="custom-title-wrap" 
 			:style="pageData.titleDetail?{
-				left:pageData.titleDetail.baseLeft+'px',
-				top:pageData.titleDetail.baseTop+'px',
-				width:pageData.titleDetail.baseWidth+'px',
-				height:pageData.titleDetail.baseHeight+'px',
-			}:{
-				left:'90px',top:'34.65px',width:'612px',height:'44.1px'
-			}">
-			<div class="title" v-html="pageData.title"></div>
+				 left:pageData.titleDetail.left+'%',
+						top:pageData.titleDetail.top+'%',
+						width:pageData.titleDetail.width+'%',
+						height:pageData.titleDetail.height+'%',
+				}:{
+						left:'10%',top:'6.6%',width:'68%',height:'5%',
+				}"
+		>
+			<div class="title" v-html="pageData.title"
+				:style="pageData.titleDetail?{
+						color:pageData.titleDetail.color||'#333',
+						fontSize:(pageData.titleDetail.fontSize||22)+'px',
+						fontFamily:pageData.titleDetail.fontFamily||'helvetica'
+				}:{ color:'#333',fontSize:'22px',fontFamily:'helvetica' }"
+			></div>
 		</div>
 		<div class="ppt-content-box">
 			<div class="container">

+ 15 - 8
src/views/ppt/template/FormatTwelve.vue

@@ -19,14 +19,21 @@ const lang=ref(window.location.pathname.startsWith('/ppten')?'en':'zh')
 		<!-- 自定义标题 -->
 		<div class="custom-title-wrap" 
 			:style="pageData.titleDetail?{
-				left:pageData.titleDetail.baseLeft+'px',
-				top:pageData.titleDetail.baseTop+'px',
-				width:pageData.titleDetail.baseWidth+'px',
-				height:pageData.titleDetail.baseHeight+'px',
-			}:{
-				left:'90px',top:'34.65px',width:'612px',height:'44.1px'
-			}">
-			<div class="title" v-html="pageData.title"></div>
+				 left:pageData.titleDetail.left+'%',
+						top:pageData.titleDetail.top+'%',
+						width:pageData.titleDetail.width+'%',
+						height:pageData.titleDetail.height+'%',
+				}:{
+						left:'10%',top:'6.6%',width:'68%',height:'5%',
+				}"
+		>
+			<div class="title" v-html="pageData.title"
+				:style="pageData.titleDetail?{
+						color:pageData.titleDetail.color||'#333',
+						fontSize:(pageData.titleDetail.fontSize||22)+'px',
+						fontFamily:pageData.titleDetail.fontFamily||'helvetica'
+				}:{ color:'#333',fontSize:'22px',fontFamily:'helvetica' }"
+			></div>
 		</div>
 		<div class="ppt-content-box">
 			<div class="container">

+ 15 - 8
src/views/ppt/template/FormatTwo.vue

@@ -17,14 +17,21 @@ const props=defineProps({
 		<!-- 自定义标题 -->
 		<div class="custom-title-wrap" 
 			:style="pageData.titleDetail?{
-				left:pageData.titleDetail.baseLeft+'px',
-				top:pageData.titleDetail.baseTop+'px',
-				width:pageData.titleDetail.baseWidth+'px',
-				height:pageData.titleDetail.baseHeight+'px',
-			}:{
-				left:'90px',top:'34.65px',width:'612px',height:'44.1px'
-			}">
-			<div class="title" v-html="pageData.title"></div>
+				 left:pageData.titleDetail.left+'%',
+						top:pageData.titleDetail.top+'%',
+						width:pageData.titleDetail.width+'%',
+						height:pageData.titleDetail.height+'%',
+				}:{
+						left:'10%',top:'6.6%',width:'68%',height:'5%',
+				}"
+		>
+			<div class="title" v-html="pageData.title"
+				:style="pageData.titleDetail?{
+						color:pageData.titleDetail.color||'#333',
+						fontSize:(pageData.titleDetail.fontSize||22)+'px',
+						fontFamily:pageData.titleDetail.fontFamily||'helvetica'
+				}:{ color:'#333',fontSize:'22px',fontFamily:'helvetica' }"
+			></div>
 		</div>
 		<div class="ppt-content-box">
 			<div class="container">

+ 3 - 4
src/views/report/EditReport.vue

@@ -239,13 +239,13 @@ function handlePreviewReport() {
         State:1
     }
     sessionStorage.setItem('reportPreData',JSON.stringify(params))
-    const routerEl=router.resolve({
+
+    router.push({
         path:'/report/preview',
         query:{
             id:-1
         }
     })
-    window.open(routerEl.href,'_blank')
     return
 }
 
@@ -274,13 +274,12 @@ async function handlePreviewChapter() {
     const saveRes = await autoSaveReportChapter('auto');
     if(!saveRes) return
     
-    const routerEl=router.resolve({
+    router.push({
         path:'/report/chapter/preview',
         query:{
             id:reportData.value.ReportChapterId
         }
     })
-    window.open(routerEl.href,'_blank')
 }
 
 // 自动保存章节报告

+ 0 - 2
src/views/report/PreviewDetail.vue

@@ -186,8 +186,6 @@ function handleCopyLink() {
         justify-content: space-between;
         font-size: $font-grey;
         font-size: 36px;
-        padding-bottom: 40px;
-        border-bottom: 1px solid $border-color;
         margin-bottom: 40px;
     }
     .report-abstract{

+ 12 - 0
src/views/report/chapter/List.vue

@@ -504,6 +504,7 @@ async function handleConfirmSetLayout() {
                 class="chapter-list"
                 :list="chapterList" 
                 item-key="ReportChapterId"
+                handle=".move-icon"
                 animation="300"
                 @end="handleMoveChapter"
                 tag="ul"
@@ -539,6 +540,8 @@ async function handleConfirmSetLayout() {
                             </div>
                             
                         </div>
+                        
+                        <img src="@/assets/imgs/report/icon_drag.png" alt="" class="move-icon">
                     </li>
                 </template>
             </draggable>
@@ -800,6 +803,7 @@ async function handleConfirmSetLayout() {
         border: 1px solid $border-color;
         border-radius: 8px;
         margin-bottom: 20px;
+        position: relative;
         .img-box{
             position: relative;
             width: 160px;
@@ -859,6 +863,14 @@ async function handleConfirmSetLayout() {
 
         }
 
+        .move-icon {
+            width: 40px;
+            height: 40px;
+            position: absolute;
+            top: 20px;
+            right: 20px;
+        }
+
         .item-top {
             margin-bottom: 20px;
             .type-name {

+ 0 - 2
src/views/report/chapter/Preview.vue

@@ -59,8 +59,6 @@ getChapterDetail()
         justify-content: space-between;
         font-size: $font-grey;
         font-size: 36px;
-        padding-bottom: 40px;
-        border-bottom: 1px solid $border-color;
         margin-bottom: 40px;
     }
     .report-abstract{

+ 8 - 4
src/views/report/components/AddReportBaseInfoV2.vue

@@ -529,10 +529,10 @@ async function handleSave() {
 </template>
 <style scoped lang="scss">
 .reportInfo-page{
-    height: 100dvh;
     min-height: 95vh;
     position: relative;
     background: #EDEDED;
+    padding-bottom: 140px;
     :deep(.cell-con){
         flex: 2;
     }
@@ -541,11 +541,15 @@ async function handleSave() {
       margin: 10px 0;
     }
     .bot-btns{
-        position: absolute;
-        bottom: 48px;
+        height: 140px;
+        position: fixed;
+        bottom: 0;
         left: 0;
         width: 100%;
-        text-align: center;
+        background-color: #fff;
+        display: flex;
+        align-items: center;
+        justify-content: center;
     }
 }
 .bot-btn{

+ 7 - 7
src/views/report/components/ReportFilter.vue

@@ -166,27 +166,27 @@ function handleResetCalendar(){
           <van-cell
               value-class="cell-con"
               required
-              title="筛选时间类型"
-              :value="getName('timeType')"
+              title="推送消息状态"
+              :value="getName('msgIsSend')"
               is-link
-              @click="handleOpenPicker('timeType')"
+              @click="handleOpenPicker('msgIsSend')"
           />
       </van-cell-group>
       <van-cell-group>
           <van-cell
               value-class="cell-con"
               required
-              title="推送消息状态"
-              :value="getName('msgIsSend')"
+              title="筛选时间类型"
+              :value="getName('timeType')"
               is-link
-              @click="handleOpenPicker('msgIsSend')"
+              @click="handleOpenPicker('timeType')"
           />
       </van-cell-group>
       <van-cell-group>
           <van-cell
               value-class="cell-con"
               required
-              title="更新时间"
+              :title="getName('timeType')"
               :value="getDate()"
               is-link
               @click="handleOpenDatePicker"

+ 2 - 1
src/views/report/hooks/useReport.js

@@ -151,7 +151,8 @@ export function useReportHandles() {
 						showCancelButton: true,
 						message: isPost?'发布后,是否推送模板消息?':'是否立即发布报告?',
 						confirmButtonText: isPost?'推送':'发布',
-						cancelButtonText: isPost?'不推送':'取消',      
+						cancelButtonText: isPost?'不推送':'取消',
+						closeOnClickOverlay: true    
 				}).then(() => {
 						reportPublish({
 								sendMsg: isPost?true:false,

+ 3 - 7
src/views/report/smartReport/EditReport.vue

@@ -448,7 +448,7 @@ function handleOpenInsertCompPop(e,{element,index}) {
 	currentState.activePindex=''
 	currentState.activeCindex=''
 
-	insertState.activeId = element.id;
+	insertState.activeId = element.child?.length ? element.child.map(_ =>_.id).join('/') : element.id;
 	insertState.activePindex = index;
 
   showInsertCompType.value = e.compId;
@@ -553,8 +553,6 @@ function handleChartInsert({list,type,chartType}){
 //插入文本
 const temTextVal = ref('')
 function handleInsertText(content) {
-	console.log(content)
-	console.log(currentState)
 	if(currentState.activeId) { //编辑
 		currentState.activeContent=content
 		if(currentState.activeCindex>=0&&currentState.activeCindex!==''){
@@ -707,13 +705,12 @@ async function handlePreviewReport() {
 				const saveRes=await autoSaveReportContent("auto")
 				if(!saveRes) return
 		}
-	  const routerEl=router.resolve({
+	  router.push({
         path:'/report/preview',
         query:{
             id: reportInfo.value.Id
         }
     })
-    window.open(routerEl.href,'_blank')
     return
 }
 
@@ -780,13 +777,12 @@ async function handlePreviewChapter() {
     const saveRes = await autoSaveReportChapter('auto');
     if(!saveRes) return
     
-		const routerEl=router.resolve({
+		router.push({
         path:'/report/chapter/preview',
         query:{
             id:reportInfo.value.ReportChapterId
         }
     })
-    window.open(routerEl.href,'_blank')
 }
 
 // 自动保存章节报告

+ 6 - 2
src/views/report/smartReport/components/ReportLayoutImg.vue

@@ -2,6 +2,7 @@
 import { reactive, ref } from 'vue'
 import apiReport from '@/api/report'
 import { vInfiniteScroll } from '@vueuse/components'
+import { showToast } from 'vant'
 
 
 
@@ -63,6 +64,7 @@ function handleCancle() {
   emit('close')
 }
 function handleConfirm() {
+  if(!selectItem.value) return showToast('请选择图片')
 
   emit('confirm',{
     type:filterState.type,
@@ -78,7 +80,7 @@ function handleConfirm() {
         <van-dropdown-menu>
           <van-dropdown-item v-model="filterState.type" :options="imgTypeOpts" @change="initList" :disabled="defaultVal?true:false"/>
         </van-dropdown-menu>
-        <span style="color:#0052D9" @click="handleConfirm">确定</span>
+        <span :style="{color:selectItem?'#0052D9':'#666'}" @click="handleConfirm">确定</span>
     </div>
 
     <div class="container">
@@ -158,7 +160,9 @@ function handleConfirm() {
         }
     }
 }
-
+:deep(.van-dropdown-menu__bar) {
+  box-shadow: none;
+}
 @media screen and (min-width:$media-width){
   .top-box{
     height: 60px;

+ 33 - 33
src/views/tabbar/Home.vue

@@ -128,17 +128,17 @@ const menuConfig=[
         backgroundColor:'#FFF5F3',
         show:false
     },
-    {
-        name:'数据源',
-        des:'数据对接与整合',
-        key:'数据源',
-        type:'zh',
-        level:1,
-        path:'',
-        icon:getStaticImg('tabbar/icon_dataSource.png'),
-        backgroundColor:'#F8F9FF',
-        show:false
-    },
+    // {
+    //     name:'数据源',
+    //     des:'数据对接与整合',
+    //     key:'数据源',
+    //     type:'zh',
+    //     level:1,
+    //     path:'',
+    //     icon:getStaticImg('tabbar/icon_dataSource.png'),
+    //     backgroundColor:'#F8F9FF',
+    //     show:false
+    // },
     {
         name:'指标库',
         des:'数据归类与分析',
@@ -150,17 +150,17 @@ const menuConfig=[
         backgroundColor:'#F5FAFF',
         show:false
     },
-    {
-        name:'预测指标',
-        des:'模型预测趋势',
-        key:'预测指标',
-        type:'zh',
-        level:1,
-        path:'',
-        icon:getStaticImg('tabbar/icon_preEDB.png'),
-        backgroundColor:'#FFF5F3',
-        show:false
-    },
+    // {
+    //     name:'预测指标',
+    //     des:'模型预测趋势',
+    //     key:'预测指标',
+    //     type:'zh',
+    //     level:1,
+    //     path:'',
+    //     icon:getStaticImg('tabbar/icon_preEDB.png'),
+    //     backgroundColor:'#FFF5F3',
+    //     show:false
+    // },
     {
         name:'图库',
         des:'数据可视化平台',
@@ -183,17 +183,17 @@ const menuConfig=[
         backgroundColor:'#F5FAFF',
         show:false
     },
-    {
-        name:'表格',
-        des:'快速建立平衡表',
-        key:'表格',
-        type:'zh',
-        level:1,
-        path:'',
-        icon:getStaticImg('tabbar/icon_table.png'),
-        backgroundColor:'#FFFBF6',
-        show:false
-    },
+    // {
+    //     name:'表格',
+    //     des:'快速建立平衡表',
+    //     key:'表格',
+    //     type:'zh',
+    //     level:1,
+    //     path:'',
+    //     icon:getStaticImg('tabbar/icon_table.png'),
+    //     backgroundColor:'#FFFBF6',
+    //     show:false
+    // },
 ]
 const menuOpts=computed(()=>{
     // 过滤中英文

+ 4 - 3
src/views/tabbar/User.vue

@@ -5,7 +5,7 @@ import { useRouter } from 'vue-router'
 import {useUserInfo} from '@/hooks/common'
 import {_apiLogin} from '@/api/user'
 const router=useRouter()
-
+let CompanyName = ref('')
 let userInfo=useUserInfo()
 
 function handleLoginOut(){
@@ -16,6 +16,7 @@ function handleLoginOut(){
 const getSetTitle=()=>{
     _apiLogin.getBaseInfo().then(res=>{
         if(res.Ret == 200){
+            CompanyName.value = res.Data.CompanyName.ConfVal;
             document.title=res.Data.TabNameMobile?res.Data.TabNameMobile.ConfVal:''
         }
     })
@@ -36,11 +37,11 @@ getSetTitle()
         <div class="info-list">
             <div class="item">
                 <span>公司名称:</span>
-                <span>弘则弥道(上海)投资咨询有限公司</span>
+                <span>{{ CompanyName }}</span>
             </div>
             <div class="item">
                 <span>所属部门:</span>
-                <span>{{userInfo.DepartmentName}}</span>
+                <span>{{userInfo.GroupName || userInfo.DepartmentName}}</span>
             </div>
             <div class="item">
                 <span>角色:</span>