Sfoglia il codice sorgente

Merge branch 'master' into eta1.8.4

Karsa 11 mesi fa
parent
commit
9687a8e7a7
51 ha cambiato i file con 1034 aggiunte e 153 eliminazioni
  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. 10 0
      src/lang/modules/DataSources/En.js
  10. 11 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. 3 1
      src/lang/modules/PredictEdb/En.js
  16. 5 3
      src/lang/modules/PredictEdb/Zh.js
  17. 6 6
      src/lang/modules/ReportManagement/ReportList.js
  18. 6 6
      src/lang/modules/SandboxManage/SandFlow.js
  19. 1 1
      src/lang/modules/SandboxManage/SandList.js
  20. 4 4
      src/lang/modules/Slides/pptPresent.js
  21. 6 2
      src/lang/modules/ToolBox/AIQuestion.js
  22. 23 3
      src/lang/modules/systemManage/BaseConfig.js
  23. 2 2
      src/lang/modules/systemManage/ChartSet.js
  24. 8 8
      src/lang/modules/systemManage/OperateAuth.js
  25. 11 11
      src/routes/modules/chartRoutes.js
  26. 7 1
      src/routes/modules/dataRoutes.js
  27. 7 0
      src/utils/buttonConfig.js
  28. 24 13
      src/views/Home.vue
  29. 3 3
      src/views/Login.vue
  30. 5 2
      src/views/dataEntry_manage/addChart.vue
  31. 26 8
      src/views/dataEntry_manage/databaseComponents/jointTargetDia.vue
  32. 5 2
      src/views/dataEntry_manage/editChart.vue
  33. 21 4
      src/views/dataEntry_manage/mixins/addOreditMixin.js
  34. 1 1
      src/views/dataEntry_manage/targetList.vue
  35. 569 0
      src/views/dataEntry_manage/thirdBase/bloombergSource.vue
  36. 1 1
      src/views/dataSource_manage/components/EDBInfoChangeTable.vue
  37. 38 24
      src/views/operation_manage/AIQA/AIQA.vue
  38. 4 3
      src/views/ppt_manage/newVersion/pptEditor.vue
  39. 3 3
      src/views/ppt_manage/newVersion/pptEnCatalog.vue
  40. 4 3
      src/views/ppt_manage/newVersion/pptEnEditor.vue
  41. 4 4
      src/views/ppt_manage/newVersion/pptEnPublish.vue
  42. 10 2
      src/views/ppt_manage/newVersion/utils/untils.js
  43. 2 2
      src/views/predictEdb_manage/addPredicEdb.vue
  44. 1 1
      src/views/predictEdb_manage/components/rulesDetailDia.vue
  45. 1 1
      src/views/smartReport/components/ETAChart.vue
  46. 7 3
      src/views/smartReport/editReport.vue
  47. 5 1
      src/views/system_manage/components/imgUpload.vue
  48. 1 1
      src/views/system_manage/dataRefreshSetting.vue
  49. 111 9
      src/views/system_manage/etaBaseConfig.vue
  50. 1 0
      src/vuex/index.js
  51. 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:'基础信息变更',

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

@@ -203,6 +203,16 @@ export default {
     col_start_time:'Indicator Start Time',
     col_newest_time:'Indicator Latest Time',
     col_create:'Data Entry Time',
+  },
+
+
+  
+  /* 彭博数据源 */
+  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'
   }
   
 }

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

@@ -201,5 +201,16 @@ export default {
     col_start_time:'指标开始时间',
     col_newest_time:'指标最新时间',
     col_create:'入库时间',
+
+  },
+
+
+  
+  /* 彭博数据源 */
+  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",

+ 3 - 1
src/lang/modules/PredictEdb/En.js

@@ -32,6 +32,7 @@ export default {
     season_select_cont: 'N Years Consecutive',
     season_select_formula: 'Fixed N Years',
     label_periods: 'Number of Periods',
+    label_years: 'Number of Years',
     option_season_calendar1: 'Calendar',
     option_season_calendar2: 'Lunar Calendar',
     label_yoy_year: 'YoY Year',
@@ -55,7 +56,8 @@ export default {
     label_value_yoy_end: 'End Value of YoY',
     label_value_year: 'Annual Value',
 
-    label_rule: 'Rule',
+    // label_rule: 'Rule',
+    label_time_period: 'Time Period',
     rule_newset: 'Latest Value',
     rule_fix: "Fixed Value" ,
     rule_onyear: "YoY" ,

+ 5 - 3
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: '查看预测规则',
@@ -32,6 +32,7 @@ export default {
     season_select_cont: '连续N年',
     season_select_formula: '指定N年',
     label_periods: '期数',
+    label_years: '年数',
     option_season_calendar1: '公历',
     option_season_calendar2: '农历',
     label_yoy_year: '同比年份',
@@ -55,7 +56,8 @@ export default {
     label_value_yoy_end: '同比增速终值',
     label_value_year: '年度值',
 
-    label_rule: '规则',
+    // label_rule: '规则',
+    label_time_period: '时间段',
     rule_newset: '最新',
     rule_fix: "固定值" ,
     rule_onyear: "同比" ,
@@ -71,7 +73,7 @@ export default {
     rule_yoy_growth: "同比增速差值" ,
     rule_linear_reg: "一元线性拟合" ,
     rule_n_year: 'N年均值',
-    rule_value_back: '年度倒退值',
+    rule_value_back: '年度值倒推',
     rule_tip: `
       预测规则说明:<br> 
       1、最新:预测值全部等于最新值;<br>

+ 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: "线条设置",

+ 6 - 2
src/lang/modules/ToolBox/AIQuestion.js

@@ -12,7 +12,9 @@ export const AIQuestionEn = {
     send_btn:'Send',
     use_intro_title:'Instructions',
     use_intro01:'Maximum 500 Q&A per account per day.',
-    use_intro02:'History Q&A default named with the first question in the dialogue window, can be modified.'
+    use_intro02:'History Q&A default named with the first question in the dialogue window, can be modified.',
+    operation_tips:'Operation Tip',
+    operation_des:'Switching models will create a new dialogue window without context continuity. Confirm switch?',
 
 };
   
@@ -26,7 +28,9 @@ export const AIQuestionZh = {
     send_btn:'发送',
     use_intro_title:'使用说明',
     use_intro01:'每账号每天最高500次问答。',
-    use_intro02:'历史问答默认用该对话窗口内第一个提问命名,可修改。'
+    use_intro02:'历史问答默认用该对话窗口内第一个提问命名,可修改。',
+    operation_tips:'操作提示',
+    operation_des:'切换后的模型无法联系上下文进行回答,会新建对话窗口,确认切换吗?',
 };
   
 /**

+ 23 - 3
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',
@@ -67,7 +67,17 @@ export const BaseConfigEn = {
     resource_del_msg:'Are you sure to delete the selected image?',
 
     tip_msg01:'Save successful, please check the corresponding page/project later',
-
+    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",
+    
 };
   
 /* 中文 */
@@ -93,7 +103,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:'中文研报分享抬头',
@@ -135,6 +145,16 @@ export const BaseConfigZh = {
     resource_del_msg:'是否确认删除选中图片?',
 
     tip_msg01:'保存成功,请稍后到对应页面/项目查看',
+    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,13 +5,13 @@ export default [
 	{
 		path: '/',
 		component: home,
-		name: 'ETA图库',
+		name: '图库',
 		hidden: false,
 		icon_path: require('@/assets/img/home/data_ic.png'),
 		children: [{
 				path: 'chartsetting',
 				component: () => import('@/views/dataEntry_manage/chartSetting.vue'),
-				name: 'ETA图库',
+				name: '图库',
 				hidden: false,
 			},
 			{
@@ -33,14 +33,14 @@ export default [
 	{
 		path: '/',
 		component: home,
-		name: 'ETA指标库',
+		name: '指标库',
 		hidden: false,
 		icon_path: require('@/assets/img/home/data_ic.png'),
 		children: [
 			{
 				path: 'database',
 				component: () => import('@/views/dataEntry_manage/databaseList.vue'),
-				name: 'ETA指标库',
+				name: '指标库',
 				hidden: false,
 			},
 			{
@@ -62,13 +62,13 @@ export default [
 	{
 		path: '/',
 		component: home,
-		name: 'My ETA',
+		name: '我的图库',
 		hidden: false,
 		icon_path: require('@/assets/img/home/data_ic.png'),
 		children: [
 			{
 				path: 'mychart',
-				name: 'My ETA',
+				name: '我的图库',
 				component: () => import('@/views/mychart_manage/index.vue'),
 				hidden: false,
 			},
@@ -97,7 +97,7 @@ export default [
 	{
 		path: '/',
 		component: home,
-		name: 'ETA表格',
+		name: '表格',
 		hidden: false,
 		children:[
 			{
@@ -164,7 +164,7 @@ export default [
 	{
 		path: '/',
 		component: home,
-		name: 'ETA逻辑',
+		name: '逻辑',
 		hidden: false,
 		children: [
 			// {
@@ -176,7 +176,7 @@ export default [
 			// 改版后的ETA逻辑图
 			{
 				path: "sandlist",
-				name: 'ETA逻辑',
+				name: '逻辑',
 				component: () => import('@/views/sandbox_manage/index_new_version.vue'),
 				hidden: false,
 			},
@@ -198,12 +198,12 @@ export default [
 	{
 		path:'/',
 		component: home,
-		name: 'ETA预测指标',
+		name: '预测指标',
 		hidden:  false,
 		children: [
 			{
 				path: 'predictEdb',
-				name: 'ETA预测指标',
+				name: '预测指标',
 				component:()=>import('@/views/predictEdb_manage/predictEdb.vue')
 			},
 			{

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

@@ -250,7 +250,13 @@ export default [
         component: () => import("@/views/dataEntry_manage/thirdBase/selfDataBase.vue"),
         name: "自有数据",
         hidden: false
-      }
+      },  
+      {
+        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',//网站名称移动端
 }
 
 /*-----------外部链接配置-------- */

+ 24 - 13
src/views/Home.vue

@@ -226,7 +226,7 @@
                   <img src="~@/assets/img/questionnaire.png" v-if="isQuestionShow" @click="showQuestionDia=true"
                 style="width: 84px;height: 24; cursor: pointer;" />
                 </div>
-                <div class="lang-content" @click="langChangeHandler">{{$i18n.locale == 'zh'?'切换英文版':'切换中文版'}}</div>
+                <div class="lang-content" @click="langChangeHandler">{{$i18n.locale == 'zh'?'English':'中文'}}</div>
               </div>
                <!-- 消息通知 -->
               <notification-msg ref="notification"/>
@@ -367,7 +367,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() {
@@ -433,11 +434,11 @@ export default {
         出差管理: "Trip",
         研报管理: "Rpt",
         语义分析: "Nlp",
-        ETA表格: "Tbl",
-        ETA指标库: "Inx",
+        表格: "Tbl",
+        指标库: "Inx",
         相关性: "Co-R",
-        ETA预测指标: "FInx",
-        ETA图库: "Gra",
+        预测指标: "FInx",
+        图库: "Gra",
         /* 151:'FData', */
         供应分析: "Sup",
         商品价格曲线: "Crv",
@@ -446,7 +447,6 @@ export default {
       //链接系统
       linkSystems: this.$setting.linkSystems,
       bus_code:"",
-
     };
   },
   created() {
@@ -463,6 +463,7 @@ export default {
     this.getBusinessCodeFun()
     
     this.getQuestionStaus()
+    this.getSystemInfo();//获取配置信息
   },
   mounted() {
     if (sessionStorage.getItem("hasGetMenu")) {
@@ -483,12 +484,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')],
@@ -908,6 +909,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>

+ 3 - 3
src/views/Login.vue

@@ -66,14 +66,14 @@
 			</el-form>  -->
 
             <el-radio-group v-model="lang" @input="changeLang" class="lang-wrapper">
-                <el-radio-button label="zh">中文</el-radio-button>
-                <el-radio-button label="en">英文版</el-radio-button>
+                <el-radio-button label="zh">中文</el-radio-button>
+                <el-radio-button label="en">English</el-radio-button>
             </el-radio-group>
 
 			<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"

+ 5 - 2
src/views/dataEntry_manage/addChart.vue

@@ -215,7 +215,7 @@
 										<el-checkbox v-model="item.IsOrder"><!-- 逆序 -->{{$t('Chart.Detail.re_order')}}</el-checkbox>
 									</li>
 									<li>
-										<el-radio-group v-model="item.IsAxis" size="mini">
+										<el-radio-group v-model="item.IsAxis" size="mini" @input="isChangeEdbAxis=true">
 											<el-radio-button :label="1"><!-- 左轴 -->{{$t('Chart.Detail.l_axis')}}</el-radio-button>
 											<el-radio-button :label="0"><!-- 右轴 -->{{$t('Chart.Detail.r_axis')}}</el-radio-button>
 
@@ -786,7 +786,10 @@ export default {
 					}else {
 						//拼接标题
 						this.chartInfo.ChartName =  this.sameOptionType.includes(this.chartInfo.ChartType) ? newval.map((item,index) => index === newval.length-1 ? item.EdbName : `${item.EdbName}和`).join('') : `${newval[0].EdbName}季节性`;
-						this.EdbAxisChange()
+						//只有当新增指标or切换左右轴时,才更新上下限
+						if(this.updateLimit){
+							this.EdbAxisChange()
+						}
 						this.setAddChartDefault();
 						this.setChartOptionHandle(newval);
 					}

+ 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]
 		},
 
 		/* 搜索 */

+ 5 - 2
src/views/dataEntry_manage/editChart.vue

@@ -221,7 +221,7 @@
 										<el-checkbox v-model="item.IsOrder"><!-- 逆序 -->{{$t('Chart.Detail.re_order')}}</el-checkbox>
 									</li>
 									<li>
-										<el-radio-group v-model="item.IsAxis" size="mini">
+										<el-radio-group v-model="item.IsAxis" size="mini" @input="isChangeEdbAxis=true">
 											<el-radio-button :label="1"><!-- 左轴 -->{{$t('Chart.Detail.l_axis')}}</el-radio-button>
 											<el-radio-button :label="0"><!-- 右轴 -->{{$t('Chart.Detail.r_axis')}}</el-radio-button>
 											<!-- 指标有右轴时才可以选右2轴 不然没有右2这个概念的意义 -->
@@ -794,7 +794,10 @@ export default {
 						//雷达图
 						this.chartInfo.ChartType === 11 && this.$refs.BarOptRef && this.$refs.BarOptRef.getBarData();
 					}else {
-						this.EdbAxisChange()
+						//只有当新增指标or切换左右轴时,才更新上下限
+						if(this.updateLimit){
+							this.EdbAxisChange()
+						}
 						this.setAddChartDefault();
 						newval.length && !this.chartInfo.WarnMsg && this.setChartOptionHandle(newval);
 					}

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

@@ -84,13 +84,20 @@ export default {
 			},
 
 			updateData:[],
-			useUnit:''
+			useUnit:'',
+
+			isModifyEdb:false,//添加,删除指标后,该值为true,触发设置上下限后,该值为false
+			isChangeEdbAxis:false,//指标左右轴,数据转换改变时,该值为true,触发设置上下限后,该值为false
 		}
 	},
 	computed: {
 		...mapState({
 			chart_lang: state => state.edb.chart_lang,	
-		})
+		}),
+		//是否需要更新上下限
+		updateLimit(){
+			return this.isModifyEdb||this.isChangeEdbAxis
+		}
 	},
 	watch: {
 		edbFromType() {
@@ -191,6 +198,7 @@ export default {
 					return this.$message.warning("指标数据含有负数或0,无法进行对数运算")
 				}
 			}
+			this.isChangeEdbAxis = true
 			//柱形图单独设置
 			if(this.chartInfo.ChartType===7){
 				return this.setChangeBarData(index)
@@ -331,7 +339,11 @@ export default {
 								});
 							}
 							//新增指标后,检测上下限变化,修改上下限
-							this.EdbAxisChange()
+							this.isModifyEdb = true
+							if(this.updateLimit){
+								this.EdbAxisChange()
+							}
+							
 
 							this.$nextTick(()=>{
 								// 等待 tableData的 监听里面的获取到 起始时间和最近日期
@@ -689,7 +701,10 @@ export default {
 			this.updateData.splice(index, 1)
 			this.$message.success(this.$t('MsgPrompt.delete_msg'))
 			//删除指标时,检测上下限,修改上下限
-			this.EdbAxisChange()
+			this.isModifyEdb = true
+			if(this.updateLimit){
+				this.EdbAxisChange()
+			}
 			//添加图表时重置默认样式
 			this.$route.path==='/addchart' && this.resetChartEdbDefault();
 			
@@ -1073,6 +1088,8 @@ export default {
 				//若用户修改过,则检测轴的上下限是否为空,若为空,则需要计算对应轴的上下限
 				this.checkChartLimit(this.tableData)
 			}
+			this.isModifyEdb = false
+			this.isChangeEdbAxis = false
 		},
 		//新增/编辑保存图表时-判断用户有没有手动更改过上下限
 		getLimitInfo(){

+ 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]

+ 38 - 24
src/views/operation_manage/AIQA/AIQA.vue

@@ -31,16 +31,16 @@
                     <span>{{activeWindowId<=0?$t('ToolBox.AIQuestion.AI_use_intro'):`${historyList.length||0} messages`}}</span>
                 </div>
                 <div class="select-box">
-                    <!-- <el-select v-model="model" :class="{'hint':showHint}" :disabled="isTyping||(windowContentLoading&&windowContentLoading.visible)" ref="modelSelect" 
+                    <el-select v-model="model" :class="{'hint':showHint}" :disabled="isTyping||(windowContentLoading&&windowContentLoading.visible)" ref="modelSelect" 
                         @click.native="selectClick"
                         @change="changeModel">
                         <el-option v-for="item in modelList" :key="item.label"
                             :label="item.label"
-                            :value="item.label">
+                            :value="item.key">
                             <span style="float:left">{{item.label}}</span>
-                            <span style="float:right"><img :src="item.icon" style="margin-top:5px;width:24px;height:24px;"/></span>
+                            <!-- <span style="float:right"><img :src="item.icon" style="margin-top:5px;width:24px;height:24px;"/></span> -->
                         </el-option>
-                    </el-select> -->
+                    </el-select>
                 </div>
             </div>
             <!-- 仅这一部分滚动 -->
@@ -100,29 +100,35 @@ export default {
             /* window-content*/
             historyList:[],//当前窗口历史记录
             inputText:'',
-            model:'GPT-4 Turbo',//当前选择的模型
+            model:'Kimi',//当前选择的模型
             modelOldValue:'',
             modelList:[
                 {
-                    label:'GPT-4 Turbo',
+                    label:'GPT',
+                    key:'GPT-4 Turbo',
                     icon:require('@/assets/img/icons/gpt-4-turbo.png'),
                 },
                 {
-                    label:'GPT4',
-                    icon:require('@/assets/img/icons/gpt-4.png'),
-                },
-                {
-                    label:'gpt-3.5-turbo-16k',
-                    icon:require('@/assets/img/icons/chat-gpt-16k.png'),
-                },
-                {
-                    label:'gpt-3.5-turbo',
-                    icon:require('@/assets/img/icons/chat-gpt.png'),
-                },
-                {
-                    label:'eta',
-                    icon:require('@/assets/img/icons/horizon.png'),
+                    label:'Kimi',
+                    key:'Kimi',
+                    icon:require('@/assets/img/icons/gpt-4-turbo.png'),
                 },
+                // {
+                //     label:'GPT4',
+                //     icon:require('@/assets/img/icons/gpt-4.png'),
+                // },
+                // {
+                //     label:'gpt-3.5-turbo-16k',
+                //     icon:require('@/assets/img/icons/chat-gpt-16k.png'),
+                // },
+                // {
+                //     label:'gpt-3.5-turbo',
+                //     icon:require('@/assets/img/icons/chat-gpt.png'),
+                // },
+                // {
+                //     label:'eta',
+                //     icon:require('@/assets/img/icons/horizon.png'),
+                // },
             ],//模型列表
             showHint:false,//选择模型提示
             isTyping:false,//是否处于打字动画中
@@ -184,7 +190,7 @@ export default {
 
                 this.windowContentLoading&&this.windowContentLoading.close()
                 //使用模型
-                this.model = this.historyList.length?this.historyList[this.historyList.length-1].Model:'GPT-4 Turbo'
+                this.model = this.historyList.length?this.historyList[this.historyList.length-1].Model:'Kimi'
                 //如果有历史记录,则滚动到底部
                 this.windowContentToBottom()
             })
@@ -236,7 +242,7 @@ export default {
             this.activeWindowId=0
             this.activeWindow=null
             this.historyList=[]
-            this.model='GPT-4 Turbo'
+            this.model='Kimi'
             this.aiFileIds=[]
             //this.inputText=''
             this.isTyping = false
@@ -294,9 +300,16 @@ export default {
             //非新建窗口时,模型之间切换需弹窗提示
             if(this.activeWindowId!==0&&value!==''){
                 //弹窗提示:切换模型
-                this.$confirm("切换回答模型,则切换后的模型无法联系上下文进行回答,确认切换吗?", "提示", {
+                this.$confirm(this.$t('ToolBox.AIQuestion.operation_des'), this.$t('ToolBox.AIQuestion.operation_tips'), {
                     type: "warning"
                 }).then(()=>{
+                    //将相关值置空
+                    this.activeWindowId=0
+                    this.activeWindow=null
+                    this.historyList=[]
+                    this.aiFileIds=[]
+                    //this.inputText=''
+                    this.isTyping = false
                     this.$message.success('切换模型成功')
                 }).catch(()=>{
                     //this.$message.success('已取消切换模型')
@@ -364,7 +377,7 @@ export default {
             let params={
                 AiChatTopicId:this.activeWindowId<=0?0:this.activeWindowId,
                 Ask:inputText,
-                // Model:this.model
+                Model:this.model
             }
             if(this.aiFileIds && this.aiFileIds.length>0){
                 // 文件检索功能
@@ -496,6 +509,7 @@ export default {
             let formData = new FormData()
             formData.append('File',file)
             formData.append('AiChatTopicId',this.activeWindowId)
+            formData.append('Model',this.model)
             this.windowSet.add(this.activeWindowId)
             aiQAInterence.fileUpload(formData).then(res=>{
                 downloadHint.close()

+ 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:'生成PPT完成,正在下载PPT...'
         })
-        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,
       }

+ 2 - 2
src/views/predictEdb_manage/addPredicEdb.vue

@@ -123,7 +123,7 @@
             :name="index"
           >
             <template slot="title">
-              <span class="text_oneLine"><!-- 规则 -->{{$t('PredictEditPage.label_rule')}}{{ index + 1 }}</span>
+              <span class="text_oneLine"><!-- 时间段 -->{{$t('PredictEditPage.label_time_period')}}{{ index + 1 }}</span>
               <i
                 class="el-icon-delete del-icon"
                 @click.stop="removeRuleHandle(item, index)"
@@ -196,7 +196,7 @@
                   </el-select>
                 </div>
                 <div class="item" v-if="item.season_way===1">
-                  <span class="label"><!-- 期数 -->{{$t('PredictEditPage.label_periods')}}</span>
+                  <span class="label"><!-- 年数 -->{{$t('PredictEditPage.label_years')}}</span>
                   <el-input
                     v-model="item.n_value"
                     style="width: 100%"

+ 1 - 1
src/views/predictEdb_manage/components/rulesDetailDia.vue

@@ -20,7 +20,7 @@
             :name="index"
           >
             <template slot="title">
-              <span class="text_oneLine" style="font-size: 16px;">{{$t('PredictEditPage.label_rule')}}{{ index + 1 }}({{predictTypeMap[item.predict_type]}})</span>
+              <span class="text_oneLine" style="font-size: 16px;">{{$t('PredictEditPage.label_time_period')}}{{ index + 1 }}({{predictTypeMap[item.predict_type]}})</span>
             </template>
             <div class="wrap">
               <div class="item">

+ 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

+ 7 - 3
src/views/smartReport/editReport.vue

@@ -122,7 +122,7 @@
                                 @add="handleChildAdd($event,item,index)"
                                 @remove="handleChildRemove($event,item.child)"
                                 handle=".drag-btn_c"
-                                style="display: flex;gap: 20px;align-items: flex-start;"
+                                style="display: flex;gap: 3px;align-items: flex-start;"
                             >
                                 <div 
                                     :class="['report-drag-item-wrap_child_content',activeId===child.id?'blue-bg':'']" 
@@ -142,6 +142,8 @@
                                     <div class="resize-drag-box_lb" @mousedown.stop="handleResizeC($event,index,cindex,'lb')"></div>
                                     <div class="resize-drag-box_rb" @mousedown.stop="handleResizeC($event,index,cindex,'rb')"></div>
                                     <component :is="getComponentName(child)" :compData="child"/>
+                                    <!--  -->
+                                    <div class="mark-box" v-if="isDragResize" style="position: absolute;left:0;right:0;top:0;bottom: 0;z-index: 10;"></div>
                                 </div>
                             </draggable>
                         </div>
@@ -621,10 +623,10 @@ export default {
                             compType:compData.compType,
                             content:compData.content||'',
                             id:this.getCompId(compData.compType),
+                            style:compData.compType==='chart'?'height:350px':'',
                             child:[]
                         })
                     }
-                    
                 }
                 console.log(obj);
 
@@ -681,8 +683,9 @@ export default {
             }else{//删除子盒子
                 this.conList[pindex].child.splice(cindex,1)
                 if(this.conList[pindex].child.length===1){//只剩一个子盒子了则变成一个大盒子
+                    const styleArr=this.conList[pindex].child[0].style.split(';').filter(s=>s&&(s.indexOf('width')===-1&&s.indexOf('flex')===-1)).join(';')
                     this.conList[pindex]=this.conList[pindex].child[0]
-                    this.conList[pindex].style='flex:1'
+                    this.conList[pindex].style=styleArr
                 }
             }
         },
@@ -1426,6 +1429,7 @@ div{
                 position: absolute;
                 right: -15px;
                 top: 0;
+                z-index: 10;
                 .drag-btn::after{
                     content: '';
                     display: block;

+ 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() {

+ 1 - 1
src/views/system_manage/dataRefreshSetting.vue

@@ -30,7 +30,7 @@
                         <el-option v-for="i in terminalCodeList" :key="i.TerminalCode"
                             :label="i.Name" :value="i.TerminalCode"/>
                     </el-select>
-                    <el-cascader placeholder="ETA指标库分类" no-match-text="请选择完整数据源" clearable
+                    <el-cascader placeholder="指标库分类" no-match-text="请选择完整数据源" clearable
                         v-model="selectOption.classify" @change="selectOptionChange('classify')"
                         :options="edbClassifyList" 
                         :show-all-levels="false"

+ 111 - 9
src/views/system_manage/etaBaseConfig.vue

@@ -76,8 +76,6 @@
                             </froala>
                             <ConfigAnnotation picName="emailContentTemplate" @showImage="previewImage" picHintText="" :buttonText="$t('SystemManage.BaseConfig.view_example_text')"/>
                         </el-form-item>
-                    </div>
-                    <div class="side">
                         <el-form-item label="备案信息" prop="ICPLicense">
                             <el-input type="text" v-model="formData.ICPLicense" placeholder="文本中输入≥2个空格表示文本分段,小屏时换行展示" />
                             <ConfigAnnotation picHintText="" picName="ICPLicense" @showImage="previewImage"/>
@@ -86,10 +84,69 @@
                             <el-input type="text" v-model="formData.ETATitle" placeholder="请输入登录页标题" />
                             <ConfigAnnotation picHintText="" picName="ETATitle" @showImage="previewImage"/>
                         </el-form-item>
-                        <el-form-item label="网站名称" prop="TabName">
-                            <el-input type="text" v-model="formData.TabName" placeholder="请输入登录页标题" />
-                            <ConfigAnnotation picHintText="" picName="TabName" @showImage="previewImage"/>
-                        </el-form-item>
+                        <div 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 +534,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 +568,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 +627,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 +804,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 +863,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 +985,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 +1023,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;