jwyu 11 kuukautta sitten
vanhempi
commit
f7ad20993a

+ 11 - 0
src/App.vue

@@ -6,6 +6,7 @@
 
 <script>
 // import { loginconf } from "api/api.js";
+import { getRealPublicSettings } from '@/api/modules/oldApi';
 export default {
   name: "app",
   provide() {
@@ -27,6 +28,16 @@ export default {
       });
     },
   },
+  created(){
+    // 获取公共配置
+    getRealPublicSettings().then(res=>{
+      if(res.Ret == 200){
+        this.$store.commit('SET_PUBLIC_CONFIG',res.Data || [])
+      }else{
+        this.$store.commit('SET_PUBLIC_CONFIG',[])
+      }
+    })
+  }
 };
 </script>
 

+ 4 - 2
src/api/api.js

@@ -201,7 +201,8 @@ const {
   weekReportValidAudio,
   getUserUuid,
   getBusinessCode,
-  recordActiveLogin
+  recordActiveLogin,
+  userLogOut
 
 } = oldApis;
 
@@ -278,6 +279,7 @@ export {
   weekReportValidAudio,
   getUserUuid,
   getBusinessCode,
-  recordActiveLogin
+  recordActiveLogin,
+  userLogOut
 };
 

+ 14 - 2
src/api/modules/oldApi.js

@@ -37,7 +37,9 @@ import http from "@/api/http.js"
  const banneradd = params => { return http.post('/banner/add',params); };  //新增banner
  const banneredit = params => { return http.post('/banner/edit',params); };  //编辑banner
  const bannerdelete = params => { return http.post('/banner/delete',params); };  //删除banner
- const getUserUuid=()=>{return http.get('/sysuser/uuid',{})}//获取用户uuid
+ const getUserUuid=()=>{return http.get('/sysuser/uuid',{})};//获取用户uuid
+ const userLogOut = params => { return http.post('/sysuser/logout',params); };  //系统用户退出登录,用于后端清空Token
+
 
 /* ppt */
 const pptlist = params => { 
@@ -326,6 +328,14 @@ const getPublicSettingsApi = params => {
 	return http.get('/system/config')
 }
 
+/**
+ * 真·获取公共配置
+ * @param {*} params 
+ */
+const getRealPublicSettings = params => {
+	return http.get('/sysuser/public_config')
+}
+
 export {
 	userLogin,
 	modifyPwd,
@@ -402,5 +412,7 @@ export {
 	getPublicSettingsApi,
 	recordActiveLogin,
 	setChapterEnable,
-	setChapterSort
+	setChapterSort,
+	getRealPublicSettings,
+	userLogOut
 }

+ 8 - 0
src/lang/modules/ETATables/commonLang.js

@@ -4,6 +4,10 @@ export default {
       zh: "刷新",
       en: "Refresh",
     },
+    refreshing_btn: {
+      zh: "刷新中...",
+      en: "Refreshing...",
+    },
     download_btn: {
       zh: "下载",
       en: "Download",
@@ -44,6 +48,10 @@ export default {
       en: "Renew",
       zh: "更新",
     },
+    renewing_btn: {
+      en: "Renewing",
+      zh: "更新中...",
+    },
   },
   Msg: {
     is_del_table_msg: {

+ 1 - 1
src/lang/modules/EtaBase/commonLang.js

@@ -466,7 +466,7 @@ export default {
       en: 'N-Period Period-over-Period Value'
     },
     period_difference: {
-      zh: 'N期环值',
+      zh: 'N期环值',
       en: 'N-Period Difference Value'
     },
     annualized: {

+ 14 - 0
src/lang/modules/systemManage/BaseConfig.js

@@ -35,6 +35,11 @@ export const BaseConfigEn = {
     connect_wx:'Associated Public Account',
     wx_original_id:'Please Enter Original ID',
     wx_original_tips:'Note: When filling in associated public account, AppID, AppSecret and original ID must all be provided. ',
+    report_sheet_size:'Report Table Font',
+    report_type1:'Smart Report',
+    report_type2:'Report list',
+    report_type3:'English Report',
+    report_sheet_tip: 'Set the font size for shared tables, time series tables, and mixed tables when inserting into research reports',
 
     ppt_zh:'Chinese PPT',
     ppt_en:'English PPT',
@@ -44,6 +49,8 @@ export const BaseConfigEn = {
     ppt_tip01:'Upload Format: png, jpg. Maximum of three images can be uploaded, recommended image ratio: 10:7',
     ppt_tip02:'Upload Format: png, jpg. Recommended image ratio: 10:7',
     ppt_tip03:'Upload Format: png, jpg. Recommended image ratio: 10:7',
+    ppt_sheet:' PPT Table',
+    ppt_sheet_tip: 'Set the font size for shared tables, time series tables, and mixed tables when inserting into PPT',
 
     resource_placeholder01:'Please enter the image name',
     resource_placeholder02:'Please select the image type',
@@ -96,6 +103,11 @@ export const BaseConfigZh = {
     connect_wx:'关联公众号',
     wx_original_id:'请输入原始Id',
     wx_original_tips:'注:关联公众号填写时,AppID、AppSecret原始ID均需填写。',
+    report_sheet_size:'研报表格字体',
+    report_type1:'智能研报',
+    report_type2:'研报列表',
+    report_type3:'英文研报',
+    report_sheet_tip: '设置共享表格、时间序列表格、混合表格插入研报的表格字号',
 
     ppt_zh:'中文PPT',
     ppt_en:'英文PPT',
@@ -105,6 +117,8 @@ export const BaseConfigZh = {
     ppt_tip01:'上传格式:png、jpg,最多上传三张,建议图片比例:10:7',
     ppt_tip02:'上传格式:png、jpg,建议图片比例:10:7',
     ppt_tip03:'上传格式:png、jpg,建议图片比例:10:7',
+    ppt_sheet:'PPT表格',
+    ppt_sheet_tip: '设置共享表格、时间序列表格、混合表格插入PPT的表格字号',
 
     resource_placeholder01:'请输入图片名称',
     resource_placeholder02:'请选择图片类型',

+ 1 - 0
src/mixins/theme.js

@@ -31,5 +31,6 @@ export default {
   g_logo: require('@/assets/img/home/logo.png'),
   g_mini_logo: require('@/assets/img/home/eta_mini.png'),
   dynamicOutLinks:{},//动态的外部link链接
+  publicConfigs:{},//公共配置
   bus_code:'',
 }

+ 34 - 7
src/views/Home.vue

@@ -288,7 +288,8 @@ import {
   customInterence,
   roadshowInterence,
   getBusinessCode,
-  homeInterface
+  homeInterface,
+  userLogOut
 } from "api/api.js";
 import { getPublicSettingsApi } from '@/api/modules/oldApi';
 import PwdDlg from "@/components/pwdDlg.vue";
@@ -772,6 +773,21 @@ export default {
             return item.name === "数据报表";
           });
           this.$store.commit("SET_DATA_AUTH", bool_data);
+
+          // 需要确认是否有权限的路由 
+          /**
+           * Sysdatauth-手工数据权限
+           */
+          let shouldVerificationRoute=["Sysdatauth"]
+          shouldVerificationRoute.map(sMenu =>{
+            this.navlists.forEach(item =>{
+              if(item.children.some(menu => menu.path === sMenu || '/'+menu.path === sMenu)){
+                // 添加有权限的路由
+                this.$store.commit("ADD_PERMISSION_ROUTE", sMenu);
+                return
+              }
+            })
+          })
         }
       });
     },
@@ -797,14 +813,19 @@ export default {
       var that = this;
       this.$confirm(/* "确认退出吗?" */this.$t('MsgPrompt.confirm_logout_msg'), this.$t('Dialog.warn_tit'), {
         type: "warning",
-      })
-        .then(() => {
+      }).then(() => {
           if(this.isTrail){
             // 结算活跃计时
             loginEndCalc()
             // 结算登录计时
             recordActiveLoginFun()
           }
+
+          userLogOut().then(res=>{})
+          .finally(()=>{
+            this.toLoginVariable()
+          })
+          
           setTimeout(() => {
             // 退出登录时可能有一些请求需要发送或者处理
             localStorage.setItem("auth", "");
@@ -816,11 +837,17 @@ export default {
             localStorage.setItem("ManageType", "");
             localStorage.setItem("RoleIdentity", "");
             localStorage.setItem("loginTime", "");
-
-            that.$router.push("/login");
           }, 10);
-        })
-        .catch(() => {});
+
+        }).catch(() => {});
+    },
+    toLoginVariable(){
+      let logoutUrl = this.$setting.publicConfigs ? this.$setting.publicConfigs.LogoutUrl||"":""
+      if(logoutUrl){
+        window.location.href=logoutUrl
+      }else{
+        this.$router.push("/login?HZ=1");
+      }
     },
     toDoc(){
       //打开更新日志项目

+ 16 - 0
src/views/Login.vue

@@ -172,6 +172,22 @@ import OrdinaryModel from "./login_manage/OrdinaryModel.vue";
 
 export default {
     components: { OrdinaryModel, MobileModel, EmailModel, ForgetPassModel },
+    beforeRouteEnter(to, from, next){
+        // console.log(to, from);
+        if(to.query.HZ == 1){
+            next();
+        }else{
+            let publicConfigs = JSON.parse(localStorage.getItem('publicConfigs')) || {}
+            // 有的话需要跳转至客户的页面
+            let loginUrl=publicConfigs.LoginUrl
+            if(loginUrl){
+                window.location.replace(loginUrl)
+                // window.location.href = loginUrl
+            }else{
+                next();
+            }
+        }
+    },
     computed: {
         lang() {
             return this.$i18n.locale

+ 3 - 0
src/views/dataEntry_manage/components/addTarget.vue

@@ -416,6 +416,9 @@ import {dataInterence} from 'api/api.js';
 			},
 			// 手工数据权限页面跳转
 			dataAuthorityJump(){
+				if(!this.$store.state.permissionRoute.includes('Sysdatauth')){
+					return this.$message.warning("暂无权限,请联系管理员开通“手工数据权限”菜单!")
+				}
 				this.$router.push('Sysdatauth')
 			}
 		},

+ 16 - 2
src/views/datasheet_manage/mixedSheetEdit.vue

@@ -42,7 +42,7 @@
       </ul>
       <div>
         <span v-if="updateTime" style="color:#999999 ;">{{$t('OnlineExcelPage.recent_save_time_info')}}{{updateTime}}</span>
-        <el-button type="primary" size="medium" @click="()=>{ sheetInit=false;getDetail('refresh')}" style="margin-left:10px" icon="el-icon-refresh-right">{{$t('ETable.Btn.renew_btn')}}</el-button>
+        <el-button type="primary" size="medium" :loading="updating" @click="updateHandle" style="margin-left:10px" icon="el-icon-refresh-right">{{updating?$t('ETable.Btn.renewing_btn'):$t('ETable.Btn.renew_btn')}}</el-button>
         <el-button type="primary" size="medium" @click="saveSheetHandle" style="margin-left:10px" v-if="hasPermission">{{$t('ETable.Btn.save_btn')}}</el-button>
         <el-button type="primary" size="medium" plain @click="backHandle">{{$t('ETable.Btn.back_btn')}}</el-button>
       </div>
@@ -117,7 +117,9 @@ export default {
       updateTime: '',
       isCanEdit:false,
       // 取消自动保存,比如返回的时候
-      cancelAutoSave:false
+      cancelAutoSave:false,
+
+      updating:false,//更新状态
     }
   },
   methods: {
@@ -134,6 +136,9 @@ export default {
       const res = await sheetInterface.sheetDetail({
 				ExcelInfoId: Number(this.sheetId)
 			})
+      if(type==='refresh'){
+        this.updating=false
+      }
 
       if(res.Ret !== 200)  return
       this.isCanEdit = res.Data.CanEdit
@@ -247,6 +252,15 @@ export default {
       isAdd && this.$router.replace({path:'/addMixedSheet',query:{id:this.sheetId}})
     },300),
 
+    //更新
+    updateHandle(){
+      if(this.updating) return
+      this.updating=true
+      this.sheetInit=false
+      this.getDetail('refresh')
+    },
+    
+
     // markFinishStatus(){
     //   if((!this.sheetId) || (!this.isCanEdit)) return
     //   sheetInterface.markSheetEditStatus({ExcelInfoId: +this.sheetId,Status:2}).then(res=>{

+ 7 - 2
src/views/datasheet_manage/sheetList.vue

@@ -199,7 +199,7 @@
                     v-if="sheetDetailInfo.Button.RefreshButton&&isSheetBtnShow('refresh')"
                   >
                   <img src="~@/assets/img/icons/refresh_blue_new.png"/>
-                    <span>{{$t('ETable.Btn.refresh_btn')}}</span>
+                    <span>{{sheetRefreshing?$t('ETable.Btn.refreshing_btn'):$t('ETable.Btn.refresh_btn')}}</span>
                   </li>
                   <li
                     class="editsty"
@@ -445,7 +445,9 @@ export default {
       autoSaveType:'',//自动保存类型,有的自动保存后需要其他操作
       cancelAutoSave:false, //自动保存时延迟的
 
-      isShowMe: false//只看我的
+      isShowMe: false,//只看我的
+
+      sheetRefreshing:false,//表格刷新状态
     };
   },
   watch: {
@@ -934,9 +936,12 @@ export default {
 
     /* 刷新表格 */
     refreshSheetEdb: _.debounce(async function () {
+      if(this.sheetRefreshing) return
+      this.sheetRefreshing=true
       const res = await sheetInterface.refreshCustomSheet({
         ExcelInfoId: this.sheetDetailInfo.ExcelInfoId,
       });
+      this.sheetRefreshing=false
 
       if (res.Ret !== 200) return;
       this.$message.success(this.$t('ETable.Msg.refresh_success_msg') );

+ 6 - 0
src/views/mychart_manage/components/chartDetailDia.vue

@@ -224,6 +224,7 @@
                             type="number"
                             placeholder="上限"
                             v-model="chartLimit.max"
+                            :disabled="!isAllowEditLimit"
                             @change="changeLimit"
                         />
                         <el-input
@@ -232,6 +233,7 @@
                             type="number"
                             placeholder="下限"
                             v-model="chartLimit.min"
+                            :disabled="!isAllowEditLimit"
                             @change="changeLimit"
                         />
                     </div>
@@ -242,6 +244,7 @@
                             type="number"
                             placeholder="上限"
                             v-model="chartLimit.rightMax"
+                            :disabled="!isAllowEditLimit"
                             @change="changeLimit"
                         />
                         <el-input
@@ -250,6 +253,7 @@
                             type="number"
                             placeholder="下限"
                             v-model="chartLimit.rightMin"
+                            :disabled="!isAllowEditLimit"
                             @change="changeLimit"
                         />
                     </div>
@@ -261,6 +265,7 @@
                             type="number"
                             placeholder="上限"
                             v-model="chartLimit.rightTwoMax"
+                            :disabled="!isAllowEditLimit"
                             @change="changeLimit"
                         />
                         <el-input
@@ -269,6 +274,7 @@
                             type="number"
                             placeholder="下限"
                             v-model="chartLimit.rightTwoMin"
+                            :disabled="!isAllowEditLimit"
                             @change="changeLimit"
                         />
                     </div>

+ 3 - 0
src/views/ppt_manage/mixins/pptEditorMixins.js

@@ -17,6 +17,9 @@ export default{
       copyPagesMap:{},//选中的ppt页Id
       savePagesArr:[],//存储上一次选中的ppt页
       CoverContent:'',//自定义封面页内容
+      showLastSaveTime:false,//是否展示自动保存时间
+      lastSaveTime:'',//自动保存时间
+      isSaved:false,//是否已点击了保存/发布
     }
   },
   directives: {

+ 5 - 2
src/views/ppt_manage/mixins/pptMixins.js

@@ -50,6 +50,7 @@ export default {
       pptCoverDepartName:'',//封面部门名称 ETA1.4.9后不再使用
       pptCoverTextColor:'',//控制上面两个字段展示的颜色 ETA1.4.9后不再使用
       pptCoverContent:'',//自定义封面页的内容
+      pptSheetSize:'',//ppt内嵌表格的字号
 
 
       setEnName:false,
@@ -118,8 +119,8 @@ export default {
     async getpptConfig(){
         const res = await etaBaseConfigInterence.getBaseConfig()
         if(res.Ret!==200) return 
-        const {CnPptCoverImgs,CnPptBackgroundImg,CnPptBottomImg,PptCompanyName,PptTeamName,PptFontColor,
-               EnPptCoverImgs,EnPptBackgroundImg,EnPptBottomImg,PptCompanyNameEn,PptTeamNameEn,PptFontColorEn
+        const {CnPptCoverImgs,CnPptBackgroundImg,CnPptBottomImg,PptCompanyName,PptTeamName,PptFontColor,CnPptSheetSize,
+               EnPptCoverImgs,EnPptBackgroundImg,EnPptBottomImg,PptCompanyNameEn,PptTeamNameEn,PptFontColorEn,EnPptSheetSize
               } = res.Data
         if(this.currentLang==='en'){
             this.pptCoverList = EnPptCoverImgs.split(',')
@@ -128,6 +129,7 @@ export default {
             this.pptCoverCompenyName = PptCompanyNameEn
             this.pptCoverDepartName = PptTeamNameEn
             this.pptCoverTextColor = PptFontColorEn
+            this.pptSheetSize = EnPptSheetSize
         }else{
             this.pptCoverList = CnPptCoverImgs.split(',')
             this.pptBgImage = CnPptBackgroundImg
@@ -135,6 +137,7 @@ export default {
             this.pptCoverCompenyName = PptCompanyName
             this.pptCoverDepartName = PptTeamName
             this.pptCoverTextColor = PptFontColor
+            this.pptSheetSize = CnPptSheetSize
         }
     },
     //获取ppt详情

+ 34 - 7
src/views/ppt_manage/newVersion/components/formatEl/SheetEl.vue

@@ -4,16 +4,36 @@
   <div
     class="chart-wrap table-wrap"
     :id="`${$parent.isPreview?'preview_':''}sheet_${index}_${position}`"
-    :style="{overflow:$parent.isPreview?'hidden':'auto'}"
+    style="overflow:hidden"
   >
-    <table :key="tableKey">
+    <!-- :style="{overflow:$parent.isPreview?'hidden':'auto'}" -->
+    <table :key="tableKey" :style="`font-size:${$parent.$parent.pptSheetSize}px`" cellpadding="0" cellspacing="0">
       <tbody>
         <tr v-for="(row,rowIndex) in tableData" :key="rowIndex">
           <td v-for="(col,colIndex) in row" 
               :key="colIndex"
               :rowspan="col.mc.rs===0?1:col.mc.rs"
-              :colspan="col.mc.cs===0?1:col.mc.cs">
-            <div>{{col.m}}</div>
+              :colspan="col.mc.cs===0?1:col.mc.cs"
+              :style="`
+                color: ${col.fc};
+                font-weight: ${col.bl ? 'bold' : 'normal'};
+                font-style: ${col.it ? 'italic' : 'normal'};
+                background: ${col.bg||'transparent'};
+              `"
+          >
+            <!-- 单元格拆分 -->
+            <div class="split-word" v-if="col.ct.s">
+              <span 
+                v-for="(word,word_index) in col.ct.s" 
+                :key="`${rowIndex}_${colIndex}_${word_index}`"
+                :style="`
+                  color: ${word.fc};
+                  font-weight: ${word.bl ? 'bold' : 'normal'};
+                  font-style: ${word.it ? 'italic' : 'normal'};
+                `"
+              >{{word.v}}</span>
+            </div>
+            <div v-else>{{col.m}}</div>
           </td>
         </tr>
       </tbody>
@@ -68,13 +88,20 @@ export default {
 .table-wrap{
   /* overflow: auto; */
   table{
-    width:100%;
+    width:99%;
+    table-layout: auto;
     td{
+        width: auto;
+        height: auto;
+        padding: 0.4em 0;
 			/* 	min-width: 35px; */
 				border: 1px solid #747474;
-				height: 45px;
+        word-break: break-all;
+        word-wrap: break-word;
+        line-height: 1.2em;
+				/* height: 45px; */
 				text-align: center;
 			}
   }
 }
-</style>
+</style>

+ 20 - 18
src/views/ppt_manage/newVersion/pptEditor.vue

@@ -109,6 +109,9 @@
             </template>
         </div>
         <div class="ppt-tool flex-column">
+            <div class="save-hint" v-show="showLastSaveTime" 
+                style="color: #666; margin-bottom: 15px"
+            >最近保存时间:{{lastSaveTime}}</div>
             <div class="tool-btn">
                 <el-button v-permission="permissionBtn.pptPermission.ppt_publish"
                  type="primary" @click="handlePublish">{{$t('Slides.go_to_publish')}}</el-button>
@@ -278,6 +281,7 @@
 <script>
 import {countComponentName,checkClipboardItems,createRandomCode,checkPPTpageElemant,getChartInfo} from './utils/untils';
 import {modelInfo,defaultPosition} from './utils/config'
+import http from '@/api/http.js';
 import { dataBaseInterface ,sandInterface } from "@/api/api.js";
 import futuresInterface from '@/api/modules/futuresBaseApi';
 import chartRelevanceApi from '@/api/modules/chartRelevanceApi';
@@ -996,7 +1000,7 @@ export default {
         this.$refs[`pptPage_${this.currentIndex}`][0].initPositionInfo()
     },
     //手动保存PPT
-    handleSave(type){
+    async handleSave(type){
      /*  const {result,hintText} = this.checkPPT()
       if(!result){
         this.$message.warning(hintText)
@@ -1022,19 +1026,21 @@ export default {
         ImgUrl:BackgroundImg,
         TemplateType:BackIndex+1
       }
+      this.isSaved = true
       if(this.$route.query.id||this.pptId){
-        this.editPPT(FirstPage,Content,type)
+        await this.editPPT(FirstPage,Content,type)
       }else{
-        this.addPPT(FirstPage,Content)
+        await this.addPPT(FirstPage,Content)
       }
     },
-    addPPT(FirstPage,Content){
-      pptInterface.addppt({
+    async addPPT(FirstPage,Content){
+      await pptInterface.addppt({
         FirstPage:FirstPage,
         Content:Content,
         GroupId:this.catalogId,
         CoverContent:this.CoverContent
       }).then(res=>{
+        this.isSaved = false
         if(res.Ret===200){
           this.$message.success(this.$t('MsgPrompt.add_msg'))
           //this.$router.push({path:'/pptlist'})
@@ -1046,15 +1052,16 @@ export default {
         }
       })
     },
-    editPPT(FirstPage,Content,type){
+    async editPPT(FirstPage,Content,type){
       //console.log(type)
       const ppt_id = this.$route.query.id||this.pptId
-      pptInterface.editppt({
+      await pptInterface.editppt({
         PptId:parseInt(ppt_id),
         FirstPage:FirstPage,
         Content:Content,
         CoverContent:this.CoverContent
       }).then(res=>{
+        this.isSaved = false
         if(res.Ret===200){
           if(type==='save'){
             this.$message.success(this.$t('MsgPrompt.edit_msg'))
@@ -1093,7 +1100,11 @@ export default {
           FirstPage:FirstPage,
           Content:Content,
           CoverContent:this.CoverContent
-        }).then((res)=>{})
+        }).then((res)=>{
+            if(res.Ret!==200) return 
+            this.showLastSaveTime = true
+            this.lastSaveTime = http.dateFormatter(new Date(), true);
+        })
       },10000)
     },
     //保存时的校验规则:封面信息,至少一页
@@ -1133,16 +1144,7 @@ export default {
       return {result:true,hintText:''}
     },
     async handlePublish(){
-      if(!this.isSave){
-        this.$message.warning(this.$t('Slides.please_save_first')+'!' )
-        return
-      }else{
-        const {result,hintText} = this.checkPPT()
-        if(!result){
-          this.$message.warning(hintText)
-          return
-        }
-      }
+      //ETA1.7.5更改发布逻辑,点击发布时,自动执行保存操作,若可保存,则跳转发布页
       await this.handleSave('pub')
       //ppt4.0后,合并后的PPT可能会超出页数or图表限制,在这里做个校验
       if(this.pageList.length>this.maxPageNum){

+ 20 - 18
src/views/ppt_manage/newVersion/pptEnEditor.vue

@@ -106,6 +106,9 @@
             </template>
         </div>
         <div class="ppt-tool flex-column">
+            <div class="save-hint" v-show="showLastSaveTime" 
+                style="color: #666; margin-bottom: 15px"
+            >最近保存时间:{{lastSaveTime}}</div>
             <div class="tool-btn">
                 <el-button v-permission="permissionBtn.enPPTPermission.pptEn_publish"
                  type="primary" @click="handlePublish">{{$t('Slides.go_to_publish')}}</el-button>
@@ -290,6 +293,7 @@
 <script>
 import {countComponentName,checkClipboardItems,createRandomCode,checkPPTpageElemant,getChartInfo} from './utils/untils';
 import {modelInfo,defaultPosition} from './utils/config'
+import http from '@/api/http.js';
 import { dataBaseInterface ,sandInterface } from "@/api/api.js";
 import futuresInterface from '@/api/modules/futuresBaseApi';
 import chartRelevanceApi from '@/api/modules/chartRelevanceApi';
@@ -999,7 +1003,7 @@ export default {
         this.$refs[`pptPage_${this.currentIndex}`][0].initPositionInfo()
     },
     //手动保存PPT
-    handleSave(type){
+    async handleSave(type){
       //保存走save_checkPPT,发布走checkPPT
       let checkResult = null
       if(type==='save'){
@@ -1018,19 +1022,21 @@ export default {
         ImgUrl:BackgroundImg,
         TemplateType:BackIndex+1
       }
+      this.isSaved = true
       if(this.$route.query.id||this.pptId){
-        this.editPPT(FirstPage,Content,type)
+        await this.editPPT(FirstPage,Content,type)
       }else{
-        this.addPPT(FirstPage,Content)
+        await this.addPPT(FirstPage,Content)
       }
     },
-    addPPT(FirstPage,Content){
-      pptEnInterface.addppt({
+    async addPPT(FirstPage,Content){
+      await pptEnInterface.addppt({
         FirstPage:FirstPage,
         Content:Content,
         GroupId:this.catalogId,
         CoverContent:this.CoverContent
       }).then(res=>{
+        this.isSaved = false
         if(res.Ret===200){
           this.$message.success(this.$t('MsgPrompt.add_msg'))
           this.isSave = true
@@ -1041,14 +1047,15 @@ export default {
         }
       })
     },
-    editPPT(FirstPage,Content,type){
+    async editPPT(FirstPage,Content,type){
       const ppt_id = this.$route.query.id||this.pptId
-      pptEnInterface.editppt({
+      await pptEnInterface.editppt({
         PptId:parseInt(ppt_id),
         FirstPage:FirstPage,
         Content:Content,
         CoverContent:this.CoverContent
       }).then(res=>{
+        this.isSaved = false
         if(res.Ret===200){
           if(type==='save'){
             this.$message.success(this.$t('MsgPrompt.edit_msg'))
@@ -1080,7 +1087,11 @@ export default {
           FirstPage:FirstPage,
           Content:Content,
           CoverContent:this.CoverContent
-        }).then((res)=>{})
+        }).then((res)=>{
+            if(res.Ret!==200) return 
+            this.showLastSaveTime = true
+            this.lastSaveTime = http.dateFormatter(new Date(), true);
+        })
       },10000)
     },
     //保存时的校验规则:封面信息,至少一页
@@ -1119,16 +1130,7 @@ export default {
       return {result:true,hintText:''}
     },
     async handlePublish(){
-      if(!this.isSave){
-        this.$message.warning(this.$t('Slides.please_save_first') )
-        return
-      }else{
-        const {result,hintText} = this.checkPPT()
-        if(!result){
-          this.$message.warning(hintText)
-          return
-        }
-      }
+      //ETA1.7.5更改发布逻辑,点击发布时,自动执行保存操作,若可保存,则跳转发布页
       await this.handleSave('pub')
       //ppt4.0后,合并后的PPT可能会超出页数or图表限制,在这里做个校验
       if(this.pageList.length>this.maxPageNum){

+ 5 - 1
src/views/ppt_manage/newVersion/utils/untils.js

@@ -623,7 +623,11 @@ export const getTableData = (data)=>{
       const cell = row[j]
       let cellOptions = {
         colspan:cell.mc.cs===0?1:cell.mc.cs,
-        rowspan:cell.mc.rs===0?1:cell.mc.rs
+        rowspan:cell.mc.rs===0?1:cell.mc.rs,
+        color: cell.fc?cell.fc.substring(1):'333',
+        fill: cell.bg ? cell.bg.substring(1):'',
+        bold: cell.bl ? true : false,
+        italic: cell.it ? true : false,
       }
         _row.push({
           text:cell.m,

+ 7 - 1
src/views/report_manage/mixins/reportMixin.js

@@ -259,11 +259,17 @@ export default {
     /* 插入表格 */
     insertSheet(item) {
       const LINK_URL = this.$setting.dynamicOutLinks.ChartViewUrl+'/sheetshow';
+      let sceneMap = {
+        '/addreportNew': 2,
+        '/editreportNew': 2,
+        '/reportEnEditor': 3
+      }
+      let scene = sceneMap[this.$route.path]
       this.$nextTick(() => {
         this.editor.html.insert(
           `<p style='text-align:left; margin-top:10px;'>
             <iframe 
-              src='${LINK_URL}?code=${item.UniqueCode}' 
+              src='${LINK_URL}?code=${item.UniqueCode}&fromScene=${scene}' 
               width='100%' 
               class='iframe${item.UniqueCode}' 
               style='border-width:0px;'

+ 1 - 1
src/views/smartReport/components/ETASheet.vue

@@ -60,7 +60,7 @@ export default {
             const obj={
                 compId:4,
                 compType:'sheet',
-                content:`${LINK_URL}?code=${item.UniqueCode}`
+                content:`${LINK_URL}?code=${item.UniqueCode}&fromScene=1`
             }
             return JSON.stringify(obj)
         },

+ 13 - 13
src/views/system_manage/components/addUserDialog.vue

@@ -163,19 +163,19 @@ import {patternEmail,isMobileNo,checkPassWord} from '@/utils/commonOptions';
                         }
                     }, trigger: 'blur'}],
                     depart:[{ required: true, message: this.$t('SystemManage.DepartManage.use_add_valid_msg08'), trigger: 'change' }],
-                    employeeNumber:[{validator:(rule,value,callback)=>{
-                        if(!value){
-                            callback()
-                            return 
-                        }
-                        // 取消空格
-                        let tempValue = parseInt(value.replaceAll(' ',''))
-                        if(!tempValue || value.replaceAll(' ','').length!=4){
-                            callback(new Error(this.$t('SystemManage.DepartManage.use_add_valid_msg09')))
-                        }else{
-                            callback()
-                        }
-                    },trigger:'blur'}],
+                    // employeeNumber:[{validator:(rule,value,callback)=>{
+                    //     if(!value){
+                    //         callback()
+                    //         return 
+                    //     }
+                    //     // 取消空格
+                    //     let tempValue = parseInt(value.replaceAll(' ',''))
+                    //     if(!tempValue || value.replaceAll(' ','').length!=4){
+                    //         callback(new Error(this.$t('SystemManage.DepartManage.use_add_valid_msg09')))
+                    //     }else{
+                    //         callback()
+                    //     }
+                    // },trigger:'blur'}],
                     role:[{ required: true, message: this.$t('SystemManage.DepartManage.use_add_valid_msg10'), trigger: 'change' }],
                 }
                 },

+ 4 - 4
src/views/system_manage/departManage.vue

@@ -80,9 +80,9 @@
 					width="200"
 					align="center">
 						<template slot-scope="scope">
-							<el-tag size="small" 
+							<!-- <el-tag size="small" 
 								v-if="scope.row.LabelVal&&permissionBtn.checkPermissionBtn(permissionBtn.sysDepartPermission.sysDepart_saveUser_LabelVal)" 
-								:style="scope.row.LabelVal==1||scope.row.LabelVal==2?'color:#fff;background:#409EFF':'color:#409EFF;background:#ECF5FF'" style="position:absolute;left:10px">{{scope.row.LabelVal==1?$t('SystemManage.DepartManage.use_tag01'):scope.row.LabelVal==2?$t('SystemManage.DepartManage.use_tag02'):scope.row.LabelVal==3?$t('SystemManage.DepartManage.use_tag03'):scope.row.LabelVal==4?$t('SystemManage.DepartManage.use_tag04'):$t('SystemManage.DepartManage.use_tag05')}}</el-tag>
+								:style="scope.row.LabelVal==1||scope.row.LabelVal==2?'color:#fff;background:#409EFF':'color:#409EFF;background:#ECF5FF'" style="position:absolute;left:10px">{{scope.row.LabelVal==1?$t('SystemManage.DepartManage.use_tag01'):scope.row.LabelVal==2?$t('SystemManage.DepartManage.use_tag02'):scope.row.LabelVal==3?$t('SystemManage.DepartManage.use_tag03'):scope.row.LabelVal==4?$t('SystemManage.DepartManage.use_tag04'):$t('SystemManage.DepartManage.use_tag05')}}</el-tag> -->
 							<span style="position: relative;">{{scope.row.RealName}}</span>
 						</template>
 					</el-table-column>
@@ -970,7 +970,7 @@ export default {
 		/* 新建用户 */
 		addUser() {
 			this.isAddUser = true;
-			this.hasEmployeeNo=false
+			// this.hasEmployeeNo=false
 			this.userForm = {
 				title:this.$t('SystemManage.DepartManage.user_add_btn'),
 				account:'',
@@ -1265,7 +1265,7 @@ export default {
 				areacode:item.TelAreaCode,
 				IsLdap:item.IsLdap||0
 			}
-			this.hasEmployeeNo=!!item.EmployeeId
+			// this.hasEmployeeNo=!!item.EmployeeId
 			this.isAddUser = true;
 		},
 		/* 删除用户 */

+ 2 - 2
src/views/system_manage/enAuthManage.vue

@@ -46,7 +46,7 @@
               {{ row[item.key] === 0 ? $t('SystemManage.EnAuthSet.enable') : $t('SystemManage.EnAuthSet.opened')  }}
             </span>
             <div v-else-if="item.key === 'RealName'">
-              <el-tag
+              <!-- <el-tag
                 size="small"
                 v-if="row.LabelVal"
                 :style="
@@ -66,7 +66,7 @@
                     ? $t('SystemManage.DepartManage.use_tag04')
                     : $t('SystemManage.DepartManage.use_tag05')
                 }}</el-tag
-              >
+              > -->
               <span style="position: relative">{{ row.RealName }}</span>
             </div>
             <span v-else>{{ row[item.key] }}</span>

+ 391 - 275
src/views/system_manage/etaBaseConfig.vue

@@ -23,301 +23,379 @@
                     <el-button type="primary"  style="margin-left:20px;width:120px;" @click="saveBaseConfig">{{$t('Dialog.confirm_save_btn')}}</el-button>
                 </div>
             </div>
-            <!-- 登录设置模块 -->
-            <div class="part" v-show="partType===1&&isShowLoginConfig">
-                <div class="side">
-                    <!-- <el-form-item label="国内短信模板" prop="LoginSmsTpId" >
-                        <div class="form-item-type-two sms-type">
-                            <el-input type="text" v-model.trim="formData.LoginSmsTpId" placeholder="请输入国内短信模板ID" style="width: calc(50% - 10px);">
-                                <template slot="suffix">
-                                    <el-tooltip content="登陆系统或找回密码或验证身份" placement="top">
-                                        <div class="input-suffix">
-                                            <img src="~@/assets/img/icons/warn-circle-gray.png" />
-                                        </div>
-                                    </el-tooltip>
-                                </template>
-                            </el-input>
-                            <el-input type="text" v-model.trim="formData.SmsJhgnAppKey" placeholder="请输入国内短信模板appkey" style="width: calc(50% - 10px);" />
-                        </div>
-                    </el-form-item>
-                    <el-form-item label="国外短信模板" prop="LoginSmsGjTpId" >
-                        <div class="form-item-type-two sms-type">
-                            <el-input type="text" v-model.trim="formData.LoginSmsGjTpId" placeholder="请输入国外短信模板ID" style="width: calc(50% - 10px);">
-                                <template slot="suffix">
-                                    <el-tooltip content="登陆系统或找回密码或验证身份" placement="top">
+            <div class="scroll-cont">
+                <!-- 登录设置模块 -->
+                <div class="part" v-show="partType===1&&isShowLoginConfig">
+                    <div class="side">
+                        <!-- <el-form-item label="国内短信模板" prop="LoginSmsTpId" >
+                            <div class="form-item-type-two sms-type">
+                                <el-input type="text" v-model.trim="formData.LoginSmsTpId" placeholder="请输入国内短信模板ID" style="width: calc(50% - 10px);">
+                                    <template slot="suffix">
+                                        <el-tooltip content="登陆系统或找回密码或验证身份" placement="top">
+                                            <div class="input-suffix">
+                                                <img src="~@/assets/img/icons/warn-circle-gray.png" />
+                                            </div>
+                                        </el-tooltip>
+                                    </template>
+                                </el-input>
+                                <el-input type="text" v-model.trim="formData.SmsJhgnAppKey" placeholder="请输入国内短信模板appkey" style="width: calc(50% - 10px);" />
+                            </div>
+                        </el-form-item>
+                        <el-form-item label="国外短信模板" prop="LoginSmsGjTpId" >
+                            <div class="form-item-type-two sms-type">
+                                <el-input type="text" v-model.trim="formData.LoginSmsGjTpId" placeholder="请输入国外短信模板ID" style="width: calc(50% - 10px);">
+                                    <template slot="suffix">
+                                        <el-tooltip content="登陆系统或找回密码或验证身份" placement="top">
+                                            <div class="input-suffix">
+                                                <img src="~@/assets/img/icons/warn-circle-gray.png" />
+                                            </div>
+                                        </el-tooltip>
+                                    </template>
+                                </el-input>
+                                <el-input type="text" v-model.trim="formData.SmsJhgjAppKey" placeholder="请输入国外短信模板appkey" style="width: calc(50% - 10px);" />
+                            </div>
+                        </el-form-item> -->
+                        <el-form-item :label="$t('SystemManage.BaseConfig.email_tem')" prop="LoginEmailTemplateSubject" >
+                            <div class="form-item-type-two">
+                                <el-input type="text" v-model="formData.LoginEmailTemplateSubject" :placeholder="$t('SystemManage.BaseConfig.email_placeholder')" >
+                                    <template slot="suffix">
+                                            <el-tooltip :content="$t('SystemManage.BaseConfig.email_tips')" placement="top">
                                         <div class="input-suffix">
                                             <img src="~@/assets/img/icons/warn-circle-gray.png" />
                                         </div>
                                     </el-tooltip>
-                                </template>
-                            </el-input>
-                            <el-input type="text" v-model.trim="formData.SmsJhgjAppKey" placeholder="请输入国外短信模板appkey" style="width: calc(50% - 10px);" />
-                        </div>
-                    </el-form-item> -->
-                    <el-form-item :label="$t('SystemManage.BaseConfig.email_tem')" prop="LoginEmailTemplateSubject" >
-                        <div class="form-item-type-two">
-                            <el-input type="text" v-model="formData.LoginEmailTemplateSubject" :placeholder="$t('SystemManage.BaseConfig.email_placeholder')" >
-                                <template slot="suffix">
-                                        <el-tooltip :content="$t('SystemManage.BaseConfig.email_tips')" placement="top">
-                                    <div class="input-suffix">
-                                        <img src="~@/assets/img/icons/warn-circle-gray.png" />
-                                    </div>
-                                </el-tooltip>
-                                </template>
-                            </el-input>
-                        </div>
-                    </el-form-item>
-                    <el-form-item prop="LoginEmailTemplateContent" >
-                        <froala id="email-content-editor"
-                            ref="emailContentEditor" 
-                            tag="textarea" 
-                            :config="{...disclaimerConfig,...emailEditorConfig}" v-model="formData.LoginEmailTemplateContent">
-                        </froala>
-                        <ConfigAnnotation picName="emailContentTemplate" @showImage="previewImage" picHintText="" :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
-                    </el-form-item>
-                </div>
-                <div class="side">
-                    <el-form-item label="备案信息" prop="ICPLicense">
-                        <el-input type="text" v-model="formData.ICPLicense" placeholder="文本中输入≥2个空格表示文本分段,小屏时换行展示" />
-                        <ConfigAnnotation picHintText="" picName="ICPLicense" @showImage="previewImage"/>
-                    </el-form-item>
-                    <el-form-item label="登录页标题" prop="ETATitle">
-                        <el-input type="text" v-model="formData.ETATitle" placeholder="请输入登录页标题" />
-                        <ConfigAnnotation picHintText="" picName="ETATitle" @showImage="previewImage"/>
-                    </el-form-item>
-                    <el-form-item label="网站名称" prop="TabName">
-                        <el-input type="text" v-model="formData.TabName" placeholder="请输入登录页标题" />
-                        <ConfigAnnotation picHintText="" picName="TabName" @showImage="previewImage"/>
-                    </el-form-item>
-                </div>
-            </div>
-            <!-- 研报设置 -->
-            <div class="part" v-show="partType===2">
-                <div class="side">
-                    <el-form-item :label="$t('SystemManage.BaseConfig.company_name')" prop="CompanyName">
-                        <el-input type="text" v-model="formData.CompanyName" :placeholder="$t('SystemManage.BaseConfig.company_name_placeholder')" />
-                        <ConfigAnnotation picHintText="" :buttonText="$t('SystemManage.BaseConfig.view_example_text')" picName="CompanyName" @showImage="previewImage"/>
-                    </el-form-item>
-                    <el-form-item :label="$t('SystemManage.BaseConfig.compay_mark')" prop="CompanyWatermark" class="watermark">
-                        <ImgUpload 
-                            :imgUrl="formData.CompanyWatermark"
-                            @showImage="showImage"
-                            @upload="(file)=>handleUploadImage(file,'CompanyWatermark')"
-                            @remove="deleteFormImg('CompanyWatermark')"
-                            />
-                        <!-- 后面可能会有新的选项 -->
-                        <div style="position: absolute;top: -40px;left: 140px;display:flex;gap:0 20px">
-                            <el-checkbox-group v-if="isShowYBChart"
-                                v-model="checkList" >
-                                <el-checkbox label="研报图表">{{$t('SystemManage.BaseConfig.report_chart')}}</el-checkbox>
-                            </el-checkbox-group>
-                            <div v-if="isShowYBShare">
-                                <el-checkbox label="研报分享" v-model="formData.WatermarkReport">{{$t('SystemManage.BaseConfig.report_share')}}</el-checkbox>
-                                <el-tooltip 
-                                    effect="dark" 
-                                    :content="$t('SystemManage.BaseConfig.report_share_tips')" 
-                                    placement="top"
-                                >
-                                    <i class="el-icon-warning"></i>
-                                </el-tooltip>
+                                    </template>
+                                </el-input>
                             </div>
-                            
-                        </div>
-                        <ConfigAnnotation :picHintText="$t('SystemManage.BaseConfig.upload_format')" :buttonText="$t('SystemManage.BaseConfig.view_example_text')" picName="CompanyWatermark" @showImage="previewImage"/>
-                    </el-form-item>
-                    <el-form-item :label="$t('SystemManage.BaseConfig.disclaimer')" prop="Disclaimer" class="disclaimer">
-                        <div class="rich-editor-wrap">
-                            <froala :id="`disclaimer-editor`"
-                                :ref="`disclaimerEditor`" 
-                                :tag="'textarea'" 
-                                :config="disclaimerConfig" v-model="formData.Disclaimer">
+                        </el-form-item>
+                        <el-form-item prop="LoginEmailTemplateContent" >
+                            <froala id="email-content-editor"
+                                ref="emailContentEditor" 
+                                tag="textarea" 
+                                :config="{...disclaimerConfig,...emailEditorConfig}" v-model="formData.LoginEmailTemplateContent">
                             </froala>
-                        </div>
-                        <ConfigAnnotation picHintText="" :buttonText="$t('SystemManage.BaseConfig.view_example_text')" picName="Disclaimer" @showImage="previewImage"/>
-                    </el-form-item>
-                    <div v-if="isShowXunFei">
-                        <!-- 科大讯飞 -->
-                        <div style="width:100%;">
-                            <span style="color:#606266;">{{$t('SystemManage.BaseConfig.iFLYTEK_service')}}</span> 
-                            <el-switch v-model="Iflytek"></el-switch>
-                        </div>
-                        <template v-if="Iflytek">
-                            <el-form-item label="APPID" prop="XfAppid">
-                                <el-input type="text" v-model="formData.XfAppid" :placeholder="$t('SystemManage.BaseConfig.please_enter')+'APPID'" />
-                            </el-form-item>
-                            <el-form-item label="APIKey" prop="XfApiKey">
-                                <el-input type="text" v-model="formData.XfApiKey" :placeholder="$t('SystemManage.BaseConfig.please_enter')+'APIKey'" />
-                            </el-form-item>
-                            <el-form-item label="APISecret" prop="XfApiSecret">
-                                <el-input type="text" v-model="formData.XfApiSecret" :placeholder="$t('SystemManage.BaseConfig.please_enter')+'APISecret'" />
-                            </el-form-item>
-                            <el-form-item label="vcn(voice_name)" prop="XfVcn">
-                                <el-input type="text" v-model="formData.XfVcn" :placeholder="$t('SystemManage.BaseConfig.please_enter')+'voice_name'" />
-                            </el-form-item>
-                        </template>
+                            <ConfigAnnotation picName="emailContentTemplate" @showImage="previewImage" picHintText="" :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
+                        </el-form-item>
                     </div>
-                    <!-- 研报审批 -->
-                    <div v-if="isShowApprove">
-                        <div style="width:100%;margin-bottom: 20px;">
-                            <span style="color:#606266;">{{$t('SystemManage.BaseConfig.report_approval')}}</span> 
-                            <el-switch v-model="approve"></el-switch>
+                    <div class="side">
+                        <el-form-item label="备案信息" prop="ICPLicense">
+                            <el-input type="text" v-model="formData.ICPLicense" placeholder="文本中输入≥2个空格表示文本分段,小屏时换行展示" />
+                            <ConfigAnnotation picHintText="" picName="ICPLicense" @showImage="previewImage"/>
+                        </el-form-item>
+                        <el-form-item label="登录页标题" prop="ETATitle">
+                            <el-input type="text" v-model="formData.ETATitle" placeholder="请输入登录页标题" />
+                            <ConfigAnnotation picHintText="" picName="ETATitle" @showImage="previewImage"/>
+                        </el-form-item>
+                        <el-form-item label="网站名称" prop="TabName">
+                            <el-input type="text" v-model="formData.TabName" placeholder="请输入登录页标题" />
+                            <ConfigAnnotation picHintText="" picName="TabName" @showImage="previewImage"/>
+                        </el-form-item>
+                    </div>
+                </div>
+                <!-- 研报设置 -->
+                <div class="part" v-show="partType===2">
+                    <div class="side">
+                        <el-form-item :label="$t('SystemManage.BaseConfig.company_name')" prop="CompanyName">
+                            <el-input type="text" v-model="formData.CompanyName" :placeholder="$t('SystemManage.BaseConfig.company_name_placeholder')" />
+                            <ConfigAnnotation picHintText="" :buttonText="$t('SystemManage.BaseConfig.view_example_text')" picName="CompanyName" @showImage="previewImage"/>
+                        </el-form-item>
+                        <el-form-item :label="$t('SystemManage.BaseConfig.compay_mark')" prop="CompanyWatermark" class="watermark">
+                            <ImgUpload 
+                                :imgUrl="formData.CompanyWatermark"
+                                @showImage="showImage"
+                                @upload="(file)=>handleUploadImage(file,'CompanyWatermark')"
+                                @remove="deleteFormImg('CompanyWatermark')"
+                                />
+                            <!-- 后面可能会有新的选项 -->
+                            <div style="position: absolute;top: -40px;left: 140px;display:flex;gap:0 20px">
+                                <el-checkbox-group v-if="isShowYBChart"
+                                    v-model="checkList" >
+                                    <el-checkbox label="研报图表">{{$t('SystemManage.BaseConfig.report_chart')}}</el-checkbox>
+                                </el-checkbox-group>
+                                <div v-if="isShowYBShare">
+                                    <el-checkbox label="研报分享" v-model="formData.WatermarkReport">{{$t('SystemManage.BaseConfig.report_share')}}</el-checkbox>
+                                    <el-tooltip 
+                                        effect="dark" 
+                                        :content="$t('SystemManage.BaseConfig.report_share_tips')" 
+                                        placement="top"
+                                    >
+                                        <i class="el-icon-warning"></i>
+                                    </el-tooltip>
+                                </div>
+                                
+                            </div>
+                            <ConfigAnnotation :picHintText="$t('SystemManage.BaseConfig.upload_format')" :buttonText="$t('SystemManage.BaseConfig.view_example_text')" picName="CompanyWatermark" @showImage="previewImage"/>
+                        </el-form-item>
+
+                        <el-form-item>
+                            <template slot="label">
+                                <span><!-- 研报表格字体 -->{{$t('SystemManage.BaseConfig.report_sheet_size')}}</span>
+                                <el-tooltip class="item" effect="dark" :content="ReportSheetTip" placement="top-start">
+                                    <i class="el-icon-warning"/>
+                                </el-tooltip>
+                            </template>
+                            <div class="flex-wrap">
+                                <div v-for="item in reportFromType" :key="item.type">
+                                    <label>{{item.label}}</label>
+                                    <el-select v-model="formData.SmartReportSheetSize" style="width:80px;" v-if="item.type==='smartReport'">
+                                        <el-option 
+                                            v-for="size in sizeOptions" 
+                                            :key="size.val"
+                                            :label="size.label"
+                                            :value="size.val"
+                                        />
+                                    </el-select>
+                                    <el-select v-model="formData.ReportSheetSize" style="width:80px;" v-else-if="item.type==='report'">
+                                        <el-option 
+                                            v-for="size in sizeOptions" 
+                                            :key="size.val"
+                                            :label="size.label"
+                                            :value="size.val"
+                                        />
+                                    </el-select>
+                                    <el-select v-model="formData.EnReportSheetSize" style="width:80px;" v-else-if="item.type==='enReport'">
+                                        <el-option 
+                                            v-for="size in sizeOptions" 
+                                            :key="size.val"
+                                            :label="size.label"
+                                            :value="size.val"
+                                        />
+                                    </el-select>
+                                </div>
+
+                            </div>
+                        </el-form-item>
+
+                        <div v-if="isShowXunFei">
+                            <!-- 科大讯飞 -->
+                            <div style="width:100%;">
+                                <span style="color:#606266;">{{$t('SystemManage.BaseConfig.iFLYTEK_service')}}</span> 
+                                <el-switch v-model="Iflytek"></el-switch>
+                            </div>
+                            <template v-if="Iflytek">
+                                <el-form-item label="APPID" prop="XfAppid">
+                                    <el-input type="text" v-model="formData.XfAppid" :placeholder="$t('SystemManage.BaseConfig.please_enter')+'APPID'" />
+                                </el-form-item>
+                                <el-form-item label="APIKey" prop="XfApiKey">
+                                    <el-input type="text" v-model="formData.XfApiKey" :placeholder="$t('SystemManage.BaseConfig.please_enter')+'APIKey'" />
+                                </el-form-item>
+                                <el-form-item label="APISecret" prop="XfApiSecret">
+                                    <el-input type="text" v-model="formData.XfApiSecret" :placeholder="$t('SystemManage.BaseConfig.please_enter')+'APISecret'" />
+                                </el-form-item>
+                                <el-form-item label="vcn(voice_name)" prop="XfVcn">
+                                    <el-input type="text" v-model="formData.XfVcn" :placeholder="$t('SystemManage.BaseConfig.please_enter')+'voice_name'" />
+                                </el-form-item>
+                            </template>
                         </div>
-                        <div class="side" v-if="approve">
-                            <el-form-item label="" prop="ReportApproveType">
-                                <el-radio-group v-model="formData.ReportApproveType">
-                                    <el-radio label="eta">{{$t('SystemManage.BaseConfig.internal_approval')}}</el-radio>
-                                    <el-radio label="other">
-                                        <span>{{$t('SystemManage.BaseConfig.third_approval')}}</span>
-                                        <el-tooltip effect="dark" placement="top" :content="$t('SystemManage.BaseConfig.third_approval_tips')" >
-                                            <span class="hint-text">
-                                                <i class="el-icon-warning-outline"></i>
-                                            </span>
-                                        </el-tooltip>
-                                    </el-radio>
-                                </el-radio-group>
-                            </el-form-item>
+                        <!-- 研报审批 -->
+                        <div v-if="isShowApprove">
+                            <div style="width:100%;margin-bottom: 20px;">
+                                <span style="color:#606266;">{{$t('SystemManage.BaseConfig.report_approval')}}</span> 
+                                <el-switch v-model="approve"></el-switch>
+                            </div>
+                            <div class="side" v-if="approve">
+                                <el-form-item label="" prop="ReportApproveType">
+                                    <el-radio-group v-model="formData.ReportApproveType">
+                                        <el-radio label="eta">{{$t('SystemManage.BaseConfig.internal_approval')}}</el-radio>
+                                        <el-radio label="other">
+                                            <span>{{$t('SystemManage.BaseConfig.third_approval')}}</span>
+                                            <el-tooltip effect="dark" placement="top" :content="$t('SystemManage.BaseConfig.third_approval_tips')" >
+                                                <span class="hint-text">
+                                                    <i class="el-icon-warning-outline"></i>
+                                                </span>
+                                            </el-tooltip>
+                                        </el-radio>
+                                    </el-radio-group>
+                                </el-form-item>
+                            </div>
                         </div>
                     </div>
-                </div>
-                <div class="side">
-                    <el-form-item :label="$t('SystemManage.BaseConfig.report_share_title_zh')" prop="H5ShareName">
-                        <el-input type="text" v-model="formData.H5ShareName" :placeholder="$t('SystemManage.BaseConfig.report_share_title_zh_placeholder')" />
-                    </el-form-item>
-                    <el-form-item :label="$t('SystemManage.BaseConfig.report_share_title_en')" prop="H5ShareEnName">
-                        <el-input type="text" v-model="formData.H5ShareEnName" :placeholder="$t('SystemManage.BaseConfig.report_share_title_en_placeholder')" />
-                    </el-form-item>
-                    <el-form-item :label="$t('SystemManage.BaseConfig.connect_wx')" prop="WxAppId">
-                        <el-input type="text" v-model.trim="formData.WxAppId" :placeholder="$t('SystemManage.BaseConfig.please_enter')+'AppID'" />
-                    </el-form-item>
-                    <el-form-item prop="WxAppSecret">
-                        <el-input type="text" v-model.trim="formData.WxAppSecret" :placeholder="$t('SystemManage.BaseConfig.please_enter')+'AppSecret'" />
-                    </el-form-item>
-                    <el-form-item prop="WxId">
-                        <el-input type="text" v-model.trim="formData.WxId" :placeholder="$t('SystemManage.BaseConfig.wx_original_id')" />
-                    </el-form-item>
-                    <div class="input-hint">{{$t('SystemManage.BaseConfig.wx_original_tips')}}</div>
-                    <el-form-item  prop="H5ReportShareImg">
-                        <ImgUpload 
-                            :imgUrl="formData.H5ReportShareImg"
-                            @showImage="showImage"
-                            @upload="(file)=>handleUploadImage(file,'H5ReportShareImg')"
-                            @remove="deleteFormImg('H5ReportShareImg')"
-                            />
-                        <!-- <ConfigAnnotation picName="OfficialAccountsLogoPic" @showImage="previewImage"
-                            picHintText=""/> -->
-                    </el-form-item>
-                </div>
-            </div>
-            <!-- PPT配置 -->
-            <div class="part" v-if="isShowPPT||isShowEnPPT" v-show="partType===3">
-                <el-radio-group v-model="pptLang" style="margin-bottom: 22px;">
-                    <el-radio-button label="cn">{{$t('SystemManage.BaseConfig.ppt_zh')}}</el-radio-button>
-                    <el-radio-button label="en">{{$t('SystemManage.BaseConfig.ppt_en')}}</el-radio-button>
-                </el-radio-group>
-                <div v-if="isShowPPT" v-show="pptLang === 'cn'" class="ppt-form-item-wrap">
-                    <!-- <div class="inner-input-wrap">
-                        <el-form-item label="公司名称" prop="PptCompanyName" class="inline-form-item">
-                            <el-input type="text" v-model="formData.PptCompanyName"></el-input>
+                    <div class="side">
+                        <el-form-item :label="$t('SystemManage.BaseConfig.disclaimer')" prop="Disclaimer" class="disclaimer">
+                            <div class="rich-editor-wrap">
+                                <froala :id="`disclaimer-editor`"
+                                    :ref="`disclaimerEditor`" 
+                                    :tag="'textarea'" 
+                                    :config="disclaimerConfig" v-model="formData.Disclaimer">
+                                </froala>
+                            </div>
+                            <ConfigAnnotation picHintText="" :buttonText="$t('SystemManage.BaseConfig.view_example_text')" picName="Disclaimer" @showImage="previewImage"/>
+                        </el-form-item>
+                        <el-form-item :label="$t('SystemManage.BaseConfig.report_share_title_zh')" prop="H5ShareName">
+                            <el-input type="text" v-model="formData.H5ShareName" :placeholder="$t('SystemManage.BaseConfig.report_share_title_zh_placeholder')" />
+                        </el-form-item>
+                        <el-form-item :label="$t('SystemManage.BaseConfig.report_share_title_en')" prop="H5ShareEnName">
+                            <el-input type="text" v-model="formData.H5ShareEnName" :placeholder="$t('SystemManage.BaseConfig.report_share_title_en_placeholder')" />
                         </el-form-item>
-                        <el-form-item label="团队名称" prop="PptTeamName" class="inline-form-item">
-                            <el-input type="text" v-model="formData.PptTeamName"></el-input>
+                        <el-form-item :label="$t('SystemManage.BaseConfig.connect_wx')" prop="WxAppId">
+                            <el-input type="text" v-model.trim="formData.WxAppId" :placeholder="$t('SystemManage.BaseConfig.please_enter')+'AppID'" />
                         </el-form-item>
-                        <el-form-item label="字体颜色" prop="PptFontColor" class="inline-form-item">
-                            <el-input type="color" style="width:64px;" v-model="formData.PptFontColor"></el-input>
+                        <el-form-item prop="WxAppSecret">
+                            <el-input type="text" v-model.trim="formData.WxAppSecret" :placeholder="$t('SystemManage.BaseConfig.please_enter')+'AppSecret'" />
                         </el-form-item>
-                    </div> -->
-                    
-                    <el-form-item :label="$t('SystemManage.BaseConfig.ppt_type01')" prop="CnPptCoverImgs" style="min-width:400px;">
-                        <div class="input-line" style="display:flex;">
+                        <el-form-item prop="WxId">
+                            <el-input type="text" v-model.trim="formData.WxId" :placeholder="$t('SystemManage.BaseConfig.wx_original_id')" />
+                        </el-form-item>
+                        <div class="input-hint">{{$t('SystemManage.BaseConfig.wx_original_tips')}}</div>
+                        <el-form-item  prop="H5ReportShareImg">
                             <ImgUpload 
-                                :imgUrl="formData.CnPptCoverImgs.length===3?formData.CnPptCoverImgs[2]:''"
-                                @showImage="(arr)=>{showImageOrder({list:formData.CnPptCoverImgs,item:arr[0]})}"
-                                @upload="(file)=>handleUploadImage(file,'CnPptCoverImgs')"
-                                @remove="deleteFormImg('CnPptCoverImgs',formData.CnPptCoverImgs.length-1)"
+                                :imgUrl="formData.H5ReportShareImg"
+                                @showImage="showImage"
+                                @upload="(file)=>handleUploadImage(file,'H5ReportShareImg')"
+                                @remove="deleteFormImg('H5ReportShareImg')"
                                 />
-                            <ImgThumbnail 
-                                :imgList="formData.CnPptCoverImgs.length===3?formData.CnPptCoverImgs.slice(0,2):formData.CnPptCoverImgs"
-                                @showImage="({item})=>{showImageOrder({list:formData.CnPptCoverImgs,item})}"
-                                @deleteImg="(index)=>{deleteFormImg('CnPptCoverImgs',index)}"/>
-                        </div>
-                        <ConfigAnnotation picName="pptCoverList" @showImage="previewImage"
-                            :picHintText="$t('SystemManage.BaseConfig.ppt_tip01')"
-                            :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
-                    </el-form-item>
-                    <el-form-item :label="$t('SystemManage.BaseConfig.ppt_type02')" prop="CnPptBackgroundImg">
-                        <ImgUpload 
-                            :imgUrl="formData.CnPptBackgroundImg"
-                            @showImage="showImage"
-                            @upload="(file)=>handleUploadImage(file,'CnPptBackgroundImg')"
-                            @remove="deleteFormImg('CnPptBackgroundImg')"
-                            />
-                        <ConfigAnnotation picName="pptBgPic" @showImage="previewImage"
-                            :picHintText="$t('SystemManage.BaseConfig.ppt_tip02')"
-                            :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
-                    </el-form-item>
-                    <el-form-item :label="$t('SystemManage.BaseConfig.ppt_type03')" prop="CnPptBottomImg">
-                        <ImgUpload 
-                            :imgUrl="formData.CnPptBottomImg"
-                            @showImage="showImage"
-                            @upload="(file)=>handleUploadImage(file,'CnPptBottomImg')"
-                            @remove="deleteFormImg('CnPptBottomImg')"
-                            />
-                        <ConfigAnnotation picName="pptBackPic" @showImage="previewImage"
-                            :picHintText="$t('SystemManage.BaseConfig.ppt_tip03')"
-                            :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
-                    </el-form-item>
+                            <!-- <ConfigAnnotation picName="OfficialAccountsLogoPic" @showImage="previewImage"
+                                picHintText=""/> -->
+                        </el-form-item>
+                    </div>
                 </div>
-                <div v-if="isShowEnPPT" v-show="pptLang === 'en'" class="ppt-form-item-wrap">
-                    <!-- <div class="inner-input-wrap">
-                        <el-form-item label="公司名称" prop="PptCompanyNameEn" class="inline-form-item">
-                            <el-input type="text" v-model="formData.PptCompanyNameEn"></el-input>
+                <!-- PPT配置 -->
+                <div class="part" v-if="isShowPPT||isShowEnPPT" v-show="partType===3">
+                    <el-radio-group v-model="pptLang" style="margin-bottom: 22px;">
+                        <el-radio-button label="cn">{{$t('SystemManage.BaseConfig.ppt_zh')}}</el-radio-button>
+                        <el-radio-button label="en">{{$t('SystemManage.BaseConfig.ppt_en')}}</el-radio-button>
+                    </el-radio-group>
+                    <div v-if="isShowPPT" v-show="pptLang === 'cn'" class="ppt-form-item-wrap">
+                        <!-- <div class="inner-input-wrap">
+                            <el-form-item label="公司名称" prop="PptCompanyName" class="inline-form-item">
+                                <el-input type="text" v-model="formData.PptCompanyName"></el-input>
+                            </el-form-item>
+                            <el-form-item label="团队名称" prop="PptTeamName" class="inline-form-item">
+                                <el-input type="text" v-model="formData.PptTeamName"></el-input>
+                            </el-form-item>
+                            <el-form-item label="字体颜色" prop="PptFontColor" class="inline-form-item">
+                                <el-input type="color" style="width:64px;" v-model="formData.PptFontColor"></el-input>
+                            </el-form-item>
+                        </div> -->
+                        
+                        <el-form-item :label="$t('SystemManage.BaseConfig.ppt_type01')" prop="CnPptCoverImgs" style="min-width:400px;">
+                            <div class="input-line" style="display:flex;">
+                                <ImgUpload 
+                                    :imgUrl="formData.CnPptCoverImgs.length===3?formData.CnPptCoverImgs[2]:''"
+                                    @showImage="(arr)=>{showImageOrder({list:formData.CnPptCoverImgs,item:arr[0]})}"
+                                    @upload="(file)=>handleUploadImage(file,'CnPptCoverImgs')"
+                                    @remove="deleteFormImg('CnPptCoverImgs',formData.CnPptCoverImgs.length-1)"
+                                    />
+                                <ImgThumbnail 
+                                    :imgList="formData.CnPptCoverImgs.length===3?formData.CnPptCoverImgs.slice(0,2):formData.CnPptCoverImgs"
+                                    @showImage="({item})=>{showImageOrder({list:formData.CnPptCoverImgs,item})}"
+                                    @deleteImg="(index)=>{deleteFormImg('CnPptCoverImgs',index)}"/>
+                            </div>
+                            <ConfigAnnotation picName="pptCoverList" @showImage="previewImage"
+                                :picHintText="$t('SystemManage.BaseConfig.ppt_tip01')"
+                                :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
                         </el-form-item>
-                        <el-form-item label="团队名称" prop="PptTeamNameEn" class="inline-form-item">
-                            <el-input type="text" v-model="formData.PptTeamNameEn"></el-input>
+                        <el-form-item :label="$t('SystemManage.BaseConfig.ppt_type02')" prop="CnPptBackgroundImg">
+                            <ImgUpload 
+                                :imgUrl="formData.CnPptBackgroundImg"
+                                @showImage="showImage"
+                                @upload="(file)=>handleUploadImage(file,'CnPptBackgroundImg')"
+                                @remove="deleteFormImg('CnPptBackgroundImg')"
+                                />
+                            <ConfigAnnotation picName="pptBgPic" @showImage="previewImage"
+                                :picHintText="$t('SystemManage.BaseConfig.ppt_tip02')"
+                                :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
                         </el-form-item>
-                        <el-form-item label="字体颜色" prop="PptFontColorEn" class="inline-form-item">
-                            <el-input type="color" style="width:64px;" v-model="formData.PptFontColorEn"></el-input>
+                        <el-form-item :label="$t('SystemManage.BaseConfig.ppt_type03')" prop="CnPptBottomImg">
+                            <ImgUpload 
+                                :imgUrl="formData.CnPptBottomImg"
+                                @showImage="showImage"
+                                @upload="(file)=>handleUploadImage(file,'CnPptBottomImg')"
+                                @remove="deleteFormImg('CnPptBottomImg')"
+                                />
+                            <ConfigAnnotation picName="pptBackPic" @showImage="previewImage"
+                                :picHintText="$t('SystemManage.BaseConfig.ppt_tip03')"
+                                :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
                         </el-form-item>
-                    </div> -->
-                    <el-form-item :label="$t('SystemManage.BaseConfig.ppt_type01')" prop="EnPptCoverImgs" style="min-width:400px;">
-                        <div class="input-line" style="display:flex;">
+                        <el-form-item label="PPT表格" prop="CnPptSheetSize">
+                            <template slot="label">
+                                <span>
+                                    <!-- PPT表格 -->{{$t('SystemManage.BaseConfig.ppt_sheet')}}
+                                    <el-tooltip class="item" effect="dark" :content="pptSheetTip" placement="top-start">
+                                        <i class="el-icon-warning"/>
+                                    </el-tooltip>
+                                </span>
+                            </template>
+                            <el-select v-model="formData.CnPptSheetSize" style="width:120px;">
+                                <el-option 
+                                    v-for="size in sizeOptions" 
+                                    :key="size.val"
+                                    :label="size.label"
+                                    :value="size.val"
+                                />
+                            </el-select>
+                        </el-form-item>
+                    </div>
+                    <div v-if="isShowEnPPT" v-show="pptLang === 'en'" class="ppt-form-item-wrap">
+                        <!-- <div class="inner-input-wrap">
+                            <el-form-item label="公司名称" prop="PptCompanyNameEn" class="inline-form-item">
+                                <el-input type="text" v-model="formData.PptCompanyNameEn"></el-input>
+                            </el-form-item>
+                            <el-form-item label="团队名称" prop="PptTeamNameEn" class="inline-form-item">
+                                <el-input type="text" v-model="formData.PptTeamNameEn"></el-input>
+                            </el-form-item>
+                            <el-form-item label="字体颜色" prop="PptFontColorEn" class="inline-form-item">
+                                <el-input type="color" style="width:64px;" v-model="formData.PptFontColorEn"></el-input>
+                            </el-form-item>
+                        </div> -->
+                        <el-form-item :label="$t('SystemManage.BaseConfig.ppt_type01')" prop="EnPptCoverImgs" style="min-width:400px;">
+                            <div class="input-line" style="display:flex;">
+                                <ImgUpload 
+                                    :imgUrl="formData.EnPptCoverImgs.length===3?formData.EnPptCoverImgs[2]:''"
+                                    @showImage="(arr)=>{showImageOrder({list:formData.EnPptCoverImgs,item:arr[0]})}"
+                                    @upload="(file)=>handleUploadImage(file,'EnPptCoverImgs')"
+                                    @remove="deleteFormImg('EnPptCoverImgs',formData.EnPptCoverImgs.length-1)"
+                                    />
+                                <ImgThumbnail 
+                                    :imgList="formData.EnPptCoverImgs.length===3?formData.EnPptCoverImgs.slice(0,2):formData.EnPptCoverImgs"
+                                    @showImage="({item})=>{showImageOrder({list:formData.EnPptCoverImgs,item})}"
+                                    @deleteImg="(index)=>{deleteFormImg('EnPptCoverImgs',index)}"/>
+                            </div>
+                            <ConfigAnnotation picName="pptCoverList" @showImage="previewImage"
+                                :picHintText="$t('SystemManage.BaseConfig.ppt_tip01')"
+                                :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
+                        </el-form-item>
+                        <el-form-item :label="$t('SystemManage.BaseConfig.ppt_type02')" prop="EnPptBackgroundImg">
                             <ImgUpload 
-                                :imgUrl="formData.EnPptCoverImgs.length===3?formData.EnPptCoverImgs[2]:''"
-                                @showImage="(arr)=>{showImageOrder({list:formData.EnPptCoverImgs,item:arr[0]})}"
-                                @upload="(file)=>handleUploadImage(file,'EnPptCoverImgs')"
-                                @remove="deleteFormImg('EnPptCoverImgs',formData.EnPptCoverImgs.length-1)"
+                                :imgUrl="formData.EnPptBackgroundImg"
+                                @showImage="showImage"
+                                @upload="(file)=>handleUploadImage(file,'EnPptBackgroundImg')"
+                                @remove="deleteFormImg('EnPptBackgroundImg')"
                                 />
-                            <ImgThumbnail 
-                                :imgList="formData.EnPptCoverImgs.length===3?formData.EnPptCoverImgs.slice(0,2):formData.EnPptCoverImgs"
-                                @showImage="({item})=>{showImageOrder({list:formData.EnPptCoverImgs,item})}"
-                                @deleteImg="(index)=>{deleteFormImg('EnPptCoverImgs',index)}"/>
-                        </div>
-                        <ConfigAnnotation picName="pptCoverList" @showImage="previewImage"
-                            :picHintText="$t('SystemManage.BaseConfig.ppt_tip01')"
-                            :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
-                    </el-form-item>
-                    <el-form-item :label="$t('SystemManage.BaseConfig.ppt_type02')" prop="EnPptBackgroundImg">
-                        <ImgUpload 
-                            :imgUrl="formData.EnPptBackgroundImg"
-                            @showImage="showImage"
-                            @upload="(file)=>handleUploadImage(file,'EnPptBackgroundImg')"
-                            @remove="deleteFormImg('EnPptBackgroundImg')"
-                            />
-                        <ConfigAnnotation picName="pptBgPic" @showImage="previewImage"
-                            :picHintText="$t('SystemManage.BaseConfig.ppt_tip02')"
-                            :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
-                    </el-form-item>
-                    <el-form-item :label="$t('SystemManage.BaseConfig.ppt_type03')" prop="EnPptBottomImg">
-                        <ImgUpload 
-                            :imgUrl="formData.EnPptBottomImg"
-                            @showImage="showImage"
-                            @upload="(file)=>handleUploadImage(file,'EnPptBottomImg')"
-                            @remove="deleteFormImg('EnPptBottomImg')"
-                            />
-                        <ConfigAnnotation picName="pptBackPic" @showImage="previewImage"
-                            :picHintText="$t('SystemManage.BaseConfig.ppt_tip03')"
-                            :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
-                    </el-form-item>
+                            <ConfigAnnotation picName="pptBgPic" @showImage="previewImage"
+                                :picHintText="$t('SystemManage.BaseConfig.ppt_tip02')"
+                                :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
+                        </el-form-item>
+                        <el-form-item :label="$t('SystemManage.BaseConfig.ppt_type03')" prop="EnPptBottomImg">
+                            <ImgUpload 
+                                :imgUrl="formData.EnPptBottomImg"
+                                @showImage="showImage"
+                                @upload="(file)=>handleUploadImage(file,'EnPptBottomImg')"
+                                @remove="deleteFormImg('EnPptBottomImg')"
+                                />
+                            <ConfigAnnotation picName="pptBackPic" @showImage="previewImage"
+                                :picHintText="$t('SystemManage.BaseConfig.ppt_tip03')"
+                                :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
+                        </el-form-item>
+                        <el-form-item label="PPT表格" prop="CnPptSheetSize">
+                            <template slot="label">
+                                <span>
+                                    <!-- PPT表格 -->{{$t('SystemManage.BaseConfig.ppt_sheet')}}
+                                    <el-tooltip class="item" effect="dark" :content="pptSheetTip" placement="top-start">
+                                        <i class="el-icon-warning"/>
+                                    </el-tooltip>
+                                </span>
+                            </template>
+                            <el-select v-model="formData.EnPptSheetSize" style="width:120px;">
+                                <el-option 
+                                    v-for="size in sizeOptions" 
+                                    :key="size.val"
+                                    :label="size.label"
+                                    :value="size.val"
+                                />
+                            </el-select>
+                        </el-form-item>
+                    </div>
                 </div>
             </div>
         </el-form>
@@ -374,6 +452,9 @@ export default {
                 WxAppSecret:'',
                 WxId:'',
                 H5ReportShareImg:'',
+                SmartReportSheetSize: '12',//智能研报表格字号
+                ReportSheetSize: '12',//研报表格字号
+                EnReportSheetSize: '12',//英文研报表格字号
 
                 UseXf:0,//是否启用科大讯飞服务 0否 1是
                 XfAppid:'',
@@ -387,6 +468,8 @@ export default {
                 EnPptCoverImgs:[],//英文ppt封面列表
                 EnPptBackgroundImg:'',//英文ppt背景图
                 EnPptBottomImg:'',//英文ppt封底图
+                CnPptSheetSize: '12',//中文ppt表格字号
+                EnPptSheetSize: '12',//英文ppt表格字号
 
                 WatermarkReport:false,//研报分享水印
 
@@ -488,6 +571,30 @@ export default {
 
             sectionType:1,//1通用设置 2资源库
 
+            reportFromType: [
+                { type:'smartReport',label: /* '智能研报' */ this.$t('SystemManage.BaseConfig.report_type1') },
+                { type:'report',label: /* '研报列表' */this.$t('SystemManage.BaseConfig.report_type2') },
+                { type:'enReport',label: /* '英文研报' */this.$t('SystemManage.BaseConfig.report_type3') },
+            ],
+            pptSheetTip: /* `设置共享表格、时间序列表格、混合表格插入PPT的表格字号` */this.$t('SystemManage.BaseConfig.ppt_sheet_tip'),
+            ReportSheetTip: /* `设置共享表格、时间序列表格、混合表格插入研报的表格字号` */this.$t('SystemManage.BaseConfig.report_sheet_tip'),
+            sizeOptions: [
+                { label:'5',val:'5' },
+                { label:'6',val:'6' },
+                { label:'7',val:'7' },
+                { label:'8',val:'8' },
+                { label:'9',val:'9' },
+                { label:'10',val:'10' },
+                { label:'11',val:'11' },
+                { label:'12',val:'12' },
+                { label:'13',val:'13' },
+                { label:'14',val:'14' },
+                { label:'15',val:'15' },
+                { label:'16',val:'16' },
+                { label:'17',val:'17' },
+                { label:'18',val:'18' },
+            ]
+
 
         };
     },
@@ -743,6 +850,10 @@ export default {
     // padding:30px;
     border-radius: 4px;
     background-color: #fff;
+    .scroll-cont {
+        height: calc(100vh - 310px);
+        overflow-y: auto;
+    }
     .nav-type-box{
         display: flex;
         align-items: center;
@@ -818,6 +929,11 @@ export default {
                 }
             }
         }
+        .flex-wrap {
+            display: flex;
+            flex-wrap: wrap;
+            gap: 10px;
+        }
     }
 }
-</style>
+</style>

+ 76 - 71
src/views/transferPage.vue

@@ -1,97 +1,102 @@
 <template>
-    <div></div>
+	<div></div>
 </template>
 
 <script>
 import { departInterence } from '@/api/api.js';
 export default {
-    data() {
-        return {
-            
-        }
-    },
-    created(){
-        this.init()
-        
-    },
-    methods:{
-        async init(){
-            if(this.$route.query.code){
-                const res=await departInterence.useCodeLogin({AuthCode:this.$route.query.code})
-                if(res.Ret===200){
-                    localStorage.setItem('auth', res.Data.Authorization)
-					localStorage.setItem('userName', res.Data.RealName)
-					localStorage.setItem('Role', res.Data.RoleTypeCode)
-					localStorage.setItem('RoleIdentity', res.Data.SysRoleTypeCode)
-					localStorage.setItem('RoleType', res.Data.ProductName)
-					localStorage.setItem('ManageType', res.Data.Authority)
-					localStorage.setItem('AdminId', res.Data.AdminId)
-                    localStorage.setItem('AdminName',res.Data.AdminName)
+	data() {
+		return {
 
-                    // 如果路由参数有redirect_uri则跳转到redirect_uri,redirect_uri通过encode
-                    if(this.$route.query.redirect_uri){
-                        const path=decodeURIComponent(this.$route.query.redirect_uri)
-                        this.$router.push(path)
-                        return
-                    }
-					let path = "";
-					switch (res.Data.RoleTypeCode) {
-						case "rai_researcher":
-						case "ficc_researcher":
-						case "researcher":
-						path = "/reportlist";
-						break;
-						// case "compliance": //合规
-						// path = "/contractapprovallist";
-						// break;
-						case "special_researcher": //特邀研究员
-						path = "/dataList";
-						break;
-						// case "special_ficc_seller":
-						// path = "/meetingCalendar";
-						// break;
-						default:
-						path = await this.getOtherRolePath("myCalendar");
-					}
-					this.$router.push({ path });
-                    return
-                }
-            }
+		}
+	},
+	created() {
+		this.init()
+
+	},
+	methods: {
+		async init() {
+			if (Object.keys(this.$route.query).length <= 0) {
+				this.$router.replace('/login')
+				return
+			}
+			// debugger;
+
+			const res = await departInterence.useCodeLogin(this.$route.query)
+			// console.log(res);
+			// debugger;
+			if (res.Ret !== 200) {
+				this.$router.replace('/login?HZ=1')
+				return
+			}
 
-            this.$router.replace('/login')
-        },
-        getOtherRolePath(pathVal){
+			localStorage.setItem('auth', res.Data.Authorization)
+			localStorage.setItem('userName', res.Data.RealName)
+			localStorage.setItem('Role', res.Data.RoleTypeCode)
+			localStorage.setItem('RoleIdentity', res.Data.SysRoleTypeCode)
+			localStorage.setItem('RoleType', res.Data.ProductName)
+			localStorage.setItem('ManageType', res.Data.Authority)
+			localStorage.setItem('AdminId', res.Data.AdminId)
+			localStorage.setItem('AdminName', res.Data.AdminName)
+			// 如果路由参数有redirect_uri则跳转到redirect_uri,redirect_uri通过encode
+			if (this.$route.query.redirect_uri) {
+				const path = decodeURIComponent(this.$route.query.redirect_uri)
+				this.$router.push(path)
+				return
+			}
+
+			let path = "";
+			switch (res.Data.RoleTypeCode) {
+				case "rai_researcher":
+				case "ficc_researcher":
+				case "researcher":
+					path = "/reportlist";
+					break;
+				// case "compliance": //合规
+				// path = "/contractapprovallist";
+				// break;
+				case "special_researcher": //特邀研究员
+					path = "/dataList";
+					break;
+				// case "special_ficc_seller":
+				// path = "/meetingCalendar";
+				// break;
+				default:
+					path = await this.getOtherRolePath("myCalendar");
+			}
+
+			this.$router.push({ path });
+		},
+		getOtherRolePath(pathVal) {
 			return departInterence.getMenu().then(res => {
-				let resolvePath=''
-				if(res.Ret === 200) {
-					let menuList = res.Data.List||[];
-					if(!menuList.length){
+				let resolvePath = ''
+				if (res.Ret === 200) {
+					let menuList = res.Data.List || [];
+					if (!menuList.length) {
 						this.$message.error('该账号没有任何菜单权限,请联系管理员')
 						return
 					}
 					// 是否已经拿到菜单信息
-					sessionStorage.setItem('hasGetMenu','true')
-					sessionStorage.setItem('MenuList',JSON.stringify(menuList));
+					sessionStorage.setItem('hasGetMenu', 'true')
+					sessionStorage.setItem('MenuList', JSON.stringify(menuList));
 					/* 是否有数据报表权限 */
-					this.$store.commit('SET_DATA_AUTH',menuList.some(item => item.name === '报表统计'))
+					this.$store.commit('SET_DATA_AUTH', menuList.some(item => item.name === '报表统计'))
 
 					for (let i = 0; i < menuList.length; i++) {
 						const element = menuList[i];
-						const arr=menuList[i].children||[]
-						if(arr.some(it => it.path == pathVal)){
-							resolvePath='/'+pathVal
+						const arr = menuList[i].children || []
+						if (arr.some(it => it.path == pathVal)) {
+							resolvePath = '/' + pathVal
 							break
 						}
 					}
-					return resolvePath || '/'+menuList[0].children[0].path
+					return resolvePath || '/' + menuList[0].children[0].path
 				}
-				return '/'+pathVal
+				return '/' + pathVal
 			})
 		}
-    }
+	}
 }
 </script>
 
-<style>
-
-</style>
+<style></style>

+ 2 - 1
src/vuex/index.js

@@ -7,7 +7,6 @@ import edb from "./modules/edb";
 import permissionButton from "./modules/permissionButton";
 import sheet from "./modules/sheet";
 
-
 // 应用初始状态
 const state = {
   theme: "#409EFF",
@@ -28,10 +27,12 @@ const state = {
   breadSelfName: '',//面包屑自定义当前页面name
 
   dynamicOutLinks:{},//外部动态链接配置 iframe链接 研报详情分享link
+  publicConfigs:{},// 公共配置
   // 是否执行过页面监听
   hasDoPageListening:false,
   // 是否有 试用用户行为权限
   hasTrialUserPermisson:false,
+  permissionRoute:[], //用于需要验证是否有某个菜单的权限
 };
 
 export default {

+ 16 - 0
src/vuex/mutations.js

@@ -60,6 +60,22 @@ const mutations = {
   //设置商家code
   SET_BUSINESS_CODE(state,code) {
     state.businessCode = code || ""
+  },
+  //设置公共配置
+  SET_PUBLIC_CONFIG(state,obj) {
+    let filterObj = {};
+    obj.forEach(item => {
+        if(!filterObj[item.ConfKey]) {
+          filterObj[item.ConfKey] = item.ConfVal;
+        }
+    });
+    localStorage.setItem('publicConfigs',JSON.stringify(filterObj))
+    state.publicConfigs = filterObj; 
+    setting.publicConfigs = state.publicConfigs;
+  },
+  // 添加需要校验且有权限的路由
+  ADD_PERMISSION_ROUTE(state,route){
+    state.permissionRoute.push(route)
   }
 };