浏览代码

合并master

jwyu 7 月之前
父节点
当前提交
11804e6ab7
共有 83 个文件被更改,包括 4897 次插入454 次删除
  1. 284 8
      src/api/modules/thirdBaseApi.js
  2. 二进制
      src/assets/img/eta_base_config/report_logo.png
  3. 二进制
      src/assets/img/set_m/add.png
  4. 二进制
      src/assets/img/set_m/del.png
  5. 二进制
      src/assets/img/set_m/edit.png
  6. 64 0
      src/components/edb/cascader.vue
  7. 9 0
      src/lang/modules/DataSources/En.js
  8. 9 0
      src/lang/modules/DataSources/Zh.js
  9. 16 0
      src/lang/modules/EtaBase/commonLang.js
  10. 4 1
      src/lang/modules/systemManage/BaseConfig.js
  11. 17 1
      src/routes/modules/dataRoutes.js
  12. 1 1
      src/styles/element-ui.scss
  13. 22 0
      src/utils/buttonConfig.js
  14. 4 0
      src/utils/registryComponents.js
  15. 7 4
      src/views/chartRelevance_manage/components/saveEdbToBaseDia.vue
  16. 9 2
      src/views/chartRelevance_manage/crossVarietyAnalysis/components/chartFormSection.vue
  17. 4 3
      src/views/chartRelevance_manage/crossVarietyAnalysis/components/tagRelationDialog.vue
  18. 5 10
      src/views/chartRelevance_manage/relevance/components/multipleIndForm.vue
  19. 22 4
      src/views/dataEntry_manage/addChart.vue
  20. 2 8
      src/views/dataEntry_manage/adjustdata/adjustData.vue
  21. 11 2
      src/views/dataEntry_manage/chartSetting.vue
  22. 6 11
      src/views/dataEntry_manage/codecount/index.vue
  23. 23 2
      src/views/dataEntry_manage/components/sectionalCombination/referenceDateSet.vue
  24. 3 2
      src/views/dataEntry_manage/components/sectionalCombination/sectionalCombinationOption.vue
  25. 1 0
      src/views/dataEntry_manage/components/sectionalCombination/seriesEdit.vue
  26. 2 1
      src/views/dataEntry_manage/dataEntry/components/edbDetail.vue
  27. 72 10
      src/views/dataEntry_manage/dataEntry/index.vue
  28. 9 8
      src/views/dataEntry_manage/databaseComponents/addTargetDiaBase.vue
  29. 5 4
      src/views/dataEntry_manage/databaseComponents/batchComptedDialog.vue
  30. 8 8
      src/views/dataEntry_manage/databaseComponents/batchComputedSave.vue
  31. 11 10
      src/views/dataEntry_manage/databaseComponents/batchComputedV2.vue
  32. 5 4
      src/views/dataEntry_manage/databaseComponents/completeTargetDia.vue
  33. 2 2
      src/views/dataEntry_manage/databaseComponents/computedDialog.vue
  34. 8 8
      src/views/dataEntry_manage/databaseComponents/diffusionIndexDia.vue
  35. 3 3
      src/views/dataEntry_manage/databaseComponents/fittingResidueDia.vue
  36. 8 12
      src/views/dataEntry_manage/databaseComponents/jointTargetDia.vue
  37. 7 6
      src/views/dataEntry_manage/databaseComponents/openDialog.vue
  38. 2 2
      src/views/dataEntry_manage/databaseComponents/operationDialog.vue
  39. 15 13
      src/views/dataEntry_manage/databaseComponents/smoothEdbDialog.vue
  40. 2 0
      src/views/dataEntry_manage/databaseList.vue
  41. 20 3
      src/views/dataEntry_manage/editChart.vue
  42. 5 4
      src/views/dataEntry_manage/mixins/addOreditMixin.js
  43. 1 1
      src/views/dataEntry_manage/mixins/chartPublic.js
  44. 5 10
      src/views/dataEntry_manage/thirdBase/bloombergSource.vue
  45. 44 16
      src/views/dataEntry_manage/thirdBase/components/addIndicsDia.vue
  46. 59 26
      src/views/dataEntry_manage/thirdBase/components/addToBaseDia.vue
  47. 7 1
      src/views/dataEntry_manage/thirdBase/components/batchAddEdbDia.vue
  48. 22 33
      src/views/dataEntry_manage/thirdBase/components/batchAddIndicsDia.vue
  49. 261 0
      src/views/dataEntry_manage/thirdBase/components/batchAddToEdbDialog.vue
  50. 181 0
      src/views/dataEntry_manage/thirdBase/components/batchEditIndexDia.vue
  51. 312 0
      src/views/dataEntry_manage/thirdBase/components/edbDataDetail.vue
  52. 6 4
      src/views/dataEntry_manage/thirdBase/components/highFrequency/addToIndexDatabaseBatch.vue
  53. 4 1
      src/views/dataEntry_manage/thirdBase/components/targetDialog.vue
  54. 1365 0
      src/views/dataEntry_manage/thirdBase/lzzxData.vue
  55. 2 3
      src/views/dataEntry_manage/thirdBase/mixins/leftMixin.js
  56. 8 8
      src/views/dataEntry_manage/thirdBase/ysTargetBase.vue
  57. 1335 0
      src/views/dataEntry_manage/thirdBase/zhuochuangRedStageBase.vue
  58. 3 3
      src/views/datasheet_manage/components/insertDateDia.vue
  59. 4 10
      src/views/datasheet_manage/customAnalysis/components/createTargetForm.vue
  60. 13 11
      src/views/futures_manage/chartEditor.vue
  61. 12 3
      src/views/mychart_manage/components/chartDetailDia.vue
  62. 15 7
      src/views/ppt_manage/mixins/pptMixins.js
  63. 1 1
      src/views/ppt_manage/newVersion/components/TextEditor.vue
  64. 4 0
      src/views/ppt_manage/newVersion/css/format.scss
  65. 58 6
      src/views/ppt_manage/newVersion/utils/tinymceSetting.js
  66. 7 12
      src/views/predictEdb_manage/addPredicEdb.vue
  67. 25 8
      src/views/report_manage/mixins/reportMixin.js
  68. 61 30
      src/views/report_manage/reportEn/reportEditor.vue
  69. 10 5
      src/views/report_manage/reportV2/components/reportBaseInfoDia.vue
  70. 8 8
      src/views/report_manage/reportV2/components/reportEditHeader.vue
  71. 25 8
      src/views/report_manage/reportV2/normalReport/mixins/reportMixin.js
  72. 51 5
      src/views/report_manage/reportV2/normalReport/reportdtl.vue
  73. 17 2
      src/views/report_manage/reportV2/smartReport/components/TextEdit.vue
  74. 2 2
      src/views/report_manage/reportV2/smartReport/editReport.vue
  75. 47 5
      src/views/report_manage/reportV2/smartReport/reportDetail.vue
  76. 71 35
      src/views/report_manage/reportdtl.vue
  77. 21 1
      src/views/sandbox_manage/common/toolConfig.js
  78. 7 5
      src/views/sandbox_manage/sandFlowNew/index.vue
  79. 17 2
      src/views/smartReport/components/TextEdit.vue
  80. 7 4
      src/views/supply_manage/components/createTargetDia.vue
  81. 1 1
      src/views/system_manage/components/addUserDialog.vue
  82. 2 1
      src/views/system_manage/components/smartReportImgSet.vue
  83. 89 19
      src/views/system_manage/etaBaseConfig.vue

+ 284 - 8
src/api/modules/thirdBaseApi.js

@@ -1082,6 +1082,65 @@ const windInterface={
 			return http.get('/datamanage/wind/index',params)
 	}
 }
+/* 数据源-隆众资讯 */
+const lzzxInterface = {
+	/** * 分类列表 */
+	classifyList:params=>{
+		return http.get('/entry/data/oilchem/classify',params)
+	},
+	/**
+	 * 指标列表
+	 * params:  PageSize  ClassifyId  CurrentIndex
+	 */
+	indexList:params=>{
+		return http.get('/entry/data/oilchem/indexList',params)
+	},
+	/**
+	 * 数据列表
+	 * params:  PageSize  CurrentIndex  ClassifyId IndexCode
+	 */
+	dataList:params=>{
+		return http.get('/entry/data/oilchem/data',params)
+	},
+	/**
+	 * 搜索
+	 * params: Keyword
+	 */
+	indexSearch:params=>{
+		return http.get('/entry/data/oilchem/search',params)
+	},
+	/**
+     * 加入指标库检测
+	 * @param {Array} IndexCode  indexCode数组
+     * @returns 
+     */
+    addCheck:params=>{
+        return http.post('/entry/data/oilchem/add_check',params)
+    },
+	/**
+     * 指标重名监测
+	 * @param {Object[]} params
+     * @param {String} params[].EdbCode //指标编码
+     * @param {String} params[].EdbName //指标名称
+     * @returns 
+     */
+    nameCheck:params=>{
+        return http.post('/entry/data/oilchem/name_check',params)
+    },
+	/**
+     * 批量添加到指标库
+	 * @param {Object[]} params 
+     * @param {String} params[].EdbCode
+     * @param {String} params[].EdbName
+     * @param {String} params[].Frequency
+     * @param {String} params[].Unit
+     * @param {Number} params[].ClassifyId
+     * @returns 
+     */
+    batchAdd:params=>{
+        return http.post('/entry/data/oilchem/batch_add',params)
+    },
+}
 
 /* CCF化纤信息 */
 const highFrequencyDataInterface={
@@ -1263,12 +1322,12 @@ export {
 	coalDataInterface,
 	steelInterface,
 	steoInterface,
-  sciDataInterface,
-  baiinfoInterface,
-  nationalInterface,
-  databankInterface,
-  yongyiInterface,
-  fwmtInterface,
+	sciDataInterface,
+	baiinfoInterface,
+	nationalInterface,
+	databankInterface,
+	yongyiInterface,
+	fwmtInterface,
 	guangqiInterface,
 	icpiInterface,
 	zczxInterface,
@@ -1276,5 +1335,222 @@ export {
 	bloombergInterface,
 	ccfDataInterface,
 	windInterface,
-	highFrequencyDataInterface
-}
+	highFrequencyDataInterface,
+	lzzxInterface,
+}
+
+
+/* 卓创红期数据 */
+export const zhuochuangRedStageInterface = {
+
+	/**
+	 * 分类列表
+	 * @param {*} params 
+	 * @returns 
+	 */
+	classifyList: params => {
+		return http.get('/datamanage/sci_hq/classify')
+	},
+
+	/**
+	 * 添加分类
+	 * @param {*ParentId ClassifyName} params 
+	 * @returns 
+	 */
+	classifyAdd: params => {
+		return http.post('/datamanage/sci_hq/classify/add',params)
+	},
+
+	/**
+	 * 编辑分类
+	 * @param {* ClassifyName ClassifyId} params 
+	 * @returns 
+	 */
+	classifyEdit: params => {
+		return http.post('/datamanage/sci_hq/classify/edit',params)
+	},
+
+	/**
+ * 删除分类
+ * @param {*} params ClassifyId
+ * @returns 
+ */
+	classifyDel: params => {
+		return http.post('/datamanage/sci_hq/classify/del',params)
+	},
+
+	/**
+	 * 移动分类
+	 * @param {*} params 
+	 * ClassifyId PrevClassifyId NextClassifyId
+	 ParentId
+		* @returns 
+		*/
+	classifyMove: params => {
+		return http.post('/datamanage/sci_hq/classify/move',params)
+	},
+
+	/**
+	 * 指标懒加载
+	 * @param {*ClassifyId} params 
+	 * @returns 
+	 */
+	edbListForClassify:params=>{
+		return http.get('/datamanage/sci_hq/index/list',params)
+	},
+
+	/**
+	 * 获取指标列表
+	 * @param {*} params  PageSize CurrentIndex IsListAll
+	 * @returns 
+	 */
+	getEdbList: params => {
+		return http.get('/datamanage/sci_hq/index/page/list',params)
+	},
+
+
+	/**
+	 * 数据接口 
+	 * @param {*} params IndexCode
+	 * @returns 
+	 */
+	getEdbData: params => {
+		return http.get('/datamanage/sci_hq/single_data',params)
+	},
+
+	/**
+	 * 编辑指标
+	 * @param {*} params 
+	 * BaseFromSciHqIndexId
+	 * ClassifyId
+	 * @returns 
+	 */
+	edbEdit: params => {
+		return http.post('/datamanage/sci_hq/edit',params)
+	},
+
+	/**
+	 * 指标移动
+	 * @param {*} params 
+	 * BaseFromSciHqIndexId 
+	 * ClassifyId
+	 * PrevBaseFromSciHqIndexId
+	 * NextBaseFromSciHqIndexId
+	 * @returns 
+	 */
+	edbMove: params => {
+		return http.post('/datamanage/sci_hq/move',params)
+	},
+
+	/**
+	 * 清除指标分类
+	 * @param {* BaseFromSciHqIndexId} params 
+	 * @returns 
+	 */
+	clearEdbClassify: params => {
+		return http.post('/datamanage/sci_hq/reset',params)
+	},
+
+	/**
+	 * 指标删除
+	 * @param {*} params BaseFromSciHqIndexId
+	 * @returns 
+	 */
+	edbDel: params => {
+		return http.post('/datamanage/sci_hq/del',params)
+	},
+
+	/**
+	 * 搜索指标
+	 * @param {*} params Keyword
+	 * @returns 
+	 */
+	searchEdb: params => {
+		return http.get('/datamanage/sci_hq/search_list',params)
+	},
+
+	/**
+	 * 搜索批量操作指标
+	 * @param {Object} params 
+	 * @param {int} ClassifyId 目录
+	 * @param {String} Keyword 
+	 * @param {[]} SelectedId 
+	 * @param {[]} IsSelectAll 
+	 * @returns 
+	 */
+	searchEdbBatch:params=>{
+		return http.post('/datamanage/sci_hq/index/batch_list',params)
+	},
+
+	/**
+	 * 重名检测
+	 * @param {[]} params 
+	 * @param {String} EdbCode
+	 * @param {String} EdbName
+	 * @returns 
+	 */
+	batchCheckEdbName:params=>{
+		return http.post('/datamanage/sci_hq/edb_info/name_check',params)
+	},
+
+	/**
+	 * 添加检测
+	 * @param {} params 
+	 * @param {[]} IndexCodes  指标IDs
+	 * @returns 
+	 */
+	batchAddEdbCheck:params=>{
+		return http.post('/datamanage/sci_hq/edb_info/add_check',params)
+	},
+
+	/**
+	 * 批量添加到指标库
+	 * @param {[]} params
+	 * @param {String} params[].EdbCode
+	 * @param {String} params[].EdbName
+	 * @param {String} params[].Unit
+	 * @param {Number} params[].ClassifyId 指标库的id
+	 * @param {String} params[].Frequency
+	 * @returns 
+	 */
+	batchAddToLib:params=>{
+		return http.post('/datamanage/sci_hq/edb_info/batch_add',params)
+	},
+
+	/**
+	 * 单个添加到指标库
+	 * @param {Object} params 
+	 * @param {String} params.EdbCode
+	 * @param {String} params.EdbName
+	 * @param {String} params.Unit
+	 * @param {String} params.Frequency
+	 * @param {Number} params.ClassifyId
+	 * @returns 
+	 */
+	addToLib:params=>{
+		return http.post('/datamanage/sci_hq/edb_info/add',params)
+	},
+
+	/**
+	 * 批量删除指标
+	 * @param {*} params
+    [{
+        "BaseFromSciHqIndexId":7
+		}]
+	 * @returns 
+	 */
+	batchDelEdb: params => {
+		return http.post('/datamanage/sci_hq/edb_info/batch_delete',params)
+	},
+
+	/**
+	 * 批量编辑指标分类
+	 * @param {* [
+	 * 	 {"BaseFromSciHqIndexId": 5,"ClassifyId":3}
+	 * 	]} params
+	 * @returns 
+	 */
+	batchEditEdb: params => {
+		return http.post('/datamanage/sci_hq/edb_info/batch_edit',params)
+	}
+}

二进制
src/assets/img/eta_base_config/report_logo.png


二进制
src/assets/img/set_m/add.png


二进制
src/assets/img/set_m/del.png


二进制
src/assets/img/set_m/edit.png


+ 64 - 0
src/components/edb/cascader.vue

@@ -0,0 +1,64 @@
+<template>
+  <div class="cascader">
+    <el-cascader
+      @focus="onFocus"
+      :key="currentLang"
+      v-bind="$attrs"
+      :style="cascaderWidth"
+      v-model="cascaderValue"
+      :props="{
+        label: currentLang === 'zh' ? 'ClassifyName' : 'ClassifyNameEn',
+        value: 'ClassifyId',
+        children: 'Children',
+        ...config,
+      }"
+      @change="onChange"
+    />
+  </div>
+</template>
+
+<script>
+export default {
+  model: {
+    prop: "cascaderValue",
+    event: "changeVal",
+  },
+  props: {
+    // cascader宽度
+    cascaderWidth: {
+      type: String,
+      default: "",
+    },
+    // prop其他配置项
+    config: {
+      type: Object,
+      default: () => {},
+    },
+    // 选中值
+    cascaderValue: {
+      type: Array,
+      default: () => [],
+    },
+  },
+  computed: {
+    currentLang() {
+      return this.$store.state.lang;
+    },
+  },
+  data() {
+    return {};
+  },
+  methods: {
+    // 改变值
+    onChange(val) {
+      this.$emit("changeVal", val);
+    },
+    // 获取焦点
+    onFocus() {
+      this.$emit("onFocus");
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 9 - 0
src/lang/modules/DataSources/En.js

@@ -292,6 +292,15 @@ export default {
     previous:'Previous',
     blank:'Blank',
 
+  },
+
+  /* 卓创数据红期 */
+  SciHongqiPage: {
+    btn_batch_del: 'Bulk Delete',
+    btn_batch_edit: 'Bulk Edit',
+    handle_clear: 'Remove',
+    del_msg: 'Once deleted, the metrics cannot be recovered. Are you sure you want to delete the following metrics?',
+    total_msg: 'Total {limit} indicators'
   }
   
 }

+ 9 - 0
src/lang/modules/DataSources/Zh.js

@@ -295,5 +295,14 @@ export default {
     original:'不处理',
     previous:'沿用之前数据',
     blank:'空值',
+  },
+
+   /* 卓创数据红期 */
+  SciHongqiPage: {
+    btn_batch_del: '批量删除',
+    btn_batch_edit: '批量编辑',
+    handle_clear: '移除',
+    del_msg: '删除后不可恢复,是否确认删除以下指标?',
+    total_msg: '共{limit}个指标'
   }
 }

+ 16 - 0
src/lang/modules/EtaBase/commonLang.js

@@ -300,6 +300,18 @@ export default {
       zh:'计算方式',
       en:'Calculation Method'
     },
+    batch_add_edb:{
+      zh:'批量加入指标库',
+      en:'Batch Add to Indicator Library'
+    },
+    edb_detail:{
+      zh:'指标详情',
+      en:'Indicator Details'
+    },
+    e_update_data: {
+      zh:'更新数据',
+      en:'Update Data'
+    },
   },
 
   /* 单位 */
@@ -736,6 +748,10 @@ export default {
       zh: '请选择频度',
       en: 'Please input frequency'
     },
+    select_fre: {
+      zh: '请选择频度',
+      en: 'Please select frequency'
+    },
     input_n_val: {
       zh: '请输入N值',
       en: 'Please input N value'

+ 4 - 1
src/lang/modules/systemManage/BaseConfig.js

@@ -102,6 +102,7 @@ export const BaseConfigEn = {
     mobile_website_title_Tip:"Please enter the mobile website name",
     system_logo:"System Logo",
     upload_image_tip:"Click to Upload Image",
+    report_logo:'Report Logo'
     
 };
   
@@ -140,7 +141,7 @@ export const BaseConfigZh = {
     wx_original_tips:'注:关联公众号填写时,AppID、AppSecret原始ID均需填写。',
     report_sheet_size:'研报表格字体',
     report_type1:'智能研报',
-    report_type2:'研报列表',
+    report_type2:'研报中心',
     report_type3:'英文研报',
     report_sheet_tip: '设置共享表格、时间序列表格、混合表格插入研报的表格字号',
 
@@ -207,6 +208,8 @@ export const BaseConfigZh = {
     mobile_website_title_Tip:"请输入移动端网站名称",
     system_logo:"系统logo",
     upload_image_tip:"点击上传图片",
+
+    report_logo:'研报Logo'
 };
   
 /**

+ 17 - 1
src/routes/modules/dataRoutes.js

@@ -264,7 +264,7 @@ export default [
         name: "卓创数据(红桃3)",
         hidden: false,
         meta:{
-            name_en:"SCI"
+            name_en:"SCI(hongtao3)"
         }
       },
       {
@@ -392,6 +392,22 @@ export default [
           name_en:'High Frequency Data'
         }
       },
+      {
+        path: "zchqDataBase",
+        component: () => import("@/views/dataEntry_manage/thirdBase/zhuochuangRedStageBase.vue"),
+        name: "卓创红期",
+        meta:{
+          name_en:'SCI(hongqi)'
+        }
+      },
+      {
+        path: "lzzxData",
+        component: () => import("@/views/dataEntry_manage/thirdBase/lzzxData.vue"),
+        name: "隆众资讯",
+        meta:{
+          name_en:'Oilchem'
+        }
+      },
     ],
   },
 ];

+ 1 - 1
src/styles/element-ui.scss

@@ -23,7 +23,7 @@ $--font-path: '~element-ui/lib/theme-chalk/fonts';
 .el-submenu .el-menu-item{ padding:0 70px 0 45px !important; }
 .menu-collapsed .el-submenu .el-menu-item{ padding:0 85px 0 30px !important; }
 .box-card{ margin-bottom:20px !important; padding-bottom:30px; }
-.el-dialog .el-input{ width:60%; }
+.el-dialog .el-input{ width:100%; }
 .el-dialog .el-select>.el-input{ width:100%; }
 .el-dialog .el-dialog__headerbtn{ font-size:24px; padding:10px; top:3px; right:10px; }  // 右上角X
 .el-dialog .el-dialog__header{ background:$color-primary; color:#fff; padding:15px 0 15px 25px; text-align:left; }

+ 22 - 0
src/utils/buttonConfig.js

@@ -302,6 +302,26 @@ export const dataSourcePermission = {
     highFrequency_classify_move:'highFrequency:classify:move',//分类设置-移动
     highFrequency_classify_delete:'highFrequency:classify:delete',//分类设置-删除
     highFrequency_classify_editAdd:'highFrequency:classify:editAdd',//分类设置-编辑/添加
+
+    /* 卓创红期 */
+    sciHongqi_batch_addBase: 'sciHongqi:batch:addBase',//批量添加到指标库
+    sciHongqi_batch_del: 'sciHongqi:batch:del',//批量删除
+    sciHongqi_batch_edit: 'sciHongqi:batch:edit',//批量编辑
+    sciHongqi_view: 'sciHongqi:view',//查看
+    sciHongqi_export: 'sciHongqi:export',//导出Excel
+    sciHongqi_classify_edit: 'sciHongqi:classify:edit',//分类编辑
+    sciHongqi_classify_add: 'sciHongqi:classify:add',//分类添加
+    sciHongqi_classify_move: 'sciHongqi:classify:move',//分类移动
+    sciHongqi_classify_del: 'sciHongqi:classify:del',//分类删除
+    sciHongqi_opera_addBase: 'sciHongqi:opera:addBase',//指标入库
+    sciHongqi_opera_del: 'sciHongqi:opera:del',//指标删除
+    sciHongqi_opera_clear: 'sciHongqi:opera:clear',//指标清除
+    sciHongqi_opera_edit: 'sciHongqi:opera:edit',//指标编辑
+    /*--------隆众资讯--- */
+    lzzxData_view:'lzzxData:view',//查看数据
+    lzzxData_addEdb:'lzzxData:addEdb',//加入指标库
+    lzzxData_batchAddEdb:'lzzxData:batchAddEdb',//批量加入指标
+    lzzxData_exportExcel:'lzzxData:exportExcel',//导出excel
 }
 
 /*
@@ -722,6 +742,7 @@ export const sysDepartPermission = {
     sysDepart_enable:'sysDepart:enable',//启用禁用
     sysDepart_del:'sysDepart:del',//用户删除
     sysDepart_saveUser_researchGroup:'sysDepart:saveUser:researchGroup',//添加/编辑用户表单中,研究方向的按钮
+    sysDepart_userType:'sysDepart:userType',//添加/编辑用户表单中,用户类型按钮
     sysDepart_saveUser_LabelVal:'sysDepart:saveUser:LabelVal',//姓名角色的标签
     sysDepart_classifyOpt_edit:'sysDepart:classifyOpt:edit',//添加/编辑部门
     sysDepart_classifyOpt_delete:'sysDepart:classifyOpt:delete',//删除部门
@@ -799,6 +820,7 @@ export const baseConfigPermission = {
     etaBaseConfig_login_websiteName_pc:'baseSetting:loginSetting:websiteName:pc',//网站名称移动端
     etaBaseConfig_source_edit:'baseSetting:sourceSetting:edit',//资源库编辑
     etaBaseConfig_source_del:'baseSetting:sourceSetting:del',//资源库删除
+    etaBaseConfig_watermark_ybEnShare:'etaBaseConfig:watermark:ybEnShare',//英文研报抬头
 }
 
 /*-----------外部链接配置-------- */

+ 4 - 0
src/utils/registryComponents.js

@@ -50,3 +50,7 @@ Vue.component('chartListTableWrap',chartListTableWrap)
 // 选择图表类型
 import chartTypeSelect from '@/components/chart/chartTypeSelect.vue'
 Vue.component('chartTypeSelect',chartTypeSelect)
+
+// 级联选择器多语言展示
+import cascader from '@/components/edb/cascader.vue';
+Vue.component('cascader',cascader)

+ 7 - 4
src/views/chartRelevance_manage/components/saveEdbToBaseDia.vue

@@ -25,13 +25,16 @@
 						:placeholder="$t('Table.edb_name')"></el-input>
 					</el-form-item>
 					<el-form-item :label="$t('Edb.Detail.select_catalogue')" prop="menu">
-						<el-cascader
+						<cascader
 						v-model="formData.menu"
 						:options="options"
-						:props="levelProps"
-						style="width: 80%"
 						clearable
-						:placeholder="$t('CustomAnalysisPage.select_appropriate_category')"/>
+						cascaderWidth="width:80%"
+						:placeholder="
+							$t('CustomAnalysisPage.select_appropriate_category')
+						"
+						:config="{ emitPath: false, checkStrictly: true }"
+						/>
 					</el-form-item>
 					<el-form-item :label="$t('Table.frequency')" prop="frequency">
 						<span slot="label">{{$t('Table.frequency')}}</span>

+ 9 - 2
src/views/chartRelevance_manage/crossVarietyAnalysis/components/chartFormSection.vue

@@ -62,7 +62,7 @@
           <el-option
             v-for="item in tagList"
             :key="item.ChartTagId"
-            :label="item.ChartTagName"
+            :label="item[langObj[currentLang]]"
             :value="item.ChartTagId"
             :disabled="item.ChartTagId===form.TagY"
           />
@@ -78,7 +78,7 @@
           <el-option
             v-for="item in tagList"
             :key="item.ChartTagId"
-            :label="item.ChartTagName"
+            :label="item[langObj[currentLang]]"
             :value="item.ChartTagId"
             :disabled="item.ChartTagId===form.TagX"
           />
@@ -166,6 +166,9 @@ export default {
     }
   },
   computed:{
+    currentLang() {
+      return this.$store.state.lang;
+    },
     unitOpt(){
       return [
           {label:this.$t('Edb.FreAll.year_min'),val:'年'},
@@ -204,6 +207,10 @@ export default {
   },
   data() {
     return {
+      langObj:{
+        'zh':'ChartTagName',
+        'en':'ChartTagNameEn'
+      },
       form: {
         ChartName:'',
         Source: 10,

+ 4 - 3
src/views/chartRelevance_manage/crossVarietyAnalysis/components/tagRelationDialog.vue

@@ -17,7 +17,7 @@
 
           <selectTarget
             :defaultId="item.edbInfoId"
-            :defaultOpt="searchOptions"
+            :defaultOpt="item.edbInfoId?searchOptions:[]"
             @select="e => selectTargetHandle(e,item)"  
             :filter="false"
             style="max-width: 200px;"
@@ -118,8 +118,9 @@ export default {
 
       this.searchOptions = this.list.map(_ => ({
         EdbName: _.edbName,
-        EdbInfoId: _.edbInfoId
-      }))
+        EdbInfoId: _.edbInfoId,
+        HaveOperaAuth:true
+      })).filter(_ =>_.EdbInfoId)
     },
 
     /* 保存`` */

+ 5 - 10
src/views/chartRelevance_manage/relevance/components/multipleIndForm.vue

@@ -105,19 +105,14 @@
                 </div>
                 <!-- 表格筛选项 -->
                 <div class="table-select-box">
-                    <el-cascader
+                    <cascader
                         v-model="tableSelectParams.classify"
                         :options="classifyOpt"
-                        :props="{
-                            label: 'ClassifyName',
-                            value: 'ClassifyId',
-                            children: 'Children',
-                            multiple: true,
-                            emitPath:false
-                        }"
-                        clearable collapse-tags
+                        clearable
+                        collapse-tags
                         :placeholder="$t('EtaBasePage.label_classify')"
-                        @change="handleFilter"
+                        @changeVal="handleFilter"
+                        :config="{ multiple: true, emitPath: false }"
                     />
                     <el-select
                         v-model="tableSelectParams.frequency"

+ 22 - 4
src/views/dataEntry_manage/addChart.vue

@@ -102,14 +102,31 @@
 						/>
 					</el-form-item>
 					<el-form-item :label="$t('Chart.Detail.chart_classify')" prop="classify">
-						<el-cascader
+						<cascader
 							v-model="chartInfo.classify"
 							:options="classifyOptions"
 							:props="levelProps"
-							style="width: 90%"
+							cascaderWidth="width: 90%"
 							:placeholder="$t('Chart.InputHolderAll.input_classify')"
+							:config="{ label: currentLang === 'zh' ? 'ChartClassifyName' : 'ChartClassifyNameEn',value: 'ChartClassifyId'}"
 						/>
 					</el-form-item>
+					<!-- 图表别名 英文文案还没给-->
+					<el-form-item label="图表别名" prop="ChartAlias" v-if="[1,5,6].includes(chartInfo.ChartType)">
+						<el-input
+							v-model="chartInfo.ChartAlias"
+							style="width: 90%"
+							placeholder="请输入图表别名"
+							clearable
+						/>
+						<el-tooltip effect="dark" placement="right">
+							<div
+								slot="content"
+								style="line-height: 20px;width:300px"
+								>设置图表别名,默认PPT中插入该图表时显示,若无设置,则PPT中不显示该图表名称。</div>
+							<i class="el-icon-question" style="color: #666" />
+						</el-tooltip>
+					</el-form-item>
 					<el-form-item :label="$t('Chart.Detail.chart_unit')" prop="Unit" v-if="[7,11].includes(chartInfo.ChartType)">
 						<el-select
 							v-model="chartInfo.Unit"
@@ -881,7 +898,7 @@ export default {
 					}
 					
 
-					const { ChartType,ChartName,ChartThemeId,SourcesFrom,Instructions,MarkersLines,MarkersAreas,ChartThemeStyle } = this.chartInfo;
+					const { ChartType,ChartName,ChartThemeId,SourcesFrom,Instructions,MarkersLines,MarkersAreas,ChartThemeStyle,ChartAlias } = this.chartInfo;
 					let public_param = {
 						ChartClassifyId: this.chartInfo.classify.length ? this.chartInfo.classify[this.chartInfo.classify.length - 1] : 0,
 						ChartEdbInfoList: db_arr,
@@ -892,7 +909,8 @@ export default {
 						Instructions,
 						MarkersLines,
 						MarkersAreas,
-						ChartThemeStyle
+						ChartThemeStyle,
+						ChartAlias,//别名
 					}
 
 					//提交参数

+ 2 - 8
src/views/dataEntry_manage/adjustdata/adjustData.vue

@@ -86,18 +86,12 @@
 						/>
           </el-form-item>
           <el-form-item :label="$t('Edb.Detail.e_menu')" prop="menu">
-            <el-cascader
+            <cascader
               v-model="formData.menu"
               :options="classifyOptions"
-              :props="{
-                label: 'ClassifyName',
-                value: 'ClassifyId',
-                children: 'Children',
-                emitPath: false,
-                checkStrictly: true
-              }"
               clearable
               :placeholder="$t('Edb.InputHolderAll.input_menu')"
+              :config="{ emitPath: false, checkStrictly: true }"
             />
           </el-form-item>
           <el-form-item :label="$t('Edb.Detail.e_fre')" prop="frequency">

+ 11 - 2
src/views/dataEntry_manage/chartSetting.vue

@@ -1885,8 +1885,17 @@ export default {
 
       const { EdbInfoList } = res.Data;
       
-      //更新表格数据
-      this.tableData = _.cloneDeep(EdbInfoList);
+      this.tableData.forEach((item) => {
+        //只更新数据和显性字段
+        let edbData = EdbInfoList.find(_ => _.EdbInfoId===item.EdbInfoId);
+        item.DataList = edbData.DataList;
+        
+        item.StartDate = edbData.StartDate;
+        item.ModifyTime = edbData.ModifyTime;
+        item.MoveLatestDate = edbData.MoveLatestDate;
+        item.LatestDate = edbData.LatestDate;
+        item.LatestValue = edbData.LatestValue;
+      });
     },
 
     /* 搜索 */

+ 6 - 11
src/views/dataEntry_manage/codecount/index.vue

@@ -67,20 +67,15 @@
 								</el-select>
 							</el-form-item>
 							<el-form-item :label="$t('Edb.Detail.e_menu')" prop="menu">
-								<el-cascader
+								<cascader
 								v-model="formData.menu"
 								:options="menuOptions"
-								:props="{
-									label: 'ClassifyName',
-									value: 'ClassifyId',
-									children: 'Children',
-									checkStrictly: true,
-									emitPath: false,
-								}"
-								@change="menuChange"
+								@changeVal="menuChange"
 								clearable
-								style="width:220px"
-								:placeholder="$t('Edb.InputHolderAll.input_menu')"/>
+								:placeholder="$t('Edb.InputHolderAll.input_menu')"
+								cascaderWidth="width:220px"
+								:config="{ checkStrictly: true, emitPath: false }"
+								/>
 							</el-form-item>
 						</el-form>
 					</el-tab-pane>

+ 23 - 2
src/views/dataEntry_manage/components/sectionalCombination/referenceDateSet.vue

@@ -71,7 +71,20 @@
           <el-radio v-model="item.dateType" :label="1" @input="handleSelectSystemDate($event,index)">{{$t('ETableChildren.system_date_rai')}}</el-radio>
           <span>{{ today }}</span>
         </div>
-        <div>
+        <!-- 固定日期 -->
+        <div class="date-type-box">
+          <el-radio v-model="item.dateType" :label="2">{{$t('Chart.option_date_type_fix')}}</el-radio>
+          <el-date-picker
+            v-model="item.staticDate"
+            type="date"
+            format="yyyy-MM-dd"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择日期"
+            @change="handleSelectStaticDate(index)"
+            style="width:200px"
+          />
+        </div>
+        <div v-if="item.dateType!==2">
           <dateTrans v-model="item.dateTransfData" />
         </div>
       </div>
@@ -122,11 +135,12 @@ export default {
         } else {
           this.list = [{
             name: '',
-            dateType: 0,//0指标最新日期 1系统日期
+            dateType: 0,//0指标最新日期 1系统日期 2固定日期
             edbType:0,
             selectEdbData: null,
             MoveForward: 0,//期数前移
             dateTransfData: [],//日期变换数据
+            staticDate:'',//固定日期
           }]
         }
       }
@@ -148,6 +162,7 @@ export default {
           selectEdbData: null,
           MoveForward: 0,//期数前移
           dateTransfData: [],//日期变换数据
+          staticDate:'',//固定日期
         }
       ]
     }
@@ -169,6 +184,11 @@ export default {
         this.list[index].name=this.today
       }
     },
+    handleSelectStaticDate(index){
+      if(!this.list[index].name){
+        this.list[index].name=this.list[index].staticDate
+      }
+    },
 
     handleEdbTypeChange(e,index){
       console.log('指标类型变化',e);
@@ -216,6 +236,7 @@ export default {
         selectEdbData: null,
         MoveForward: 0,//期数前移
         dateTransfData: [],//日期变换数据
+        staticDate:'',//固定日期
       })
     }
   },

+ 3 - 2
src/views/dataEntry_manage/components/sectionalCombination/sectionalCombinationOption.vue

@@ -12,7 +12,7 @@
             <i class="el-icon-info"></i>
           </span>
         </el-tooltip>
-        <el-radio-group v-model="sortType" style="margin-left: 20px" @change="handleGetChartData">
+        <el-radio-group v-model="sortType" style="margin-left: 20px" @change="handleGetChartData('sortType')">
           <el-radio :label="0">{{$t('EtaBasePage.default_select_text')}}</el-radio>
           <el-radio :label="1">{{$t('EtaChartAddPage.option_sort_up')}}</el-radio>
           <el-radio :label="2">{{$t('EtaChartAddPage.option_sort_low')}}</el-radio>
@@ -306,6 +306,7 @@ export default {
             }:null,
             MoveForward: item.MoveForward||0,//期数前移
             dateTransfData: item.DateChange||[],//日期变换数据
+            staticDate:item.StaticDate
           }
         })
 
@@ -317,7 +318,7 @@ export default {
     // 获取图表数据
     handleGetChartData(type){
       const data=_.cloneDeep(this.$data)
-      if(type==='sortBasisEdb'){
+      if(['sortBasisEdb','sortType'].includes(type)){
         data.XDataList=[]
       }
       this.$emit('getData',data)

+ 1 - 0
src/views/dataEntry_manage/components/sectionalCombination/seriesEdit.vue

@@ -91,6 +91,7 @@ export default {
         if (this.defaultData && this.defaultData.length > 0) {
           this.initData()
         } else {
+          this.activeIndex=0
           this.list = [
             {
               seriesName: '',

+ 2 - 1
src/views/dataEntry_manage/dataEntry/components/edbDetail.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="edb-detail-data-wrap">
     <div class="handle-list">
-      <span class="editsty" @click="$emit('handle',{item:edbInfo.Detail,type:'edit'})" v-if="hasEditAuth"><!-- 编辑 -->{{$t('Table.edit_btn')}}</span>
+      <span class="editsty" @click="$emit('handle',{item:edbInfo.Detail,type:'edit',from:2})" v-if="hasEditAuth"><!-- 编辑 -->{{$t('Table.edit_btn')}}</span>
 
       <span class="editsty" @click="$emit('handle',{item:edbInfo.Detail,type:'addToBase'})" v-if="edbInfo.Detail&&edbInfo.Detail.IsJoinEdb===0&&permissionBtn.isShowBtn('dataSourcePermission','manualDataWrite_add')"><!-- 加入指标库 -->{{$t('ManualEntryPage.add_tobase')}}</span>
 
@@ -583,6 +583,7 @@ export default {
               outline: 0;
               border: 2px solid #0033ff;
               box-shadow: 0 0 5px rgba(73, 177, 249, 0.5);
+              pointer-events:none;
             }
             .value-style{
               padding:5px;

+ 72 - 10
src/views/dataEntry_manage/dataEntry/index.vue

@@ -26,6 +26,21 @@
           type="primary" 
           @click="$router.push({path: '/batchDelList' })"
         ><!-- 批量删除 -->{{$t('ManualEntryPage.batch_del')}}</el-button>
+        <el-select
+          @change="changeFrequency"
+          v-model="frequencySelect"
+          :placeholder="$t('Edb.InputHolderAll.select_fre')"
+          style="width: 240px;margin-left: 10px"
+          clearable
+        >
+          <el-option
+            v-for="item in frequencyArr"
+            :key="item.label"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
       </div>
 
       <div class="right-wrap">
@@ -133,7 +148,7 @@
               >
                 <template slot-scope="{row}">
                   <div>
-                    <span class="editsty" @click="handleEdb({item:row,type:'edit'})"  v-if="permissionBtn.isShowBtn('dataSourcePermission','manualDataWrite_edit')">{{$t('Table.edit_btn')}}</span>
+                    <span class="editsty" @click="handleEdb({item:row,type:'edit',from:1})"  v-if="permissionBtn.isShowBtn('dataSourcePermission','manualDataWrite_edit')">{{$t('Table.edit_btn')}}</span>
 
                     <span v-if="row.IsJoinEdb===0&&permissionBtn.isShowBtn('dataSourcePermission','manualDataWrite_add')" class="editsty" @click="handleEdb({item:row,type:'addToBase'})"><!-- 加入指标库 -->{{$t('ManualEntryPage.add_tobase')}}</span>
 
@@ -202,6 +217,7 @@ import edbDetail from './components/edbDetail.vue'
 import operateLogsDia from './components/operateLogsDia.vue';
 import insertData from '../components/insertData.vue';
 import completeTargetDia from '../databaseComponents/completeTargetDia.vue';
+import { frequencySelectList } from '@/utils/defaultOptions';
 export default {
   components: { 
     mPage,
@@ -232,6 +248,9 @@ export default {
       }&StartDate=&EndDate=&Mobile=&${localStorage.getItem("auth")}`;
       return str.replace(/#/g, encodeURIComponent("#")).replace(/;/g, encodeURIComponent(";"));
     },
+    frequencyArr(){
+        return frequencySelectList(['月度'])
+    }
   },
   watch: {
     search_txt(nval) {
@@ -245,6 +264,8 @@ export default {
   },
   data() {
     return {
+      tableSearch:{},
+      frequencySelect:'',
       defaultProp: {
         label: 'ClassifyName',
         children: 'Child',
@@ -284,9 +305,43 @@ export default {
   },
   mounted(){
     this.getClassify();
-    this.getTableData()
+    if(sessionStorage.getItem('cacheDataList')){
+      this.cacheDataList()
+    }else{
+      this.getTableData()
+    }
   },
   methods:{
+    // 缓存列表页面
+    cacheDataList(){
+      const cacheData=JSON.parse(sessionStorage.getItem('cacheDataList'))
+      console.log(cacheData)
+      if(cacheData.editType===1){
+        // 列表进入编辑
+        const dataArr=[
+          {key:'ClassifyId',value:'selectClassifyId'},
+          {key:'CurrentIndex',value:'pageNo'},
+          {key:'PageSize',value:'pageSize'},
+          {key:'Frequency',value:'frequencySelect'},
+          {key:'total',value:'total'}
+        ]
+        dataArr.forEach(el=>{
+          this[el.value]=cacheData.tableSearch[el.key]
+        })
+        this.getTableData()
+      }else{
+        // 详情进入编辑
+        this.selectedEdb = cacheData.id;
+        this.searchHandle(cacheData.id)
+      }
+      sessionStorage.removeItem('cacheDataList')
+    },
+    // 改变频度
+    changeFrequency(){
+      this.selectedEdb=''
+      this.pageNo = 1;
+      this.getTableData()
+    },
     lookDetailHandle(row) {
       this.selectClassifyId = 0;
 			this.selectNode = '';
@@ -328,12 +383,13 @@ export default {
     },
 
     async getTableData() {
-      const res = await dataInterence.getEdbListV2({
+      this.tableSearch={
         ClassifyId: this.selectClassifyId,
         CurrentIndex: this.pageNo,
-        PageSize: this.pageSize
-      })
-
+        PageSize: this.pageSize,
+        Frequency:this.frequencySelect
+      }
+      const res = await dataInterence.getEdbListV2(this.tableSearch)
       if(res.Ret !==200) return 
       this.tableData = res.Data.List || [];
       this.total = res.Data.Paging.Totals;
@@ -396,7 +452,7 @@ export default {
     },
 
     /* 操作 */
-    handleEdb({item,type}) {
+    handleEdb({item,type,from}) {
       const typeMap = {
         'edit': this.handleEditEdb,
         'addToBase': this.handleAddToBase,
@@ -404,14 +460,20 @@ export default {
         'del': this.handleDelEdb
       }
 
-      typeMap[type]&&typeMap[type](item)
+      typeMap[type]&&typeMap[type](item,from)
     },
 
-    handleEditEdb(item) {
+    handleEditEdb(item,from) {
+      let cacheData={
+        editType:from,  // 1-列表编辑 2-详情编辑
+        id:item.TradeCode,
+        tableSearch:{...this.tableSearch,total:this.total}
+      }
+      sessionStorage.setItem('cacheDataList',JSON.stringify(cacheData))
       this.$router.push({
         path: '/dataEdit',
         query: {
-          id: item.TradeCode
+          id: item.TradeCode,
         }
       })
     },

+ 9 - 8
src/views/dataEntry_manage/databaseComponents/addTargetDiaBase.vue

@@ -129,14 +129,15 @@
                 <td v-for="(data, sub_index) in edbIndexDatas" :key="sub_index" :colspan="2" 
 								:class="highLightIndex.includes(data.EdbName) && item=='EdbName' ?'exist-highlight':''">
 									<template v-if="item === 'ClassifyId'">
-										<el-cascader :options="options" v-model="data[item]" :placeholder="$t('Edb.InputHolderAll.input_menu')"
-										size="mini" :disabled="!data.Source"
-										:props="{label: 'ClassifyName',
-											value: 'ClassifyId',
-											children: 'Children',
-											checkStrictly: true,
-											emitPath:false}">
-										</el-cascader>
+										<cascader
+										:options="options"
+										v-model="data[item]"
+										:placeholder="$t('Edb.InputHolderAll.input_menu')"
+										size="mini"
+										:disabled="!data.Source"
+										:config="{ checkStrictly: true, emitPath: false }"
+										cascaderWidth="width:100%"
+										/>
 									</template>
 									<template v-else-if="item === 'Unit'">
 										<el-autocomplete

+ 5 - 4
src/views/dataEntry_manage/databaseComponents/batchComptedDialog.vue

@@ -84,13 +84,14 @@
 						:placeholder="$t('Edb.InputHolderAll.input_name')"
             style="margin: 0 10px;width:25%"
 					/>
-          <el-cascader
+					<cascader
+						style="width: 25%"
 						v-model="list.menu"
 						:options="options"
-						:props="levelProps"
 						clearable
 						:placeholder="$t('Edb.InputHolderAll.input_menu')"
-            style="width: 25%"
+						cascaderWidth="width: 100%"
+						:config="{ checkStrictly: true }"
 					/>
 					<selectUnit 
 						v-model="list.unit" 
@@ -632,7 +633,7 @@ export default {
 	mounted() {},
 }
 </script>
-<style lang='scss'>
+<style lang='scss' scoped>
 .batch-computed-dialog {
 	position: relative;
 	div::-webkit-scrollbar {

+ 8 - 8
src/views/dataEntry_manage/databaseComponents/batchComputedSave.vue

@@ -43,14 +43,14 @@
                     </el-radio-group>
                 </template>
                 <template slot-scope="{row,$index}">
-                    <el-cascader
-						v-model="row.classify"
-						:options="classifyOpt"
-						:props="levelProps"
-						:placeholder="$t('Edb.InputHolderAll.input_menu')"
-                        :disabled="(classifyType===1&&$index>0)||operationForm.view"
-                        @change="handleClassifyChange(row,$index)"
-					/>
+                    <cascader
+                    v-model="row.classify"
+                    :options="classifyOpt"
+                    :placeholder="$t('Edb.InputHolderAll.input_menu')"
+                    :disabled="(classifyType === 1 && $index > 0) || operationForm.view"
+                    @changeVal="handleClassifyChange(row, $index)"
+                    :config="{ checkStrictly: true, emitPath: false }"
+                />
                 </template>
             </el-table-column>
         </el-table>

+ 11 - 10
src/views/dataEntry_manage/databaseComponents/batchComputedV2.vue

@@ -6,7 +6,7 @@
 		@close="handleClose"
 		custom-class="batch-computed-dialog fit-screen-dialog"
 		center
-		top="5vh"
+		top="2vh"
 		v-dialogDrag
         :title="showSave ? $t('EtaBasePage.title_batch_save') : $t('EtaBasePage.title_batch_calc')"
 	>
@@ -254,16 +254,17 @@
                     {{$t('EtaBasePage.pending_metrics',{num:MAXAddNUM})}}
                 </p>
                 <div>
-                    <el-cascader
-						v-model="filter.classify"
-						:options="classifyOpt"
-						:props="classifyProps"
-						clearable
+                    <cascader
+                        style="display:inline-block"
+                        v-model="filter.classify"
+                        :options="classifyOpt"
+                        clearable
                         collapse-tags
-						:placeholder="$t('EtaBasePage.label_classify')"
-                        style="width: 240px"
-                        @change="handleFilter"
-					/>
+                        :placeholder="$t('EtaBasePage.label_classify')"
+                        cascaderWidth="width: 240px"
+                        @changeVal="handleFilter"
+                        :config="{ multiple: true, emitPath: false }"
+                    />
                     <el-select
 						v-model="filter.frequency"
 						:placeholder="$t('EtaBasePage.select_frequency')"

+ 5 - 4
src/views/dataEntry_manage/databaseComponents/completeTargetDia.vue

@@ -28,13 +28,14 @@
 						:placeholder="$t('Edb.InputHolderAll.input_name')"></el-input>
 					</el-form-item>
 					<el-form-item :label="$t('Edb.Detail.e_menu')" prop="menu">
-						<el-cascader
+						<cascader
 						v-model="formData.menu"
 						:options="options"
-						:props="levelProps"
-						style="width: 80%"
+						cascaderWidth="width: 80%"
 						clearable
-						:placeholder="$t('Edb.InputHolderAll.input_menu')"/>
+						:placeholder="$t('Edb.InputHolderAll.input_menu')"
+						:config="{ checkStrictly: true }"
+						/>
 					</el-form-item>
 					<el-form-item :label="$t('Edb.Detail.e_fre')" prop="frequency">
 						<!-- <span slot="label">频&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;率</span> -->

+ 2 - 2
src/views/dataEntry_manage/databaseComponents/computedDialog.vue

@@ -212,12 +212,12 @@
 					<selectUnit v-model="formData.unit" style="width: 340px" />
 				</el-form-item>
 				<el-form-item :label="$t('Edb.Detail.e_menu')" prop="menu">
-					<el-cascader
+					<cascader
 						v-model="formData.menu"
 						:options="options"
-						:props="levelProps"
 						clearable
 						:placeholder="$t('Edb.InputHolderAll.input_menu')"
+						:config="{ checkStrictly: true }"
 					/>
 				</el-form-item>
 				<el-form-item :label="$t('Edb.Detail.e_fre')" prop="frequency">

+ 8 - 8
src/views/dataEntry_manage/databaseComponents/diffusionIndexDia.vue

@@ -111,14 +111,14 @@
 			/>
           </el-form-item>
           <el-form-item :label="$t('Edb.Detail.e_menu')" prop="menu" style="margin-right: 40px;">
-            <el-cascader
-              v-model="formData.menu"
-              :options="options"
-              :props="levelProps"
-              clearable
-              :placeholder="$t('Edb.InputHolderAll.input_menu')"
-							style="width: 340px"
-            />
+			<cascader
+				v-model="formData.menu"
+				:options="options"
+				clearable
+				:placeholder="$t('Edb.InputHolderAll.input_menu')"
+				cascaderWidth="width: 340px"
+				:config="{ checkStrictly: true }"
+			/>
           </el-form-item>
           <el-form-item :label="$t('Edb.Detail.e_fre')" prop="frequency">
             <el-select

+ 3 - 3
src/views/dataEntry_manage/databaseComponents/fittingResidueDia.vue

@@ -148,13 +148,13 @@
           :placeholder="$t('Edb.InputHolderAll.input_name')"></el-input>
         </el-form-item>
         <el-form-item :label="$t('Edb.Detail.e_menu')" prop="menu">
-          <el-cascader
+		  <cascader
             v-model="formData.menu"
             :options="options"
-            :props="levelProps"
-            style="width:70%" 
+            cascaderWidth="width:70%"
             clearable
             :placeholder="$t('Edb.InputHolderAll.input_menu')"
+            :config="{ checkStrictly: true, emitPath: false }"
           />
         </el-form-item>
         <el-form-item :label="$t('Edb.Detail.e_fre')" prop="frequency">

+ 8 - 12
src/views/dataEntry_manage/databaseComponents/jointTargetDia.vue

@@ -197,18 +197,14 @@
 				:placeholder="$t('Edb.InputHolderAll.input_name')"></el-input>
 			</el-form-item>
 			<el-form-item :label="$t('Edb.Detail.e_menu')" prop="menu">
-				<el-cascader
-				v-model="formData.menu"
-				:options="menuOptions"
-				:props="{
-					label: 'ClassifyName',
-					value: 'ClassifyId',
-					children: 'Children',
-					checkStrictly: true
-				}"
-				style="width: 70%"
-				clearable
-				:placeholder="$t('Edb.InputHolderAll.input_menu')"/>
+				<cascader
+					v-model="formData.menu"
+					:options="menuOptions"
+					cascaderWidth="width: 70%"
+					clearable
+					:placeholder="$t('Edb.InputHolderAll.input_menu')"
+					:config="{ checkStrictly: true }"
+				/>
 			</el-form-item>
 			<el-form-item :label="$t('Edb.Detail.e_fre')" prop="frequency">
 				<el-select 

+ 7 - 6
src/views/dataEntry_manage/databaseComponents/openDialog.vue

@@ -43,12 +43,13 @@
 							:placeholder="$t('Edb.InputHolderAll.input_name')"></el-input>
 						</el-form-item>
 						<el-form-item :label="$t('Edb.Detail.e_menu')" prop="level_menu">
-							<el-cascader
-							v-model="formData.level_menu"
-							:options="options"
-							:props="levelProps"
-							style="width: 80%"
-							:placeholder="$t('Edb.InputHolderAll.input_menu')"/>
+							<cascader
+								v-model="formData.level_menu"
+								:options="options"
+								cascaderWidth="width: 80%"
+								:placeholder="$t('Edb.InputHolderAll.input_menu')"
+								:config="{ checkStrictly: true }"
+							/>
 						</el-form-item>
 						<el-form-item :label="$t('Edb.Detail.e_fre')" prop="frequency">
 							<!-- <span slot="label">频&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;率</span> -->

+ 2 - 2
src/views/dataEntry_manage/databaseComponents/operationDialog.vue

@@ -184,12 +184,12 @@
 						</el-form-item>
 						<!-- 指标目录 -->
 						<el-form-item :label="$t('Edb.Detail.e_menu')" prop="menu">
-							<el-cascader
+							<cascader
 								v-model="formData.menu"
 								:options="options"
-								:props="levelProps"
 								clearable
 								:placeholder="$t('Edb.InputHolderAll.input_menu')"
+								:config="{ checkStrictly: true }"
 							/>
 						</el-form-item>
 						<!-- 指标频度 -->

+ 15 - 13
src/views/dataEntry_manage/databaseComponents/smoothEdbDialog.vue

@@ -135,12 +135,13 @@
                                 />
                             </el-form-item>
                             <el-form-item :label="$t('Edb.Detail.e_menu')" prop="menu">
-                                <el-cascader v-if="isOpenSmooth"
-                                    v-model="formData.menu"
-                                    :options="catalogArr"
-                                    :props="levelProps"
-                                    clearable
-                                    :placeholder="$t('Edb.InputHolderAll.input_menu')"
+                                <cascader
+                                v-if="isOpenSmooth"
+                                v-model="formData.menu"
+                                :options="catalogArr"
+                                clearable
+                                :placeholder="$t('Edb.InputHolderAll.input_menu')"
+                                :config="{ emitPath: false, checkStrictly: true }"
                                 />
                             </el-form-item>
                             <el-form-item :label="$t('Edb.Detail.e_fre')" prop="frequency">
@@ -238,13 +239,14 @@
                                 />
                             </el-form-item>
                             <el-form-item prop="menu">
-                                <el-cascader v-if="isOpenSmooth"
-                                    v-model="targetList[index].menu"
-                                    :options="catalogArr"
-                                    :props="levelProps"
-                                    style="width: 200px" 
-                                    clearable
-                                    placeholder="请选择指标目录"
+                                <cascader
+                                v-if="isOpenSmooth"
+                                v-model="targetList[index].menu"
+                                :options="catalogArr"
+                                cascaderWidth="width: 200px"
+                                clearable
+                                placeholder="请选择指标目录"
+                                :config="{ emitPath: false, checkStrictly: true }"
                                 />
                             </el-form-item>
                             <el-form-item prop="unit">

+ 2 - 0
src/views/dataEntry_manage/databaseList.vue

@@ -1040,6 +1040,8 @@ export default {
 							}, 1000);
 						})
 						
+						// 重绘图表,刷新数据
+						this.$refs.createChart&&this.$refs.createChart.getEdbData()
 
 					}else {
 						this.tableData = [];

+ 20 - 3
src/views/dataEntry_manage/editChart.vue

@@ -33,7 +33,7 @@
 					:rules="chartRules"
 				>
 					<el-form-item :label="$t('EtaChartAddPage.label_chart_type')" prop="ChartType">
-						<chartTypeSelect v-model="chartInfo.ChartType" style="width:90%"/>
+						<chartTypeSelect v-model="chartInfo.ChartType" style="width:90%" @change="needWatch=true;"/>
 						<!-- <el-select
 							v-model="chartInfo.ChartType"
 							placeholder="请选择生成样式"
@@ -131,6 +131,22 @@
 							:placeholder="$t('Chart.InputHolderAll.input_classify')"
 						/>
 					</el-form-item>
+					<!-- 图表别名 英文文案还没给-->
+					<el-form-item label="图表别名" prop="ChartAlias" v-if="[1,5,6].includes(chartInfo.ChartType)">
+						<el-input
+							v-model="chartInfo.ChartAlias"
+							style="width: 90%"
+							placeholder="请输入图表别名"
+							clearable
+						/>
+						<el-tooltip effect="dark" placement="right">
+							<div
+								slot="content"
+								style="line-height: 20px;width:300px"
+								>设置图表别名,默认PPT中插入该图表时显示,若无设置,则PPT中不显示该图表名称。</div>
+							<i class="el-icon-question" style="color: #666" />
+						</el-tooltip>
+					</el-form-item>
 					<el-form-item :label="$t('Chart.Detail.chart_unit')" prop="Unit" v-if="[7,11].includes(chartInfo.ChartType)">
 						<el-select
 							v-model="chartInfo.Unit"
@@ -1031,7 +1047,7 @@ export default {
 						})
 					}
 
-					const { ChartType,ChartName,ChartThemeId,SourcesFrom,Instructions,MarkersLines,MarkersAreas,ChartThemeStyle } = this.chartInfo;
+					const { ChartType,ChartName,ChartThemeId,SourcesFrom,Instructions,MarkersLines,MarkersAreas,ChartThemeStyle,ChartAlias } = this.chartInfo;
 					let public_param = {
 						ChartClassifyId: this.chartInfo.classify.length ? this.chartInfo.classify[this.chartInfo.classify.length - 1] : 0,
 						ChartInfoId: this.chartInfo.ChartInfoId,
@@ -1043,7 +1059,8 @@ export default {
 						Instructions,
 						MarkersLines,
 						MarkersAreas,
-						ChartThemeStyle
+						ChartThemeStyle,
+						ChartAlias,//别名
 					}
 
 					//提交参数

+ 5 - 4
src/views/dataEntry_manage/mixins/addOreditMixin.js

@@ -171,7 +171,7 @@ export default {
 				this.getThemeList('init')
 
 				//柱形图 截面散点切换到普通图 依赖的指标信息其实只有信息无数据 需清空
-				if([7,10,11].includes(oldval)&&![7,10,11].includes(newval)) {
+				if([7,10,11,14].includes(oldval)&&![7,10,11,14].includes(newval)) {
 					this.tableData = [];
 					this.chartInfo.LeftMax = '';
 					this.chartInfo.LeftMin = '';
@@ -180,7 +180,7 @@ export default {
 					this.chartInfo.MarkersAreas = "";
 				}
 				//从普通图切换到柱形图,截面散点,雷达图 清空MarkersLines
-				if(![7,10,11].includes(oldval)&&[7,10,11].includes(newval)){
+				if(![7,10,11,14].includes(oldval)&&[7,10,11,14].includes(newval)){
 					this.chartInfo.MarkersLines = ""
 					this.$refs.markerSectionRef&&this.$refs.markerSectionRef.initData(this.chartInfo||{});
 				}
@@ -189,7 +189,7 @@ export default {
 				this.initStatus();
 
 				//共用结构的类型切换可以直接画图
-				if(![7,10,11].includes(newval)) {
+				if(![7,10,11,14].includes(newval)) {
 					//初始化上下限
 					this.setLimitData(this.tableData)
 					//单指标允许切换到季节图需药重新请求数据
@@ -908,7 +908,8 @@ export default {
 							FrequencyDay:_item.FrequencyDay,
 							ChangeType:_item.ChangeType
 						}
-					})
+					}),
+					StaticDate:item.staticDate
 				}
 			})
 			params.SeriesList=opt.seriesData.map(item=>{

+ 1 - 1
src/views/dataEntry_manage/mixins/chartPublic.js

@@ -1704,7 +1704,7 @@ export const chartSetMixin = {
         let temArr=[]
         this.commodityXData.forEach((i,index)=>{
           if(i.IsHide!==1){
-            temArr.push(arr[index]||null)
+            temArr.push(arr[index])
           }
         })
 

+ 5 - 10
src/views/dataEntry_manage/thirdBase/bloombergSource.vue

@@ -135,17 +135,12 @@
                                 </el-select>
                             </el-form-item>
                             <el-form-item :prop="`list[${index}].ClassifyId`" :rules="{required:true,message:$t('Edb.InputHolderAll.input_menu'),trigger: 'blur'}">
-                                <el-cascader v-model="item.ClassifyId"
+                                <cascader
+                                v-model="item.ClassifyId"
                                 :placeholder="$t('Edb.InputHolderAll.input_menu')"
-                                :options="edbCatalogList" 
-                                :props="{
-                                    label: 'ClassifyName',
-                                    value: 'ClassifyId',
-                                    children: 'Children',
-                                    checkStrictly: true,
-                                    emitPath:false
-                                }"
-                                ></el-cascader>
+                                :options="edbCatalogList"
+                                :config="{ checkStrictly: true, emitPath: false }"
+                                />
                             </el-form-item>
                         </div>
                         

+ 44 - 16
src/views/dataEntry_manage/thirdBase/components/addIndicsDia.vue

@@ -28,13 +28,14 @@
                     :placeholder="$t('Table.edb_name')"></el-input>
                 </el-form-item>
                 <el-form-item :label="$t('Edb.Detail.select_catalogue')" prop="menu">
-                    <el-cascader
-                    v-model="formData.menu"
-                    :options="options"
-                    :props="levelProps"
-                    style="width: 80%"
-                    clearable
-                    :placeholder="$t('CustomAnalysisPage.select_appropriate_category')"/>
+                    <cascader
+                        v-model="formData.menu"
+                        :options="options"
+                        cascaderWidth="width: 80%"
+                        clearable
+                        :placeholder="$t('CustomAnalysisPage.select_appropriate_category')"
+                        :config="{ emitPath: false, checkStrictly: true }"
+                    />
                 </el-form-item>
                 <el-form-item :label="$t('Table.frequency')" prop="frequency">
                     <el-select 
@@ -67,7 +68,7 @@
 
 <script>
 import { dataBaseInterface } from '@/api/api.js';
-import { steelInterface } from "@/api/modules/thirdBaseApi";
+import { steelInterface,zhuochuangRedStageInterface } from "@/api/modules/thirdBaseApi";
 import selectUnit from '@/components/selectUnit.vue';
 import { frequencySelectList } from '@/utils/defaultOptions';
 export default {
@@ -130,8 +131,7 @@ export default {
     },
     methods: {
         filterNodes(arr) {
-            arr.length &&
-                arr.forEach((item) => {
+            arr.length && arr.forEach((item) => {
                     item.Children.length && this.filterNodes(item.Children);
                     if (!item.Children.length) {
                         delete item.Children;
@@ -147,14 +147,41 @@ export default {
         },
         async handleAddEdb(){
             //校验表单
-            try{
-                await this.$refs.targetForm.validate()
-            }catch(e){
-                return 
+            await this.$refs.targetForm.validate()
+            this.btnloading = true
+            
+            let saveApiMap = {
+                '/zchqDataBase': this.handleAddzchqApi,
+                '/steelChemical': this.handleAddSteelApi
             }
+
+            saveApiMap[this.$route.path] && saveApiMap[this.$route.path]()
+        },
+        
+        /* 卓创红期api */
+        async handleAddzchqApi() {
             const {code,edb_name,menu,frequency,unit} = this.formData
-            this.btnloading = true
-            //添加检测
+
+            const res = await zhuochuangRedStageInterface.addToLib({
+                EdbCode:code,
+                EdbName:edb_name,
+                Unit:unit,
+                Frequency:frequency,
+                ClassifyId:Number(menu),
+            })
+
+            this.btnloading=false
+            if(res.Ret !== 200) return 
+
+            this.$message.success(this.$t('MsgPrompt.add_msg2'))
+            this.$emit('addCallback')
+        },
+
+        /* 钢联化工api */
+        async handleAddSteelApi() {
+            const {code,edb_name,menu,frequency,unit} = this.formData
+
+             //添加检测
             const resAddCheck = await steelInterface.batchAddEdbCheck({
                 IndexCodes:[code]
             })
@@ -186,6 +213,7 @@ export default {
             this.$message.success(this.$t('MsgPrompt.add_msg2'))
             this.$emit('addCallback')
         },
+
         initDia(){
             this.btnloading=false
             this.getClassifyOpt()

+ 59 - 26
src/views/dataEntry_manage/thirdBase/components/addToBaseDia.vue

@@ -45,7 +45,7 @@
                   placeholder="请选择频率"
                 >
                   <el-option
-                    v-for="item in $parent.frequencyOptions"
+                    v-for="item in frequencyOptions"
                     :key="item.val"
                     :label="item.label"
                     :value="item.val"
@@ -54,26 +54,36 @@
                 </el-select>
               </template>
             </el-table-column>
-            <el-table-column align="center" width="280px">
+            <el-table-column align="center" width="320px">
                 <template slot="header" slot-scope="scope">
-                    <span style="margin-right:40px;display:inline-block">目录</span>
-                    <el-radio-group 
-                      v-model="classifyType"
-                      @change="handleClassifyTypeChange"
-                    >
-                        <el-radio :label="0">分目录</el-radio>
-                        <el-radio :label="1">同目录</el-radio>
-                    </el-radio-group>
-                </template>
-                <template slot-scope="{row,$index}">
+                      
+                    <div class="header-cell">
+                      <el-radio-group 
+                        v-model="classifyType"
+                        @change="handleClassifyTypeChange"
+                      >
+                          <el-radio :label="0" style="margin-right:10px;">分目录</el-radio>
+                          <el-radio :label="1">同目录</el-radio>
+                      </el-radio-group>
                       <el-cascader
+                          v-model="defaultClassifyId"
+                          :options="classifyOpt"
+                          :props="levelProps"
+                          placeholder="请选择指标目录"
+                          @change="handleClassifyChange(row)"
+                          style="width:120px"
+                          :disabled="classifyType===0"
+                        />
+                    </div>
+                </template>
+                <template slot-scope="{row}">
+                      <cascader
                         v-model="row.ClassifyId"
                         :options="classifyOpt"
-                        :props="levelProps"
                         placeholder="请选择指标目录"
-                        :disabled="(classifyType===1&&$index>0)"
-                        @change="handleClassifyChange(row,$index)"
+                        :disabled="classifyType===1"
                         class="cascader-wrapper"
+                        :config="{ checkStrictly: true, emitPath: false }"
                       />
                 </template>
             </el-table-column>
@@ -95,6 +105,8 @@
 <script>
 import { dataBaseInterface } from '@/api/api.js';
 import { selfDataInterface } from '@/api/modules/dataSource';
+import { zhuochuangRedStageInterface } from "@/api/modules/thirdBaseApi";
+import { frequencySelectList } from '@/utils/defaultOptions';
 export default {
   props: {
     isShow: {
@@ -105,6 +117,11 @@ export default {
       default: () => []
     }
   },
+  computed: {
+    frequencyOptions() {
+      return frequencySelectList()
+    }
+  },
   data() {
     return {
       tableData:[],
@@ -121,7 +138,9 @@ export default {
         emitPath:false
 			},
 
-      existNameArr:[]
+      existNameArr:[],
+
+      defaultClassifyId: 0,
     };
   },
   watch: {
@@ -130,6 +149,7 @@ export default {
 
       this.getClassifyOpt()
 
+      console.log(this.list)
       this.tableData = this.list.map(_=>({
         ..._,
         ClassifyId: 0
@@ -156,6 +176,8 @@ export default {
     },
 
     cancelHandle() {
+      this.classifyType = 0;
+      this.defaultClassifyId = 0;
       this.existNameArr = [];
       this.$emit('update:isShow',false)
     },
@@ -165,7 +187,7 @@ export default {
         if(this.classifyType===1){
           // 修改所有的指标的目录为第一个
           this.tableData.forEach(item=>{
-              item.ClassifyId=e.ClassifyId
+              item.ClassifyId=this.defaultClassifyId
           })
         }
     },
@@ -189,13 +211,19 @@ export default {
       })
     },
 
-    handleSave() {
+    async handleSave() {
 
       let haveIncomplete = this.tableData.some(_ => !_.IndexName||!_.ClassifyId||!_.Unit)
       if(haveIncomplete) return this.$message.warning('指标信息填写不完整')
 
       this.saveLoading = true;
-      selfDataInterface.batchSaveEdb(
+      
+      const handleApiMap = {
+        '/selfData':selfDataInterface.batchSaveEdb,
+        '/zchqDataBase': zhuochuangRedStageInterface.batchAddToLib
+      }
+
+      let res = await handleApiMap[this.$route.path](
           this.tableData.map(i=>({
             EdbCode: i.IndexCode,
             EdbName: i.IndexName,
@@ -204,15 +232,15 @@ export default {
             ClassifyId: i.ClassifyId,
             Source: i.Source
           }))
-      ).then(res=>{
-          this.saveLoading = false
+      )
 
-          if(res.Ret!==200) return 
-          this.$message.success(this.$t('MsgPrompt.add_msg2'))
+      this.saveLoading = false
 
-          this.cancelHandle();
-          this.$emit('success')
-      })
+      if(res.Ret!==200) return 
+      this.$message.success(this.$t('MsgPrompt.add_msg2'))
+
+      this.cancelHandle();
+      this.$emit('success')
     }
   },
 };
@@ -227,6 +255,11 @@ export default {
       color: #f00;
     }
   }
+  .header-cell {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+  }
 }
 </style>
 <style lang="scss">

+ 7 - 1
src/views/dataEntry_manage/thirdBase/components/batchAddEdbDia.vue

@@ -45,13 +45,14 @@
                   :options="classifyOptions"
                   :key="item.edbIndex"
                   :props="{
-                    label: 'ClassifyName',
+                    label:currentLang==='zh'?'ClassifyName':'ClassifyNameEn',
                     value: 'BaseFromMysteelChemicalClassifyId',
                     children: 'Children',
                     emitPath: false,
                   }"
                   :placeholder="$t('Edb.InputHolderAll.input_classify')"
                 />
+
               </el-form-item>
             </el-col>
             <img src="~@/assets/img/delete-minus-red.png" @click="delEdbItem(index)" v-if="edbForm.edbDataList.length>1" />
@@ -94,6 +95,11 @@ import { steelInterface } from "@/api/modules/thirdBaseApi";
         }
       },
     },
+    computed: {
+      currentLang() {
+          return this.$store.state.lang;
+      },
+    },
     data(){
       this.checkAge=(rule, value, callback) => {
         // 不能输入中文和空格

+ 22 - 33
src/views/dataEntry_manage/thirdBase/components/batchAddIndicsDia.vue

@@ -14,18 +14,18 @@
     >
         <div class="dialog-container">
             <div class="select-box">
-                <el-cascader v-model="searchClassify"
-                    :options="classifyList"
-                    :props="{
-                        children:'Children',
-                        label:'ClassifyName',
-                        value:'BaseFromMysteelChemicalClassifyId',
-                        multiple:true,
-                        emitPath:false,
-                    }"
-                    :placeholder="$t('Edb.InputHolderAll.input_classify')"
-                    @change="getEdbList"
-                ></el-cascader>
+                <cascader
+                style="display: inline-block"
+                v-model="searchClassify"
+                :options="classifyList"
+                :placeholder="$t('Edb.InputHolderAll.input_classify')"
+                @changeVal="getEdbList"
+                :config="{
+                    multiple: true,
+                    emitPath: false,
+                    value: 'BaseFromMysteelChemicalClassifyId',
+                }"
+                />
                 <el-input style="width:240px;" v-model="searchName"
                     :placeholder="$t('Edb.InputHolderAll.input_name_orid')"
                     prefix-icon="el-icon-search"
@@ -72,34 +72,23 @@
                                 <el-radio :label="1" style="margin-right:5px"><!-- 分目录 -->{{$t('EtaBasePage.subdirectory_radio')}}</el-radio>
                                 <el-radio :label="2"><!-- 同目录 -->{{$t('EtaBasePage.directory_radio')}}</el-radio>
                             </el-radio-group>
-                            <el-cascader v-if="classifyType===2" v-model="selectClassify"
+                            <cascader
+                                v-if="classifyType === 2"
+                                v-model="selectClassify"
                                 :options="edbClassifyList"
-                                :props="{
-                                    label: 'ClassifyName',
-                                    value: 'ClassifyId',
-                                    children: 'Children',
-                                    checkStrictly: true,
-                                    emitPath:false
-                                }"
                                 :placeholder="$t('SteelChemicalPage.batch_add_placeholder')"
-                            >
-                            </el-cascader>
+                                :config="{ checkStrictly: true, emitPath: false }"
+                            />
                         </template>
                         <template slot-scope="{row,$index}">
-                            <el-cascader 
+                            <cascader
                                 v-model="row.classify"
                                 :options="edbClassifyList"
-                                :props="{
-                                    label: 'ClassifyName',
-                                    value: 'ClassifyId',
-                                    children: 'Children',
-                                    checkStrictly: true,
-                                    emitPath:false
-                                }"
                                 :placeholder="$t('SteelChemicalPage.batch_add_placeholder')"
-                                style="width:100%;"
-                                :disabled="classifyType===2"
-                            ></el-cascader>
+                                cascaderWidth="width:100%;"
+                                :disabled="classifyType === 2"
+                                :config="{ checkStrictly: true, emitPath: false }"
+                            />
                         </template>
                     </el-table-column>
                     <div class="no-data" slot="empty">

+ 261 - 0
src/views/dataEntry_manage/thirdBase/components/batchAddToEdbDialog.vue

@@ -0,0 +1,261 @@
+<template>
+  <!-- 添加到指标库弹窗 -->
+  <el-dialog
+    :title="$t('Edb.Detail.batch_add_edb')"
+    :visible.sync="isShow"
+    :close-on-click-modal="false"
+    :modal-append-to-body="false"
+    @close="cancelHandle"
+    width="1000px"
+    top="5vh"
+    v-dialogDrag
+    center
+  >
+    <div class="add-dialog-wrap">
+      <el-table :data="tableData" border height="500px">
+        <el-table-column
+          :label="$t('Edb.Detail.e_id')"
+          align="center"
+          prop="IndexCode"
+        />
+        <el-table-column
+          :label="$t('Edb.Detail.e_name')"
+          align="center"
+          width="210px"
+        >
+          <template slot-scope="scope">
+            <div class="name-cell">
+              <el-input
+                v-model="scope.row.IndexName"
+                :placeholder="$t('Edb.InputHolderAll.input_name')"
+                style="width: 100%; margin: 5px 0"
+                :class="
+                  existNameArr.includes(scope.row.IndexName) && 'error-ipt'
+                "
+              />
+              <div
+                class="error"
+                v-if="existNameArr.includes(scope.row.IndexName)"
+              >
+                <span>{{ $t("BloombergPage.add_edb_check_hint2") }}</span>
+              </div>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          :label="$t('Edb.Detail.e_unit')"
+          align="center"
+          width="150px"
+        >
+          <template slot-scope="scope">
+            <selectUnit v-model="scope.row.Unit" />
+          </template>
+        </el-table-column>
+        <el-table-column
+          :label="$t('Edb.Detail.e_fre')"
+          align="center"
+          width="120px"
+        >
+          <template slot-scope="scope">
+            <el-select
+              v-model="scope.row.Frequency"
+              :placeholder="$t('EtaBasePage.select_frequency')"
+            >
+              <el-option
+                v-for="item in $parent.frequencyList"
+                :key="item.val"
+                :label="item.label"
+                :value="item.val"
+              >
+              </el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" width="320px">
+          <template
+            slot="header"
+            slot-scope="scope"
+            style="
+              display: flex;
+              align-items: center;
+              justify-content: space-between;
+            "
+          >
+            <el-radio-group
+              v-model="classifyType"
+              @change="handleClassifyTypeChange"
+              style="flex: 1; margin-right: 20px"
+            >
+              <el-radio :label="0" style="margin-right: 20px"
+                ><!-- 分目录 -->{{
+                  $t("EtaBasePage.subdirectory_radio")
+                }}</el-radio
+              >
+              <el-radio :label="1"
+                ><!-- 同目录 -->{{
+                  $t("EtaBasePage.directory_radio")
+                }}</el-radio
+              >
+            </el-radio-group>
+
+            <el-cascader
+              v-if="classifyType == 1"
+              v-model="commonClassifyId"
+              :options="classifyOpt"
+              :props="levelProps"
+              :placeholder="$t('Edb.InputHolderAll.input_menu')"
+              :disabled="classifyType == 0"
+              @change="handleClassifyChange()"
+              style="width: 120px"
+            />
+          </template>
+          <template slot-scope="{ row, $index }">
+            <el-cascader
+              v-model="row.ClassifyId"
+              :options="classifyOpt"
+              :props="levelProps"
+              :placeholder="$t('Edb.InputHolderAll.input_menu')"
+              :disabled="classifyType == 1"
+              class="cascader-wrapper"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+
+    <div style="text-align: center; margin: 30px 0">
+      <el-button @click="cancelHandle">{{ $t("Dialog.cancel_btn") }}</el-button>
+      <el-button type="primary" @click="handleCheckName" :loading="saveLoading">
+        {{ $t("ManualEdbListPage.add_tobase_btn") }}
+      </el-button>
+    </div>
+  </el-dialog>
+</template>
+<script>
+import { dataBaseInterface } from "@/api/api.js";
+export default {
+  props: {
+    isShow: {
+      type: Boolean,
+    },
+    list: {
+      type: Array,
+      default: () => [],
+    },
+  },
+  data() {
+    return {
+      tableData: [],
+      saveLoading: false,
+
+      classifyType: 0,
+      classifyOpt: [],
+
+      commonClassifyId: 0,
+
+      levelProps: {
+        label: "ClassifyName",
+        value: "ClassifyId",
+        children: "Children",
+        checkStrictly: true,
+        emitPath: false,
+      },
+
+      existNameArr: [],
+    };
+  },
+  watch: {
+    isShow(nval) {
+      if (!nval) return;
+      this.initDialog();
+
+      this.getClassifyOpt();
+
+      this.tableData = this.list.map((_) => ({
+        ..._,
+        ClassifyId: 0,
+      }));
+    },
+  },
+  methods: {
+    initDialog() {
+      this.classifyType = 0;
+      this.commonClassifyId = 0;
+      this.existNameArr = [];
+    },
+
+    filterNodes(arr) {
+      arr.length &&
+        arr.forEach((item) => {
+          item.Children.length && this.filterNodes(item.Children);
+          if (!item.Children.length) {
+            delete item.Children;
+          }
+        });
+    },
+    // 获取指标分类
+    async getClassifyOpt() {
+      const res = await dataBaseInterface.menuListV3();
+      if (res.Ret !== 200) return;
+      this.filterNodes(res.Data.AllNodes || []);
+      this.classifyOpt = res.Data.AllNodes || [];
+    },
+
+    cancelHandle() {
+      this.existNameArr = [];
+      this.$emit("update:isShow", false);
+    },
+
+    // 同目录修改
+    handleClassifyChange() {
+      if (this.classifyType === 1) {
+        this.tableData.forEach((item) => {
+          item.ClassifyId = this.commonClassifyId;
+        });
+      }
+    },
+
+    handleClassifyTypeChange() {
+      if (this.classifyType == 0) {
+        this.commonClassifyId = 0;
+      }
+    },
+
+    handleCheckName() {
+      //重名校验
+      this.existNameArr = [];
+      this.$emit("handleCheckName", this.tableData);
+    },
+
+    setValue(key, value) {
+      //用来处理抛出事件的existNameArr 与  saveLoading
+      this[key] = value;
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.add-dialog-wrap {
+  .name-cell {
+    position: relative;
+    .error {
+      position: absolute;
+      bottom: -16px;
+      color: #f00;
+    }
+  }
+}
+</style>
+<style lang="scss">
+.add-dialog-wrap {
+  .error-ipt .el-input__inner {
+    border-color: #f00;
+  }
+  .el-cascader .el-input {
+    width: 100%;
+  }
+  .el-table .cell {
+    overflow: visible;
+  }
+}
+</style>

+ 181 - 0
src/views/dataEntry_manage/thirdBase/components/batchEditIndexDia.vue

@@ -0,0 +1,181 @@
+<template>
+  <!-- 添加到指标库弹窗 -->
+  <el-dialog
+    :title="$t('SciHongqiPage.btn_batch_edit')"
+    :visible.sync="isShow"
+    :close-on-click-modal="false"
+    :modal-append-to-body="false"
+    @close="cancelHandle"
+    width="1000px"
+    top="5vh"
+    v-dialogDrag
+    center
+  >
+    <div class="add-dialog-wrap">
+          <el-table 
+            :data="tableData" 
+            border 
+            height="500px"
+          >
+            <el-table-column :label="$t('Edb.Detail.e_id')" align="center" prop="IndexCode"/>
+            <el-table-column :label="$t('Edb.Detail.e_name')" align="center" width="210px" prop="IndexName"/>
+            <el-table-column :label="$t('Edb.Detail.e_unit')" align="center" width="150px" prop="Unit"/>
+            <el-table-column :label="$t('Edb.Detail.e_fre')" align="center" width="120px" prop="Frequency"/>
+            <el-table-column align="center" width="280px">
+                <template slot="header" slot-scope="scope">
+                    <span style="margin-right:40px;display:inline-block"><!-- 目录 -->{{$t('SelftDataPage.col_menu')}}</span>
+                    <el-radio-group 
+                      v-model="classifyType"
+                      @change="handleClassifyTypeChange"
+                    >
+                        <el-radio :label="0"><!-- 分目录 -->{{$t('SelftDataPage.col_part_menu')}}</el-radio>
+                        <el-radio :label="1"><!-- 同目录 -->{{$t('SelftDataPage.col_same_menu')}}</el-radio>
+                    </el-radio-group>
+                </template>
+                <template slot-scope="{row,$index}">
+                      <el-cascader
+                        v-model="row.ClassifyId"
+                        :options="classifyOpt"
+                        :props="levelProps"
+                        placeholder="请选择指标目录"
+                        :disabled="(classifyType===1&&$index>0)"
+                        @change="handleClassifyChange(row,$index)"
+                        class="cascader-wrapper"
+                      />
+                </template>
+            </el-table-column>
+          </el-table>
+    </div>
+
+    <div style="text-align: center; margin: 30px 0">
+      <el-button @click="cancelHandle">{{$t("Dialog.cancel_btn")}}</el-button>
+      <el-button
+        type="primary"
+        @click="handleBatchEdit"
+        :loading="saveLoading"
+      >
+        {{ $t("Dialog.confirm_save_btn") }}
+      </el-button>
+    </div>
+  </el-dialog>
+</template>
+<script>
+import { zhuochuangRedStageInterface } from "@/api/modules/thirdBaseApi";
+import { frequencySelectList } from '@/utils/defaultOptions';
+export default {
+  props: {
+    isShow: {
+      type: Boolean
+    },
+    list: {
+      type: Array,
+      default: () => []
+    },
+
+    classifyList: {
+      type: Array,
+      default: () => []
+    }
+  },
+  computed: {
+    frequencyOptions() {
+      return frequencySelectList()
+    }
+  },
+  data() {
+    return {
+      tableData:[],
+      saveLoading: false,
+
+      classifyType:0,
+      classifyOpt: [],
+
+      levelProps: {
+				label: 'ClassifyName',
+				value: 'ClassifyId',
+				children: 'Children',
+        emitPath:false
+			},
+    };
+  },
+  watch: {
+    isShow(nval) {
+      if(!nval) return
+
+      this.classifyOpt = _.cloneDeep(this.classifyList)
+      // this.filterNodes(this.classifyOpt)
+
+      console.log(this.list)
+      this.tableData = this.list.map(_=>({
+        ..._,
+        ClassifyId: 0
+      }))
+    }
+  },
+  methods: {
+
+    filterNodes(arr) {
+			arr.length &&
+				arr.forEach((item) => {
+					item.Children.length && this.filterNodes(item.Children);
+					if (!item.Children.length) {
+						delete item.Children;
+					}
+				});
+		},
+
+    cancelHandle() {
+      this.$emit('update:isShow',false)
+    },
+
+    // 同目录修改
+    handleClassifyChange(e,index){
+        if(this.classifyType===1){
+          // 修改所有的指标的目录为第一个
+          this.tableData.forEach(item=>{
+              item.ClassifyId=e.ClassifyId
+          })
+        }
+    },
+
+    handleClassifyTypeChange(){
+      this.handleClassifyChange(this.tableData[0])
+    },
+
+    async handleBatchEdit() {
+
+      let haveIncomplete = this.tableData.some(_ => !_.ClassifyId)
+      if(haveIncomplete) return this.$message.warning('指标信息填写不完整')
+
+      this.saveLoading = true;
+      
+      let res = await zhuochuangRedStageInterface.batchEditEdb(
+          this.tableData.map(i=>({
+            BaseFromSciHqIndexId: i.BaseFromSciHqIndexId,
+            ClassifyId: i.ClassifyId
+          }))
+      )
+
+      this.saveLoading = false
+
+      if(res.Ret!==200) return 
+      this.$message.success(this.$t('MsgPrompt.saved_msg'))
+
+      this.cancelHandle();
+      this.$emit('success')
+    }
+  },
+};
+</script>
+<style lang="scss" scoped>
+.add-dialog-wrap {
+  .name-cell {
+    position: relative;
+    .error {
+      position: absolute;
+      bottom: -16px;
+      color: #f00;
+    }
+  }
+}
+</style>

+ 312 - 0
src/views/dataEntry_manage/thirdBase/components/edbDataDetail.vue

@@ -0,0 +1,312 @@
+<template>
+  <div class="edb-detail-data-wrap">
+    <div class="handle-list">
+      <span 
+        class="editsty" 
+        @click="$emit('handle',{item:edbInfo,type:'edit'})"
+        v-if="permissionBtn.isShowBtn('dataSourcePermission','sciHongqi_opera_edit')
+      "><!-- 编辑 -->{{$t('Table.edit_btn')}}</span>
+
+      <span 
+        class="editsty" 
+        @click="$emit('handle',{item:edbInfo,type:'addToBase'})" 
+        v-if="!edbInfo.EdbInfoId&&permissionBtn.isShowBtn('dataSourcePermission','sciHongqi_opera_addBase')
+      "><!-- 加入指标库 -->{{$t('ManualEntryPage.add_tobase')}}</span>
+
+      <span 
+        class="editsty" 
+        v-if="permissionBtn.isShowBtn('dataSourcePermission','sciHongqi_opera_clear')&&edbInfo.ClassifyId!==0" 
+        @click="$emit('handle',{item:edbInfo,type:'clear'})
+      "><!-- 移除 -->{{$t('SciHongqiPage.handle_clear')}}</span>
+
+      <span 
+        class="deletesty" 
+        @click="$emit('handle',{item:edbInfo,type:'del'})" 
+        v-if="!edbInfo.EdbInfoId&&permissionBtn.isShowBtn('dataSourcePermission','sciHongqi_opera_del')
+      "><!-- 删除 -->{{$t('Table.delete_btn')}}</span>
+    </div>
+		<el-table
+			:data="tableData"
+			class="firstColumTable" 
+      border
+    >
+			<el-table-column
+				v-for="item in tableColumsOne"
+				:key="item.key"
+				:width="item.widthsty"
+        :label="item.label"
+				:min-width="item.minwidthsty"
+				align="center">
+				<template slot-scope="scope">
+
+						<span v-if="item.key === 'Unit'">{{ getUnitTrans(scope.row.Unit) }}</span>
+						<span v-else-if="item.key === 'Frequency'">{{ getFrequencyTrans(scope.row.Frequency) }}</span>
+
+						<span v-else>{{ scope.row[item.key] }}</span>
+				</template>
+			</el-table-column>
+      <div slot="empty" style="padding: 50px 0 50px;">
+					<tableNoData :text="$t('Table.prompt_slogan')"/>
+			</div>
+		</el-table>
+
+    <div class="bottom">
+      <div 
+        class="value-ul" 
+        ref="valueUl"
+        @scroll="handleLoadData"
+      >
+        <div class="total-cont" :style="{height: totalHeight}" v-if="dataList.length"></div>
+        <ul 
+          class="list-wrapper" 
+          @contextmenu.prevent="handleRightClick"
+          v-if="dataList.length"
+        >
+          <li
+            class="value-item"
+            v-for="(item,rindex) in renderDataList"
+            :key="rindex"
+          >
+            <div 
+              class="value-label"
+            >
+              {{item.DataTime}}
+            </div>
+            <div 
+              class="value-label"
+              :data-rindex="rindex"
+              :data-cindex="1"
+            >
+              {{item.Value}}
+            </div>
+          </li>
+        </ul>
+
+        <tableNoData :text="$t('Table.prompt_slogan')" v-else/>
+      </div>
+    </div>
+	</div>
+</template>
+<script>
+import { zhuochuangRedStageInterface } from "@/api/modules/thirdBaseApi";
+export default {
+  props: {
+    id: {
+      type: String
+    }
+  },
+  computed: {
+		tableColumsOne(){
+			return [
+				{
+					label: this.$t('Edb.Detail.e_id'),
+					key: 'IndexCode',
+					minwidthsty: '150px'
+				},
+				{
+					label: this.$t('Edb.Detail.e_name'),
+					key: 'IndexName',
+					minwidthsty: '200px'
+				},
+				{
+					label: this.$t('Edb.Detail.e_fre'),
+					key: 'Frequency',
+					widthsty: '80px'
+				},
+				{
+					label: this.$t('Edb.Detail.e_unit'),
+					key: 'Unit',
+					widthsty: '100px'
+				},
+				{
+					label: this.$t('Edb.Detail.e_update_time'),
+					key: 'ModifyTime',
+				},
+			]
+		},
+
+		tableColumsTwo() {
+			return [
+				{
+					label: this.$t('Edb.Detail.e_menu'),
+					key: 'ClassifyName',
+					minwidthsty: '150px',
+				},
+				{
+					label: this.$t('Edb.Detail.e_start_time'),
+					key: 'StartDate',
+					minwidthsty: '115px',
+				},
+				{
+					label: this.$t('Edb.Detail.e_update_time'),
+					key: 'ModifyTime',
+					minwidthsty: '120px',
+				},
+				{
+					label: this.$t('Edb.creater'),
+					key: 'UserName',
+					widthsty: '160px',
+				}
+			]
+		},
+
+    totalHeight() {
+      return `${this.dataList.length*45}px`
+    },
+
+    renderDataList() {
+      return this.dataList.slice(this.startIndex,this.endIndex)
+    },
+
+    hasEditAuth() {
+      return this.permissionBtn.isShowBtn('dataSourcePermission','manualDataWrite_edit')
+    }
+
+  },
+  watch: {
+    id(newval) {
+      if(!newval) return 
+      this.$refs.valueUl.scrollTop = 0;
+      this.getEdbDetail()
+    }
+  },
+  data() {
+    return {
+      tableData: [],
+      edbInfo: {},
+      dataList: [],
+      startIndex: 0,
+      endIndex: 100,
+
+      readonly:  false,//日期只读
+      temInputVal:{},
+      tempTime:'',
+
+    }
+  },
+  mounted(){
+    this.getEdbDetail()
+  },
+  methods:{
+    /* 获取指标详情 */
+    async getEdbDetail() {
+      let loading = this.$loading({
+        lock: true,
+        text: `${this.$t('Table.data_loading')}...`,
+        target: '.edb-detail-data-wrap',
+        spinner: 'el-icon-loading',
+        background: 'rgba(255, 255, 255, 0.8)'
+      })
+
+      const res = await zhuochuangRedStageInterface.getEdbData({
+        BaseFromSciHqIndexId: this.id
+      })
+
+      loading.close()
+      if(res.Ret !== 200) return 
+      this.edbInfo = res.Data;
+      
+      this.tableData = [res.Data]
+      
+      this.dataList = res.Data.Data||[];
+      this.dataList.length && this.$nextTick(() => {
+        this.handleLoadData()
+      })
+    },
+
+    /* 滚动加载位置数据 */
+    handleLoadData: _.throttle(function() {
+      const scrollTop = this.$refs.valueUl.scrollTop;
+      const visibleCount = Math.ceil(
+        this.$refs.valueUl.clientHeight / 45
+      )+5;
+
+      console.log(visibleCount)
+
+      this.startIndex = Math.floor(scrollTop / 45);
+      this.endIndex = this.startIndex + visibleCount;
+
+      this.$nextTick(() => {
+        $('.list-wrapper')[0].style=`transform: translateY(${this.startIndex*45}px)`
+      })
+    },300),
+  },
+}
+</script>
+<style scoped lang='scss'>
+.edb-detail-data-wrap{
+	display: flex;
+	flex-direction: column;
+	height: 100%;
+	.firstColumTable{
+		box-shadow: 0px 3px 6px rgba(155, 170, 219, 0.2);
+	}
+  .handle-list { 
+    flex: 0;
+    display: flex;
+    justify-content: flex-end;
+    gap: 20px;
+    margin-bottom: 15px;
+  }
+	.el-table{
+		flex: none;
+	}
+  .bottom {
+    flex: 1;
+    display: flex;
+    overflow: hidden;
+    .value-ul{
+      flex: 1;
+      max-height: 100%;
+      overflow-y: auto;
+      border: 1px solid #EBEFF6;
+      box-shadow: 0px 3px 6px rgba(155, 170, 219, 0.2);
+      position: relative;
+      .total-cont {
+        position: absolute;
+        left: 0;
+        right: 0;
+        top: 0;
+        bottom: 0;
+        z-index: -2;
+      }
+      .list-wrapper {
+        left: 0;
+        right: 0;
+        top: 0;
+        position: absolute;
+        .value-item {
+          border-bottom: 1px solid #dcdfe6;
+          display: flex;
+          height: 45px;
+          line-height: 45px;
+
+          .value-label {
+            width: 50%;
+            position: relative;
+            text-align: center;
+            color: #666;
+            &:first-child {
+              border-right: 1px solid #dcdfe6;
+            }
+          }
+        }
+      }
+      .nodata {
+        text-align: center;
+        padding: 40px 0;
+        color: #999;
+      }
+    }
+
+    .left-select {
+      width: fit-content;
+      max-height: 90%;
+      border: 1px solid #EBEFF6;
+      padding: 10px 15px;
+      overflow-y: auto;
+      .el-button { display: block;margin:10px 0; }
+    }
+  }
+}
+</style>

+ 6 - 4
src/views/dataEntry_manage/thirdBase/components/highFrequency/addToIndexDatabaseBatch.vue

@@ -105,13 +105,15 @@
                 </el-radio-group>
               </template>
               <template slot-scope="{row,$index}">
-                <el-cascader size="mini"
+                  <cascader
+                  size="mini"
                   v-model="row.ClassifyId"
                   :options="classifyOpt"
-                  :props="levelProps"
                   :placeholder="$t('Edb.InputHolderAll.input_menu')"
-                  :disabled="(classifyType===0&&$index>0)"
-                  @change="handleClassifyChange(row,$index)"/>
+                  :disabled="classifyType === 0 && $index > 0"
+                  @changeVal="handleClassifyChange(row, $index)"
+                  :config="{ checkStrictly: true, emitPath: false }"
+                />
               </template>
             </el-table-column>
             <el-table-column align="center" width="50px">

+ 4 - 1
src/views/dataEntry_manage/thirdBase/components/targetDialog.vue

@@ -30,7 +30,7 @@
               v-model="formData.classify"
               :options="classifyOptions"
               :props="{
-                label: 'ClassifyName',
+                label:currentLang==='zh'?'ClassifyName':'ClassifyNameEn',
                 value: 'BaseFromMysteelChemicalClassifyId',
                 children: 'Children',
                 emitPath: false,
@@ -145,6 +145,9 @@ export default {
     },
   },
   computed: {
+    currentLang() {
+      return this.$store.state.lang;
+    },
     // timeArr() {
     //   //30间隔的时间数组
     //   const timeArrays = new Array(48).fill("").map((item, index) => {

+ 1365 - 0
src/views/dataEntry_manage/thirdBase/lzzxData.vue

@@ -0,0 +1,1365 @@
+<template>
+  <div class="lzzxData-container">
+    <div class="data-top-container">
+      <el-button
+        v-permission="permissionBtn.dataSourcePermission.lzzxData_batchAddEdb"
+        type="primary"
+        size="medium"
+        :loading="btnLoading"
+        @click="handleCheckEdb"
+        ><!-- 批量加入指标库 -->{{ $t("Edb.Detail.batch_add_edb") }}</el-button
+      >
+      <el-button
+        v-permission="permissionBtn.dataSourcePermission.lzzxData_exportExcel"
+        type="primary"
+        plain
+        size="medium"
+        :loading="exportLoading"
+        @click="handleExport"
+        ><!-- 导出excel -->{{ $t("Common.exp_excel") }}</el-button
+      >
+      <el-autocomplete
+        style="width: 443px; float: right"
+        prefix-icon="el-icon-search"
+        v-model="search_txt"
+        :fetch-suggestions="handleSearch"
+        :trigger-on-focus="false"
+        :placeholder="$t('Edb.InputHolderAll.input_name_orid')"
+        @select="handleSelect"
+        popper-class="el-autocomplete-suggestion-data-entry"
+        clearable
+      >
+        <template slot-scope="scope">
+          <div v-if="scope.item.nodata" style="text-align: center">
+            <!-- 暂无数据 -->{{ $t("Table.prompt_slogan") }}
+          </div>
+          <div v-else>
+            {{ scope.item.IndexName }}
+          </div>
+        </template>
+      </el-autocomplete>
+    </div>
+
+    <div class="lzzxData-inner-container" id="box">
+      <span
+        v-show="!isLeftWrapShow"
+        class="slide-btn-icon slide-right"
+        @click="isLeftWrapShow = !isLeftWrapShow"
+      >
+        <i
+          :class="{
+            'el-icon-d-arrow-left': isLeftWrapShow,
+            'el-icon-d-arrow-right': !isLeftWrapShow,
+          }"
+        ></i>
+      </span>
+      <div class="left-cont minHeight" id="left" v-show="isLeftWrapShow">
+        <span
+          v-show="isLeftWrapShow"
+          class="slide-btn-icon slide-left"
+          @click="isLeftWrapShow = !isLeftWrapShow"
+        >
+          <i
+            :class="{
+              'el-icon-d-arrow-left': isLeftWrapShow,
+              'el-icon-d-arrow-right': !isLeftWrapShow,
+            }"
+          ></i>
+        </span>
+
+        <div class="scroll-wrap">
+          <el-tree
+            ref="treeRef"
+            class="target_tree"
+            :data="classifyList"
+            node-key="UniqueCode"
+            :props="{
+              label: 'ClassifyName',
+              children: 'Children',
+              isLeaf: 'isLeaf',
+            }"
+            :current-node-key="select_node"
+            :default-expanded-keys="defaultShowNodes"
+            :expand-on-click-node="false"
+            check-strictly
+            empty-text="暂无分类"
+            lazy
+            :load="getLazyTreeData"
+            @current-change="nodeChangeHandle"
+          >
+            <div class="custom-tree-node" slot-scope="{ node, data }">
+              <span class="text_oneLine">{{
+                currentLang === "zh"
+                  ? data.ClassifyName
+                  : data.ClassifyNameEn || data.ClassifyName
+              }}</span>
+            </div>
+          </el-tree>
+        </div>
+
+        <span class="move-btn resize" v-drag id="resize"></span>
+      </div>
+
+      <div
+        class="right-cont minHeight"
+        id="right"
+        :element-loading-text="$t('Table.data_loading')"
+        v-loading="dataloading"
+      >
+        <div class="tree-container" v-if="showType == 'tree'">
+          <div class="tree-header">
+            <span class="title-tip">{{
+              $t("EtaBasePage.total_show", { limit: treeDataMeta.total || 0 })
+            }}</span>
+            <el-checkbox
+              v-model="isCheckAll"
+              @change="listCheckAllChange"
+              :indeterminate="isIndeterminate"
+              ><!-- 列表全选 -->{{
+                $t("SystemManage.OperateAuth.all_select")
+              }}</el-checkbox
+            >
+          </div>
+          <div class="table-wrap">
+            <el-table
+              :data="tableTreeData"
+              ref="treeTable"
+              border
+              style="margin: 8px 0"
+              :row-style="{
+                cursor: permissionBtn.isShowBtn(
+                  'dataSourcePermission',
+                  'lzzxData_view'
+                )
+                  ? 'pointer'
+                  : 'default',
+              }"
+              @selection-change="selectionChange"
+              @select="selectHandle"
+              @select-all="selectAllHandle"
+              @row-click="rowClick"
+            >
+              <el-table-column type="selection" width="55" />
+              <el-table-column
+                v-for="item in treeColumns"
+                :key="item.label"
+                :label="item.label"
+                :prop="item.key"
+                :width="item.widthsty"
+                :sortable="item.sortable ? true : false"
+                align="center"
+              >
+                <template slot-scope="{ row }">
+                  <template v-if="item.key == 'Handle'">
+                    <span
+                      class="editsty"
+                      v-if="
+                        !row.EdbExist &&
+                        permissionBtn.isShowBtn(
+                          'dataSourcePermission',
+                          'lzzxData_addEdb'
+                        )
+                      "
+                      @click.stop="checkAddEdb(row)"
+                    >
+                      <!-- 加入指标库 -->
+                      {{ $t("YsDataPage.add_base_btn") }}
+                    </span>
+                  </template>
+
+                  <span v-else>{{ row[item.key] }}</span>
+                </template>
+              </el-table-column>
+
+              <div slot="empty" style="padding: 100px 0">
+                <tableNoData :text="$t('Table.prompt_slogan')" size="mini" />
+              </div>
+            </el-table>
+
+            <div style="height: 35px; margin: 20px 0px">
+              <el-pagination
+                layout="total,prev,pager,next,jumper"
+                background
+                :current-page="treeDataMeta.page"
+                @current-change="handleCurrentChange"
+                :page-size="treeDataMeta.pageSize"
+                :total="treeDataMeta.total"
+                style="float: right"
+              >
+              </el-pagination>
+            </div>
+          </div>
+        </div>
+        <div
+          v-else-if="showType == 'detail'"
+          class="tree-container tree-height"
+          v-infinite-scroll="loadUpdate"
+          :infinite-scroll-disabled="updateLoadingMore.isEnd"
+          infinite-scroll-distance="10"
+          infinite-scroll-immediate="false"
+        >
+          <div class="tree-header">
+            <span class="title-tip">{{ $t("Edb.Detail.edb_detail") }}</span>
+            <!-- 加入指标库 -->
+            <span
+              v-if="
+                !detailData.EdbExist &&
+                permissionBtn.isShowBtn(
+                  'dataSourcePermission',
+                  'lzzxData_addEdb'
+                )
+              "
+              class="title-tip"
+              style="color: #0052d9; cursor: pointer"
+              @click="checkAddEdb(detailData)"
+              >{{ $t("ManualEdbListPage.add_tobase_btn") }}</span
+            >
+          </div>
+          <div class="table-wrap">
+            <el-table
+              :data="[detailData]"
+              ref="detailTable"
+              border
+              style="margin: 8px 0 0 0"
+            >
+              <el-table-column
+                v-for="item in detailColumns"
+                :key="item.label"
+                :label="item.label"
+                :prop="item.key"
+                :width="item.widthsty"
+                align="center"
+              ></el-table-column>
+            </el-table>
+          </div>
+          <div
+            v-if="detailData.DataList && detailData.DataList.length > 0"
+            class="table-wrap"
+          >
+            <el-table
+              :data="detailData.DataList"
+              ref="updateTable"
+              :show-header="false"
+              border
+            >
+              <el-table-column
+                v-for="item in updateColumns"
+                :key="item.label"
+                :label="item.label"
+                :prop="item.key"
+                :width="item.widthsty"
+                align="center"
+              ></el-table-column>
+            </el-table>
+          </div>
+        </div>
+
+        <div v-else class="nodata-cont">
+          <tableNoData :text="$t('Table.prompt_slogan')" />
+        </div>
+      </div>
+    </div>
+
+    <!-- 添加到指标库弹窗 -->
+    <el-dialog
+      v-if="addEdbDialog.show"
+      :title="$t('YsDataPage.add_base_btn')"
+      :visible.sync="addEdbDialog.show"
+      :close-on-click-modal="false"
+      :modal-append-to-body="false"
+      @close="addEdbDialog.show = false"
+      width="556px"
+      v-dialogDrag
+      center
+    >
+      <div style="box-sizing: border-box; padding: 15px 35px">
+        <el-form
+          ref="addEdbForm"
+          :model="addEdbDialog.data"
+          label-width="88px"
+          label-position="left"
+          :rules="addEdbDialogRules"
+        >
+          <el-form-item prop="IndexName" :label="$t('Edb.Detail.e_name')">
+            <el-input
+              v-model="addEdbDialog.data.IndexName"
+              clearable
+              style="width: 100%"
+              :placeholder="
+                $t('Edb.InputHolderAll.input_common', {
+                  label: this.$t('Edb.Detail.e_name'),
+                })
+              "
+            ></el-input>
+          </el-form-item>
+          <el-form-item :label="$t('Edb.Detail.e_menu')" prop="Classify_Id">
+            <el-cascader
+              v-model="addEdbDialog.data.Classify_Id"
+              :placeholder="$t('Edb.InputHolderAll.input_menu')"
+              :options="edbCatalogList"
+              style="width: 100%"
+              :props="{
+                label: 'ClassifyName',
+                value: 'ClassifyId',
+                children: 'Children',
+                checkStrictly: true,
+                emitPath: false,
+              }"
+            ></el-cascader>
+          </el-form-item>
+          <el-form-item :label="$t('Edb.Detail.e_fre')" prop="Frequency">
+            <el-select
+              v-model="addEdbDialog.data.Frequency"
+              :placeholder="$t('Edb.InputHolderAll.input_fre')"
+              style="width: 100%"
+            >
+              <el-option
+                v-for="i in frequencyList"
+                :key="i.label"
+                style="width: 100%"
+                :label="i.label"
+                :value="i.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item :label="$t('Edb.Detail.e_unit')" prop="Unit">
+            <selectUnit v-model="addEdbDialog.data.Unit" />
+          </el-form-item>
+        </el-form>
+      </div>
+
+      <div style="text-align: center; margin-bottom: 30px">
+        <el-button @click="addEdbDialog.show = false" style="width: 120px">{{
+          $t("Dialog.cancel_btn")
+        }}</el-button>
+        <el-button
+          type="primary"
+          @click="handleAddEdb"
+          :loading="btnLoading"
+          style="width: 120px"
+          >{{ $t("Dialog.confirm_save_btn") }}</el-button
+        >
+      </div>
+    </el-dialog>
+
+    <!-- 批量加入指标库弹框 -->
+    <batchAddToEdbDialog
+      ref="batchAddToEdbDialog"
+      :isShow.sync="batchAddDialog.show"
+      :list="batchAddDialog.addToBaseList"
+      @handleCheckName="handleCheckName"
+    ></batchAddToEdbDialog>
+
+    <!-- 操作提示弹窗 -->
+    <el-dialog
+      :title="$t('BloombergPage.operation_prompt')"
+      :visible.sync="isHintDialog.show"
+      :close-on-click-modal="false"
+      :modal-append-to-body="false"
+      @close="isHintDialog.show = false"
+      width="578px"
+      v-dialogDrag
+      center
+    >
+      <div class="hint-dialog-wrap">
+        <p style="margin-bottom: 20px">{{ hintText }}</p>
+        <ul class="hint-dialog-content">
+          <li
+            v-for="(item, index) in isHintDialog.existEdbList"
+            :key="index"
+            class="hint-item"
+            @click="goToEdbBase(item)"
+          >
+            {{ index + 1 }}、{{ item.IndexName }}({{ item.IndexCode }})
+          </li>
+        </ul>
+      </div>
+      <div style="text-align: center; margin-bottom: 30px">
+        <el-button type="primary" @click="handleCloseHintDia">{{
+          $t("Dialog.known")
+        }}</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import leftMixin from "./mixins/leftMixin.js";
+import { frequencySelectList } from "@/utils/defaultOptions";
+import { dataBaseInterface } from "@/api/api.js";
+import batchAddToEdbDialog from "./components/batchAddToEdbDialog.vue";
+import { lzzxInterface } from "@/api/modules/thirdBaseApi";
+import http from "@/api/http.js";
+import axios from "axios";
+export default {
+  mixins: [leftMixin],
+  components: { batchAddToEdbDialog },
+  data() {
+    return {
+      exportUrl: "/entry/data/export/oilchemList", //数据导出接口,
+      isLeftWrapShow: true,
+      search_txt: "", //搜索框内容
+      classifyList: [], //分类
+      dataloading: false,
+      btnLoading: false,
+      exportLoading: false,
+      select_classify: "", //选中的classifyid
+      index_code: "", //选中的indexCode
+      showType: "", //tree目录表格  detail详情
+      edbCatalogList: [], //指标目录
+
+      isIndeterminate: false,
+      isCheckAll: false, //与isIndeterminate一起表示列表全选的状态
+      isSelectAll: false, //是否勾选了列表全选:为true时,selectList是剔除的指标,为false时selectList是已选择的指标
+      selectList: [], //已选择/已剔除的指标id
+      selectionReactCancel: false, //select-事件触发时,为true;该事件触发完成后,为false;
+
+      tableTreeData: [], //目录表格数据
+      treeDataMeta: {
+        pageSize: 10,
+        page: 1,
+        total: 0,
+      }, //目录分页信息
+      addEdbDialog: {
+        //添加指标库
+        title: "加入指标库",
+        show: false,
+        data: {},
+      },
+      isHintDialog: {
+        //筛选掉的弹框
+        show: false,
+        existEdbList: [],
+      },
+
+      batchAddDialog: {
+        //批量加入指标库
+        show: false,
+        addToBaseList: [],
+      },
+
+      detailData: {
+        DataList: [],
+      }, //详情信息
+      updateLoadingMore: {
+        isLoading: false,
+        isEnd: false,
+        page: 1,
+        pageSize: 30,
+      }, //加载更多更新信息
+    };
+  },
+
+  computed: {
+    treeColumns() {
+      return [
+        {
+          label: this.$t("Edb.Detail.e_id"),
+          key: "IndexCode",
+          widthsty: "190px",
+        },
+        {
+          label: this.$t("Edb.Detail.e_name"),
+          key: "IndexName",
+        },
+        {
+          label: this.$t("Edb.Detail.e_fre"),
+          key: "Frequency",
+          widthsty: "117px",
+        },
+        {
+          label: this.$t("Edb.Detail.e_unit"),
+          key: "Unit",
+          widthsty: "117px",
+        },
+        {
+          label: /* '最新日期' */ this.$t("Chart.option_date_type_new"),
+          key: "DataTime",
+          widthsty: "127px",
+        },
+        {
+          label: /* '最新值' */ this.$t("Edb.Detail.e_latest_value"),
+          key: "Value",
+          widthsty: "117px",
+        },
+        {
+          label: this.$t("Table.column_operations"),
+          key: "Handle",
+          widthsty: "180px",
+        },
+      ];
+    },
+    detailColumns() {
+      return [
+        {
+          label: this.$t("Edb.Detail.e_id"),
+          key: "IndexCode",
+          widthsty: "230px",
+        },
+        {
+          label: this.$t("Edb.Detail.e_name"),
+          key: "IndexName",
+        },
+        {
+          label: this.$t("Edb.Detail.e_fre"),
+          key: "Frequency",
+          widthsty: "140px",
+        },
+        {
+          label: this.$t("Edb.Detail.e_unit"),
+          key: "Unit",
+          widthsty: "140px",
+        },
+        {
+          label: /* '更新时间' */ this.$t("Edb.Detail.e_update_time"),
+          key: "ModifyTime",
+          widthsty: "280px",
+        },
+      ];
+    },
+    updateColumns() {
+      return [
+        {
+          label: this.$t("Edb.Detail.e_update_time"),
+          key: "DataTime",
+        },
+        {
+          label: this.$t("Edb.Detail.e_update_data"),
+          key: "Value",
+        },
+      ];
+    },
+    hintText() {
+      let key = 0;
+      if (this.isHintDialog.existEdbList.length) key++;
+      if (!this.batchAddDialog.addToBaseList.length) key++;
+
+      return {
+        0: "",
+        1: this.$t("YsDataPage.haved_some_msg"), //指标库中已存在以下指标,会自动过滤!
+        2: this.$t("YsDataPage.haved_all_msg"), //本次添加的指标均已在指标库中,请勿重复添加!
+      }[key];
+    },
+    //添加指标库
+    addEdbDialogRules() {
+      return {
+        IndexName: [
+          {
+            required: true,
+            message: this.$t("Edb.InputHolderAll.input_common", {
+              label: this.$t("Edb.Detail.e_name"),
+            }),
+            trigger: "blur",
+          },
+        ],
+        Frequency: [
+          {
+            required: true,
+            message: this.$t("Edb.InputHolderAll.input_fre"),
+            trigger: "blur",
+          },
+        ],
+        Unit: [
+          {
+            required: true,
+            message: this.$t("Edb.InputHolderAll.input_unit"),
+            trigger: "blur",
+          },
+        ],
+        Classify_Id: [
+          {
+            required: true,
+            message: this.$t("Edb.InputHolderAll.input_menu"),
+            trigger: "blur",
+          },
+        ],
+      };
+    },
+    frequencyList() {
+      return frequencySelectList();
+    },
+    currentLang() {
+      return this.$store.state.lang;
+    },
+  },
+
+  created() {
+    this.getClassify(); //获取分类
+    this.getEdbCatalog(); //获取指标库目录
+    this.initTableData(); //默认展示全部指标
+  },
+
+  methods: {
+    /* 获取分类 */
+    getClassify() {
+      lzzxInterface.classifyList().then((res) => {
+        if (res.Ret != 200) return;
+        res.Data.map((item) => {
+          item.UniqueCode = `lzzxclassify_${item.BaseFromOilchemClassifyId}_${item.ParentID}`;
+          item.Children = [];
+        });
+        this.classifyList = res.Data || [];
+      });
+    },
+    //默认展示全部指标
+    initTableData() {
+      this.showType = "tree";
+      this.select_node = null;
+      this.select_classify = "";
+      this.getTableData();
+    },
+    //获取指标表格
+    getTableData() {
+      this.dataloading = true;
+      let p = {
+        CurrentIndex: this.treeDataMeta.page,
+        PageSize: this.treeDataMeta.pageSize,
+        ClassifyId: this.select_classify || 0,
+      };
+      lzzxInterface
+        .indexList(p)
+        .then((res) => {
+          this.dataloading = false;
+          this.tableTreeData = res.Data.List || [];
+          this.treeDataMeta.page = res.Data.Paging.CurrentIndex;
+          this.treeDataMeta.total = res.Data.Paging.Totals;
+          this.adjustSelection(); //表格跨页多选的判断
+        })
+        .catch((err) => {
+          this.dataloading = false;
+        });
+    },
+    async handleCheckEdb() {
+      if (!this.selectList.length && !this.isSelectAll)
+        return this.$message.warning(
+          this.$t("Edb.InputHolderAll.input_select_edb")
+        );
+      this.btnLoading = true;
+      let IndexCodes = [];
+      if (this.isSelectAll) {
+        let result = await lzzxInterface.indexList({
+          CurrentIndex: 1,
+          PageSize: 99999,
+          ClassifyId: this.select_classify || 0,
+        });
+        if (result.Ret != 200) return (this.btnLoading = false);
+        if (this.selectList && this.selectList.length > 0) {
+          let r = this.selectList.map((_) => _.IndexCode);
+          IndexCodes = result.Data.List.filter(
+            (_) => !r.includes(_.IndexCode)
+          ).map((_) => _.IndexCode);
+        } else {
+          IndexCodes = result.Data.List.map((_) => _.IndexCode);
+        }
+      } else {
+        IndexCodes = this.selectList.map((_) => _.IndexCode);
+      }
+
+      lzzxInterface
+        .addCheck({
+          //接口没有全选  需要前置处理
+          IndexCodes,
+        })
+        .then((res) => {
+          this.btnLoading = false;
+          if (res.Ret !== 200) return;
+          const edbList = res.Data || [];
+          this.isHintDialog.existEdbList = edbList.filter(
+            (i) => i.EdbExist === 1
+          );
+          this.batchAddDialog.addToBaseList = edbList.filter(
+            (i) => i.EdbExist === 0
+          );
+
+          this.isHintDialog.existEdbList.length &&
+            (this.isHintDialog.show = true);
+          !this.isHintDialog.existEdbList.length && this.handleCloseHintDia();
+        })
+        .catch((err) => {
+          this.btnLoading = false;
+        });
+    },
+    async handleExport() {
+      this.exportLoading = true;
+      let params = {
+        IndexCode: this.showType == "tree" ? [] : [this.detailData.IndexCode],
+        ClassifyId: this.showType == "tree" ? this.select_classify || 0 : 0,
+        IsSelectedAll: this.showType == "tree",
+      };
+      axios({
+        //导出excel
+        method: "post",
+        url: this.exportUrl,
+        baseURL: process.env.VUE_APP_API_ROOT,
+        data: params,
+        timeout: 600000,
+        headers: { "Content-Type": "application/json; charset=utf-8" },
+        responseType: "blob",
+      })
+        .then((res) => {
+          this.exportLoading = false;
+          const blob = new Blob([res.data], {
+            type: "application/vnd.ms-excel;charset=utf-8",
+          });
+          let fileName =
+            "隆众资讯" + http.dateFormatter(new Date(), false) + ".xlsx";
+          if (this.showType != "tree")
+            fileName =
+              this.detailData.IndexName +
+              http.dateFormatter(new Date(), false) +
+              ".xlsx";
+
+          const elink = document.createElement("a");
+          elink.download = fileName; //命名下载名称
+          elink.style.display = "none";
+          elink.href = URL.createObjectURL(blob);
+          document.body.appendChild(elink);
+          elink.click(); // 点击下载
+          URL.revokeObjectURL(elink.href); // 释放URL 对象
+          document.body.removeChild(elink); // 释放标
+        })
+        .catch((err) => {
+          this.exportLoading = false;
+        });
+    },
+    //搜索
+    async handleSearch(query, cb) {
+      //2.0.6 搜索
+      if (!query) return;
+      const res = await lzzxInterface.indexSearch({
+        Keyword: query,
+      });
+      if (res.Ret === 200) {
+        let arr = res.Data || [];
+        if (!arr.length) {
+          cb([{ nodata: true }]);
+        } else {
+          cb(arr);
+        }
+      }
+    },
+    // 选中搜索值
+    handleSelect(e) {
+      if (!e.IndexCode) return;
+
+      this.select_node = `${e.IndexCode}_${e.BaseFromOilchemIndexId}_${e.ClassifyId}`;
+      let _ = this.classifyList.find(
+        (item) => item.BaseFromOilchemClassifyId == e.ClassifyId
+      );
+      let params = {
+        code: this.select_node,
+        selectClassifyNodes: [_.UniqueCode],
+      };
+      this.selectCurrentNode(params);
+      this.select_classify = e.ClassifyId;
+      this.index_code = e.IndexCode;
+
+      this.nodeChangeInit();
+      this.search_txt = e.IndexName;
+      this.showType = "detail";
+      this.getDetailData();
+    },
+
+    /* 改变节点 */
+    nodeChangeHandle(data, node) {
+      if (this.dataloading)
+        return this.$message(this.$t("MsgPrompt.request_frequency"));
+
+      //如果点击的是目录
+      if (node.level == 1) {
+        this.select_node = data.UniqueCode;
+        this.index_code = "";
+        this.nodeChangeInit();
+        this.select_classify = data.BaseFromOilchemClassifyId;
+        this.showType = "tree";
+        this.getTableData();
+      }
+
+      //如果点击的是指标 并且有权限
+      if (
+        node.level != 1 &&
+        this.permissionBtn.isShowBtn("dataSourcePermission", "lzzxData_view")
+      ) {
+        this.select_node = data.UniqueCode;
+        this.index_code = data.IndexCode;
+        this.nodeChangeInit();
+        this.select_classify = data.ClassifyId;
+        this.showType = "detail";
+        this.getDetailData();
+      }
+    },
+    //el-tree的懒加载
+    async getLazyTreeData(node, resolve) {
+      let arr = [];
+      if (node.level == 1) {
+        let result = await lzzxInterface.indexList({
+          ClassifyId: node.data.BaseFromOilchemClassifyId,
+          PageSize: 99999,
+          CurrentIndex: 1,
+        });
+        if (result.Ret != 200) return;
+        result.Data.List &&
+          result.Data.List.map((item) => {
+            item.UniqueCode = `${item.IndexCode}_${item.BaseFromOilchemIndexId}_${item.ClassifyId}`;
+            item.Children = null;
+            item.isLeaf = true;
+            item.ClassifyName = item.IndexName;
+          });
+        arr = result.Data.List || [];
+      } else {
+        arr = node.data.Children || [];
+      }
+      resolve(arr);
+    },
+    //切换点击时的初始化
+    nodeChangeInit() {
+      this.search_txt = "";
+      this.isIndeterminate = false;
+      this.isCheckAll = false;
+      this.isSelectAll = false;
+      this.selectList = [];
+      this.selectionReactCancel = false;
+      this.treeDataMeta.page = 1;
+      this.treeDataMeta.total = 0;
+      this.detailData = { DataList: [] };
+      this.updateLoadingMore.isEnd = false;
+      this.updateLoadingMore.page = 1;
+      $("#right")[0].scrollTop = 0;
+    },
+    adjustSelection() {
+      this.selectionReactCancel = true;
+      if (!this.isSelectAll) {
+        this.selectList.map((_) => {
+          let row = this.tableTreeData.find(
+            (item) => item.IndexCode == _.IndexCode
+          );
+          if (row) {
+            //设置部分选中
+            setTimeout(() => {
+              this.$refs.treeTable.toggleRowSelection(row, true);
+            }, 20);
+          }
+        });
+      } else {
+        this.$refs.treeTable && this.$refs.treeTable.toggleAllSelection();
+        this.selectList.map((_) => {
+          let row = this.tableTreeData.find(
+            (item) => item.IndexCode == _.IndexCode
+          );
+          if (row) {
+            //设置部分不勾选
+            setTimeout(() => {
+              this.$refs.treeTable.toggleRowSelection(row, false);
+            }, 20);
+          }
+        });
+      }
+      setTimeout(() => {
+        this.selectionReactCancel = false;
+      }, 30);
+    },
+    handleCurrentChange(page) {
+      $("#right")[0].scrollTop = 0;
+      this.treeDataMeta.page = page;
+      this.getTableData();
+    },
+    checkAddEdb(row) {
+      this.addEdbDialog.data = Object.assign({}, row, { Classify_Id: "" });
+      this.addEdbDialog.show = true;
+    },
+    async handleAddEdb() {
+      const { Classify_Id, Frequency, IndexName, IndexCode, Unit } =
+        this.addEdbDialog.data;
+
+      this.$refs.addEdbForm.validate(async (valid) => {
+        if (!valid) return;
+
+        this.btnLoading = true;
+        // 名称检测
+        let result = await lzzxInterface.nameCheck([
+          { EdbCode: IndexCode, EdbName: IndexName },
+        ]);
+        if (result.Ret != 200) return (this.btnLoading = false);
+        if (result.Data && result.Data.length > 0 && result.Data[0].Exist) {
+          this.btnLoading = false;
+          return this.$message.warning(
+            this.$t("BloombergPage.add_edb_check_hint2")
+          );
+        }
+
+        //修改接口
+        lzzxInterface
+          .batchAdd([
+            {
+              EdbCode: IndexCode,
+              EdbName: IndexName,
+              Frequency: Frequency,
+              Unit: Unit,
+              ClassifyId: Classify_Id,
+            },
+          ])
+          .then((res) => {
+            this.btnLoading = false;
+            if (res.Ret != 200) return;
+            this.addEdbDialog.show = false;
+            this.$message.success(this.$t("MsgPrompt.add_msg2"));
+            if (this.showType == "tree") {
+              this.getTableData();
+            } else {
+              this.nodeChangeInit();
+              this.getDetailData();
+            }
+          })
+          .catch((err) => {
+            this.btnLoading = false;
+          });
+      });
+    },
+    loadUpdate() {
+      if (this.updateLoadingMore.isLoading) return;
+      this.updateLoadingMore.page += 1;
+      this.getDetailData();
+    },
+
+    getDetailData() {
+      //获取详情信息
+      this.dataloading = true;
+      this.updateLoadingMore.isLoading = true;
+      lzzxInterface
+        .dataList({
+          PageSize: this.updateLoadingMore.pageSize,
+          CurrentIndex: this.updateLoadingMore.page,
+          ClassifyId: this.select_classify,
+          IndexCode: this.index_code,
+        })
+        .then((res) => {
+          this.dataloading = false;
+          this.updateLoadingMore.isLoading = false;
+          if (res.Ret != 200) return;
+          this.detailData.IndexCode = res.Data.IndexCode;
+          this.detailData.IndexName = res.Data.IndexName;
+          this.detailData.Frequency = res.Data.Frequency;
+          this.detailData.Unit = res.Data.Unit;
+          this.detailData.ModifyTime = res.Data.ModifyTime;
+          this.detailData.EdbExist = res.Data.EdbExist;
+          this.detailData.DataList = this.detailData.DataList.concat(
+            res.Data.DataList || []
+          );
+
+          this.updateLoadingMore.page = res.Data.Paging.CurrentIndex;
+          this.updateLoadingMore.isEnd = res.Data.Paging.IsEnd;
+        })
+        .catch((err) => {
+          this.dataloading = false;
+          this.updateLoadingMore.isLoading = false;
+        });
+    },
+    listCheckAllChange(value) {
+      this.selectList = [];
+      this.isSelectAll = value;
+      this.$refs.treeTable && this.$refs.treeTable.clearSelection();
+      if (value) {
+        this.$refs.treeTable && this.$refs.treeTable.toggleAllSelection();
+      }
+    },
+    selectHandle(selection, row) {
+      if (this.selectionReactCancel) return;
+      //当前项是选中还是取消选
+      let haveChecked = selection.some((_) => _.IndexCode === row.IndexCode);
+
+      //全选取消选和不全选选中才有意义
+      if (
+        (haveChecked && !this.isSelectAll) ||
+        (!haveChecked && this.isSelectAll)
+      ) {
+        this.selectList.push(row);
+      } else {
+        this.selectList = this.selectList.filter(
+          (_) => _.IndexCode !== row.IndexCode
+        );
+      }
+    },
+    selectAllHandle(selection) {
+      if (this.selectionReactCancel) return;
+      //当前页是选中还是取消
+      let haveChecked = selection && selection.length > 0;
+
+      //全选取消选和不全选选中才有意义
+      if (
+        (haveChecked && !this.isSelectAll) ||
+        (!haveChecked && this.isSelectAll)
+      ) {
+        this.selectList = [...this.selectList, ...this.tableTreeData]; //这里没去重,去重在selectionChange中
+      } else {
+        let pageIds = this.tableTreeData.map((_) => _.IndexCode);
+        this.selectList = this.selectList.filter(
+          (_) => !pageIds.includes(_.IndexCode)
+        );
+      }
+    },
+    selectionChange() {
+      if (this.selectionReactCancel) return;
+      // selectAllHandle的触发在selectionChange后面,将selectionChange的逻辑延迟一下
+      setTimeout(() => {
+        // 去重
+        this.selectList = this.selectList.filter((item, index, arr) => {
+          return arr.findIndex((_) => _.IndexCode == item.IndexCode) == index;
+        });
+        //isSelectAll为true时,selectList表示需要剔除的项
+        //isSelectAll为false时,selectList表示需要勾选的项
+        //全选
+        if (
+          (this.selectList.length == this.treeDataMeta.total &&
+            this.treeDataMeta.total > 0 &&
+            !this.isSelectAll) ||
+          (this.selectList.length == 0 && this.isSelectAll)
+        ) {
+          this.isCheckAll = true;
+          this.isIndeterminate = false;
+          //全不选
+        } else if (
+          (this.selectList.length == 0 && !this.isSelectAll) ||
+          (this.selectList.length == this.treeDataMeta.total &&
+            this.isSelectAll)
+        ) {
+          this.isCheckAll = false;
+          this.isIndeterminate = false;
+          //半选
+        } else {
+          this.isCheckAll = false;
+          this.isIndeterminate = true;
+        }
+      }, 1);
+    },
+    rowClick(data, column) {
+      if (column.type == "selection") return;
+      if (
+        this.permissionBtn.isShowBtn("dataSourcePermission", "lzzxData_view")
+      ) {
+        this.nodeChangeInit();
+        this.select_node = data.UniqueCode;
+        this.select_classify = data.ClassifyId;
+        this.index_code = data.IndexCode;
+
+        this.showType = "detail";
+        this.getDetailData();
+      }
+    },
+    //获取指标目录
+    getEdbCatalog() {
+      dataBaseInterface.menuListV3().then((res) => {
+        if (res.Ret === 200) {
+          this.edbCatalogList = res.Data.AllNodes || [];
+          this.filterNodes(this.edbCatalogList);
+        }
+      });
+    },
+    filterNodes(arr) {
+      arr.length &&
+        arr.forEach((item) => {
+          item.Children.length && this.filterNodes(item.Children);
+          if (!item.Children.length) {
+            item.Children = null;
+          }
+        });
+    },
+    //提示弹窗关闭
+    handleCloseHintDia() {
+      this.isHintDialog.show = false;
+      //判断是否要展示下一个弹窗
+      if (!this.batchAddDialog.addToBaseList.length) return;
+
+      if (this.batchAddDialog.addToBaseList.length > 30)
+        return this.$message.warning(this.$t("BloombergPage.add_edb_hint"));
+
+      this.batchAddDialog.show = true;
+    },
+    //跳转至指标详情
+    goToEdbBase(data) {
+      const { EdbClassifyId, EdbInfoId, UniqueCode } = data || {};
+      const { href } = this.$router.resolve({
+        path: "/database",
+        query: {
+          code: UniqueCode,
+          id: EdbInfoId,
+          classifyId: EdbClassifyId,
+        },
+      });
+      window.open(href, "_blank");
+    },
+    //批量加入指标库
+    handleCheckName(data) {
+      lzzxInterface
+        .nameCheck(
+          data.map((_) => ({ EdbCode: _.IndexCode, EdbName: _.IndexName }))
+        )
+        .then((res) => {
+          if (res.Ret !== 200) return;
+          let existNameArr = res.Data.filter((i) => i.Exist).map(
+            (_) => _.EdbName
+          );
+          this.$refs.batchAddToEdbDialog &&
+            this.$refs.batchAddToEdbDialog.setValue(
+              "existNameArr",
+              existNameArr
+            );
+          if (existNameArr.length) return;
+          this.handleSave(data);
+        });
+    },
+    handleSave(data) {
+      let haveIncomplete = data.some(
+        (_) => !_.IndexName || !_.ClassifyId || !_.Unit
+      );
+      if (haveIncomplete)
+        return this.$message.warning(
+          this.$t("BloombergPage.add_edb_check_hint1")
+        );
+      this.$refs.batchAddToEdbDialog &&
+        this.$refs.batchAddToEdbDialog.setValue("saveLoading", true);
+
+      lzzxInterface
+        .batchAdd(
+          data.map((i) => ({
+            EdbCode: i.IndexCode,
+            EdbName: i.IndexName,
+            Frequency: i.Frequency,
+            Unit: i.Unit,
+            ClassifyId: i.ClassifyId,
+          }))
+        )
+        .then((res) => {
+          this.$refs.batchAddToEdbDialog &&
+            this.$refs.batchAddToEdbDialog.setValue("saveLoading", false);
+          if (res.Ret !== 200) return;
+          this.$message.success(this.$t("MsgPrompt.add_msg2"));
+          this.$refs.batchAddToEdbDialog &&
+            this.$refs.batchAddToEdbDialog.cancelHandle();
+          this.nodeChangeInit();
+          this.getTableData();
+        })
+        .catch((err) => {
+          this.$refs.batchAddToEdbDialog &&
+            this.$refs.batchAddToEdbDialog.setValue("saveLoading", false);
+        });
+    },
+  },
+};
+</script>
+<style scoped lang="scss">
+.lzzxData-container {
+  .data-top-container {
+    padding: 19px;
+    background: #ffffff;
+    border: 1px solid #ececec;
+    border-radius: 4px;
+    margin-bottom: 30px;
+  }
+
+  .lzzxData-inner-container {
+    display: flex;
+    position: relative;
+
+    .slide-btn-icon {
+      &.slide-left {
+        right: 0;
+      }
+
+      &.slide-right {
+        left: 0;
+      }
+    }
+
+    * {
+      box-sizing: border-box;
+    }
+
+    .left-cont {
+      min-width: 330px;
+      width: 330px;
+      flex-shrink: 0;
+      margin-right: 20px;
+      padding: 30px 0;
+      overflow: hidden;
+      position: relative;
+
+      .scroll-wrap {
+        padding: 0 20px;
+        height: calc(100vh - 280px);
+        overflow-y: auto;
+        margin-right: 20px;
+      }
+
+      .target_tree {
+        font-size: 14px;
+        color: #333;
+
+        .label-input .el-input__inner {
+          height: 25px;
+          line-height: 25px;
+        }
+
+        .custom-tree-node {
+          display: flex !important;
+          justify-content: space-between;
+          align-items: center;
+          display: block;
+          flex: 1;
+
+          .node_label {
+            margin-right: 2px;
+          }
+
+          .el-icon-view {
+            color: #409eff;
+            font-size: 18px;
+            margin-left: 5px;
+          }
+        }
+      }
+
+      .move-btn {
+        height: 100%;
+        width: 4px;
+        position: absolute;
+        right: 0px;
+        top: 0;
+
+        &:hover {
+          cursor: col-resize;
+        }
+      }
+    }
+
+    .right-cont {
+      flex: 1;
+      overflow-x: auto;
+      position: relative;
+
+      .title-tip {
+        color: #333333;
+        font-size: 14px;
+      }
+
+      .tree-height {
+        height: 100%;
+        overflow-anchor: none;
+        overflow-y: auto;
+      }
+
+      .tree-container {
+        .tree-header {
+          margin-top: 8px;
+          display: flex;
+          align-items: center;
+          justify-content: space-between;
+          height: 48px;
+          box-sizing: border-box;
+          padding: 0 16px;
+          color: #333;
+        }
+
+        .table-wrap {
+          padding: 0 16px;
+        }
+      }
+
+      .nodata-cont {
+        width: 150px !important;
+        text-align: center;
+        color: #666;
+        font-size: 16px;
+        margin: 0 auto;
+      }
+    }
+  }
+}
+
+.minHeight {
+  height: calc(100vh - 230px);
+  background-color: #fff;
+  box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
+  border-radius: 4px;
+}
+
+.hint-dialog-wrap {
+  padding-bottom: 30px;
+
+  .hint-dialog-content {
+    max-height: 40vh;
+    overflow: auto;
+  }
+
+  .hint-item {
+    cursor: pointer;
+    margin-bottom: 10px;
+
+    &:hover {
+      color: #409eff;
+      text-decoration: underline;
+    }
+  }
+}
+</style>
+<style lang="scss">
+.lzzxData-container {
+  .el-table {
+    tr:nth-of-type(2n-1) {
+      background-color: #fff;
+    }
+
+    .el-table__header-wrapper th.is-leaf {
+      background-color: #ebeef5 !important;
+    }
+  }
+
+  .el-tree__drop-indicator {
+    height: 3px;
+    background-color: #409eff;
+  }
+
+  .el-tree-node__content {
+    margin-bottom: 14px !important;
+  }
+
+  .el-tree-node__children {
+    .el-tree-node {
+      margin-bottom: 0px !important;
+      padding-left: 18px;
+    }
+
+    .el-tree-node__content {
+      margin-bottom: 5px !important;
+      padding-left: 0 !important;
+    }
+  }
+
+  .expanded.el-icon-caret-right:before {
+    content: url("~@/assets/img/set_m/down.png") !important;
+  }
+
+  .el-icon-caret-right:before {
+    content: url("~@/assets/img/set_m/slide.png") !important;
+  }
+
+  .el-tree-node__expand-icon.is-leaf.el-icon-caret-right:before {
+    content: "" !important;
+  }
+
+  .el-tree-node__expand-icon.expanded {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+
+  .el-tree-node.is-current > .el-tree-node__content {
+    background-color: #f0f4ff !important;
+  }
+
+  .el-tree-node__content {
+    padding-right: 10px !important;
+  }
+
+  .el-cascader .el-input {
+    width: 100%;
+  }
+}
+</style>

+ 2 - 3
src/views/dataEntry_manage/thirdBase/mixins/leftMixin.js

@@ -51,12 +51,12 @@ export default {
       this.$nextTick(()=>{
         setTimeout(() => {
           this.$refs.treeRef.setCurrentKey(this.select_node);
-        }, 300);
+        }, 400);
       })
       
       // // 重置筛选状态
       this.edb_id = id;
-      this.getFrequency();
+      this.getFrequency && this.getFrequency();
     },
 
     // 查找树节点所有父节点
@@ -77,7 +77,6 @@ export default {
 
     /* 拖动时node宽度跟随变化 */
     resetNodeStyle: _.debounce(function(node) {
-      console.log(node);
 			const tree = $('.target_tree')[0];
 			let width = tree.offsetWidth;
 			let label_wid =

+ 8 - 8
src/views/dataEntry_manage/thirdBase/ysTargetBase.vue

@@ -128,14 +128,14 @@
                 <td v-for="(data, sub_index) in edbIndexDatas" :key="sub_index" :colspan="2" 
                 :class="highLightIndex.includes(data.EdbName) && item=='EdbName' ?'exist-highlight':''">
                   <template v-if="item === 'ClassifyId'">
-                    <el-cascader :options="options" v-model="data[item]" :placeholder="$t('Edb.InputHolderAll.input_menu')"
-                    size="mini" :disabled="!data.Source"
-                    :props="{label: 'ClassifyName',
-                      value: 'ClassifyId',
-                      children: 'Children',
-                      checkStrictly: true,
-                      emitPath:false}">
-                    </el-cascader>
+                    <cascader
+                      :options="options"
+                      v-model="data[item]"
+                      :placeholder="$t('Edb.InputHolderAll.input_menu')"
+                      size="mini"
+                      :disabled="!data.Source"
+                      :config="{ checkStrictly: true, emitPath: false }"
+                    />
                   </template>
                   <template v-else-if="item === 'Unit'">
                     <el-autocomplete

+ 1335 - 0
src/views/dataEntry_manage/thirdBase/zhuochuangRedStageBase.vue

@@ -0,0 +1,1335 @@
+<template>
+  <div class="sciHongqiData-page" id="box">
+    <div class="header">
+      <div class="left-btn">
+        <el-button
+          v-permission="permissionBtn.dataSourcePermission.sciHongqi_batch_addBase"
+          type="primary" 
+          size="medium" 
+          @click="handleBatchAddBase"
+        ><!-- 批量加入指标库 -->{{$t('SteelChemicalPage.batch_add_edb_btn')}}</el-button>
+        <el-button
+          v-permission="permissionBtn.dataSourcePermission.sciHongqi_batch_del"
+          type="primary" 
+          size="medium"
+          plain
+          @click="handBatchDelEdb"
+        ><!-- 批量删除 -->{{$t('SciHongqiPage.btn_batch_del')}}</el-button>
+        <el-button
+          v-permission="permissionBtn.dataSourcePermission.sciHongqi_batch_edit"
+          type="primary" 
+          size="medium"
+          plain
+          @click="handleBatchEdit"
+        ><!-- 批量编辑 -->{{$t('SciHongqiPage.btn_batch_edit')}}</el-button>
+      </div>
+
+      <div class="right-wrap">
+       <el-button
+          v-permission="permissionBtn.dataSourcePermission.sciHongqi_export"
+          type="text"
+          @click="exportClick"
+          :loading="btnload"
+        ><!-- 导出Excel -->{{$t('Common.exp_excel')}}</el-button>
+
+        <el-select
+					v-model="leftSearchVal"
+					ref="searchRef"
+					:filterable="!leftSearchVal"
+					remote
+					clearable
+					:placeholder="$t('Edb.InputHolderAll.input_name_orid')"
+					style="width: 260px;margin-left:10px;"
+					:remote-method="searchHandle"
+				>
+					<i slot="prefix" class="el-input__icon el-icon-search"></i>
+					<el-option
+						v-for="item in searchOptions"
+						:key="item.BaseFromSciHqIndexId"
+						:label="item.IndexName"
+						:value="item.BaseFromSciHqIndexId"
+					/>
+				</el-select>
+      </div>
+    </div>
+    <div class="main">
+      <span
+          v-show="!isLeftWrapShow"
+          class="slide-btn-icon slide-right"
+          @click="isLeftWrapShow = !isLeftWrapShow"
+      >
+          <i :class="{'el-icon-d-arrow-left':isLeftWrapShow,'el-icon-d-arrow-right':!isLeftWrapShow}"></i>
+      </span>
+      <div class="left-cont minHeight" v-show="isLeftWrapShow">
+          <span
+              v-show="isLeftWrapShow"
+              class="slide-btn-icon slide-left"
+              @click="isLeftWrapShow = !isLeftWrapShow"
+          >
+              <i :class="{'el-icon-d-arrow-left':isLeftWrapShow,'el-icon-d-arrow-right':!isLeftWrapShow}"></i>
+          </span>
+
+        <div class="scroll-wrap">
+          <el-tree
+            ref="treeRef"
+            class="target_tree"
+            :data="classifyList"
+            node-key="UniqueCode"
+            :props="{
+              label: 'ClassifyName',
+              children: 'Children',
+              isLeaf:'isLeaf'
+            }"
+            :allow-drag="permissionBtn.isShowBtn('dataSourcePermission','sciHongqi_classify_move')"
+            :allow-drop="canDropHandle"
+            :current-node-key="select_node"
+            :default-expanded-keys="defaultShowNodes"
+            draggable
+            :expand-on-click-node="false"
+            check-strictly
+            empty-text="暂无分类"
+            lazy
+            :load="getLazyTreeData"
+            @node-expand="handleNodeExpand"
+            @node-collapse="handleNodeCollapse"
+            @current-change="nodeChangeHandle"
+            @node-drop="dropOverHandle"
+          >
+            <div class="custom-tree-node" slot-scope="{ node, data }">
+              <div
+                class="text_oneLine"
+                :style="`width:${
+                  select_node === data.UniqueCode ? '60%' :'100%'
+                }`"
+              >
+                <span v-if="data.IndexCode">{{data.IndexName}}</span>
+                <span v-else>
+                  {{ currentLang==='zh' ? data.ClassifyName : data.ClassifyNameEn }}
+                </span>
+              </div
+              >
+              <div v-if="select_node===data.UniqueCode&&data.ClassifyId">
+                <img
+                  src="~@/assets/img/data_m/move_ico.png"
+                  v-if="permissionBtn.isShowBtn('dataSourcePermission','sciHongqi_classify_move')"
+                  style="width: 16px; height: 16px; margin-right: 5px"
+                  @click.stop="clickClassifyHandle('move', data, node)"
+                />
+                <img
+                  src="~@/assets/img/set_m/add.png"
+                  style="width: 16px; height: 16px; 
+                  margin-right: 5px"
+                  v-if="node.level===1&&permissionBtn.isShowBtn('dataSourcePermission','sciHongqi_classify_add')"
+                  @click.stop="clickClassifyHandle('add', data, node)"
+                />
+                <img
+                  src="~@/assets/img/set_m/edit.png"
+                  v-if="node.level!==3&&permissionBtn.isShowBtn('dataSourcePermission','sciHongqi_classify_edit')"
+                  alt=""
+                  style="width: 16px; height: 16px; margin-right: 5px"
+                  @click.stop="clickClassifyHandle('edit', data, node)"
+                />
+                <img
+                  src="~@/assets/img/set_m/del.png"
+                  v-if="node.level!==3&&permissionBtn.isShowBtn('dataSourcePermission','sciHongqi_classify_del')"
+                  alt=""
+                  style="width: 14px; height: 14px"
+                  @click.stop="clickClassifyHandle('del', data, node)"
+                />
+              </div>
+            </div>
+          </el-tree>
+
+          <div class="add-cont" @click="addClassifyHandle(null)" v-if="permissionBtn.isShowBtn('dataSourcePermission','sciHongqi_classify_add')">
+
+            <img
+              src="~@/assets/img/set_m/add_ico.png"
+              alt=""
+              style="width: 16px; height: 16px; margin: 10px"
+            />
+            <span><!-- 添加分类 -->{{$t('SteelChemicalPage.add_classify_btn')}}</span>
+          </div>
+        </div>
+      </div>
+
+      <div
+        class="right-cont minHeight"
+        v-loading="dataloading"
+        :element-loading-text="$t('Table.data_loading')"
+      >
+        <template v-if="!selectEdb">
+          <div class="right-header">
+            <span>{{$t('SciHongqiPage.total_msg',{limit:total})}}</span>
+            <el-checkbox 
+              v-model="filterObj.checkAll"
+              :indeterminate="filterObj.checkSome"
+              :disabled="tableData.length===0"
+              style="margin-left:20px" 
+              @change="listCheckAllChange"
+            ><!-- 列表全选 -->{{$t('SystemManage.OperateAuth.all_select')}}</el-checkbox>
+          </div>
+          
+          <el-table
+            :data="tableData"
+            style="box-shadow: 0px 3px 6px rgba(155, 170, 219, 0.2);margin-top: 20px"
+            border
+            ref="table"
+            @selection-change="selectionChange"
+            @select="selectHandle" 
+            @select-all="selectAllPageHandle"
+          >
+              <el-table-column type="selection"/>
+              <el-table-column
+                v-for="item in tableColums"
+                :key="item.key"
+                :label="item.label"
+                :width="item.widthsty"
+                :min-width="item.minwidthsty"
+                align="center"
+              >
+                <template slot-scope="{row}">
+                  <span v-if="item.key==='IndexName'" class="editsty" @click="nodeChangeHandle(row)">{{row[item.key]}}</span>
+                  <span v-else>{{row[item.key]}}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                :label="$t('Table.column_operations')"
+                align="center"
+                min-width="200"
+              >
+                <template slot-scope="{row}">
+                  <div>
+                    <span
+                      v-if="permissionBtn.isShowBtn('dataSourcePermission','sciHongqi_opera_edit')"
+                      class="editsty" 
+                      @click="handleEdb({item:row,type:'edit'})"
+                    >{{$t('Table.edit_btn')}}</span>
+
+                    <span v-if="!row.EdbExist&&permissionBtn.isShowBtn('dataSourcePermission','sciHongqi_opera_addBase')" class="editsty" @click="handleEdb({item:row,type:'addToBase'})"><!-- 加入指标库 -->{{$t('ManualEntryPage.add_tobase')}}</span>
+
+                    <span 
+                      v-if="!row.EdbExist&&permissionBtn.isShowBtn('dataSourcePermission','sciHongqi_opera_del')" 
+                      class="deletesty" 
+                      @click="handleEdb({item:row,type:'del'})"
+                    >{{$t('Table.delete_btn')}}</span>
+                  </div>
+
+                  
+                </template>
+              </el-table-column>
+              <div class="nodata" slot="empty">
+                <tableNoData :text="$t('Table.prompt_slogan')" size="mini"/>
+              </div>
+          </el-table>
+            
+          <div style="height:35px;margin: 20px 0;">
+            <m-page
+              :page_no="page_no"
+              :pageSize="pageSize"
+              :total="total"
+              @handleCurrentChange="handlePageChange"
+            />
+          </div>
+        </template>
+
+        <template v-else>
+          <edbDataDetail
+            ref="edbDetailRef"
+            :id="selectEdb"
+            @handle="handleEdb"
+          />
+        </template>
+      </div>
+    </div>
+
+    <!-- 分类弹窗 -->
+    <m-dialog
+      :show.sync="openClassifyDia"
+      width="700px"
+      :title="classifyForm.title==='添加分类'?$t('SteelChemicalPage.add_classify_btn'):$t('SteelChemicalPage.edit_classify_msg')"
+      @close="openClassifyDia = false"
+    >
+      <div class="dialog-cont">
+        <el-form
+          ref="classifyFormRef"
+          label-position="left"
+          hide-required-asterisk
+          label-width="120px"
+          :model="classifyForm"
+          :rules="classifyFormRules"
+          @close="cancelDialogHandle"
+        >
+          <el-form-item :label="$t('SteelChemicalPage.label_one_level')"  v-if="classifyForm.parent_classify_name">
+            <span>{{ classifyForm.parent_classify_name }}</span>
+          </el-form-item>
+          <el-form-item :label="$t('SteelChemicalPage.label_classify_name')" prop="classifyId" v-if="classifyForm.indexId">
+            <el-cascader
+              v-model="classifyForm.classify_id"
+              style="width: 80%"
+              :options="classifyList"
+              :props="{
+                label: 'ClassifyName',
+                value: 'ClassifyIdStr',
+                children: 'Children',
+                emitPath:false
+              }"
+              :placeholder="$t('SteelChemicalPage.ph_classify_name')"
+            />
+          </el-form-item>
+          <el-form-item :label="$t('SteelChemicalPage.label_classify_name')" prop="classify_name" v-else>
+            <el-input
+              v-model="classifyForm.classify_name"
+              style="width: 80%"
+              :placeholder="$t('Dialog.require_vaild')"
+            />
+          </el-form-item>
+        </el-form>
+      </div>
+      <div class="dia-bot">
+        <el-button
+          type="primary"
+          style="margin-right: 20px"
+          @click="saveClassifyHandle"
+          ><!-- 保存 -->{{$t('Dialog.confirm_save_btn')}}</el-button
+        >
+        <el-button type="primary" plain @click="cancelDialogHandle"
+          ><!-- 取消 -->{{$t('Dialog.cancel_btn')}}</el-button
+        >
+      </div>
+    </m-dialog>
+
+    <!-- 批量入库 -->
+    <addToBaseDia
+      :isShow.sync="isAddToBaseDia"
+      :list="addToBaseList"
+      @success="() => { listCheckAllChange(false);handlePageChange(1)}"
+    />
+
+    <!-- 批量编辑index分类 -->
+    <batchEditIndexDia
+      :isShow.sync="isBatchEditIndexDia"
+      :list="addToBaseList"
+      :classifyList="classifyList"
+      @success="getClassify"
+    />
+
+    <!-- 单个添加至指标库弹窗 -->
+    <addIndicsDia 
+      :isOpenDialog="isAddIndicsDiaShow"
+      :edbData="currentIndicData"
+      @close="isAddIndicsDiaShow=false;"
+      @addCallback="intoBaseBack"
+    />
+
+    <!-- 操作提示弹窗 -->
+    <el-dialog 
+      :title="$t('BloombergPage.operation_prompt')"
+      :visible.sync="isHintDialogShow"
+      :close-on-click-modal="false"
+      :modal-append-to-body="false"
+      @close="isHintDialogShow=false"
+      width="578px"
+      v-dialogDrag
+      center>
+      <div class="hint-dialog-wrap">
+          <p style="margin-bottom: 20px;">{{ hintText }}</p>
+          <ul class="hint-list">
+              <li v-for="(item,index) in showHintList" :key="index" :class="{'hint-item':!batchDelList.length}" @click="goToEdbBase(item)">
+                  {{ index+1 }}、{{ item.IndexName }}({{ item.IndexCode }})
+              </li>
+          </ul>
+      </div>
+      <div style="text-align: center;margin-bottom: 30px;">
+          <el-button type="primary" @click="handleCloseHintDia" v-if="existEdbList.length">{{$t('Dialog.known')}}</el-button>
+
+          <template v-if="batchDelList.length">
+            <el-button type="primary" @click="isHintDialogShow=false" plain><!-- 取消 -->{{$t('Dialog.cancel_btn')}}</el-button>
+            <el-button type="primary" @click="handleCloseHintDia"><!-- 确定 -->{{$t('Dialog.confirm_btn')}}</el-button>
+          </template>
+      </div>
+    </el-dialog>
+  </div>
+
+</template>
+
+<script>
+import { zhuochuangRedStageInterface } from "@/api/modules/thirdBaseApi";
+import mDialog from "@/components/mDialog.vue";
+import mPage from '@/components/mPage.vue';
+import edbDataDetail from './components/edbDataDetail.vue';
+import addIndicsDia from './components/addIndicsDia.vue';
+import addToBaseDia from './components/addToBaseDia.vue';
+import batchEditIndexDia from './components/batchEditIndexDia.vue';
+export default {
+  name: "",
+  components: { mDialog,edbDataDetail,mPage,addIndicsDia,addToBaseDia,batchEditIndexDia },
+  computed: {
+    exportGlapi() {
+      // 数据导出接口
+      let urlStr = this.exportBase;
+      // token
+      urlStr += `?${localStorage.getItem("auth") || ""}`;
+      // 指标名称参数
+
+      let IndexCode = this.selectEdb? this.$refs.edbDetailRef.edbInfo.IndexCode : 0
+      urlStr += `&ClassifyId=${this.selectClassify}&IndexCode=${IndexCode}`;
+      return this.escapeStr(urlStr);
+    },
+    
+    currentLang() {
+      return this.$store.state.lang
+    },
+
+    tableColums() {
+      return [
+        {  label: this.$t('Edb.Detail.e_id'),key: 'IndexCode' },
+        {  label: this.$t('Edb.Detail.e_name'),key: 'IndexName',minwidthsty:'150px' },
+        {  label: this.$t('Edb.Detail.e_fre'),key: 'Frequency' },
+        {  label: this.$t('Edb.Detail.e_unit'),key: 'Unit', },
+        {  label: this.$t('Edb.Detail.e_latest_date'),key: 'LatestDate', },
+        {  label: this.$t('Edb.Detail.e_latest_value'),key: 'LatestValue', },
+      ]
+    },
+
+    hintText(){
+        let key = 0
+        if(this.existEdbList.length) key++
+        if(!this.addToBaseList.length) key++
+        if(this.batchDelList.length) key = 3
+
+        return {
+            0:'',
+            1:this.$t('YsDataPage.haved_some_msg'),//指标库中已存在以下指标,会自动过滤!
+            2:this.$t('YsDataPage.haved_all_msg'),//本次添加的指标均已在指标库中,请勿重复添加!
+            3: this.$t('SciHongqiPage.del_msg')
+        }[key]
+    },
+
+    showHintList() {
+      return this.existEdbList.length ? this.existEdbList : this.batchDelList;
+    }
+  },
+  watch: {
+    leftSearchVal(nval) {
+      if(!nval) return
+
+      this.selectEdb = nval;
+      this.selectClassify = 0;
+    }
+  },
+  data() {
+    return {
+      isLeftWrapShow:true,
+      dataloading: false,
+      exportBase:process.env.VUE_APP_API_ROOT + "/datamanage/export/sciHqList", //数据导出接口
+
+      selectClassify:0,
+      leftSearchVal: "",
+      searchOptions: [],
+      classifyList: [],
+      defaultShowNodes: [], //展开节点
+    
+      selectEdb: 0,
+      tableData: [],
+      total:0,
+      page_size: 10,
+      page_no: 1,
+      filterObj: {
+        checkAll: false,
+        checkSome: false,
+      },
+      isSelectAll: false, //真正意义上的全选或不全选
+      checkedList: [], //不全选勾选中的 或 全选取消勾的
+      selectionReactCancel:false,//手动设置选中
+
+      select_node: "",
+
+      /* 分类弹窗 */
+      openClassifyDia: false,
+      classifyForm: {
+        title: "添加分类",
+        classify_name: "",
+        parent_classify_name: "",
+        parent_classify_id: 0,
+      },
+      classifyFormRules: {
+        classify_name: [
+          { required: true, message: /* "分类名称不能为空"  */this.$t('Edb.InputHolderAll.input_common',{label: this.$t('SteelChemicalPage.label_classify_name')}), trigger: "blur" },
+        ],
+      },
+
+      //批量添加指标弹窗
+      isAddToBaseDia: false,
+      addToBaseList: [],//可加入的指标
+      existEdbList: [],//已存在的指标
+      batchDelList: [],
+
+      isAddIndicsDiaShow:false,//单个添加至指标库弹窗
+      currentIndicData:{},//当前选中指标
+
+      //批量编辑
+      isBatchEditIndexDia: false,
+
+      /* 提示弹窗 */
+      isHintDialogShow: false,
+    };
+  },
+  mounted() {
+    this.getClassify();
+    this.getEdbList('init');
+  },
+  methods: {
+    /* 批量入库 */
+    async handleBatchAddBase() {
+      let res = await this.getBatchEdbList()
+      if(!res.Data) return
+
+      const checkRes = await zhuochuangRedStageInterface.batchAddEdbCheck({IndexCodes:res.Data.map(_ => _.IndexCode)})
+      if(checkRes.Ret !== 200) return 
+
+      const edbList = checkRes.Data||[]
+      this.batchDelList = [];
+      this.existEdbList = edbList.filter(i=>i.EdbExist===1)
+      this.addToBaseList = edbList.filter(i=>i.EdbExist===0)
+
+      this.existEdbList.length&&(this.isHintDialogShow=true)
+      !this.existEdbList.length&&this.handleCloseHintDia()
+    },
+
+    /* 批量编辑 */
+    async handleBatchEdit() {
+      let res = await this.getBatchEdbList()
+      if(!res.Data) return
+      
+      this.addToBaseList= res.Data;
+      this.isBatchEditIndexDia = true
+    },
+
+    /* 批量删除 */
+    async handBatchDelEdb() {
+      this.addToBaseList= []
+      this.existEdbList= []
+
+      let res = await this.getBatchEdbList()
+      if(!res.Data) return
+
+      this.batchDelList = res.Data;
+      this.batchDelList.length&&(this.isHintDialogShow=true)
+
+    },
+
+    async handBatchDelApi() {
+      let res = await zhuochuangRedStageInterface.batchDelEdb(
+        this.batchDelList.map(_ => ({ BaseFromSciHqIndexId:_.BaseFromSciHqIndexId }))
+      )
+      if(res.Ret !== 200) return 
+
+      this.$message.success(/* '删除成功!' */this.$t('MsgPrompt.delete_msg'));
+
+      if(res.Data&&res.Data.length){
+        let haveExistStr= res.Data.map(_ => (`${_.IndexName}(${_.IndexCode})`)).join('、')
+        this.$alert(`${haveExistStr}已加入指标库,不可删除,已过滤`,this.$t('Confirm.prompt'),{
+          confirmButtonText: '知道了',
+        })
+      }
+      this.getClassify();
+      this.getEdbList()
+    },
+
+    //提示弹窗关闭
+    async handleCloseHintDia(){
+        this.isHintDialogShow = false
+
+        if(this.batchDelList.length) return this.handBatchDelApi()
+
+        //判断是否要展示下一个弹窗
+        if(!this.addToBaseList.length) return
+        
+        if(this.addToBaseList.length>30) return this.$message.warning('批量添加指标数量不得超过30个!')
+
+        this.isAddToBaseDia = true
+    },
+
+     //跳转至指标详情
+    goToEdbBase(data){
+      if(!data.EdbInfoId) return
+
+      const {EdbClassifyId,EdbInfoId,EdbUniqueCode} = data||{}
+      const { href } = this.$router.resolve({
+          path:'/database',
+          query:{
+              code:EdbUniqueCode,
+              id:EdbInfoId,
+              classifyId:EdbClassifyId,
+          }
+      })
+      window.open(href,"_blank")
+    },
+
+    /* 获取所有批量操作的指标信息 */
+    async getBatchEdbList() {
+      
+      if(!this.checkedList.length && !this.isSelectAll) return this.$message.warning('请选择指标')
+      return new Promise(async(resolve,reject) => {
+        const res = await zhuochuangRedStageInterface.searchEdbBatch({
+          ClassifyId: this.selectClassify,
+          Keyword: this.leftSearchVal,
+          SelectedId: this.checkedList.map(_=>Number(_.BaseFromSciHqIndexId)),
+          isSelectAll: this.isSelectAll
+        })
+
+        resolve(res)
+      })
+      
+    },
+
+    async searchHandle(query) {
+      if(!query) return 
+
+      const res = await zhuochuangRedStageInterface.searchEdb({
+        Keyword: query
+      })
+      if(res.Ret !== 200) return
+
+      this.searchOptions = res.Data || []
+    },
+
+    /* 指标操作 */
+    handleEdb({item,type}) {
+      const typeMap = {
+        'edit': this.handleEditEdb,
+        'addToBase': this.handleAddToBase,
+        'clear': this.handleClear,
+        'del': this.handleDelEdb
+      }
+
+      typeMap[type]&&typeMap[type](item)
+    },
+    
+    /* 编辑指标 */
+    handleEditEdb(item) {
+      this.openClassifyDia = true;
+        this.classifyForm = {
+          title: "编辑分类",
+          classify_name: '',
+          indexId: item.BaseFromSciHqIndexId,
+          classify_id: String(item.ClassifyId),
+          parent_classify_name:"",
+          parent_classify_id: 0,
+        };
+    },
+    async handleEditEdbApi() {
+      const res = await zhuochuangRedStageInterface.edbEdit({
+        BaseFromSciHqIndexId: this.classifyForm.indexId,
+        ClassifyId: Number(this.classifyForm.classify_id)
+      })
+      if(res.Ret !== 200) return 
+      this.$message.success(/* "保存成功" */this.$t('MsgPrompt.saved_msg'));
+      this.cancelDialogHandle();
+
+      this.getClassify();
+      !this.selectEdb && this.getEdbList()
+    },  
+
+    /* 加入指标库 */
+    handleAddToBase(item){
+      //打开弹窗
+      this.currentIndicData = {
+        ...item,
+        FrequencyName: item.Frequency,
+        UnitName: item.Unit
+      }
+      this.isAddIndicsDiaShow = true
+    },
+
+    intoBaseBack() {
+      this.isAddIndicsDiaShow = false
+      if(this.selectedEdb){
+        this.$refs.edbDetailRef.getEdbDetail()
+      }else {
+        this.getEdbList()
+      }
+    },
+    
+    /* 清除 */
+    async handleClear(item) {
+      const res = await zhuochuangRedStageInterface.clearEdbClassify({
+        BaseFromSciHqIndexId: item.BaseFromSciHqIndexId
+      })
+      if(res.Ret !== 200) return 
+      
+      this.$message.success(this.$t('MsgPrompt.clean_classify_msg'));
+      this.getClassify();
+    },
+
+    /* 删除指标 */
+    handleDelEdb(item) {
+     
+      this.$confirm(
+        this.$t('ManualEdbListPage.del_edb_msg'),
+        this.$t('Dialog.warn_tit'),{
+        type:'warning'
+      }).then(async() => {
+        const res = await zhuochuangRedStageInterface.edbDel({
+          BaseFromSciHqIndexId:item.BaseFromSciHqIndexId
+        })
+        
+        if( res.Ret !== 200 ) return
+        this.$message.success(/* '删除成功!' */this.$t('MsgPrompt.delete_msg'));
+        this.selectEdb = 0;
+        this.getClassify();
+        this.getEdbList()
+      }).catch(() => {});
+    },
+
+    /* 获取分类 */
+    getClassify(params = null) {
+      zhuochuangRedStageInterface.classifyList().then((res) => {
+        if (res.Ret !== 200) return;
+        this.classifyList = res.Data || [];
+        this.filterNodes(this.classifyList)
+
+        this.$nextTick(() => {
+          this.select_node = res.Data[0].UniqueCode
+          this.$refs.treeRef.setCurrentKey(this.select_node);
+        });
+      });
+    },
+
+    filterNodes(arr) {
+			arr.length &&
+				arr.forEach((item) => {
+          item.ClassifyIdStr = String(item.ClassifyId)
+          item.disabled=(item.Level===1&&String(item.ClassifyId)!=='0'&&!item.Children.length)?true:false;
+					item.Children&&item.Children.length && this.filterNodes(item.Children);
+					if (!item.Children||!item.Children.length) {
+						delete item.Children;
+					}
+				});
+		},
+
+    //指标懒加载
+    async getLazyTreeData(node,resolve){
+      console.log(node)
+      let arr=[]
+      if(node.level===2||node.data.ClassifyIdStr==='0'){
+        const res=await zhuochuangRedStageInterface.edbListForClassify({
+          ClassifyId:node.data.ClassifyId
+        })
+        if(res.Ret===200){
+          const temarr=res.Data||[]
+          arr=temarr.map(item=>{
+            return {
+              ...item,
+              isLeaf:true
+            }
+          })
+        }
+      }else{
+        arr=node.data.Children||[]
+      }
+
+      resolve(arr)
+    },
+
+    /* 获取数据 */
+    async getEdbList(type='pageChange') {
+      const res = await zhuochuangRedStageInterface.getEdbList({
+        PageSize: this.page_size,
+        CurrentIndex: this.page_no,
+        ClassifyId: this.selectClassify
+      })
+      
+      if(res.Ret !== 200) return 
+
+      this.tableData =res.Data.List||[]
+      this.total = res.Data.Paging.Totals;
+
+      if(type==='filter'){
+          this.listCheckAllChange(true)
+      }else {
+        //页码变化 选中项不做清空
+        this.checkedSomeSelection()
+
+      }
+    },
+
+    /* 设置当页数据勾选状态 */
+    checkedSomeSelection() {
+      this.selectionReactCancel=true
+
+      if(!this.isSelectAll){
+          this.checkedList.map(_ =>{
+              let row = this.tableData.find(item => item.IndexCode===_.IndexCode)
+              if(row){ //设置部分选中
+                  setTimeout(()=>{
+                      this.$refs.table.toggleRowSelection(row,true)
+                  },20)
+              }
+          })
+      }else{
+          this.$refs.table &&this.$refs.table.toggleAllSelection()
+          this.checkedList.map(_ =>{
+              let row = this.tableData.find(item => item.IndexCode===_.IndexCode)
+              if(row){ //设置部分不勾选
+                  setTimeout(()=>{
+                      this.$refs.table.toggleRowSelection(row,false)
+                  },20)
+              }
+          })
+      }
+      setTimeout(()=>{
+          this.selectionReactCancel=false
+      },30)
+    },
+
+    //列表全选或全不选
+    listCheckAllChange(value){
+      this.checkedList = []
+      this.isSelectAll = value
+      this.$refs.table && this.$refs.table.clearSelection()
+
+      value && this.$refs.table && this.$refs.table.toggleAllSelection()
+    },
+
+    selectionChange() {
+      if(this.selectionReactCancel) return
+
+        //设置全选框状态 选中 半选 不选
+        setTimeout(()=>{
+            let filterChecked = Array.from(new Set(this.checkedList))
+            //全选
+            if(
+              (filterChecked.length===this.total&&this.total>0 && (!this.isSelectAll))
+                || (filterChecked.length === 0 && this.isSelectAll)
+            ){
+                this.filterObj.checkAll = true
+                this.filterObj.checkSome = false
+            //不选
+            }else if(
+              (filterChecked.length === 0 && (!this.isSelectAll))
+              || (filterChecked.length === this.total && this.isSelectAll)
+            ){
+                this.filterObj.checkAll = false
+                this.filterObj.checkSome = false
+            //半选
+            }else{
+                this.filterObj.checkAll = false
+                this.filterObj.checkSome=true
+            }
+        },1)
+    },
+
+    //单选
+    selectHandle(selection,row){ //当前选中的项是进选中还是取消选中中
+        if(this.selectionReactCancel) return 
+
+        //当前项是选中还是取消选
+        let haveChecked = selection.some(_ => _.IndexCode === row.IndexCode);
+
+        //全选取消选和不全选选中才有意义
+        if((haveChecked&&!this.isSelectAll) || (!haveChecked&&this.isSelectAll)) {
+          this.checkedList.push(row)
+        }else {
+          this.checkedList=this.checkedList.filter(_ => _.IndexCode!==row.IndexCode)
+        }
+    },
+
+    //整列选
+    selectAllPageHandle(selection){
+        if(this.selectionReactCancel) return 
+        
+        //当前页是选中还是取消
+        let haveChecked = selection && selection.length>0;
+
+        //全选取消选和不全选选中才有意义
+        if((haveChecked&&!this.isSelectAll) || (!haveChecked&&this.isSelectAll)) {
+          this.checkedList = [...this.checkedList,...this.tableData]
+        }else {
+
+          let pageIds = this.tableData.map(_ => _.IndexCode);
+          this.checkedList = this.checkedList.filter(_ => !pageIds.includes(_.IndexCode))
+        }
+    },
+
+    handlePageChange(page) {
+      this.page_no = page;
+      this.getEdbList()
+    },
+
+    /* 改变节点 */
+    nodeChangeHandle(data, node) {
+     
+      this.select_node = data.UniqueCode;
+      this.selectClassify = data.BaseFromSciHqIndexId?0:data.ClassifyId;
+      this.selectEdb = data.BaseFromSciHqIndexId;
+
+      if(!this.selectEdb){
+        this.page_no = 1;
+        this.getEdbList();
+      }
+    },
+
+    /* 数据导出 */
+    exportClick() {
+      this.btnload = true;
+
+      const link = document.createElement("a");
+      link.href = this.exportGlapi;
+      link.download = "";
+      link.click();
+      setTimeout(() => {
+        this.btnload = false;
+      }, 5000);
+    },
+
+    //左侧搜索
+    async handleLeftSearch(query, cb) {
+      cb([]);
+      if (!query) return;
+      const res = await zhuochuangRedStageInterface.searchEdb({
+        Keyword: query,
+      });
+      if (res.Ret === 200) {
+        let arr = res.Data || [];
+        if (!arr.length) {
+          cb([{ nodata: true }]);
+        } else {
+          cb(arr);
+        }
+      }
+    },
+
+    /* 编辑分类 */
+    async editClassifyHandle(
+      {
+        ClassifyId,
+        ClassifyName,
+        ClassifyNameEn,
+        ParentId,
+        BaseFromSciHqIndexId,
+      },
+      node
+    ) {
+        //分类
+        this.openClassifyDia = true;
+        this.classifyForm = {
+          title: "编辑分类",
+          classify_name: this.currentLang==='zh' ? ClassifyName : ClassifyNameEn,
+          classify_id: ClassifyId,
+          parent_classify_name:
+            node.level === 2 ? (this.currentLang==='zh'?node.parent.data.ClassifyName:node.parent.data.ClassifyNameEn) : "",
+          parent_classify_id: node.level === 2 ? ParentId : 0,
+        };
+    },
+
+    /* 删除分类 */
+    delClassifyHandle(
+      { ClassifyId, BaseFromSciHqIndexId },
+      node
+    ) {
+      this.$confirm(
+        this.$t('SteelChemicalPage.del_classify_edb_msg'),
+        this.$t('Dialog.warn_tit'),
+        {
+          type: "warning",
+        }
+      ).then(async () => {
+          let res = await zhuochuangRedStageInterface.classifyDel({
+            ClassifyId,
+          });
+
+          if (res.Ret !== 200) return;
+
+          this.$message.success(/* "删除成功" */this.$t('MsgPrompt.delete_msg'));
+          this.getClassify();
+        })
+        .catch(() => {});
+    },
+
+    clickClassifyHandle(key, item, node) {
+      const handleMap = {
+        add: this.addClassifyHandle,
+        edit: this.editClassifyHandle,
+        del: this.delClassifyHandle,
+      };
+
+      handleMap[key] && handleMap[key](item, node);
+    },
+
+    /* 添加分类 */
+    addClassifyHandle(item = null) {
+      this.openClassifyDia = true;
+      this.classifyForm = item
+        ? {
+            title: "添加分类",
+            classify_name: "",
+            parent_classify_name: this.currentLang==='zh' ? item.ClassifyName : item.ClassifyNameEn,
+            parent_classify_id: item.ClassifyId,
+          }
+        : {
+            title: "添加分类",
+            classify_name: "",
+            parent_classify_id: 0
+          };
+    },
+
+    cancelDialogHandle() {
+      this.$refs.classifyFormRef.clearValidate();
+      this.classifyForm = {
+        title: "添加分类",
+        classify_name: "",
+        parent_classify_name: "",
+        parent_classify_id: 0,
+      };
+      this.openClassifyDia = false;
+    },
+
+    /* 保存分类 */
+    async saveClassifyHandle() {
+      await this.$refs.classifyFormRef.validate();
+      
+      if(this.classifyForm.indexId) return this.handleEditEdbApi();
+
+      let params = {
+        ClassifyName: this.classifyForm.classify_name,
+        ParentId: this.classifyForm.parent_classify_id
+      };
+      const res = this.classifyForm.classify_id
+        ? await zhuochuangRedStageInterface.classifyEdit({
+            ...params,
+            ClassifyId: this.classifyForm.classify_id,
+          })
+        : await zhuochuangRedStageInterface.classifyAdd(params);
+
+      if (res.Ret !== 200) return;
+
+      this.$message.success(/* "保存成功" */this.$t('MsgPrompt.saved_msg'));
+      this.getClassify();
+      this.openClassifyDia = false;
+    },
+
+    // 对[# ;]转义
+    escapeStr(str) {
+      return str.replace(/#/g, escape("#")).replace(/;/g, escape(";"));
+    },
+
+     // 树节点展开
+    handleNodeExpand(data) {
+      // 保存当前展开的节点
+      let flag = this.defaultShowNodes.some((item) => item === data.UniqueCode);
+
+      if (!flag) {
+        // 不存在则存到数组里
+        this.defaultShowNodes.push(data.UniqueCode);
+      }
+    },
+
+    // 树节点关闭
+    handleNodeCollapse(data) {
+      this.defaultShowNodes.some((item, index) => {
+        if (item === data.UniqueCode) {
+          // 删除关闭节点
+          this.defaultShowNodes.length = index;
+        }
+      });
+    },
+
+    /* 判断节点是否能被拖入 */
+    canDropHandle(draggingNode, dropNode, type) {
+      let canDrop = false;
+      // 移动的是一级目录
+      if (draggingNode.level === 1 && dropNode.level === 1 &&type!=='inner') {
+        canDrop = true;
+      }
+
+      // 二级
+      if (draggingNode.level === 2) {
+        if (
+          (dropNode.level === 1 && type === "inner") ||
+          (dropNode.level === 2 && type !== "inner")
+        ) {
+          canDrop = true;
+        }
+      }
+
+      //三级指标层
+			if(draggingNode.level===3){
+				if(
+          (dropNode.level===2&&type==='inner')||
+          (dropNode.level===3&&type!=='inner')
+        ) {
+					canDrop=true
+				}
+			}
+
+      return canDrop;
+    },
+
+
+    /* 拖拽完成 */
+    dropOverHandle(b, a, i, e) {
+      // console.log(i, a);
+      // 被拖拽节点对应的 Node、结束拖拽时最后进入的节点、被拖拽节点的放置位置
+      // 一/二级目录
+      if ([1,2].includes(b.level)) this.handleMoveCatalogue(b, a, i, e);
+
+      // 指标层
+      if (b.level === 3) this.handleMoveEdb(b, a, i, e);
+    },
+
+    // 移动的为一二级目录
+    handleMoveCatalogue(b, a, i, e) {
+      let list = a.parent.childNodes,
+        targetIndex = 0,
+        PrevClassifyId = 0,
+        NextClassifyId = 0,
+        ParentClassifyId=0;
+
+      list.forEach((item, index) => {
+        if (item.data.ClassifyId === b.data.ClassifyId) {
+          targetIndex = index;
+          return;
+        }
+      });
+
+      if(targetIndex===0){
+				PrevClassifyId=0
+				NextClassifyId=list[targetIndex+1].data.ClassifyId
+			}else if(targetIndex===list.length-1){
+				PrevClassifyId=list[targetIndex-1].data.ClassifyId
+				NextClassifyId=0
+			}else{
+				PrevClassifyId=list[targetIndex-1].data.ClassifyId
+				NextClassifyId=list[targetIndex+1].data.ClassifyId
+			}
+
+			if(b.level===2){
+				if(i==='inner'){
+					ParentClassifyId=a.data.ClassifyId
+					PrevClassifyId=0
+					NextClassifyId=a.data.Children.length>1?a.data.Children[1].ClassifyId:0
+				}else{
+					ParentClassifyId=a.data.ParentId
+				}
+			}
+
+			zhuochuangRedStageInterface.classifyMove({
+          ClassifyId: b.data.ClassifyId,
+          PrevClassifyId: PrevClassifyId,
+          NextClassifyId: NextClassifyId,
+          ParentClassifyId: ParentClassifyId
+        })
+        .then((res) => {
+          if (res.Ret !== 200) return;
+          this.$message.success(this.$t('MsgPrompt.move_success_msg'));
+          this.getClassify();
+        });
+
+    },
+
+    // 移动指标
+    handleMoveEdb(b, a, i, e) {
+      let PrevEdbId = 0,
+        NextEdbId = 0,
+        targetIndex = 0,
+        list = a.parent.data.Children;
+      if (i === "inner") {
+        PrevEdbId = 0;
+        NextEdbId =
+          a.data.Children.length > 1 ? a.data.Children[1].BaseFromSciHqIndexId : 0;
+      } else {
+        list.forEach((item, index) => {
+          if (item.BaseFromSciHqIndexId === b.data.BaseFromSciHqIndexId) {
+            targetIndex = index;
+            return;
+          }
+        });
+
+        if (targetIndex === 0) {
+          PrevEdbId = 0;
+          NextEdbId = list[targetIndex + 1].BaseFromSciHqIndexId;
+        } else if (targetIndex === list.length - 1) {
+          PrevEdbId = list[targetIndex - 1].BaseFromSciHqIndexId;
+          NextEdbId = 0;
+        } else {
+          PrevEdbId = list[targetIndex - 1].BaseFromSciHqIndexId;
+          NextEdbId = list[targetIndex + 1].BaseFromSciHqIndexId;
+        }
+      }
+
+      zhuochuangRedStageInterface.edbMove({
+          ClassifyId: a.data.ClassifyId,
+          BaseFromSciHqIndexId: b.data.BaseFromSciHqIndexId,
+          PrevBaseFromSciHqIndexId: PrevEdbId,
+          NextBaseFromSciHqIndexId: NextEdbId,
+        })
+        .then((res) => {
+          if (res.Ret !== 200) return;
+          this.$message.success(this.$t('MsgPrompt.move_success_msg'));
+          this.getClassify();
+        });
+
+    },
+  },
+
+};
+</script>
+<style lang="scss" scoped>
+.sciHongqiData-page {
+  display: flex;
+  flex-direction: column;
+  position: relative;
+  box-sizing: border-box;
+  height: calc(100vh - 120px);
+  .slide-btn-icon{
+      &.slide-left{
+          right:0;
+      }
+      &.slide-right{
+          left: 0;
+      }
+  }
+  .header,.left-cont,.right-cont {
+    padding: 20px;
+    background: #fff;
+    border: 1px solid #C8CDD9;
+    border-radius: 4px;
+  }
+  .header {
+    margin-bottom: 20px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+  }
+
+  .main {
+    display: flex;
+    flex: 1;
+    .left-cont {
+      min-width: 340px;
+      width: 340px;
+      flex-shrink: 0;
+      margin-right: 20px;
+      padding: 30px 0;
+      overflow: hidden;
+      position: relative;
+      .left-top {
+        padding: 0 20px;
+      }
+      .scroll-wrap {
+        padding: 0 20px;
+        height: calc(100vh - 320px);
+        overflow-y: auto;
+        margin-right: 20px;
+      }
+      .target_tree {
+        color: #333;
+        .label-input .el-input__inner {
+          height: 25px;
+          line-height: 25px;
+        }
+        .custom-tree-node {
+          display: flex !important;
+          justify-content: space-between;
+          align-items: center;
+          display: block;
+          flex: 1;
+          .node_label {
+            margin-right: 2px;
+          }
+          .el-icon-view {
+            color: #409eff;
+            font-size: 18px;
+            margin-left: 5px;
+          }
+        }
+      }
+      .add-cont {
+        margin: 50px 0 20px;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        color: #409eff;
+        font-size: 16px;
+        cursor: pointer;
+      }
+    }
+    .right-cont {
+      flex:1;
+      padding: 30px;
+      position: relative;
+      .right-header {
+        display: flex;
+        justify-content: space-between;
+      }
+    }
+   
+  }
+
+}
+.dialog-cont {
+  padding-left: 50px;
+}
+.dia-bot {
+  display: flex;
+  justify-content: center;
+  margin-top: 50px;
+}
+.hint-dialog-wrap{
+    padding-bottom:30px;
+    .hint-list {
+      max-height: 350px;
+      overflow-y: auto;
+      li { margin-bottom: 10px; }
+    }
+    .hint-item{
+        cursor: pointer;
+        &:hover{
+            color:#409EFF;
+            text-decoration: underline;
+        }
+    }
+}
+</style>
+<style lang="scss">
+.sciHongqiData-page {
+  .el-tree__drop-indicator {
+    height: 3px;
+    background-color: #409eff;
+  }
+  .el-tree-node__content {
+    margin-bottom: 14px !important;
+  }
+  .el-tree-node__children {
+    .el-tree-node {
+      margin-bottom: 0px !important;
+      padding-left: 18px;
+    }
+    .el-tree-node__content {
+      margin-bottom: 5px !important;
+      padding-left: 0 !important;
+    }
+  }
+  .expanded.el-icon-caret-right:before {
+    content: url("~@/assets/img/set_m/down.png") !important;
+  }
+  .el-icon-caret-right:before {
+    content: url("~@/assets/img/set_m/slide.png") !important;
+  }
+  .el-tree-node__expand-icon.is-leaf.el-icon-caret-right:before {
+    content: "" !important;
+  }
+  .el-tree-node__expand-icon.expanded {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  .el-tree-node.is-current > .el-tree-node__content {
+    background-color: #f0f4ff !important;
+  }
+  .el-tree-node__content {
+    padding-right: 10px !important;
+  }
+}
+</style>

+ 3 - 3
src/views/datasheet_manage/components/insertDateDia.vue

@@ -29,7 +29,7 @@
               />
               
               <span v-show="selectEdbInfo.Frequency" style="margin: 0 10px">{{$t('ETableChildren.frequency_lable')}}: {{ getFrequencyTrans(selectEdbInfo.Frequency) }}</span>
-              <span v-show="selectEdbInfo.LatestDate">{{$t('OnlineExcelPage.lastest_date_lab')}}: {{ selectEdbInfo.LatestDate }}</span>
+              <span v-show="selectEdbInfo.EndDate">{{$t('OnlineExcelPage.lastest_date_lab')}}: {{ selectEdbInfo.EndDate }}</span>
             </li>
             <li class="form-item" style="padding-left:10px">
               <label class="el-form-item__label">{{$t('ETableChildren.lagging_period_label')}}</label>
@@ -103,8 +103,8 @@ export default {
           if(this.info.DataTimeType===2) { //指标日期时获取指标详情
             const { Data } = await dataBaseInterface.targetDetail({EdbInfoId: valueObj.EdbInfoId})
 
-            const { EdbName,LatestDate,Frequency,EdbInfoId } = Data;
-            this.selectEdbInfo = { EdbName,LatestDate,Frequency,EdbInfoId }
+            const { EdbName,LatestDate,Frequency,EdbInfoId,EndDate } = Data;
+            this.selectEdbInfo = { EdbName,LatestDate,Frequency,EdbInfoId,EndDate }
 
             this.search_edb = valueObj.EdbInfoId;
             this.searchOptions = [this.selectEdbInfo];

+ 4 - 10
src/views/datasheet_manage/customAnalysis/components/createTargetForm.vue

@@ -20,20 +20,14 @@
         <el-input v-model="formData.edbName" :placeholder="$t('OnlineExcelPage.indicator_name_lbl')" @focus="initSelect"></el-input>
       </el-form-item>
       <el-form-item prop="classify">
-        <el-cascader
+        <cascader
           v-model="formData.classify"
           :options="classifyOption"
-          style="width: 100%"
-          @focus="initSelect"
-          :props="{
-            label: 'ClassifyName',
-            value: 'ClassifyId',
-            children: 'Children',
-            emitPath: false,
-            checkStrictly: true
-          }"
+          cascaderWidth="width: 100%"
+          @onFocus="initSelect"
           clearable
           :placeholder="$t('CustomAnalysisPage.select_appropriate_category')"
+          :config="{ emitPath: false, checkStrictly: true }"
         />
       </el-form-item>
       <el-form-item prop="frequency">

+ 13 - 11
src/views/futures_manage/chartEditor.vue

@@ -67,18 +67,18 @@
 					:rules="chartRules"
 				>
 					<el-form-item :label="$t('ToolBox.CommodityPriceChart.select_future')" prop="futures_id" v-if="chartInfo.Source===2">
-						<el-cascader
+						<cascader
 							v-model="chartInfo.futures_id"
 							:options="futuresOptions"
-							:props="{
-								label: 'FutureGoodEdbInfoName',
+							cascaderWidth="width: 90%"
+							:placeholder="$t('ToolBox.CommodityPriceChart.please_select_future')"
+							@changeVal="changeFuturesHandle"
+							:config="{  
+								label:momentLang=== 'zh'?'FutureGoodEdbInfoName':'FutureGoodEdbInfoNameEn',
 								value: 'FutureGoodEdbInfoId',
 								children: 'Child',
 								emitPath: false
 							}"
-							style="width: 90%"
-							:placeholder="$t('ToolBox.CommodityPriceChart.please_select_future')"
-							@change="changeFuturesHandle"
 						/>
 					</el-form-item>
 					<el-form-item :label="$t('ToolBox.CommodityPriceChart.chart_name')" :prop="currentLang==='en'?'ChartNameEn':'ChartName'">
@@ -98,16 +98,15 @@
 						/>
 					</el-form-item>
 					<el-form-item :label="$t('ToolBox.CommodityPriceChart.chart_classify')" prop="classify">
-						<el-cascader
+						<cascader
 							v-model="chartInfo.classify"
 							:options="classifyOptions"
-							:props="{
-								label: 'ChartClassifyName',
+							:config="{
+								label:momentLang=== 'zh'?'ChartClassifyName':'ChartClassifyNameEn',
 								value: 'ChartClassifyId',
-								children: 'Children',
 								emitPath: false
 							}"
-							style="width: 90%"
+							cascaderWidth="width: 90%"
 							:placeholder="$t('ToolBox.CommodityPriceChart.please_select_classify')"
 						/>
 					</el-form-item>
@@ -274,6 +273,9 @@ export default {
     },
   },
 	computed: {
+		momentLang() {
+			return this.$store.state.lang;
+		},
 		roleName() {
 			return localStorage.getItem('userName');
 		},

+ 12 - 3
src/views/mychart_manage/components/chartDetailDia.vue

@@ -773,7 +773,7 @@ export default {
     },
 
     /* 曲线图筛选项发生变化时 非配置项 获取新的图表数据 */
-   async getPreviewChartInfo() {
+    async getPreviewChartInfo() {
       let dateArray=this.chartInfo.ChartType==2?this.season_year:this.select_date
       let params = {
         ChartSource:this.chartInfo.Source,
@@ -824,8 +824,17 @@ export default {
       }
       const { EdbInfoList } = res.Data;
 
-      //更新表格数据
-      this.tableData = _.cloneDeep(EdbInfoList);
+      this.tableData.forEach((item) => {
+        //只更新数据和显性字段
+        let edbData = EdbInfoList.find(_ => _.EdbInfoId===item.EdbInfoId);
+        item.DataList = edbData.DataList;
+        
+        item.StartDate = edbData.StartDate;
+        item.ModifyTime = edbData.ModifyTime;
+        item.MoveLatestDate = edbData.MoveLatestDate;
+        item.LatestDate = edbData.LatestDate;
+        item.LatestValue = edbData.LatestValue;
+      });
     },
 
     /* 打开时间段弹窗 */

+ 15 - 7
src/views/ppt_manage/mixins/pptMixins.js

@@ -371,7 +371,7 @@ export default {
           x_max: res.Data.ChartInfo.XMax?Number(res.Data.ChartInfo.XMax):Number(res.Data.DataResp.XMaxValue),
         }
         this.setCrossVarietyChart();
-        this.changeRelevanceOptions();//更改英文一样
+        this.changeRelevanceOptions(currentLang);//更改英文一样
       }
 
       //根据图表数据获取配置项
@@ -389,7 +389,8 @@ export default {
                             Source:this.chartInfo.Source,//图表来源,和MyChartType一起确定是什么图
                             Instructions: this.chartInfo.Instructions,
                             SourcesFrom: this.chartInfo.SourcesFrom,
-                            ChartThemeStyle: this.chartInfo.ChartThemeStyle
+                            ChartThemeStyle: this.chartInfo.ChartThemeStyle,
+                            ChartAlias:this.chartInfo.ChartAlias||'',//图表别名
                           }
         this.optionMap[id] = { ...defaultOpts, ...this.options,...otherOpts };
       }else{
@@ -722,7 +723,7 @@ export default {
       /* if(!$(`#${refName}`)[0]) return */
       /*
         Source:1
-        MyChartType: 2 季节性图,7 柱形图,  10 截面散点图,
+        MyChartType: 2 季节性图,7 柱形图,  10 截面散点图,11 雷达图
         Source:2
         MyChartType: 8 商品价格曲线图
         Source:5
@@ -730,9 +731,16 @@ export default {
         Source:6 拟合方程曲线
         Source:7 统计特征
         以上图表需要显示标题
+
+        Source:1
+        MyChartType:1 曲线图 5 散点图 6组合图 
+        以上图表需要显示别名
+
+        后端控制->通过新字段来判断是否显示标题/别名
       */
      const {Source,MyChartType,ChartThemeStyle} = options
      const isShowTitle = isShowPPTTitle(Source,MyChartType)
+     const isShowOtherTitle = Source===1&&[1,5,6].includes(MyChartType)
      
     /* 主题样式*/
     const chartTheme =  ChartThemeStyle ? JSON.parse(ChartThemeStyle) : null;
@@ -773,16 +781,16 @@ export default {
         //一行可容纳的中文字体数
         const fontSize = chartTheme?chartTheme.titleOptions.style.fontSize:16
         let count = parseInt($(`#${refName}`)[0].offsetWidth / fontSize)*1.75
-        let {total,newStr} = getStrSize(options.MyChartTitle,count)
+        let {total,newStr} = getStrSize(isShowTitle?options.MyChartTitle:isShowOtherTitle?options.ChartAlias:'',count)
         const isPublish = this.$route.path==='/pptpublish'||this.$route.path==='/pptenpublish'
-        if(isShowTitle){
+        if(isShowTitle||(isShowOtherTitle&&options.ChartAlias.length)){
           titleHTML = `<div style="
             text-align:${chartTheme&&chartTheme.titleOptions.align};
             font-size:${chartTheme&&chartTheme.titleOptions.style.fontSize}px;
             color:${chartTheme&&chartTheme.titleOptions.style.color};
             min-height:18px;word-break: break-all;
           ">
-            ${options.MyChartTitle}
+            ${isShowTitle?options.MyChartTitle:isShowOtherTitle?options.ChartAlias:''}
           </div>`
         }
         let SpecialOption = {
@@ -800,7 +808,7 @@ export default {
           },
           colors: options.colors||chartTheme&&chartTheme.colorsOptions||defaultOpts.colors,
           title: isPublish?{
-            text: isShowTitle?newStr:null,
+            text: (isShowTitle||(isShowOtherTitle&&options.ChartAlias.length))?newStr:null,
             margin:5,
             useHTML:false,
             style:{...chartTheme&&chartTheme.titleOptions.style},

+ 1 - 1
src/views/ppt_manage/newVersion/components/TextEditor.vue

@@ -66,7 +66,7 @@ export default {
         paste_as_text: true,
         fontsize_formats:'12px 14px 16px 18px 20px 22px 24px 36px 48px',
         font_formats:`微软雅黑='微软雅黑';宋体='宋体';黑体='黑体';仿宋='仿宋';
-                      楷体='楷体';隶书='隶书';幼圆='幼圆';Andale Mono=andale mono,times;
+                      楷体='楷体';隶书='隶书';幼圆='幼圆';思源宋体='思源宋体';思源黑体='思源黑体';Andale Mono=andale mono,times;
                       Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;
                       Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;
                       Courier New=courier new,courier;Georgia=georgia,palatino;

+ 4 - 0
src/views/ppt_manage/newVersion/css/format.scss

@@ -37,6 +37,10 @@ $marginTop:14%;
             height: 100%;
             display: none;
         }
+        span.highcharts-title{
+            width:97% !important;
+            left:0 !important;
+        }
     }
     .editor-wrap{
         position: relative;

+ 58 - 6
src/views/ppt_manage/newVersion/utils/tinymceSetting.js

@@ -11,7 +11,7 @@ export const setting = {
     paste_as_text: true,
     fontsize_formats:'6px 8px 10px 12px 14px 16px 18px 20px 22px 24px 36px 48px',
     font_formats:`微软雅黑='微软雅黑';宋体='宋体';黑体='黑体';仿宋='仿宋';
-            楷体='楷体';隶书='隶书';幼圆='幼圆';Andale Mono=andale mono,times;
+            楷体='楷体';隶书='隶书';幼圆='幼圆';思源宋体='思源宋体';思源黑体='思源黑体';Andale Mono=andale mono,times;
             Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;
             Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;
             Courier New=courier new,courier;Georgia=georgia,palatino;
@@ -103,6 +103,42 @@ export const fontSizeList = [
     },
 ]
 export const fontFamily = [
+    {
+        label:'微软雅黑',
+        value:'微软雅黑',
+    },
+    {
+        label:'宋体',
+        value:'宋体',
+    },
+    {
+        label:'黑体',
+        value:'黑体',
+    },
+    {
+        label:'仿宋',
+        value:'仿宋',
+    },
+    {
+        label:'楷体',
+        value:'楷体',
+    },
+    {
+        label:'隶书',
+        value:'隶书',
+    },
+    {
+        label:'幼圆',
+        value:'幼圆',
+    },
+    {
+        label:'思源宋体',
+        value:'思源宋体'
+    },
+    {
+        label:'思源黑体',
+        value:'思源黑体'
+    },
     {
         label:'Helvetica',
         value:'helvetica',
@@ -127,18 +163,34 @@ export const fontFamily = [
         label:'Times New Roman',
         value:"Times New Roman',Times,serif",
     },
+    {
+        label:'Andale Mono',
+        value:"Andale Mono",
+    },
     {
         label:'Verdana',
         value:'Verdana,Geneva,sans-serif',
     },
     {
-        label:'思源宋体',
-        value:'思源宋体'
+        label:'Book Antiqua',
+        value:'Book Antiqua',
     },
     {
-        label:'思源黑体',
-        value:'思源黑体'
-    }
+        label:'Comic Sans MS',
+        value:'Comic Sans MS',
+    },
+    {
+        label:'Courier New',
+        value:"Courier New",
+    },
+    {
+        label:'Webdings',
+        value:"Webdings",
+    },
+    {
+        label:'Wingdings',
+        value:"Wingdings",
+    },
 ]
 export const titleDefault = {
     top:6.6,left:10,width:68,height:5,

+ 7 - 12
src/views/predictEdb_manage/addPredicEdb.vue

@@ -15,18 +15,13 @@
           <el-form-item prop="classify">
             <div class="item">
               <span class="label">{{$t('PredictEditPage.add_to_classify')}}<!-- 添加到分类 --></span>
-              <el-cascader
-                    v-model="formData.classify"
-                    :options="classifyArr"
-                    :props="{
-                        label: 'ClassifyName',
-                        value: 'ClassifyId',
-                        children: 'Children',
-                        checkStrictly: true
-                    }"
-                    style="width: 90%"
-                    :placeholder="$t('Edb.InputHolderAll.input_classify')"
-                />
+              <cascader
+                v-model="formData.classify"
+                :options="classifyArr"
+                cascaderWidth="width: 100%"
+                :placeholder="$t('Edb.InputHolderAll.input_classify')"
+                :config="{  checkStrictly: true}"
+              />
             </div>
           </el-form-item>
           <el-form-item prop="oldEdb" v-if="!formData.edb_id">

+ 25 - 8
src/views/report_manage/mixins/reportMixin.js

@@ -27,14 +27,31 @@ export default {
   },
   computed:{
       CNEditorConfig(){
-          return {...this.froalaConfig,...{fontFamily:{'Arial,Helvetica,sans-serif': 'Arial',
-          'Georgia,serif': 'Georgia',
-          'Impact,Charcoal,sans-serif': 'Impact',
-          'Tahoma,Geneva,sans-serif': 'Tahoma',
-          "'Times New Roman',Times,serif": 'Times New Roman',
-          'Verdana,Geneva,sans-serif': 'Verdana',
-          '思源宋体':'思源宋体',
-          '思源黑体':'思源黑体',}}
+          return {...this.froalaConfig,...{fontFamily:{
+            '微软雅黑': '微软雅黑',
+            '宋体': '宋体',
+            '黑体': '黑体',
+            '仿宋': '仿宋',
+            '楷体': '楷体',
+            '隶书': '隶书',
+            '幼圆': '幼圆',
+            '思源宋体': '思源宋体',
+            '思源黑体': '思源黑体',
+            'Helvetica': 'Helvetica',
+            'Arial,Helvetica,sans-serif': 'Arial',
+            'Arial Black': 'Arial Black',
+            'Georgia,serif': 'Georgia',
+            'Impact,Charcoal,sans-serif': 'Impact',
+            'Tahoma,Geneva,sans-serif': 'Tahoma',
+            'Times New Roman,Times,serif': 'Times New Roman',
+            'Andale Mono': 'Andale Mono',
+            'Verdana,Geneva,sans-serif': 'Verdana',
+            'Book Antiqua': 'Book Antiqua',
+            'Comic Sans MS': 'Comic Sans MS',
+            'Courier New': 'Courier New',
+            'Webdings': 'Webdings',
+            'Wingdings': 'Wingdings',
+          }}
         }
       },
       panelTabs(){

+ 61 - 30
src/views/report_manage/reportEn/reportEditor.vue

@@ -24,7 +24,7 @@
           id="froala-editor"
           ref="froalaEditor"
           :tag="'textarea'"
-          :config="{...froalaConfig,quickInsertEnabled: false,}"
+          :config="{...froalaConfig,quickInsertEnabled: false, fontFamily:overviewConfig.fontFamily}"
           v-model="aeForm.content"
         ></froala>
 		  </div>
@@ -423,7 +423,7 @@ export default {
 				classifynameArr: [],
 				title: '',
 				abstract: '',
-				author: ['Investment Research Team'],
+				author: [],
 				frequency: '日度',
 				create_time: http.dateFormatter(new Date(), false),
 				content: '',
@@ -494,6 +494,31 @@ export default {
 					'redo',
         ],
         fontSize: ["6","8","10","12", "13","14","15", "16", "18", "20", "24", "28", "32", "36", "40"],
+				fontFamily: {
+					'微软雅黑': '微软雅黑',
+					'宋体': '宋体',
+					'黑体': '黑体',
+					'仿宋': '仿宋',
+					'楷体': '楷体',
+					'隶书': '隶书',
+					'幼圆': '幼圆',
+					'思源宋体': '思源宋体',
+					'思源黑体': '思源黑体',
+					'Helvetica': 'Helvetica',
+					'Arial,Helvetica,sans-serif': 'Arial',
+					'Arial Black': 'Arial Black',
+					'Georgia,serif': 'Georgia',
+					'Impact,Charcoal,sans-serif': 'Impact',
+					'Tahoma,Geneva,sans-serif': 'Tahoma',
+					'Times New Roman,Times,serif': 'Times New Roman',
+					'Andale Mono': 'Andale Mono',
+					'Verdana,Geneva,sans-serif': 'Verdana',
+					'Book Antiqua': 'Book Antiqua',
+					'Comic Sans MS': 'Comic Sans MS',
+					'Courier New': 'Courier New',
+					'Webdings': 'Webdings',
+					'Wingdings': 'Wingdings',
+				},
         height:300,
         fontSizeDefaultSelection: "16",
         quickInsertEnabled: false,
@@ -612,18 +637,17 @@ export default {
 				return JSON.parse(i).v||0
 			})
 			this.checkClassifyNameArr(2,classify)
-			// console.log(this.aeForm.classifynameArr,'this.aeForm.classifynameArr');
+
 			if (this.aeForm.add_type == 1) {
 				if (this.aeForm.classifynameArr.length == 3) {
 					this.aeForm.title = JSON.parse(this.aeForm.classifynameArr[2]).l;
 				}else{
           this.aeForm.title = ''
         }
-				return false;
 			}
-			if (this.aeForm.classifynameArr.length == 0) {
-				return false;
-			} 
+
+			if (!this.aeForm.classifynameArr.length) return
+
 			let params = {
 				ClassifyIdFirst: JSON.parse(this.aeForm.classifynameArr[1]).v,
 			};
@@ -641,29 +665,36 @@ export default {
 						this.$message.error(this.$t('ReportManage.ReportList.no_reports_msg'));
 						return false;
 					}
-					this.aeForm = {
-						add_type: 2,
-						classify_name: 1,
-						classifynameArr:[
-							JSON.stringify({
-								l: res.Data.ClassifyNameRoot,
-								v: parseInt(res.Data.ClassifyIdRoot),
-							}),
-							JSON.stringify({
-								l: res.Data.ClassifyNameFirst,
-								v: parseInt(res.Data.ClassifyIdFirst),
-							}),
-							JSON.stringify({
-								l: res.Data.ClassifyNameSecond,
-								v: parseInt(res.Data.ClassifyIdSecond),
-						})],
-						title: res.Data.Title,
-						abstract: res.Data.Abstract,
-						author: res.Data.Author ? res.Data.Author.split(',') : '',
-						frequency: res.Data.Frequency,
-						create_time: res.Data.CreateTime,
-						content: res.Data.Content,
-            			overview:res.Data.Overview||''
+
+					if(this.aeForm.add_type == 1) {
+						this.aeForm.author = res.Data.Author ? res.Data.Author.split(',') : ['']
+					}else {
+
+						this.aeForm = {
+							add_type: 2,
+							classify_name: 1,
+							classifynameArr:[
+								JSON.stringify({
+									l: res.Data.ClassifyNameRoot,
+									v: parseInt(res.Data.ClassifyIdRoot),
+								}),
+								JSON.stringify({
+									l: res.Data.ClassifyNameFirst,
+									v: parseInt(res.Data.ClassifyIdFirst),
+								}),
+								JSON.stringify({
+									l: res.Data.ClassifyNameSecond,
+									v: parseInt(res.Data.ClassifyIdSecond),
+							})],
+							title: res.Data.Title,
+							abstract: res.Data.Abstract,
+							author: res.Data.Author ? res.Data.Author.split(',') : '',
+							frequency: res.Data.Frequency,
+							create_time: res.Data.CreateTime,
+							content: res.Data.Content,
+							overview:res.Data.Overview||''
+						}
+
 					};
 				}
 			});

+ 10 - 5
src/views/report_manage/reportV2/components/reportBaseInfoDia.vue

@@ -265,7 +265,7 @@ export default {
         relationVariety: [],
         title: "",
         abstract: "",
-        author: ["投研团队"],
+        author: [],
         frequency: "日度",
         time: this.$moment().format("YYYY-MM-DD") || "",
         cooperationType: 1,//协作方式
@@ -322,7 +322,7 @@ export default {
         relationVariety: [],
         title: "",
         abstract: "",
-        author: ["投研团队"],
+        author: [],
         frequency: "日度",
         time: this.$moment().format("YYYY-MM-DD") || "",
         cooperationType: 1,//协作方式
@@ -419,9 +419,8 @@ export default {
         if (this.formData.classify.length === 2) {
           this.formData.title = this.getSelectClassifyName()[1];
         }
-        return;
       }
-      if(!this.formData.classify.length&&this.formData.type===2) return
+      if(!this.formData.classify.length) return
 
       
       //获取上次报告
@@ -442,7 +441,13 @@ export default {
             return false;
           }
 
-          this.chooseInheritReport(res.Data.List[0])
+          if(this.formData.type===1) { //默认只带出作者
+            this.formData.author = res.Data.List
+              ? res.Data.List[0].Author.split(",")
+              : [''];
+          }else {
+            this.chooseInheritReport(res.Data.List[0])
+          }
         });
     },
 

+ 8 - 8
src/views/report_manage/reportV2/components/reportEditHeader.vue

@@ -41,11 +41,11 @@
         <!-- 章节报告,只有提交 提交即是发布 -->
         <template v-if="reportInfo&&reportInfo.ReportChapterId">
             <li 
-                class="action-item" 
+                class="action-item editsty" 
                 :class="{'disabled':checkLoading}"
                 @click="$emit('handlePublishOpt')"
             >
-                <img src="~@/assets/img/smartReport/icon01.png" alt="">
+                <img src="~@/assets/img/icons/submit_ico.svg" alt="">
                 <span>{{$t('ReportManage.ReportList.submit_chapter_btn')}}</span>
             </li>
         </template>
@@ -54,32 +54,32 @@
         <template v-else>
             <template v-if="!isApprove||!hasApproveFlow">
                 <li 
-                    class="action-item" 
+                    class="action-item editsty" 
                     :class="{'disabled':checkLoading}"
                     @click="$emit('handlePublishOpt','dsfb')"
                     v-if="permissionBtn.checkPermissionBtn(permissionBtn.reportManageBtn.reportManage_publish)"
                     >
-                    <img src="~@/assets/img/smartReport/icon01.png" alt="">
+                    <img src="~@/assets/img/icons/timing_ico.svg" alt="">
                     <span>{{$t('ReportManage.ReportList.scheduled_publish_btn')}}</span>
                 </li>
                 <li 
-                    class="action-item" 
+                    class="action-item editsty" 
                     :class="{'disabled':checkLoading}"
                     @click="$emit('handlePublishOpt','fb')"
                     v-if="permissionBtn.checkPermissionBtn(permissionBtn.reportManageBtn.reportManage_publish)"
                 >
-                    <img src="~@/assets/img/smartReport/icon01.png" alt="">
+                    <img src="~@/assets/img/icons/publish_ico.svg" alt="">
                     <span>{{$t('ReportManage.ReportList.publish_btn')}}</span>
                 </li>
             </template>
             <template v-if="isApprove&&hasApproveFlow">
                 <li 
-                    class="action-item" 
+                    class="action-item editsty" 
                     :class="{'disabled':checkLoading}"
                     @click="$emit('handlePublishOpt','submit')"
                     v-if="permissionBtn.checkPermissionBtn(permissionBtn.reportManageBtn.reportManage_publish)"
                 >
-                    <img src="~@/assets/img/smartReport/icon01.png" alt="">
+                    <img src="~@/assets/img/icons/submit_ico.svg" alt="">
                     <span>{{$t('ReportManage.ReportList.submission_btn')}}</span>
                 </li>
             </template>

+ 25 - 8
src/views/report_manage/reportV2/normalReport/mixins/reportMixin.js

@@ -27,14 +27,31 @@ export default {
   },
   computed:{
       CNEditorConfig(){
-          return {...this.froalaConfig,...{fontFamily:{'Arial,Helvetica,sans-serif': 'Arial',
-          'Georgia,serif': 'Georgia',
-          'Impact,Charcoal,sans-serif': 'Impact',
-          'Tahoma,Geneva,sans-serif': 'Tahoma',
-          "'Times New Roman',Times,serif": 'Times New Roman',
-          'Verdana,Geneva,sans-serif': 'Verdana',
-          '思源宋体':'思源宋体',
-          '思源黑体':'思源黑体',}}
+          return {...this.froalaConfig,...{fontFamily:{
+            '微软雅黑': '微软雅黑',
+            '宋体': '宋体',
+            '黑体': '黑体',
+            '仿宋': '仿宋',
+            '楷体': '楷体',
+            '隶书': '隶书',
+            '幼圆': '幼圆',
+            '思源宋体': '思源宋体',
+            '思源黑体': '思源黑体',
+            'Helvetica': 'Helvetica',
+            'Arial,Helvetica,sans-serif': 'Arial',
+            'Arial Black': 'Arial Black',
+            'Georgia,serif': 'Georgia',
+            'Impact,Charcoal,sans-serif': 'Impact',
+            'Tahoma,Geneva,sans-serif': 'Tahoma',
+            'Times New Roman,Times,serif': 'Times New Roman',
+            'Andale Mono': 'Andale Mono',
+            'Verdana,Geneva,sans-serif': 'Verdana',
+            'Book Antiqua': 'Book Antiqua',
+            'Comic Sans MS': 'Comic Sans MS',
+            'Courier New': 'Courier New',
+            'Webdings': 'Webdings',
+            'Wingdings': 'Wingdings',
+          }}
         }
       },
       insertTabs(){

+ 51 - 5
src/views/report_manage/reportV2/normalReport/reportdtl.vue

@@ -1,6 +1,9 @@
 <template>
 	<div id="reportdtl" v-if="isshow">
-		<header>{{reportInfo.Title}}</header>
+		<header>
+			<span>{{reportInfo.Title}}</span>
+			<img :src="configInfo.ReportLogo" alt="" v-if="configInfo.ReportCenterLogoShow==='true'"/>
+		</header>
 		<div style="padding:0 35px 0; box-sizing:border-box; color:#666; font-size:24px; overflow:hidden;">
 		  <span>{{reportInfo.Author}}</span>
 		  <span style="float:right;" v-if="reportInfo.PublishState===2||reportInfo.State===2">{{reportInfo.PublishTime}}</span>
@@ -26,6 +29,12 @@
 				<div id="resetcss" style="overflow:hidden;" v-html="reportInfo.Content"></div>
 			</block>
 		</div>
+
+		<div class="disclaimer-cont" v-if="configInfo.Disclaimer">
+			<h3>免责声明:</h3>
+			<div v-html="configInfo.Disclaimer"></div>
+		</div>
+
 		<div v-if="linkUrl" style="width:100px;height30px;position:absolute;right:-100px;top:100px;cursor:pointer;">
 			<div v-permission="$route.query.fromPage==='en'
                 ?permissionBtn.enReportManageBtn.enReport_reportView_copyWechat
@@ -46,7 +55,7 @@
 
 <script>
 	import { reportdetail,departInterence } from 'api/api.js';
-	import http from '@/api/http.js';
+	import {etaBaseConfigInterence} from '@/api/modules/etaBaseConfigApi.js';
 	import * as reportEnInterface from '@/api/modules/reportEnApi';
 	import {strategyReportInterence} from '@/api/api.js'
 	import vueQr from 'vue-qr'
@@ -95,6 +104,7 @@
 				isShowCode:false,
 
 				systemUserInfo:null,
+				configInfo: {}
 			}
 		},
 		components: {
@@ -117,6 +127,8 @@
 				console.log(this.reportInfo);
 				this.isshow=true;
 			}
+			
+			this.getConfigSet()
 		},
 		updated(){
 		  $('#resetcss').find('img').css({display:'block',margin:'0 auto'});
@@ -124,6 +136,16 @@
 			$("#resetcss").find("pre").css({display: "block",whiteSpace: "pre-wrap"});
 		},
 		methods: {
+			async getConfigSet() {
+				const res = await etaBaseConfigInterence.getBaseConfig()
+
+				if(res.Ret!==200) return
+				const {ReportLogo,Disclaimer,ReportCenterLogoShow} = res.Data
+				this.configInfo = {
+					ReportLogo,Disclaimer,ReportCenterLogoShow
+				}
+			},
+
 			async getreportdetail(){
 				let res
 				let reportId = this.id||this.reportId
@@ -163,12 +185,24 @@
 	}
 </script>
 
-<style lang="scss">
+<style lang="scss" scoped>
 	#reportdtl{ background:#fff;  max-width:1200px; margin:10px auto;position:relative;
 		img{ display:'block'; width:'100%'; margin:'0 auto'; }
-		header{ padding:10px 30px; box-sizing:border-box; font-size:28px; font-weight:500; color:#333; background:#fff; }
+		header{ padding:10px 30px; box-sizing:border-box; font-size:28px; font-weight:500; color:#333; background:#fff;display: flex;justify-content: space-between; }
 		#abstract{ padding:10px 30px 0; box-sizing:border-box; font-size:22px; line-height:36px;
-		  >div{ padding:10px 20px; box-sizing:border-box; background:rgba(20,121,253,0.1); color:#4099ef; border-radius:10px; }
+		  >div{ 
+				padding:10px 20px; box-sizing:border-box; border-radius:10px;
+				position: relative;
+				&::after {
+					position: absolute;
+					width: 5px;
+					height: 100%;
+					content: '';
+					background:#007aff;
+					top: 0;
+					left: 0;
+				}
+			}
 		}
 		#resetsty{ 
 			img{ display:block; max-width:100%; height:auto; margin:0 auto; }
@@ -181,6 +215,9 @@
 			margin-bottom: 20px;
 			padding-bottom: 20px;
 			border-bottom: 1px dashed #ccc;
+			&:last-child {
+				border-bottom:none;
+			}
 			.type{
 				font-size: 15px;
 				color: #fff;
@@ -225,5 +262,14 @@
 				list-style-position: inside !important;
 			}
 		}
+
+		.disclaimer-cont {
+			h3 {
+				margin-bottom: 20px;
+			}
+			border-top: 1px solid #E2E2E2;
+			padding: 30px 0;
+			margin: 0 30px;
+		}
 	}
 </style>

+ 17 - 2
src/views/report_manage/reportV2/smartReport/components/TextEdit.vue

@@ -70,14 +70,29 @@ export default {
                 toolbarSticky: false, //操作栏是否自动吸顶
                 saveInterval: 0,
                 fontFamily:{
+                    '微软雅黑': '微软雅黑',
+                    '宋体': '宋体',
+                    '黑体': '黑体',
+                    '仿宋': '仿宋',
+                    '楷体': '楷体',
+                    '隶书': '隶书',
+                    '幼圆': '幼圆',
+                    '思源宋体': '思源宋体',
+                    '思源黑体': '思源黑体',
+                    'Helvetica': 'Helvetica',
                     'Arial,Helvetica,sans-serif': 'Arial',
+                    'Arial Black': 'Arial Black',
                     'Georgia,serif': 'Georgia',
                     'Impact,Charcoal,sans-serif': 'Impact',
                     'Tahoma,Geneva,sans-serif': 'Tahoma',
                     'Times New Roman,Times,serif': 'Times New Roman',
+                    'Andale Mono': 'Andale Mono',
                     'Verdana,Geneva,sans-serif': 'Verdana',
-                    '思源宋体':'思源宋体',
-                    '思源黑体':'思源黑体',
+                    'Book Antiqua': 'Book Antiqua',
+                    'Comic Sans MS': 'Comic Sans MS',
+                    'Courier New': 'Courier New',
+                    'Webdings': 'Webdings',
+                    'Wingdings': 'Wingdings',
                 },
                 events: {
                     //this.editor 定义在vue data 中

+ 2 - 2
src/views/report_manage/reportV2/smartReport/editReport.vue

@@ -174,7 +174,7 @@
 
                             <div class="html-end-img-box">
                                 <div class="opt-btn-box" style="display: none;">
-                                    <div class="del-btn" @click.stop="endImg=''"></div>
+                                    <div class="del-btn" @click.stop="deleteLayoutPic(2)"></div>
                                 </div>
                                 <img :src="endImg" alt="" style="display:block;width:100%">
                                 <div class="head-layout-item" v-for="item in endImgStyle" :key="item.value"
@@ -1375,7 +1375,7 @@ export default {
         },
         // 删除版头版尾
         deleteLayoutPic(type){
-            if(type=='1'){
+            if(type===1){
                 this.headImg=''
                 this.headImgId = 0
             }else{

+ 47 - 5
src/views/report_manage/reportV2/smartReport/reportDetail.vue

@@ -15,7 +15,10 @@
 
             <!-- 无版头版尾 -->
             <div class="no-layout-img-box" v-if="(reportInfo && !!reportInfo.NeedSplice && (!reportInfo.HeadImg) && (!reportInfo.EndImg))||$route.query.type==='previewChapter'">
-                <header>{{reportInfo.Title}}</header>
+                <header>
+                    <span>{{reportInfo.Title}}</span>
+			        <img :src="configInfo.ReportLogo" alt="" v-if="configInfo.ReportCenterLogoShow==='true'"/>
+                </header>
                 <div style=" box-sizing:border-box; color:#666; font-size:24px; overflow:hidden;">
                     <span>{{ reportInfo.Author}}</span>
                     <span style="float:right;" v-if="[2,6].includes(reportInfo.State)">{{reportInfo.PublishTime}}</span>
@@ -44,6 +47,11 @@
                 <div class="html-wrap" v-html="content" v-else></div>
             </template>
 
+            <div class="disclaimer-cont" v-if="configInfo.Disclaimer">
+                <h3>免责声明:</h3>
+			    <div v-html="configInfo.Disclaimer"></div>
+            </div>
+
             <!-- 板尾 -->
             <div class="html-end-img-box" v-if="reportInfo && !!reportInfo.NeedSplice && reportInfo.EndImg&&$route.query.type!=='previewChapter'">
                 <img :src="reportInfo.EndImg" alt="" style="display:block;width:100%">
@@ -95,10 +103,10 @@
 
 <script>
 import {apiSmartReport}  from '@/api/modules/smartReport'
+import {etaBaseConfigInterence} from '@/api/modules/etaBaseConfigApi.js';
 import {
 	reportdetail,
 } from '@/api/modules/reportV2';
-import vueQr from 'vue-qr'
 export default {
     computed: {
 		linkUrl(){
@@ -151,7 +159,8 @@ export default {
                 研报标题:'',
                 研报作者:'',
                 创建时间:''
-            }
+            },
+            configInfo: {}
         }
     },
     created() {
@@ -165,8 +174,19 @@ export default {
             return 
         }
         this.getReportDetail()
+        this.getConfigSet()
     },
     methods: {
+        async getConfigSet() {
+            const res = await etaBaseConfigInterence.getBaseConfig()
+
+            if(res.Ret!==200) return
+            const {ReportLogo,Disclaimer,DisclaimerEn,ReportCenterLogoShow,ReportEnLogoShow} = res.Data
+            this.configInfo = {
+                ReportLogo,Disclaimer,ReportCenterLogoShow
+            }
+        },
+
         // 获取报告详情
         getReportDetail(){
             const id=this.$route.query.id||this.reportId||0
@@ -345,6 +365,7 @@ div{
         .no-layout-img-box{
             header{
                 padding:10px 0; box-sizing:border-box; font-size:28px; font-weight:500; color:#333;
+                display: flex;justify-content: space-between;
             }
         }
         .abstract{
@@ -352,9 +373,19 @@ div{
             div{
                 padding: 10px 20px;
                 box-sizing: border-box;
-                background: rgba(20, 121, 253, 0.1);
-                color: #4099ef;
+                position: relative;
+                /* background: rgba(20, 121, 253, 0.1);
+                color: #4099ef; */
                 border-radius: 10px;
+                &::after {
+					position: absolute;
+					width: 5px;
+					height: 100%;
+					content: '';
+					background:#007aff;
+					top: 0;
+					left: 0;
+				}
             }
         }
     }
@@ -375,6 +406,9 @@ div{
     .chapter-item{
         padding: 20px 0;
         border-bottom: 1px dashed #ccc;
+        &:last-child {
+            border-bottom:none;
+        }
         .type{
             font-size: 15px;
             color: #fff;
@@ -388,5 +422,13 @@ div{
             font-weight: bold;
         }
     }
+    .disclaimer-cont {
+        h3 {
+            margin-bottom: 20px;
+        }
+        border-top: 1px solid #E2E2E2;
+        padding: 30px 0;
+        margin: 0 30px;
+    }
 }
 </style>

+ 71 - 35
src/views/report_manage/reportdtl.vue

@@ -1,20 +1,29 @@
 <template>
 	<div id="reportdtl" v-if="isshow">
-		<header>{{reportInfo.Title}}</header>
+		<header>
+			<span>{{reportInfo.Title}}</span>
+			<img :src="configInfo.ReportLogo" alt="" v-if="configInfo.ReportEnLogoShow==='true'"/>
+		</header>
 		<div style="padding:0 35px 0; box-sizing:border-box; color:#666; font-size:24px; overflow:hidden;">
-		  <span>{{$route.query.fromPage=='strategyReport'?'Horizon Insights FICC Team':reportInfo.Author}}</span>
+		  <span>{{reportInfo.Author}}</span>
 			<!-- 已发布、已通过展示发布时间 -->
 		  <span style="float:right;" v-if="[2,6].includes(reportInfo.State)">{{reportInfo.PublishTime}}</span>
 		</div>
 		
-		<!-- 英文版摘要+overview 必填-->
-		<div id="abstract-en" v-if="$route.query.fromPage=='en'||isEn">
-			<div 
-				class="abstract" 
-				:style="{borderBottom:reportInfo.Overview?'1px solid #C1C1C1':'none',paddingBottom:reportInfo.Overview?'20px':'0'}"
-			>
-				<div>Abstract:{{reportInfo.Abstract}}</div>
+		<div id="abstract" v-if="$route.query.fromPage=='strategyReport'">
+			<div>
+				<div v-if="reportInfo.Abstract">Abstract:<span v-html="reportInfo.Abstract"></span></div>
+				<div>Key Takeaways:<span v-html="reportInfo.KeyTakeaways"></span></div>
 			</div>
+		</div>
+		<template v-else>
+			<div id="abstract" v-if="reportInfo.Abstract">
+		  	<div>{{($route.query.fromPage=='en'||isEn)?'Abstract':'摘要'}}:{{reportInfo.Abstract}}</div>
+			</div>
+		</template>
+
+		<!-- 英文版摘要+overview 必填-->
+		<div id="overview-wrapper" v-if="$route.query.fromPage=='en'||isEn">
 			<div id="overview" v-if="reportInfo.KeyTakeaways" :style="{borderBottom:reportInfo.Overview?'1px solid #C1C1C1':'none',paddingBottom:reportInfo.Overview?'20px':'0'}">
 				<p style="margin-bottom:20px;"><strong>KeyTakeaways:</strong></p>
 				<div class="overview" style="overflow:hidden;" v-html="reportInfo.KeyTakeaways"></div>
@@ -25,17 +34,7 @@
 			</div>
 			
 		</div>
-		<div id="abstract" v-else-if="$route.query.fromPage=='strategyReport'">
-			<div>
-				<div v-if="reportInfo.Abstract">Abstract:<span v-html="reportInfo.Abstract"></span></div>
-				<div>Key Takeaways:<span v-html="reportInfo.KeyTakeaways"></span></div>
-			</div>
-		</div>
-		<template v-else>
-			<div id="abstract" v-if="reportInfo.Abstract">
-		  	<div>{{($route.query.fromPage=='en'||isEn)?'Abstract':'摘要'}}:{{reportInfo.Abstract}}</div>
-			</div>
-		</template>
+		
 		<div id="resetsty" style="padding:30px; box-sizing:border-box; overflow:hidden;">
 			<block v-if="reportInfo.ChapterType=='day'||reportInfo.ChapterType=='week'">
 				<div class="chapter-item" v-for="item in reportInfo.ChapterList" :key="item.ReportChapterId">
@@ -50,6 +49,12 @@
 				<div id="resetcss" style="overflow:hidden;" v-html="reportInfo.Content"></div>
 			</block>
 		</div>
+
+		<div class="disclaimer-cont" v-if="configInfo.DisclaimerEn">
+			<h3>Disclaimers:</h3>
+			<div v-html="configInfo.DisclaimerEn"></div>
+		</div>
+
 		<div v-if="linkUrl" style="width:100px;height30px;position:absolute;right:-100px;top:100px;cursor:pointer;">
 			<div v-permission="$route.query.fromPage==='en'
                 ?permissionBtn.enReportManageBtn.enReport_reportView_copyWechat
@@ -70,6 +75,7 @@
 
 <script>
 	import { reportdetail,departInterence } from 'api/api.js';
+	import {etaBaseConfigInterence} from '@/api/modules/etaBaseConfigApi.js';
 	import http from '@/api/http.js';
 	import * as reportEnInterface from '@/api/modules/reportEnApi';
 	import {strategyReportInterence} from '@/api/api.js'
@@ -118,7 +124,8 @@
 				isShowCode:false,
 
 				systemUserInfo:null,
-				// linkUrl:this.$route.query.code?'https://share.hzinsights.com/reportdtl?code='+this.$route.query.code:''
+
+				configInfo: {}
 			}
 		},
 		components: {
@@ -135,6 +142,7 @@
 				this.isshow=true;
 			}
 			this.getSystemUserInfo()
+			this.getConfigSet()
 		},
 		updated(){
 		  $('#resetcss').find('img').css({display:'block',margin:'0 auto'});
@@ -142,6 +150,16 @@
 			$("#resetcss").find("pre").css({display: "block",whiteSpace: "pre-wrap"});
 		},
 		methods: {
+			async getConfigSet() {
+				const res = await etaBaseConfigInterence.getBaseConfig()
+
+				if(res.Ret!==200) return
+				const {ReportLogo,Disclaimer,DisclaimerEn,ReportCenterLogoShow,ReportEnLogoShow} = res.Data
+				this.configInfo = {
+					ReportLogo,DisclaimerEn,ReportEnLogoShow
+				}
+			},
+
 			getSystemUserInfo(){
 				departInterence.systemUserInfo().then(res=>{
 					if(res.Ret===200){
@@ -193,9 +211,24 @@
 <style lang="scss">
 	#reportdtl{ background:#fff;  max-width:1200px; margin:10px auto;position:relative;
 		img{ display:'block'; width:'100%'; margin:'0 auto'; }
-		header{ padding:10px 30px; box-sizing:border-box; font-size:28px; font-weight:500; color:#333; background:#fff; }
+		header{ 
+			padding:10px 30px; box-sizing:border-box; font-size:28px; font-weight:500; color:#333; background:#fff;
+			display: flex;justify-content: space-between;
+		}
 		#abstract{ padding:10px 30px 0; box-sizing:border-box; font-size:22px; line-height:36px;
-		  >div{ padding:10px 20px; box-sizing:border-box; background:rgba(20,121,253,0.1); color:#4099ef; border-radius:10px; }
+		  >div{ 
+				padding:10px 20px; box-sizing:border-box; border-radius:10px;
+				position: relative;
+				&::after {
+					position: absolute;
+					width: 5px;
+					height: 100%;
+					content: '';
+					background:#007aff;
+					top: 0;
+					left: 0;
+				}
+			}
 		}
 		#resetsty{ 
 			img{ display:block; max-width:100%; height:auto; margin:0 auto; }
@@ -221,19 +254,13 @@
 				font-weight: bold;
 			}
 		}
-    #abstract-en{
+    #overview-wrapper{
       margin:35px 35px;
       padding:20px;
       background-color: rgba(77, 130, 191, 0.1);
       border: 1px solid #E2E2E2;
-      .abstract{
-        font-size: 24px;
-        font-weight: 600;
-        padding-bottom: 20px;
-        border-bottom: 1px solid #C1C1C1;
-      }
+      
       #overview{
-        margin-top:20px;
         font-size: 24px;
         .overview{
           margin-top:20px;
@@ -252,9 +279,18 @@
 				list-style-position: inside !important;
 			}
 		}
-        @media (max-width:1400px) {
-            margin-right: 100px;
-            
-        }
+		@media (max-width:1400px) {
+				margin-right: 100px;
+				
+		}
+
+		.disclaimer-cont {
+			h3 {
+				margin-bottom: 20px;
+			}
+			padding: 30px 0;
+			margin: 0 30px;
+			border-top: 1px solid #E2E2E2;
+    }
 	}
 </style>

+ 21 - 1
src/views/sandbox_manage/common/toolConfig.js

@@ -25,7 +25,27 @@ export const colorsOptions = ['#333','#5B9BD5','#f00','#fff','#00f','#000','#00F
 export const familyOptions = [
 	{name:localStorage.getItem('i18n')=='zh'?'微软雅黑':'Microsoft YaHei',value:'微软雅黑'},
 	{name:localStorage.getItem('i18n')=='zh'?'宋体':'SimSun',value:'宋体'},
-	{name:localStorage.getItem('i18n')=='zh'?'黑体':'SimHei',value:'黑体'}
+	{name:localStorage.getItem('i18n')=='zh'?'黑体':'SimHei',value:'黑体'},
+	{name:localStorage.getItem('i18n')=='zh'?'仿宋':'FangSong',value:'仿宋'},
+	{name:localStorage.getItem('i18n')=='zh'?'楷体':'KaiTi',value:'楷体'},
+	{name:localStorage.getItem('i18n')=='zh'?'隶书':'LiSu',value:'隶书'},
+	{name:localStorage.getItem('i18n')=='zh'?'幼圆':'YouYuan',value:'幼圆'},
+	{name:localStorage.getItem('i18n')=='zh'?'思源宋体':'Source Han Sans',value:'思源宋体'},
+	{name:localStorage.getItem('i18n')=='zh'?'思源黑体':'Source Han Sans',value:'思源黑体'},
+	{name:localStorage.getItem('i18n')=='zh'?'Helvetica':'Helvetica',value:'Helvetica'},
+	{name:localStorage.getItem('i18n')=='zh'?'Arial':'Arial',value:'Arial,Helvetica,sans-serif'},
+	{name:localStorage.getItem('i18n')=='zh'?'Arial Black':'Arial Black',value:'Arial Black'},
+	{name:localStorage.getItem('i18n')=='zh'?'Georgia':'Georgia',value:'Georgia,serif'},
+	{name:localStorage.getItem('i18n')=='zh'?'Impact':'Impact',value:'Impact,Charcoal,sans-serif'},
+	{name:localStorage.getItem('i18n')=='zh'?'Tahoma':'Tahoma',value:'Tahoma,Geneva,sans-serif'},
+	{name:localStorage.getItem('i18n')=='zh'?'Times New Roman':'Times New Roman',value:'Times New Roman,Times,serif'},
+	{name:localStorage.getItem('i18n')=='zh'?'Andale Mono':'Andale Mono',value:'Andale Mono'},
+	{name:localStorage.getItem('i18n')=='zh'?'Verdana':'Verdana',value:'Verdana,Geneva,sans-serif'},
+	{name:localStorage.getItem('i18n')=='zh'?'Book Antiqua':'Book Antiqua',value:'Book Antiqua'},
+	{name:localStorage.getItem('i18n')=='zh'?'Comic Sans MS':'Comic Sans MS',value:'Comic Sans MS'},
+	{name:localStorage.getItem('i18n')=='zh'?'Courier New':'Courier New',value:'Courier New'},
+	{name:localStorage.getItem('i18n')=='zh'?'Webdings':'Webdings',value:'Webdings'},
+	{name:localStorage.getItem('i18n')=='zh'?'Wingdings':'Wingdings',value:'Wingdings'}
 ]
 export const fontSizeOptions = [
 	{name:'12px',value:12},

+ 7 - 5
src/views/sandbox_manage/sandFlowNew/index.vue

@@ -119,11 +119,13 @@
                     <span v-show="nodeTextDisable" class="disabled-item" @click.stop="()=>{}"></span>
                   </el-tooltip>
                 </div>
-              <el-dropdown-menu slot="dropdown">
-                <el-dropdown-item v-for="f in familyOptions" :command="f.value" :key="f.value"
-                :class="styleOptions.fontF==f.value?'style-acitve':''">
-                    {{ f.name }}
-                </el-dropdown-item>
+              <el-dropdown-menu slot="dropdown" style="padding: 0;">
+                <div style="max-height: 208px; overflow-y: auto; padding: 10px 0;">
+                  <el-dropdown-item v-for="f in familyOptions" :command="f.value" :key="f.value"
+                  :class="styleOptions.fontF==f.value?'style-acitve':''">
+                      {{ f.name }}
+                  </el-dropdown-item>
+                </div>
               </el-dropdown-menu>
             </el-dropdown>
           </div>

+ 17 - 2
src/views/smartReport/components/TextEdit.vue

@@ -70,14 +70,29 @@ export default {
                 toolbarSticky: false, //操作栏是否自动吸顶
                 saveInterval: 0,
                 fontFamily:{
+                    '微软雅黑': '微软雅黑',
+                    '宋体': '宋体',
+                    '黑体': '黑体',
+                    '仿宋': '仿宋',
+                    '楷体': '楷体',
+                    '隶书': '隶书',
+                    '幼圆': '幼圆',
+                    '思源宋体': '思源宋体',
+                    '思源黑体': '思源黑体',
+                    'Helvetica': 'Helvetica',
                     'Arial,Helvetica,sans-serif': 'Arial',
+                    'Arial Black': 'Arial Black',
                     'Georgia,serif': 'Georgia',
                     'Impact,Charcoal,sans-serif': 'Impact',
                     'Tahoma,Geneva,sans-serif': 'Tahoma',
                     'Times New Roman,Times,serif': 'Times New Roman',
+                    'Andale Mono': 'Andale Mono',
                     'Verdana,Geneva,sans-serif': 'Verdana',
-                    '思源宋体':'思源宋体',
-                    '思源黑体':'思源黑体',
+                    'Book Antiqua': 'Book Antiqua',
+                    'Comic Sans MS': 'Comic Sans MS',
+                    'Courier New': 'Courier New',
+                    'Webdings': 'Webdings',
+                    'Wingdings': 'Wingdings',
                 },
                 events: {
                     //this.editor 定义在vue data 中

+ 7 - 4
src/views/supply_manage/components/createTargetDia.vue

@@ -25,13 +25,16 @@
 						:placeholder="$t('Edb.Detail.e_name')"></el-input>
 					</el-form-item>
 					<el-form-item :label="$t('Edb.Detail.select_catalogue')" prop="menu">
-						<el-cascader
+						<cascader
 						v-model="formData.menu"
 						:options="options"
-						:props="levelProps"
-						style="width: 80%"
+						cascaderWidth="width: 80%"
 						clearable
-						:placeholder="$t('CustomAnalysisPage.select_appropriate_category')"/>
+						:placeholder="
+							$t('CustomAnalysisPage.select_appropriate_category')
+						"
+						:config="{ checkStrictly: true }"
+						/>
 					</el-form-item>
 					<el-form-item :label="$t('Edb.Detail.e_fre')" prop="frequency">
 						<el-select 

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

@@ -30,7 +30,7 @@
                         :label="item.Name" :value="item.Value" />
                 </el-select>
             </el-form-item>
-            <el-form-item label="用户类型" prop="IsLdap">
+            <el-form-item label="用户类型" prop="IsLdap" v-permission="permissionBtn.sysDepartPermission.sysDepart_userType">
                 <el-select v-model="userForm.IsLdap" placeholder="请选择用户类型">
                     <el-option label="系统用户" :value="0"></el-option>
                     <el-option label="域用户" :value="1"></el-option>

+ 2 - 1
src/views/system_manage/components/smartReportImgSet.vue

@@ -238,7 +238,8 @@ export default {
                 value: '',
             },
             dragIndex:0,
-            layoutFontF:['Arial','Georgia','Impact','Tahoma','Times New Roman','Verdana','思源宋体','思源黑体'],
+            layoutFontF:['微软雅黑','宋体','黑体','仿宋','楷体','隶书','幼圆','思源宋体','思源黑体','Helvetica','Arial','Arial Black','Georgia','Impact','Tahoma','Times New Roman','Andale Mono','Verdana','Book Antiqua','Comic Sans MS','Courier New','Webdings','Wingdings'],
+            // layoutFontF:['Arial','Georgia','Impact','Tahoma','Times New Roman','Verdana','思源宋体','思源黑体'],
             layoutFontS:['12','13','14','15','16','18','20','24','28','32','36','40'],
             layoutFontW:[{value:'normal',label:this.$t('SystemManage.BaseConfig.style_font_w_normal')},
                         {value:'bold',label:this.$t('SystemManage.BaseConfig.style_font_w_bold')}],

+ 89 - 19
src/views/system_manage/etaBaseConfig.vue

@@ -155,6 +155,7 @@
                         </div>
                     </div>
                 </div>
+                
                 <!-- 研报设置 -->
                 <div class="part" v-show="partType===2">
                     <div class="side">
@@ -272,22 +273,76 @@
                                 </el-form-item>
                             </div>
                         </div>
+
+                        <!-- 研报logo -->
+                        <div>
+                            <div style="width:100%;margin-bottom: 20px;">
+                                <span style="color:#606266;">{{$t('SystemManage.BaseConfig.report_logo')}}({{$t('SystemManage.BaseConfig.recommended_ratio')}})</span>
+
+                                <el-form-item prop="ReportLogo" style="width:250px">
+                                    <ImgUpload 
+                                    id="logo-image"
+                                    :imgUrl="formData.ReportLogo"
+                                    :text="$t('SystemManage.BaseConfig.upload_image_tip')"
+                                    @showImage="showImage"
+                                    @upload="(file)=>handleUploadImage(file,'ReportLogo')"
+                                    @remove="deleteFormImg('ReportLogo')"
+                                    />
+                                    <ConfigAnnotation 
+                                        picHintText="" 
+                                        picName="ReportLogo" 
+                                        @showImage="previewImage" 
+                                        :buttonText="$t('SystemManage.BaseConfig.view_example_text')"
+                                    />
+                                </el-form-item>
+                            </div>
+                            <div class="side">
+                                <span>
+                                    {{reportFromType[0].label}}<el-switch v-model="formData.ReportCenterLogoShow" style="margin-right:20px"/>
+                                </span>
+                                <span v-if="isHaveEnReport">
+                                    {{reportFromType[1].label}}<el-switch v-model="formData.ReportEnLogoShow"/>
+                                </span>
+                            </div>
+                        </div>
                     </div>
                     <div class="side">
+                    
                         <el-form-item :label="$t('SystemManage.BaseConfig.disclaimer')" prop="Disclaimer" class="disclaimer">
+                            <el-radio-group 
+                                v-model="disclaimerLang" 
+                                style="margin-bottom: 22px;" 
+                                v-if="isHaveEnReport"
+                            >
+                                <el-radio-button label="cn">{{reportFromType[0].label}}</el-radio-button>
+                                <el-radio-button label="en">{{reportFromType[1].label}}</el-radio-button>
+                            </el-radio-group>
+
                             <div class="rich-editor-wrap">
-                                <froala :id="`disclaimer-editor`"
+                                <froala 
+                                    :id="`disclaimer-editor`"
                                     :ref="`disclaimerEditor`" 
                                     :tag="'textarea'" 
-                                    :config="disclaimerConfig" v-model="formData.Disclaimer">
-                                </froala>
+                                    :config="disclaimerConfig" 
+                                    v-model="formData.Disclaimer"
+                                    v-if="disclaimerLang==='cn'"
+                                />
+
+                                <froala 
+                                    :id="`disclaimer-editor2`"
+                                    :ref="`disclaimerEditor2`" 
+                                    :tag="'textarea'" 
+                                    :config="disclaimerConfig" 
+                                    v-model="formData.DisclaimerEn"
+                                    v-else
+                                />
                             </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-form-item :label="$t('SystemManage.BaseConfig.report_share_title_en')" prop="H5ShareEnName" v-if="isShowReportEnShare">
                             <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">
@@ -312,13 +367,14 @@
                         </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" v-permission="permissionBtn.enPPTPermission.pptEn_visible">{{$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 v-if="isShowPPT&&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>
@@ -389,18 +445,8 @@
                             </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> -->
+                    <div v-if="isShowEnPPT&&pptLang === 'en'" class="ppt-form-item-wrap">
+                        
                         <el-form-item :label="$t('SystemManage.BaseConfig.ppt_type01')" prop="EnPptCoverImgs" style="min-width:400px;">
                             <div class="input-line" style="display:flex;">
                                 <ImgUpload 
@@ -504,6 +550,7 @@ export default {
             approve:false,//是否开启研报审批
             formData: {
                 Disclaimer: '',//免责声明
+                DisclaimerEn: '',//英文免责声明
                 CompanyName:'',//公司名称
                 CompanyWatermark:'',//公司水印
                 WatermarkChart:0,//是否在研报图表中使用水印 0否 1是
@@ -549,6 +596,10 @@ export default {
                 LogoCN:'',//logo-中文版
                 LogoEN:'',//logo-英文版 
                 LogoMobile:'',//logo-移动端登录页
+
+                ReportLogo: '',
+                ReportCenterLogoShow: false,//研报中心详情logo显示
+                ReportEnLogoShow: false,//英文研报logo显示
             },//表单预设值
             rules: {
                 Disclaimer:[{ required: true, message: '请输入免责声明', trigger: 'blur' }],
@@ -642,6 +693,7 @@ export default {
                 'LogoCN':[require('@/assets/img/eta_base_config/Logo_ch.png')],
                 'LogoEN':[require('@/assets/img/eta_base_config/Logo_en.png')],
                 'LogoMobile':[require('@/assets/img/eta_base_config/ETA_mobile_logo.png')],  
+                'ReportLogo': [require('@/assets/img/eta_base_config/report_logo.png')]
             },
             /* loading */
             configLoading:null,
@@ -672,7 +724,9 @@ export default {
                 { label:'16',val:'16' },
                 { label:'17',val:'17' },
                 { label:'18',val:'18' },
-            ]
+            ],
+
+            disclaimerLang:'cn',//摘要中英文分开
 
 
         };
@@ -724,6 +778,18 @@ export default {
                 this.permissionBtn.baseConfigPermission.etaBaseConfig_source_see
             )
         },
+
+        isShowReportEnShare(){
+            return this.permissionBtn.checkPermissionBtn(
+                this.permissionBtn.baseConfigPermission.etaBaseConfig_watermark_ybEnShare
+            )
+        },
+        
+        isHaveEnReport() {
+            return this.permissionBtn.checkPermissionBtn(
+                this.permissionBtn.enReportManageBtn.enReport_reportView
+            )
+        }
     },
     watch: {
         'isShowLoginConfig':{
@@ -817,6 +883,8 @@ export default {
                     this.formData.LogoCN = res.Data.LogoCN || require('@/assets/img/login_logo.png')
                     this.formData.LogoEN = res.Data.LogoEN || require('@/assets/img/en/logo.png')
                     this.formData.LogoMobile = res.Data.LogoMobile || require('@/assets/img/logo_mobile.png')
+                    this.formData.ReportCenterLogoShow = res.Data.ReportCenterLogoShow==='true'?true:false;
+                    this.formData.ReportEnLogoShow = res.Data.ReportEnLogoShow==='true'?true:false;
                 }
                 this.configLoading&&this.configLoading.close()
             })
@@ -869,7 +937,9 @@ export default {
                         ...{
                             CnPptCoverImgs,
                             EnPptCoverImgs,
-                            WatermarkReport:this.formData.WatermarkReport?'true':'false'
+                            WatermarkReport:this.formData.WatermarkReport?'true':'false',
+                            ReportCenterLogoShow:this.formData.ReportCenterLogoShow?'true':'false',
+                            ReportEnLogoShow:this.formData.ReportEnLogoShow?'true':'false',
                         }
                     }).then(res=>{
                         if(res.Ret!==200) return