Ver código fonte

Merge branch 'custom' of http://8.136.199.33:3000/eta_front/eta_front into eta1.8.0

cxmo 11 meses atrás
pai
commit
3cc4e735ba
43 arquivos alterados com 939 adições e 104 exclusões
  1. 4 2
      src/api/api.js
  2. 58 1
      src/api/modules/thirdBaseApi.js
  3. BIN
      src/assets/img/eta_base_config/ETA_mobile_logo.png
  4. BIN
      src/assets/img/eta_base_config/ETA_mobile_title.png
  5. BIN
      src/assets/img/eta_base_config/Logo_ch.png
  6. BIN
      src/assets/img/eta_base_config/Logo_en.png
  7. BIN
      src/assets/img/logo_mobile.png
  8. 2 2
      src/lang/modules/DataReport/GlStatisticTable.js
  9. 8 0
      src/lang/modules/DataSources/En.js
  10. 8 0
      src/lang/modules/DataSources/Zh.js
  11. 1 1
      src/lang/modules/ETATables/En.js
  12. 1 1
      src/lang/modules/ETATables/Zh.js
  13. 4 4
      src/lang/modules/EtaBase/commonLang.js
  14. 2 2
      src/lang/modules/EtaChart/commonLang.js
  15. 1 1
      src/lang/modules/PredictEdb/Zh.js
  16. 6 6
      src/lang/modules/ReportManagement/ReportList.js
  17. 6 6
      src/lang/modules/SandboxManage/SandFlow.js
  18. 1 1
      src/lang/modules/SandboxManage/SandList.js
  19. 4 4
      src/lang/modules/Slides/pptPresent.js
  20. 23 2
      src/lang/modules/systemManage/BaseConfig.js
  21. 2 2
      src/lang/modules/systemManage/ChartSet.js
  22. 8 8
      src/lang/modules/systemManage/OperateAuth.js
  23. 11 11
      src/routes/modules/chartRoutes.js
  24. 6 0
      src/routes/modules/dataRoutes.js
  25. 7 0
      src/utils/buttonConfig.js
  26. 23 12
      src/views/Home.vue
  27. 1 1
      src/views/Login.vue
  28. 26 8
      src/views/dataEntry_manage/databaseComponents/jointTargetDia.vue
  29. 1 1
      src/views/dataEntry_manage/targetList.vue
  30. 569 0
      src/views/dataEntry_manage/thirdBase/bloombergSource.vue
  31. 1 1
      src/views/dataSource_manage/components/EDBInfoChangeTable.vue
  32. 3 2
      src/views/datasheet_manage/components/calculateEdbDia.vue
  33. 2 2
      src/views/datasheet_manage/customAnalysis/list.vue
  34. 4 3
      src/views/ppt_manage/newVersion/pptEditor.vue
  35. 3 3
      src/views/ppt_manage/newVersion/pptEnCatalog.vue
  36. 4 3
      src/views/ppt_manage/newVersion/pptEnEditor.vue
  37. 4 4
      src/views/ppt_manage/newVersion/pptEnPublish.vue
  38. 10 2
      src/views/ppt_manage/newVersion/utils/untils.js
  39. 1 1
      src/views/smartReport/components/ETAChart.vue
  40. 5 1
      src/views/system_manage/components/imgUpload.vue
  41. 113 5
      src/views/system_manage/etaBaseConfig.vue
  42. 1 0
      src/vuex/index.js
  43. 5 1
      src/vuex/mutations.js

+ 4 - 2
src/api/api.js

@@ -15,7 +15,8 @@ import {
   fwmtInterface,
   guangqiInterface,
   icpiInterface,
-  coalWordInterface
+  coalWordInterface,
+  bloombergInterface
 } from './modules/thirdBaseApi';
 
 //手工指标 手工数据 手工数据权限
@@ -122,7 +123,8 @@ export {
   fwmtInterface,
   guangqiInterface,
   icpiInterface,
-  coalWordInterface
+  coalWordInterface,
+  bloombergInterface
 };
 
 //老接口 研报 ppt等

+ 58 - 1
src/api/modules/thirdBaseApi.js

@@ -910,6 +910,62 @@ const coalWordInterface={
 		return http.get('/entry/data/mtjh/frequency',params)
 	},
 }
+/* 彭博数据源 */
+const bloombergInterface={
+    /**
+     * 数据列表
+     * @param {Object} params 
+     * @param {Number} params.PageSize
+     * @param {Number} params.CurrentIndex
+     * @param {String} params.Frequency
+     * @param {String} params.Keywords
+     * @param {Boolean} params.ListAll
+     * @param {Number} params.SortField
+     * @param {Number} params.SortRule
+     * @returns 
+     */
+    getTableList:params=>{
+        return http.get('/datamanage/bloomberg_source/list',params)
+    },
+    /**
+     * 指标重名校验
+     * @param {Object[]} params
+     * @param {String} params[].EdbCode //指标编码
+     * @param {String} params[].EdbName //指标名称
+     * @returns 
+     */
+    edbNameCheck:params=>{
+        return http.post('/datamanage/bloomberg_source/name_check',params)
+    },
+    /**
+     * 添加指标校验
+     * @param {Object} params 
+     * @param {Object} params.Frequency
+     * @param {Object} params.Keywords
+     * @param {Object} params.SortField
+     * @param {Object} params.SortRule
+     * @param {Boolean} params.ListAll
+     * @param {String[]} params.IndexCodes
+     * @returns 
+     */
+    edbAddCheck:params=>{
+        return http.post('/datamanage/bloomberg_source/add_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 
+     */
+    edbBatchAdd:params=>{
+        return http.post('/datamanage/bloomberg_source/batch_add',params)
+    },
+
+}
 
 export { 
 	lzDataInterface,
@@ -926,5 +982,6 @@ export {
   fwmtInterface,
 	guangqiInterface,
 	icpiInterface,
-	coalWordInterface
+	coalWordInterface,
+    bloombergInterface
 }

BIN
src/assets/img/eta_base_config/ETA_mobile_logo.png


BIN
src/assets/img/eta_base_config/ETA_mobile_title.png


BIN
src/assets/img/eta_base_config/Logo_ch.png


BIN
src/assets/img/eta_base_config/Logo_en.png


BIN
src/assets/img/logo_mobile.png


+ 2 - 2
src/lang/modules/DataReport/GlStatisticTable.js

@@ -25,7 +25,7 @@ export const GlStatisticTableEn = {
     table_tips10:'Number of indicators failed updated on this terminal today',
     table_tips11:'Number of indicators for which the terminal successfully initiated update tasks but indicator data did not change today',
     table_tips12:'Number of indicators for which  terminal data changed today',
-    table_tips13:'Name saved in ETA indicators',
+    table_tips13:'Name saved in indicators',
 
     change_placeholder:'Please select change type',
     change_type01:'Change of Basic Information',
@@ -71,7 +71,7 @@ export const GlStatisticTableZh = {
     table_tips10:'今日该终端刷新失败的指标数量',
     table_tips11:'今日该终端成功发起刷新任务,但指标数据未变化的指标数量',
     table_tips12:'今日该终端数据发生变化的指标数量',
-    table_tips13:'指标在ETA指标库保存的指标名称',
+    table_tips13:'指标在指标库保存的指标名称',
 
     change_placeholder:'请选择变更类型',
     change_type01:'基础信息变更',

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

@@ -193,6 +193,14 @@ export default {
     col_status_irr:'Updates dependent on external sources may experience irregular delays',
     haved_all_msg:'All indicators added this time are already in the indicator library, please do not add them again!',
     haved_some_msg:'The following indicators already exist in the indicator library and will be automatically filtered out!'
+  },
+
+  /* 彭博数据源 */
+  BloombergPage:{
+    operation_prompt:'Operation Prompt',
+    add_edb_hint:'Max 30 indicators for bulk add!',
+    add_edb_check_hint1:'Incomplete Indicator Info',
+    add_edb_check_hint2:'Indicator name exists, please re-enter'
   }
   
 }

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

@@ -192,5 +192,13 @@ export default {
     col_status_irr:'更新依赖外部会有不定期延迟',
     haved_all_msg:'本次添加的指标均已在指标库中,请勿重复添加!',
     haved_some_msg:'指标库中已存在以下指标,会自动过滤!'
+  },
+
+  /* 彭博数据源 */
+  BloombergPage:{
+    operation_prompt:'操作提示',
+    add_edb_hint:'批量添加指标数量不得超过30个!',
+    add_edb_check_hint1:'指标信息未填写完整',
+    add_edb_check_hint2:'指标名称已存在,请重新填写'
   }
 }

+ 1 - 1
src/lang/modules/ETATables/En.js

@@ -36,7 +36,7 @@ export default {
     keep_one_row_msg: "Please keep at least one row",
     no_here_val_msg: "Unable to insert value here",
     TableInstructionsText: `Table Instructions:<br />
-    1. Manual Input: Click on each cell to directly enter text, numbers, or dates (format example: 2023-05-23). The entered content can match the names of metrics. Metrics from both the ETA Metric Library and the ETA Forecast Metric Library are searchable. If a metric is selected from the dropdown list, then that cell becomes a designated row/column for the selected metric.<br />
+    1. Manual Input: Click on each cell to directly enter text, numbers, or dates (format example: 2023-05-23). The entered content can match the names of metrics. Metrics from both the Metric Library and the Forecast Metric Library are searchable. If a metric is selected from the dropdown list, then that cell becomes a designated row/column for the selected metric.<br />
     2. Insert Metric Value: Right-click on a cell and click "Insert Metric Value". The system will query for the closest date and metric name based on the cell's row and column, and then populate the cell with the value of the metric corresponding to that date. The metric value is always positioned in the lower right corner of the cell.<br />
     3. Update and Calculation Rules: The dates associated with metric values in the table do not update automatically, and values do not support calculations within cells.`,
     select_table_category: "Please select table category",

+ 1 - 1
src/lang/modules/ETATables/Zh.js

@@ -50,7 +50,7 @@ export default {
     table_name_empty_msg: "表格名称不能为空",
     name_empty_msg: "名称不能为空",
     TableInstructionsText: `表格说明:<br>
-    1、手动输入:单击每个单元格可直接输入文本、数字、日期(格式示例:2023-05-23),输入内容可匹配指标名称,ETA指标库和ETA预测指标库指标均可搜索,在下拉框中选择指标,则该单元格为已选指标行/列。<br>
+    1、手动输入:单击每个单元格可直接输入文本、数字、日期(格式示例:2023-05-23),输入内容可匹配指标名称,指标库和预测指标库指标均可搜索,在下拉框中选择指标,则该单元格为已选指标行/列。<br>
     2、插入指标值:右键单元格,点击“插入指标值”,则查询该单元格行、列最近的日期和指标名称,将查找到的指标对应日期的值填入该单元格,指标值总是在右下角。<br>
     3、更新与计算规则:表格中指标值的日期不自动更新,数值不支持单元格计算`,
     date_type_label: "日期类型",

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

@@ -85,12 +85,12 @@ export default {
     en:'Switch to curve chart'
   },
   eta_name:{
-    zh:'ETA指标',
-    en:'ETA index'
+    zh:'指标',
+    en:'index'
   },
   eta_predictor_name:{
-    zh:'ETA预测指标',
-    en:'ETA predictor index'
+    zh:'预测指标',
+    en:'predictor index'
   },
   formula_instru: {
     zh:'公式说明',

+ 2 - 2
src/lang/modules/EtaChart/commonLang.js

@@ -526,8 +526,8 @@ export default {
   /* 所有source */
   AllChartSource: {
     eta_chart: {
-      en: "ETA Gallery",
-      zh: "ETA图库",
+      en: "Gallery",
+      zh: "图库",
     },
     commodity_chart: {
       en: "Commodity Price Curve",

+ 1 - 1
src/lang/modules/PredictEdb/Zh.js

@@ -6,7 +6,7 @@ export default {
   PredictEdbPage: {
     only_see_mine: '只看我的',
     total_list_view: '共{limit}个预测指标',
-    del_edb_msg: 'ETA预测指标删除后不可恢复,确认删除吗',
+    del_edb_msg: '预测指标删除后不可恢复,确认删除吗',
     
     /* 查看基础指标弹窗 */
     view_rules: '查看预测规则',

+ 6 - 6
src/lang/modules/ReportManagement/ReportList.js

@@ -47,7 +47,7 @@ export const ReportListEn = {
   frequency_select: "Frequency",
   creation_time_select: "Creation time",
   insert_chart_tabs: "Insert chart",
-  chart_inventory_radio: "ETA Gallery",
+  chart_inventory_radio: "Gallery",
   price_curve_radio: "Commodity price curve",
   related_charts_radio: "Related Charts",
   curve_fitting_radio: "Curve fitting",
@@ -58,7 +58,7 @@ export const ReportListEn = {
   no_reports_msg: "Sandbox Name/Commodity",
   insert_table_tabs: "Insert Table",
   table_name_tabs: "Table Name",
-  bulk_insertion_tabs: "Bulk Insertion of MyETA",
+  bulk_insertion_tabs: "My gallery batch insert",
   semantic_analysis_tabs: "Semantic Analysis Insertion",
   publish_time: "Publish Time",
   select_date_and_time: "Select Date and Time",
@@ -71,7 +71,7 @@ export const ReportListEn = {
   select_date: "Select date",
   charts_update_btn: "Charts update",
   library_top_type: "Territory Lib",
-  eta_top_type: "ETA table",
+  eta_top_type: "table",
   statistical_top_type: "Stats Analysis",
   sandbox_top_type: "Sandbox",
   semantic_top_type: "Semantic Analy",
@@ -164,7 +164,7 @@ export const ReportListZh = {
   frequency_select: "频度",
   creation_time_select: "创建时间",
   insert_chart_tabs: "图表插入",
-  chart_inventory_radio: "ETA图库",
+  chart_inventory_radio: "图库",
   price_curve_radio: "商品价格曲线",
   related_charts_radio: "相关性图表",
   curve_fitting_radio: "拟合方程曲线",
@@ -175,7 +175,7 @@ export const ReportListZh = {
   no_reports_msg: "沙盘名称/品种",
   insert_table_tabs: "表格插入",
   table_name_tabs: "表格名称",
-  bulk_insertion_tabs: "MyETA批量插入",
+  bulk_insertion_tabs: "我的图库批量插入",
   semantic_analysis_tabs: "语义分析插入",
   publish_time: "发送时间",
   select_date_and_time: "选择日期时间",
@@ -188,7 +188,7 @@ export const ReportListZh = {
   select_date: "选择日期",
   charts_update_btn: "图表刷新",
   library_top_type: "版图资源库",
-  eta_top_type: "ETA表格",
+  eta_top_type: "表格",
   statistical_top_type: "统计分析",
   sandbox_top_type: "沙盘图",
   semantic_top_type: "语义分析",

+ 6 - 6
src/lang/modules/SandboxManage/SandFlow.js

@@ -46,9 +46,9 @@ export const SandFlowEn = {
     copy_tag:'Copy',
     delete_tag:'Delete',
     add_link_search_placeholder:'Indicator ID/ indicator name',
-    link_type_opt1:'ETA Indicator/ ETA forecast indicator',
-    link_type_opt2:'ETA Image library',
-    link_type_opt3:'ETA reports',
+    link_type_opt1:'Indicator/ forecast indicator',
+    link_type_opt2:'Image library',
+    link_type_opt3:'reports',
     msg_leave_page_save:'Before leaving this page, do you want to save current contents?',
   };
   
@@ -96,9 +96,9 @@ export const SandFlowEn = {
     copy_tag:'复制',
     delete_tag:'删除',
     add_link_search_placeholder:'指标ID/指标名称',
-    link_type_opt1:'ETA指标/ETA预测指标',
-    link_type_opt2:'ETA图库',
-    link_type_opt3:'ETA研报',
+    link_type_opt1:'指标/预测指标',
+    link_type_opt2:'图库',
+    link_type_opt3:'研报',
     msg_leave_page_save:'在离开页面之前,是否保存当前内容?',
 
   };

+ 1 - 1
src/lang/modules/SandboxManage/SandList.js

@@ -5,7 +5,7 @@
 /* 英文 */
 export const SandListEn = {
     logic_add_btn:'Add logic diagram', 
-    only_see:'Only see my ETA logic diagram',
+    only_see:'Only see my logic diagram',
     search_placeholder:"Please enter the logic diagram's name",
     categories_add_btn:'Add categories',
     categories_edit_btn:'Edit categories',

+ 4 - 4
src/lang/modules/Slides/pptPresent.js

@@ -17,7 +17,7 @@ export const presentEn = {
   paste_element_btn: "Paste element",
   layer_editing: "Layer editing",
   keyword_search: "Keyword search",
-  eta_chart_gallery: "ETA Chart Gallery",
+  eta_chart_gallery: "Chart Gallery",
   commodity_price_curve: "Commodity Price Curve",
   correlation_charts: "Correlation Charts",
   fitted_equation_curves: "Fitted Equation Curves",
@@ -28,7 +28,7 @@ export const presentEn = {
   sandbox_name: "Sandbox",
   table_name: "Table",
   table_name_input: "Table Name",
-  my_eta_batch: "MyETA Batch",
+  my_eta_batch: "My gallery batch operations",
   layer_element: "Layer element",
   line_settings: "Line settings",
   outline_element: "Outline settings",
@@ -106,7 +106,7 @@ export const presentZh = {
   paste_element_btn: "粘贴元素",
   layer_editing: "图层编辑",
   keyword_search: "关键字查找",
-  eta_chart_gallery: "ETA图库",
+  eta_chart_gallery: "图库",
   commodity_price_curve: "商品价格曲线",
   correlation_charts: "相关性图表",
   fitted_equation_curves: "拟合方程曲线",
@@ -118,7 +118,7 @@ export const presentZh = {
   table_name: "表格",
   table_analysis_semantic: "语义分析插入",
   table_name_input: "表格名称",
-  my_eta_batch: "MyETA批量",
+  my_eta_batch: "我的图库批量",
   table_chart: "图表",
   layer_element: "图层元素",
   line_settings: "线条设置",

+ 23 - 2
src/lang/modules/systemManage/BaseConfig.js

@@ -25,7 +25,7 @@ export const BaseConfigEn = {
     iFLYTEK_service:'iFLYTEK Service',
     please_enter:'Please enter',
     report_approval:'Report Approval',
-    internal_approval:'ETA Internal Approval',
+    internal_approval:'Internal Approval',
     third_approval:'Third-party Approval',
     third_approval_tips:"Chinese Research Report(Intelligent Research Report/Research Report List) connected to third-party approval systems via API interface",
     report_share_title_zh:'Title of Chinese research report sharing',
@@ -76,6 +76,17 @@ export const BaseConfigEn = {
     login_name:'Website Name',
     login_name_pld:'Enter Website Name',
     login_diagram:'View Diagram',
+    pc:"PC",
+    mobile:"Mobile",
+    website_name:"Website Name",
+    english_version:"English Version",
+    chinese_version:"Chinese Version",
+    recommended_ratio:"Recommended Ratio 4:1",
+    pc_website_title_Tip:"Please enter the PC website name",
+    mobile_website_title_Tip:"Please enter the mobile website name",
+    system_logo:"System Logo",
+    upload_image_tip:"Click to Upload Image",
+    
 };
   
 /* 中文 */
@@ -101,7 +112,7 @@ export const BaseConfigZh = {
     iFLYTEK_service:'科大讯飞服务',
     please_enter:'请输入',
     report_approval:'研报审批',
-    internal_approval:'ETA内部审批',
+    internal_approval:'内部审批',
     third_approval:'第三方审批',
     third_approval_tips:'中文研报(智能研报/研报列表)通过API接口对接第三方审批系统',
     report_share_title_zh:'中文研报分享抬头',
@@ -153,6 +164,16 @@ export const BaseConfigZh = {
     login_diagram:'查看示意图',
 
     
+    pc:"PC端",
+    mobile:"移动端",
+    website_name:"网站名称",
+    english_version:"英文版",
+    chinese_version:"中文版",
+    recommended_ratio:"推荐比例4:1",
+    pc_website_title_Tip:"请输入PC端网站名称",
+    mobile_website_title_Tip:"请输入移动端网站名称",
+    system_logo:"系统logo",
+    upload_image_tip:"点击上传图片",
 };
   
 /**

+ 2 - 2
src/lang/modules/systemManage/ChartSet.js

@@ -5,7 +5,7 @@
 /* 英文 */
 export const ChartSetEn = {
     label01:'Chart Types',
-    label02:'ETA Chart Library Default Theme',
+    label02:'Chart Library Default Theme',
     add_btn:'Add Custom Theme',
     edit_btn:'Edit Custom Theme',
     theme_name:'Theme Name',
@@ -42,7 +42,7 @@ export const ChartSetEn = {
 /* 中文 */
 export const ChartSetZh = {
     label01:'图表类型',
-    label02:'ETA图库默认主题',
+    label02:'图库默认主题',
     add_btn:'添加自定义主题',
     edit_btn:'编辑自定义主题',
     theme_name:'主题名称',

+ 8 - 8
src/lang/modules/systemManage/OperateAuth.js

@@ -6,10 +6,10 @@
 export const OperateAuthEn = {
     tab01:'Manual Data Indicators',
     tab02:'My Steel Chemical Database',
-    tab03:'ETA Indicator Library',
-    tab04:'ETA Predictive Indicators',
-    tab05:'ETA Gallery',
-    tab06:'ETA Tables',
+    tab03:'Indicator Library',
+    tab04:'Predictive Indicators',
+    tab05:'Gallery',
+    tab06:'Tables',
 
     placeholder01:'Please Enter Chart Name',
     placeholder02:'Please Enter Indicator ID/Indicator Name',
@@ -76,10 +76,10 @@ export const OperateAuthEn = {
 export const OperateAuthZh = {
     tab01:'手工数据指标',
     tab02:'钢联化工数据库',
-    tab03:'ETA指标库',
-    tab04:'ETA预测指标',
-    tab05:'ETA图库',
-    tab06:'ETA表格',
+    tab03:'指标库',
+    tab04:'预测指标',
+    tab05:'图库',
+    tab06:'表格',
 
     placeholder01:'请输入图表名称',
     placeholder02:'请输入指标Id/指标名称',

+ 11 - 11
src/routes/modules/chartRoutes.js

@@ -5,7 +5,7 @@ export default [
 	{
 		path: '/',
 		component: home,
-		name: 'ETA图库',
+		name: '图库',
 		hidden: false,
 		icon_path: require('@/assets/img/home/data_ic.png'),
 		meta:{
@@ -14,7 +14,7 @@ export default [
 		children: [{
 				path: 'chartsetting',
 				component: () => import('@/views/dataEntry_manage/chartSetting.vue'),
-				name: 'ETA图库',
+				name: '图库',
 				hidden: false,
 				meta:{
 					name_en:'Charts'
@@ -45,7 +45,7 @@ export default [
 	{
 		path: '/',
 		component: home,
-		name: 'ETA指标库',
+		name: '指标库',
 		hidden: false,
 		icon_path: require('@/assets/img/home/data_ic.png'),
 		meta:{
@@ -55,7 +55,7 @@ export default [
 			{
 				path: 'database',
 				component: () => import('@/views/dataEntry_manage/databaseList.vue'),
-				name: 'ETA指标库',
+				name: '指标库',
 				hidden: false,
 				meta:{
 					name_en:'ETA Indics'
@@ -86,7 +86,7 @@ export default [
 	{
 		path: '/',
 		component: home,
-		name: 'My ETA',
+		name: '我的图库',
 		hidden: false,
 		icon_path: require('@/assets/img/home/data_ic.png'),
 		meta:{
@@ -95,7 +95,7 @@ export default [
 		children: [
 			{
 				path: 'mychart',
-				name: 'My ETA',
+				name: '我的图库',
 				component: () => import('@/views/mychart_manage/index.vue'),
 				hidden: false,
 				meta:{
@@ -136,7 +136,7 @@ export default [
 	{
 		path: '/',
 		component: home,
-		name: 'ETA表格',
+		name: '表格',
 		hidden: false,
 		meta:{
 			name_en:'ETA Tables'
@@ -230,7 +230,7 @@ export default [
 	{
 		path: '/',
 		component: home,
-		name: 'ETA逻辑',
+		name: '逻辑',
 		hidden: false,
 		meta:{
 			name_en:"Logic Diagram"
@@ -245,7 +245,7 @@ export default [
 			// 改版后的ETA逻辑图
 			{
 				path: "sandlist",
-				name: 'ETA逻辑',
+				name: '逻辑',
 				component: () => import('@/views/sandbox_manage/index_new_version.vue'),
 				hidden: false,
 				meta:{
@@ -273,7 +273,7 @@ export default [
 	{
 		path:'/',
 		component: home,
-		name: 'ETA预测指标',
+		name: '预测指标',
 		hidden:  false,
 		meta:{
 			name_en:"Pred Inds"
@@ -281,7 +281,7 @@ export default [
 		children: [
 			{
 				path: 'predictEdb',
-				name: 'ETA预测指标',
+				name: '预测指标',
 				component:()=>import('@/views/predictEdb_manage/predictEdb.vue'),
 				meta:{
 					name_en:"Pred Inds"

+ 6 - 0
src/routes/modules/dataRoutes.js

@@ -306,6 +306,12 @@ export default [
         hidden: false,
         name_en:"Meitanjianghu"
       },
+      {
+        path: "bloomberg",
+        component: () => import("@/views/dataEntry_manage/thirdBase/bloombergSource.vue"),
+        name: "Bloomberg",
+        hidden: false
+      },
     ],
   },
 ];

+ 7 - 0
src/utils/buttonConfig.js

@@ -262,6 +262,8 @@ export const dataSourcePermission = {
     /*--------煤炭江湖---- */
     coalWordData_view:'coalWord:view', // 查看
     coalWordData_export:'coalWord:export', // 导出
+    /*--------彭博数据源--- */
+    Bloomberg_add2edb:'Bloomberg:add2edb',//添加指标库
 }
 
 /*
@@ -708,6 +710,11 @@ export const baseConfigPermission = {
     etaBaseConfig_watermark_ybShare:'etaBaseConfig:watermark:ybShare',//如果没权限,表单不显示也不校验
     etaBaseConfig_source_see:'baseSetting:sourceSetting:see',//资源库查看
     etaBaseConfig_source_upload:'baseSetting:sourceSetting:upload',//资源库上传
+    // 登录设置
+    etaBaseConfig_login_systemLogo_mobile:'baseSetting:loginSetting:systemLogo:mobile',//系统logo移动端
+    etaBaseConfig_login_systemLogo_pc:'baseSetting:loginSetting:systemLogo:pc',//系统logoPC端
+    etaBaseConfig_login_websiteName_mobile:'baseSetting:loginSetting:websiteName:mobile',//网站名称移动端
+    etaBaseConfig_login_websiteName_pc:'baseSetting:loginSetting:websiteName:pc',//网站名称移动端
 }
 
 /*-----------外部链接配置-------- */

+ 23 - 12
src/views/Home.vue

@@ -368,7 +368,8 @@ export default {
 		},
 
     logoLarge() {
-      return this.$i18n.locale == 'en' ? require('@/assets/img/en/logo.png') : this.$setting.g_logo
+      return this.$i18n.locale == 'en' ? this.$store.state.baseInfo.logoEn || require('@/assets/img/en/logo.png'): 
+                                          this.$store.state.baseInfo.logoCh || this.$setting.g_logo
     }
   },
   data() {
@@ -434,11 +435,11 @@ export default {
         出差管理: "Trip",
         研报管理: "Rpt",
         语义分析: "Nlp",
-        ETA表格: "Tbl",
-        ETA指标库: "Inx",
+        表格: "Tbl",
+        指标库: "Inx",
         相关性: "Co-R",
-        ETA预测指标: "FInx",
-        ETA图库: "Gra",
+        预测指标: "FInx",
+        图库: "Gra",
         /* 151:'FData', */
         供应分析: "Sup",
         商品价格曲线: "Crv",
@@ -447,7 +448,6 @@ export default {
       //链接系统
       linkSystems: this.$setting.linkSystems,
       bus_code:"",
-
     };
   },
   created() {
@@ -464,6 +464,7 @@ export default {
     this.getBusinessCodeFun()
     
     this.getQuestionStaus()
+    this.getSystemInfo();//获取配置信息
   },
   mounted() {
     if (sessionStorage.getItem("hasGetMenu")) {
@@ -484,12 +485,12 @@ export default {
         ['英文ppt',require('@/assets/icons/menu/english_ppt.png')],
         ['审批管理',require('@/assets/icons/menu/OKobqhVdWm0TkAFiimA8pxvPl1fk.png')],
         ['数据源',require('@/assets/icons/menu/data_source.png')],
-        ['ETA指标库',require('@/assets/icons/menu/eta_data.png')],
-        ['ETA预测指标',require('@/assets/icons/menu/eta_predict_data.png')],
-        ['ETA图库',require('@/assets/icons/menu/eta_chart.png')],
-        ['My ETA',require('@/assets/icons/menu/my_eta.png')],
-        ['ETA表格',require('@/assets/icons/menu/eta_table.png')],
-        ['ETA逻辑',require('@/assets/icons/menu/eta_logic.png')],
+        ['指标库',require('@/assets/icons/menu/eta_data.png')],
+        ['预测指标',require('@/assets/icons/menu/eta_predict_data.png')],
+        ['图库',require('@/assets/icons/menu/eta_chart.png')],
+        ['我的投研',require('@/assets/icons/menu/my_eta.png')],
+        ['表格',require('@/assets/icons/menu/eta_table.png')],
+        ['逻辑',require('@/assets/icons/menu/eta_logic.png')],
         ['语义分析',require('@/assets/icons/menu/semantic_analysis.png')],
         ['统计分析',require('@/assets/icons/menu/statistic_analysis.png')],
         ['供应分析',require('@/assets/icons/menu/supply_analysis.png')],
@@ -909,6 +910,16 @@ export default {
        this.$i18n.locale =  this.$i18n.locale == 'zh' ? 'en' : 'zh'
        localStorage.setItem('i18n',this.$i18n.locale)
     },
+    getSystemInfo(){
+      departInterence.getBaseInfo().then(res=>{
+        if(res.Ret == 200){
+
+          this.$store.commit('SET_BASE_INFO',
+            {logoCh:res.Data.LogoCn?res.Data.LogoCn.ConfVal:'',logoEn:res.Data.LogoEn?res.Data.LogoEn.ConfVal:''}
+          )
+        }
+      })
+    }
   },
 };
 </script>

+ 1 - 1
src/views/Login.vue

@@ -73,7 +73,7 @@
 			<div class="login-box" id="login-container" v-if="activeModel!=='forgetPassModel'">
                 <div class="fixed-login-cont">
                     <span class="login-title">{{ loginTitle }}</span>
-                    <span class="login-sub-title">ETA — {{ $t('LoginPage.login_sub_tit') }}<!-- 让投研领先市场半步 --></span>
+                    <span class="login-sub-title">{{ $t('LoginPage.login_sub_tit') }}<!-- 让投研领先市场半步 --></span>
                     <el-tabs v-model="activeModel" >
 
                         <OrdinaryModel ref="ordinaryModel"

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

@@ -54,6 +54,7 @@
 						:remote-method="query=>{searchHandle(query)}"
 						@click.native="inputFocusHandle"
 						@blur="search_have_more = false"
+						@change="chooseTarget(formData.pre_edb,'pre_edb')"
 					>
 						<i slot="prefix" class="el-input__icon el-icon-search"></i>
 						<el-option
@@ -75,7 +76,7 @@
 							</div>
 						</el-option>
 					</el-select>
-					<span v-if="formData.pre_edb">({{$t('Edb.Detail.e_start_time')}}:{{ searchOptions.find(item => item.EdbInfoId === formData.pre_edb) ? searchOptions.find(item => item.EdbInfoId === formData.pre_edb).StartDate : ''}})</span>
+					<span v-if="formData.pre_date">({{$t('Edb.Detail.e_start_time')}}:{{ formData.pre_date}})</span>
 				</el-form-item>
 				<el-form-item :label="$t('EtaBasePage.label_concat_date_after')" prop="after_edb">
 					<el-select
@@ -90,7 +91,7 @@
 							:remote-method="query=>{searchHandle(query)}"
 							@click.native="inputFocusHandle"
 							@blur="search_have_more = false"
-							@change="chooseTarget(formData.after_edb,'searchOptions')"
+							@change="chooseTarget(formData.after_edb,'after_edb')"
 						>
 							<i slot="prefix" class="el-input__icon el-icon-search"></i>
 							<el-option
@@ -112,7 +113,7 @@
 								</div>
 							</el-option>
 						</el-select>
-						<span v-if="formData.after_edb">({{$t('Edb.Detail.e_latest_date')}}:{{ searchOptions.find(item => item.EdbInfoId === formData.after_edb) ? searchOptions.find(item => item.EdbInfoId === formData.after_edb).EndDate : ''}})</span>
+						<span v-if="formData.after_date">({{$t('Edb.Detail.e_latest_date')}}:{{ formData.after_date }})</span>
 				</el-form-item>
 			</template>
 			<template v-else>
@@ -129,7 +130,7 @@
 						:remote-method="query=>{searchHandle(query,'month')}"
 						@click.native="e => {inputFocusHandle(e,'month')} "
 						@blur="search_have_more = false"
-						@change="chooseTarget(formData.old_stay_edb,'searchMonthOptions')"
+						@change="chooseTarget(formData.old_stay_edb,'old_stay_edb')"
 						>
 							<i slot="prefix" class="el-input__icon el-icon-search"></i>
 							<el-option
@@ -151,7 +152,7 @@
 								</div>
 							</el-option>
 						</el-select>
-					<span v-if="formData.old_stay_edb">({{$t('EtaBasePage.label_end_date')}}:{{searchMonthOptions.find(item => item.EdbInfoId === formData.old_stay_edb) ? searchMonthOptions.find(item => item.EdbInfoId === formData.old_stay_edb).EndDate : ''}})</span>
+					<span v-if="formData.old_stay_date">({{$t('EtaBasePage.label_end_date')}}:{{ formData.old_stay_date }})</span>
 				</el-form-item>
 				<el-form-item :label="$t('EtaBasePage.label_onyear_date')" prop="concat_edb">
 					<el-select
@@ -272,7 +273,7 @@ export default {
 
 				// this.searchHandle();
 				const backData = _.cloneDeep(this.params);
-				this.default_type = backData.source === 23||backData.source === 47 ? 1 : 2;
+				this.default_type = [23,47].includes(backData.source) ? 1 : 2;
 
 				this.formData = {
 					date: backData.date,
@@ -287,13 +288,16 @@ export default {
 				}
 
 				//options 回显
-				if(backData.source === 23||backData.source === 47) {
+				if([23,47].includes(backData.source)) {
 					this.searchOptions = backData.from_arr.map(item => ({
 						EdbInfoId: item.FromEdbInfoId,
 						EdbName: item.FromEdbName,
 						StartDate: item.StartDate,
 						EndDate: item.EndDate,
 					}))
+
+					this.formData.pre_date = backData.from_arr[0].StartDate
+					this.formData.after_date = backData.from_arr[0].EndDate
 				}else {
 					this.searchMonthOptions = backData.from_arr.filter(obj => obj.FromTag === 'A').map(item => ({
 						EdbInfoId: item.FromEdbInfoId,
@@ -301,6 +305,8 @@ export default {
 						StartDate: item.StartDate,
 						EndDate: item.EndDate,
 					}));
+					
+					this.formData.old_stay_date = backData.from_arr.find(obj => obj.FromTag === 'A').EndDate
 
 					this.searchMonthConcatOptions = backData.from_arr.filter(obj => obj.FromTag === 'B').map(item => ({
 						EdbInfoId: item.FromEdbInfoId,
@@ -376,8 +382,11 @@ export default {
 			formData: {
 				date: '',
 				pre_edb: '',
+				pre_date: '',
 				after_edb: '',
+				after_date: '',
 				old_stay_edb: '',
+				old_stay_date: '',
 				concat_edb: '',
 				edb_name: '',
 				menu: '',
@@ -449,13 +458,22 @@ export default {
 		// 选中指标更新默认值
 		chooseTarget(val,key){
 			if(!val) return
-			const arr=key==='searchMonthOptions'?this.searchMonthOptions:this.searchOptions
+			const arr=key==='old_stay_edb'?this.searchMonthOptions:this.searchOptions
+			
 			let obj = arr.find(item => item.EdbInfoId === val);
 			console.log(obj);
 			this.formData.edb_name=`${obj.EdbName}/拼接`
 			this.formData.menu=obj.ClassifyId||''
 			this.formData.frequency=obj.Frequency
 			this.formData.unit=obj.Unit
+
+			//日期也要常驻显示 加字段存了
+			const showDateMap = {
+				'old_stay_edb': { key:'old_stay_date',valKey:'EndDate' },
+				'after_edb': { key:'after_date',valKey:'EndDate' },
+				'pre_edb': { key:'pre_date',valKey:'StartDate' }
+			}
+			this.formData[showDateMap[key].key] = obj[showDateMap[key].valKey]
 		},
 
 		/* 搜索 */

+ 1 - 1
src/views/dataEntry_manage/targetList.vue

@@ -563,7 +563,7 @@ export default {
 				TradeCode:item.TradeCode
 			}).then(res => {
 				if(res.Data.Status===1){
-					this.$message.error("该指标已加入ETA指标库,不可删除")
+					this.$message.error("该指标已加入指标库,不可删除")
 					return
 				}else{
 					this.$confirm(

+ 569 - 0
src/views/dataEntry_manage/thirdBase/bloombergSource.vue

@@ -0,0 +1,569 @@
+<template>
+    <div class="bloomberg-source-wrap">
+        <div class="page-header">
+            <div class="header-select-box">
+                <!-- 频度 -->
+                <el-select v-model="selectOption.frequenceSelect" 
+                    :placeholder="$t('Edb.InputHolderAll.input_fre')" 
+                    @change="selectOptionChange('frequenceSelect')"
+                    clearable 
+                    style="width:240px">
+                    <el-option v-for="i in frequencyList" :key="i"
+                            :label="i" :value="i"
+                        />
+                </el-select>
+                <!-- 指标ID/名称 -->
+                <el-input 
+                    v-model="selectOption.keywordSelect" 
+                    prefix-icon="el-icon-search"
+                    :placeholder="$t('Edb.InputHolderAll.input_name_orid')" 
+                    @input="selectOptionChange('keywordSelect')"
+                    clearable 
+                    style="width:360px"></el-input>
+                <!-- 列表全选 -->
+                <el-checkbox 
+                    :indeterminate="isIndeterminate" 
+                    v-model="isCheckAll" 
+                    @change="listCheckAllChange">{{ $t('YsDataPage.label_all_check') }}</el-checkbox>
+            </div>
+            <!-- 添加到指标库 -->
+            <el-button v-permission="permissionBtn.dataSourcePermission.Bloomberg_add2edb" :disabled="total===0"
+                type="primary" @click="handleCheckDialogShow(false,{})">{{ $t('YsDataPage.add_base_btn') }}</el-button>
+        </div>
+        <div class="page-table">
+            <el-table :data="tableData" border
+                ref="edbDataRef"
+                @selection-change="selectionChange"
+                @select="selectHandle" 
+                @select-all="selectAllHandle"
+                @sort-change="handleSortChange"
+            >
+                <!-- 多选 -->
+                <el-table-column
+                    align="center"
+                    type="selection"
+                    width="55">
+                </el-table-column>
+                <el-table-column
+                    v-for="column in tableColumns" :key="column.key"
+                    :prop="column.key"
+                    :label="column.label"
+                    :sortable="column.sortable?column.sortable:false"
+                    align="center">
+                </el-table-column>
+                <el-table-column :label="$t('Table.column_operations')" align="center">
+                    <template slot-scope="{row}">
+                        <el-button type="text" @click="handleCheckDialogShow(true,row)"
+                        v-if="!row.EdbExist&&permissionBtn.isShowBtn('dataSourcePermission','Bloomberg_add2edb')">{{ $t('YsDataPage.add_base_btn') }}</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <el-pagination 
+                :current-page="currentPage"
+                :page-size="pageSize"
+                :total="total"
+                @current-change="handleCurrentChange"
+            />
+        </div>
+        <!-- 操作提示弹窗 -->
+        <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>
+                    <li v-for="(item,index) in afterAddList" :key="index" class="hint-item" @click="gotoEdbDetail(item)">
+                        {{ index+1 }}、{{ item.IndexName }}({{ item.IndexCode }})
+                    </li>
+                </ul>
+            </div>
+            <div style="text-align: center;margin-bottom: 30px;">
+                    <el-button type="primary" @click="handleCloseDialog">{{$t('Dialog.known')}}</el-button>
+                </div>
+        </el-dialog>
+        <!-- 添加到指标库弹窗 -->
+        <el-dialog 
+            :title="$t('YsDataPage.add_base_btn')"
+            :visible.sync="isAddDialogShow"
+            :close-on-click-modal="false"
+            :modal-append-to-body="false"
+            @close="isAddDialogShow=false"
+            width="900px"
+            top="5vh"
+            v-dialogDrag
+            center>
+            <div class="add-dialog-wrap">
+                <el-form :model="addForm" ref="addFormRef">
+                    <div class="group" v-for="(item,index) in addForm.list" :key="index">
+                        <div class="item-header">
+                            <span @click="item.expand=!item.expand">
+                                {{ item.IndexCode }}
+                                <i :class="item.expand?'el-icon-arrow-up':'el-icon-arrow-down'"></i>
+                            </span>
+                        </div>
+                        <div class="form-wrap" v-show="item.expand">
+                            <el-form-item 
+                                :prop="`list[${index}].IndexName`" 
+                                :rules="[
+                                    {required:true,message:$t('Edb.InputHolderAll.input_name'),trigger: 'blur'},
+                                    {validator:edbNameCheck}
+                                ]">
+                                <el-input v-model="item.IndexName"></el-input>
+                            </el-form-item>
+                            <el-form-item :prop="`list[${index}].Unit`" :rules="{required:true,message:$t('Edb.InputHolderAll.input_unit'),trigger: 'blur'}">
+                                <el-input v-model="item.Unit"
+                                    :placeholder="$t('Edb.InputHolderAll.input_fre')">
+                                </el-input>
+                            </el-form-item>
+                            <el-form-item :prop="`list[${index}].Frequency`" :rules="{required:true,message:$t('Edb.InputHolderAll.input_fre'),trigger: 'blur'}">
+                                <el-select v-model="item.Frequency" :placeholder="$t('Edb.InputHolderAll.input_fre')" >
+                                    <el-option v-for="i in frequencyList" :key="i"
+                                            :label="i" :value="i"
+                                        />
+                                </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"
+                                :placeholder="$t('Edb.InputHolderAll.input_menu')"
+                                :options="edbCatalogList" 
+                                :props="{
+                                    label: 'ClassifyName',
+                                    value: 'ClassifyId',
+                                    children: 'Children',
+                                    checkStrictly: true,
+                                    emitPath:false
+                                }"
+                                ></el-cascader>
+                            </el-form-item>
+                        </div>
+                        
+                    </div>
+                </el-form>
+            </div>
+            <div style="text-align: center;margin-bottom: 30px;">
+                    <el-button @click="isAddDialogShow=false">{{$t('Dialog.cancel_btn')}}</el-button>
+                    <el-button type="primary" @click="handleSaveCheck" :loading="btnLoading">{{$t('Dialog.confirm_save_btn')}}</el-button>
+                </div>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import {bloombergInterface,dataBaseInterface} from '@/api/api.js'
+export default {
+    data() {
+        return {
+            selectOption:{
+                frequenceSelect:'',
+                keywordSelect:'',
+                sortParam:'',
+                sortType:''
+            },
+            frequencyList:['日度','周度','旬度','月度','季度','半年度','年度'],
+            tableData:[],
+            tableDataIds:[],
+            currentPage:1,
+            pageSize:10,
+            total:2,
+
+            isIndeterminate:false,
+            isCheckAll:false,//与isIndeterminate一起表示列表全选的状态
+            isSelectAll:false,//是否勾选了列表全选:为true时,selectList是剔除的指标,为false时selectList是已选择的指标
+            selectList:[],//已选择/已剔除的指标id
+            selectionReactCancel:false,//select-事件触发时,为true;该事件触发完成后,为false;
+            
+            isHintDialogShow:false,
+            afterAddList:[],//已添加进指标库的指标
+            beforeAddList:[],//需要添加进指标库的指标
+            edbCatalogList:[],//指标库目录数据
+            isAddDialogShow:false,
+            addForm:{
+                list:[
+                    /* {
+                        IndexName:'',
+                        Unit:'',
+                        Frequency:'',
+                        ClassifyId:''
+                    } */
+                ]
+            },
+            checkedList:[],//重名的指标code
+            btnLoading:false,
+
+        };
+    },
+    computed:{
+        tableColumns(){
+            return [
+                    {key:'IndexCode',label:this.$t('Edb.Detail.e_id')}, //指标ID
+                    {key:'IndexName',label:this.$t('Edb.Detail.e_name')},//指标名称
+                    {key:'Frequency',label:this.$t('Edb.Detail.e_fre')},//频度
+                    {key:'StartDate',label:this.$t('DataBankPage.table_col_start_time'),sortable:true},//指标开始时间
+                    {key:'EndDate',label:this.$t('DataBankPage.table_col_newest_time'),sortable:true},//指标最新时间
+                    {key:'ModifyTime',label:this.$t('Edb.Detail.e_update_time'),sortable:true} //更新时间
+                ]
+        },
+        hintText(){
+            let key = 0
+            if(this.afterAddList.length) key++
+            if(!this.beforeAddList.length) key++
+            return {
+                0:'',
+                1:this.$t('YsDataPage.haved_all_msg'),//本次添加的指标均已在指标库中,请勿重复添加!
+                2:this.$t('YsDataPage.haved_some_msg'),//指标库中已存在以下指标,会自动过滤!
+            }[key]
+        }
+    },
+    methods: {
+        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
+            }
+            })
+        },
+        getTableData(type){
+            const {frequenceSelect,keywordSelect,sortParam,sortType} = this.selectOption
+            bloombergInterface.getTableList({
+                PageSize:this.pageSize,
+                CurrentIndex:this.currentPage,
+                Frequency:frequenceSelect,
+                Keywords:keywordSelect,
+                SortField:sortParam,
+                SortRule:sortType
+            }).then(res=>{
+                if(res.Ret!==200) return 
+                this.tableData = res.Data.List||[]
+                this.total = res.Data.Paging.Totals
+                if(this.tableData.length>0){
+                    this.tableDataIds = this.tableData.map(it => it.IndexCode)
+                }else{
+                    this.tableDataIds = []
+                }
+                if(type==='optionChange'){
+                    //如果是表格筛选项改变导致重新请求数据
+                    //数据获取完成后,列表全选,表格全选
+                    this.selectList = []
+                    this.listCheckAllChange(true)
+                }else{
+                    //若不是,数据获取完成后,查询列表全选的值
+                    //若当页有数据在selectList内,则勾选/剔除
+                    this.adjustSelection()
+                }
+            })
+            
+        },
+        handleCurrentChange(page){
+            this.currentPage = page
+            this.getTableData()
+        },
+        handleSortChange({prop,order}){
+            console.log('prop',prop,'order',order)
+            const propMap={
+                'StartDate':1,
+                'EndDate':2,
+                'ModifyTime':3
+            }
+            this.selectOption.sortParam = order?propMap[prop]||'':''
+            this.selectOption.sortType = order?order==='ascending'?1:2:''
+            this.selectOptionChange()
+        },
+        //表格筛选项改变时触发
+        selectOptionChange(type){
+            //若是取消筛选,则不进行全选
+            const optionValue = this.selectOption[type]
+            if(!optionValue){
+                this.isSelectAll = false
+                this.selectList = []
+                this.isIndeterminate = false
+                this.isCheckAll = false
+            }
+            this.currentPage = 1
+            this.getTableData(optionValue?'optionChange':'')
+        },
+        //列表全选改变
+        listCheckAllChange(value){
+            this.selectList = []
+            this.isSelectAll = value
+            this.$refs.edbDataRef && this.$refs.edbDataRef.clearSelection()
+            if(value){
+                this.$refs.edbDataRef && this.$refs.edbDataRef.toggleAllSelection()
+            }
+        },
+        selectionChange(){
+            if(this.selectionReactCancel) return 
+            // selectAllHandle的触发在selectionChange后面,将selectionChange的逻辑延迟一下
+            setTimeout(()=>{
+                // 去重
+                let duplicateArr = Array.from(new Set(this.selectList))
+                //isSelectAll为true时,selectList表示需要剔除的项
+                //isSelectAll为false时,selectList表示需要勾选的项
+                //全选
+                if((duplicateArr.length == this.total && (!this.isSelectAll))|| (duplicateArr.length == 0 && this.isSelectAll)){
+                    this.isCheckAll = true
+                    this.isIndeterminate=false
+                //全不选
+                }else if((duplicateArr.length == 0 && (!this.isSelectAll))|| (duplicateArr.length == this.total && this.isSelectAll)){
+                    this.isCheckAll = false
+                    this.isIndeterminate=false
+                //半选
+                }else{
+                    this.isCheckAll = false
+                    this.isIndeterminate=true
+                }
+            },1)
+        },
+        selectHandle(selection,row){
+            if(this.selectionReactCancel) return 
+            let check = false; 
+            if(selection.some(it => it.IndexCode == row.IndexCode)){
+                // 勾选
+                if(this.isSelectAll){
+                    check=false
+                }else{
+                    check=true
+                }
+            }else{
+                // 取消勾选
+                if(this.isSelectAll){
+                    check=true
+                }else{
+                    check=false
+                }
+            }
+            if(check){
+                this.selectList.push(row.IndexCode)
+                }else{
+                this.selectList=this.selectList.filter(it => it!=row.IndexCode)
+            }
+        },
+        selectAllHandle(selection){
+            if(this.selectionReactCancel) return 
+            let check = false; 
+            if(selection && selection.length>0){
+                // 全选
+                if(this.isSelectAll){
+                    check=false
+                }else{
+                    check=true
+                }
+            }else{
+                // 全不选
+                if(this.isSelectAll){
+                    check=true
+                }else{
+                    check=false
+                }
+            }
+            if(check){
+                this.selectList =  [...this.selectList,...this.tableDataIds]
+            }else{
+                this.selectList = this.selectList.filter(it => !this.tableDataIds.includes(it))
+            }
+        },
+        adjustSelection(){
+            this.selectionReactCancel=true
+            if(!this.isSelectAll){
+                this.selectList.map(it =>{
+                    let row = this.tableData.find(da => da.IndexCode==it)
+                    if(row){
+                        setTimeout(()=>{
+                            this.$refs.edbDataRef.toggleRowSelection(row,true)
+                        },10)
+                    }
+                })
+            }else{
+                this.$refs.edbDataRef && this.$refs.edbDataRef.clearSelection()
+                this.$refs.edbDataRef &&this.$refs.edbDataRef.toggleAllSelection()
+                this.selectList.map(it =>{
+                    let row = this.tableData.find(da => da.IndexCode==it)
+                    if(row){
+                        setTimeout(()=>{
+                            this.$refs.edbDataRef.toggleRowSelection(row,false)
+                        },50)
+                    }
+                })
+            }
+            setTimeout(()=>{
+                this.selectionReactCancel=false
+            },50)
+        },
+        handleCheckDialogShow(isSingle=false,data={}){
+            //check
+            const {frequenceSelect,keywordSelect,sortParam,sortType} = this.selectOption
+            bloombergInterface.edbAddCheck({
+                Frequency:frequenceSelect,
+                Keywords:keywordSelect,
+                SortField:sortParam||0,
+                SortRule:sortType||0,
+                ListAll:isSingle?false:this.isSelectAll,
+                IndexCodes:isSingle?[data.IndexCode]:this.selectList
+            }).then(res=>{
+                if(res.Ret!==200) return 
+                const edbList = res.Data||[]
+                this.afterAddList = edbList.filter(i=>i.EdbExist===1)
+                this.beforeAddList = edbList.filter(i=>i.EdbExist===0).map(i=>{return{...i,expand:true}})
+                this.afterAddList.length&&(this.isHintDialogShow=true)
+                !this.afterAddList.length&&this.handleCloseDialog()
+            })
+        },
+        //操作提示弹窗关闭
+        handleCloseDialog(){
+            this.isHintDialogShow = false
+            //判断是否要展示下一个弹窗
+            if(this.beforeAddList.length){
+                this.addForm.list = this.beforeAddList
+                this.isAddDialogShow = true
+            }
+        },
+        //重名校验
+        edbNameCheck(rule,value,callback){
+            if(this.checkedList.includes(value)){
+                callback(this.$t('BloombergPage.add_edb_check_hint2'))
+            }else{
+                callback()
+            }
+        },
+        //保存前校验
+        async handleSaveCheck(){
+            //表单校验
+            try{
+                await this.$refs.addFormRef.validate()
+            }catch(e){
+                return
+            }
+            //重名校验
+            this.checkedList = []
+            bloombergInterface.edbNameCheck(
+                this.addForm.list.map(i=>{return{EdbCode:i.IndexCode,EdbName:i.IndexName}})
+            ).then(res=>{
+                if(res.Ret!==200) return 
+                this.checkedList = res.Data.filter(i=>i.Exist).map(i=>i.EdbName)
+                if(this.checkedList.length){
+                    this.$refs.addFormRef.validate()
+                }else{
+                    this.saveEdb()
+                }
+            })
+        },
+        //批量新增
+        saveEdb(){
+            this.btnLoading = true
+            bloombergInterface.edbBatchAdd(
+                this.addForm.list.map(i=>{
+                    return {
+                        EdbCode:i.IndexCode,
+                        EdbName:i.IndexName,
+                        Frequency:i.Frequency,
+                        Unit:i.Unit,
+                        ClassifyId:i.ClassifyId
+                    }
+                })
+            ).then(res=>{
+                this.btnLoading = false
+                if(res.Ret!==200) return 
+                this.$message.success(this.$t('MsgPrompt.add_msg2'))
+                this.isAddDialogShow = false
+                this.handleCurrentChange(1)
+            })
+        },
+        //跳转至指标详情
+        gotoEdbDetail(data){
+            const {EdbClassifyId,EdbInfoId,EdbUniqueCode} = data||{}
+            const href = this.$router.resolve({
+                path:'/database',
+                query:{
+                    code:EdbUniqueCode,
+                    id:EdbInfoId,
+                    classifyId:EdbClassifyId,
+                }
+            }).href
+            window.open(href,"_blank")
+        }
+    },
+    mounted(){
+        this.getTableData()
+        this.getEdbCatalog()
+    },
+};
+</script>
+
+<style lang="scss">
+.bloomberg-source-wrap{
+    .add-dialog-wrap{
+        .el-form{
+            .group{
+                .item-header{
+                    margin-bottom: 20px;
+                }
+                .form-wrap{
+                    display: flex;
+                    gap:10px;
+                    .el-input{
+                        width: 100%;
+                    }
+                }
+            }
+        }
+    }
+}
+</style>
+<style scoped lang="scss">
+.bloomberg-source-wrap{
+    min-height: calc(100vh - 120px);
+    display: flex;
+    flex-direction: column;
+    background-color: #fff;
+    border:1px solid #C8CDD9;
+    border-radius: 4px;
+    padding:20px;
+    box-sizing: border-box;
+    .page-header{
+        display: flex;
+        justify-content: space-between;
+        .header-select-box{
+            display: flex;
+            gap:20px;
+            align-items: center;
+        }
+    }
+    .page-table{
+        .el-table{
+            margin:20px 0;
+            .el-button--text{
+                padding:0;
+            }
+        }
+        .el-pagination{
+            text-align: right;
+        }
+    }
+    .hint-dialog-wrap{
+        padding-bottom:30px;
+        .hint-item{
+            cursor: pointer;
+            margin-bottom: 10px;
+            &:hover{
+                color:#409EFF;
+                text-decoration: underline;
+            }
+        }
+    }
+}
+</style>

+ 1 - 1
src/views/dataSource_manage/components/EDBInfoChangeTable.vue

@@ -208,7 +208,7 @@ export default {
         getTableHeadTips(key){
             const tipsMap={
                 EdbNameSource:this.$t('DataReportManage.GlStatisticTable.table_tips01')||'指标在数据源的全称',
-                EdbName:this.$t('DataReportManage.GlStatisticTable.table_tips13')||'指标在ETA指标库保存的指标名称',
+                EdbName:this.$t('DataReportManage.GlStatisticTable.table_tips13')||'指标在指标库保存的指标名称',
                 ErDataUpdateDate:this.$t('DataReportManage.GlStatisticTable.table_tips03')||'指标数据发生变化的最早日期',
             }
             return tipsMap[key]

+ 3 - 2
src/views/datasheet_manage/components/calculateEdbDia.vue

@@ -496,12 +496,13 @@ export default {
 
     /* 选择表格指标 */
     async selectTableEdbHandle(item) {
-      if(!item.HaveOperaAuth) return this.$message.warning(this.$t('MsgPrompt.no_edb_auth'))
       
       const res = await dataBaseInterface.targetDetail({EdbInfoId:item.EdbInfoId})
       if(res.Ret !== 200) return
 
-      const { EdbInfoId,EdbInfoType,EdbName,Frequency } = res.Data;
+      const { EdbInfoId,EdbInfoType,EdbName,Frequency,HaveOperaAuth } = res.Data;
+
+      if(!HaveOperaAuth) return this.$message.warning(this.$t('MsgPrompt.no_edb_auth'))
 
       if(this.formData.source===1&&Frequency!=='月度') return this.$message.warning(this.$t('ETableChildren.only_select_msg') )
       else if(this.formData.source===2&&Frequency!=='季度') return this.$message.warning(this.$t('ETableChildren.no_quarterly_msg'))

+ 2 - 2
src/views/datasheet_manage/customAnalysis/list.vue

@@ -20,7 +20,7 @@
           >{{$t('CustomAnalysisPage.up_file_btn')}}</el-button>
           <input type="file" @change="fileSelected" id="file"  style="display: none;">
           
-          <!-- <el-checkbox v-model="isShowMe"  @change="() => { getTreeData();getPublicList() }">{{$t('Chart.only_see_mine')}}</el-checkbox> -->
+          <el-checkbox v-model="isShowMe"  @change="() => { getTreeData();getPublicList() }">{{$t('Chart.only_see_mine')}}</el-checkbox>
         </div>
         <div class="search-cont">
           <el-select
@@ -419,7 +419,7 @@ export default {
       },
       
 
-      isShowMe: true,
+      isShowMe: false,
 
       sourceMap: {
         '/sheetAnalysisList': 4,

+ 4 - 3
src/views/ppt_manage/newVersion/pptEditor.vue

@@ -1024,7 +1024,7 @@ export default {
       }
       if(!checkResult.result){
         this.$message.warning(checkResult.hintText)
-        return
+        return checkResult
       }
       let Content = JSON.stringify(this.pageList)
       //console.log(Content)
@@ -1154,7 +1154,8 @@ export default {
     },
     async handlePublish(){
       //ETA1.7.5更改发布逻辑,点击发布时,自动执行保存操作,若可保存,则跳转发布页
-      await this.handleSave('pub')
+      const res = await this.handleSave('pub')
+      if(res&&!res.result) return
       //ppt4.0后,合并后的PPT可能会超出页数or图表限制,在这里做个校验
       if(this.pageList.length>this.maxPageNum){
         this.$message.warning(this.$t('Slides.most_add_ppt_msg',{count:this.maxPageNum}))
@@ -1164,7 +1165,7 @@ export default {
         this.$message.warning(this.$t('Slides.most_add_chart_msg',{count:this.maxPageChart}));
         return;
       }
-      this.$router.push({path:'/pptpublish',query:{id:this.pptId}})
+      this.pptId&&this.$router.push({path:'/pptpublish',query:{id:this.pptId}})
     },
     //拖动相关
     dragstart(e,value) {

+ 3 - 3
src/views/ppt_manage/newVersion/pptEnCatalog.vue

@@ -780,9 +780,9 @@ export default {
     //点击列表操作栏事件处理
     handleListToolClick(item,{PptId,PptxUrl,Title}){
         const urlMap = {
-        edit:`/ppteditor?id=${PptId}`,
-        publish:`/pptpublish?id=${PptId}`,
-        present:`/pptpresent?id=${PptId}`
+        edit:`/ppteneditor?id=${PptId}`,
+        publish:`/pptenpublish?id=${PptId}`,
+        present:`/pptenpresent?id=${PptId}`
       }
       if(urlMap[item.key]){
         window.open(urlMap[item.key],'_blank')

+ 4 - 3
src/views/ppt_manage/newVersion/pptEnEditor.vue

@@ -1022,7 +1022,7 @@ export default {
       }
       if(!checkResult.result){
         this.$message.warning(checkResult.hintText)
-        return
+        return checkResult
       }
       let Content = JSON.stringify(this.pageList)
       const {Title,ReportType,PptDate,BackgroundImg,BackIndex} = this.firstPage
@@ -1141,7 +1141,8 @@ export default {
     },
     async handlePublish(){
       //ETA1.7.5更改发布逻辑,点击发布时,自动执行保存操作,若可保存,则跳转发布页
-      await this.handleSave('pub')
+      const res = await this.handleSave('pub')
+      if(res&&!res.result) return
       //ppt4.0后,合并后的PPT可能会超出页数or图表限制,在这里做个校验
       if(this.pageList.length>this.maxPageNum){
         this.$message.warning(this.$t('Slides.most_add_ppt_msg',{count:this.maxPageNum}))
@@ -1151,7 +1152,7 @@ export default {
         this.$message.warning(this.$t('Slides.most_add_chart_msg',{count:this.maxPageNum}));
         return;
       }
-      this.$router.push({path:'/pptenpublish',query:{id:this.pptId}})
+      this.pptId&&this.$router.push({path:'/pptenpublish',query:{id:this.pptId}})
     },
     //拖动相关
     dragstart(e,value) {

+ 4 - 4
src/views/ppt_manage/newVersion/pptEnPublish.vue

@@ -417,14 +417,14 @@ export default {
       //结束计时
       const end = Date.now()
       console.log("转换ppt用时:",Math.floor((end-start)/1000),' s')
-      //pptx2.writeFile({ fileName: "test.pptx" });//本地测试用
+      //pptx.writeFile({ fileName: "test.pptx" });//本地测试用
       //直接下载
       if(type==='dowload'){
         this.downloadLoading = this.$loading({
             fullscreen:true,
             text:this.$t('Slides.download_ppt_msg')
         })
-        pptx2.writeFile({ 
+        pptx.writeFile({ 
             fileName: `${this.coverInfo.page.Title||'unname'}.pptx`,
             compression:this.setCompression
         }).then(()=>{
@@ -437,7 +437,7 @@ export default {
         text:this.$t('Slides.publishing_loading')
       })
       //console.log('pptx',pptx)
-      // pptx2.write('blob').then((data)=>{
+      // pptx.write('blob').then((data)=>{
       //   // 上传到阿里云oss
       //   // this.handleUploadToOSS(data)
       // })
@@ -461,7 +461,7 @@ export default {
         }
       };
       //outputType为blob时不会启用压缩,为STREAM时会按nodebuffer压缩
-      pptx2.write({compression:this.setCompression,outputType:'STREAM'}).then((data)=>{
+      pptx.write({compression:this.setCompression,outputType:'STREAM'}).then((data)=>{
         //将nodebuffer转为blob
         const blob = new Blob([data])
         // 1走后端接口上传

+ 10 - 2
src/views/ppt_manage/newVersion/utils/untils.js

@@ -627,8 +627,16 @@ export const getTableData = (data)=>{
       let cellOptions = {
         colspan:cell.mc.cs===0?1:cell.mc.cs,
         rowspan:cell.mc.rs===0?1:cell.mc.rs,
-        color: cell.fc?cell.fc.substring(1):'333333',
-        fill: cell.bg ? cell.bg.substring(1):'',
+        color: cell.fc
+          ? cell.fc.includes('rgb') 
+              ? rgbaToHex(cell.fc).color.substring(1) 
+              : (cell.fc.indexOf('#')===0?cell.fc.substring(1):'333333')
+          :'333333',
+        fill: cell.bg 
+          ?  cell.bg.includes('rgb') 
+            ? rgbaToHex(cell.bg).color.substring(1)
+            : (cell.bg.indexOf('#')===0?cell.bg.substring(1):'')
+          : '',
         bold: cell.bl ? true : false,
         italic: cell.it ? true : false,
       }

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

@@ -3,7 +3,7 @@
         <div class="top-box">
             <div class="left-card">
                 <span :class="['item',activeType==='ETA图库'?'active':'']" @click="activeTypeChange('ETA图库')">{{$t('ReportManage.ReportList.chart_inventory_radio')}}</span>
-                <span :class="['item',activeType==='MyETA'?'active':'']" @click="activeTypeChange('MyETA')">MyETA</span>
+                <span :class="['item',activeType==='MyETA'?'active':'']" @click="activeTypeChange('MyETA')">{{$t('MyEtaPage.tab_my')}}</span>
             </div>
             <div class="right">
                 <el-input

+ 5 - 1
src/views/system_manage/components/imgUpload.vue

@@ -4,7 +4,7 @@
         <div class="upload-box">
             <template v-if="!imgUrl.length">
                 <i class="el-icon-plus" style="font-size: 24px;"></i>
-                <p class="form-hint">点击上传图片</p>
+                <p class="form-hint">{{ text }}</p>
             </template>
             <template v-else>
                 <img class="upload-img" :src="imgUrl" alt="配图">
@@ -24,6 +24,10 @@
             imgUrl: {
                 type: String,
                 default: ''
+            },
+            text: {
+                type: String,
+                default: '点击上传图片'
             }
         },
         data() {

+ 113 - 5
src/views/system_manage/etaBaseConfig.vue

@@ -86,10 +86,73 @@
                             <el-input type="text" v-model="formData.ETATitle" placeholder="$t('SystemManage.BaseConfig.login_title_pld')" />
                             <ConfigAnnotation picHintText="" picName="ETATitle" @showImage="previewImage"/>
                         </el-form-item>
-                        <el-form-item :label="login_name" prop="TabName">
+                        <!-- <el-form-item :label="login_name" prop="TabName">
                             <el-input type="text" v-model="formData.TabName" placeholder="$t('SystemManage.BaseConfig.login_name_pld')" />
                             <ConfigAnnotation picHintText="" picName="TabName" @showImage="previewImage"/>
-                        </el-form-item>
+                        </el-form-item> -->
+                        <div class="inline-form-item-box" v-if="permissionBtn.isShowBtn('baseConfigPermission','etaBaseConfig_login_websiteName_pc') ||
+                            permissionBtn.isShowBtn('baseConfigPermission','etaBaseConfig_login_websiteName_mobile')">
+                            <div class="line-form-item-name">{{$t('SystemManage.BaseConfig.website_name')}}</div>
+                            <div class="line-form-item">
+                                <el-form-item :label="$t('SystemManage.BaseConfig.pc')" prop="TabName"
+                                v-permission="permissionBtn.baseConfigPermission.etaBaseConfig_login_websiteName_pc">
+                                    <el-input type="text" v-model="formData.TabName" :placeholder="$t('SystemManage.BaseConfig.pc_website_title_Tip')" />
+                                    <ConfigAnnotation picHintText="" picName="TabName" @showImage="previewImage"
+                                     :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
+                                </el-form-item>
+                                <el-form-item :label="$t('SystemManage.BaseConfig.mobile')" prop="TabNameMobile"
+                                v-permission="permissionBtn.baseConfigPermission.etaBaseConfig_login_websiteName_mobile">
+                                    <el-input type="text" v-model="formData.TabNameMobile" :placeholder="$t('SystemManage.BaseConfig.mobile_website_title_Tip')" />
+                                    <ConfigAnnotation picHintText="" picName="TabNameMobile" @showImage="previewImage"
+                                     :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
+                                </el-form-item>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="side">
+                        <div class="inline-form-item-box"  v-if="permissionBtn.isShowBtn('baseConfigPermission','etaBaseConfig_login_systemLogo_pc') ||
+                            permissionBtn.isShowBtn('baseConfigPermission','etaBaseConfig_login_systemLogo_mobile')">
+                            <div class="line-form-item-name">{{ $t('SystemManage.BaseConfig.system_logo') }}</div>
+                            <div class="line-form-item-name" style="line-height: 30px;" v-permission="permissionBtn.baseConfigPermission.etaBaseConfig_login_systemLogo_pc">{{ $t('SystemManage.BaseConfig.pc') }}</div>
+                            <div class="line-form-item" v-permission="permissionBtn.baseConfigPermission.etaBaseConfig_login_systemLogo_pc">
+                                <el-form-item :label="`${$t('SystemManage.BaseConfig.chinese_version')}(${$t('SystemManage.BaseConfig.recommended_ratio')})`" prop="LogoCN">
+                                    <ImgUpload 
+                                    id="logo-image"
+                                    :imgUrl="formData.LogoCN"
+                                    :text="$t('SystemManage.BaseConfig.upload_image_tip')"
+                                    @showImage="showImage"
+                                    @upload="(file)=>handleUploadImage(file,'LogoCN')"
+                                    @remove="deleteFormImg('LogoCN')"
+                                    />
+                                    <ConfigAnnotation picHintText="" picName="LogoCN" @showImage="previewImage" :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
+                                </el-form-item>
+                                <el-form-item :label="`${$t('SystemManage.BaseConfig.english_version')}(${$t('SystemManage.BaseConfig.recommended_ratio')})`" prop="LogoEN">
+                                    <ImgUpload 
+                                        id="logo-image"
+                                        :imgUrl="formData.LogoEN"
+                                        :text="$t('SystemManage.BaseConfig.upload_image_tip')"
+                                        @showImage="showImage"
+                                        @upload="(file)=>handleUploadImage(file,'LogoEN')"
+                                        @remove="deleteFormImg('LogoEN')"
+                                    />
+                                    <ConfigAnnotation picHintText="" picName="LogoEN" @showImage="previewImage" :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
+                                </el-form-item>
+                            </div>
+                            <div class="line-form-item" v-permission="permissionBtn.baseConfigPermission.etaBaseConfig_login_systemLogo_mobile">
+                                <el-form-item :label="$t('SystemManage.BaseConfig.mobile')" prop="LogoMobile" style="width: 50%;">
+                                    <ImgUpload 
+                                    id="logo-image"
+                                    :imgUrl="formData.LogoMobile"
+                                    :text="$t('SystemManage.BaseConfig.upload_image_tip')"
+                                    @showImage="showImage"
+                                    @upload="(file)=>handleUploadImage(file,'LogoMobile')"
+                                    @remove="deleteFormImg('LogoMobile')"
+                                    />
+                                    <ConfigAnnotation picHintText="" picName="LogoMobile" @showImage="previewImage" :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
+                                </el-form-item>
+                                <div style="width: 50%;"></div>
+                            </div>
+                        </div>
                     </div>
                 </div>
                 <!-- 研报设置 -->
@@ -477,7 +540,11 @@ export default {
                 ReportApproveType:'eta',//研报审批选项
                 ICPLicense:'', //备案信息
                 ETATitle:'', //登录页标题
-                TabName:'',//网页名称
+                TabName:'',//网页名称-PC端
+                TabNameMobile:'',//网页名称-移动端
+                LogoCN:'',//logo-中文版
+                LogoEN:'',//logo-英文版 
+                LogoMobile:'',//logo-移动端登录页
             },//表单预设值
             rules: {
                 Disclaimer:[{ required: true, message: '请输入免责声明', trigger: 'blur' }],
@@ -507,7 +574,11 @@ export default {
                 CnPptCoverImgs:[{ required: true, validator:ListValidator}],
                 EnPptCoverImgs:[{ required: true, validator:ListValidator}],
                 ETATitle:[{ required: true, message: '请输入登录页标题', trigger: 'blur' }],
-                TabName:[{ required: true, message: '请输入网站名称', trigger: 'blur' }],
+                TabName:[{ required: true, message: '请输入PC端网页名称', trigger: 'blur' }],
+                TabNameMobile:[{ required: true, message: '请输入移动端网页名称', trigger: 'blur' }],
+                LogoCN:[{ required: true, message: '请上传系统中文版Logo', trigger: 'blur' }],
+                LogoEN:[{ required: true, message: '请上传系统英文版Logo', trigger: 'blur' }],
+                LogoMobile:[{ required: true, message: '请上传系统移动端Logo', trigger: 'blur' }],
             },//表单校验
             disclaimerConfig:{
                 toolbarButtons:[
@@ -562,7 +633,11 @@ export default {
                 'emailContentTemplate':[require('@/assets/img/eta_base_config/email_content_template.png')],
                 'ICPLicense':[require('@/assets/img/eta_base_config/record_information.jpg')],
                 'ETATitle':[require('@/assets/img/eta_base_config/ETA_title.png')],
-                'TabName':[require('@/assets/img/eta_base_config/website_title.png')]
+                'TabName':[require('@/assets/img/eta_base_config/website_title.png')],
+                'TabNameMobile':[require('@/assets/img/eta_base_config/ETA_mobile_title.png')],
+                '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')],  
             },
             /* loading */
             configLoading:null,
@@ -735,6 +810,9 @@ export default {
                     this.formData.CnPptCoverImgs = CnPptCoverImgs.length?CnPptCoverImgs.split(','):[]
                     this.formData.EnPptCoverImgs = EnPptCoverImgs.length?EnPptCoverImgs.split(','):[]
                     this.formData.WatermarkReport=res.Data.WatermarkReport==='true'?true:false
+                    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.configLoading&&this.configLoading.close()
             })
@@ -791,6 +869,10 @@ export default {
                         }
                     }).then(res=>{
                         if(res.Ret!==200) return 
+                        // 设置logo
+                        this.$store.commit('SET_BASE_INFO',
+                            {logoCh:this.formData.LogoCN,logoEn:this.formData.LogoEN}
+                        )
                         this.$message.success(this.$t('SystemManage.BaseConfig.tip_msg01')||'保存成功,请稍后到对应页面/项目查看')
                     })
                 }
@@ -909,6 +991,17 @@ export default {
                     margin-bottom: 10px;
                     margin-top: -3px;
                 }
+                .inline-form-item-box{
+                    .line-form-item-name{
+                        color: #606266;
+                        font-size: 14px;
+                        line-height: 40px;
+                    }
+                    .line-form-item{
+                        display: flex;
+                        gap: 40px;
+                    }
+                }
             }
             .ppt-form-item-wrap{
                 width:100%;
@@ -936,4 +1029,19 @@ export default {
         }
     }
 }
+</style>
+<style lang="scss">
+#logo-image{
+    .el-upload{
+        width: 100%;
+        height: 86px;
+        .upload-mask{
+            line-height: 86px;
+        }
+    }
+    .upload-box{
+        width: 100%;
+        height: 100%;
+    }
+}
 </style>

+ 1 - 0
src/vuex/index.js

@@ -33,6 +33,7 @@ const state = {
   // 是否有 试用用户行为权限
   hasTrialUserPermisson:false,
   permissionRoute:[], //用于需要验证是否有某个菜单的权限
+  baseInfo:{}
 };
 
 export default {

+ 5 - 1
src/vuex/mutations.js

@@ -76,7 +76,11 @@ const mutations = {
   // 添加需要校验且有权限的路由
   ADD_PERMISSION_ROUTE(state,route){
     state.permissionRoute.push(route)
-  }
+  },
+  //设置基础信息
+  SET_BASE_INFO(state,obj) {
+    state.baseInfo={...state.baseInfo,...obj};
+  },
 };
 
 export default mutations;