Bladeren bron

Merge branch 'lang_dev' into lang_db

bding 1 jaar geleden
bovenliggende
commit
ac6be4ac6a
50 gewijzigde bestanden met toevoegingen van 2131 en 844 verwijderingen
  1. 11 11
      src/components/chart/chartDetailHandlesWrap.vue
  2. 3 3
      src/components/chart/chartListWrap.vue
  3. 9 9
      src/components/edbDetailPopover.vue
  4. 1 1
      src/components/selectUnit.vue
  5. 22 6
      src/lang/commonLang.js
  6. 9 1
      src/lang/langUtils.js
  7. 107 2
      src/lang/modules/EtaBase/En.js
  8. 108 2
      src/lang/modules/EtaBase/Zh.js
  9. 804 73
      src/lang/modules/EtaBase/commonLang.js
  10. 97 0
      src/lang/modules/EtaChart/commonLang.js
  11. 56 0
      src/lang/modules/StatisticAnalysis/ChartRelevance.js
  12. 9 0
      src/lang/modules/StatisticAnalysis/IndexEn.js
  13. 8 0
      src/lang/modules/StatisticAnalysis/IndexZh.js
  14. 81 0
      src/lang/modules/systemManage/ChartSet.js
  15. 78 0
      src/lang/modules/systemManage/ReportApprove.js
  16. 5 1
      src/lang/modules/systemManage/indexEn.js
  17. 5 1
      src/lang/modules/systemManage/indexZh.js
  18. 2 0
      src/main.js
  19. 7 7
      src/views/approve_manage/approveEdit.vue
  20. 35 20
      src/views/approve_manage/approveSetting.vue
  21. 1 1
      src/views/approve_manage/components/flowNode/addNode.vue
  22. 19 19
      src/views/approve_manage/components/flowNode/approveNode.vue
  23. 1 1
      src/views/approve_manage/components/flowNode/endNode.vue
  24. 2 2
      src/views/approve_manage/components/flowNode/startNode.vue
  25. 3 3
      src/views/approve_manage/components/treeTransfer.vue
  26. 7 3
      src/views/chartRelevance_manage/components/explainDialog.vue
  27. 17 0
      src/views/chartRelevance_manage/components/explainText.js
  28. 23 9
      src/views/chartRelevance_manage/components/selectTarget.vue
  29. 20 20
      src/views/chartRelevance_manage/relevance/list.vue
  30. 35 24
      src/views/chartRelevance_manage/relevance/relevanceChartEditor.vue
  31. 28 30
      src/views/dataEntry_manage/adjustdata/adjustData.vue
  32. 0 1
      src/views/dataEntry_manage/codecount/compoments/codeMirror.vue
  33. 2 2
      src/views/dataEntry_manage/codecount/compoments/dataTable.vue
  34. 38 33
      src/views/dataEntry_manage/codecount/index.vue
  35. 4 4
      src/views/dataEntry_manage/components/addMyClassifyDia.vue
  36. 52 45
      src/views/dataEntry_manage/databaseComponents/addTargetDiaBase.vue
  37. 5 5
      src/views/dataEntry_manage/databaseComponents/chartTrendRender.vue
  38. 19 18
      src/views/dataEntry_manage/databaseComponents/completeTargetDia.vue
  39. 26 26
      src/views/dataEntry_manage/databaseComponents/computedDialog.vue
  40. 1 1
      src/views/dataEntry_manage/databaseComponents/dataAssociateChart.vue
  41. 4 4
      src/views/dataEntry_manage/databaseComponents/dataAssociateComputeData.vue
  42. 22 21
      src/views/dataEntry_manage/databaseComponents/openDialog.vue
  43. 12 12
      src/views/dataEntry_manage/databaseComponents/replaceDialog.vue
  44. 97 280
      src/views/dataEntry_manage/databaseComponents/util.js
  45. 24 24
      src/views/dataEntry_manage/databaseList.vue
  46. 106 51
      src/views/dataEntry_manage/mixins/chartPublic.js
  47. 19 10
      src/views/datasheet_manage/components/sheetClassifyDia.vue
  48. 66 37
      src/views/system_manage/chartTheme/components/optionsSection.vue
  49. 18 18
      src/views/system_manage/chartTheme/index.vue
  50. 3 3
      src/views/system_manage/chartTheme/themeSetting.vue

+ 11 - 11
src/components/chart/chartDetailHandlesWrap.vue

@@ -1,13 +1,13 @@
 <template>
   <ul class="right-actions">
-    <li>操作</li>
+    <li>{{$t('Table.column_operations')}}</li>
     <li
       class="span-item shareLink"
       @click="copyChartConfirm('url')"
       :data-clipboard-text="linkUrl"
       v-if="!chartInfo.Disabled&&isShowBtn('share')"
     >
-      <i class="el-icon-share" />&nbsp;分享
+      <i class="el-icon-share" />&nbsp;{{$t('Chart.chart_share_btn')}}
     </li>
     <li v-if="isShowBtn('addMyChart')"
         class="span-item" @click="addMychartHandle(chartInfo)">
@@ -15,22 +15,22 @@
         :src="$icons.chart_join_ico"
         alt=""
         style="width: 13px; height: 12px; vertical-align: middle"
-      />加入我的图库
+      />{{$t('Chart.chart_addmy_btn')}}
     </li>
     <li v-if="isShowBtn('refresh')"
         class="span-item" @click="refreshHandle">
       <span
-        ><i class="el-icon-refresh" style="margin-left: 0" />&nbsp;刷新
+        ><i class="el-icon-refresh" style="margin-left: 0" />&nbsp;{{$t('Edb.detail_refresh_btn')}}
       </span>
     </li>
     <li class="span-item" v-if="['/commordityChartBase'].includes($route.path)">
       <span @click="saveChartHandle">
-        <i class="el-icon-collection" />&nbsp;保存
+        <i class="el-icon-collection" />&nbsp;{{$t('Chart.chart_save_btn')}}
       </span>
     </li>
     <li class="span-item" v-if="chartInfo.Button.IsCopy&&isShowBtn('otherSave')">
       <span @click="saveChartOtherHandle">
-        <i class="el-icon-document-add" />&nbsp;另存为
+        <i class="el-icon-document-add" />&nbsp;{{$t('Chart.chart_copy_btn')}}
       </span>
     </li>
     <li class="span-item" v-if="chartInfo.Button.IsEdit&&isShowBtn('edit')" @click="editChartHandle">
@@ -38,14 +38,14 @@
         src="~@/assets/img/set_m/edit.png"
         alt=""
         style="width: 13px; height: 12px"
-      />&nbsp;编辑
+      />&nbsp;{{$t('Chart.chart_edit_btn')}}
     </li>
     <li
       class="span-item copy"
       @click="copyChartConfirm('office')"
       v-if="!chartInfo.Disabled&&isShowBtn('copyOffice')"
     >
-      <i class="el-icon-document-copy" />&nbsp;复制至office
+      <i class="el-icon-document-copy" />&nbsp;{{$t('Chart.chart_copyoffice')}}
     </li>
     <li
       class="span-item copy"
@@ -55,14 +55,14 @@
       <img
         style="width: 13px; height: 12px; vertical-align: middle"
         src="~@/assets/img/chart_m/WeChat.jpg"
-      />&nbsp;复制至微信
+      />&nbsp;{{$t('Chart.chart_copywx')}}
     </li>
     <li v-if="isShowBtn('enNameSetting')"
         class="span-item copy" @click="openEnNameDia">
       <img
         style="width: 16px; vertical-align: middle"
         :src="$icons.to_en"
-      />&nbsp;设置英文名称
+      />&nbsp;{{$t('Edb.detail_en_btn')}}
     </li>
     <li
       class="span-item"
@@ -70,7 +70,7 @@
       @click="delChartHandle"
       v-if="chartInfo.Button.IsEdit&&isShowBtn('del')"
     >
-      <i class="el-icon-delete" style="color: #ff4040" />&nbsp;删除
+      <i class="el-icon-delete" style="color: #ff4040" />&nbsp;{{$t('Chart.chart_del_btn')}}
     </li>
   </ul>
 </template>

+ 3 - 3
src/components/chart/chartListWrap.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="chart-list-cont">
-    <span>共{{ total }}张图表</span>
+    <span>{{$t('Chart.chart_count_start')}}{{ total }}{{$t('Chart.chart_count_end')}}</span>
     <div
       class="chartList-wrapper"
       ref="listRef"
@@ -24,7 +24,7 @@
             @click="$emit('detailShowHandle',chart)"
           />
           <div class="item-bottom">
-            <span>创建时间: {{ chart.CreateTime.slice(0,10) }}</span>
+            <span>{{$t('Common.create_time')}}: {{ chart.CreateTime.slice(0,10) }}</span>
             <div v-if="isShowBtn(chart)">
               <span
                 class="join_txt"
@@ -35,7 +35,7 @@
                   alt=""
                   style="width: 13px; height: 12px; vertical-align: middle"
                 />
-                加入我的图库
+                {{$t('Chart.chart_addmy_btn')}}
               </span>
             </div>
           </div>

+ 9 - 9
src/components/edbDetailPopover.vue

@@ -34,15 +34,15 @@ export default {
   data() {
     return {
       keysLabel: {
-        'EdbName': '指标名称',
-        'EdbCode': '指标ID',
-        'Frequency': '更新频度',
-        'Unit': '单位',
-        'StartDate': '起始时间',
-        'LatestDate': '最新日期',
-        'LatestValue': '最新值',
-        'ModifyTime': '最近更新',
-        'SourceName': '数据来源',
+        'EdbName': /* '指标名称' */ this.$t('Edb.Detail.e_name'),
+        'EdbCode': /* '指标ID' */this.$t('Edb.Detail.e_id'),
+        'Frequency': /* '更新频度' */this.$t('Edb.Detail.e_fre'),
+        'Unit': /* '单位' */this.$t('Edb.Detail.e_unit'),
+        'StartDate': /* '起始时间' */this.$t('Edb.Detail.e_start_time'),
+        'LatestDate': /* '最新日期' */this.$t('Edb.Detail.e_latest_date'),
+        'LatestValue': /* '最新值' */this.$t('Edb.Detail.e_latest_value'),
+        'ModifyTime': /* '最近更新' */this.$t('Edb.Detail.e_recent_time'),
+        'SourceName': /* '数据来源' */this.$t('Edb.Detail.source'),
       }
     };
   }

+ 1 - 1
src/components/selectUnit.vue

@@ -5,7 +5,7 @@
             v-model="unit"
             :fetch-suggestions="querySearch"
             :disabled="disabled"
-            placeholder="请输入单位"
+            :placeholder="$t('Edb.InputHolderAll.input_unit')"
             @select="handleChange"
             @change="handleChange"
             @blur.stop="handleChange"

+ 22 - 6
src/lang/commonLang.js

@@ -24,6 +24,10 @@ export default {
       en:"Set",
       zh:'设置'
     },
+    require_vaild: {
+      en: 'Required Field',
+      zh: '必填项'
+    }
   },
   Table: {
     add_btn: {
@@ -51,7 +55,7 @@ export default {
       zh: "操作",
     },
     prompt_slogan: {
-      en: "No data available.",
+      en: "No data available",
       zh: "暂无数据",
     },
     edb_id: {
@@ -90,10 +94,18 @@ export default {
       en: "Publish Time",
       zh: "发布时间",
     },
+    loading: {
+      en: '加载中...',
+      zh: 'Loading...'
+    },
     data_loading: {
       en: "Data Loading",
       zh: "数据加载中...",
     },
+    no_edb_msg: {
+      zh: '暂无指标',
+      en: 'No indicator'
+    },
   },
   Confirm: {
     prompt: {
@@ -166,10 +178,6 @@ export default {
       en: "The current protocol is not currently supported, only the HTTPS protocol is supported",
       zh: "当前协议暂不支持,仅支持https协议",
     },
-    http_not_support:{
-      en:'The current protocol is not currently supported, only the HTTPS protocol is supported',
-      zh:'当前协议暂不支持,仅支持https协议'
-    },
     move_sort_success:{
       en:'Rearranged successfully',
       zh:'移动排序成功'
@@ -199,7 +207,15 @@ export default {
     disable:{
       en:'Disable',
       zh:'禁用'
-    }
+    },
+    create_time:{
+      en:'Creation time',
+      zh:'创建时间'
+    },
+    add_btn:{
+      en:'Add',
+      zh:'新增'
+    },
   },
   Edb,
   Chart

+ 9 - 1
src/lang/langUtils.js

@@ -8,7 +8,15 @@ export function transformLanguageData(originalObject, targetLanguage) {
 
   for (const key in originalObject) {
     if (originalObject.hasOwnProperty(key)) {
-      transformedData[key] = originalObject[key][targetLanguage];
+      //默认约定大写字母开头的key又是一层包裹 小写字母是翻译字段
+      if(/^[A-Z]/.test(key)) {
+        transformedData[key] = {};
+        for (const keyChild in originalObject[key]) {
+          transformedData[key][keyChild] = originalObject[key][keyChild][targetLanguage]
+        }
+      }else {
+        transformedData[key] = originalObject[key][targetLanguage];
+      }
     }
   }
   return transformedData;

+ 107 - 2
src/lang/modules/EtaBase/En.js

@@ -10,8 +10,113 @@ export default {
     adjustment_btn: 'Data Adjustment',
     search_placeholder: 'Indicator ID/Indicator Name',
     add_first_menu_btn: 'Add first-level catalogue',
-    total_prefix:'Total',
-    total_suffix: 'indicators',
+    total_show: 'Total {limit} indicators',
     time_show: 'Creat Time',
+    no_quote_edb: 'No cited calculated indicators',
+    no_quote_edb: 'No associated charts available for this indicator',
+
+    /* 添加指标弹窗 */
+    complany_pholder: 'Company ID',
+    no_search: 'The indicator is not searched',
+    next_step: 'Next step',
+    prev_step: 'Previous step',
+    improve_info: 'Information improvement',
+    belong_menu: 'Affiliated Catalogues',
+    add_success_msg: 'Indicators added successfully',
+    econ_base: 'Economic Database',
+    date_serie: 'Date Series',
+    stock_input_pholder: 'Please enter the stock code, only one stock code can be queried at a time',
+    edb_input_pholder: 'Please enter the indicator codes, separated by commas for multiple indicator codes',
+    edb_wind_tip: 'When entering "CG" in the Wind Financial Terminal, a code generator will pop up, which can be used to obtain codes for other indicators',
+    edb_ifind_tip: 'Use Excel iFind plug-in / date series function, according to the selected indicator to obtain the indicator code, futures and stock common code can be ticked below',
+    future_common_edb: 'Future Common indicators',
+    stock_common_edb: 'Stock Common indicators',
+    pre_price: 'Previous Closing Price',
+    op_price: 'Opening Price',
+    high_price: 'Highest Price',
+    low_price: 'Lowest Price',
+    close_price: 'Closing Price',
+    settle_price: 'Settlement Price',
+    trade_volume: 'Trading Volume',
+    turnover: 'Turnover',
+    incre_decre: 'Percentage Increase/Decrease',
+    fluctua: 'Fluctuation',
+    turn_rate: 'Turnover Rate',
+    open_inter: 'Open Interest',
+    open_val: 'Value of Open Positions',
+    fluctua_day: '日振幅',
+    have_edb_tip1:'该数据已存在数据库,名称为{name},目录为:{menu},如需重新添加,请删除原指标',
+    have_edb_tip2:'该数据已存在数据库,名称为{name},目录为:{menu}',
+    exist_edb_tips: 'The following indicators already exist in the indicator pool, please do not re-enter them!',
+    forbid_edb_tips: '您当前暂无权限查看该指标,如需查看,请联系管理员',
+    complate_info: 'Complete Information',
+    no_companyid_msg: 'Please input Company ID',
+    no_edbid_msg: 'Please input Indicator ID',
+    
+    /* 替换指标弹窗 */
+    origin_edb: 'Original Indicator',
+    replace: 'Replace to',
+    replace_all: 'Replace all',
+    replace_tip: 'Tip: After the replacement, charts and calculated indicators that refer to the original indicator will be replaced by the replacement indicator.',
+    replace_success_msg: 'This replacement will last for a longer period of time, confirm the replacement?',
+    input_origin_vaild: 'Original Indicator can not be empty',
+    input_replace_vaild: 'Indicator Replacement not be empty',
+
+    /* 目录弹窗 */
+    parent_menu: 'Prev Catalogue',
+    menu_name: 'Catalogue Name',
+    input_menu_msg: 'Catalogue name cannot be empty',
+
+    /* 计算指标弹窗 */
+    normal_calculate_tab: 'Conventional Calculation',
+    batch_calculate_tab: 'Batch Calculation',
+    calculate_title: 'Calculation',
+    add_more_param: 'Add more parameters',
+    null_val_deal: '空值处理',
+    max_null_val: 'MAX、MIN空值处理',
+    calculate_formula: 'Calculation Formula',
+    input_formula_msg: 'Please input formula',
+    input_formula_valid: 'Calculation Formula can not be blank',
+    input_date_msg: 'Select date',
+    formula_examp: 'Formula Example',
+    func_examp: 'Function Support',
+    add_segm:'Add segment',
+    create_calculate_btn: 'Generate calculation index',
+    num_overrun_msg: '添加指标个数已达上限'
+  },
+
+  /* 代码运算页面 */
+  CodeCountPage: {
+    run_btn: 'Run',
+    res_show: 'Results Display',
+    tab_info: 'Basic Information',
+    tab_edb: 'Indicator Information',
+    res_search: 'Query results',
+    res_search_tip: 'show the structure of the table where the indicator is located and retrieve the indicator code',
+    copy_code: 'Copy Code',
+    noenough_info_msg: '请填写完整基础信息',
+    run_msg: 'Please run code first',
+    no_code_msg: 'Please input code',
+    run_ing: 'Runing',
+    run_success: 'Run successfully',
+    table_name: 'Table Name',
+    field_name: 'Field Name',
+    field_instru: '*Field Description',
+    res_show_col1: 'Date',
+    res_show_col2: 'Value',
+  },
+
+  /* 数据调整页面 */
+  AdjustDataPage: {
+    usetip_msg: 'Use Instructions',
+    usetip: `Data adjustment:<br>1、Adjust the historical data of the selected indicator and saved, this indicator will be updated based on the adjusted data.<br>
+    2、Support adding future data to the selected indicator, and data correction when the indicator is updated to the same date in the future<br>
+    3、Select the table, use "Ctrl + F" to call the fast search function, support quickly locate the data in the table.<br>
+    Note: The system only takes data from columns A and B.`,
+    search_res: '查询结果',
+    or_edbid: 'Original Indicator ID',
+    or_edbname: 'Original Indicator Name',
+    choose_edb: 'Select indicators',
+    input_content_msg: 'Please input table content'
   }
 }

+ 108 - 2
src/lang/modules/EtaBase/Zh.js

@@ -10,8 +10,114 @@ export default {
     adjustment_btn: '数据调整',
     search_placeholder: '指标ID/指标名称',
     add_first_menu_btn: '添加一级目录',
-    total_prefix:'共',
-    total_suffix: '个指标',
+    total_show: '共{limit}个指标',
     time_show: '创建时间',
+    no_quote_chart: '该指标暂无关联图',
+    no_quote_edb: '暂无引用的计算指标',
+
+    /* 添加指标弹窗 */
+    complany_pholder: '公司ID',
+    no_search: '未搜索到该指标',
+    next_step: '下一步',
+    prev_step: '上一步',
+    improve_info: '完善信息',
+    belong_menu: '所属目录',
+    add_success_msg: '新增指标成功',
+    econ_base: '经济数据库',
+    date_serie: '日期序列',
+    stock_input_pholder: '请输入证券代码,每次只查询一个证券代码',
+    edb_input_pholder: '请输入指标代码,多个指标代码用英文逗号分隔',
+    edb_wind_tip: 'wind金融终端输入”CG“会弹出代码生成器,可在代码生成器上获取其他指标的代码',
+    edb_ifind_tip: '可用Excel同花顺插件/日期序列功能,根据所选指标获取指标代码,期货和股票常用代码可在下方勾选',
+    future_common_edb: '期货常用指标',
+    stock_common_edb: '股票常用指标',
+    pre_price: '前收盘价',
+    op_price: '开盘价',
+    high_price: '最高价',
+    low_price: '最低价',
+    close_price: '收盘价',
+    settle_price: '结算价',
+    trade_volume: '成交量',
+    turnover: '成交额',
+    incre_decre: '涨跌幅',
+    fluctua: '振幅',
+    turn_rate: '换手率',
+    open_inter: '持仓量',
+    open_val: '持仓额',
+    fluctua_day: '日振幅',
+    have_edb_tip1:'该数据已存在数据库,名称为{name},目录为:{menu},如需重新添加,请删除原指标',
+    have_edb_tip2:'该数据已存在数据库,名称为{name},目录为:{menu}',
+    exist_edb_tips: '指标库中已存在以下指标,请勿重新输入!',
+    forbid_edb_tips: '您当前暂无权限查看该指标,如需查看,请联系管理员',
+    complate_info: '完善信息',
+    no_companyid_msg: '请输入公司ID',
+    no_edbid_msg: '请输入指标ID',
+
+    /* 替换指标弹窗 */
+    origin_edb: '原指标',
+    replace: '替换为',
+    replace_all: '全部替换',
+    replace_tip: '提示:替换后,图表和计算指标引用到原指标的会全部由替换指标替代',
+    replace_success_msg: '本次替换将持续较长时间,是否确认替换?',
+    input_origin_vaild: '原指标不能为空',
+    input_replace_vaild: '替换指标不能为空',
+
+    /* 目录弹窗 */
+    parent_menu: '上级目录',
+    menu_name: '目录名称',
+    input_menu_msg: '目录名称不能为空',
+
+    /* 计算指标弹窗 */
+    normal_calculate_tab: '常规计算',
+    batch_calculate_tab: '批量计算',
+    calculate_title: '计算指标',
+    add_more_param: '添加更多参数',
+    null_val_deal: '空值处理',
+    max_null_val: 'MAX、MIN空值处理',
+    calculate_formula: '计算公式',
+    input_formula_msg: '请输入公式',
+    input_formula_valid: '计算公式不能为空',
+    input_date_msg: '选择日期',
+    formula_examp: '公式示例',
+    func_examp: '函数支持',
+    add_segm:'新增分段',
+    create_calculate_btn: '生成计算指标',
+    num_overrun_msg: '添加指标个数已达上限'
+
+  },
+
+  /* 代码运算页面 */
+  CodeCountPage: {
+    run_btn: '运行',
+    res_show: '结果展示',
+    tab_info: '基础信息',
+    tab_edb: '指标信息',
+    res_search: '查询结果',
+    res_search_tip: '展示指标所在表结构及调取指标代码',
+    copy_code: '复制代码',
+    noenough_info_msg: '请填写完整基础信息',
+    run_msg: '请先运行代码',
+    no_code_msg: '请输入代码',
+    run_ing: '运行中',
+    run_success: '运行成功',
+    table_name: '表名',
+    field_name: '字段名',
+    field_instru: '*字段说明',
+    res_show_col1: '日期',
+    res_show_col2: '值',
+  },
+
+  /* 数据调整页面 */
+  AdjustDataPage: {
+    usetip_msg: '使用说明',
+    usetip: `数据调整:<br>1、将所选指标的历史数据经过调整后保存,该指标更新时将在调整数据的基础上更新最新数据;<br>
+    2、支持对所选指标添加未来的数据,指标更新到未来相同的日期时,进行数据更正;<br>
+    3、选中表格,使用“Ctrl+F”可调用快速查找功能,支持快速定位到表格中的数据;<br>
+    注:系统只取A、B列数据`,
+    search_res: '查询结果',
+    or_edbid: '原指标ID',
+    or_edbname: '原指标名称',
+    choose_edb: '选择指标',
+    input_content_msg: '请输入表格内容'
   }
 }

+ 804 - 73
src/lang/modules/EtaBase/commonLang.js

@@ -1,5 +1,6 @@
 /* 指标相关的通用文字 
-  在最外层commonLang中用
+  在最外层commonLang中用 
+  $t('Edb.xxx')
 */
 
 export default {
@@ -43,6 +44,10 @@ export default {
     zh:'复制数据',
     en:'Copy data'
   },
+  detail_lookdata_btn: {
+    zh:'查看数据',
+    en:'View indicators'
+  },
   detail_del_btn:{
     zh:'删除',
     en:'Delete'
@@ -63,82 +68,14 @@ export default {
     zh:'添加人',
     en:'Creator'
   },
-  e_date: {
-    zh:'日期',
-    en:'Date'
-  },
-  e_value: {
-    zh:'值',
-    en:'Value'
-  },
-  source: {
-    zh:'数据来源',
-    en:'Data Source'
-  },
-  e_id: {
-    zh:'指标ID',
-    en:'Indicator ID'
-  },
-  e_name: {
-    zh:'指标名称',
-    en:'Indicator Name'
-  },
-  e_fre: {
-    zh:'频度',
-    en:'Frequency'
-  },
-  e_unit: {
-    zh:'单位',
-    en:'Unit'
-  },
-  e_menu: {
-    zh:'指标目录',
-    en:'Data Catalogue'
-  },
-  e_start_time: {
-    zh:'起始时间',
-    en:'Start Time'
-  },
-  e_update_time: {
-    zh:'更新时间',
-    en:'Update Time'
-  },
-  e_status: {
-    zh:'刷新状态',
-    en:'Update Status'
-  },
-  time_interval: {
-    zh:'时间段',
-    en: 'Time Period'
-  },
-  time_all: {
-    zh:'全部',
-    en: 'All'
-  },
-  since_onefive: {
-    zh:'15年至今',
-    en: 'Since 2015'
-  },
-  since_twozero: {
-    zh:'20年至今',
-    en: 'Since 2020'
-  },
-  since_twoone: {
-    zh:'21年至今',
-    en: 'Since 2021'
-  },
-  since_twotwo: {
-    zh:'22年至今',
-    en:'Since 2022'
-  },
-  choose_time: {
-    zh:'请选择时间段',
-    en:'Please select time period'
-  },
   show_yearonyear: {
     zh:'展示同比图',
     en:'Show year-on-year chart'
   },
+  hide_yearonyear: {
+    zh:'隐藏同比图',
+    en:'Hide year-on-year chart'
+  },
   switch_season: {
     zh:'切换季节性图',
     en:'Switch to seasonal chart'
@@ -147,4 +84,798 @@ export default {
     zh:'切换曲线图',
     en:'Switch to curve chart'
   },
+  eta_name:{
+    zh:'ETA指标',
+    en:'ETA index'
+  },
+  eta_predictor_name:{
+    zh:'ETA预测指标',
+    en:'ETA predictor index'
+  },
+  formula_instru: {
+    zh:'公式说明',
+    en:'Formula Specification'
+  },
+
+  /* 指标相关字段 */
+  Detail: {
+    e_date: {
+      zh:'日期',
+      en:'Date'
+    },
+    e_value: {
+      zh:'值',
+      en:'Value'
+    },
+    source: {
+      zh:'数据来源',
+      en:'Data Source'
+    },
+    e_id: {
+      zh:'指标ID',
+      en:'Indicator ID'
+    },
+    e_name: {
+      zh:'指标名称',
+      en:'Indicator Name'
+    },
+    e_code: {
+      zh:'指标编码',
+      en:'Indicator Code'
+    },
+    e_fre: {
+      zh:'频度',
+      en:'Frequency'
+    },
+    e_unit: {
+      zh:'单位',
+      en:'Unit'
+    },
+    e_menu: {
+      zh:'指标目录',
+      en:'Data Catalogue'
+    },
+    e_start_time: {
+      zh:'起始时间',
+      en:'Start Time'
+    },
+    e_end_time: {
+      zh: '结束时间',
+      en: 'End Time'
+    },
+    e_update_time: {
+      zh:'更新时间',
+      en:'Update Time'
+    },
+    e_status: {
+      zh:'刷新状态',
+      en:'Update Status'
+    },
+    e_latest_date: {
+      zh:'最新日期',
+      en:'Latest Date'
+    },
+    e_latest_value: {
+      zh:'最新值',
+      en:'Latest Value'
+    },
+    e_recent_time: {
+      zh:'最近更新',
+      en:'Recent Update'
+    },
+    e_stock_code: {
+      zh:'证券代码',
+      en:' Security Code'
+    },
+    e_opera: {
+      zh:'操作',
+      en:'Operation'
+    },
+  },
+
+  /* 单位 */
+  UnitAll: {
+    u_null: {
+      zh:'无',
+      en:'Null'
+    },
+    wanton: {
+      zh:'万吨',
+      en:'10000 tonnes'
+    },
+    u_bill: {
+      zh:'亿元',
+      en:'Billions'
+    },
+    u_yuan: {
+      zh:'元',
+      en:'Yuan'
+    },
+    yuan_ton: {
+      zh:'元/吨',
+      en:'Yuan/tonne'
+    },
+    yuan_wetton: {
+      zh:'元/湿吨',
+      en:'Yuan/wet ton'
+    },
+    u_kg: {
+      zh:'千克',
+      en:'kg'
+    },
+    u_ton: {
+      zh:'吨',
+      en:'Tonnes'
+    },
+    short_ton: {
+      zh:'短吨',
+      en:'short ton'
+    },
+    doll_ton: {
+      zh:'美元/吨',
+      en:'dollar/tonne'
+    },
+    wan_skilo: {
+      zh:'万平方千米',
+      en:'ten thousand square kilometers'
+    },
+    doll_bar: {
+      zh:'美元/桶',
+      en:'dollar/barrel'
+    },
+    cent_gal: {
+      zh:'美分/加仑',
+      en:'cent/gallon'
+    },
+    u_hand: {
+      zh:'手',
+      en:'hand'
+    },
+  },
+
+  /* 频度 */
+  FreAll: {
+    day: {
+      zh:'日度',
+      en:'Daliy'
+    },
+    week: {
+      zh:'周度',
+      en:'Weekly'
+    },
+    dekad: {
+      zh:'旬度',
+      en:'Every ten days'
+    },
+    month: {
+      zh:'月度',
+      en:'Monthly'
+    },
+    quarter: {
+      zh:'季度',
+      en:'Quarterly'
+    },
+    year: {
+      zh:'年度',
+      en:'Yearly'
+    },
+    year_min:{
+      zh:'年',
+      en:'Year'
+    },
+    quarter_min: {
+      zh:'季',
+      en:'season'
+    },
+    month_min: {
+      zh:'月',
+      en:'month'
+    },
+    week_min: {
+      zh:'周',
+      en:'week'
+    },
+    day_min: {
+      zh:'天',
+      en:'day'
+    },
+  },
+
+  /* 计算方式 */
+  CalculatesAll: {
+    calculate: {
+      zh: '指标运算',
+      en: 'Calculation'
+    },
+    to_month_quarter: {
+      zh: '累计值转月值/转季值',
+      en: 'Convert Cumulative Values to Monthly/Quarterly'
+    },
+    to_month: {
+      zh: '累计值转月值',
+      en: 'Convert Cumulative Values to Monthly Values'
+    },
+    to_quarter: {
+      zh: '累计值转季值',
+      en: 'Convert Cumulative Values to Quarterly Values'
+    },
+    on_year: {
+      zh: '同比值',
+      en: 'Year-on-Year Value'
+    },
+    differ: {
+      zh: '同差值',
+      en: 'Difference Value'
+    },
+    n_move_average: {
+      zh: 'N数值移动平均计算',
+      en: 'Calculation of N-number Moving Average'
+    },
+    n_rate: {
+      zh: 'N数值环比值',
+      en: 'Sequential Growth Rate'
+    },
+    n_differ: {
+      zh: 'N数值环差值',
+      en: 'N Period-over-Period Difference Calculation'
+    },
+    up_conver: {
+      zh: '升频',
+      en: 'Up-conversion'
+    },
+    splic: {
+      zh: '指标拼接',
+      en: 'Indicator Splicing'
+    },
+    time_move: {
+      zh: '时间移位',
+      en: 'Time Shift'
+    },
+    super_season: {
+      zh: '超季节性',
+      en: 'Super-seasonality'
+    },
+    fit_residu: {
+      zh: '拟合残差',
+      en: 'Fit Residual'
+    },
+    annual: {
+      zh: '年化',
+      en: 'annualization'
+    },
+    down_conver: {
+      zh: '降频',
+      en: 'Downconversion'
+    },
+    diff_index: {
+      zh: '扩散指数',
+      en: 'Diffusion Index'
+    },
+    cumulate: {
+      zh: '累计值',
+      en: 'Cumulative Value'
+    },
+    ex_smooth: {
+      zh: '指数修匀',
+      en: 'Exponential Smoothing'
+    },
+    day_mean: {
+      zh: '日均值',
+      en: 'Daily Mean'
+    },
+  },
+
+  /* 指标添加form提示 */
+  Valids: {
+    name_msg: {
+      zh: '指标名称不能为空',
+      en: 'The indicator name cannot be empty'
+    },
+    menu_msg: {
+      zh: '指标目录不能为空',
+      en: 'Index directory can not be empty'
+    },
+    unit_msg: {
+      zh: '单位不能为空',
+      en: 'Unit can not be empty'
+    },
+    fre_msg: {
+      zh: '频度不能为空',
+      en: 'Frequency can not be empty'
+    },
+    n_msg: {
+      zh: 'N值不能为空',
+      en: 'N can not be empty'
+    },
+    move_msg: {
+      zh: '移动方式参数不能为空',
+      en: 'Parameter  can not be empty'
+    },
+    calendar_msg: {
+      zh: '日历不能为空',
+      en: 'Calendar can not be empty'
+    },
+    alpha_msg: {
+      zh: 'alpha值不能为空',
+      en: 'Alpha can not be empty'
+    },
+  },
+
+  /* 通用相关pholder */
+  InputHolderAll: {
+    input_name: {
+      zh: '请输入指标名称',
+      en: 'Please input indicator name'
+    },
+    input_menu: {
+      zh: '请选择指标目录',
+      en: 'Please select indicator directory '
+    },
+    input_unit: {
+      zh: '请输入单位',
+      en: 'Please input unit'
+    },
+    input_fre: {
+      zh: '请选择频度',
+      en: 'Please input frequency'
+    },
+    select_edb_name:{
+      zh: '请选择指标名称',
+      en: 'Please select an indicator name'
+    }
+  },
+  
+  /* 公示说明 */
+  FormulaTips: {
+    calculate: {
+      zh: `指标运算:<br>
+      1、选择指标参数<br>
+      2、生成指标的时间序列:以第一个指标为准,其他指标去匹配第一个指标的日期序列,没有值的,按照所选空值处理方式处理<br>
+      3、按照输入的计算公式进行计算`,
+      en: `Index calculation:<br>
+      1、Select index parameters<br>
+      2、生成指标的时间序列:以第一个指标为准,其他指标去匹配第一个指标的日期序列,没有值的,按照所选空值处理方式处理<br>
+      3、按照输入的计算公式进行计算`
+    },
+    to_month_quarter: {
+      zh: `1、累计值转月值计算方法:<br>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:45%">1月无值:1月=2月/2</span>
+        <span style="width:40%">1月有值:1月=1月</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">2月=2月/2</span>
+        <span style="width:40%">2月=2月-1月</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">3月=3月-2月</span>
+        <span style="width:40%">3月=3月-2月</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">4月=4月-3月</span>
+        <span style="width:40%">4月=4月-3月</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">以此类推</span>
+        <span style="width:40%">以此类推</span>
+      </p>
+      <p>特别说明:若1月和2月均无值,则该年不做计算</p>
+      2、累计值转季值计算方法:<br>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:45%">1季度无值:1季度=2季度/2 </span>
+        <span style="width:40%">1季度有值:1季度=1季度</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">2季度=2季度/2</span>
+        <span style="width:40%">2季度=2季度-1季度</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">3季度=3季度-2季度</span>
+        <span style="width:40%">3季度=3季度-2季度</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">4季度=4季度-3季度</span>
+        <span style="width:40%">4季度=4季度-3季度</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">以此类推</span>
+        <span style="width:40%">以此类推</span>
+      </p>
+      <p>特别说明:若1季度和2季度均无值,则该年不做计算</p>`,
+      en: `1、 Method for Converting Cumulative Values to Monthly Values:<br>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:45%"> Null in January:January=February/2</span>
+        <span style="width:40%">January has value:January=January</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">February=February/2</span>
+        <span style="width:40%">February=February-January
+        </span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">March=March-February</span>
+        <span style="width:40%">March=March-February</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">April=April-March</span>
+        <span style="width:40%">April=April-March</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">and so on</span>
+        <span style="width:40%">and so on</span>
+      </p>
+      <p> Special Instruction:If January and February are both with null value, it doesn't need to be calculated this year.</p>
+      2、Method for Converting Cumulative Values to Quarterly Values:<br>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:45%">Null in Q1:Q1=Q2/2</span>
+        <span style="width:40%">Q1 has value:Q1=Q2</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">Q2=Q2/2
+        </span>
+        <span style="width:40%"> Q2=Q2-Q1</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">Q3=Q3-Q2</span>
+        <span style="width:40%">Q3=Q3-Q2</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">Q4=Q4-Q3</span>
+        <span style="width:40%">Q4=Q4-Q3</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">and so on</span>
+        <span style="width:40%">and so on</span>
+      </p>
+      <p>Special Instruction: If Q1 and Q2 are both with null value, it doesn't need to be calculated this year.</p>`
+    },
+    to_month: {
+      zh: `累计值转月值计算方法:<br>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:45%">1月无值:1月=2月/2</span>
+        <span style="width:40%">1月有值:1月=1月</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">2月=2月/2</span>
+        <span style="width:40%">2月=2月-1月</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">3月=3月-2月</span>
+        <span style="width:40%">3月=3月-2月</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">4月=4月-3月</span>
+        <span style="width:40%">4月=4月-3月</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">以此类推</span>
+        <span style="width:40%">以此类推</span>
+      </p>
+      <p>特别说明:若1月和2月均无值,则该年不做计算</p>`,
+      en: `Method for Converting Cumulative Values to Monthly Values:<br>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:45%"> Null in January:January=February/2</span>
+        <span style="width:40%">January has value:January=January</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">February=February/2</span>
+        <span style="width:40%">February=February-January
+        </span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">March=March-February</span>
+        <span style="width:40%">March=March-February</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">April=April-March</span>
+        <span style="width:40%">April=April-March</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">and so on</span>
+        <span style="width:40%">and so on</span>
+      </p>
+      <p> Special Instruction:If January and February are both with null value, it doesn't need to be calculated this year.</p>`
+    },
+    to_quarter: {
+      zh: `累计值转季值计算方法:<br>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:45%">1季度无值:1季度=2季度/2 </span>
+        <span style="width:40%">1季度有值:1季度=1季度</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">2季度=2季度/2</span>
+        <span style="width:40%">2季度=2季度-1季度</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">3季度=3季度-2季度</span>
+        <span style="width:40%">3季度=3季度-2季度</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">4季度=4季度-3季度</span>
+        <span style="width:40%">4季度=4季度-3季度</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">以此类推</span>
+        <span style="width:40%">以此类推</span>
+      </p>
+      <p>特别说明:若1季度和2季度均无值,则该年不做计算</p>`,
+      en: `Method for Converting Cumulative Values to Quarterly Values:<br>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:45%">Null in Q1:Q1=Q2/2</span>
+        <span style="width:40%">Q1 has value:Q1=Q2</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">Q2=Q2/2
+        </span>
+        <span style="width:40%"> Q2=Q2-Q1</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">Q3=Q3-Q2</span>
+        <span style="width:40%">Q3=Q3-Q2</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">Q4=Q4-Q3</span>
+        <span style="width:40%">Q4=Q4-Q3</span>
+      </p>
+      <p style="display:flex;justify-content: space-between;">
+        <span style="width:40%">and so on</span>
+        <span style="width:40%">and so on</span>
+      </p>
+      <p>Special Instruction: If Q1 and Q2 are both with null value, it doesn't need to be calculated this year.</p>`
+    },
+    on_year: {
+      zh: `同比公式:今年同期/去年同期-1<br>
+      1、锁定当前数值对应的日期<br>
+      2、匹配上一年同期:寻找过去一年有数值的对应日期中,
+      与当前数值对应日期相等或者最为接近的那一天,如果有
+      两个日期与当前数值对应日期的距离相等,则取降序日期
+      排列下的第一个日期。<br>
+      3、取到匹配的上一年同期对应的数值<br>
+      4、将当期的数值与上一年匹配的同期的值计算比例<br>
+      5、将计算得到的比例填充至当前数值对应的日期,生成
+      新的数据序列<br>
+      6、遍历允许跨年,对于日度/周度/季度数据,遍历往前
+      最多35天,往后最多35天`,
+      en: `Year-over-Year Formula: (Current Period Value / Previous Period Value) - 1<br>
+      1、Lock the date corresponding to the current value.<br>
+      2、Match the same period in the previous year: Search for the date in the past year with a value that is equal to or closest to the current value's corresponding date. If there are two dates that are equidistant from the current value's corresponding date, select the first date under descending order.<br>
+      3、Retrieve the value corresponding to the matched same period of the previous year.<br>
+      4、Calculate the ratio between the current period's value and the matched value from the same period of last year.<br>
+      5、Fill in the calculated ratio into the date corresponding to the current value to generate a new data series.<br>
+      6、Allow iteration across years; for daily/weekly/quarterly data, iterate up to 35 days backward and forward at most.`
+    },
+    differ: {
+      zh: `同差公式:今年同期-去年同期<br>
+      1、锁定当前数值对应的日期<br>
+      2、匹配上一年同期:寻找过去一年有数值的对应日期中,
+      与当前数值对应日期相等或者最为接近的那一天,如果有
+      两个日期与当前数值对应日期的距离相等,则取降序日期
+      排列下的第一个日期。<br>
+      3、取到匹配的上一年同期对应的数值<br>
+      4、将当期的数值与上一年匹配的同期的值计算差值<br>
+      5、将计算得到的差值填充至当前数值对应的日期,生成
+      新的数据序列<br>
+      6、遍历允许跨年,对于日度/周度/季度数据,遍历往前
+      最多35天,往后最多35天`,
+      en: `Difference Value Formula: Value this year-Value last year<br>
+      1、Lock in the date corresponding to the current value.<br>
+      2、Match the same period from the previous year: Look for the date in the past year with a recorded value that is equal to or closest to the current value's corresponding date. If there are two dates equidistant from the current value's corresponding date, select the first date under a descending order arrangement.<br>
+      3、Retrieve the matched value from the same period of the previous year.<br>
+      4、Calculate the difference between the current period’s value and the matched value from the same period of last year.<br>
+      5、Fill in the calculated difference into the date corresponding to the current value, creating a new data series.<br>
+      6、Allow for traversal across years; for daily/weekly/quarterly data, traverse up to 35 days backward and 35 days forward.`
+    },
+    n_move_average: {
+      zh: `计算公式:=AVERAGE(N个数值的和),N为取数个数<br>
+      1、计算当前的数值的N值移动平均,则时间向前追溯
+      N个值(包括当前值),如果遇到空格值的日期,则自
+      动跳过空格数值,继续往前追溯<br>
+      2、如果当前日期对应的原始数据为空值,则N值移动
+      平均也为空值`,
+      en: `Calculation formula: =AVERAGE(Sum of N numerical values), where N is the number of values to be taken.<br>
+      1、To calculate the moving average of N values for the current value, go back in time for N values (including the current value). If a date with a blank value is encountered, automatically skip over the blank value and continue tracing back.<br>
+      2、If the original data corresponding to the current date is a blank value, then the moving average of N values will also be a blank value.`
+    },
+    n_rate: {
+      zh: `环比公式:(当期-上期)/上期<br>
+      1、选择当期对应值,若是当期值为空,则环比值为空;若当期有值,上期值往 前遍历查询,默认N等于1,找最近的一个上期值;可根据设置的N值选择最 近的第N个上期值 <br>
+      2、将当期的数值与匹配到的上期值按照公式进行计算 <br>
+      3、将计算得到值填充至当期数值对应的日期,生成新的 数据序列<br>
+      4、原始数据中出现0和负值时,提示该指标不能进行环比运算`,
+      en: ` Month-on-Month Formula: (Value of Current Period - Value of Previous Period) / Value of Previous Period<br>
+      1、Select the corresponding value for the current period. If the value for the current period is empty, then the month-on-month value will be empty as well. If there is a value for the current period, search backwards for the previous period's value, with the default N being 1 to find the nearest previous period's value. Based on the set N value, select the Nth closest previous period's value.<br>
+      2、Calculate using the formula by comparing the current period's value with the matched previous period's value.<br>
+      3、Fill in the calculated value into the date corresponding to the current period's value to generate a new data series.<br>
+      4、If zero and negative values appear in the original data, indicate that this indicator cannot be used for month-on-month calculations.`
+    },
+    n_differ: {
+      zh: `环差公式:当期-上期<br>
+      1、选择当期对应值,若是当期值为空,则环差值为空;若当期有值,上期值往 前遍历查询,默认N等于1,找最近的一个上期值;可根据设置的N值选择最 近的第N个上期值找到最近的一个上期值即可<br>
+      2、将当期的数值与匹配到的上期值按照公式进行计算<br>
+      3、将计算得到值填充至当期数值对应的日期,生成新的数据序列`,
+      en: `Period-over-Period Difference Calculation Formula: Value of current period-Value of previous period<br>
+      1、Select the corresponding value for the current period. If the current value is empty, then the difference from previous period value is empty as well; if there is a current value, search backwards for the previous period value, by default N equals 1, to find the nearest previous period value. You can choose the nearest Nth previous period value based on the set N value to find the nearest previous period value.<br>
+      2、Calculate according to the formula using the current period's numerical value and the matched previous period's value.<br>
+      3、Fill in the calculated values into the dates corresponding to the current period's numerical values to generate a new data series.`
+    },
+    up_conver: {
+      zh: `升频:支持转换所有频度指标为日度指标<br>
+      1、规则:若将月度指标转换为日度指标,如当前月为9月,但9月数据还未更新,假设9月数据是9.30更新,则9.1~9.29的数据等于8.31的数据<br>
+      2、其他频度规则相同`,
+      en: `Up-conversion:Support for converting all frequency metrics to daily metrics<br>
+      1、Rule: If converting monthly metrics to daily metrics, for instance, if the current month is September but the data for September has not been updated yet (assuming the data is refreshed on September 30th), then the data from September 1st to 29th should be equal to the data from August 31st.<br>
+      2、The rules for other frequencies are the same.`
+    },
+    splic: {
+      zh: `1、直接拼接说明:将指标A和指标B按照选取的拼接日期进行拼接;<br>
+      2、累计值同比拼接说明:指标A最后一个12月31日有值的年份数据乘以指标B的同比增长率得到指标A下一年的数据,从指标A最后一个12月31日有值的日期开始拼接计算得到指标A下一年的数据;`,
+      en: `1、直接拼接说明:将指标A和指标B按照选取的拼接日期进行拼接;<br>
+      2、累计值同比拼接说明:指标A最后一个12月31日有值的年份数据乘以指标B的同比增长率得到指标A下一年的数据,从指标A最后一个12月31日有值的日期开始拼接计算得到指标A下一年的数据;`
+    },
+    time_move: {
+      zh: `时间移位:把数据的时间序列加(领先)减(滞后)相应的时间,形成新的数据系列。<br>例:<br>
+      <p>
+        领先10天,即将指标每个数据点的日期加10天。原始数据点(2022-1-1,100)将转化成(2022-1-11,100)
+      </p>
+      <p>
+        滞后1月,即将日期减30天,原始数据点(2022-1-1,100)将转化成(2021-12-2,100)
+      </p>`,
+      en: `Time Shift:Shift the time series of data forward (lead) or backward (lag) by the corresponding time to form a new data series.<br>For example:<br>
+      <p>
+        Lead by 10 days, which means adding 10 days to the date of each data point of the indicator.the original data point (2022-1-1,100) will be transformed into (2022-1-11,100).
+      </p>
+      <p>
+        Lagging by one month, which means subtracting 30 days from the date, the original data point (2022-1-1,100) will be transformed into (2021-12-2,100).
+      </p>`
+    },
+    super_season: {
+      zh: `计算公式:现值 - AVERAGE(过去N年同期数值和),N为取数个数<br>
+      1、计算过去N年同期数值和,则时间向前追溯 N年(包括最新一年)<br>
+      2、参与计算的指标数据通过线性方程补全为日度的数据(包括周末)<br>
+      3、遇到闰二月,如2.29,去掉该天数据<br>
+      4、进行农历计算时,只计算11月--次年5月,如果当前月为12月,则取第二年的春节为时间位移标准点<br>
+      5、计算生成的结果的数据频度与原始指标频度保持一致`,
+      en: `Calculation Formula:Present Value - AVERAGE(Past N years of corresponding period values), where N is the number of data points to consider.<br>
+      1、To calculate the sum of corresponding period values over the past N years, time is traced back for N years (including the current year).<br>
+      2、The data points involved in the calculations are completed to daily values (including weekends) using a linear equation.<br>
+      3、In case of a leap February, such as February 29th, exclude data for that day.<br>
+      4、When performing lunar calendar calculations, if the current month is December, then use the Spring Festival of the following year as the reference point for time displacement.<br>
+      5、The data frequency of the resulting calculation should be consistent with that of the original indicator.`
+    },
+    fit_residu: {
+      zh: `拟合残差:计算一个指标(B)的实际值和拟合值(B’)的差值。拟合值B’由指标A(自变量)和指标B(因变量)通过线性回归拟合得到,具体算法如下:<br>
+      根据指标A(自变量)和指标B(因变量)过去一个时间段内(这个N期可以是从最新值往前倒退N期,包含最新,也可以是选取历史数据的一个时间段内的数据),生成线性回归方程 Y=aX+b<br>
+      由指标A(自变量)和拟合方程的系数a,b,计算得到拟合出来的系列B’=aA b 再计算拟合系列B’和原始系列B的差值得到新的数据系列Delta,Delta=B-B'`,
+      en: `Fitting Residuals:Compute the difference between the actual value of a metric (B) and its fitted value (B’). The fitted value B’ is obtained through linear regression fitting of metric A (independent variable) and metric B (dependent variable), using the following algorithm:<br>
+      Based on past data for a certain period (this period N can be counting backwards N periods from the most recent, including the latest, or it can be a selected historical time frame) of metrics A (independent variable) and B (dependent variable), generate a linear regression equation Y = aX + b.<br>
+      Using the independent variable A and coefficients a, b from the fitting equation, calculate the fitted series B’ = aA + b. Then compute the difference between the fitted series B’ and the original series B to obtain a new data series Delta, where Delta = B - B’.`
+    },
+    annual: {
+      zh: `年化值=S / a (S表示指标数值,a表示年化平均占比)<br>
+      1、读取指标最新值对应的日期T和指标数值S<br>
+      2、计算该指标在过去三年日期T对应的值与当年最后一个日期对应的值的比值,即截止到日期T的累计值占全年值的比重<br>
+      3、计算三年的占比平均值,即过去三年平均占比a<br>
+      4、若历史数据不足三年,则至少按两年计算,少于两年不生成年化值<br>
+      5、如果某一年日期T没有值,则通过日期T前后的两个值,用线性插值法【(Y-Y1)/(X-X1)=(Y2-Y1)/(X2-X1)】计算得到日期T的值
+      `,
+      en: `Annualized Value = S / a (where S is the value of the indicator, and a is the annual average proportion)<br>
+      1、Retrieve the latest date T for the indicator and its corresponding value S.<br>
+      2、Calculate the ratio of the cumulative value of the indicator up to date T for the past three years to the value on the last date of each year, which represents the proportion of the cumulative value to that of the whole year.<br>
+      3、Compute the average proportion for the past three years, which is the average annual proportion a.<br>
+      4、If historical data is less than three years, calculate using at least two years' worth; do not generate an annualized value if less than two years of data are available.<br>
+      5、If there is no value for date T in a particular year, use linear interpolation [(Y-Y1)/(X-X1)=(Y2-Y1)/(X2-X1)] based on values before and after date T to determine the value for date T.`
+    },
+    down_conver: {
+      zh: `降频:将高频指标转换为低频指标,需选择转换的频度<br>
+      1、选择转换的频度,日度可以选择降频成周度、旬度、月度、季度、年度;周度可以选择降频成旬度、月度、季度、年度;旬度可以选择降频成月度、季度、年度;月度可降成季度、年度,季度可降成年度<br>
+      2、降频后数据日期,周度的降频数据系列日期取每周五;旬度取每月10日、20日、最后一日;月度取每月最后一天,季度取季度最后一天,年度取年度最后一天<br>
+      3、数据点取值提供两种选择:a、期末值,取区间最后一个日期的数据值。b、取区间平均值。<br>
+      4、最新值的处理:最新的高频数据,正好处于所要降频的低频的两个日期之间时,例如当前1月3号,1月已经有了数据,但1月31号还未到来,则降成月频数据时最新数据日期为1月31号`,
+      en: `Downconversion:To convert high-frequency indicators into low-frequency indicators, the frequency of conversion must be chosen<br>
+      1、To select the conversion frequency, daily data can be downsampled to weekly, ten-day periods, monthly, quarterly, or yearly; weekly data can be downsampled to ten-day periods, monthly, quarterly, or yearly; ten-day period data can be downsampled to monthly, quarterly, or yearly; monthly data can be converted to quarterly or yearly frequencies, and quarterly data can be downsampled to yearly.<br>
+      2、After downsampling the data, for weekly frequency, the date of the data series is set as every Friday; for ten-day periods it's set as the 10th, 20th and the last day of each month; for monthly frequency it's the last day of the month; for quarterly frequency it's the last day of the quarter; and for yearly frequency it's the last day of the year.<br>
+      3、There are two options for selecting data points: a) End-of-period value, which is taken from the last date's data value within that interval. b) The average value over that interval.<br>
+      4、Treatment of most recent values: If the latest high-frequency data happens to fall between two dates used in downsampling to a lower frequency—for example, if today is January 3rd and there is already data for January but January 31st has not yet arrived—then when converting to a monthly frequency, the most recent data date would be set as January 31st.`
+    },
+    diff_index: {
+      zh: `扩散指数:AVERAGE(所选指标环差指数和)<br>
+      1、选择多个指标,设定扩散指标日期并集<br>
+      2、所选指标在日期并集内有缺失值的用前期值填充<br>
+      3、计算日期并集内所选指标的每期环差指数(环差>0,取1,环差=0,取0.5,环差<0,取0),并计算环差指数均值`,
+      en: `Diffusion Index: AVERAGE(Sum of Selected Indicators' Sequential Change Index)<br>
+      1、Select multiple indicators and set the union date for the diffusion indicators.<br>
+      2、If there are missing values for the selected indicators within the union date, fill them with previous values.<br>
+      3、Calculate the sequential change index for each period of the selected indicators within the union date (if sequential change > 0, take 1; if sequential change = 0, take 0.5; if sequential change < 0, take 0), and compute the average of the sequential change index.`
+    },
+    cumulate_and_toyear: {
+      zh: `1、累计值计算方法:<br>
+      日度转周度:日期选周五,计算上周六到本周五的日度值的加总,最新日期为最新值对应的周五。<br>
+      日度转月度:日期选每个月最后一天,计算当月所有日度值的加总,最新日期为最新值对应当月最后一天。<br>
+      日度转季度、年度:方法类似转月度。<br>
+      周度转月度/季度/年度:将周度值转成日度,空值用插值法插值,计算当月/当季/当年所有值的加总,然后除以7。<br>
+      月度转季度/年度: 当季/当年月度值相加。<br>
+      以此类推 特别说明:旬度指标可以转成更低频指标,更高频指标不能转成旬度<br>
+      2、年初至今计算方法:<br>
+      日度数据年初至今:日期同原日度数据。将每年1月1日(含)到日度数据所在日期(含)之间的日度值,进行加总。<br>
+      周度数据年初至今:日期同原周度数据。将周度值转成日度频率,空值用插值法插值,然后算法同日度年度至今,再除以7<br>
+      月度/季度数据年初至今:日期同原月度/季度数据,将每年1月1日(含)到月度数据所在日期(含)之间的月度/季度值,进行加总<br>
+      以此类推`,
+      en: `1、Cumulative Value Calculation Method:<br>
+      Daily to Weekly Conversion: Select Friday as the date, calculate the sum of daily values from the previous Saturday to this Friday, with the latest date being the Friday corresponding to the latest value.<br>
+      Daily to Monthly Conversion: Select the last day of each month as the date, calculate the sum of all daily values for that month, with the latest date being the last day of the month corresponding to the latest value.<br>
+      Daily to Quarterly and Annual Conversion: The method is similar to monthly conversion.<br>
+      Weekly to Monthly/Quarterly/Annual Conversion: Convert weekly values into daily values, interpolate missing values using interpolation methods, calculate the sum of all values for that month/quarter/year, and then divide by 7.<br>
+      Monthly to Quarterly/Annual Conversion: Sum up monthly values within a quarter/year.<br>
+      And so on. Special note: Ten-day period indicators can be converted into lower frequency indicators; higher frequency indicators cannot be converted into ten-day periods.<br>
+      2、Calculation Method for Year-to-Date Data:<br>
+      Daily data year-to-date: The date is the same as the original daily data. Sum up the daily values from January 1st (inclusive) to the date of the daily data (inclusive) for each year.<br>
+      Weekly data year-to-date: The date is the same as the original weekly data. Convert weekly values to daily frequency, use interpolation to fill in missing values, and then apply the same algorithm as for daily year-to-date. Finally, divide by 7.<br>
+      Monthly/Quarterly data year-to-date: The date is the same as the original monthly/quarterly data. Sum up the monthly/quarterly values from January 1st (inclusive) to the date of the monthly/quarterly data (inclusive) for each year.<br>
+      And so forth for other frequencies.`
+    },
+    cumulate_val: {
+      zh: `累计值计算方法:<br>
+      日度转周度:日期选周五,计算上周六到本周五的日度值的加总,最新日期为最新值对应的周五。<br>
+      日度转月度:日期选每个月最后一天,计算当月所有日度值的加总,最新日期为最新值对应当月最后一天。<br>
+      日度转季度、年度:方法类似转月度。<br>
+      周度转月度/季度/年度:将周度值转成日度,空值用插值法插值,计算当月/当季/当年所有值的加总,然后除以7。<br>
+      月度转季度/年度: 当季/当年月度值相加。<br>
+      以此类推 特别说明:旬度指标可以转成更低频指标,更高频指标不能转成旬度<br>`,
+      en: `Cumulative Value Calculation Method:<br>
+      Daily to Weekly Conversion: Select Friday as the date, calculate the sum of daily values from the previous Saturday to this Friday, with the latest date being the Friday corresponding to the latest value.<br>
+      Daily to Monthly Conversion: Select the last day of each month as the date, calculate the sum of all daily values for that month, with the latest date being the last day of the month corresponding to the latest value.<br>
+      Daily to Quarterly and Annual Conversion: The method is similar to monthly conversion.<br>
+      Weekly to Monthly/Quarterly/Annual Conversion: Convert weekly values into daily values, interpolate missing values using interpolation methods, calculate the sum of all values for that month/quarter/year, and then divide by 7.<br>
+      Monthly to Quarterly/Annual Conversion: Sum up monthly values within a quarter/year.<br>
+      And so on. Special note: Ten-day period indicators can be converted into lower frequency indicators; higher frequency indicators cannot be converted into ten-day periods.<br>`
+    },
+    cumulate_to_year: {
+      zh: `年初至今计算方法:<br>
+      日度数据年初至今:日期同原日度数据。将每年1月1日(含)到日度数据所在日期(含)之间的日度值,进行加总。<br>
+      周度数据年初至今:日期同原周度数据。将周度值转成日度频率,空值用插值法插值,然后算法同日度年度至今,再除以7<br>
+      月度/季度数据年初至今:日期同原月度/季度数据,将每年1月1日(含)到月度数据所在日期(含)之间的月度/季度值,进行加总<br>
+      以此类推`,
+      en: `Calculation Method for Year-to-Date Data:<br>
+      Daily data year-to-date: The date is the same as the original daily data. Sum up the daily values from January 1st (inclusive) to the date of the daily data (inclusive) for each year.<br>
+      Weekly data year-to-date: The date is the same as the original weekly data. Convert weekly values to daily frequency, use interpolation to fill in missing values, and then apply the same algorithm as for daily year-to-date. Finally, divide by 7.<br>
+      Monthly/Quarterly data year-to-date: The date is the same as the original monthly/quarterly data. Sum up the monthly/quarterly values from January 1st (inclusive) to the date of the monthly/quarterly data (inclusive) for each year.<br>
+      And so forth for other frequencies.`
+    },
+    ex_smooth: {
+      zh: `指数修匀计算公式:<br>
+      1、设定指数修匀值序列的初始值=原来时间序列的初始值 <br>
+      2、选择平滑系数alpha值:在0-1之间,开区间 <br>
+      3、本期指数修匀值=alpha*本期实际值+(1-alpha)*上期指数修匀值`,
+      en: `Exponential Smoothing Calculation Formula:<br>
+      1、Set the initial value of the exponential smoothing series to be equal to the initial value of the original time series.<br>
+      2、Select a smoothing constant alpha value: between 0 and 1, exclusive.<br>
+      3、Current exponential smoothing value = alpha * current actual value + (1 - alpha) * previous exponential smoothing value.`
+    },
+    day_mean: {
+      zh: `日均值计算公式:<br>
+      1、年度值转日均值=年度值/对应年份天数 <br>
+      2、半年度值转日均值=半年度值/对应半年度天数 <br>
+      3、季度值转日均值=季度值/对应季度天数 <br>
+      4、月度值转日均值=月度值/对应月度天数 <br>
+      5、旬度值转日均值=旬度值/对应旬度天数 <br>
+      6、周度值转日均值=周度值/7`,
+      en: `Daily Average Calculation Formula:<br>
+      1、Annual value to daily average = Annual value / Number of days in the corresponding year<br>
+      2、Semi-annual value to daily average = Semi-annual value / Number of days in the corresponding half-year<br>
+      3、Quarterly value to daily average = Quarterly value / Number of days in the corresponding quarter<br>
+      4、Monthly value to daily average = Monthly value / Number of days in the corresponding month<br>
+      5、Decadal (ten-day period) value to daily average = Decadal value / Number of days in the corresponding ten-day period<br>
+      6、Weekly value to daily average = Weekly value / 7`
+    },
+    adjust_data: {
+      zh: `数据调整:<br>1、将所选指标的历史数据经过调整后保存,该指标更新时将在调整数据的基础上更新最新数据;<br>
+      2、支持对所选指标添加未来的数据,指标更新到未来相同的日期时,进行数据更正;<br>
+      3、选中表格,使用“Ctrl+F”可调用快速查找功能,支持快速定位到表格中的数据;<br>
+      注:系统只取A、B列数据`,
+      en: `Data adjustment:<br>1、Adjust the historical data of the selected indicator and saved, this indicator will be updated based on the adjusted data.<br>
+      2、Support adding future data to the selected indicator, and data correction when the indicator is updated to the same date in the future<br>
+      3、Select the table, use "Ctrl + F" to call the fast search function, support quickly locate the data in the table.<br>
+      Note: The system only takes data from columns A and B.`
+    }
+  }
 }

+ 97 - 0
src/lang/modules/EtaChart/commonLang.js

@@ -3,6 +3,42 @@
 */
 
 export default {
+  time_interval: {
+    zh:'时间段',
+    en: 'Time Period'
+  },
+  time_all: {
+    zh:'全部',
+    en: 'All'
+  },
+  since_onefive: {
+    zh:'15年至今',
+    en: 'Since 2015'
+  },
+  since_twozero: {
+    zh:'20年至今',
+    en: 'Since 2020'
+  },
+  since_twoone: {
+    zh:'21年至今',
+    en: 'Since 2021'
+  },
+  since_twotwo: {
+    zh:'22年至今',
+    en:'Since 2022'
+  },
+  choose_time: {
+    zh:'请选择时间段',
+    en:'Please select time period'
+  },
+  calendar_gre: {
+    zh: '公历',
+    en: 'Gregorian Calendar'
+  },
+  calendar_lunar: {
+    zh: '农历',
+    en: 'Lunar Calendar'
+  },
   chart_share_btn:{
     zh:'分享',
     en:'Share'
@@ -39,4 +75,65 @@ export default {
     zh:'删除',
     en:'Delete'
   },
+  search_chart_placeholder:{
+    zh:'请输入图表名称',
+    en:'Please enter a chart name'
+  },
+  classify_name_label:{
+    zh:'分类名称',
+    en:'Classification name'
+  },
+  chart_count_start:{
+    zh:'共',
+    en:'A total of'
+  },
+  chart_count_end:{
+    zh:'张图表',
+    en:'charts are temporarily uncharted'
+  },
+  select_my_chart_classify:{
+    zh:'选择我的分类',
+    en:'Select My Category Add New category'
+  },
+
+  //操作提示文案
+  OptMsg:{
+    del_fail_tag:{
+      zh:'删除失败',
+      en:'Deletion failure'
+    },
+    classify_del_fail:{
+      zh:'该分类下关联表图表不可删除',
+      en:'Associated charts in this category cannot be deleted'
+    },
+    classify_del_confirm:{
+      zh:'确定删除当前分类吗?',
+      en:'Are you sure to delete the current category?'
+    },
+    chart_del_confirm:{
+      zh:'删除后该图表将不能再引用,确认删除吗?',
+      en:'After deletion, this chart will no longer be referenced. Are you sure to delete it?'
+    },
+    graph_name:{
+      zh:'曲线图',
+      en:'graph'
+    },
+
+
+  },
+
+  ChartType:{
+    graph_name:{
+      zh:'曲线图',
+      en:'graph'
+    },
+    correlation_name:{
+      zh:'相关性',
+      en:'correlation'
+    },
+    rolling_correlation_name:{
+      zh:'滚动相关性',
+      en:'Rolling correlation'
+    }
+  }
 }

+ 56 - 0
src/lang/modules/StatisticAnalysis/ChartRelevance.js

@@ -0,0 +1,56 @@
+/**
+ * 统计分析-相关性分析
+ */
+
+/* 英文 */
+export const ChartRelevanceEn = {
+    chart_add_btn:'Add chart',
+    catagory:'Catagory',
+    only_see_mine:'Just look at mine',
+    tab_type01:'correlation',
+    tab_type02:'Rolling correlation',
+    add_chart_classify:'Add chart category',
+    edit_chart_classify:'Edit chart category',
+    classify_name_tips:"The category name cannot be empty",
+    opt_tip_btn:"Operation instruction",
+
+    edbTagA:'INDEX A',
+    edbTagB:'INDEX B',
+    time:'time',
+    left_axis:"Left axis",
+    right_axis:"Right axis",
+    to:'to',
+    reverse_sequence:'Reverse sequence',
+    standard_index:'Standard index',
+    leading_indicator:'Leading indicator',
+    lead_tag:'lead',
+};
+  
+/* 中文 */
+export const ChartRelevanceZh = {
+    chart_add_btn:'添加图表',
+    catagory:'目录',
+    only_see_mine:'只看我的',
+    tab_type01:'相关性',
+    tab_type02:'滚动相关性',
+    add_chart_classify:'添加图表分类',
+    edit_chart_classify:'编辑图表分类',
+    classify_name_tips:"分类名称不能为空",
+    opt_tip_btn:"操作说明",
+
+    edbTagA:'指标A',
+    edbTagB:'指标B',
+    time:'时间',
+    left_axis:"左轴",
+    right_axis:"右轴",
+    to:'至',
+    reverse_sequence:'逆序',
+    standard_index:'标准指标',
+    leading_indicator:'领先指标',
+    lead_tag:'领先',
+
+};
+  
+/**
+* $t('StatisticAnalysis.ChartRelevance.XXX')
+*/

+ 9 - 0
src/lang/modules/StatisticAnalysis/IndexEn.js

@@ -0,0 +1,9 @@
+
+import { ChartRelevanceEn } from "./ChartRelevance";
+
+export default {
+  // 统计分析
+  StatisticAnalysis: {
+    ChartRelevance:ChartRelevanceEn
+  },
+};

+ 8 - 0
src/lang/modules/StatisticAnalysis/IndexZh.js

@@ -0,0 +1,8 @@
+import { ChartRelevanceZh } from "./ChartRelevance";
+
+export default {
+    // 统计分析
+    StatisticAnalysis: {
+      ChartRelevance:ChartRelevanceZh
+    },
+  };

+ 81 - 0
src/lang/modules/systemManage/ChartSet.js

@@ -0,0 +1,81 @@
+/**
+ * 系统设置-图表配置
+ */
+
+/* 英文 */
+export const ChartSetEn = {
+    label01:'Chart Types',
+    label02:'ETA Chart Library Default Theme',
+    add_btn:'Add Custom Theme',
+    edit_btn:'Edit Custom Theme',
+    theme_name:'Theme Name',
+    theme_name_placeholder:'Please enter theme name',
+    alert_msg:'After deletion, all charts using this theme will adopt the ETA theme. Are you sure you want to proceed with the deletion?',
+
+    opt_label01:'Line Setting',
+    opt_label02:'Scatter Setting',
+    opt_label03:'Legend Setting',
+    opt_label04:'Title Setting',
+    opt_label05:'Annotation Text Settings (Source & Identification)',
+    opt_label06:'Horizontal Axis Setting',
+    opt_label07:'Vertical Axis Setting',
+    opt_label08:'Plot Area Setting',
+    opt_label09:'Bar Setting',
+    opt_label10:'Lines, Bar Setting',
+
+    config_opt01:'Color',
+    config_opt02:'Sequence',
+    config_opt03:'Line Style',
+    config_opt04:'Thickness',
+    config_opt05:'Smooth Line',
+    config_opt06:'Size',
+    config_opt07:'Position',
+    config_opt08:'Font Size',
+    config_opt09:'Alignment Method',
+    config_opt10:'Background Color',
+
+    unit01:'st Line',
+    unit02:'st Bar',
+    unit03:'st Series',
+};
+  
+/* 中文 */
+export const ChartSetZh = {
+    label01:'图表类型',
+    label02:'ETA图库默认主题',
+    add_btn:'添加自定义主题',
+    edit_btn:'编辑自定义主题',
+    theme_name:'主题名称',
+    theme_name_placeholder:'请输入主题名称',
+    alert_msg:'删除后,所有采用该主题的图表,将采用ETA主题,是否确定删除?',
+
+    opt_label01:'线条设置',
+    opt_label02:'散点设置',
+    opt_label03:'图例设置',
+    opt_label04:'标题设置',
+    opt_label05:'标记文字设置(来源,标识)',
+    opt_label06:'横轴设置',
+    opt_label07:'纵轴设置',
+    opt_label08:'绘图区设置',
+    opt_label09:'柱形设置',
+    opt_label10:'线条、柱形设置',
+
+    config_opt01:'颜色',
+    config_opt02:'顺序',
+    config_opt03:'线型',
+    config_opt04:'粗细',
+    config_opt05:'平滑线',
+    config_opt06:'大小',
+    config_opt07:'位置',
+    config_opt08:'字号',
+    config_opt09:'对齐方式',
+    config_opt10:'背景色',
+
+    unit01:'条',
+    unit02:'根',
+    unit03:'系列',
+};
+  
+/**
+* $t('SystemManage.ChartSet.XXX')
+*/

+ 78 - 0
src/lang/modules/systemManage/ReportApprove.js

@@ -0,0 +1,78 @@
+/**
+ * 系统设置-审批流配置
+ */
+
+/* 英文 */
+export const ReportApproveEn = {
+    add_btn:"Add approval workflow",
+    placeholder01:'Please select an associated report',
+    placeholder02:'Please enter the approval workflow name',
+    tips01:'The system has not yet opened the approval process. Please open the approval process before proceeding with the operation!',
+
+    table_col01:'Approval Workflow Name',
+    table_col02:'Associated Report',
+    table_col03:'Creation Time',
+    config_text:'Process Configuration',
+    add_approve_user_btn:'Add approver',
+    initiator:'Initiator',
+    everyone:'Everyone',
+    is_end:'Process End',
+
+    reviewer:'Reviewer',
+    placeholder03:'Please select an approver',
+    approver_set:'Approver Setting',
+    select_appriver:'Select approver',
+    designate_personnel:'Designate Personnel',
+    select_user:'Select Personnel',
+    mutl_person:'During Multi-Person Approval',
+    approval_type01:'Sequential Approval ',
+    approval_type02:'Consensus (Need agreement from all approvers)',
+    approval_type03:'Or Sign (Approval or rejection by any one approver is sufficient)',
+    des01:'Multiple approvers review and approve in sequence; The node passes only when all approvers agree; Approve in order of selection',
+    des02:'The node passes only when all approvers agree; There is no sequence in approval.',
+    des03:'If any approver agrees, the node wil pass; There is no sequence in approval.',
+    warning_msg01:'Please select at least one person',
+    search_btn:'Search',
+    has_selected:'has been selected',
+    clear_btn:'Clear'
+
+};
+  
+/* 中文 */
+export const ReportApproveZh = {
+    add_btn:"添加审批流",
+    placeholder01:'请选择关联报告',
+    placeholder02:'请输入审批流名称',
+    tips01:'系统暂未开通审批流程,请开启审批流程后再进行操作!',
+    table_col01:'审批流名称',
+    table_col02:'关联报告',
+    table_col03:'创建时间',
+    config_text:'流程配置',
+    add_approve_user_btn:'添加审批人',
+    initiator:'发起人',
+    everyone:'所有人',
+    is_end:'流程结束',
+
+    reviewer:'审核人',
+    placeholder03:'请选择审批人',
+    approver_set:'审批人设置',
+    select_appriver:'选择审批人',
+    designate_personnel:'指定人员',
+    select_user:'选择人员',
+    mutl_person:'多人审批时',
+    approval_type01:'依次审批',
+    approval_type02:'会签(须所有审批人同意)',
+    approval_type03:'或签(一名审批人同意或拒绝即可)',
+    des01:'多个审批人依次进行审批;只有当所有审批人同意,该节点才能通过;按选择顺序审批',
+    des02:'所有审批人同意,该节点才能通过;审批无先后顺序',
+    des03:'任意一名审批人同意,该节点即通过;审批无先后顺序',
+    warning_msg01:'请至少选择一人',
+    search_btn:'搜索',
+    has_selected:'项',
+    clear_btn:'清空'
+
+};
+  
+/**
+* $t('SystemManage.ReportApprove.XXX')
+*/

+ 5 - 1
src/lang/modules/systemManage/indexEn.js

@@ -6,6 +6,8 @@ import {EnAuthSetEn} from './EnAuthSet'
 import {BaseConfigEn} from './BaseConfig'
 import {OutLinkConfigEn} from './OutLinkConfig'
 import {DataSourceAccountEn} from './DataSourceAccount'
+import {ChartSetEn} from './ChartSet'
+import {ReportApproveEn} from './ReportApprove'
 
 export default {
   // 系统设置
@@ -17,7 +19,9 @@ export default {
     EnAuthSet:EnAuthSetEn,
     BaseConfig:BaseConfigEn,
     OutLinkConfig:OutLinkConfigEn,
-    DataSourceAccount:DataSourceAccountEn
+    DataSourceAccount:DataSourceAccountEn,
+    ChartSet:ChartSetEn,
+    ReportApprove:ReportApproveEn
   },
 };
 

+ 5 - 1
src/lang/modules/systemManage/indexZh.js

@@ -6,6 +6,8 @@ import {EnAuthSetZh} from './EnAuthSet'
 import {BaseConfigZh} from './BaseConfig'
 import { OutLinkConfigZh } from "./OutLinkConfig";
 import{DataSourceAccountZh} from './DataSourceAccount'
+import { ChartSetZh } from "./ChartSet";
+import { ReportApproveZh } from "./ReportApprove";
 
 export default {
   // 系统设置
@@ -17,6 +19,8 @@ export default {
     EnAuthSet:EnAuthSetZh,
     BaseConfig:BaseConfigZh,
     OutLinkConfig:OutLinkConfigZh,
-    DataSourceAccount:DataSourceAccountZh
+    DataSourceAccount:DataSourceAccountZh,
+    ChartSet:ChartSetZh,
+    ReportApprove:ReportApproveZh
   },
 };

+ 2 - 0
src/main.js

@@ -40,6 +40,8 @@ Vue.use(ElementUI);
 Vue.use(VueRouter);
 Vue.use(Vuex);
 
+Vue.prototype.$i18nt = i18n;
+
 // 设置element语言
 // locale.use(localStorage.getItem('i18n')!='zh' ?  langEN:langZH )
 locale.i18n((key, value) => i18n.t(key, value))

+ 7 - 7
src/views/approve_manage/approveEdit.vue

@@ -3,11 +3,11 @@
     <div class="approve-edit-wrap approve-page-wrap" v-if="isETAApprove">
         <div class="head-box">
             <el-form :inline="true" :model="approveForm" ref="approve-form" :rules="formRules"
-                label-width="100px" label-position="left">
-                <el-form-item label="审批流名称" prop="name">
+                label-width="180px" label-position="left">
+                <el-form-item :label="$t('SystemManage.ReportApprove.table_col01')" prop="name">
                     <el-input v-model="approveForm.name" :disabled="this.$route.query.flowId" placeholder="请输入审批流名称"></el-input>
                 </el-form-item>
-                <el-form-item label="关联报告" prop="classify">
+                <el-form-item :label="$t('SystemManage.ReportApprove.table_col02')" prop="classify">
                     <el-cascader v-model="approveForm.classify"
                         placeholder="请选择关联报告" clearable
                         :disabled="this.$route.query.flowId"
@@ -17,13 +17,13 @@
                 </el-form-item>
             </el-form>
             <div class="form-btn">
-                <el-button type="primary" plain @click="$router.back()">取消</el-button>
+                <el-button type="primary" plain @click="$router.back()">{{$t('Dialog.cancel_btn')}}</el-button>
                 <el-button v-permission="permissionBtn.approveFlowPermission.reportApprove_save"
-                    type="primary" @click="checkFlow">保存</el-button>
+                    type="primary" @click="checkFlow">{{$t('Dialog.confirm_save_btn')}}</el-button>
             </div>
         </div>
         <div class="form-item" style="color:#606266;width:100px;">
-            <span style="color:#F56C6C;margin-right: 4px;">*</span>流程配置
+            <span style="color:#F56C6C;margin-right: 4px;">*</span>{{$t('SystemManage.ReportApprove.config_text')}}
         </div>
         <!-- 审批流画布 -->
         <div class="flow-editor-wrap">
@@ -34,7 +34,7 @@
         </div>
     </div>
     <div class="approve-page-wrap" v-else>
-        <tableNoData :text="pageLoading?'':'系统暂未开通审批流程,请开启审批流程后再进行操作!'"></tableNoData>
+        <tableNoData :text="pageLoading?'':$t('SystemManage.ReportApprove.tips01')"></tableNoData>
     </div>
 </template>
 

+ 35 - 20
src/views/approve_manage/approveSetting.vue

@@ -3,15 +3,15 @@
     <div class="approve-setting-wrap approve-page-wrap" v-if="isETAApprove">
         <div class="head-box">
             <el-button v-permission="permissionBtn.approveFlowPermission.reportApprove_add"
-                type="primary" @click="$router.push('/approveEdit')">添加审批流</el-button>
+                type="primary" @click="$router.push('/approveEdit')">{{$t('SystemManage.ReportApprove.add_btn')}}</el-button>
             <el-cascader v-model="classify"
-                placeholder="请选择关联报告" clearable
+                :placeholder="$t('SystemManage.ReportApprove.placeholder01')" clearable
                 :options="classifyTree"
                 :props="{value:'ClassifyId',label:'ClassifyName',children:'Children'}"
                 @change="handleSearchChange"
                 style="margin-right: auto;margin-left: 15px;"></el-cascader>
             <el-input v-model="Keyword" @input="handleCurrentChange(1)"
-                placeholder="请输入审批流名称" prefix-icon="el-icon-search" clearable style="width:260px;"></el-input>
+                :placeholder="$t('SystemManage.ReportApprove.placeholder02')" prefix-icon="el-icon-search" clearable style="width:260px;"></el-input>
         </div>
         <div class="list-box">
             <el-table :data="tableData" @sort-change="sortChange" border>
@@ -23,12 +23,12 @@
                     :sortable="item.sortable"
                     align="center"
                 ></el-table-column>
-                <el-table-column label="操作" align="center">
+                <el-table-column :label="$t('Table.column_operations')" align="center">
                     <template slot-scope="{row}">
                         <el-button v-permission="permissionBtn.approveFlowPermission.reportApprove_edit"
-                            type="text" style="padding:0;" @click="handleEditFlow(row)">编辑</el-button>
+                            type="text" style="padding:0;" @click="handleEditFlow(row)">{{$t('Table.edit_btn')}}</el-button>
                         <el-button v-permission="permissionBtn.approveFlowPermission.reportApprove_remove"
-                            type="text" style="padding:0;color:red;" @click="handleDeleteFlow(row)">删除</el-button>
+                            type="text" style="padding:0;color:red;" @click="handleDeleteFlow(row)">{{$t('Table.delete_btn')}}</el-button>
                     </template>
                     
                 </el-table-column>
@@ -47,7 +47,7 @@
         </div>
     </div>
     <div class="approve-page-wrap" v-else>
-        <tableNoData :text="pageLoading?'':'系统暂未开通审批流程,请开启审批流程后再进行操作!'"></tableNoData>
+        <tableNoData :text="pageLoading?'':$t('SystemManage.ReportApprove.tips01')"></tableNoData>
     </div>
 </template>
 
@@ -57,6 +57,21 @@ import approveMixins from './mixins/approveMixins';
 import reportApproveConfig from "@/mixins/reportApproveConfig.js"
 export default {
     mixins:[approveMixins,reportApproveConfig],
+    computed:{
+        tableColumns(){
+            return [{
+                label:this.$t('SystemManage.ReportApprove.table_col01'),
+                key:'FlowName'
+            },{
+                label:this.$t('SystemManage.ReportApprove.table_col02'),
+                key:'ReportClassify'
+            },{
+                label:this.$t('SystemManage.ReportApprove.table_col03'),
+                key:'CreateTime',
+                sortable:'custom'
+            }]
+        }
+    },
     data() {
         return {
             /* 列表筛选项 */
@@ -68,17 +83,17 @@ export default {
             classify:'',
 
             tableData:[],
-            tableColumns:[{
-                label:'审批流名称',
-                key:'FlowName'
-            },{
-                label:'关联报告',
-                key:'ReportClassify'
-            },{
-                label:'创建时间',
-                key:'CreateTime',
-                sortable:'custom'
-            }],
+            // tableColumns:[{
+            //     label:'审批流名称',
+            //     key:'FlowName'
+            // },{
+            //     label:'关联报告',
+            //     key:'ReportClassify'
+            // },{
+            //     label:'创建时间',
+            //     key:'CreateTime',
+            //     sortable:'custom'
+            // }],
             page:1,
             pageSize:10,
             total:0,
@@ -128,14 +143,14 @@ export default {
             })
         },
         handleDeleteFlow(item){
-            this.$confirm("删除后不可恢复,确认删除吗?","提示",{
+            this.$confirm(this.$t('MsgPrompt.delete_info_msg'),this.$t('Confirm.prompt'),{
                 type:"warning"
             }).then(()=>{
                 approveInterence.deleteApproveFlow({
                     ReportApproveFlowId:item.ReportApproveFlowId
                 }).then(res=>{
                     if(res.Ret!==200) return 
-                    this.$message.success("删除成功")
+                    this.$message.success(this.$t('MsgPrompt.delete_msg'))
                     this.handleCurrentChange(1)
                 })
             }).catch(()=>{})

+ 1 - 1
src/views/approve_manage/components/flowNode/addNode.vue

@@ -2,7 +2,7 @@
     <div class="add-node-wrap">
         <div class="add-btn" @click="handleAddApprove">
             <span> <i class="el-icon-circle-plus-outline"></i></span>
-            <span>添加审批人</span>
+            <span>{{$t('SystemManage.ReportApprove.add_approve_user_btn')}}</span>
         </div>
     </div>
 </template>

+ 19 - 19
src/views/approve_manage/components/flowNode/approveNode.vue

@@ -3,7 +3,7 @@
         <div class="node-content">
             <div class="head">
                 <span class="icon"></span>
-                <span class="name">审核人</span>
+                <span class="name">{{$t('SystemManage.ReportApprove.reviewer')}}</span>
                 <span class="icon-btn" @click="removeNode"><i class="el-icon-close"></i></span>
             </div>
             <div class="content" @click="showDrawer">
@@ -14,7 +14,7 @@
                 </ul>
                 <span v-else style="color:#0052D9;display: flex;align-items: center;">
                     <img src="~@/assets/img/approve_m/select.png">
-                    请选择审批人
+                    {{$t('SystemManage.ReportApprove.placeholder03')}}
                 </span>
             </div>
         </div>
@@ -27,17 +27,17 @@
             >
             <div class="approve-drawer-wrap">
                 <div class="header">
-                    <p>审批人设置</p>
+                    <p>{{$t('SystemManage.ReportApprove.approver_set')}}</p>
                     <span class="close-icon" @click="drawerShow=false" style="cursor: pointer;"><i class="el-icon-close"></i></span>
                 </div>
                 <div class="drawer-content">
                     <div class="block">
-                        <p>选择审批人</p>
+                        <p>{{$t('SystemManage.ReportApprove.select_appriver')}}</p>
                         <div class="choose-box">
-                            <el-radio v-model="block1" :label="1">指定人员</el-radio>
+                            <el-radio v-model="block1" :label="1">{{$t('SystemManage.ReportApprove.designate_personnel')}}</el-radio>
                             <el-button @click="chooseDialogShow=true" type="primary">
                                 <i class="el-icon-circle-plus-outline" style="margin-right: 5px;"></i>
-                                选择人员
+                                {{$t('SystemManage.ReportApprove.select_user')}}
                             </el-button>
                         </div>
                         <draggable 
@@ -55,27 +55,27 @@
                     </div>
                     <div class="line"></div>
                     <div class="block" style="margin-top:30px;">
-                        <p>多人审批时</p>
+                        <p>{{$t('SystemManage.ReportApprove.mutl_person')}}</p>
                         <el-radio-group v-model="approveType">
                             <el-radio :label="1">
-                                依次审批
-                                <el-tooltip effect="dark" placement="top" content="多个审批人依次进行审批;只有当所有审批人同意,该节点才能通过;按选择顺序审批" >
+                                {{$t('SystemManage.ReportApprove.approval_type01')}}
+                                <el-tooltip effect="dark" placement="top" :content="$t('SystemManage.ReportApprove.des01')" >
                                     <span class="hint-text">
                                         <i class="el-icon-info"></i>
                                     </span>
                                 </el-tooltip>
                             </el-radio>
                             <el-radio :label="2">
-                                会签(须所有审批人同意)
-                                <el-tooltip effect="dark" placement="top" content="所有审批人同意,该节点才能通过;审批无先后顺序" >
+                                {{$t('SystemManage.ReportApprove.approval_type02')}}
+                                <el-tooltip effect="dark" placement="top" :content="$t('SystemManage.ReportApprove.des02')" >
                                     <span class="hint-text">
                                         <i class="el-icon-info"></i>
                                     </span>
                                 </el-tooltip>
                             </el-radio>
                             <el-radio :label="3">
-                                或签(一名审批人同意或拒绝即可)
-                                <el-tooltip effect="dark" placement="top" content="任意一名审批人同意,该节点即通过;审批无先后顺序" >
+                                {{$t('SystemManage.ReportApprove.approval_type03')}}
+                                <el-tooltip effect="dark" placement="top" :content="$t('SystemManage.ReportApprove.des03')" >
                                     <span class="hint-text">
                                         <i class="el-icon-info"></i>
                                     </span>
@@ -85,14 +85,14 @@
                     </div>
                 </div>
                 <div class="drawer-btn">
-                    <el-button type="primary" plain @click="drawerShow=false">取消</el-button>
-                    <el-button type="primary" @click="editApproveNode">确认</el-button>
+                    <el-button type="primary" plain @click="drawerShow=false">{{$t('Dialog.cancel_btn')}}</el-button>
+                    <el-button type="primary" @click="editApproveNode">{{$t('Dialog.confirm_btn')}}</el-button>
                 </div>
             </div>
         </el-drawer>
         <!-- 选择人员弹窗 -->
         <el-dialog 
-            title="选择人员"
+            :title="$t('SystemManage.ReportApprove.select_user')"
             width="600px"
             :visible.sync="chooseDialogShow"
             :modal-append-to-body="false"
@@ -107,8 +107,8 @@
                 />
             </div>
             <div class="dialog-btn">
-                <el-button type="primary" plain @click="chooseDialogShow=false">取消</el-button>
-                <el-button type="primary" @click="getChoosedList">确认</el-button>
+                <el-button type="primary" plain @click="chooseDialogShow=false">{{$t('Dialog.cancel_btn')}}</el-button>
+                <el-button type="primary" @click="getChoosedList">{{$t('Dialog.confirm_btn')}}</el-button>
             </div>
         </el-dialog>
     </div>
@@ -151,7 +151,7 @@ export default {
         },
         getChoosedList(){
             if(!this.$refs["tree-trans"].choosedList.length){
-                this.$message.warning("请至少选择一人")
+                this.$message.warning(this.$t('SystemManage.ReportApprove.warning_msg01'))
                 return
             }
             this.choosedList = _.cloneDeep(this.$refs["tree-trans"].choosedList)||[]

+ 1 - 1
src/views/approve_manage/components/flowNode/endNode.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="end-node-wrap node-wrap">
-        <div class="end-content">流程结束</div>
+        <div class="end-content">{{$t('SystemManage.ReportApprove.is_end')}}</div>
     </div>
 </template>
 

+ 2 - 2
src/views/approve_manage/components/flowNode/startNode.vue

@@ -3,9 +3,9 @@
         <div class="node-content">
             <div class="head">
                 <span class="icon"></span>
-                <p class="name">发起人</p>
+                <p class="name">{{$t('SystemManage.ReportApprove.initiator')}}</p>
             </div>
-            <div class="content">所有人</div>
+            <div class="content">{{$t('SystemManage.ReportApprove.everyone')}}</div>
         </div>
         <AddNode :node="flowNode" v-on="$listeners"/>
     </div>

+ 3 - 3
src/views/approve_manage/components/treeTransfer.vue

@@ -3,7 +3,7 @@
     <div class="tree-transfer">
         <div class="before-transfer transfer">
             <div class="search">
-                <el-input placeholder="搜索" suffix-icon="el-icon-search" style="width:100%;"
+                <el-input :placeholder="$t('SystemManage.ReportApprove.search_btn')" suffix-icon="el-icon-search" style="width:100%;"
                     v-model="searchText" @input="$refs['trans-tree'].filter(searchText)"></el-input>
             </div>
             <div class="content">
@@ -23,8 +23,8 @@
         </div>
         <div class="after-transfer transfer">
             <div class="head">
-                <span>已选{{choosedList.length}}项</span>
-                <span class="btn-text delete" @click="clearnItem">清空</span>
+                <span>{{$i18n.locale == 'zh' ?'已选':''}}{{choosedList.length}}{{$t('SystemManage.ReportApprove.has_selected')}}</span>
+                <span class="btn-text delete" @click="clearnItem">{{$t('SystemManage.ReportApprove.clear_btn')}}</span>
             </div>
             <draggable 
                 v-model="choosedList"

+ 7 - 3
src/views/chartRelevance_manage/components/explainDialog.vue

@@ -7,7 +7,7 @@
         width="976px"
         v-dialogDrag
         top="8vh"
-        title="操作说明"
+        :title="$t('StatisticAnalysis.ChartRelevance.opt_tip_btn')"
         @close="$emit('close')"
     >
         <div class="dialog-container">
@@ -15,7 +15,7 @@
             </div>
         </div>
         <div class="dialog-btn">
-            <el-button type="primary" @click="$emit('close')">知道了</el-button>
+            <el-button type="primary" @click="$emit('close')">{{$t('MsgPrompt.known')}}</el-button>
         </div>
         
     </el-dialog>
@@ -36,7 +36,11 @@ export default {
     },
     computed:{
         textArray(){
-            return explainText[this.textArrName]
+            if(this.$i18n.locale == 'zh'){
+                return explainText[this.textArrName]
+            }else{
+                return explainText[this.textArrName+'En']
+            }
         }
     },
     data() {

+ 17 - 0
src/views/chartRelevance_manage/components/explainText.js

@@ -16,6 +16,23 @@ export const chartrelevanceTextArr = [
     <p>1、计算窗口:参与计算的时间段长度,从两个指标都有值的日期开始滚动的取计算窗口长度的值进行计算,如配置计算窗口1个月,则2023.7.28的值取2023.6.28~2023.7.28时间段,2023.7.27的值取2023.6.27~2023.7.27时间段;</p>
     <p>2、B领先A:B指标领先A指标的参数,为0时不领先;</p>`
 ]
+export const chartrelevanceTextArrEn=[
+    `<p style='font-weight:bold;'>Instruction for Correlation Calculation Processing Logic:</p>
+    <p>1、 Data Retrieval: Determine the time length of the calculation window, and move backwards from the current time by this duration to obtain a range of dates. Retrieve values for indicator A series and indicator B series within this date range.</p>
+    <p>2、Frequency Adjustment:</p>
+    <p>a. If indicator A is higher frequency, upsample indicator B (use linear equation interpolation to fill in data).</p>
+    <p>b. If indicator B is higher frequency, upsample indicator A (use linear equation interpolation to fill in data).</p>
+    <p>c. If indicator A and B are at the same frequency, no further processing is required.</p>
+    <p>Calculation: For each analysis period, use indicator A as a reference and shift indicator B by corresponding periods. Calculate the correlation for each period using the formula correlation coefficient R = SUM[(Xi-Mx)*(Yi-My)]/[(N-1)(SDx*SDy)].</p>
+    <p style='height:20px;'></p>
+    <p>Note: When shifting indicator B, if there's no value found for a date in the sequence of indicator A, search backward for the closest value within the time range of the calculation window moving back from the current date.</p>`,
+    `<p style='font-weight:bold;'>Correlation Configuration:</p>
+    <p>1. Calculation Window: The historical data time segment involved in the calculation.</p>
+    <p>2. Analysis Period: The number of periods that indicator B leads ahead of A; for instance, if configured with a parameter of 10 months, it indicates that B leads A by -10 months to +10 months, with correlation values calculated separately for each period.</p>`,
+    `<p style='font-weight:bold;'>Rolling Correlation Configuration:</p>
+    <p>1. Calculation Window: The length of time involved in calculations starts from when both indicators have available values and rolls forward taking values within the duration of the calculation window for computation. For example, if configured with a 1-month calculation window, then the value for July 28th, 2023 will be taken from June 28th to July 28th, 2023; while the value for July 27th will be taken from June 27th to July 27th.</p>
+    <p>2. B Leads A: The parameter by which indicator B leads ahead of indicator A; when set to 0, there is no lead.</p>`
+]
 
 //拟合方程曲线
 export const fittingEquationListTextArr = [

+ 23 - 9
src/views/chartRelevance_manage/components/selectTarget.vue

@@ -46,7 +46,7 @@
         :filterable="!search_txt"
         remote
         clearable
-        placeholder="请选择指标名称"
+        :placeholder="$t('Edb.InputHolderAll.select_edb_name')"
         style="flex: 1;margin-left: 15px"
         :remote-method="searchHandle"
         @click.native="inputFocusHandle"
@@ -72,7 +72,7 @@
       :filterable="!search_txt"
       remote
       clearable
-      placeholder="请选择指标名称"
+      :placeholder="$t('Edb.InputHolderAll.select_edb_name')"
       :style="`width: 100%; ${filter?'margin-top: 20px':''}`"
       :remote-method="searchHandle"
       @click.native="inputFocusHandle"
@@ -123,19 +123,33 @@ export default {
         this.targetType=this.defaultType==1?'2':'1' //EdbInfoCategoryType 0普通 1预测
       }
     },
-    data() {
-        return {
-            targetType:'1',//1:ETA指标 2:ETA预测指标
-            etaTypeOpt:[
+    computed:{
+      etaTypeOpt(){
+        return [
                 {
-                    label:'ETA指标',
+                    label:this.$t('Edb.eta_name'),
                     val:'1'
                 },
                 {
-                    label:'ETA预测指标',
+                    label:this.$t('Edb.eta_predictor_name'),
                     val:'2'
                 },
-            ],
+            ]
+      }
+    },
+    data() {
+        return {
+            targetType:'1',//1:ETA指标 2:ETA预测指标
+            // etaTypeOpt:[
+            //     {
+            //         label:'ETA指标',
+            //         val:'1'
+            //     },
+            //     {
+            //         label:'ETA预测指标',
+            //         val:'2'
+            //     },
+            // ],
             search_txt: this.defaultId||'',
             searchOptions: this.defaultOpt||[],
             search_have_more: true,

+ 20 - 20
src/views/chartRelevance_manage/relevance/list.vue

@@ -12,15 +12,15 @@
       <div class="main-left left" id="left" v-show="!isSlideLeft">
         <div class="datasheet_top">
           <el-button v-permission="permissionBtn.statisticPermission.corrAnalysis_addChart"
-            type="primary" @click="goAddChart">添加图表</el-button>
+            type="primary" @click="goAddChart">{{$t('StatisticAnalysis.ChartRelevance.chart_add_btn')}}</el-button>
         </div>
         <div
           style="padding: 0 20px; display: flex; justify-content: space-between"
         >
-          <span>目录</span>
+          <span>{{$t('StatisticAnalysis.ChartRelevance.catagory')}}</span>
           <el-checkbox v-model="isOnlyMe" @change="onlyMeHandler"
             v-permission="permissionBtn.statisticPermission.corrAnalysis_onlyMine"
-            >只看我的</el-checkbox
+            >{{$t('StatisticAnalysis.ChartRelevance.only_see_mine')}}</el-checkbox
           >
         </div>
         <div class="search-cont">
@@ -30,7 +30,7 @@
             :filterable="!search_txt"
             remote
             clearable
-            placeholder="请输入图表名称"
+            :placeholder="$t('Chart.search_chart_placeholder')"
             style="width: 100%; margin-top: 20px"
             :remote-method="searchHandle"
             @click.native="inputFocusHandle"
@@ -48,7 +48,7 @@
         <ul class="left-tab">
           <li
             :class="['tab', { act: classify_tab === index }]"
-            v-for="(tab, index) in ['相关性', '滚动相关性']"
+            v-for="(tab, index) in [$t('StatisticAnalysis.ChartRelevance.tab_type01'), $t('StatisticAnalysis.ChartRelevance.tab_type02')]"
             :key="tab"
             @click="changeTab(index)"
           >
@@ -131,7 +131,7 @@
               alt=""
               style="width: 16px; height: 16px; margin-right: 10px"
             />
-            <span>添加图表分类</span>
+            <span>{{$t('StatisticAnalysis.ChartRelevance.add_chart_classify')}}</span>
           </div>
         </div>
         <span
@@ -175,7 +175,7 @@
                   />
                 </div>
                 <span class="chart-author"
-                  >作者:{{ chartInfo.SysUserRealName }}</span
+                  >{{$t('MsgPrompt.author')}}:{{ chartInfo.SysUserRealName }}</span
                 >
               </div>
 
@@ -242,16 +242,16 @@
                 <span v-else>{{ scope.row[item.key] }}</span>
               </template>
             </el-table-column>
-            <el-table-column label="操作" key="Copy" align="center" width="140">
+            <el-table-column :label="$t('Edb.Detail.e_opera')" key="Copy" align="center" width="140">
               <template slot-scope="scope">
                 <!-- <span @click="delTarget(scope.row)" class="deletesty">删除&nbsp;</span> -->
                 <span v-permission="permissionBtn.statisticPermission.corrAnalysis_copyData"
                     class="editsty" @click="copyCode(scope.row)">
-                  <i class="el-icon-document-copy" />&nbsp;复制数据</span
+                  <i class="el-icon-document-copy" />&nbsp;{{$t('Edb.detail_copydata_btn')}}</span
                 ><br />
                 <span v-permission="permissionBtn.statisticPermission.corrAnalysis_viewData"
                     class="editsty" @click="viewTarget(scope.row)"
-                  >查看数据</span
+                  >{{$t('Edb.detail_lookdata_btn')}}</span
                 >
               </template>
             </el-table-column>
@@ -475,7 +475,7 @@ export default {
 
     /* 添加一级目录 */
     addLevelOneHandle() {
-      this.dialog_title = "添加图表分类";
+      this.dialog_title = this.$t('StatisticAnalysis.ChartRelevance.add_chart_classify')||"添加图表分类";
       this.classifyForm = {
         classify_name: "",
       };
@@ -484,7 +484,7 @@ export default {
 
     /* 编辑节点 */
     editNode(node, { ChartClassifyName, ChartClassifyId }) {
-      this.dialog_title = "编辑图表分类";
+      this.dialog_title = this.$t('StatisticAnalysis.ChartRelevance.edit_chart_classify')||"编辑图表分类";
       /* 编辑目录 */
       this.classifyForm = {
         classify_name: ChartClassifyName,
@@ -502,15 +502,15 @@ export default {
       const { DeleteStatus } = Data;
 
       DeleteStatus === 1
-        ? this.$confirm("该分类下关联表图表不可删除", "删除失败", {
-            confirmButtonText: "知道了",
+        ? this.$confirm(this.$t('Chart.OptMsg.classify_del_fail'), this.$t('Chart.OptMsg.del_fail_tag'), {
+            confirmButtonText: this.$t('MsgPrompt.known'),
             showCancelButton: false,
             type: "error",
           })
         : DeleteStatus === 0
-        ? this.$confirm("确定删除当前分类吗?", "提示", {
-            confirmButtonText: "确定",
-            cancelButtonText: "取消",
+        ? this.$confirm(this.$t('Chart.OptMsg.classify_del_confirm'), this.$t('Confirm.prompt'), {
+            // confirmButtonText: "确定",
+            // cancelButtonText: "取消",
             type: "warning",
           }).then(() => {
             this.delApi(ChartClassifyId, ChartInfoId);
@@ -645,9 +645,9 @@ export default {
     /* 删除图表 */
     delChartHandle() {
       const { ChartClassifyId, ChartInfoId } = this.chartInfo;
-      this.$confirm("删除后该图表将不能再引用,确认删除吗?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
+      this.$confirm(this.$t('Chart.OptMsg.chart_del_confirm'), this.$t('Confirm.prompt'), {
+        // confirmButtonText: "确定",
+        // cancelButtonText: "取消",
         type: "warning",
       })
         .then(() => {

+ 35 - 24
src/views/chartRelevance_manage/relevance/relevanceChartEditor.vue

@@ -9,10 +9,10 @@
     </span>
     <div class="left-cont" v-show="!isSlideLeft" id="left">
       <div class="left-top">
-        <el-button type="primary" plain @click="$router.back()">取消</el-button>
+        <el-button type="primary" plain @click="$router.back()">{{$t('Dialog.cancel_btn')}}</el-button>
         <div style="color:#409EFF;font-size: 16px;cursor: pointer;" @click="showExplain = true">
             <i class="el-icon-document" style="font-size:22px;"></i>
-            操作说明
+            {{$t('StatisticAnalysis.ChartRelevance.opt_tip_btn')}}
         </div>
       </div>
       <div class="left-min">
@@ -23,7 +23,7 @@
           :model="chartInfo"
           :rules="chartRules"
         >
-          <el-form-item class="label-left" label="指标A" prop="EdbInfoIdA">
+          <el-form-item class="label-left" :label="$t('StatisticAnalysis.ChartRelevance.edbTagA')" prop="EdbInfoIdA">
               <selectTarget  
                 :defaultId="chartInfoData.EdbInfoList?chartInfoData.EdbInfoList[0].EdbInfoId:''"
                 :defaultOpt="chartInfoData.EdbInfoList?[chartInfoData.EdbInfoList[0]]:[]"
@@ -31,7 +31,7 @@
                 @select="handleSelectTargetA"
               />
           </el-form-item>
-          <el-form-item class="label-left" label="指标B" prop="EdbInfoIdB">
+          <el-form-item class="label-left" :label="$t('StatisticAnalysis.ChartRelevance.edbTagB')" prop="EdbInfoIdB">
               <selectTarget 
                 :defaultId="chartInfoData.EdbInfoList?chartInfoData.EdbInfoList[1].EdbInfoId:''"
                 :defaultOpt="chartInfoData.EdbInfoList?[chartInfoData.EdbInfoList[1]]:[]" 
@@ -42,9 +42,9 @@
         </el-form>
 
         <div class="section">
-          <div>曲线图</div>
+          <div>{{$t('Chart.ChartType.graph_name')}}</div>
           <div class="section-item">
-            <span style="flex-shrink:0;min-width:50px;">时间:</span>
+            <span style="flex-shrink:0;min-width:50px;">{{$t('StatisticAnalysis.ChartRelevance.time')}}:</span>
             <el-select
                 style="max-width: 120px;flex:1;"
                 v-model="chartInfo.Curve.DateType"
@@ -70,7 +70,7 @@
             />
           </div>
           <div class="section-item">
-            <span style="flex-shrink:0;min-width:50px;">左轴:</span>
+            <span style="flex-shrink:0;min-width:50px;">{{$t('StatisticAnalysis.ChartRelevance.left_axis')}}:</span>
             <el-input
               style="flex:2;margin-left:5px;margin-right:10px"
               :step="1"
@@ -78,7 +78,7 @@
               v-model="chartInfo.Curve.LeftMin"
               @change="val => { chartInfo.Curve.LeftMin=Number(val);changeSplineOption() }"
             />
-            <span></span>
+            <span>{{$t('StatisticAnalysis.ChartRelevance.to')}}</span>
             <el-input
               style="flex:2;margin-left:5px;"
               :step="1"
@@ -88,7 +88,7 @@
             />
           </div>
           <div class="section-item">
-            <span style="flex-shrink:0;min-width:50px;">右轴:</span>
+            <span style="flex-shrink:0;min-width:50px;">{{$t('StatisticAnalysis.ChartRelevance.right_axis')}}:</span>
             <el-input
               style="flex:2;margin-left:5px;margin-right:10px"
               :step="1"
@@ -96,7 +96,7 @@
               v-model="chartInfo.Curve.RightMin"
               @change="val => { chartInfo.Curve.RightMin=Number(val);changeSplineOption() }"
             />
-            <span></span>
+            <span>{{$t('StatisticAnalysis.ChartRelevance.to')}}</span>
             <el-input
               style="flex:2;margin-left:5px;"
               :step="1"
@@ -106,8 +106,8 @@
             />
           </div>
           <div class="section-item">
-            <span style="flex-shrink:0;min-width:50px;">指标B:</span>
-            <el-checkbox v-model="chartInfo.Curve.IsOrder"  @change="getPreviewSplineChart">逆序</el-checkbox>
+            <span style="flex-shrink:0;min-width:50px;">{{$t('StatisticAnalysis.ChartRelevance.edbTagB')}}:</span>
+            <el-checkbox v-model="chartInfo.Curve.IsOrder"  @change="getPreviewSplineChart">{{$t('StatisticAnalysis.ChartRelevance.reverse_sequence')}}</el-checkbox>
           </div>
           <div class="section-item" style="align-items: flex-start;margin-left:50px;">
             <el-radio
@@ -115,15 +115,15 @@
               :label="true"
               style="margin-right:10px;"
               @change="getPreviewSplineChart"
-            >标准指标</el-radio>
+            >{{$t('StatisticAnalysis.ChartRelevance.standard_index')}}</el-radio>
             <div>
               <el-radio
                 v-model="chartInfo.Curve.EdbInfoType"
                 :label="false"
                 @change="getPreviewSplineChart"
-              >领先指标</el-radio>
+              >{{$t('StatisticAnalysis.ChartRelevance.leading_indicator')}}</el-radio>
               <div style="margin-top: 10px;" v-if="chartInfo.Curve.EdbInfoType===false">
-                领先
+                {{$t('StatisticAnalysis.ChartRelevance.lead_tag')}}
                 <el-input
                   style="width: 60px"
                   size="mini"
@@ -151,7 +151,7 @@
         </div>  
 
         <div class="section">
-          <div>相关性
+          <div>{{$t('Chart.ChartType.correlation_name')}}
             <!-- <el-tooltip
               effect="dark"
             >
@@ -211,7 +211,7 @@
 
 
       <div class="section" v-for="(item,index) in chartInfo.RollingCorrelation" :key="index">
-        <div>滚动相关性{{index+1}}
+        <div>{{$t('Chart.ChartType.rolling_correlation_name')}}{{index+1}}
           <!-- <el-tooltip
             effect="dark"
           >
@@ -415,6 +415,17 @@ export default {
     }
     next()
   },
+  computed:{
+    unitOpt(){
+      return [
+          {label:this.$t('Edb.FreAll.year_min'),val:'年'},
+          {label:this.$t('Edb.FreAll.quarter_min'),val:'季'},
+          {label:this.$t('Edb.FreAll.month_min'),val:'月'},
+          {label:this.$t('Edb.FreAll.week_min'),val:'周'},
+          {label:this.$t('Edb.FreAll.day_min'),val:'天'},
+      ]
+    }
+  },
   data() {
     return {
       chart_code: this.$route.query.code || '',
@@ -465,13 +476,13 @@ export default {
           }
         ]
       },
-      unitOpt:[
-          {label:'年',val:'年'},
-          {label:'季',val:'季'},
-          {label:'月',val:'月'},
-          {label:'周',val:'周'},
-          {label:'天',val:'天'},
-      ],
+      // unitOpt:[
+      //     {label:'年',val:'年'},
+      //     {label:'季',val:'季'},
+      //     {label:'月',val:'月'},
+      //     {label:'周',val:'周'},
+      //     {label:'天',val:'天'},
+      // ],
       operationType:'preview',
       chartRules: {
         EdbInfoIdA:[

+ 28 - 30
src/views/dataEntry_manage/adjustdata/adjustData.vue

@@ -4,13 +4,13 @@
       <div class="left-handle">
         <ul class="min-top" v-if="!edb_id">
           <li>
-            <label style="margin-right:5px;">选择指标:</label>
+            <label style="margin-right:5px;">{{$t('AdjustDataPage.choose_edb')}}:</label>
             <el-select
               v-model="select_target"
               v-loadMore="searchLoad"
               :filterable="!select_target"
               clearable
-              placeholder="请输入指标名称"
+              :placeholder="$t('Edb.InputHolderAll.input_name')"
               style="width: 200px"
               remote
               :remote-method="getTarget"
@@ -30,25 +30,25 @@
             <i class="el-icon-tickets" style="color:#409EFF;font-size:18px" @click="toHistoryPage(select_target,$route.matched);lookEdbId=select_target" v-if="select_target"/>
           </li>
           <li v-show="old_edb_info.id">
-            <label style="margin-right:5px;"> 查询结果:</label>
-            <span style="margin-right: 20px">指标ID:{{old_edb_info.id}}</span>
-            <span>指标名称:{{old_edb_info.name}}</span>
+            <label style="margin-right:5px;"> {{$t('AdjustDataPage.search_res')}}:</label>
+            <span style="margin-right: 20px">{{$t('Edb.Detail.e_id')}}:{{old_edb_info.id}}</span>
+            <span>{{$t('Edb.Detail.e_name')}}:{{old_edb_info.name}}</span>
           </li>
         </ul>
         <div v-if="edb_id" style="margin-bottom:20px">
-          <span style="display:inline-block;margin-right:30px">原指标ID:{{EDBInfoOfCalculateData.FromEdbCode}}</span>
-          <span>原指标名称:{{EDBInfoOfCalculateData.FromEdbName}}</span>
+          <span style="display:inline-block;margin-right:30px">{{$t('AdjustDataPage.or_edbid')}}:{{EDBInfoOfCalculateData.FromEdbCode}}</span>
+          <span>{{$t('AdjustDataPage.or_edbname')}}:{{EDBInfoOfCalculateData.FromEdbName}}</span>
         </div>
       </div>
       <div class="right-handle">
         <div>
-          <el-button type="primary" size="medium" @click="saveSheetHandle">保存</el-button>
-          <el-button type="primary" size="medium" plain @click="$router.go(-1)">取消</el-button>
+          <el-button type="primary" size="medium" @click="saveSheetHandle"><!-- 保存 -->{{$t('Dialog.confirm_save_btn')}}</el-button>
+          <el-button type="primary" size="medium" plain @click="$router.go(-1)"><!-- 取消 -->{{$t('Dialog.back_btn')}}</el-button>
         </div>
         <el-tooltip>
           <div slot="content" v-html="tips"></div>
           <div class="tips-cont">
-            <span>使用说明</span>
+            <span><!-- 使用说明 -->{{$t('AdjustDataPage.usetip_msg')}}</span>
             <i class="el-icon-question" style="color: #999;"></i>
           </div>
         </el-tooltip>
@@ -57,24 +57,24 @@
           ref="form"
           label-position="right"
           inline
-          label-width="80px"
+          label-width="120px"
           :model="formData"
           :rules="formRules"
         >
-          <el-form-item label="指标名称" prop="targetName">
+          <el-form-item :label="$t('Edb.Detail.e_name')" prop="targetName">
             <el-input
               v-model="formData.targetName"
               style="width: 150px"
-              placeholder="请输入指标名称"
+              :placeholder="$t('Edb.InputHolderAll.input_name')"
             />
           </el-form-item>
-          <el-form-item label="单位" prop="unit">
+          <el-form-item :label="$t('Edb.Detail.e_unit')" prop="unit">
             <selectUnit 
 							v-model="formData.unit" 
 							style="width: 120px"
 						/>
           </el-form-item>
-          <el-form-item label="指标目录" prop="menu">
+          <el-form-item :label="$t('Edb.Detail.e_menu')" prop="menu">
             <el-cascader
               v-model="formData.menu"
               :options="classifyOptions"
@@ -86,13 +86,13 @@
                 checkStrictly: true
               }"
               clearable
-              placeholder="请选择指标目录"
+              :placeholder="$t('Edb.InputHolderAll.input_menu')"
             />
           </el-form-item>
-          <el-form-item label="频度" prop="frequency">
+          <el-form-item :label="$t('Edb.Detail.e_fre')" prop="frequency">
             <el-select
               v-model="formData.frequency"
-              placeholder="请选择频度"
+              :placeholder="$t('Edb.InputHolderAll.input_fre')"
               style="width: 120px"
               clearable
             >
@@ -129,7 +129,7 @@
               </template>
             </el-table-column>
             <div slot="empty" style="padding: 50px 0;">
-              <tableNoData text="暂无数据" size="mini"/>
+              <tableNoData :text="$t('Table.prompt_slogan')" size="mini"/>
             </div>
         </el-table>
       </div>
@@ -146,7 +146,7 @@
 
 <script>
 import {dataBaseInterface} from '@/api/modules/chartApi'
-import { formRules } from '../databaseComponents/util';
+import { formRules,frequencyArr } from '../databaseComponents/util';
 import { unitArr } from '@/utils/defaultOptions';
 import { mapState } from 'vuex';
 export default {
@@ -162,7 +162,7 @@ export default {
       },
       formRules,
       unitArr,
-      frequencyArr: ['日度', '周度','旬度', '月度', '季度', '年度'],
+      frequencyArr,
       classifyOptions: [],
 
       searchOptions: [],
@@ -180,14 +180,11 @@ export default {
       start_index: 0,
       end_index: 49,
       tableColums: [
-        { label: '日期',key:'DataTime' },
-        { label: '值',key:'Value' }
+        { label: this.$t('Edb.Detail.e_date'),key:'DataTime' },
+        { label: this.$t('Edb.Detail.e_value'),key:'Value' }
       ],
 
-      tips: `数据调整:<br>1、将所选指标的历史数据经过调整后保存,该指标更新时将在调整数据的基础上更新最新数据;<br>
-      2、支持对所选指标添加未来的数据,指标更新到未来相同的日期时,进行数据更正;<br>
-      3、选中表格,使用“Ctrl+F”可调用快速查找功能,支持快速定位到表格中的数据;<br>
-      注:系统只取A、B列数据`,
+      tips: this.$t('AdjustDataPage.usetip'),
 
       excelData: [
         {
@@ -220,7 +217,7 @@ export default {
     excelOptions() {
       return {
         container: 'excel-container',
-        lang: 'zh', // 设定表格语言
+        lang: this.$i18nt.locale, // 设定表格语言
         showinfobar: false,//顶部info
         showsheetbar:false,//底部sheet页 暂禁止添加多个表格
         showtoolbarConfig:{
@@ -482,7 +479,7 @@ export default {
       let data = luckysheet.getAllSheets()[0]
       await this.$refs.form.validate();
       // console.log(data.celldata)
-      if(data.celldata.length < 3) return this.$message.warning('请输入表格内容');
+      if(data.celldata.length < 3) return this.$message.warning(this.$t('AdjustDataPage.input_content_msg'));
 
       const { targetName,menu,frequency,unit} = this.formData;
 
@@ -513,7 +510,8 @@ export default {
       })
 
       if(Ret !== 200) return
-      this.$message.success('保存成功')
+      // this.$message.success('保存成功')
+      this.$message.success(this.$t('MsgPrompt.saved_msg'))
 
       const { UniqueCode,EdbInfoId } = Data;
 

+ 0 - 1
src/views/dataEntry_manage/codecount/compoments/codeMirror.vue

@@ -2,7 +2,6 @@
 	<codemirror
 		v-model="codeContent"
 		:options="codeOptions"
-		placeholder="请输入python代码"
 	/>
 </template>
 

+ 2 - 2
src/views/dataEntry_manage/codecount/compoments/dataTable.vue

@@ -23,8 +23,8 @@ export default {
     columns: {
       type: Array,
       default: [
-        { title: '日期' },
-        { title: '值'  },
+        { title: this.$t('CodeCountPage.res_show_col1') },
+        { title: this.$t('CodeCountPage.res_show_col2')  },
       ],
     },
     data: {

+ 38 - 33
src/views/dataEntry_manage/codecount/index.vue

@@ -1,10 +1,10 @@
 <template>
 	<el-card class="codecount-container">
 		<div slot="header" class="header">
-			<span>代码运算</span>
+			<span><!-- 代码运算 -->{{$t('EtaBasePage.algorithm_btn')}}</span>
 			<div>
-				<el-button type="primary" @click="runCodeHandle">运行</el-button>
-				<el-button type="primary" plain @click="saveHandle" v-if="!isView">保存</el-button>
+				<el-button type="primary" @click="runCodeHandle"><!-- 运行 -->{{$t('CodeCountPage.run_btn')}}</el-button>
+				<el-button type="primary" plain @click="saveHandle" v-if="!isView"><!-- 保存 -->{{$t('Dialog.confirm_save_btn')}}</el-button>
 			</div>
 		</div>
 		<div class="bottom">
@@ -13,7 +13,7 @@
 					<code-mirror ref="codeRef" :code="runCode" @initResult="initResult"/>
 				</div>
 				<div class="code-result">
-					<span>结果展示</span>
+					<span><!-- 结果展示 -->{{$t('CodeCountPage.res_show')}}</span>
 					<div class="code-result-wrapper" v-if="isShowResult">
 						<data-table
 							:data="runResultData"
@@ -23,32 +23,32 @@
 			</el-col>
 			<el-col :span="8" class="bottom-wrapper">
 				<el-tabs>
-					<el-tab-pane label="基础信息">
+					<el-tab-pane :label="$t('CodeCountPage.tab_info')">
 						<el-form
 							ref="diaForm"
 							label-position="left"
 							inline
-							label-width="80px"
+							label-width="110px"
 							:model="formData"
 							:disabled="isView"
 						>
-							<el-form-item label="指标名称" prop="edb_name">
+							<el-form-item :label="$t('Edb.Detail.e_name')" prop="edb_name">
 								<el-input
 									v-model="formData.edb_name"
-									placeholder="指标名称"
+									:placeholder="$t('Edb.InputHolderAll.input_name')"
 									style="width:220px"
 								/>
 							</el-form-item>
-							<el-form-item label="单位" prop="unit">
+							<el-form-item :label="$t('Edb.Detail.e_unit')" prop="unit">
 								<selectUnit 
 									v-model="formData.unit" 
 									style="width:220px"
 								/>
 							</el-form-item>
-							<el-form-item label="频度" prop="frequency">
+							<el-form-item :label="$t('Edb.Detail.e_fre')" prop="frequency">
 								<el-select 
 								v-model="formData.frequency" 
-								placeholder="请选择频度" 
+								:placeholder="$t('Edb.InputHolderAll.input_fre')"
 								clearable
 								style="width:220px">
 									<el-option
@@ -59,7 +59,7 @@
 									</el-option>
 								</el-select>
 							</el-form-item>
-							<el-form-item label="指标目录" prop="menu">
+							<el-form-item :label="$t('Edb.Detail.e_menu')" prop="menu">
 								<el-cascader
 								v-model="formData.menu"
 								:options="menuOptions"
@@ -72,17 +72,17 @@
 								@change="menuChange"
 								clearable
 								style="width:220px"
-								placeholder="请选择指标目录"/>
+								:placeholder="$t('Edb.InputHolderAll.input_menu')"/>
 							</el-form-item>
 						</el-form>
 					</el-tab-pane>
-					<el-tab-pane label="指标信息" v-if="!isView">
+					<el-tab-pane :label="$t('CodeCountPage.tab_edb')" v-if="!isView">
 						<el-form
 							label-position="left"
 							inline
-							label-width="100px"
+							label-width="120px"
 						>
-							<el-form-item label="数据来源">
+							<el-form-item :label="$t('Edb.Detail.source')">
 
 								<el-cascader
 								v-model="fromType"
@@ -95,7 +95,7 @@
 								}"
 								clearable
 								style="width:220px"
-								placeholder="请选择来源"/>
+								:placeholder="$t('Edb.Detail.source')"/>
 								<!-- <el-select 
 								v-model="fromType" 
 								placeholder="请选择来源"
@@ -108,7 +108,7 @@
 									</el-option>
 								</el-select> -->
 							</el-form-item>
-							<el-form-item label="指标名称/ID">
+							<el-form-item :label="$t('EtaBasePage.search_placeholder')">
 								<el-select
 									v-model="search_txt"
 									v-loadMore="searchLoad"
@@ -116,7 +116,7 @@
 									:filterable="!search_txt"
 									remote
 									clearable
-									placeholder="指标ID/指标名称"
+									:placeholder="$t('EtaBasePage.search_placeholder')"
 									:remote-method="searchHandle"
 									@click.native="inputFocusHandle"
 									style="width:220px"
@@ -134,7 +134,7 @@
 							</el-form-item>
 						</el-form>
 						<div class="search-result">
-							<p>查询结果 <span style="color: #999;">(展示指标所在表结构及调取指标代码)</span></p>
+							<p>{{$t('CodeCountPage.res_search')}} <span style="color: #999;">(<!-- 展示指标所在表结构及调取指标代码 -->{{$t('CodeCountPage.res_search_tip')}})</span></p>
 							<template v-if="resultInfo.sheet_name">
 								<table border>
 									<thead>
@@ -151,7 +151,7 @@
 									</tbody>
 								</table>
 								<div class="sql-code" v-html="resultInfo.sql_code"></div>
-								<el-button type="primary" class="copy-btn" @click="copyCode" :data-clipboard-text="resultInfo.sql_code">复制代码</el-button>
+								<el-button type="primary" class="copy-btn" @click="copyCode" :data-clipboard-text="resultInfo.sql_code"><!-- 复制代码 -->{{$t('CodeCountPage.copy_code')}}</el-button>
 
 							</template>
 						</div>
@@ -166,7 +166,7 @@
 import { dataBaseInterface } from '@/api/api.js';
 import { unitArr } from '@/utils/defaultOptions';
 import storage from '@/utils/storage.js';
-// import { allFromArr } from '../databaseComponents/util';
+import { frequencyArr } from '../databaseComponents/util';
 import codeMirror from './compoments/codeMirror';
 import dataTable from './compoments/dataTable';
 import { mapState } from 'vuex';
@@ -185,7 +185,7 @@ export default {
 			fromType:"",
 			unitArr,
 			allFromArr:[],//所有指标来源
-			frequencyArr:['日度','周度','旬度','月度','季度','年度'],
+			frequencyArr,
 			menuOptions:[],//目录数组
 
 			search_txt: '',
@@ -199,7 +199,8 @@ export default {
 			runResultData:[],//运行结果
 
 			resultInfo: {
-				headers: ['表名','字段名','*字段说明'],
+				// headers: ['表名','字段名','*字段说明'],
+				headers: [this.$t('CodeCountPage.table_name'),this.$t('CodeCountPage.field_name'),this.$t('CodeCountPage.field_instru')],
 				sheetArr:[],
 				sheet_name: '',
 				sql_code: ''
@@ -231,13 +232,13 @@ export default {
 
 		/* 运行代码 */
 		runCodeHandle: _.debounce(function() {
-			if(!this.$refs.codeRef.codeContent) return this.$message.warning('请输入代码');
+			if(!this.$refs.codeRef.codeContent) return this.$message.warning(this.$t('CodeCountPage.no_code_msg'));
 
 			this.isShowResult = false;
 
 			const loading = this.$loading({
 				lock: true,
-				text: '运行中...',
+				text: `${this.$t('CodeCountPage.run_ing')}...`,
 				target:'.left-wrapper',
 				spinner: 'el-icon-loading'
 			});
@@ -248,7 +249,8 @@ export default {
 				
 				loading.close();
 				if(res.Ret !== 200) return
-				this.$message.success('运行成功')
+				// this.$message.success('运行成功')
+				this.$message.success(this.$t('CodeCountPage.run_success'))
 
 				const { date,value } = res.Data;
 				const data_arr = []
@@ -312,13 +314,15 @@ export default {
 		copyCode() {
 			var clipboard = new this.Clipboard('.copy-btn')
 				clipboard.on('success', e => {
-					this.$message.success('复制成功')
+					// this.$message.success('复制成功')
+					this.$message.success(this.$t('MsgPrompt.copy_success_msg'))
 					e.clearSelection() // 释放内存
 					clipboard.destroy()
 				})
 				// // 浏览器不支持
 				clipboard.on('error', e => {
-					this.$message.warning('浏览器暂不支持')
+					// this.$message.warning('浏览器暂不支持')
+					this.$message.warning(this.$t('MsgPrompt.browser_not_support'))
 					// 释放内存
 					clipboard.destroy()
 				})
@@ -326,12 +330,12 @@ export default {
 		
 		/* 保存代码 */
 		async saveHandle() {
-			if(!this.formData.edb_name || !this.formData.menu || !this.formData.frequency || !this.formData.unit) return this.$message.warning('请填写完整基础信息')
-			if(!this.isShowResult) return this.$message.warning('请先运行代码')
+			if(!this.formData.edb_name || !this.formData.menu || !this.formData.frequency || !this.formData.unit) return this.$message.warning(this.$t('CodeCountPage.noenough_info_msg'))
+			if(!this.isShowResult) return this.$message.warning(this.$t('CodeCountPage.run_msg'))
 
 			const loading = this.$loading({
 				lock: true,
-				text: '保存中...',
+				text: `${this.$t('MsgPrompt.saveing_msg')}...`,
 				target:'.codecount-container',
 				spinner: 'el-icon-loading'
 			});
@@ -349,7 +353,8 @@ export default {
 			
 			loading.close();
 			if( Ret !== 200 ) return 
-			this.$message.success('保存成功')
+			// this.$message.success('保存成功')
+			this.$message.success(this.$t('MsgPrompt.saved_msg'))
 			const { UniqueCode,EdbInfoId } = Data;
 
       this.$router.replace({path:'/database', query: {

+ 4 - 4
src/views/dataEntry_manage/components/addMyClassifyDia.vue

@@ -12,7 +12,7 @@
     >
       <div slot="title" style="display: flex; alignitems: center">
         <!-- <img :src="title=='添加'?$icons.add:title=='编辑'?$icons.edit:''" style="color:#fff;width:16px;height:16px;marginRight:5px;"> -->
-        <span style="font-size: 16px">选择我的分类</span>
+        <span style="font-size: 16px">{{$t('Chart.select_my_chart_classify')}}</span>
       </div>
       <div class="dialog-min">
         <div class="classify-cont">
@@ -29,14 +29,14 @@
         </div>
         <span class="add-cont" @click="addClassify">
           <i class="el-icon-circle-plus-outline" />
-          新增
+          {{$t('Common.add_btn')}}
         </span>
       </div>
       <div class="dia-bot">
         <el-button type="primary" style="margin-right: 20px" @click="saveHandle"
-          >保存</el-button
+          >{{$t('Dialog.confirm_save_btn')}}</el-button
         >
-        <el-button type="primary" plain @click="cancelHandle">取消</el-button>
+        <el-button type="primary" plain @click="cancelHandle">{{$t('Dialog.cancel_btn')}}</el-button>
       </div>
     </el-dialog>
 

+ 52 - 45
src/views/dataEntry_manage/databaseComponents/addTargetDiaBase.vue

@@ -4,12 +4,12 @@
 			@close="cancelHandle" custom-class="custom-dialog fit-screen-dialog" top="5vh" center width="85vw" v-dialogDrag>
 			<div slot="title" style="display:flex;alignItems:center;">
 				<img :src="$icons.add" style="color:#fff;width:16px;height:16px;marginRight:5px;">
-				<span style="fontSize:16px;">添加指标</span>
+				<span style="fontSize:16px;">{{$t('EtaBasePage.add_edb_btn')}}</span>
 			</div>
-			<div v-if="wsdAddStep==1" v-loading="isLoadingData" element-loading-text="加载中······">
+			<div v-if="wsdAddStep==1" v-loading="isLoadingData" :element-loading-text="$t('Table.loading')">
 				<div class="dialog-top" >
 					<div>
-						<span>数据来源</span>
+						<span>{{$t('Edb.Detail.source')}}</span>
 						<el-select v-model="fromType" placeholder="请选择来源" style="width:240px;margin-left:10px" @change="changeTrade"
 							:disabled="haveResult">
 							<el-option v-for="item in fromArr" :key="item" :label="item" :value="item">
@@ -21,22 +21,22 @@
 							</el-option>
 						</el-select>
 					</div>
-					<el-input v-show="isCompanyCode" placeholder="公司ID" v-model="search_company_txt" style="maxWidth:340px;"
+					<el-input v-show="isCompanyCode" :placeholder="$t('EtaBasePage.complany_pholder')" v-model="search_company_txt" style="maxWidth:340px;"
 						@keyup.enter.native="searchHandle" :disabled="haveResult" clearable>
 						<i slot="prefix" class="el-input__icon el-icon-search"></i>
 					</el-input>
 
-					<el-input placeholder="指标ID" v-model="search_txt" style="maxWidth:300px" v-if="!(hasDateSequence && fromDatabase=='1')"
+					<el-input :placeholder="$t('Edb.Detail.e_id')" v-model="search_txt" style="maxWidth:300px" v-if="!(hasDateSequence && fromDatabase=='1')"
 						@keyup.enter.native="searchHandle" :disabled="haveResult" clearable>
 						<i slot="prefix" class="el-input__icon el-icon-search"></i>
 					</el-input>
 				</div>
 				<div v-if="hasDateSequence && fromDatabase=='1'">
 					<div class="wsd-index-box">
-						<el-input placeholder="请输入证券代码,每次只查询一个证券代码" v-model.trim="securityCodeText" class="wsd-index-input" 
+						<el-input :placeholder="$t('EtaBasePage.stock_input_pholder')" v-model.trim="securityCodeText" class="wsd-index-input" 
 						@blur="codeInputBlur('security')" style="margin-bottom: 20px;"></el-input>
 						<div class="wsd-index-code">
-							<el-input placeholder="请输入指标代码,多个指标代码用英文逗号分隔" v-model.trim="indexCodeText" 
+							<el-input :placeholder="$t('EtaBasePage.edb_input_pholder')" v-model.trim="indexCodeText" 
 							class="wsd-index-input" @blur="codeInputBlur('index')"></el-input>
 							<div class="index-code-hint">
 								{{ indexCodeHintText }}
@@ -59,20 +59,23 @@
 					</div>
 					<div class="dia-bot">
 						<el-button type="primary" @click="wsdNextHandle" :disabled="!isCodeComplete" 
-						style="width: 120px;" :loading="isLoadingData" >下一步
+						style="width: 120px;" :loading="isLoadingData" ><!-- 下一步 -->{{$t('EtaBasePage.next_step')}}
 						</el-button>
 					</div>
 				</div>
 				<template v-else>
 					<div class="warn_txt" v-if="status === 1">
-						该数据已存在数据库,名称为:{{have_edbobj.edb_name}},目录为:{{ have_edbobj.warnTip }},如需重新添加,请删除原指标
+						<!-- 该数据已存在数据库,名称为:{{have_edbobj.edb_name}},目录为:{{ have_edbobj.warnTip }},如需重新添加,请删除原指标 -->
+						{{ $t('EtaBasePage.have_edb_tip1',{ name:have_edbobj.edb_name,menu: have_edbobj.warnTip}) }}
 					</div>
 					<div class="warn_txt" v-else-if="status === 3">
-						该数据已存在数据库,名称为:{{have_edbobj.edb_name}},目录为:{{ have_edbobj.warnTip }}
+						<!-- 该数据已存在数据库,名称为:{{have_edbobj.edb_name}},目录为:{{ have_edbobj.warnTip }} -->
+						{{ $t('EtaBasePage.have_edb_tip2',{ name:have_edbobj.edb_name,menu: have_edbobj.warnTip}) }}
 					</div>
 
 					<div class="no-auth" v-if="status === 3">
-						您当前暂无权限查看该指标,如需查看,请联系管理员
+						<!-- 您当前暂无权限查看该指标,如需查看,请联系管理员 -->
+						{{ $t('EtaBasePage.forbid_edb_tips') }}
 					</div>
 					<div class="dialog-main" v-else>
 						<el-table ref="Table" :data="tableData" highlight-current-row border
@@ -86,7 +89,7 @@
 								</template>
 							</el-table-column>
 							<div slot="empty" style="padding:40px 0 120px;">
-								<tableNoData text="未搜索到该指标" size="mini"/>
+								<tableNoData :text="$t('EtaBasePage.no_search')" size="mini"/>
 							</div>
 						</el-table>
 						<ul class="value-ul" v-show="dataList.length && status === 2">
@@ -98,9 +101,9 @@
 					</div>
 					<div class="dia-bot">
 						<el-button type="primary" v-if="status === 2" @click="addTargtHandler" 
-						:disabled="!tableData.length">下一步
+						:disabled="!tableData.length"><!-- 下一步 -->{{$t('EtaBasePage.next_step')}}
 						</el-button>
-						<el-button type="primary" v-else-if="[1,3].includes(status)" @click="cancelHandle">知道了</el-button>
+						<el-button type="primary" v-else-if="[1,3].includes(status)" @click="cancelHandle"><!-- 知道了 -->{{$t('MsgPrompt.known')}}</el-button>
 					</div>
 				</template>
 			</div>
@@ -115,7 +118,7 @@
                 <td v-for="(data, sub_index) in edbIndexDatas" :key="sub_index" :colspan="2" 
 								:class="highLightIndex.includes(data.EdbName) && item=='EdbName' ?'exist-highlight':''">
 									<template v-if="item === 'ClassifyId'">
-										<el-cascader :options="options" v-model="data[item]" placeholder="请选择所属目录"
+										<el-cascader :options="options" v-model="data[item]" :placeholder="$t('Edb.InputHolderAll.input_menu')"
 										size="mini" :disabled="!data.Source"
 										:props="{label: 'ClassifyName',
 											value: 'ClassifyId',
@@ -129,19 +132,19 @@
 										:disabled="!data.Source"
 											v-model.trim="data[item]"
 											:fetch-suggestions="querySearchUnit"
-											placeholder="请输入单位"
+											:placeholder="$t('Edb.InputHolderAll.input_unit')"
 											suffix-icon="el-icon-arrow-down"
 											size="mini"
 										></el-autocomplete>
 									</template>
 									<template v-else-if="item === 'Frequency'">
-										<el-select v-model="data[item]" placeholder="请选择频度" size="mini" :disabled="!data.Source">
+										<el-select v-model="data[item]" :placeholder="$t('Edb.InputHolderAll.input_fre')" size="mini" :disabled="!data.Source">
 											<el-option :label="item" :value="item"
 											v-for="item in frequencyArr" :key="item"></el-option>
 										</el-select>
 									</template>
 									<template v-else-if="item === 'EdbName'">
-										<el-input v-model.trim="data[item]" placeholder="请输入指标名称" size="mini" :disabled="!data.Source"></el-input>
+										<el-input v-model.trim="data[item]" placeholder="$t('Edb.InputHolderAll.input_name')" size="mini" :disabled="!data.Source"></el-input>
 									</template>
 									<template v-else>
 										<div style="padding: 0 7px;">{{ data[item] }}</div>
@@ -153,19 +156,19 @@
 							<tr v-for="(item,index) in edbIndexDatas[0].DataList.length" :key="index">
 								<td :rowspan="edbIndexDatas[0].DataList.length" v-if="index==0"
 								class="sticky" style="left: 0;text-align: center;">
-									数据详情
+									<!-- 数据详情 -->{{$t('Edb.data_detail_tab')}}
 								</td>
 								<template v-for="(item1,index1) in edbIndexDatas.length">
-									<td>{{ edbIndexDatas[index1].DataList[index].DataTime }}</td>
-									<td>{{ edbIndexDatas[index1].DataList[index].Value }}</td>
+									<td :key="index1">{{ edbIndexDatas[index1].DataList[index].DataTime }}</td>
+									<td :key="index1">{{ edbIndexDatas[index1].DataList[index].Value }}</td>
 								</template>
               </tr>
             </tbody>
           </table>
         </div>
 				<div class="dia-bot">
-					<el-button @click="wsdPrevHandle" style="width: 120px;">上一步</el-button>
-					<el-button type="primary" @click="wsdSaveHandle" style="width: 120px;margin-left: 50px;">保存</el-button>
+					<el-button @click="wsdPrevHandle" style="width: 120px;"><!-- 上一步 -->{{$t('Edb.prev_step')}}</el-button>
+					<el-button type="primary" @click="wsdSaveHandle" style="width: 120px;margin-left: 50px;"><!-- 保存 -->{{$t('Dialog.confirm_save_btn')}}</el-button>
 				</div>
 			</template>
 		</el-dialog>
@@ -174,13 +177,13 @@
 			width="600px" title="操作提示">
 			<div class="check-fail-box">
 				<div>
-					<div style="margin-bottom: 20px;">指标库中已存在以下指标,请勿重新输入!</div>
-					<div v-for="(item,index) in existIndexList" class="exist-index-item" @click="existIndexClick(item)">
+					<div style="margin-bottom: 20px;"><!-- 指标库中已存在以下指标,请勿重新输入! -->{{$t('EtaBasePage.exist_edb_tips')}}</div>
+					<div v-for="(item,index) in existIndexList" class="exist-index-item" @click="existIndexClick(item)" :key="index">
 						{{ index+1+'、'+item.text }}
 					</div>
 				</div>
 				<div class="check-fail-button">
-					<el-button type="primary" @click="checkFailShow=false" style="width: 120px;">知道了</el-button>
+					<el-button type="primary" @click="checkFailShow=false" style="width: 120px;">{{$t('MsgPrompt.known')}}</el-button>
 				</div>
 			</div>
 		</el-dialog>
@@ -220,9 +223,9 @@ export default {
 		},
 		indexCodeHintText(){
 			if(this.fromType=='wind'){
-				return 'Wind金融终端输入“CG”会弹出代码生成器,可在代码生成器上获取其他指标的代码'
+				return this.$t('EtaBasePage.edb_wind_tip')
 			}else if(this.fromType=='同花顺'){
-				return '可用Excel同花顺插件/日期序列功能,根据所选指标获取指标代码,期货和股票常用代码可在下方勾选'
+				return this.$t('EtaBasePage.edb_ifind_tip')
 			}
 		}
 	},
@@ -238,22 +241,22 @@ export default {
 			fromArr:[],
 			indexCodeSelected:[],
 			databaseType:[
-				{value:'0',label:'经济数据库'},
-				{value:'1',label:'日期序列'}
+				{value:'0',label:this.$t('EtaBasePage.econ_base')},
+				{value:'1',label:this.$t('EtaBasePage.date_serie')}
 			],
 			wsdAddStep:1,
 			fromCode:[],
 			tableColums: [
 				{
-					label: '指标ID',
+					label: this.$t('Edb.Detail.e_id'),
 					key: 'EdbCode'
 				},
 				{
-					label: '起始时间',
+					label: this.$t('Edb.Detail.e_start_time'),
 					key: 'StartDate'
 				},
 				{
-					label: '终止时间',
+					label: this.$t('Edb.Detail.e_end_time'),
 					key: 'EndDate'
 				},
 			],
@@ -281,12 +284,12 @@ export default {
         "EdbCode",
       ],
 			edbTableHeadData:new Map([
-				["ClassifyId", "所属目录"],
-				["Unit", "单位"],
-				["Frequency", "频度"],
-				["EdbName", "指标名称"],
-				["StockCode", "证券代码"],
-				["EdbCode", "指标代码"],
+				["ClassifyId", /* "所属目录" */this.$t('EtaBasePage.belong_menu')],
+				["Unit", /* "单位" */this.$t('Edb.Detail.e_unit')],
+				["Frequency", /* "频度" */this.$t('Edb.Detail.e_fre')],
+				["EdbName", /* "指标名称" */this.$t('Edb.Detail.e_name')],
+				["StockCode", /* "证券代码" */this.$t('Edb.Detail.e_stock_code')],
+				["EdbCode", /* "指标代码" */this.$t('Edb.Detail.e_code')],
 			]),
 			BatchList:[],
 			options:[],
@@ -299,8 +302,8 @@ export default {
 			// 同花顺常用指标类型
 			THSIndexCodeType:1,
 			THSIndexCodeTypeArr:[
-				{value:1,label:"期货常用指标"},
-				{value:2,label:"股票常用指标"}
+				{value:1,label:this.$t('EtaBasePage.future_common_edb')},
+				{value:2,label:this.$t('EtaBasePage.stock_common_edb')}
 			]
 		};
 	},
@@ -343,16 +346,19 @@ export default {
 			console.info(this.search_txt);
 			if (this.fromType == "彭博财务") {
 				if (!this.search_company_txt) {
-					this.$message.warning('请输入公司ID')
+					// this.$message.warning('请输入公司ID')
+					this.$message.warning(this.$t('EtaBasePage.no_companyid_msg'))
 					return
 				}
 				if (!this.search_txt) {
-					this.$message.warning('请输入指标ID')
+					// this.$message.warning('请输入指标ID')
+					this.$message.warning(this.$t('EtaBasePage.no_edbid_msg'))
 					return
 				}
 			} else {
 				if (!this.search_txt) {
-					this.$message.warning('请输入指标ID')
+					// this.$message.warning('请输入指标ID')
+					this.$message.warning(this.$t('EtaBasePage.no_edbid_msg'))
 					return
 				}
 			}
@@ -423,7 +429,8 @@ export default {
 					}
 				})
 			} else {
-				this.$message.warning('请输入指标ID')
+				// this.$message.warning('请输入指标ID')
+				this.$message.warning(this.$t('EtaBasePage.no_edbid_msg'))
 			}
 		}),
 		addTargtHandler() {

+ 5 - 5
src/views/dataEntry_manage/databaseComponents/chartTrendRender.vue

@@ -28,14 +28,14 @@
 							@click.native="changeYear(item)"
 							>{{ item.name }}</el-button>
 					</div>
-					<el-button type="primary" plain size="mini" class="year-btn" slot="reference" style="margin-right:15px;background-color: #e6eefb;color:#0052D9;">时间段</el-button>
+					<el-button type="primary" plain size="mini" class="year-btn" slot="reference" style="margin-right:15px;background-color: #e6eefb;color:#0052D9;">{{$t('Chart.time_interval')}}</el-button>
 				</el-popover>
 				<el-button type="primary" plain size="mini" class="btn-sty" @click="openDateDia">{{
 					dateTip
 				}}</el-button>
 				<el-button type="primary" plain size="mini" class="btn-sty" @click="showOnChart('toggle')" v-if="!isOnlyShowBaseChart&&isShowChartBasis">
 					<!-- <i class="el-icon-view"></i> -->
-					{{ isShowOnyearData ? '隐藏同比图' : '展示同比图'}}
+					{{ isShowOnyearData ? $t('Edb.hide_yearonyear') : $t('Edb.show_yearonyear')}}
 				</el-button>
 			</template>
 			<!-- 季节图时间选择 -->
@@ -55,7 +55,7 @@
 			<el-button type="primary" plain size="mini" class="btn-sty" style="margin-left:auto;"
 				@click="chartTypeChange" v-if="!isOnlyShowBaseChart&&isAllowSwitchSeason">
 				<i class="el-icon-sort" style="transform: rotate(90deg);"></i>
-				切换{{chart_type==1?'季节性图':'曲线图'}}
+				{{chart_type==1?$t('Edb.switch_season'):$t('Edb.switch_curve')}}
 			</el-button>
 		</div>
 		<div class="min-wrapper">
@@ -109,8 +109,8 @@
 							v-if="chart_type===2"
 							@change="getDataByPath"
 					>
-							<el-radio-button label="公历" />
-							<el-radio-button label="农历" />
+							<el-radio-button label="公历">{{$t('Chart.calendar_gre')}}</el-radio-button>
+							<el-radio-button label="农历">{{$t('Chart.calendar_lunar')}}</el-radio-button>
 					</el-radio-group>
 				</div>
 			</div>

+ 19 - 18
src/views/dataEntry_manage/databaseComponents/completeTargetDia.vue

@@ -11,36 +11,36 @@
 		v-dialogDrag>
 			<div slot="title" style="display:flex;alignItems:center;">
 				<img :src="$icons.edit" style="color:#fff;width:16px;height:16px;marginRight:5px;">
-				<span style="fontSize:16px;">完善信息</span>
+				<span style="fontSize:16px;">{{$t('EtaBasePage.complate_info')}}</span>
 			</div>
 			<div class="dialog-main">
 				<el-form
 				ref="targetForm"
 				label-position="left"
-				label-width="80px"
+				label-width="110px"
 				hide-required-asterisk
 				:model="formData"
 				:rules="formRules">
-					<el-form-item label="指标名称" prop="edb_name">
+					<el-form-item :label="$t('Edb.Detail.e_name')" prop="edb_name">
 						<el-input
 						v-model="formData.edb_name"
 						style="width: 80%"
-						placeholder="指标名称"></el-input>
+						:placeholder="$t('Edb.InputHolderAll.input_name')"></el-input>
 					</el-form-item>
-					<el-form-item label="所属目录" prop="menu">
+					<el-form-item :label="$t('Edb.Detail.e_menu')" prop="menu">
 						<el-cascader
 						v-model="formData.menu"
 						:options="options"
 						:props="levelProps"
 						style="width: 80%"
 						clearable
-						placeholder="请选择所属目录"/>
+						:placeholder="$t('Edb.InputHolderAll.input_menu')"/>
 					</el-form-item>
-					<el-form-item label="频率" prop="frequency">
-						<span slot="label">频&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;率</span>
+					<el-form-item :label="$t('Edb.Detail.e_fre')" prop="frequency">
+						<!-- <span slot="label">频&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;率</span> -->
 						<el-select 
 						v-model="formData.frequency" 
-						placeholder="请选择频率" 
+						:placeholder="$t('Edb.InputHolderAll.input_fre')"
 						style="width:80%" 
 						clearable>
 							<el-option
@@ -51,15 +51,15 @@
 							</el-option>
 						</el-select>
 					</el-form-item>
-					<el-form-item label="单位" prop="unit">
-						<span slot="label">单&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;位</span>
+					<el-form-item :label="$t('Edb.Detail.e_unit')" prop="unit">
+						<!-- <span slot="label">单&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;位</span> -->
 						<selectUnit v-model="formData.unit" style="width: 80%" />
 					</el-form-item>
 				</el-form>
 			</div>
 			<div class="dia-bot">
-				<el-button type="primary" style="margin-right:20px" @click="addTarget">保存</el-button>
-				<el-button type="primary" plain @click="cancelHandle">取消</el-button>
+				<el-button type="primary" style="margin-right:20px" @click="addTarget"><!-- 保存 -->{{$t('Dialog.confirm_save_btn')}}</el-button>
+				<el-button type="primary" plain @click="cancelHandle"><!-- 取消 -->{{$t('Dialog.cancel_btn')}}</el-button>
 			</div>
 		</el-dialog>
 	</div>
@@ -68,6 +68,7 @@
 <script>
 import { dataBaseInterface } from '@/api/api.js';
 import { unitArr } from '@/utils/defaultOptions';
+import { frequencyArr } from './util'
 export default {
 	name:'',
 	props: {
@@ -99,16 +100,16 @@ export default {
 			},
 			formRules: {
 				edb_name:[
-					{ required: true, message: '指标名称不能为空', trigger: 'blur' },
+					{ required: true, message: this.$t('Edb.Valids.name_msg'), trigger: 'blur' },
 				],
 				menu:[
-					{ required: true, message: '所属目录不能为空', trigger: 'blur' },
+					{ required: true, message: this.$t('Edb.Valids.menu_msg'), trigger: 'blur' },
 				],
 				frequency:[
-					{ required: true, message: '频率不能为空', trigger: 'blur' },
+					{ required: true, message: this.$t('Edb.Valids.fre_msg'), trigger: 'blur' },
 				],
 				unit:[
-					{ required: true, message: '单位不能为空', trigger: ['blur','change'] },
+					{ required: true, message: this.$t('Edb.Valids.unit_msg'), trigger: ['blur','change'] },
 				],
 			},
 			options:  [],
@@ -119,7 +120,7 @@ export default {
 				children: 'Children',
 				checkStrictly: true
 			},
-			frequencyArr:['日度','周度','旬度','月度','季度','年度']
+			frequencyArr
 		};
 	},
 	methods: {

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

@@ -25,7 +25,7 @@
 						v-loadMore="searchLoad"
 						:filterable="!list.target"
 						clearable
-						placeholder="请输入指标名称"
+						:placeholder="$t('Edb.InputHolderAll.input_name')"
 						style="width: 400px"
 						@change="chooseTarget"
 						@clear="clearHandle(index)"
@@ -67,12 +67,12 @@
 					class="el-icon-circle-plus-outline"
 					style="color: #5882ef; font-size: 16px"
 				/>
-				添加更多参数
+				<!-- 添加更多参数 -->{{$t('EtaBasePage.add_more_param')}}
 			</span>
 			<div class="computed-min">
 				<div class="computed-section">
 					<div>
-						<label class="label">空值处理
+						<label class="label"><!-- 空值处理 -->{{$t('EtaBasePage.null_val_deal')}}
 							<el-tooltip placement="top">
 								<div slot="content" v-html="formTips['null-val']" style="width:300px;line-height:20px;"/>
 								<i class="el-icon-question"/>
@@ -94,7 +94,7 @@
 					</div>
 
 					<div style="margin-left: 120px" v-if="showMaxNullDeal">
-						<label class="label">MAX、MIN空值处理
+						<label class="label"><!-- MAX、MIN空值处理 --> {{$t('EtaBasePage.max_null_val')}}
 							<el-tooltip placement="top">
 								<div slot="content" v-html="formTips['max-null-val']" style="width:300px;line-height:20px;"/>
 								<i class="el-icon-question"/>
@@ -111,7 +111,7 @@
 					</div>
 				</div>	
 				<div class="computed-section">
-					<label class="label">计算公式
+					<label class="label"><!-- 计算公式 -->{{$t('EtaBasePage.calculate_formula')}}
 						<el-tooltip placement="top">
 							<div slot="content" v-html="formTips['formula']" style="width:300px;line-height:20px;"/>
 							<i class="el-icon-question"/>
@@ -121,16 +121,16 @@
 					</el-input> -->
 					<ul class="formula-list">
 						<li style="margin-bottom: 15px;">
-							<el-input placeholder="请输入公式" v-model="formulaList[0].formula" clearable :disabled="calulateForm.view" style="width: 220px"/>
+							<el-input :placeholder="$t('EtaBasePage.input_formula_msg')" v-model="formulaList[0].formula" clearable :disabled="calulateForm.view" style="width: 220px"/>
 							
 							<span v-if="formulaDateArr.length" class="date-section-text">{{formulaDateArr[formulaDateArr.length-1]}}(含)之后</span>
 
-							<span class="example-txt">公式示例:A*0.5+B*C*1.2+120-MAX(A,B,C) &nbsp;函数支持:MAX(),MIN(),ln(A),log(a,A),abs(),exp(),pow(),round()</span>
+							<span class="example-txt">{{$t('EtaBasePage.formula_examp')}}:A*0.5+B*C*1.2+120-MAX(A,B,C) &nbsp;{{$t('EtaBasePage.func_examp')}}:MAX(),MIN(),ln(A),log(a,A),abs(),exp(),pow(),round()</span>
 						</li>
 
 						<li class="formula-item" v-for="(item,index) in formulaList.slice(1)" :key="index+1">
 							<el-input 
-								placeholder="请输入公式" 
+								:placeholder="$t('EtaBasePage.input_formula_msg')"
 								v-model="item.formula" 
 								clearable 
 								:disabled="calulateForm.view"
@@ -142,7 +142,7 @@
 								type="date"
 								value-format="yyyy-MM-dd"
 								style="margin: 0 10px;width: 220px"
-								placeholder="选择日期"
+								:placeholder="$t('EtaBasePage.input_date_msg')"
 								:disabled="calulateForm.view"
 								@change="selectFormulaDate($event,item)"
 							/>
@@ -161,41 +161,41 @@
 					icon="el-icon-plus" 
 					style="margin-left:70px;" 
 					@click="addFormulaHandle"
-				>新增分段</el-button>
+				><!-- 新增分段 -->{{$t('EtaBasePage.add_segm')}}</el-button>
 
 			</div>
 			<el-form
 				ref="diaForm"
 				label-position="right"
 				inline
-				label-width="80px"
+				label-width="120px"
 				:model="formData"
 				:rules="formRules"
 				:disabled="calulateForm.view"
 			>
-				<el-form-item label="指标名称" prop="targetName">
+				<el-form-item :label="$t('Edb.Detail.e_name')" prop="targetName">
 					<el-input
 						v-model="formData.targetName"
 						style="width: 340px"
-						placeholder="请输入指标名称"
+						:placeholder="$t('Edb.InputHolderAll.input_name')"
 					/>
 				</el-form-item>
-				<el-form-item label="单位" prop="unit">
+				<el-form-item :label="$t('Edb.Detail.e_unit')" prop="unit">
 					<selectUnit v-model="formData.unit" style="width: 340px" />
 				</el-form-item>
-				<el-form-item label="指标目录" prop="menu">
+				<el-form-item :label="$t('Edb.Detail.e_menu')" prop="menu">
 					<el-cascader
 						v-model="formData.menu"
 						:options="options"
 						:props="levelProps"
 						clearable
-						placeholder="请选择指标目录"
+						:placeholder="$t('Edb.InputHolderAll.input_menu')"
 					/>
 				</el-form-item>
-				<el-form-item label="频度" prop="frequency">
+				<el-form-item :label="$t('Edb.Detail.e_fre')" prop="frequency">
 					<el-select
 						v-model="formData.frequency"
-						placeholder="请选择频率"
+						:placeholder="$t('Edb.InputHolderAll.input_fre')"
 						style="width: 340px"
 						clearable
 					>
@@ -217,23 +217,23 @@
 				@click="saveHandle"
 				:loading="dataloading"
 				v-if="title==='计算指标'"
-				>生成计算指标</el-button
+				><!-- 生成计算指标 -->{{$t('EtaBasePage.create_calculate_btn')}}</el-button
 			>
 			<el-button
 				type="primary"
 				style="margin-right: 20px"
 				@click="saveHandle"
 				v-else
-				>保存</el-button
+				><!-- 保存 -->{{$t('Dialog.confirm_save_btn')}}</el-button
 			>
-			<el-button type="primary" plain @click="cancelHandle('cancel')">取消</el-button>
+			<el-button type="primary" plain @click="cancelHandle('cancel')"><!-- 取消 -->{{$t('Dialog.cancel_btn')}}</el-button>
 		</div>
 		<el-popover
 			placement="top-start"
 			width="360"
 			trigger="click">
 			<p style="padding:30px;line-height:25px;" v-html="$parent.tips.get(type)"/>
-			<span slot="reference" class="tip-label">公式说明</span>
+			<span slot="reference" class="tip-label"><!-- 公式说明 -->{{$t('Edb.formula_instru')}}</span>
 		</el-popover>
 	</el-dialog>
 </template>
@@ -241,7 +241,7 @@
 <script>
 import { dataBaseInterface } from '@/api/api.js';
 import * as preDictEdbInterface from '@/api/modules/predictEdbApi.js';
-import { formRules } from '../databaseComponents/util';
+import { formRules,frequencyArr } from '../databaseComponents/util';
 import { unitArr } from '@/utils/defaultOptions';
 const tag_arr = [];
 for(let i=0;i<26;i++) tag_arr.push(String.fromCharCode(65+i));
@@ -323,7 +323,7 @@ export default {
 				children: 'Children',
 				checkStrictly: true
 			},
-			frequencyArr: ['日度', '周度','旬度','月度', '季度', '年度'],
+			frequencyArr,
 			formRules,
 			unitArr,
 			addList: [
@@ -421,7 +421,7 @@ export default {
 		},
 		/* 添加额外的指标列 */
 		addTargetHandle() {
-			if(this.addList.length >= 26) return this.$message.warning('添加指标个数已达上限')
+			if(this.addList.length >= 26) return this.$message.warning(/* '添加指标个数已达上限' */this.$t('EtaBasePage.num_overrun_msg'))
 			let tag = this.addList[this.addList.length-1].tag;
 			let index = tag_arr.findIndex(item => item === tag);
 			const item = {
@@ -512,7 +512,7 @@ export default {
 			this.getNewestDate();
 		},
 		async saveHandle() {
-				if (!this.formulaList[0].formula) return this.$message.warning('计算公式不能为空');
+				if (!this.formulaList[0].formula) return this.$message.warning(/* '计算公式不能为空' */this.$t('EtaBasePage.input_formula_valid'));
 				await this.$refs.diaForm.validate();
 
 				// 指标id数组

+ 1 - 1
src/views/dataEntry_manage/databaseComponents/dataAssociateChart.vue

@@ -1,7 +1,7 @@
 <template>
     <div class="associate-chart">
         <div v-if="list.length===0&&finished" style="text-align:center;display:block" class="empty-list">
-            <tableNoData text="该指标暂无关联图"/>
+            <tableNoData :text="$t('EtaBasePage.no_quote_chart')"/>
         </div>
         <template v-else>
         <p style="position:relative;font-size:16px">共 {{chartTotal}} 张图表</p>

+ 4 - 4
src/views/dataEntry_manage/databaseComponents/dataAssociateComputeData.vue

@@ -46,17 +46,17 @@
                 >
                 </template>
             </el-table-column>
-            <el-table-column label="操作" key="Copy" align="center" width="110">
+            <el-table-column :label="$t('Edb.Detail.e_opera')" key="Copy" align="center" width="110">
                 <template slot-scope="scope">
                 <span v-permission="permissionBtn.edbDataPermission.edbData_copyData"
                 class="editsty" @click="copyCode(scope.row)">
-                    <i class="el-icon-document-copy" />&nbsp;复制数据</span
+                    <i class="el-icon-document-copy" />&nbsp;{{$t('Edb.detail_copydata_btn')}}</span
                 >
-                <span class="editsty" @click="viewTarget(scope.row)">查看数据</span>
+                <span class="editsty" @click="viewTarget(scope.row)">{{$t('Edb.detail_lookdata_btn')}}</span>
                 </template>
             </el-table-column>
             <div slot="empty">
-                <tableNoData text="暂无引用的计算指标" size="mini"/>
+                <tableNoData :text="$t('EtaBasePage.no_quote_edb')" size="mini"/>
             </div>
         </el-table>
         <el-pagination 

+ 22 - 21
src/views/dataEntry_manage/databaseComponents/openDialog.vue

@@ -11,50 +11,50 @@
 		v-dialogDrag>
 			<div slot="title" style="display:flex;alignItems:center;">
 				<img :src="title=='添加'?$icons.add:title=='编辑'?$icons.edit:''" style="color:#fff;width:16px;height:16px;marginRight:5px;">
-				<span style="fontSize:16px;">{{title}}</span>
+				<span style="fontSize:16px;">{{title==='添加' ? $t('Table.add_btn') : $t('Table.edit_btn')}}</span>
 			</div>
 			<div class="dialog-main">
 				<el-form
 				ref="diaForm"
 				label-position="left"
 				hide-required-asterisk
-				label-width="80px"
+				label-width="120px"
 				:model="formData"
 				:rules="formRules">
 					<template v-if="!formData.isEDB">
-						<el-form-item label="上级目录" v-if="formData.level>0">
+						<el-form-item :label="$t('EtaBasePage.parent_menu')" v-if="formData.level>0">
 							<el-tooltip class="item" effect="dark" :content="getParentName" placement="top">
       							<span class="parentStr">{{getParentName}}</span>
     						</el-tooltip>
 						</el-form-item>
-						<el-form-item label="目录名称" prop="levelVal">
+						<el-form-item :label="$t('EtaBasePage.menu_name')" prop="levelVal">
 							<el-input
 							v-model="formData.levelVal"
 							style="width: 80%"
-							placeholder="必填项"></el-input>
+							:placeholder="$t('Dialog.require_vaild')"></el-input>
 						</el-form-item>
 					</template>
 					<!-- 编辑具体指标 -->
 					<template v-if="title=='编辑' && formData.isEDB">
-						<el-form-item label="指标名称" prop="levelVal">
+						<el-form-item :label="$t('Edb.Detail.e_name')" prop="levelVal">
 							<el-input
 							v-model="formData.levelVal"
 							style="width: 80%"
-							placeholder="指标名称"></el-input>
+							:placeholder="$t('Edb.InputHolderAll.input_name')"></el-input>
 						</el-form-item>
-						<el-form-item label="所属目录" prop="level_menu">
+						<el-form-item :label="$t('Edb.Detail.e_menu')" prop="level_menu">
 							<el-cascader
 							v-model="formData.level_menu"
 							:options="options"
 							:props="levelProps"
 							style="width: 80%"
-							placeholder="请选择所属目录"/>
+							:placeholder="$t('Edb.InputHolderAll.input_menu')"/>
 						</el-form-item>
-						<el-form-item label="频率" prop="frequency">
-							<span slot="label">频&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;率</span>
+						<el-form-item :label="$t('Edb.Detail.e_fre')" prop="frequency">
+							<!-- <span slot="label">频&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;率</span> -->
 							<el-select 
 							v-model="formData.frequency" 
-							placeholder="请选择频率" 
+							:placeholder="$t('Edb.InputHolderAll.input_fre')"
 							style="width:80%"
 							:disabled="$parent.tableData[0].Source===58"
 							@change="changeTrade">
@@ -66,16 +66,16 @@
 								</el-option>
 							</el-select>
 						</el-form-item>
-						<el-form-item label="单位" prop="unit">
-							<span slot="label">单&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;位</span>
+						<el-form-item :label="$t('Edb.Detail.e_unit')" prop="unit">
+							<!-- <span slot="label">单&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;位</span> -->
 							<selectUnit v-model="formData.unit" style="width: 80%" />
 						</el-form-item>
 					</template>
 				</el-form>
 			</div>
 			<div class="dia-bot">
-				<el-button type="primary" style="margin-right:20px" @click="saveHandle">保存</el-button>
-				<el-button type="primary" plain @click="cancelHandle">取消</el-button>
+				<el-button type="primary" style="margin-right:20px" @click="saveHandle"><!-- 保存 -->{{$t('Dialog.confirm_save_btn')}}</el-button>
+				<el-button type="primary" plain @click="cancelHandle"><!-- 取消 -->{{$t('Dialog.cancel_btn')}}</el-button>
 			</div>
 		</el-dialog>
 	</div>
@@ -84,6 +84,7 @@
 <script>
 import { dataBaseInterface } from '@/api/api.js';
 import { unitArr } from '@/utils/defaultOptions';
+import { frequencyArr } from './util'
 export default {
 	props: {
 		isOpenDialog: {
@@ -122,7 +123,7 @@ export default {
 		return {
 			formRules: {
 				levelVal:[
-					{ required: true, message: '目录名称不能为空', trigger: 'blur' },
+					{ required: true, message: this.$t('EtaBasePage.input_menu_msg'), trigger: 'blur' },
 				],
 				// level_2:[
 				// 	{ required: true, message: '目录名称不能为空', trigger: 'blur' },
@@ -134,13 +135,13 @@ export default {
 				// 	{ required: true, message: '指标名称不能为空', trigger: 'blur' },
 				// ],
 				level_menu:[
-					{ required: true, message: '所属目录不能为空', trigger: 'blur' },
+					{ required: true, message: this.$t('Edb.Valids.menu_msg'), trigger: 'blur' },
 				],
 				frequency:[
-					{ required: true, message: '频率不能为空', trigger: 'blur' },
+					{ required: true, message: this.$t('Edb.Valids.fre_msg'), trigger: 'blur' },
 				],
 				unit:[
-					{ required: true, message: '单位不能为空', trigger: ['blur','change'] },
+					{ required: true, message: this.$t('Edb.Valids.unit_msg'), trigger: ['blur','change'] },
 				],
 			},
 			options:  [],
@@ -151,7 +152,7 @@ export default {
 				children: 'Children',
 				checkStrictly: true
 			},
-			frequencyArr:['日度','周度','旬度','月度','季度','年度'],
+			frequencyArr,
 
 		};
 	},

+ 12 - 12
src/views/dataEntry_manage/databaseComponents/replaceDialog.vue

@@ -15,24 +15,24 @@
         :src="$icons.editicon"
         style="color: #fff; width: 16px; height: 16px; marginright: 5px"
       />
-      <span style="font-size: 16px">&nbsp;替换指标</span>
+      <span style="font-size: 16px">&nbsp;<!-- 替换指标 -->{{$t('EtaBasePage.replace_edb_btn')}}</span>
     </div>
     <el-form
       ref="diaForm"
       class="form-cont"
       label-position="left"
-      label-width="80px"
+      label-width="120px"
       :model="formData"
       :rules="formRules"
     >
-			<el-form-item label="原指标" prop="oldEdb">
+			<el-form-item :label="$t('EtaBasePage.origin_edb')" prop="oldEdb">
 				<el-select
 				v-model="formData.oldEdb"
 				v-loadMore="searchLoad"
 				:filterable="!formData.oldEdb"
 				remote
 				clearable
-				placeholder="指标ID/指标名称"
+				:placeholder="$t('EtaBasePage.search_placeholder')"
 				style="width: 440px"
 				:remote-method="searchHandle"
 				@click.native="inputFocusHandle"
@@ -51,14 +51,14 @@
 					</el-option>
 				</el-select>
 			</el-form-item>
-			<el-form-item label="替换为" prop="newEdb">
+			<el-form-item :label="$t('EtaBasePage.replace')" prop="newEdb">
 				<el-select
 				v-model="formData.newEdb"
 				v-loadMore="searchLoad"
 				:filterable="!formData.newEdb"
 				remote
 				clearable
-				placeholder="指标ID/指标名称"
+				:placeholder="$t('EtaBasePage.search_placeholder')"
 				style="width: 440px"
 				:remote-method="searchHandle"
 				@click.native="inputFocusHandle"
@@ -83,11 +83,11 @@
         type="primary"
         style="margin-right: 20px"
         @click="saveHandle"
-        >全部替换</el-button
+        ><!-- 全部替换 -->{{$t('EtaBasePage.replace_all')}}</el-button
       >
-      <el-button type="primary" plain @click="cancelHandle">取消</el-button>
+      <el-button type="primary" plain @click="cancelHandle"><!-- 取消 -->{{$t('Dialog.cancel_btn')}}</el-button>
     </div>
-		<p class="tip">提示:替换后,图表和计算指标引用到原指标的会全部由替换指标替代</p>
+		<p class="tip">{{$t('EtaBasePage.replace_tip')}}</p>
   </el-dialog>
 </template>
 
@@ -107,10 +107,10 @@ export default {
 			},
 			formRules: {
 				oldEdb:[
-					{ required: true, message: '原指标不能为空', trigger: 'blur' },
+					{ required: true, message: this.$t('EtaBasePage.input_origin_vaild'), trigger: 'blur' },
 				],
 				newEdb:[
-					{ required: true, message: '替换指标不能为空', trigger: 'blur' },
+					{ required: true, message: this.$t('EtaBasePage.input_replace_vaild'), trigger: 'blur' },
 				],
 			},
 			allOptions: [],
@@ -166,7 +166,7 @@ export default {
     saveHandle() {
       this.$refs.diaForm.validate((valid) => {
         if (valid) {
-					this.$confirm('本次替换将持续较长时间,是否确认替换?', '提示', {
+					this.$confirm(this.$t('EtaBasePage.replace_success_msg'), '提示', {
 						confirmButtonText: '是',
 						cancelButtonText: '否',
 						type: 'warning'

+ 97 - 280
src/views/dataEntry_manage/databaseComponents/util.js

@@ -1,25 +1,27 @@
+import bus from '@/api/bus'
+// console.log(bus.$i18nt.t('EtaBasePage.future_common_edb'))
 /* 公用校验 计算指标 */
 export const formRules= {
 	targetName: [
-		{ required: true, message: '指标名称不能为空', trigger: 'blur' },
+		{ required: true, message: bus.$i18nt.t('Edb.Valids.name_msg'), trigger: 'blur' },
 	],
 	unit: [
-		{ required: true, message: '单位不能为空', trigger: ['blur','change'] },
+		{ required: true, message: /* '单位不能为空' */bus.$i18nt.t('Edb.Valids.unit_msg'), trigger: ['blur','change'] },
 	],
 	menu: [
-		{ required: true, message: '指标目录不能为空', trigger: 'blur' },
+		{ required: true, message: /* '指标目录不能为空' */bus.$i18nt.t('Edb.Valids.menu_msg'), trigger: 'blur' },
 	],
 	frequency: [
-		{ required: true, message: '频度不能为空', trigger: 'blur' },
+		{ required: true, message: /* '频度不能为空' */bus.$i18nt.t('Edb.Valids.fre_msg'), trigger: 'blur' },
 	],
 	n_num: [
-		{ required: true, message: 'N不能为空', trigger: 'blur' },
+		{ required: true, message: /* 'N不能为空' */bus.$i18nt.t('Edb.Valids.n_msg'), trigger: 'blur' },
 	],
 	moveVal: [
-		{ required: true, message: '移动方式参数不能为空',trigger: 'blur' }
+		{ required: true, message: /* '移动方式参数不能为空' */bus.$i18nt.t('Edb.Valids.move_msg'),trigger: 'blur' }
 	],
 	calendar_type: [
-		{ required: true, message: '日历不能为空',trigger: 'blur' }
+		{ required: true, message: /* '日历不能为空' */bus.$i18nt.t('Edb.Valids.calendar_msg'),trigger: 'blur' }
 	],
 	alphaValue:[
 		{ validator:(rule,value,callback)=>{
@@ -29,82 +31,82 @@ export const formRules= {
 				callback()
 			}
 		},trigger:['change','blur']},
-		{ required:true,message:'alpha值不能为空',trigger:'blur'},
+		{ required:true,message:/* 'alpha值不能为空' */bus.$i18nt.t('Edb.Valids.alpha_msg'),trigger:'blur'},
 	]
 }
 
 //计算指标弹窗类型
 export const computedTypes = [
 	{
-		name:'指标运算',
+		name:/* '指标运算' */bus.$i18nt.t('Edb.CalculatesAll.calculate'),
 		type:4
 	},
 	{
-		name:'累计值转月/季值',
+		name:/* '累计值转月/季值' */bus.$i18nt.t('Edb.CalculatesAll.to_month_quarter'),
 		type:'toMonthSeason'
 	},
 	{
-		name:'同比值',
+		name:/* '同比值' */bus.$i18nt.t('Edb.CalculatesAll.on_year'),
 		type:6
 	},
 	{
-		name:'同差值',
+		name:/* '同差值' */bus.$i18nt.t('Edb.CalculatesAll.differ'),
 		type:7
 	},
 	{
-		name:'N数值移动平均计算',
+		name:/* 'N数值移动平均计算' */bus.$i18nt.t('Edb.CalculatesAll.n_move_average'),
 		type:8
 	},
 	{
-		name:'N数值环比值',
+		name:/* 'N数值环比值' */bus.$i18nt.t('Edb.CalculatesAll.n_rate'),
 		type:12
 	},
 	{
-		name:'N数值环差值',
+		name:/* 'N数值环差值' */bus.$i18nt.t('Edb.CalculatesAll.n_differ'),
 		type:13
 	},
 	{
-		name:'升频',
+		name:/* '升频' */bus.$i18nt.t('Edb.CalculatesAll.up_conver'),
 		type:14
 	},
 	{
-		name:'指标拼接',
+		name:/* '指标拼接' */bus.$i18nt.t('Edb.CalculatesAll.splic'),
 		type: 'joint'
 	},
 	{
-		name: '时间移位',
+		name: /* '时间移位' */bus.$i18nt.t('Edb.CalculatesAll.time_move'),
 		type: 22
 	},
 	{
-		name: '超季节性',
+		name: /* '超季节性' */bus.$i18nt.t('Edb.CalculatesAll.super_season'),
 		type: 35
 	},
 	{
-		name: '拟合残差',
+		name: /* '拟合残差' */bus.$i18nt.t('Edb.CalculatesAll.fit_residu'),
 		type: 37
 	},
 	{
-		name: '年化',
+		name: /* '年化' */bus.$i18nt.t('Edb.CalculatesAll.annual'),
 		type: 52
 	},
 	{
-		name: '降频',
+		name: /* '降频' */bus.$i18nt.t('Edb.CalculatesAll.down_conver'),
 		type: 51
 	},
 	{
-		name: '扩散指数',
+		name: /* '扩散指数' */bus.$i18nt.t('Edb.CalculatesAll.diff_index'),
 		type: 53
 	},
 	{
-		name: '累计值',
+		name: /* '累计值' */bus.$i18nt.t('Edb.CalculatesAll.cumulate'),
 		type: 'accumulate'
 	},
 	{
-		name:'指数修匀',
+		name:/* '指数修匀' */bus.$i18nt.t('Edb.CalculatesAll.ex_smooth'),
 		type:'alpha'
 	},
 	{
-		name:'日均值',
+		name:/* '日均值' */bus.$i18nt.t('Edb.CalculatesAll.day_mean'),
 		type: 75
 	}
 ]
@@ -112,49 +114,50 @@ export const computedTypes = [
 //批量指标类型
 export const computedBatchTypes = [
 	{
-		name:'同比值',
+		name:/* '同比值' */bus.$i18nt.t('Edb.CalculatesAll.on_year'),
 		type:6
 	},
 	{
-		name:'同差值',
+		name:/* '同差值' */bus.$i18nt.t('Edb.CalculatesAll.differ'),
 		type:7
 	},
 	{
-		name:'N数值移动平均计算',
+		name:/* 'N数值移动平均计算' */bus.$i18nt.t('Edb.CalculatesAll.n_move_average'),
 		type:8
 	},
 	{
-		name:'N数值环比值',
+		name:/* 'N数值环比值' */bus.$i18nt.t('Edb.CalculatesAll.n_rate'),
 		type:12
 	},
 	{
-		name:'N数值环差值',
+		name:/* 'N数值环差值' */bus.$i18nt.t('Edb.CalculatesAll.n_differ'),
 		type:13
 	},
 	{
-		name:'升频',
+		name:/* '升频' */bus.$i18nt.t('Edb.CalculatesAll.up_conver'),
 		type:14
 	},
 	{
-		name:'累计值转月/季值',
+		name:/* '累计值转月/季值' */bus.$i18nt.t('Edb.CalculatesAll.to_month_quarter'),
 		type:'toMonthSeason'
 	},
 	{
-		name: '累计值',
+		name: /* '累计值' */bus.$i18nt.t('Edb.CalculatesAll.cumulate'),
 		type: 'accumulate'
 	},
 	{
-		name:'指数修匀',
+		name:/* '指数修匀' */bus.$i18nt.t('Edb.CalculatesAll.ex_smooth'),
 		type:'alpha'
 	},
 	{
-		name:'日均值',
+		name:/* '日均值' */bus.$i18nt.t('Edb.CalculatesAll.day_mean'),
 		type: 75
 	}
 ]
 
 //频度
-export const frequencyArr = ['日度','周度','旬度','月度','季度','年度']
+export const frequencyArr = ['日度','周度','旬度','月度','季度','年度'];
+
 //添加基础指标来源 已改为从接口获取 datamanage/edb_source/list
 export const fromArr = ['wind','同花顺','彭博','彭博财务','路透','手工指标','隆众指标','SMM','Mysteel','郑商所',
 '大商所','上期所','中金所','上期能源','欧洲天然气','中国煤炭市场网','谷歌出行指数','EIA STEO报告','UN','卓创数据(红桃3)',
@@ -230,259 +233,73 @@ export const allFromArr = [
 
 //公式说明 eta指标库
 export const formulaTip = new Map([
-	[4,`指标运算:<br>
-	1、选择指标参数<br>
-	2、生成指标的时间序列:以第一个指标为准,其他指标去匹配第一个指标的日期序列,没有值的,按照所选空值处理方式处理<br>
-	3、按照输入的计算公式进行计算`],
-	[5,`累计值转月值计算方法:<br>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:45%">1月无值:1月=2月/2</span>
-		<span style="width:40%">1月有值:1月=1月</span>
-	</p>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:40%">2月=2月/2</span>
-		<span style="width:40%">2月=2月-1月</span>
-	</p>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:40%">3月=3月-2月</span>
-		<span style="width:40%">3月=3月-2月</span>
-	</p>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:40%">4月=4月-3月</span>
-		<span style="width:40%">4月=4月-3月</span>
-	</p>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:40%">以此类推</span>
-		<span style="width:40%">以此类推</span>
-	</p>
-	<p>特别说明:若1月和2月均无值,则该年不做计算</p>`],
-	['toMonthSeason',`1、累计值转月值计算方法:<br>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:45%">1月无值:1月=2月/2</span>
-		<span style="width:40%">1月有值:1月=1月</span>
-	</p>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:40%">2月=2月/2</span>
-		<span style="width:40%">2月=2月-1月</span>
-	</p>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:40%">3月=3月-2月</span>
-		<span style="width:40%">3月=3月-2月</span>
-	</p>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:40%">4月=4月-3月</span>
-		<span style="width:40%">4月=4月-3月</span>
-	</p>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:40%">以此类推</span>
-		<span style="width:40%">以此类推</span>
-	</p>
-	<p>特别说明:若1月和2月均无值,则该年不做计算</p>
-	2、累计值转季值计算方法:<br>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:45%">1季度无值:1季度=2季度/2 </span>
-		<span style="width:40%">1季度有值:1季度=1季度</span>
-	</p>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:40%">2季度=2季度/2</span>
-		<span style="width:40%">2季度=2季度-1季度</span>
-	</p>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:40%">3季度=3季度-2季度</span>
-		<span style="width:40%">3季度=3季度-2季度</span>
-	</p>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:40%">4季度=4季度-3季度</span>
-		<span style="width:40%">4季度=4季度-3季度</span>
-	</p>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:40%">以此类推</span>
-		<span style="width:40%">以此类推</span>
-	</p>
-	<p>特别说明:若1季度和2季度均无值,则该年不做计算</p>`],
-	[6,`同比公式:今年同期/去年同期-1<br>
-	1、锁定当前数值对应的日期<br>
-	2、匹配上一年同期:寻找过去一年有数值的对应日期中,
-	与当前数值对应日期相等或者最为接近的那一天,如果有
-	两个日期与当前数值对应日期的距离相等,则取降序日期
-	排列下的第一个日期。<br>
-	3、取到匹配的上一年同期对应的数值<br>
-	4、将当期的数值与上一年匹配的同期的值计算比例<br>
-	5、将计算得到的比例填充至当前数值对应的日期,生成
-	新的数据序列<br>
-	6、遍历允许跨年,对于日度/周度/季度数据,遍历往前
-	最多35天,往后最多35天`],
-	[7,`同差公式:今年同期-去年同期<br>
-	1、锁定当前数值对应的日期<br>
-	2、匹配上一年同期:寻找过去一年有数值的对应日期中,
-	与当前数值对应日期相等或者最为接近的那一天,如果有
-	两个日期与当前数值对应日期的距离相等,则取降序日期
-	排列下的第一个日期。<br>
-	3、取到匹配的上一年同期对应的数值<br>
-	4、将当期的数值与上一年匹配的同期的值计算差值<br>
-	5、将计算得到的差值填充至当前数值对应的日期,生成
-	新的数据序列<br>
-	6、遍历允许跨年,对于日度/周度/季度数据,遍历往前
-	最多35天,往后最多35天`],
-	[8,`计算公式:=AVERAGE(N个数值的和),N为取数个数<br>
-	1、计算当前的数值的N值移动平均,则时间向前追溯
-	N个值(包括当前值),如果遇到空格值的日期,则自
-	动跳过空格数值,继续往前追溯<br>
-	2、如果当前日期对应的原始数据为空值,则N值移动
-	平均也为空值`],
-	[12,`环比公式:(当期-上期)/上期<br>
-	1、选择当期对应值,若是当期值为空,则环比值为空;若当期有值,上期值往 前遍历查询,默认N等于1,找最近的一个上期值;可根据设置的N值选择最 近的第N个上期值 <br>
-	2、将当期的数值与匹配到的上期值按照公式进行计算 <br>
-	3、将计算得到值填充至当期数值对应的日期,生成新的 数据序列<br>
-	4、原始数据中出现0和负值时,提示该指标不能进行环比运算`],
-	[13,`环差公式:当期-上期<br>
-	1、选择当期对应值,若是当期值为空,则环差值为空;若当期有值,上期值往 前遍历查询,默认N等于1,找最近的一个上期值;可根据设置的N值选择最 近的第N个上期值找到最近的一个上期值即可<br>
-	2、将当期的数值与匹配到的上期值按照公式进行计算<br>
-	3、将计算得到值填充至当期数值对应的日期,生成新的数据序列`],
-	[14,`升频:支持转换所有频度指标为日度指标<br>
-	1、规则:若将月度指标转换为日度指标,如当前月为9月,但9月数据还未更新,假设9月数据是9.30更新,则9.1~9.29的数据等于8.31的数据<br>
-	2、其他频度规则相同
-	`],
-	['joint',`1、直接拼接说明:将指标A和指标B按照选取的拼接日期进行拼接;<br>
-	2、累计值同比拼接说明:指标A最后一个12月31日有值的年份数据乘以指标B的同比增长率得到指标A下一年的数据,从指标A最后一个12月31日有值的日期开始拼接计算得到指标A下一年的数据;`],
-	[22,`时间移位:把数据的时间序列加(领先)减(滞后)相应的时间,形成新的数据系列。<br>例:<br>
-	<p>
-		领先10天,即将指标每个数据点的日期加10天。原始数据点(2022-1-1,100)将转化成(2022-1-11,100)
-	</p>
-	<p>
-		滞后1月,即将日期减30天,原始数据点(2022-1-1,100)将转化成(2021-12-2,100)
-	</p>`],
-	[35,`计算公式:现值 - AVERAGE(过去N年同期数值和),N为取数个数<br>
-	1、计算过去N年同期数值和,则时间向前追溯 N年(包括最新一年)<br>
-	2、参与计算的指标数据通过线性方程补全为日度的数据(包括周末)<br>
-	3、遇到闰二月,如2.29,去掉该天数据<br>
-	4、进行农历计算时,只计算11月--次年5月,如果当前月为12月,则取第二年的春节为时间位移标准点<br>
-	5、计算生成的结果的数据频度与原始指标频度保持一致
-	`],
-	[37,`拟合残差:计算一个指标(B)的实际值和拟合值(B’)的差值。拟合值B’由指标A(自变量)和指标B(因变量)通过线性回归拟合得到,具体算法如下:<br>
-	根据指标A(自变量)和指标B(因变量)过去一个时间段内(这个N期可以是从最新值往前倒退N期,包含最新,也可以是选取历史数据的一个时间段内的数据),生成线性回归方程 Y=aX+b<br>
-	由指标A(自变量)和拟合方程的系数a,b,计算得到拟合出来的系列B’=aA b 再计算拟合系列B’和原始系列B的差值得到新的数据系列Delta,Delta=B-B'
-	`],
-	[40,`数据调整:将所选指标的历史数据经过调整后保存,该指标更新时将在调整数据的基础上更新最新数据。<br>
-	注:系统只取A、B列数据,且调整数据的日期不得晚于指标的实际最新日期
-	`],
-	[52,`年化值=S / a (S表示指标数值,a表示年化平均占比)<br>
-	1、读取指标最新值对应的日期T和指标数值S<br>
-	2、计算该指标在过去三年日期T对应的值与当年最后一个日期对应的值的比值,即截止到日期T的累计值占全年值的比重<br>
-	3、计算三年的占比平均值,即过去三年平均占比a<br>
-	4、若历史数据不足三年,则至少按两年计算,少于两年不生成年化值<br>
-	5、如果某一年日期T没有值,则通过日期T前后的两个值,用线性插值法【(Y-Y1)/(X-X1)=(Y2-Y1)/(X2-X1)】计算得到日期T的值
-	`],
-	[51,`降频:将高频指标转换为低频指标,需选择转换的频度<br>
-	1、选择转换的频度,日度可以选择降频成周度、旬度、月度、季度、年度;周度可以选择降频成旬度、月度、季度、年度;旬度可以选择降频成月度、季度、年度;月度可降成季度、年度,季度可降成年度<br>
-	2、降频后数据日期,周度的降频数据系列日期取每周五;旬度取每月10日、20日、最后一日;月度取每月最后一天,季度取季度最后一天,年度取年度最后一天<br>
-	3、数据点取值提供两种选择:a、期末值,取区间最后一个日期的数据值。b、取区间平均值。<br>
-	4、最新值的处理:最新的高频数据,正好处于所要降频的低频的两个日期之间时,例如当前1月3号,1月已经有了数据,但1月31号还未到来,则降成月频数据时最新数据日期为1月31号`],
-	[53,`扩散指数:AVERAGE(所选指标环差指数和)<br>
-	1、选择多个指标,设定扩散指标日期并集<br>
-	2、所选指标在日期并集内有缺失值的用前期值填充<br>
-	3、计算日期并集内所选指标的每期环差指数(环差>0,取1,环差=0,取0.5,环差<0,取0),并计算环差指数均值`],
-	['accumulate',`1、累计值计算方法:<br>
-	日度转周度:日期选周五,计算上周六到本周五的日度值的加总,最新日期为最新值对应的周五。<br>
-	日度转月度:日期选每个月最后一天,计算当月所有日度值的加总,最新日期为最新值对应当月最后一天。<br>
-	日度转季度、年度:方法类似转月度。<br>
-	周度转月度/季度/年度:将周度值转成日度,空值用插值法插值,计算当月/当季/当年所有值的加总,然后除以7。<br>
-	月度转季度/年度: 当季/当年月度值相加。<br>
-	以此类推 特别说明:旬度指标可以转成更低频指标,更高频指标不能转成旬度<br>
-	2、年初至今计算方法:<br>
-	日度数据年初至今:日期同原日度数据。将每年1月1日(含)到日度数据所在日期(含)之间的日度值,进行加总。<br>
-	周度数据年初至今:日期同原周度数据。将周度值转成日度频率,空值用插值法插值,然后算法同日度年度至今,再除以7<br>
-	月度/季度数据年初至今:日期同原月度/季度数据,将每年1月1日(含)到月度数据所在日期(含)之间的月度/季度值,进行加总<br>
-	以此类推`],
-	[61,`累计值转季值计算方法:<br>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:45%">1季度无值:1季度=2季度/2 </span>
-		<span style="width:40%">1季度有值:1季度=1季度</span>
-	</p>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:40%">2季度=2季度/2</span>
-		<span style="width:40%">2季度=2季度-1季度</span>
-	</p>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:40%">3季度=3季度-2季度</span>
-		<span style="width:40%">3季度=3季度-2季度</span>
-	</p>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:40%">4季度=4季度-3季度</span>
-		<span style="width:40%">4季度=4季度-3季度</span>
-	</p>
-	<p style="display:flex;justify-content: space-between;">
-		<span style="width:40%">以此类推</span>
-		<span style="width:40%">以此类推</span>
-	</p>
-	<p>特别说明:若1季度和2季度均无值,则该年不做计算</p>`],
-	[62,`累计值计算方法:<br>
-	日度转周度:日期选周五,计算上周六到本周五的日度值的加总,最新日期为最新值对应的周五。<br>
-	日度转月度:日期选每个月最后一天,计算当月所有日度值的加总,最新日期为最新值对应当月最后一天。<br>
-	日度转季度、年度:方法类似转月度。<br>
-	周度转月度/季度/年度:将周度值转成日度,空值用插值法插值,计算当月/当季/当年所有值的加总,然后除以7。<br>
-	月度转季度/年度: 当季/当年月度值相加。<br>
-	以此类推 特别说明:旬度指标可以转成更低频指标,更高频指标不能转成旬度<br>`],
-	[63,`年初至今计算方法:<br>
-	日度数据年初至今:日期同原日度数据。将每年1月1日(含)到日度数据所在日期(含)之间的日度值,进行加总。<br>
-	周度数据年初至今:日期同原周度数据。将周度值转成日度频率,空值用插值法插值,然后算法同日度年度至今,再除以7<br>
-	月度/季度数据年初至今:日期同原月度/季度数据,将每年1月1日(含)到月度数据所在日期(含)之间的月度/季度值,进行加总<br>
-	以此类推`],
-	['alpha',`指数修匀计算公式:<br>
-	1、设定指数修匀值序列的初始值=原来时间序列的初始值 <br>
-	2、选择平滑系数alpha值:在0-1之间,开区间 <br>
-	3、本期指数修匀值=alpha*本期实际值+(1-alpha)*上期指数修匀值`],
-	[75,`日均值计算公式:<br>
-	1、年度值转日均值=年度值/对应年份天数 <br>
-	2、半年度值转日均值=半年度值/对应半年度天数 <br>
-	3、季度值转日均值=季度值/对应季度天数 <br>
-	4、月度值转日均值=月度值/对应月度天数 <br>
-	5、旬度值转日均值=旬度值/对应旬度天数 <br>
-	6、周度值转日均值=周度值/7`]
+	[4,bus.$i18nt.t('Edb.FormulaTips.calculate')], //指标运算
+	[5,bus.$i18nt.t('Edb.FormulaTips.to_month')], //累计转月
+	['toMonthSeason',bus.$i18nt.t('Edb.FormulaTips.to_month_quarter')], //累计转月、转季
+	[6,bus.$i18nt.t('Edb.FormulaTips.on_year')], //同比
+	[7,bus.$i18nt.t('Edb.FormulaTips.differ')], //同差
+	[8,bus.$i18nt.t('Edb.FormulaTips.n_move_average')], //n数值移动平均 
+	[12,bus.$i18nt.t('Edb.FormulaTips.n_rate')], //n数值环比
+	[13,bus.$i18nt.t('Edb.FormulaTips.n_differ')],//n数值环差
+	[14,bus.$i18nt.t('Edb.FormulaTips.up_conver')], //升频
+	['joint',bus.$i18nt.t('Edb.FormulaTips.splic')], //指标拼接
+	[22,bus.$i18nt.t('Edb.FormulaTips.time_move')], //时间移位
+	[35,bus.$i18nt.t('Edb.FormulaTips.super_season')], //超季节性
+	[37,bus.$i18nt.t('Edb.FormulaTips.fit_residu')], //拟合残差
+	[40,bus.$i18nt.t('Edb.FormulaTips.adjust_data')], //数据调整
+	[52,bus.$i18nt.t('Edb.FormulaTips.annual')], //年化
+	[51,bus.$i18nt.t('Edb.FormulaTips.down_conver')], //降频
+	[53,bus.$i18nt.t('Edb.FormulaTips.diff_index')], //扩散指数
+	['accumulate',bus.$i18nt.t('Edb.FormulaTips.cumulate_and_toyear')], //累计值、年初至今累计
+	[61,bus.$i18nt.t('Edb.FormulaTips.to_quarter')], //累计转季
+	[62,bus.$i18nt.t('Edb.FormulaTips.cumulate_val')], //累计值
+	[63,bus.$i18nt.t('Edb.FormulaTips.cumulate_to_year')], //年初至今累计值
+	['alpha',bus.$i18nt.t('Edb.FormulaTips.ex_smooth')], //指数修匀
+	[75,bus.$i18nt.t('Edb.FormulaTips.day_mean')], //日均值
 ])
 
 // wind 日期序列常见指标代码
 export const windCommonIndexCodeArr=[
-	{value:'pre_close',label:"前收盘价"},
-	{value:'open',label:"开盘价"},
-	{value:'high',label:"最高价"},
-	{value:'low',label:"最低价"},
-	{value:'close',label:"收盘价"},
-	{value:'settle',label:"结算价"},
-	{value:'volume',label:"成交量"},
-	{value:'amt',label:"成交额"},
-	{value:'pct_chg',label:"涨跌幅"},
-	{value:'swing',label:"振幅"},
-	{value:'turn',label:"换手率"},
-	{value:'oi',label:"持仓量"},
-	{value:'oiamount',label:"持仓额"}
+	{value:'pre_close',label:bus.$i18nt.t('EtaBasePage.pre_price')},
+	{value:'open',label:bus.$i18nt.t('EtaBasePage.pre_price')/* "开盘价" */},
+	{value:'high',label:bus.$i18nt.t('EtaBasePage.high_price')/* "最高价" */},
+	{value:'low',label:bus.$i18nt.t('EtaBasePage.low_price')/* "最低价" */},
+	{value:'close',label:bus.$i18nt.t('EtaBasePage.close_price')/* "收盘价" */},
+	{value:'settle',label:bus.$i18nt.t('EtaBasePage.settle_price')/* "结算价" */},
+	{value:'volume',label:bus.$i18nt.t('EtaBasePage.trade_volume')/* "成交量" */},
+	{value:'amt',label:bus.$i18nt.t('EtaBasePage.turnover')/* "成交额" */},
+	{value:'pct_chg',label:bus.$i18nt.t('EtaBasePage.incre_decre')/* "涨跌幅" */},
+	{value:'swing',label:bus.$i18nt.t('EtaBasePage.fluctua')/* "振幅" */},
+	{value:'turn',label:bus.$i18nt.t('EtaBasePage.turn_rate')/* "换手率" */},
+	{value:'oi',label:bus.$i18nt.t('EtaBasePage.open_inter')/* "持仓量" */},
+	{value:'oiamount',label:bus.$i18nt.t('EtaBasePage.open_val')/* "持仓额" */}
 ]
 
 // 同花顺 日期序列常见 股票指标代码
 export const THSCommonIndexStockCodeArr=[
-	{value:'ths_pre_close_stock',label:"前收盘价"},
-	{value:'ths_open_price_stock',label:"开盘价"},
-	{value:'ths_high_price_stock',label:"最高价"},
-	{value:'ths_low_stock',label:"最低价"},
-	{value:'ths_close_price_stock',label:"收盘价"},
-	{value:'ths_vol_stock',label:"成交量"},
-	{value:'ths_amt_stock',label:"成交额"},
-	{value:'ths_chg_ratio_stock',label:"涨跌幅"},
-	{value:'ths_swing_stock',label:"振幅"},
-	{value:'ths_turnover_ratio_stock',label:"换手率"},
+	{value:'ths_pre_close_stock',label:bus.$i18nt.t('EtaBasePage.pre_price')/* "前收盘价" */},
+	{value:'ths_open_price_stock',label:bus.$i18nt.t('EtaBasePage.op_price')/* "开盘价" */},
+	{value:'ths_high_price_stock',label:bus.$i18nt.t('EtaBasePage.high_price')/* "最高价" */},
+	{value:'ths_low_stock',label:bus.$i18nt.t('EtaBasePage.low_price')/* "最低价" */},
+	{value:'ths_close_price_stock',label:bus.$i18nt.t('EtaBasePage.close_price')/* "收盘价" */},
+	{value:'ths_vol_stock',label:bus.$i18nt.t('EtaBasePage.trade_volume')/* "成交量" */},
+	{value:'ths_amt_stock',label:bus.$i18nt.t('EtaBasePage.turnover')/* "成交额" */},
+	{value:'ths_chg_ratio_stock',label:bus.$i18nt.t('EtaBasePage.incre_decre')/* "涨跌幅" */},
+	{value:'ths_swing_stock',label:bus.$i18nt.t('EtaBasePage.fluctua')/* "振幅" */},
+	{value:'ths_turnover_ratio_stock',label:bus.$i18nt.t('EtaBasePage.turn_rate')/* "换手率" */},
 ]
 
 // 同花顺 日期序列常见 指标代码
 export const THSCommonIndexFuturesCodeArr=[
-	{value:'ths_pre_close_future',label:"前收盘价"},
-	{value:'ths_open_price_future',label:"开盘价"},
-	{value:'ths_high_price_future',label:"最高价"},
-	{value:'ths_low_future',label:"最低价"},
-	{value:'ths_close_price_future',label:"收盘价"},
-	{value:'ths_settle_future',label:"结算价"},
-	{value:'ths_vol_future',label:"成交量"},
-	{value:'ths_amt_future',label:"成交额"},
-	{value:'ths_chg_ratio_future',label:"涨跌幅"},
-	{value:'ths_swing_d_future',label:"日振幅"},
-	{value:'ths_open_interest_future',label:"持仓量"},
+	{value:'ths_pre_close_future',label:bus.$i18nt.t('EtaBasePage.pre_price')/* "前收盘价" */},
+	{value:'ths_open_price_future',label:bus.$i18nt.t('EtaBasePage.op_price')/* "开盘价" */},
+	{value:'ths_high_price_future',label:bus.$i18nt.t('EtaBasePage.high_price')/* "最高价" */},
+	{value:'ths_low_future',label:bus.$i18nt.t('EtaBasePage.low_price')/* "最低价" */},
+	{value:'ths_close_price_future',label:bus.$i18nt.t('EtaBasePage.close_price')/* "收盘价" */},
+	{value:'ths_settle_future',label:bus.$i18nt.t('EtaBasePage.settle_price')/* "结算价" */},
+	{value:'ths_vol_future',label:bus.$i18nt.t('EtaBasePage.trade_volume')/* "成交量" */},
+	{value:'ths_amt_future',label:bus.$i18nt.t('EtaBasePage.turnover')/* "成交额" */},
+	{value:'ths_chg_ratio_future',label:bus.$i18nt.t('EtaBasePage.incre_decre')/* "涨跌幅" */},
+	{value:'ths_swing_d_future',label:bus.$i18nt.t('EtaBasePage.fluctua_day')/* "日振幅" */},
+	{value:'ths_open_interest_future',label:bus.$i18nt.t('EtaBasePage.open_inter')/* "持仓量" */},
 ]

+ 24 - 24
src/views/dataEntry_manage/databaseList.vue

@@ -3,15 +3,15 @@
 		<div class="database_top">
 			<div class="top-left">
 				<el-button v-permission="permissionBtn.edbDataPermission.edbData_addEdb"
-					type="primary" @click="addHandler">{{$t('EtaBasePage.add_edb_btn')}}</el-button>
+					type="primary" @click="addHandler"><!-- 添加指标 -->{{$t('EtaBasePage.add_edb_btn')}}</el-button>
 				<el-button v-permission="permissionBtn.edbDataPermission.edbData_calcuEdb"
-					type="primary" @click="addComputedHandler">{{$t('EtaBasePage.calculation_edb_btn')}}</el-button>
+					type="primary" @click="addComputedHandler"><!-- 计算指标 -->{{$t('EtaBasePage.calculation_edb_btn')}}</el-button>
 				<el-button v-permission="permissionBtn.edbDataPermission.edbData_replaceEdb"
-					type="primary" @click="replaceEdbHandler">{{$t('EtaBasePage.replace_edb_btn')}}</el-button>
+					type="primary" @click="replaceEdbHandler"><!-- 替换指标 -->{{$t('EtaBasePage.replace_edb_btn')}}</el-button>
 				<el-button v-permission="permissionBtn.edbDataPermission.edbData_codeRun"
-					type="primary" @click="$router.push({path: '/codecount'})">{{$t('EtaBasePage.algorithm_btn')}}</el-button>
+					type="primary" @click="$router.push({path: '/codecount'})"><!-- 代码运算 -->{{$t('EtaBasePage.algorithm_btn')}}</el-button>
 				<el-button v-permission="permissionBtn.edbDataPermission.edbData_dataAdjust"
-					type="primary" @click="$router.push({path: '/adjustdata'})">{{$t('EtaBasePage.adjustment_btn')}}</el-button>
+					type="primary" @click="$router.push({path: '/adjustdata'})"><!-- 数据调整 -->{{$t('EtaBasePage.adjustment_btn')}}</el-button>
 				<!-- <el-button v-permission="permissionBtn.edbDataPermission.edbData_batchUpdate"
 					type="primary" plain @click="updateHandler">一键刷新</el-button> -->
 			</div>
@@ -198,7 +198,7 @@
 			</div>
 			<!-- 指标图表列表 -->
 			<div class="main-right right list" id="right" v-show="isShowList">
-				<p>{{Total||0}}个指标</p>
+				<p>{{$t('EtaBasePage.total_show',{limit: Total||0})}}</p>
 				<div class="list-wrap" ref="listRef" @scroll="loadMoreHandle" v-if="Total">
 					<div class="chart-list-item-wrap">
 						<div class="list-item" v-for="item in chartList" :key="item.EdbInfoId">
@@ -211,14 +211,14 @@
 								<!-- <img :src="item.ChartImage"/> -->
 							</div>
 							<div class="info">
-								创建时间:{{item.CreateTime.substring(0,10)}}
+								{{$t('EtaBasePage.time_show')}}:{{item.CreateTime.substring(0,10)}}
 							</div>
 						</div>
 					</div>
 					
 				</div>
 				<div v-if="!Total" class="nodata">
-					<tableNoData text="暂无指标"/>
+					<tableNoData :text="$t('Table.no_edb_msg')"/>
 				</div>
 			</div>
 			<!-- 指标详情 -->
@@ -279,14 +279,14 @@
 								ref="createChart"
 								@editEnName="openEnNameDia"/>
 							<div class="info">
-								<span>{{$t('Edb.source')}}:{{EdbData.SourceName}}</span>
-								<span>{{$t('Edb.Creator')}}:{{EdbData.SysUserRealName}}</span>
+								<span>{{$t('Edb.Detail.source')}}:{{EdbData.SourceName}}</span>
+								<span>{{$t('Edb.creater')}}:{{EdbData.SysUserRealName}}</span>
 							</div>
 							<ul class="value-ul"
 								v-show="showTable&&dataList.length">
 								<li class="value-item" style="background-color: #EBEFF6;">
-									<span style="width:240px">{{$t('Edb.e_date')}}({{$t('Edb.e_fre')}}:{{EdbData.Frequency}})</span>
-									<span style="flex:1;">{{$t('Edb.e_value')}}</span>
+									<span style="width:240px">{{$t('Edb.Detail.e_date')}}({{$t('Edb.Detail.e_fre')}}:{{EdbData.Frequency}})</span>
+									<span style="flex:1;">{{$t('Edb.Detail.e_value')}}</span>
 								</li>
 								<li class="value-item"
 									v-for="item in dataList.slice(0,3)"
@@ -301,7 +301,7 @@
 										<span :class="['value-style',{'predict-act': EdbData.DataInsertConfig.Date===item.DataTime}]">{{item.Value}}</span>
 									</span>
 								</li>
-								<li class="nodata value-item" v-if="!dataList.length">暂无数据</li>
+								<li class="nodata value-item" v-if="!dataList.length"><!-- 暂无数据 -->{{$t('Table.prompt_slogan')}}</li>
 							</ul>
 						</div>
 						<div class="list" v-show="activeTab==='Data'">
@@ -371,8 +371,8 @@
 		v-dialogDrag>
 			<div class="dialog-computed-header">
 				<el-radio-group v-model="computed_source" size="medium" @change="computed_type = 0">
-					<el-radio-button :label="1">常规计算</el-radio-button>
-					<el-radio-button :label="2">批量计算</el-radio-button>
+					<el-radio-button :label="1"><!-- 常规计算 -->{{$t('EtaBasePage.normal_calculate_tab')}}</el-radio-button>
+					<el-radio-button :label="2"><!-- 批量计算 -->{{$t('EtaBasePage.batch_calculate_tab')}}</el-radio-button>
 				</el-radio-group>
 			</div>
 			<ul class="computed-ul">
@@ -385,7 +385,7 @@
 
 					<el-popover
 						placement="top-start"
-						width="450"
+						width="500"
 						trigger="hover"
 						v-if="tips.get(item.type)"
 					>
@@ -597,25 +597,25 @@ export default {
 			/*表格列 */
 			tableColumsOne: [
 				{
-					label: this.$t('Edb.e_id'),
+					label: this.$t('Edb.Detail.e_id'),
 					key: 'EdbCode',
 					minwidthsty: '150px'
 				},
 				{
-					label: this.$t('Edb.e_name'),
+					label: this.$t('Edb.Detail.e_name'),
 					key: 'EdbName',
 					enKey:'EdbNameEn',
 					inputTip:'点击输入英文指标名称',
 					minwidthsty: '200px'
 				},
 				{
-					label: this.$t('Edb.e_fre'),
+					label: this.$t('Edb.Detail.e_fre'),
 					key: 'Frequency',
 					enKey:'FrequencyEn',
 					widthsty: '100px'
 				},
 				{
-					label: this.$t('Edb.e_unit'),
+					label: this.$t('Edb.Detail.e_unit'),
 					key: 'Unit',
 					enKey:'UnitEn',
 					inputTip:'英文单位',
@@ -623,24 +623,24 @@ export default {
 					widthsty: '100px'
 				},
 				{
-					label: this.$t('Edb.source'),
+					label: this.$t('Edb.Detail.source'),
 					key: 'SourceName',
 					widthsty: '160px'
 				},
 			],
 			tableColumsTwo: [
 				{
-					label: this.$t('Edb.e_menu'),
+					label: this.$t('Edb.Detail.e_menu'),
 					key: 'Menu',
 					minwidthsty: '150px',
 				},
 				{
-					label: this.$t('Edb.e_start_time'),
+					label: this.$t('Edb.Detail.e_start_time'),
 					key: 'StartDate',
 					minwidthsty: '115px',
 				},
 				{
-					label: this.$t('Edb.e_update_time'),
+					label: this.$t('Edb.Detail.e_update_time'),
 					key: 'ModifyTime',
 					minwidthsty: '120px',
 				},

+ 106 - 51
src/views/dataEntry_manage/mixins/chartPublic.js

@@ -78,57 +78,57 @@ export const chartSetMixin = {
         '周': 'W',
         '天': 'D',
       },
-      tableColums: [
-        {
-          label: '指标名称',
-          key: 'EdbName',
-          enKey:'EdbNameEn',
-					inputTip:'点击输入英文指标名称',
-          minwidthsty: '150px',
-        },
-        {
-          label: '指标ID',
-          key: 'EdbCode',
-          widthsty: '120px',
-        },
-        {
-          label: '更新频度',
-          key: 'Frequency',
-          enKey:'FrequencyEn',
-          minwidthsty: '60px',
-        },
-        {
-          label: '单位',
-          key: 'Unit',
-          enKey:'UnitEn',
-					inputTip:'英文单位',
-          minwidthsty: '50px',
-        },
-        {
-          label: '起始时间',
-          key: 'StartDate',
-          minwidthsty: '100px',
-        },
-        {
-          label: '最新日期',
-          key: 'LatestDate',
-          minwidthsty: '90px',
-        },
-        {
-          label: '最新值',
-          key: 'LatestValue',
-          minwidthsty: '90px',
-        },
-        {
-          label: '最近更新',
-          key: 'ModifyTime',
-          minwidthsty: '100px',
-        },
-        {
-          label: '数据来源',
-          key: 'SourceName',
-        },
-      ],//表格列
+      // tableColums: [
+      //   {
+      //     label: '指标名称',
+      //     key: 'EdbName',
+      //     enKey:'EdbNameEn',
+			// 		inputTip:'点击输入英文指标名称',
+      //     minwidthsty: '150px',
+      //   },
+      //   {
+      //     label: '指标ID',
+      //     key: 'EdbCode',
+      //     widthsty: '120px',
+      //   },
+      //   {
+      //     label: '更新频度',
+      //     key: 'Frequency',
+      //     enKey:'FrequencyEn',
+      //     minwidthsty: '60px',
+      //   },
+      //   {
+      //     label: '单位',
+      //     key: 'Unit',
+      //     enKey:'UnitEn',
+			// 		inputTip:'英文单位',
+      //     minwidthsty: '50px',
+      //   },
+      //   {
+      //     label: '起始时间',
+      //     key: 'StartDate',
+      //     minwidthsty: '100px',
+      //   },
+      //   {
+      //     label: '最新日期',
+      //     key: 'LatestDate',
+      //     minwidthsty: '90px',
+      //   },
+      //   {
+      //     label: '最新值',
+      //     key: 'LatestValue',
+      //     minwidthsty: '90px',
+      //   },
+      //   {
+      //     label: '最近更新',
+      //     key: 'ModifyTime',
+      //     minwidthsty: '100px',
+      //   },
+      //   {
+      //     label: '数据来源',
+      //     key: 'SourceName',
+      //   },
+      // ],//表格列
       tableData: [],//表格指标数据
 			options: {}, //配置options
       leftIndex: -1, //左侧上下限对应下标
@@ -195,6 +195,61 @@ export const chartSetMixin = {
       radarChartData: {}
 		}
 	},
+  computed:{
+    tableColums(){
+      return [
+        {
+          label: this.$t('Edb.Detail.e_name'),
+          key: 'EdbName',
+          enKey:'EdbNameEn',
+					inputTip:'点击输入英文指标名称',
+          minwidthsty: '150px',
+        },
+        {
+          label: this.$t('Edb.Detail.e_id'),
+          key: 'EdbCode',
+          widthsty: '120px',
+        },
+        {
+          label: this.$t('Edb.Detail.e_fre'),
+          key: 'Frequency',
+          enKey:'FrequencyEn',
+          minwidthsty: '60px',
+        },
+        {
+          label: this.$t('Edb.Detail.e_unit'),
+          key: 'Unit',
+          enKey:'UnitEn',
+					inputTip:'英文单位',
+          minwidthsty: '50px',
+        },
+        {
+          label: this.$t('Edb.Detail.e_start_time'),
+          key: 'StartDate',
+          minwidthsty: '100px',
+        },
+        {
+          label: this.$t('Edb.Detail.e_latest_date'),
+          key: 'LatestDate',
+          minwidthsty: '90px',
+        },
+        {
+          label: this.$t('Edb.Detail.e_latest_value'),
+          key: 'LatestValue',
+          minwidthsty: '90px',
+        },
+        {
+          label: this.$t('Edb.Detail.e_recent_time'),
+          key: 'ModifyTime',
+          minwidthsty: '100px',
+        },
+        {
+          label: this.$t('Edb.Detail.source'),
+          key: 'SourceName',
+        },
+      ]
+    }
+  },
   watch: {
     
     /* 奇怪柱状图数据  */

+ 19 - 10
src/views/datasheet_manage/components/sheetClassifyDia.vue

@@ -16,21 +16,21 @@
 				ref="diaForm"
 				label-position="left"
 				hide-required-asterisk
-				label-width="80px"
+				label-width="150px"
 				:model="formData"
 				:rules="formRules">
 				
-          <el-form-item label="分类名称" prop="classify_name">
+          <el-form-item :label="$t('Chart.classify_name_label')" prop="classify_name">
             <el-input
             v-model="formData.classify_name"
             style="width: 80%"
-            placeholder="必填项"></el-input>
+            placeholder=""></el-input>
           </el-form-item>
 				</el-form>
 			</div>
 			<div class="dia-bot">
-				<el-button type="primary" style="margin-right:20px" @click="saveHandle">保存</el-button>
-				<el-button type="primary" plain @click="cancelHandle">取消</el-button>
+				<el-button type="primary" style="margin-right:20px" @click="saveHandle">{{$t('Dialog.confirm_save_btn')}}</el-button>
+				<el-button type="primary" plain @click="cancelHandle">{{$t('Dialog.cancel_btn')}}</el-button>
 			</div>
 		</el-dialog>
 	</div>
@@ -64,14 +64,23 @@ export default {
 			}
 		}
 	},
+	computed:{
+		formRules(){
+			return {
+				classify_name:[
+					{ required: true, message: this.$t('StatisticAnalysis.ChartRelevance.classify_name_tips'), trigger: 'blur' },
+				]
+			}
+		}
+	},
 	data () {
 		return {			
 			formData: {},
-      formRules: {
-        classify_name:[
-          { required: true, message: '分类名称不能为空', trigger: 'blur' },
-        ]
-      },
+    //   formRules: {
+    //     classify_name:[
+    //       { required: true, message: '分类名称不能为空', trigger: 'blur' },
+    //     ]
+    //   },
 
 		};
 	},

+ 66 - 37
src/views/system_manage/chartTheme/components/optionsSection.vue

@@ -8,7 +8,7 @@
              <!-- 线条设置 -->
             <template v-if="key==='lineOptions'">
                 <li class="option-item">
-                  <label class="el-form-item__label">颜色</label>
+                  <label class="el-form-item__label">{{$t('SystemManage.ChartSet.config_opt01')}}</label>
                   <el-color-picker
                     v-model="themeOptions[key].colors[themeOptions[key].colorIndex]"
                     show-alpha
@@ -18,7 +18,7 @@
                   />
                 </li>
                 <li class="option-item">
-                  <label class="el-form-item__label">顺序</label>
+                  <label class="el-form-item__label">{{$t('SystemManage.ChartSet.config_opt02')}}</label>
                   <el-select 
                     v-model="themeOptions[key].colorIndex"
                     style="width: 90px"
@@ -26,7 +26,7 @@
                     <el-option 
                       v-for="(item,index) in themeOptions[key].colors" 
                       :key="index"
-                      :label="`第${index+1}${typeLabelMap[chartType].lineLabel}`"
+                      :label="`${$i18n.locale == 'zh'?'':''}${index+1}${typeLabelMap[chartType].lineLabel}`"
                       :value="index"
                     />
                   </el-select>
@@ -35,7 +35,7 @@
                 <!-- 曲线额外配置 雷达 -->
                 <template v-if="[1,2,11].includes(chartType)">
                   <li class="option-item">
-                    <label class="el-form-item__label">线型</label>
+                    <label class="el-form-item__label">{{$t('SystemManage.ChartSet.config_opt03')}}</label>
                     <el-select 
                       v-model="themeOptions[key].dashStyle"
                       style="width: 90px"
@@ -52,7 +52,7 @@
                     </el-select>
                   </li>
                   <li class="option-item">
-                    <label class="el-form-item__label">粗细</label>
+                    <label class="el-form-item__label">{{$t('SystemManage.ChartSet.config_opt04')}}</label>
                     <el-input
                       v-model="themeOptions[key].lineWidth"
                       style="width: 90px"
@@ -62,7 +62,7 @@
                     />
                   </li>
                   <li class="option-item">
-                    <label class="el-form-item__label">平滑线</label>
+                    <label class="el-form-item__label">{{$t('SystemManage.ChartSet.config_opt05')}}</label>
                     <el-select 
                       v-model="themeOptions[key].lineType"
                       style="width: 90px"
@@ -76,7 +76,7 @@
                 <!-- 散点额外配置 -->
                 <template v-else-if="[5,10].includes(chartType)">
                   <li class="option-item">
-                    <label class="el-form-item__label">大小</label>
+                    <label class="el-form-item__label">{{$t('SystemManage.ChartSet.config_opt06')}}</label>
                     <el-input
                       v-model="themeOptions[key].radius"
                       style="width: 90px"
@@ -91,7 +91,7 @@
              <!-- 图例设置 -->
             <template v-else-if="key==='legendOptions'">
                 <li class="option-item">
-                  <label class="el-form-item__label">颜色</label>
+                  <label class="el-form-item__label">{{$t('SystemManage.ChartSet.config_opt01')}}</label>
                   <el-color-picker
                     v-model="themeOptions[key].itemStyle.color"
                     show-alpha
@@ -100,7 +100,7 @@
                   />
                 </li>
                 <li class="option-item">
-                  <label class="el-form-item__label">位置</label>
+                  <label class="el-form-item__label">{{$t('SystemManage.ChartSet.config_opt07')}}</label>
                   <el-select 
                     v-model="themeOptions[key].verticalAlign"
                     style="width: 90px"
@@ -114,7 +114,7 @@
                   </el-select>
                 </li>
                 <li class="option-item">
-                  <label class="el-form-item__label">字号</label>
+                  <label class="el-form-item__label">{{$t('SystemManage.ChartSet.config_opt08')}}</label>
                   <el-input
                     v-model="themeOptions[key].itemStyle.fontSize"
                     style="width: 90px"
@@ -128,7 +128,7 @@
             <!-- 标题设置 -->
             <template v-else-if="key==='titleOptions'">
                 <li class="option-item">
-                  <label class="el-form-item__label">颜色</label>
+                  <label class="el-form-item__label">{{$t('SystemManage.ChartSet.config_opt01')}}</label>
                   <el-color-picker
                     v-model="themeOptions[key].style.color"
                     show-alpha
@@ -137,7 +137,7 @@
                   />
                 </li>
                 <li class="option-item">
-                  <label class="el-form-item__label">字号</label>
+                  <label class="el-form-item__label">{{$t('SystemManage.ChartSet.config_opt08')}}</label>
                   <el-input
                     v-model="themeOptions[key].style.fontSize"
                     style="width: 90px"
@@ -147,7 +147,7 @@
                   />
                 </li>
                 <li class="option-item">
-                  <label class="el-form-item__label">对齐方式</label>
+                  <label class="el-form-item__label">{{$t('SystemManage.ChartSet.config_opt09')}}</label>
                   <el-radio-group v-model="themeOptions[key].align" size="small">
                     <el-radio-button 
                       v-for="item in alignPositions" 
@@ -164,7 +164,7 @@
             <!-- 标记文字 横轴 纵轴设置 -->
             <template v-else-if="['markerOptions','xAxisOptions','yAxisOptions'].includes(key)">
                 <li class="option-item">
-                  <label class="el-form-item__label">颜色</label>
+                  <label class="el-form-item__label">{{$t('SystemManage.ChartSet.config_opt01')}}</label>
                   <el-color-picker
                     v-model="themeOptions[key].style.color"
                     show-alpha
@@ -173,7 +173,7 @@
                   />
                 </li>
                 <li class="option-item">
-                  <label class="el-form-item__label">字号</label>
+                  <label class="el-form-item__label">{{$t('SystemManage.ChartSet.config_opt08')}}</label>
                   <el-input
                     v-model="themeOptions[key].style.fontSize"
                     style="width: 90px"
@@ -187,7 +187,7 @@
             <!-- 绘图区设置 -->
             <template v-else-if="key==='drawOption'">
                 <li class="option-item">
-                  <label class="el-form-item__label">背景色</label>
+                  <label class="el-form-item__label">{{$t('SystemManage.ChartSet.config_opt10')}}</label>
                   <el-color-picker
                     v-model="themeOptions[key].plotBackgroundColor"
                     show-alpha
@@ -214,6 +214,32 @@ export default {
     chartType() {
     }
   },
+  computed:{
+    labelMap(){
+      return new Map([
+        ['lineOptions',this.$t('SystemManage.ChartSet.opt_label01')],
+        ['scatterOptions',this.$t('SystemManage.ChartSet.opt_label02')],
+        ['legendOptions',this.$t('SystemManage.ChartSet.opt_label03')],
+        ['titleOptions',this.$t('SystemManage.ChartSet.opt_label04')],
+        ['markerOptions',this.$t('SystemManage.ChartSet.opt_label05')],
+        ['xAxisOptions',this.$t('SystemManage.ChartSet.opt_label06')],
+        ['yAxisOptions',this.$t('SystemManage.ChartSet.opt_label07')],
+        ['drawOption',this.$t('SystemManage.ChartSet.opt_label08')],
+      ])
+    },
+    typeLabelMap(){
+      return {
+        1: {label:this.$t('SystemManage.ChartSet.opt_label01'),lineLabel: this.$t('SystemManage.ChartSet.unit01')},
+        2: {label:this.$t('SystemManage.ChartSet.opt_label01'),lineLabel: this.$t('SystemManage.ChartSet.unit01')},
+        4: {label:this.$t('SystemManage.ChartSet.opt_label09'),lineLabel: this.$t('SystemManage.ChartSet.unit02')},
+        5: {label:this.$t('SystemManage.ChartSet.opt_label02'),lineLabel: this.$t('SystemManage.ChartSet.unit03')},
+        6: {label:this.$t('SystemManage.ChartSet.opt_label10'),lineLabel: this.$t('SystemManage.ChartSet.unit03')},
+        7: {label:this.$t('SystemManage.ChartSet.opt_label09'),lineLabel: this.$t('SystemManage.ChartSet.unit02')},
+        10: {label:this.$t('SystemManage.ChartSet.opt_label02'),lineLabel: this.$t('SystemManage.ChartSet.unit03')},
+        11: {label:this.$t('SystemManage.ChartSet.opt_label01'),lineLabel: this.$t('SystemManage.ChartSet.unit01')},
+      }
+    }
+  },
   data() {
     return {
       predefineColors,
@@ -238,26 +264,26 @@ export default {
         drawOption: defaultETAOptions.drawOption
       },
       lengendPositions: verticalPositions.filter(_ => _.value!=='middle'),
-      typeLabelMap: {
-        1: {label:'线条设置',lineLabel: '条'},
-        2: {label:'线条设置',lineLabel: '条'},
-        4: {label:'柱形设置',lineLabel: '根'},
-        5: {label:'散点设置',lineLabel: '系列'},
-        6: {label:'线条、柱形设置',lineLabel: '系列'},
-        7: {label:'柱形设置',lineLabel: '根'},
-        10: {label:'散点设置',lineLabel: '系列'},
-        11: {label:'线条设置',lineLabel: '条'},
-      },
-      labelMap: new Map([
-        ['lineOptions','线条设置'],
-        ['scatterOptions','散点设置'],
-        ['legendOptions','图例设置'],
-        ['titleOptions','标题设置'],
-        ['markerOptions','标记文字设置(来源,标识)'],
-        ['xAxisOptions','横轴设置'],
-        ['yAxisOptions','纵轴设置'],
-        ['drawOption','绘图区设置'],
-      ]),
+      // typeLabelMap: {
+      //   1: {label:'线条设置',lineLabel: '条'},
+      //   2: {label:'线条设置',lineLabel: '条'},
+      //   4: {label:'柱形设置',lineLabel: '根'},
+      //   5: {label:'散点设置',lineLabel: '系列'},
+      //   6: {label:'线条、柱形设置',lineLabel: '系列'},
+      //   7: {label:'柱形设置',lineLabel: '根'},
+      //   10: {label:'散点设置',lineLabel: '系列'},
+      //   11: {label:'线条设置',lineLabel: '条'},
+      // },
+      // labelMap: new Map([
+      //   ['lineOptions','线条设置'],
+      //   ['scatterOptions','散点设置'],
+      //   ['legendOptions','图例设置'],
+      //   ['titleOptions','标题设置'],
+      //   ['markerOptions','标记文字设置(来源,标识)'],
+      //   ['xAxisOptions','横轴设置'],
+      //   ['yAxisOptions','纵轴设置'],
+      //   ['drawOption','绘图区设置'],
+      // ]),
       configOptions: []
     }
   },
@@ -307,6 +333,8 @@ export default {
     margin-top: 20px;
     .option-item {
       margin: 10px 0;
+      display: flex;
+      align-items: center;
     }
   }
   .option-title{
@@ -321,8 +349,9 @@ export default {
     }
   }
   .el-form-item__label {
-    width: 70px;
+    width: 90px;
     text-align: left;
+    line-height: 1.5;
   }
 }
 </style>

+ 18 - 18
src/views/system_manage/chartTheme/index.vue

@@ -4,7 +4,7 @@
       <div style="display: flex;gap:20px;">
         <div class="select-item">
           <div class="select-item">
-            <label>图表类型</label>
+            <label>{{$t('SystemManage.ChartSet.label01')}}</label>
             <el-select v-model="formData.chartType" style="margin-left: 15px;" @change="getThemeList();">
               <el-option
                 v-for="item in chartTypeOpts"
@@ -16,7 +16,7 @@
           </div>
         </div>
         <div class="select-item">
-          <label>ETA图库默认主题</label>
+          <label>{{$t('SystemManage.ChartSet.label02')}}</label>
           <el-select v-model="formData.theme" style="margin-left: 10px;">
             <el-option
               v-for="item in themeOpts"
@@ -28,7 +28,7 @@
         </div>
       </div>
 
-      <el-button type="primary" v-permission="permissionBtn.chartThemePermission.chartTheme_edit" @click="setConfigTheme">保存</el-button>
+      <el-button type="primary" v-permission="permissionBtn.chartThemePermission.chartTheme_edit" @click="setConfigTheme">{{$t('Dialog.confirm_save_btn')}}</el-button>
     </div>
 
     <!-- 主题列表 -->
@@ -43,8 +43,8 @@
             <div slot="header" class="item-top">
               <span class="text_oneLine">{{item.ChartThemeName}}</span>
               <div>
-                <el-button type="text" @click="editThemeHandle(item)" v-permission="permissionBtn.chartThemePermission.chartTheme_edit">编辑</el-button>
-                <span class="deletesty" @click="delThemeHandle(item,index)" v-permission="permissionBtn.chartThemePermission.chartTheme_del" v-if="!item.IsSystemTheme">删除</span>
+                <el-button type="text" @click="editThemeHandle(item)" v-permission="permissionBtn.chartThemePermission.chartTheme_edit">{{$t('Table.edit_btn')}}</el-button>
+                <span class="deletesty" @click="delThemeHandle(item,index)" v-permission="permissionBtn.chartThemePermission.chartTheme_del" v-if="!item.IsSystemTheme">{{$t('Table.delete_btn')}}</span>
               </div>
             </div>
             <div class="chart-img" :style="`backgroundImage:url(${item.ChartImage})`"></div>
@@ -54,7 +54,7 @@
           <div class="chart-img"></div>
           <div class="add-cont">
             <i class="el-icon-plus"/>
-            <el-button type="text" style="font-size:16px;">添加自定义主题</el-button>
+            <el-button type="text" style="font-size:16px;">{{$t('SystemManage.ChartSet.add_btn')}}</el-button>
           </div>
         </li>
       </ul>
@@ -64,16 +64,16 @@
 
    <!-- 弹窗 -->
     <m-dialog 
-      :title="`${addThemeForm.id?'编辑':'添加'}自定义主题`" 
+      :title="`${addThemeForm.id?$t('SystemManage.ChartSet.edit_btn'):$t('SystemManage.ChartSet.edit_btn')}`" 
       :show.sync="isOpenThemeDia" 
       width="650px"
     >
       <div style="padding:30px 60px">
         <div>
-          <label class="el-form-item__label">主题名称</label>
+          <label class="el-form-item__label">{{$t('SystemManage.ChartSet.theme_name')}}</label>
           <el-input 
             v-model="addThemeForm.themeName" 
-            placeholder="请输入主题名称"
+            :placeholder="$t('SystemManage.ChartSet.theme_name_placeholder')"
           />
         </div>
       </div>
@@ -82,11 +82,11 @@
           @click="saveThemeHandle"
           type="primary"
           style="width: 132px; height: 40px"
-          >保存</el-button>
+          >{{$t('Dialog.confirm_save_btn')}}</el-button>
         <el-button
         @click="isOpenThemeDia=false"
         style="width: 132px; height: 40px"
-        >取消</el-button>
+        >{{$t('Dialog.cancel_btn')}}</el-button>
       </div>
     </m-dialog>
 
@@ -159,10 +159,10 @@ export default {
     },
 
     async delThemeHandle(item,index) {
-      await this.$confirm('删除后,所有采用该主题的图表,将采用ETA主题,是否确定删除?',
-       '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
+      await this.$confirm(this.$t('SystemManage.ChartSet.alert_msg'),
+       this.$t('Confirm.prompt'), {
+          // confirmButtonText: '确定',
+          // cancelButtonText: '取消',
           type: 'warning'
       })
 
@@ -170,7 +170,7 @@ export default {
       if(res.Ret!==200) return 
 
       this.themeOpts.splice(index,1)
-      this.$message.success('删除成功')
+      this.$message.success(this.$t('MsgPrompt.delete_msg'))
     },
 
     editThemeHandle({ChartThemeId}) {
@@ -185,7 +185,7 @@ export default {
 
 
     async saveThemeHandle() {
-      if(!this.addThemeForm.themeName) return this.$message.warning('请输入主题名称')
+      if(!this.addThemeForm.themeName) return this.$message.warning(this.$t('SystemManage.ChartSet.theme_name_placeholder'))
 
       let res = await chartThemeInterface.addTheme({
         ChartThemeName: this.addThemeForm.themeName,
@@ -193,7 +193,7 @@ export default {
       })
 
       if(res.Ret !== 200) return
-      this.$message.success('添加成功')
+      this.$message.success(this.$t('MsgPrompt.add_msg'))
       this.isOpenThemeDia = false;
 
       this.getThemeList()

+ 3 - 3
src/views/system_manage/chartTheme/themeSetting.vue

@@ -21,8 +21,8 @@
         </el-select>
       </div>
       <div>
-        <el-button type="primary" plain @click="$router.go(-1)">取消</el-button>
-        <el-button type="primary" @click="setThemeOptions">保存</el-button>
+        <el-button type="primary" plain @click="$router.go(-1)">{{$t('Dialog.cancel_btn')}}</el-button>
+        <el-button type="primary" @click="setThemeOptions">{{$t('Dialog.confirm_save_btn')}}</el-button>
       </div>
     </div> 
 
@@ -160,7 +160,7 @@ export default {
 
       if(res.Ret !==200) return
       this.getThemeList()
-      this.$message.success('保存成功')
+      this.$message.success(this.$t('MsgPrompt.saved_msg'))
     },
 
     /* 设置封面图片 */