Explorar o código

Merge branch 'lang_prod'

Karsa hai 8 meses
pai
achega
fb9f6dfa09
Modificáronse 100 ficheiros con 7978 adicións e 329 borrados
  1. 1 0
      package.json
  2. 2 0
      src/App.vue
  3. BIN=BIN
      src/assets/img/en/logo.png
  4. 11 11
      src/components/chart/chartDetailHandlesWrap.vue
  5. 4 4
      src/components/chart/chartListWrap.vue
  6. 9 9
      src/components/edbDetailPopover.vue
  7. 15 15
      src/components/lzTable.vue
  8. 3 3
      src/components/notificationMsg.vue
  9. 3 2
      src/components/pubDialog.vue
  10. 2 2
      src/components/searchDistPicker.vue
  11. 18 2
      src/components/selectUnit.vue
  12. 1 1
      src/components/todo/roadShowFeedbackDia.vue
  13. 389 0
      src/lang/commonLang.js
  14. 26 0
      src/lang/en.js
  15. 6 0
      src/lang/index.js
  16. 23 0
      src/lang/langUtils.js
  17. 53 0
      src/lang/modules/Aprroval/En.js
  18. 53 0
      src/lang/modules/Aprroval/Zh.js
  19. 6 0
      src/lang/modules/Aprroval/commonLang.js
  20. 99 0
      src/lang/modules/DataReport/GlStatisticTable.js
  21. 8 0
      src/lang/modules/DataReport/indexEn.js
  22. 9 0
      src/lang/modules/DataReport/indexZh.js
  23. 198 0
      src/lang/modules/DataSources/En.js
  24. 196 0
      src/lang/modules/DataSources/Zh.js
  25. 161 0
      src/lang/modules/ETATables/En.js
  26. 173 0
      src/lang/modules/ETATables/Zh.js
  27. 216 0
      src/lang/modules/ETATables/commonLang.js
  28. 161 0
      src/lang/modules/EtaBase/En.js
  29. 162 0
      src/lang/modules/EtaBase/Zh.js
  30. 1173 0
      src/lang/modules/EtaBase/commonLang.js
  31. 87 0
      src/lang/modules/EtaChart/En.js
  32. 87 0
      src/lang/modules/EtaChart/Zh.js
  33. 553 0
      src/lang/modules/EtaChart/commonLang.js
  34. 67 0
      src/lang/modules/MainApp/En.js
  35. 67 0
      src/lang/modules/MainApp/Zh.js
  36. 83 0
      src/lang/modules/MyEta/En.js
  37. 84 0
      src/lang/modules/MyEta/Zh.js
  38. 102 0
      src/lang/modules/PredictEdb/En.js
  39. 102 0
      src/lang/modules/PredictEdb/Zh.js
  40. 0 0
      src/lang/modules/PredictEdb/commonLang.js
  41. 60 0
      src/lang/modules/ReportManagement/AuthorManagement.js
  42. 187 0
      src/lang/modules/ReportManagement/CategoryList.js
  43. 75 0
      src/lang/modules/ReportManagement/CloudPage.js
  44. 47 0
      src/lang/modules/ReportManagement/CommodityConfiguration.js
  45. 235 0
      src/lang/modules/ReportManagement/ReportList.js
  46. 255 0
      src/lang/modules/ReportManagement/SmartReport.js
  47. 24 0
      src/lang/modules/ReportManagement/indexEn.js
  48. 25 0
      src/lang/modules/ReportManagement/indexZh.js
  49. 108 0
      src/lang/modules/SandboxManage/SandFlow.js
  50. 56 0
      src/lang/modules/SandboxManage/SandList.js
  51. 10 0
      src/lang/modules/SandboxManage/indexEn.js
  52. 10 0
      src/lang/modules/SandboxManage/indexZh.js
  53. 114 0
      src/lang/modules/SemanticsManage/DocumentComparison.js
  54. 54 0
      src/lang/modules/SemanticsManage/DocumentManagement.js
  55. 41 0
      src/lang/modules/SemanticsManage/TagManagement.js
  56. 13 0
      src/lang/modules/SemanticsManage/indexEn.js
  57. 12 0
      src/lang/modules/SemanticsManage/indexZh.js
  58. 64 0
      src/lang/modules/Slides/commonLang.js
  59. 17 0
      src/lang/modules/Slides/indexEn.js
  60. 18 0
      src/lang/modules/Slides/indexZh.js
  61. 233 0
      src/lang/modules/Slides/pptList.js
  62. 35 0
      src/lang/modules/Slides/pptMsg.js
  63. 192 0
      src/lang/modules/Slides/pptPresent.js
  64. 75 0
      src/lang/modules/StatisticAnalysis/ChartRelevance.js
  65. 49 0
      src/lang/modules/StatisticAnalysis/CrossVarietyChart.js
  66. 26 0
      src/lang/modules/StatisticAnalysis/FittingEquationChart.js
  67. 16 0
      src/lang/modules/StatisticAnalysis/IndexEn.js
  68. 15 0
      src/lang/modules/StatisticAnalysis/IndexZh.js
  69. 43 0
      src/lang/modules/StatisticAnalysis/StatisticFeatureChart.js
  70. 10 0
      src/lang/modules/SupplyAnalysis/IndexEn.js
  71. 9 0
      src/lang/modules/SupplyAnalysis/IndexZh.js
  72. 93 0
      src/lang/modules/SupplyAnalysis/StockPlant.js
  73. 34 0
      src/lang/modules/ToolBox/AIQuestion.js
  74. 73 0
      src/lang/modules/ToolBox/CommodityPriceChart.js
  75. 13 0
      src/lang/modules/ToolBox/IndexEn.js
  76. 13 0
      src/lang/modules/ToolBox/IndexZh.js
  77. 59 0
      src/lang/modules/ToolBox/PositionAnalysis.js
  78. 128 0
      src/lang/modules/systemManage/BaseConfig.js
  79. 81 0
      src/lang/modules/systemManage/ChartSet.js
  80. 37 0
      src/lang/modules/systemManage/DataAuth.js
  81. 49 0
      src/lang/modules/systemManage/DataSourceAccount.js
  82. 175 0
      src/lang/modules/systemManage/DepartManage.js
  83. 33 0
      src/lang/modules/systemManage/EnAuthSet.js
  84. 82 0
      src/lang/modules/systemManage/OperateAuth.js
  85. 35 0
      src/lang/modules/systemManage/OutLinkConfig.js
  86. 78 0
      src/lang/modules/systemManage/ReportApprove.js
  87. 43 0
      src/lang/modules/systemManage/RoleManage.js
  88. 27 0
      src/lang/modules/systemManage/indexEn.js
  89. 26 0
      src/lang/modules/systemManage/indexZh.js
  90. 27 0
      src/lang/zh.js
  91. 30 1
      src/main.js
  92. 18 17
      src/utils/defaultOptions.js
  93. 3 3
      src/utils/svgToblob.js
  94. 67 88
      src/views/Home.vue
  95. 108 98
      src/views/Login.vue
  96. 14 14
      src/views/approve_manage/approveDetail.vue
  97. 7 7
      src/views/approve_manage/approveEdit.vue
  98. 48 31
      src/views/approve_manage/approveList.vue
  99. 35 20
      src/views/approve_manage/approveSetting.vue
  100. 1 1
      src/views/approve_manage/components/flowNode/addNode.vue

+ 1 - 0
package.json

@@ -55,6 +55,7 @@
     "vue-count-to": "^1.0.13",
     "vue-froala-wysiwyg": "^3.1.0",
     "vue-giant-tree": "^1.0.0",
+    "vue-i18n": "^8.28.2",
     "vue-masonry": "^0.16.0",
     "vue-pdf": "^4.2.0",
     "vue-qr": "^2.3.0",

+ 2 - 0
src/App.vue

@@ -105,6 +105,8 @@ iframe {
   color: #0052D9;
   cursor: pointer;
   margin-right: 5px;
+  display: inline-block;
+  flex-shrink: 0;
 }
 .deletesty {
   font-size: 14px;

BIN=BIN
src/assets/img/en/logo.png


+ 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','/crossVarietyChartList'].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>

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

@@ -1,6 +1,6 @@
 <template>
   <div class="chart-list-cont">
-    <span>共{{ total }}张图表</span>
+    <span>{{$t('Chart.total_chart_show',{limit:total})}}</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>
@@ -43,7 +43,7 @@
       </el-col>
     </div>
     <div v-if="!total" class="nodata">
-      <tableNoData text="暂无图表"/>
+      <tableNoData :text="$t('Common.no_chart_msg')"/>
     </div>
   </div>
 </template>

+ 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'),
       }
     };
   }

+ 15 - 15
src/components/lzTable.vue

@@ -81,29 +81,29 @@ export default {
 		},
 		labelArr(){
 			let temMap=new Map([
-				['QuotaName', '指标名称'],
-				['LzCode', '指标ID'],
-				['Frequency', '频度'],
-				['UnitName', '单位'],
-				['ModifyTime', '更新时间'],
+				['QuotaName', /* '指标名称' */this.$t('Edb.Detail.e_name')],
+				['LzCode', /* '指标ID' */this.$t('Edb.Detail.e_id')],
+				['Frequency', /* '频度' */this.$t('Edb.Detail.e_fre')],
+				['UnitName', /* '单位' */this.$t('Edb.Detail.e_unit')],
+				['ModifyTime', /* '更新时间' */this.$t('Edb.Detail.e_update_time')],
 			])
 			let sourceTypeOne = ['smm','coal','baiinfo','yyzx','icpi','coalWord']
 
 			if(this.source==='gl'){
 				temMap=new Map([
-					['IndexName', '指标名称'],
-					['IndexCode', '指标ID'],
-					['FrequencyName', '频度'],
-					['UnitName', '单位'],
-					['UpdateTime', '更新时间'],
+					['IndexName', this.$t('Edb.Detail.e_name')],
+					['IndexCode', this.$t('Edb.Detail.e_id')],
+					['FrequencyName', this.$t('Edb.Detail.e_fre')],
+					['UnitName', this.$t('Edb.Detail.e_unit')],
+					['UpdateTime', this.$t('Edb.Detail.e_update_time')],
 				])
 			}else if(sourceTypeOne.includes(this.source)){
 				temMap=new Map([
-					['IndexName', '指标名称'],
-					['IndexCode', '指标ID'],
-					['Frequency', '频度'],
-					['Unit', '单位'],
-					['ModifyTime', '更新时间'],
+					['IndexName', this.$t('Edb.Detail.e_name')],
+					['IndexCode', this.$t('Edb.Detail.e_id')],
+					['Frequency', this.$t('Edb.Detail.e_fre')],
+					['Unit', this.$t('Edb.Detail.e_unit')],
+					['ModifyTime', this.$t('Edb.Detail.e_update_time')],
 				])
 			}
 

+ 3 - 3
src/components/notificationMsg.vue

@@ -7,7 +7,7 @@
         <div class="notifation-wrap">
             <!-- 防止tabs在popover前渲染,会导致tab选中状态不正确 -->
             <el-tabs v-model="activeName" v-if="visible">
-                <el-tab-pane :label="`研报审批(${UnreadTotal})`" name="first"></el-tab-pane>
+                <el-tab-pane :label="`${$t('AprrovalPage.research_approval_btn')}(${UnreadTotal})`" name="first"></el-tab-pane>
             </el-tabs>
             <div class="massage-list" v-if="visible">
                 <div class="message-item" :class="{'IsRead':item.IsRead}" v-for="item in msgList" :key="item.Id" @click="readMsg(item)">
@@ -22,9 +22,9 @@
                         <div class="content">{{item.Remark||''}}&nbsp;</div>
                     </div>
                 </div>
-                <tableNoData v-if="!msgList.length" text="暂无消息"></tableNoData>
+                <tableNoData v-if="!msgList.length" :text="$t('AprrovalPage.no_news_yet')"></tableNoData>
             </div>
-            <el-button type="text" class="close-btn" @click="visible=false">关闭</el-button>
+            <el-button type="text" class="close-btn" @click="visible=false">{{$t('AprrovalPage.close_btn')}}</el-button>
         </div>
         <span slot="reference" @click="visible = !visible" class="msg-btn">
             <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">

+ 3 - 2
src/components/pubDialog.vue

@@ -23,7 +23,7 @@
       class="form-cont"
       label-position="left"
       :hide-required-asterisk="isHideRequired"
-      label-width="80px"
+      label-width="120px"
       :model="formData"
       :rules="formRules"
     >
@@ -74,6 +74,7 @@
 </template>
 
 <script>
+import bus from "@/api/bus";
 export default {
   props: {
     isShow: {
@@ -119,7 +120,7 @@ export default {
     },
     confimTxt: {
       type: Array,
-      default: ()=>['保存', '取消'],
+      default: ()=>[/* '保存' */bus.$i18nt.t('Dialog.confirm_save_btn'), /* '取消' */bus.$i18nt.t('Dialog.cancel_btn')],
     },
   },
   data() {

+ 2 - 2
src/components/searchDistPicker.vue

@@ -3,7 +3,7 @@
     <div class="select-dist-picker">
         <!-- 省选择器 -->
         <el-select
-            placeholder="请选择省"
+            :placeholder="$t('SystemManage.DepartManage.user_add_placeholder10')"
             filterable
             v-model="province"
             value-key="provinceKey"
@@ -19,7 +19,7 @@
         </el-select>
         <!-- 市选择器 -->
         <el-select
-            placeholder="请选择市"
+            :placeholder="$t('SystemManage.DepartManage.user_add_placeholder11')"
             filterable
             v-model="city"
             value-key="cityKey"

+ 18 - 2
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"
@@ -15,7 +15,23 @@
 </template>
 
 <script>
-import { unitArr } from '@/utils/defaultOptions';
+// import { unitArr } from '@/utils/defaultOptions';
+const unitArr = [
+	'无',
+	'万吨',
+	'亿元',
+	'元',
+	'元/吨',
+	'元/湿吨',
+	'千克',
+	'吨',
+	'短吨',
+	'美元/吨',
+	'万平方米',
+	'美元/桶',
+	'美分/加仑',
+	'手'
+]
 export default {
     name:"selectUnit",
     props:{

+ 1 - 1
src/components/todo/roadShowFeedbackDia.vue

@@ -19,7 +19,7 @@
         :data="feedbackList"
         height="60vh"
         v-loading="tableLoading"
-        element-loading-text="数据加载中..." 
+        :element-loading-text="$t('Table.data_loading')"  
         style="box-shadow: 0px 3px 6px rgba(155, 170, 219, 0.2);margin-top:20px;"
         border
       >

+ 389 - 0
src/lang/commonLang.js

@@ -0,0 +1,389 @@
+import Edb from './modules/EtaBase/commonLang';
+import Chart from './modules/EtaChart/commonLang';
+import ETable from './modules/ETATables/commonLang';
+
+// 通用文字翻译
+export default {
+  Dialog: {
+    cancel_btn: {
+      en: "Cancel",
+      zh: "取消",
+    },
+    confirm_btn: {
+      en: "Confirm",
+      zh: "确定",
+    },
+    confirm_save_btn: {
+      en: "Save",
+      zh: "保存 ",
+    },
+    back_btn: {
+      en: "Return",
+      zh: "返回",
+    },
+    set_btn:{
+      en:"Set",
+      zh:'设置'
+    },
+    require_vaild: {
+      en: 'Required Field',
+      zh: '必填项'
+    },
+    title_prefix_view: {
+      en: 'View',
+      zh: '查看'
+    },
+    title_prefix_edit: {
+      en: 'Edit',
+      zh: '编辑'
+    },
+    warn_tit: {
+      en: 'Notice',
+      zh: '提示'
+    },
+    known: {
+      en: 'Understood',
+      zh: '知道了'
+    },
+    submit_btn: {
+      en: 'Submit',
+      zh: '提交'
+    },
+    next_step: {
+      en: 'Next step',
+      zh: '下一步'
+    },
+    prev_step: {
+      en: 'Previous step',
+      zh: '上一步'
+    },
+    reset_btn: {
+      en: 'Reset',
+      zh: '重置'
+    }
+  },
+  Table: {
+    add_btn: {
+      en: "Add",
+      zh: "添加",
+    },
+    edit_btn: {
+      en: "Edit ",
+      zh: "编辑",
+    },
+    delete_btn: {
+      en: "Delete",
+      zh: "删除",
+    },
+    save_as: {
+      en: "Save as",
+      zh: "另存为",
+    },
+    copy_btn: {
+      en: "Copy",
+      zh: "复制",
+    },
+    column_operations: {
+      en: "Operations",
+      zh: "操作",
+    },
+    prompt_slogan: {
+      en: "No data available",
+      zh: "暂无数据",
+    },
+    edb_id: {
+      en: "Indicator ID",
+      zh: "指标Id",
+    },
+    edb_name: {
+      en: "Indicator Name",
+      zh: "指标名称",
+    },
+    frequency: {
+      en: "Frequency",
+      zh: "频度",
+    },
+    unit: {
+      en: "Unit",
+      zh: "单位",
+    },
+    start_time: {
+      en: "Start Time",
+      zh: "起始时间",
+    },
+    update_time: {
+      en: "Update Time",
+      zh: "更新时间",
+    },
+    source: {
+      en: "Source",
+      zh: "来源",
+    },
+    report_title: {
+      en: "Report Title",
+      zh: "报告标题",
+    },
+    publish_time: {
+      en: "Publish Time",
+      zh: "发布时间",
+    },
+    loading: {
+      zh: '加载中...',
+      en: 'Loading...'
+    },
+    data_loading: {
+      en: "Data Loading",
+      zh: "数据加载中...",
+    },
+    no_edb_msg: {
+      zh: '暂无指标',
+      en: 'No indicator'
+    },
+    look_dtl: {
+      zh: '查看详情',
+      en: 'View Details'
+    },
+    no_tags_text: {
+      en: "No tags available",
+      zh: "暂无标签",
+    },
+  },
+  Confirm: {
+    prompt: {
+      en: "Note",
+      zh: "提示 ",
+    },
+    prompt_slogan: {
+      en: "No data available.",
+      zh: "暂无数据",
+    },
+    
+  },
+  MsgPrompt: {
+    delete_msg: {
+      en: "Delete successful",
+      zh: "删除成功",
+    },
+    edit_msg: {
+      en: "Edited successfully.",
+      zh: "编辑成功",
+    },
+    add_msg: {
+      en: "Added successfully.",
+      zh: "新增成功",
+    },
+    add_msg2: {
+      en: "Added successfully.",
+      zh: "添加成功",
+    },
+    publish_msg: {
+      en: "Publish successfully.",
+      zh: "发布成功",
+    },
+    saved_msg: {
+      en: "Saved successfully.",
+      zh: "保存成功",
+    },
+    entry_msg: {
+      en: "Entry Successful",
+      zh: "录入成功",
+    },
+    delete_info_msg: {
+      en: "Are you sure you want to permanently delete this file?",
+      zh: "删除后不可恢复,是否确认删除?",
+    },
+    copy_success_msg: {
+      en: "Copy sucessfully",
+      zh: "复制成功",
+    },
+    copy_fail_msg: {
+      en: "Copy sucessfully",
+      zh: "复制失败,稍后再试",
+    },
+    saveing_msg: {
+      en: "Saving",
+      zh: "保存中",
+    },
+    save_hints: {
+      en: "Save hints",
+      zh: "保存提示",
+    },
+    author: {
+      en: "Author",
+      zh: "作者",
+    },
+    select_category: {
+      en: "please select category",
+      zh: "请选择分类",
+    },
+    delete_fail_msg: {
+      en: "Delete failed",
+      zh: "删除失败",
+    },
+    known: {
+      en: "Known",
+      zh: "知道了",
+    },
+    browser_not_support: {
+      en: "Browser not supported",
+      zh: "浏览器不支持",
+    },
+    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:'移动排序成功'
+    },
+    confirm_del_msg:{
+      en:'Are you sure you want to delete?',
+      zh:'确定要删除吗?'
+    },
+    set_success_msg:{
+      en:'Setting Successful',
+      zh:'设置成功'
+    },
+    refresh_ing_msg: {
+      en: 'Updating data...',
+      zh: '刷新数据中...'
+    },
+    refresh_success_msg: {
+      en: 'Refresh successful',
+      zh: '刷新成功'
+    },
+    operate_success_msg: {
+      en: 'Operation successful',
+      zh: '操作成功'
+    },
+    move_success_msg: {
+      en: 'Move successful',
+      zh: '移动成功'
+    },
+    move_out_msg: {
+      en: 'Removed successful',
+      zh: '移出成功'
+    },
+    clean_classify_msg: {
+      en: 'Category Cleared Successfully',
+      zh: '清除分类成功'
+    },
+    confirm_logout_msg: {
+      en: 'Are you sure you want to log out?',
+      zh: '确认退出吗?'
+    },
+    un_share_msg: {
+      en: 'Unshare successful',
+      zh: '取消成功'
+    },
+    upload_success_msg: {
+      en: 'Upload successful.',
+      zh: '上传成功'
+    },
+    upload_some_msg: {
+      en: 'Partial data upload successful!',
+      zh: '部分数据上传成功!'
+    },
+    upload_fail_msg: {
+      en: 'Upload failed!',
+      zh: '上传失败!'
+    },
+  },
+  Common: {
+    category: {
+      en: "categories",
+      zh: "分类",
+    },
+    all_select:{
+      en:'Select All',
+      zh:'全选'
+    },
+    enable:{
+      en:'Enable',
+      zh:'启用'
+    },
+    disable:{
+      en:'Disable',
+      zh:'禁用'
+    },
+    create_time:{
+      en:'Creation time',
+      zh:'创建时间'
+    },
+    add_btn:{
+      en:'Add',
+      zh:'新增'
+    },
+    to: {
+      en: ' To ',
+      zh:'至'
+    },
+    ph_time_start: {
+      en: 'Start Date',
+      zh: '开始日期'
+    },
+    ph_time_end: {
+      en: 'End Date',
+      zh: '结束日期'
+    },
+    no_classify_msg: {
+      en: 'No Category',
+      zh: '暂无分类'
+    },
+    no_info_msg: {
+      en: 'No Information',
+      zh: '暂无信息'
+    },
+    download_btn:{
+      en: 'Download',
+      zh: '下载'
+    },
+    no_chart_msg: {
+      en: 'No Charts',
+      zh: '暂无图表'
+    },
+    exp_excel: {
+      en: ' Export Excel',
+      zh: '导出excel',
+    },
+    imp_excel: {
+      en: 'Import Excel',
+      zh: '导入excel',
+    },
+    copy_excel: {
+      en: 'Copy Excel Data',
+      zh: '复制excel数据',
+    },
+    switch_to_en_v: {
+      en: 'Switch to English version',
+      zh: '切换英文版',
+    },
+    switch_to_zh_v: {
+      en: 'Switch to Chinese version',
+      zh: '切换中文版',
+    },
+    switch_to_en: {
+      en: 'Switch to English',
+      zh: '切换英文',
+    },
+    switch_to_zh: {
+      en: 'Switch to Chinese',
+      zh: '切换中文',
+    },
+    ya_hei:{
+      en:'Microsoft YaHei',
+      zh:'微软雅黑'
+    },
+    sim_sun:{
+      en:'SimSun',
+      zh:'宋体'
+    },
+    sim_hei:{
+      en:'SimHei',
+      zh:'黑体'
+    }
+  },
+  Edb,
+  Chart,
+  ETable
+};

+ 26 - 0
src/lang/en.js

@@ -0,0 +1,26 @@
+/*
+ ** 英文区
+ * @param {为了方便区分,页面模块以大驼峰命名,具体要翻译的key变量用小写字母加_命名} */
+import { transformLanguageData } from "./langUtils";
+import commonLang from "./commonLang";
+
+let allEn = {};
+const importAllLang = (en) => {
+  en.keys().forEach((key) => {
+    allEn={...allEn,...en(key).default}
+  });
+};
+importAllLang(require.context("./modules", true, /\En.js$/));
+
+export default {
+  ...allEn,
+  // 公共模块
+  Dialog: transformLanguageData(commonLang.Dialog, "en"),
+  Confirm: transformLanguageData(commonLang.Confirm, "en"),
+  Table: transformLanguageData(commonLang.Table, "en"),
+  MsgPrompt: transformLanguageData(commonLang.MsgPrompt, "en"),
+  Common:transformLanguageData(commonLang.Common,'en'),
+  Edb: transformLanguageData(commonLang.Edb, "en"),
+  Chart: transformLanguageData(commonLang.Chart, "en"),
+  ETable: transformLanguageData(commonLang.ETable, "en"),
+};

+ 6 - 0
src/lang/index.js

@@ -0,0 +1,6 @@
+import zh from "./zh.js";
+import en from "./en.js";
+export default {
+  zh,
+  en,
+};

+ 23 - 0
src/lang/langUtils.js

@@ -0,0 +1,23 @@
+export function transformLanguageData(originalObject, targetLanguage) {
+  if (!originalObject) {
+    // console.error("没有传参数");
+    return null;
+  }
+
+  const transformedData = {};
+
+  for (const key in originalObject) {
+    if (originalObject.hasOwnProperty(key)) {
+      //默认约定大写字母开头的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;
+}

+ 53 - 0
src/lang/modules/Aprroval/En.js

@@ -0,0 +1,53 @@
+/*审批管理模块 
+  $t('AprrovalPage.xxx')
+*/
+export default {
+  AprrovalPage: {
+    be_processed_tab: "To be processed",
+    processed_tab: "processed",
+    i_initiated_tab: "I initiated",
+    associated_report_ipt: "Please select the associated report",
+    time_type_select: "Time type",
+    submint_time: "Submission time",
+    processing_time: "Processing time",
+    approval_time: "Approval time",
+    select_processing_status: "Please select processing status",
+    agreed_option: "Agreed",
+    rejected_option: "rejected",
+    awaiting_approval_option: "Awaiting Approval",
+    approved_option: "Approved",
+    revoked_option: "revoked",
+    report_title_ipt: "Please enter the title of the report",
+    rejection_table: "Reason for rejection",
+    details_table: "details",
+    cancel_table: "cancel",
+    approve_table: "Examine and approve",
+    prompt_loading: "The system has not yet opened the approval process. Please open the approval process before proceeding with the operation!",
+    revoke_success: "Revoke successful",
+    report_title_lable: "Report title",
+    associated_report_lable: "Associated report",
+    submitter_lable: "submitter",
+    submission_time_lable: "Submission time",
+    approval_status_lable: "Approval status",
+    processing_time_lable: "Processing time",
+    processing_result_lable: "Processing result",
+    research_approval_btn: "Research report approval",
+    close_btn: "close",
+    no_news_yet: "No news yet",
+  },
+  AprrovalDetailPage: {
+    report_name_info: "Research Report name",
+    classification_info: "Report classification",
+    initiator_info: "initiator",
+    approval_process: "Approval process",
+    rejected_btn: "rejected",
+    agree_btn: "agree",
+    back_btn: "back",
+    cancel_btn: "cancel",
+    approval_by: "Approved by: {num} people",
+    rejected_success: "Rejected successful",
+    passed_success: "Successfully passed",
+    rejection_title: "Examination and rejection",
+    rejection_reason_ipt: "Please enter the reason for rejection",
+  },
+};

+ 53 - 0
src/lang/modules/Aprroval/Zh.js

@@ -0,0 +1,53 @@
+/*审批管理模块 
+  $t('AprrovalPage.xxx')
+*/
+export default {
+  AprrovalPage: {
+    be_processed_tab: "待处理",
+    processed_tab: "已处理",
+    i_initiated_tab: "我发起的",
+    associated_report_ipt: "请选择关联报告",
+    time_type_select: "时间类型",
+    submint_time: "提交时间",
+    processing_time: "处理时间",
+    approval_time: "审批时间",
+    select_processing_status: "请选择处理状态",
+    agreed_option: "已同意",
+    rejected_option: "已驳回",
+    awaiting_approval_option: "待审批",
+    approved_option: "已通过",
+    revoked_option: "已撤销",
+    report_title_ipt: "请输入报告标题",
+    rejection_table: "驳回理由",
+    details_table: "详情",
+    cancel_table: "撤销",
+    approve_table: "审批",
+    prompt_loading: "系统暂未开通审批流程,请开启审批流程后再进行操作",
+    revoke_success: "撤销成功",
+    report_title_lable: "报告标题",
+    associated_report_lable: "关联报告",
+    submitter_lable: "提交人",
+    submission_time_lable: "提交时间",
+    approval_status_lable: "审批状态",
+    processing_time_lable: "处理时间",
+    processing_result_lable: "处理结果",
+    research_approval_btn: "研报审批",
+    close_btn: "关闭",
+    no_news_yet: "暂无消息",
+  },
+  AprrovalDetailPage: {
+    report_name_info: "研报名称",
+    classification_info: "研报分类",
+    initiator_info: "发起人",
+    approval_process: "审批流程",
+    rejected_btn: "驳回",
+    agree_btn: "同意",
+    back_btn: "返回",
+    cancel_btn: "撤销",
+    approval_by: "审批人:{num}人",
+    rejected_success: "驳回成功",
+    passed_success: "通过成功",
+    rejection_title: "审批驳回",
+    rejection_reason_ipt: "请输入驳回理由",
+  },
+};

+ 6 - 0
src/lang/modules/Aprroval/commonLang.js

@@ -0,0 +1,6 @@
+/* 图表相关的通用文字 
+  在最外层commonLang中用 
+  $t('Chart.xxx')
+*/
+
+export default {};

+ 99 - 0
src/lang/modules/DataReport/GlStatisticTable.js

@@ -0,0 +1,99 @@
+/**
+ * ETA逻辑
+ */
+
+/* 英文 */
+export const GlStatisticTableEn = {
+    type01:'Data Source Detail Table',
+    type02:'Data Source Statistics Table',
+    type03:'Delete Indicator Table',
+    type04:'Indicator Information Change Table',
+    placeholder01:'Terminal Coding',
+    placeholder02:'Creator',
+    placeholder03:'Frequency',
+    placeholder04:'Indicator ID/Indicator Name',
+    custom_table:'Custom Column',
+    table_tips01:'Indicator full name in data source',
+    table_tips02:'The last time indicator changed',
+    table_tips03:'Earliest date of change in indicator data',
+    table_tips04:'Whether a scheduled refresh task is configured for this indicator today',
+    table_tips05:'Whether the indicator is initiated a refresh task',
+    table_tips06:'The last time to be refreshed',
+    table_tips07:'1、Number of indicators need to be updated at regular intervals on this terminal today<br>2、Number of indicators need to be updated today = number of indicators updated today + number of indicators failed updated today',
+    table_tips08:'1、Number of indicators initiating update tasks on this terminal today<br>2、Number of indicators initiating update tasks today=Number of indicators update successfully + Number of indicators failed updated today',
+    table_tips09:'Number of indicators updated successfully on this terminal today',
+    table_tips10:'Number of indicators failed updated on this terminal today',
+    table_tips11:'Number of indicators for which the terminal successfully initiated update tasks but indicator data did not change today',
+    table_tips12:'Number of indicators for which  terminal data changed today',
+    table_tips13:'Name saved in ETA indicators',
+
+    change_placeholder:'Please select change type',
+    change_type01:'Change of Basic Information',
+    change_type02:'Change of Data Item',
+    change_type03:'New Indicator',
+    update_fail_title:'Details of failed updated indicators',
+    terminal_name:'Terminal Name',
+    update_success_num:'Number of indicators updated successfully',
+    update_fail_num:'Number of indicators failed updated',
+    inspection_step:'Inspection Steps',
+    frequency:'Frequency',
+    num:'Quantities',
+    reason:'Reason',
+    reason_html:`<div>1、On the Mysteel terminal, use the indicator code to query whether the indicator exists, avoiding the failure of updating due to the change of indicator code.</div>
+    <div>2、Verify the Mtsteel terminal account is logged in.</div>
+    <div>3、Open Excel, if "Mysteel Data 2.0" plug-in does not exist, exit all Excel and WPS, in the Mysteel terminal, the top navigation bar, select Tools -> Excel plug-in repair -> click to repair,  then complete the Mysteel Data 2.0 plug-in installation.</div>
+    <div>4、Open Excel, select the "Mysteel Data 2.0" plug-in, check whether the login status is normal</div>
+    <div>5、Open an Excel in the file directory, select the "Mysteel Data 2.0" plug-in, click on the "Update All Pages" button, wait ten seconds, check if the bottom left corner of the Excel indicates that the quota is over limited</div>`,
+    edb_detail_title:'Indicator Detail',
+    dir_path:'Folder Path'
+};
+  
+/* 中文 */
+export const GlStatisticTableZh = {
+    type01:'数据源明细表',
+    type02:'数据源统计表',
+    type03:'删除指标表',
+    type04:'指标信息变更表',
+    placeholder01:'终端编码',
+    placeholder02:'创建人',
+    placeholder03:'频度',
+    placeholder04:'指标ID/指标名称',
+    custom_table:'自定义列',
+    table_tips01:'指标在数据源的全称',
+    table_tips02:'指标最近一次数据发生变化的时间',
+    table_tips03:'指标数据发生变化的最早日期',
+    table_tips04:'该指标今日是否设置了定时刷新任务',
+    table_tips05:'该指标是否发起了刷新任务',
+    table_tips06:'指标最近一次执行刷新任务的时间',
+    table_tips07:'1、今日该终端需定时刷新的指标数量<br>2、今日需刷新指标数=今日已更新指标数+今日更新失败指标数',
+    table_tips08:'1、今日该终端发起刷新任务的指标数量<br>2、今日发起刷新任务指标数=今日已刷新成功指标数+今日刷新失败指标数',
+    table_tips09:'今日该终端刷新成功的指标数量',
+    table_tips10:'今日该终端刷新失败的指标数量',
+    table_tips11:'今日该终端成功发起刷新任务,但指标数据未变化的指标数量',
+    table_tips12:'今日该终端数据发生变化的指标数量',
+    table_tips13:'指标在ETA指标库保存的指标名称',
+
+    change_placeholder:'请选择变更类型',
+    change_type01:'基础信息变更',
+    change_type02:'数据明细变更',
+    change_type03:'新增指标',
+    update_fail_title:'更新失败指标详情',
+    terminal_name:'终端名称',
+    update_success_num:'已成功刷新指标数',
+    update_fail_num:'更新失败指标数',
+    inspection_step:'排查步骤',
+    frequency:'频度',
+    num:'数量',
+    reason:'原因',
+    reason_html:`<div>1、在钢联终端上,用指标编码查询下是否存在该指标,避免因为指标编码变更的原因导致刷新失败。</div>
+    <div>2、核实钢联终端账号处于登录状态。</div>
+    <div>3、打开Excel,如果“钢联数据2.0”插件不存在,则需要先退出所有Excel和WPS,在钢联终端:最上面的导航栏选择工具->Excel插件修复->点击一键修复,完成钢联数据2.0插件安装。</div>
+    <div>4、打开Excel,选中“钢联数据2.0”插件,查看登录状态是否正常。</div>
+    <div>5、打开文件目录下的一个Excel,选中“钢联数据2.0”插件,点击“更新所有页”按钮后,等待十几秒,查看Excel左下角是否提示额度超限。</div>`,
+    edb_detail_title:'指标详情',
+    dir_path:'文件夹路径'
+};
+  
+/**
+  * $t('DataReportManage.GlStatisticTable.XXX')
+*/

+ 8 - 0
src/lang/modules/DataReport/indexEn.js

@@ -0,0 +1,8 @@
+import { GlStatisticTableEn } from "./GlStatisticTable";
+
+export default {
+    // 数据报表管理----模块
+    DataReportManage: {
+        GlStatisticTable:GlStatisticTableEn
+    },
+  };

+ 9 - 0
src/lang/modules/DataReport/indexZh.js

@@ -0,0 +1,9 @@
+import { GlStatisticTableZh } from "./GlStatisticTable";
+
+
+export default {
+  // 数据报表管理----模块
+  DataReportManage: {
+    GlStatisticTable:GlStatisticTableZh
+  },
+};

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

@@ -0,0 +1,198 @@
+/* myeta模块 
+  $t('DataBankPage.xxx')
+*/
+export default {
+  /* 数据宝 */
+  DataBankPage: {
+    table_col_start_time: 'Indicator Start Time',
+    table_col_newest_time: 'Indicator Latest Time',
+  },
+
+  /* 手工指标列表 */
+  ManualEdbListPage: {
+    add_edb_btn: 'Additional Indicator',
+    ph_search: 'Keyword Search',
+    ph_classify: 'Please select a category',
+    ph_start_time: 'Start date',
+    ph_end_time: 'End date',
+    table_col_date:'Date',
+    table_col_classify:'Category',
+    table_col_creator:'Creator',
+    no_search_msg:'No Search Results',
+    del_edb_msg:'Are you sure you want to delete this indicator?',
+    del_edb_rela_msg:'If this indicator is deleted, all data associated with this indicator will also be deleted, do you want to confirm the deletion?',
+
+    //指标弹窗
+    input_data_msg:'Enter Data',
+    edit_input_data: 'Modify Entered Data',
+    edit_edb_msg:'Editorial Indicators',
+    add_edb_classify: 'Add Manual Indicator Category',
+    label_classify:'Indicator Category',
+    label_update_remin:'Update Reminder',
+    ph_update_remin:'Please select the update time',
+    add_tobase_btn:'Add to Indicator Library'
+  },
+
+  /* 数据录入 */
+  ManualEntryPage: {
+    col_modify_date:'Date to be updated',
+    col_update_status:'Update Status',
+    right_op_insertrow:'Insert Row',
+    right_op_insertcol:'Insert Column',
+    right_op_delrow:'Delete Row',
+    right_op_delcol:'Delete Column',
+    label_one_level_classify:'Primary Category',
+    label_edb_classify:'Indicator Category',
+    use_intro:'Instructions for Use',
+    use_msg:` 1、Add new indicators: Enter the name, unit and value of the indicator under the column of the preset indicator and save it;</br>
+    2、Add date: select a date in the first column or insert a date line (to copy the existing date format), enter the value and save it;</br>
+    3、Delete indicators: Clear all the data under the indicator and save it, please do not delete the indicator column directly;</br>
+    4、Delete date: Clear all the data corresponding to the date and save it, please do not delete the date row directly;</br>
+    5、For operations such as editing indicator names, editing units, editing frequency, and deleting indicators, please complete them in the "Manual Indicator List."</br>`,
+
+    //导入弹窗
+    tit_insert_data:'Import Data',
+    down_tem:'Download Templates',
+    down_fail_list:'the list of failed imports',
+    step_one:'1. Step One: Download the template. Fill in the data according to the specifications required by the template; templates with empty data are not allowed to be imported. ',
+    step_two:'2. Step Two: Upload data. Click on "Import Data" to upload the completed template and confirm the import. ',
+    step_three:'Step Three: Complete the import. If there is any data that failed to import, download ',
+    upload_size_msg:'The file size must not exceed 10MB',
+    down_fail_list2: 'Download Failure List',
+    upload_tip_msg: 'A total of {success_count} data entries have been successfully imported this time.',
+    upload_tip_msg2: 'A total of {success_count} data entries were successfully imported this time, with {fail_count} failures.',
+
+    col_status_1:'Completed',
+    col_status_2:'Incomplete',
+  },
+
+  /* 期货数据库页面 */
+  FutureBasePage: {
+    ph_date: 'Date of data',
+    ph_exchange: 'Please select the exchange',
+    no_result_msg:'Please select the data date and enter the contract code',
+    col_date:'Date',
+    col_good_code:'Contract Code',
+    col_good_name:'Contract Name',
+    col_open:'Opening Price',
+    col_high:'Highest Price',
+    col_low:'Lowest Price',
+    col_close:'Closing Price',
+    col_volume:'Trading Volume',
+    col_amt:'Turnover',
+    col_oi:'Holdings',
+    col_settle:'Settlement Price',
+  },
+
+  /* 钢联化工数据库 */
+  SteelChemicalPage: {
+    add_edb_btn: 'Add indicator',
+    add_classify_btn: 'Add Category',
+    refresh_one_btn:'One-click Update',
+    del_edb_msg:'After deletion, this indicator cannot be referenced. Are you sure you want to delete it?',
+    del_classify_msg:'Deleting a category will synchronise the deletion of all indicators under the category, confirming the deletion?',
+
+    del_classify_msg:'Deleting a category is irreversible. Are you sure you want to delete it?',
+    del_classify_edb_msg:'Deleting a category will synchronise the deletion of all indicators under the category, confirming the deletion?',
+    del_classify_only_msg: 'Deleting a category will also delete all subcategories within it synchronously. Are you sure you want to delete?',
+
+    //分类弹窗
+    edit_classify_msg:'Edit category',
+    label_one_level:'First-Level Directory',
+    label_classify_name:'Category Name',
+
+    //指标弹窗
+    add_edb: 'Add Indicator',
+    edit_edb:'Edit Indicator',
+    label_edb_classify:'Affiliated Category',
+    ph_edbid:'Indicator ID can not be empty',
+    ph_classify:'Affiliated Category can not be empty',
+    add_loading_msg:'The loading time is approximately five minutes; closing the popup will not affect the loading process',
+    add_max_msg: 'The number of additions has reached the upper limit (upper limit 100)!',
+    ph_classify_name: 'Please select a category name',
+  },
+
+  /* un数据页面 */
+  UnDataPage: {
+    ph_indexcode:'Please select commodity code',
+    ph_flow:'Please select trade flows',
+    ph_reportCode:'Please select the reporting State',
+    ph_partcode:'Please select opponent country',
+    ph_parttwocode:'Please select a second opponent country',
+    ph_year:'Please select a year',
+    ph_month:'Please select month',
+    option_year:'Annual',
+    option_month:'Monthly',
+    col_code:'Commodity Code(HS Code)',
+    col_date:'Date',
+    col_flow:'Trade Flows',
+    col_report:'Reporting State',
+    col_part:'Opponent Country',
+    col_parttow:'Second Opponent Country',
+    col_value:'Trade Amount (USD)',
+    col_weight:'Trade Weight (Kilograms)'
+  },
+
+  /* 天然气页面 */
+  GasDataPage: {
+    ph_date: 'Select Date',
+    no_data_msg:'No data available for this date, please select a different date',
+    col_gas_stock:'Natural Gas Inventory',
+    col_date:'Date',
+    col_full:'Storage Capacity Percentage',
+    col_trend:'Compared to the Previous Day',
+    col_inject:'Injection Volume',
+    col_withdraw:'Reduction Volume',
+    col_max_stock:'Maximum Inventory',
+    col_inject_speed:'Injection Rate',
+    col_withdraw_speed:'Withdrawal Rate',
+    col_status:'Data Status',
+    op_history:'Historical Data',
+    status_estimate:'Estimate',
+    status_confirm:'Confirmed',
+    status_no:'No Data',
+
+    top_page:'Home Page'
+  },
+
+  /* 上期能源 */
+  SqEnergyPage: {
+    contranct_code:'Contract Code',
+    product_name:'Product Name',
+    col_rank:'Rank',
+    col_sname:'Membership Abbreviation',
+    col_trade:'Volume (lots)',
+    col_inorde:'Increase-Decrease Amount',
+    col_buy:'Long Position Volume',
+    col_sold:'Short Position Volume',
+    col_total:'Total'
+  },
+
+  /* 中金所 */
+  ZjDataPage: {
+    col_trade_rank: 'Volume Ranking',
+    col_buy_rank: 'Ranking of Buy Orders Held',
+    col_sold_rank: 'Ranking of Sell Orders Held',
+  },
+
+   /* 有色数据库 */
+  YsDataPage: {
+    loading_data_msg:'Indicator data is loading, please do not switch to other pages',
+    loading_list_msg:'The list is loading, please wait',
+    ph_classify:'Please select a category',
+    ph_data_status:'Please select indicator data status',
+    label_all_check:'List Select All',
+    add_base_btn:'Add to Indicator Library',
+    col_start_time:'Indicator Start Time',
+    col_newest_time:'Indicator Update Time',
+    col_pub_time:'Expected Release Date',
+    col_data_status:'Indicator Data Status',
+    col_classify:'Category',
+    col_status_normal:'Regular Update',
+    col_status_close:'Discontinued',
+    col_status_irr:'Updates dependent on external sources may experience irregular delays',
+    haved_all_msg:'All indicators added this time are already in the indicator library, please do not add them again!',
+    haved_some_msg:'The following indicators already exist in the indicator library and will be automatically filtered out!'
+  }
+  
+}

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

@@ -0,0 +1,196 @@
+/* myeta模块 
+  $t('DataBankPage.xxx')
+*/
+export default {
+  /* 数据宝 */
+  DataBankPage: {
+    table_col_start_time: '指标开始时间',
+    table_col_newest_time: '指标最新时间',
+  },
+
+  /* 手工指标列表 */
+  ManualEdbListPage: {
+    add_edb_btn: '新增指标',
+    ph_search: '关键字搜索',
+    ph_classify: '请选择分类',
+    ph_start_time: '开始日期',
+    ph_end_time: '结束日期',
+    table_col_date:'日期',
+    table_col_classify:'分类',
+    table_col_creator:'创建人',
+    no_search_msg:'暂无搜索结果',
+    del_edb_msg:'是否确认删除该指标?',
+    del_edb_rela_msg:'若删除此指标,该指标下关联的数据也将全部删除,是否确认删除?',
+
+    //指标弹窗
+    input_data_msg:'录入数据',
+    edit_input_data: '修改录入数据',
+    edit_edb_msg:'编辑指标',
+    add_edb_classify: '添加手工指标分类',
+    label_classify:'指标分类',
+    label_update_remin:'更新提醒',
+    ph_update_remin:'请选择更新时间',
+    add_tobase_btn:'加入指标库'
+  },
+
+  /* 数据录入 */
+  ManualEntryPage: {
+    col_modify_date:'待更新日期',
+    col_update_status:'更新状态',
+    right_op_insertrow:'插入行',
+    right_op_insertcol:'插入列',
+    right_op_delrow:'删除行',
+    right_op_delcol:'删除列',
+    label_one_level_classify:'一级分类',
+    label_edb_classify:'指标分类',
+    use_intro:'使用说明',
+    use_msg:` 1、新增指标:在预设好的指标列下输入指标名称、单位、数值并保存;</br>
+    2、新增日期:在第一列选择日期或插入日期行(需复制已有日期格式)输入数值并保存;</br>
+    3、清除指标:清空该指标下所有数据并保存,该操作不会删除指标,仅清除指标数据,请勿直接删除指标列;</br>
+    4、删除日期:清空该日期对应所有数据并保存,请勿直接删除日期行;</br>
+    5、指标名称编辑、单位编辑、频度编辑、指标删除等操作请在“手工指标列表”中完成;</br>`,
+
+    //导入弹窗
+    tit_insert_data:'导入数据',
+    down_tem:'下载模板',
+    down_fail_list:'导入失败列表',
+    step_one:'1、第一步,下载模板。按照模板要求的规范填写数据,空数据模板不允许导入。',
+    step_two:'2、第二步,上传数据。点击“导入数据”,上传已经填写好的模板,确认导入。',
+    step_three:'3、第三步,完成导入。若有导入失败数据,下载',
+    upload_size_msg:'文件大小不得超过10M',
+    down_fail_list2: '下载失败列表',
+    upload_tip_msg: '本次共成功导入{success_count}条数据',
+    upload_tip_msg2: '本次共成功导入{success_count}条数据,失败{fail_count}条',
+
+    col_status_1:'完成',
+    col_status_2:'未完成',
+  },
+
+  /* 期货数据库页面 */
+  FutureBasePage: {
+    ph_date: '数据日期',
+    ph_exchange: '请选择交易所',
+    ph_search: '合约代码',
+    no_result_msg:'请选择数据日期并输入合约代码',
+    col_date:'日期',
+    col_good_code:'合约代码',
+    col_good_name:'合约名称',
+    col_open:'开盘价',
+    col_high:'最高价',
+    col_low:'最低价',
+    col_close:'收盘价',
+    col_volume:'成交量',
+    col_amt:'成交额',
+    col_oi:'持仓量',
+    col_settle:'结算价',
+  },
+
+  /* 钢联化工数据库 */
+  SteelChemicalPage: {
+    add_edb_btn: '新增指标',
+    add_classify_btn: '添加分类',
+    refresh_one_btn:'一键更新',
+    del_edb_msg:'删除后该指标不能被引用,确认删除吗?',
+    del_classify_msg:'删除分类不可恢复,确定删除吗?',
+    del_classify_edb_msg:'删除分类将同步删除分类下所有指标,确认删除吗?',
+    del_classify_only_msg: '删除分类将同步删除分类下所有子分类,确认删除吗?',
+
+    //分类弹窗
+    edit_classify_msg:'编辑分类',
+    label_one_level:'一级目录',
+    label_classify_name:'分类名称',
+
+    //指标弹窗
+    add_edb: '添加指标',
+    edit_edb:'编辑指标',
+    label_edb_classify:'所属分类',
+    ph_edbid:'指标ID不能为空',
+    ph_classify:'所属分类不能为空',
+    add_loading_msg:'加载时间大概五分钟,关闭弹窗不影响加载',
+    add_max_msg: '添加数量已达上限(上限100)!',
+    ph_classify_name: '请选择分类名称',
+  },
+
+  /* un数据页面 */
+  UnDataPage: {
+    ph_indexcode:'请选择Commodity Code',
+    ph_flow:'请选择贸易流向',
+    ph_reportCode:'请选择报告国',
+    ph_partcode:'请选择对手国',
+    ph_parttwocode:'请选择第二对手国',
+    ph_year:'请选择年份',
+    ph_month:'请选择月份',
+    option_year:'年度',
+    option_month:'月度',
+    col_code:'Commodity Code(HS代码)',
+    col_date:'日期',
+    col_flow:'贸易流向',
+    col_report:'报告国',
+    col_part:'对手国',
+    col_parttow:'第二对手国',
+    col_value:'贸易金额(美元)',
+    col_weight:'贸易重量(千克)'
+  },
+
+  /* 天然气页面 */
+  GasDataPage: {
+    ph_date: '选择日期',
+    no_data_msg:'没有此日期的数据,请重新选择日期',
+    col_gas_stock:'天然气存量',
+    col_date:'日期',
+    col_full:'储存容量百分比',
+    col_trend:'较前日对比',
+    col_inject:'注入量',
+    col_withdraw:'减少量',
+    col_max_stock:'最大存量',
+    col_inject_speed:'注入速度',
+    col_withdraw_speed:'取出速度',
+    col_status:'数据状态',
+    op_history:'历史数据',
+    status_estimate:'估计',
+    status_confirm:'已确认',
+    status_no:'无数据',
+
+    top_page:'首页'
+  },
+  
+  /* 上期能源 */
+  SqEnergyPage: {
+    contranct_code:'合约代码',
+    product_name:'商品名称',
+    col_rank:'名次',
+    col_sname:'会员简称',
+    col_trade:'成交量(手)',
+    col_inorde:'增减量',
+    col_buy:'持买仓量',
+    col_sold:'持卖仓量',
+    col_total:'合计'
+  },
+
+  /* 中金所 */
+  ZjDataPage: {
+    col_trade_rank: '成交量排名',
+    col_buy_rank: '持买单量排名',
+    col_sold_rank: '持卖单量排名',
+  },
+
+  /* 有色数据库 */
+  YsDataPage: {
+    loading_data_msg:'指标数据加载中,请勿切换到其他页面',
+    loading_list_msg:'列表加载中,请稍后',
+    ph_classify:'请选择分类',
+    ph_data_status:'请选择指标数据状态',
+    label_all_check:'列表全选',
+    add_base_btn:'添加到指标库',
+    col_start_time:'指标开始时间',
+    col_newest_time:'指标最新时间',
+    col_pub_time:'预计发布时间',
+    col_data_status:'指标数据状态',
+    col_classify:'分类',
+    col_status_normal:'正常更新',
+    col_status_close:'已停更',
+    col_status_irr:'更新依赖外部会有不定期延迟',
+    haved_all_msg:'本次添加的指标均已在指标库中,请勿重复添加!',
+    haved_some_msg:'指标库中已存在以下指标,会自动过滤!'
+  }
+}

+ 161 - 0
src/lang/modules/ETATables/En.js

@@ -0,0 +1,161 @@
+export default {
+  /* 在线EXCEL */
+  OnlineExcelPage: {
+    add_excel_btn: "Add excel spreadsheet",
+    add_timeline_table_btn: "Add a timeline table",
+    add_mixed_table_btn: "Add mixed table",
+    excel_name_ipt: "Excel name",
+    please_value_ipt: "Please enter a value",
+    add_category_table_btn: "Add table category",
+    please_table_name_ipt: "Please enter the Table name",
+    author_info: "Author:",
+    recent_save_time_info: "Recent save time:",
+    table_classification_label: "Table classification",
+    select_appropriate_category_lable: "Please select the appropriate category",
+    please_table_classification_msg: "Please add a table classification first",
+    the_tables_no_delete_msg: "The tables associated with this category cannot be deleted",
+    input_content_msg: "Please input table content",
+    editing_msg: "Editing",
+    all_table_num: "{count} tables in total",
+    creation_time_tle: "Creation time",
+    no_table_available_show: "No table available",
+    date_row_table: "Date",
+    add_date_wrapper: "Add Date",
+    add_text_wrapper: "Add Text",
+    indicator_name_lbl: "Indicator name",
+    indicator_alias_lbl: "Indicator alias",
+    edit_indicator_tle: "Edit Indicator",
+    dlt_the_all_msg: "Deleting the first indicator will clear all content from the table. Are you sure you want to delete it?",
+    please_keep_one_msg: "Please keep at least one indicator date",
+    error_parameter_not_msg: "Formula error, parameter does not exist",
+    lastest_date_lab: "Lastest date",
+    insert_success_msg: "Insert sucessfully",
+    the_date_no_val_msg: "The current date has no value at the moment",
+    formula_val_error_msg: "Formula parameters incorrect",
+    keep_one_column_msg: "Please keep at least one column",
+    keep_one_row_msg: "Please keep at least one row",
+    no_here_val_msg: "Unable to insert value here",
+    TableInstructionsText: `Table Instructions:<br />
+    1. Manual Input: Click on each cell to directly enter text, numbers, or dates (format example: 2023-05-23). The entered content can match the names of metrics. Metrics from both the ETA Metric Library and the ETA Forecast Metric Library are searchable. If a metric is selected from the dropdown list, then that cell becomes a designated row/column for the selected metric.<br />
+    2. Insert Metric Value: Right-click on a cell and click "Insert Metric Value". The system will query for the closest date and metric name based on the cell's row and column, and then populate the cell with the value of the metric corresponding to that date. The metric value is always positioned in the lower right corner of the cell.<br />
+    3. Update and Calculation Rules: The dates associated with metric values in the table do not update automatically, and values do not support calculations within cells.`,
+    select_table_category: "Please select table category",
+    saving_loading_text: "Saving...",
+    table_explaination_text: "Table explaination",
+    currently_editing_msg: "is currently being edited",
+    already_exists_msg: "Indicator already exists",
+    please_add_table_msg: "Please add a table",
+    data_row_label: "Indicator column+Date row",
+    data_column_label: "Indicator row+Date column",
+    select_table_contents: "Please select the table of contents",
+    the_sheet_page_selected: "Upload files based on the sheet page selected by th user",
+    please_select_sheet_msg: "Please select the sheet page to save",
+    please_select_category_msg: "Please select a category",
+    table_name_empty_msg: "Table name cannot be empty",
+    name_empty_msg: "name cannot be empty",
+    date_type_label: "date type",
+    past_date_label: "Past date",
+    future_date_label: " uture dates",
+    number_lable: "Number of periods",
+    please_enter_number: "Please enter the number of periods",
+    deadline_lable: "deadline",
+    please_enter_deadline: "Please enter the deadline",
+    deadline_cannot_be_empty: "The deadline cannot be empty",
+    number_cannot_be_empty: "The number of periods cannot be empty",
+    label_move_way: "Moving Mode",
+    label_n_val: "N equals to",
+    label_calendar: "Calendar",
+    please_select_frequency: "Please select the frequency",
+    label_val_type: "Data retrieval",
+    select_data_type: "Please select data value type",
+    select_criteria_btn: "Select indicators",
+    insert_value_btn: "Insert value",
+    there_data_no_msg: "There is no data for that date.",
+    there_data_no_msg: "Insert method",
+    there_data_no_msg: "Please select the import method",
+    days_label: "days",
+    update_frequency_label: "Update frequency",
+    lastest_date_label: "Lastest date",
+    example_show_text: "Example: 5, represents the date 5 days from today; -5, represents the date 5 days ago from today.",
+    selected_indicators_label: "indicators",
+    no_indicators_available_table: "No indicators available.",
+    cannot_be_empty_table: "Table Categories cannot be empty",
+    table_data_update_msg: "The table data has been updated",
+    formula_lable: "Formula",
+    parent_directory_lable: "Parent directory",
+  },
+
+  /* 自定义分析  */
+  CustomAnalysisPage: {
+    up_file_btn: "Upload files",
+    generate_indicators_btn: "Generate indicators",
+    up_save_tooltip: "Update all the indicators generated by the current table based on the latest content saved in the table",
+    refresh_loading: "Refresh indicators",
+    refreshing_loading: "Indicators refreshing...",
+    no_file_type_msg: "Upload failed, format does not comply with xlsx",
+    up_file_five_msg: "The maximum upload file size cannot exceed 5M",
+    up_new_file_msg: "A file with the same name already exists. Please upload a new file",
+    parsing_file_error_msg: "Parsing file failed",
+    select_one_region_msg: "Only one area can be selected at the same time",
+    only_allowed_select_msg: "The sequence only allows selection of the same row or column",
+    select_date_sequence: "Please select a date sequence",
+    select_date_numerical: "Please select a numerical sequence",
+    select_appropriate_category: "Please select the appropriate category",
+    select_frequency: "Please select frequency",
+    rules_edbName: "Indicator name cannot be empty",
+    rules_classify: "Category cannot be empty",
+    rules_frequency: "Frequency cannot be empty",
+    rules_unit: "Unit cannot be empty",
+    date_sequence_cannot_msg: "The date sequence cannot be empty",
+    numerical_sequence_cannot_msg: "The numerical sequence cannot be empty",
+  },
+
+  ETableChildren: {
+    date_calculation_btn: "Date calculation",
+    select_date_pld: "Select Date",
+    add_more_dates: "Add more dates",
+    formula_lable: "Formula",
+    formula_enter_pld: "Please enter a formula",
+    example_a_b: "Example formula: A-B returns the difference in days between date a and date B as a number",
+    indicators_cap_reached: "The number of added indicators has reached the upper limit",
+    input_formula_valid: "Calculation Formula can not be blank",
+    date_change_label: "Date Change",
+    date_displacement_label: "Date Shift",
+    specified_frequency_tag: "Specified frequency",
+    added_frequency_offset_msg: "Specified frequency has been added.",
+    added_date_offset_msg: "Added date offset",
+    impord_date_title: "Import Date",
+    indicator_date_radio: "Indic Date",
+    frequency_lable: "Frequency",
+    lagging_period_label: "Period Shift",
+    system_date_rai: "Sys Date",
+    term_ipt: "stage",
+    formula_explanation_btn: "Formula Explanation",
+    tips_text: `Formula Explanation:<br>1. Index Date: Takes the latest date of the selected index, which updates along with the latest date.<br>2. System Date: Takes the system date, which updates along with the system date.<br>3. Date Offset Examples:<br>Original date 2023/10/12, date offset function set to 5 days 0 months 0 years, the converted date will be 2023/10/17.<br>Original date 2023/10/12, date offset function set to 30 days 0 months 0 years, the converted date will be 2023/11/11.<br>Original date 2023/10/30, date offset function set to 0 days 1 month 0 years, the converted date will be 2023/11/30.<br>Original date 2023/10/31, date offset function set to 0 days 1 month 0 years, the converted date will be 2023/12/1.<br>4. Date Offset and specified frequency can be overlaid, for example:<br>Original date 2023/10/12, first date offset by 1 month (2023/11/12), then frequency set to the last day of the month, the converted date will be 2023/11/30.<br>Original date 2023/10/12, first frequency set to the last day of the month (2023/10/31), then date offset by 1 month, the converted date will be 2023/12/1.`,
+    latest_date_indicator: "Latest Date of Indicator",
+    advance_the_term: "Advance of the term",
+    table_date_rai: "Table date",
+    select_metric_first_msg: "Please select a metric first.",
+    number_label: "Number",
+    percentile_label: "Percentile",
+    number_reduce_title: "Reduce the number of decimal places",
+    number_increase_title: "Increase the number of decimal places",
+    enter_n_value: "Please enter N value",
+    select_calendar_pld: "Please select a calendar",
+    frequentness_lable: "frequentness",
+    final_value_lable: "Final value",
+    average_value_lable: "Average value",
+    alpha_value_lable: "Alpha value",
+    calculate_result: "Calculate the result",
+    no_corresponding_data: "No corresponding data",
+    calculation_btn: "calculation",
+    only_select_msg: "Only monthly indicators can be selected",
+    no_quarterly_msg: "Unable to select quarterly indicators",
+    no_day_msg: "Cannot select daily indicators",
+    no_year_msg: "Unable to select annual indicators",
+    no_year_msg: "Unable to select annual indicators",
+    ahead_lable: "ahead",
+    lagging_lable: "lagging",
+    select_metric: "Please select a metric",
+  },
+};

+ 173 - 0
src/lang/modules/ETATables/Zh.js

@@ -0,0 +1,173 @@
+export default {
+  /* 在线EXCEL */
+  OnlineExcelPage: {
+    add_excel_btn: "添加Excel表格",
+    add_timeline_table_btn: "添加时间序列表格",
+    add_mixed_table_btn: "添加混合表格",
+    excel_name_ipt: "表格名称",
+    please_value_ipt: "请输入值",
+    add_category_table_btn: "添加表格分类",
+    please_table_name_ipt: "请输入表格名称",
+    author_info: "作者:",
+    recent_save_time_info: "最近保存时间:",
+    table_classification_label: "表格分类",
+    select_appropriate_category_lable: "请选择所属分类",
+    please_table_classification_msg: "请先添加表格分类",
+    the_tables_no_delete_msg: "该分类下关联表格不可删除",
+    input_content_msg: "请输入表格内容",
+    editing_msg: "编辑中",
+    currently_editing_msg: "正在编辑中",
+    all_table_num: "共{count}张表格",
+    creation_time_tle: "创建时间",
+    no_table_available_show: "暂无表格",
+    date_row_table: "日期",
+    add_date_wrapper: "添加日期",
+    add_text_wrapper: "添加文本",
+    indicator_name_lbl: "指标名称",
+    indicator_alias_lbl: "指标别名",
+    edit_indicator_tle: "编辑指标",
+    dlt_the_all_msg: "第一个指标删除后将清除表格所有内容,确认删除吗?",
+    please_keep_one_msg: "请至少保留一个指标日期",
+    error_parameter_not_msg: "公式有误,参数不存在",
+    lastest_date_lab: "最新日期",
+    insert_success_msg: "插入成功",
+    the_date_no_val_msg: "当前日期暂无值",
+    formula_val_error_msg: "公式参数有误",
+    keep_one_column_msg: "请至少保留一列",
+    keep_one_row_msg: "请至少保留一行",
+    no_here_val_msg: "无法在此处插入值",
+    select_table_category: "请选择表格分类",
+    saving_loading_text: "保存中...",
+    table_explaination_text: "表格说明",
+    already_exists_msg: "指标已存在",
+    please_add_table_msg: "请添加表格",
+    data_row_label: "指标列+日期行",
+    data_column_label: "指标行+日期列",
+    select_table_contents: "请选择表格目录",
+    the_sheet_page_selected: "根据用户选择的sheet页上传文件",
+    please_select_sheet_msg: "请选择要保存的sheet页",
+    please_select_category_msg: "请选择分类",
+    table_name_empty_msg: "表格名称不能为空",
+    name_empty_msg: "名称不能为空",
+    TableInstructionsText: `表格说明:<br>
+    1、手动输入:单击每个单元格可直接输入文本、数字、日期(格式示例:2023-05-23),输入内容可匹配指标名称,ETA指标库和ETA预测指标库指标均可搜索,在下拉框中选择指标,则该单元格为已选指标行/列。<br>
+    2、插入指标值:右键单元格,点击“插入指标值”,则查询该单元格行、列最近的日期和指标名称,将查找到的指标对应日期的值填入该单元格,指标值总是在右下角。<br>
+    3、更新与计算规则:表格中指标值的日期不自动更新,数值不支持单元格计算`,
+    date_type_label: "日期类型",
+    past_date_label: "过去日期",
+    future_date_label: "未来日期",
+    number_lable: "期数",
+    please_enter_number: "请输入期数",
+    deadline_lable: "截止日期",
+    please_enter_deadline: "请输入截止日期",
+    deadline_cannot_be_empty: "截止日期不能为空",
+    number_cannot_be_empty: "期数不能为空",
+    label_move_way: "移动方式",
+    label_n_val: "N等于",
+    label_calendar: "日历",
+    please_select_frequency: "请选择频度",
+    label_val_type: "数据取值",
+    select_data_type: "请选择数据取值类型",
+    select_criteria_btn: "选择指标",
+    insert_value_btn: "插入值",
+    there_data_no_msg: "该日期无数据",
+    there_data_no_msg: "导入方式",
+    there_data_no_msg: "请选择导入方式",
+    days_label: "天数",
+    update_frequency_label: "更新频度",
+    lastest_date_label: "最新日期",
+    example_show_text: "示例:5,表示当前日期+5天的日期; -5,表示当前日期-5天的日期;",
+    selected_indicators_label: "已选指标:",
+    no_indicators_available_table: "暂无指标",
+    cannot_be_empty_table: "表格分类不能为空",
+    table_data_update_msg: "表格数据已更新",
+    formula_lable: "公式",
+    parent_directory_lable: "上级目录",
+  },
+
+  /* 自定义分析  */
+  CustomAnalysisPage: {
+    up_file_btn: "上传文件",
+    generate_indicators_btn: "生成指标",
+    up_save_tooltip: "根据表格保存的最新内容,更新当前表格生成的所有指标",
+    refresh_loading: "刷新指标",
+    refreshing_loading: "指标刷新中...",
+    no_file_type_msg: "上传失败,格式不符合xlsx",
+    up_file_five_msg: "上传文件最大不能超过5M",
+    up_new_file_msg: "已有同名文件,请上传新文件",
+    parsing_file_error_msg: "解析文件失败",
+    select_one_region_msg: "同时只允许选择一块区域",
+    only_allowed_select_msg: "序列只允许选择同行或同列",
+    select_date_sequence: "请选择日期序列",
+    select_date_numerical: "请选择数值序列",
+    select_appropriate_category: "请选择所属目录",
+    select_frequency: "请选择频率",
+    rules_edbName: "指标名称不能为空",
+    rules_classify: "目录不能为空",
+    rules_frequency: "频率不能为空",
+    rules_unit: "单位不能为空",
+    date_sequence_cannot_msg: "日期序列不能为空",
+    numerical_sequence_cannot_msg: "数值序列不能为空",
+  },
+
+  ETableChildren: {
+    date_calculation_btn: "日期计算",
+    select_date_pld: "选择日期",
+    add_more_dates: "添加更多日期",
+    formula_lable: "计算公式",
+    formula_enter_pld: "请输入公式",
+    example_a_b: "公式示例:A-B 以数字形式返回日期A和日期B的天数差",
+    indicators_cap_reached: "添加指标个数已达上限",
+    input_formula_valid: "计算公式不能为空",
+    date_change_label: "日期变换",
+    date_displacement_label: "日期位移",
+    specified_frequency_tag: "指定频率",
+    added_frequency_offset_msg: "已添加指定频率",
+    added_date_offset_msg: "已添加日期位移",
+    impord_date_title: "导入日期",
+    indicator_date_radio: "指标日期",
+    frequency_lable: "频度",
+    lagging_period_label: "期数前移",
+    system_date_rai: "系统日期",
+    term_ipt: "期",
+    formula_explanation_btn: "公式说明",
+    tips_text:`
+    公式说明:<br>
+    1、指标日期:取所选指标最新日期,跟随最新日期更新。<br>
+    2、系统日期:取系统日期,跟随系统日期更新。<br>
+    3、日期位移示例:<br>
+    原日期 2023/10/12,日期位移函数设置为5天0月0年,则转换后日期为2023/10/17。<br>
+    原日期 2023/10/12,日期位移函数设置为30天0月0年,则转换后日期为2023/11/11。<br>
+    原日期2023/10/30,日期位移函数设置为0天1月0年,则转换后日期为2023/11/30。<br>
+    原日期2023/10/31,日期位移函数设置为0天1月0年,则转换后日期为2023/12/1。<br>
+    4、日期位移与指定频率互相叠加,示例:<br>
+    原日期 2023/10/12, 先日期位移1月(2023/11/12),后频率设置本月最后一天,则转化后的日期为2023/11/30。<br>
+    原日期 2023/10/12 ,先频率设置本月最后一天(2023/10/31),后日期位移1月,则转化后的日期为2023/12/1。
+  `,
+  latest_date_indicator: "指标最新日期",
+  advance_the_term: "期数前移",
+  table_date_rai: "表格日期",
+  select_metric_first_msg: "请先选择指标",
+  number_label: "数字",
+  percentile_label: "百分位",
+  number_reduce_title: "减少小数位数",
+  number_increase_title: "增加小数位数",
+  enter_n_value: "请输入N数值",
+  select_calendar_pld: "请选择日历",
+  frequentness_lable: "频度",
+  final_value_lable: "期末值",
+  average_value_lable: "平均值",
+  alpha_value_lable: "alpha值",
+  calculate_result: "计算结果",
+  no_corresponding_data: "无对应的数据",
+  calculation_btn: "计算",
+  only_select_msg: "只能选择月度指标",
+  no_quarterly_msg: "不能选择季度指标",
+  no_day_msg: "不能选择日度指标",
+  no_year_msg: "不能选择年度指标",
+  no_year_msg: "不能选择年度指标",
+  ahead_lable: "领先",
+  lagging_lable: "滞后",
+  select_metric: "请选择指标",
+  },
+};

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

@@ -0,0 +1,216 @@
+export default {
+  Btn: {
+    refresh_btn: {
+      zh: "刷新",
+      en: "Refresh",
+    },
+    download_btn: {
+      zh: "下载",
+      en: "Download",
+    },
+    edit_btn: {
+      en: "Edit",
+      zh: "编辑",
+    },
+    save_as: {
+      en: "Save as",
+      zh: "另存为",
+    },
+    save_btn: {
+      en: "Save",
+      zh: "保存 ",
+    },
+    delete_btn: {
+      en: "Delete",
+      zh: "删除",
+    },
+    add_btn: {
+      en: "Add",
+      zh: "添加",
+    },
+    back_btn: {
+      en: "Return",
+      zh: "返回",
+    },
+    all_btn: {
+      en: "All",
+      zh: "全部",
+    },
+    cancel_btn: {
+      en: "Cancel",
+      zh: "取消",
+    },
+    renew_btn: {
+      en: "Renew",
+      zh: "更新",
+    },
+  },
+  Msg: {
+    is_del_table_msg: {
+      en: "Once deleted, this table will no longer be referable. Are you sure you want to delete it?",
+      zh: "删除后该表格将不能再引用,确认删除吗?",
+    },
+    refresh_success_msg: {
+      en: "Refresh successfully",
+      zh: "刷新成功",
+    },
+    move_success_msg: {
+      en: "Move succeeded",
+      zh: "移动成功!",
+    },
+    sdded_success_msg: {
+      en: "Added succeeded",
+      zh: "添加成功!",
+    },
+    please_select: {
+      en: "Please select",
+      zh: "请选择",
+    },
+    date_no_data: {
+      en: "No value for this date",
+      zh: "该日期当期无值",
+    },
+    insertion_success_msg: {
+      en: "Insertion Successful",
+      zh: "插入成功",
+    },
+  },
+  Date: {
+    monday: {
+      zh: "周一",
+      en: "Monday",
+    },
+    tuesday: {
+      zh: "周二",
+      en: "Tuesday",
+    },
+    wednesday: {
+      zh: "周三",
+      en: "Wednesday",
+    },
+    thursday: {
+      zh: "周四",
+      en: "Thursday",
+    },
+    friday: {
+      zh: "周五",
+      en: "Friday",
+    },
+    saturday: {
+      zh: "周六",
+      en: "Saturday",
+    },
+    sunday: {
+      zh: "周日",
+      en: "Sunday",
+    },
+    this_week: {
+      zh: "本周",
+      en: "This week",
+    },
+    day: {
+      zh: "日",
+      en: "Day",
+    },
+    this_ten_days: {
+      zh: "本旬",
+      en: "This ten day",
+    },
+    this_month: {
+      zh: "本月",
+      en: "This month",
+    },
+    this_season: {
+      zh: "本季",
+      en: "This season",
+    },
+    this_half_year: {
+      zh: "本半年",
+      en: "This half year",
+    },
+    this_year: {
+      zh: "本年",
+      en: "This year",
+    },
+    day: {
+      zh: "天",
+      en: "Day",
+    },
+    month: {
+      zh: "月",
+      en: "Month",
+    },
+    year: {
+      zh: "年",
+      en: "Year",
+    },
+    week_min: {
+      zh: "周",
+      en: "week",
+    },
+    quarter_min: {
+      zh: "季",
+      en: "season",
+    },
+    day_lable: {
+      zh: "日度",
+      en: "Daliy",
+    },
+    week_lable: {
+      zh: "周度",
+      en: "Weekly",
+    },
+    dekad_lable: {
+      zh: "旬度",
+      en: "Every ten days",
+    },
+    month_lable: {
+      zh: "月度",
+      en: "Monthly",
+    },
+    quarter_lable: {
+      zh: "季度",
+      en: "Quarterly",
+    },
+    year_lable: {
+      zh: "年度",
+      en: "Yearly",
+    },
+    calendar_gre: {
+      zh: "公历",
+      en: "Gregorian Calendar",
+    },
+    calendar_lunar: {
+      zh: "农历",
+      en: "Lunar Calendar",
+    },
+    first_day: {
+      zh: "第一天",
+      en: "First Day",
+    },
+    last_day: {
+      zh: "最后一天",
+      en: "Last Day",
+    },
+  },
+  MenuSelect: {
+    left_column: {
+      zh: "向左插入列",
+      en: "Insert Column Left",
+    },
+    right_column: {
+      zh: "向右插入列",
+      en: "Insert Column Right",
+    },
+    row_above: {
+      zh: "向上插入行",
+      en: "Insert row above",
+    },
+    row_below: {
+      zh: "向下插入行",
+      en: "Insert row below",
+    },
+  },
+};
+
+//ETable

+ 161 - 0
src/lang/modules/EtaBase/En.js

@@ -0,0 +1,161 @@
+/* 指标库模块 */
+
+export default {
+  /* 指标库页面 */
+  EtaBasePage: {
+    add_edb_btn: 'Add Indicator',
+    calculation_edb_btn: 'Calculation',
+    replace_edb_btn: 'Indicator Replacement',
+    algorithm_btn: 'Code Algorithm',
+    adjustment_btn: 'Data Adjustment',
+    search_placeholder: 'Indicator ID/Indicator Name',
+    add_first_menu_btn: 'Add first-level catalogue',
+    total_show: 'Total {limit} indicators',
+    time_show: 'Creat Time',
+    no_quote_edb: 'No cited calculated indicators',
+    no_quote_chart: 'No associated charts available for this indicator',
+    refresh_ing_msg: 'Updating data...',
+
+    /* 添加指标弹窗 */
+    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: 'Daily Amplitude',
+    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: 'You currently do not have the permission to view this indicator. If you need access, please contact the administrator.',
+    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?',
+    replace_ing_msg: 'The replacement is currently in progress, please be patient',
+    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',
+    calculate_edit_title: 'Edit Calculation',
+    calculate_view_title: 'View Calculation',
+    add_more_param: 'Add more parameters',
+    create_edb_time_index: 'Generate Indicator Time Series',
+    null_val_deal: 'Null Value Handling',
+    max_null_val: 'MAX、MIN Null Value Handling',
+    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',
+    num_overrun_msg: 'The number of indicators added has reached the limit.',
+    label_move_way: 'Moving Mode',
+    label_n_val: 'N equals to',
+    label_calendar: 'Calendar',
+    label_val_type: '数据取值',
+    val_type_end: '期末值',
+    val_type_average: '平均值',
+
+    /* 指标拼接弹窗 */
+    concat_tab_1:'Direct Splicing',
+    concat_tab_2:'Year-over-Year Cumulative Value Concatenation',
+    label_concat_date: 'Splicing Date',
+    label_concat_date_before: 'Before Splicing',
+    label_concat_date_after: 'After Splicing',
+    label_concat_edb: 'Indicator to be spliced',
+    label_onyear_date: 'Year-on-Year (YoY) Indicator',
+    label_end_date:'End Date',
+
+    /* 拟合残差弹窗 */
+    label_self_var: 'Independent Variable',
+    label_depend_var: 'Dependent Variable',
+    label_fit_date: 'Fitting Time Period',
+    ph_start: 'Start Time',
+    ph_to_now: 'So Far',
+    ph_end: 'End Time',
+    move_type_tab1: 'Standard Indicator',
+    move_type_tab2: 'Lead Days',
+
+    /* 扩散指数弹窗 */
+    add_more_edb: 'Add more indicators',
+    label_diff_date: 'Diffusion Index Date',
+    label_date_tab1: 'Union of All Dates',
+    label_date_tab2: 'Union of Part of Dates',
+
+    /* 最新值弹窗 */
+    latest_val: 'latest value'
+  },
+
+  /* 代码运算页面 */
+  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'
+  }
+}

+ 162 - 0
src/lang/modules/EtaBase/Zh.js

@@ -0,0 +1,162 @@
+/* 指标库模块 $t('EtaBasePage').xxx*/
+
+export default {
+  /* 指标库页面 */
+  EtaBasePage: {
+    add_edb_btn: '添加指标',
+    calculation_edb_btn: '计算指标',
+    replace_edb_btn: '替换指标',
+    algorithm_btn: '代码运算',
+    adjustment_btn: '数据调整',
+    search_placeholder: '指标ID/指标名称',
+    add_first_menu_btn: '添加一级目录',
+    total_show: '共{limit}个指标',
+    time_show: '创建时间',
+    no_quote_chart: '该指标暂无关联图',
+    no_quote_edb: '暂无引用的计算指标',
+    refresh_ing_msg: '刷新数据中...',
+
+    /* 添加指标弹窗 */
+    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: '本次替换将持续较长时间,是否确认替换?',
+    replace_ing_msg: '当前正在替换中,请耐心等待',
+    input_origin_vaild: '原指标不能为空',
+    input_replace_vaild: '替换指标不能为空',
+
+    /* 目录弹窗 */
+    parent_menu: '上级目录',
+    menu_name: '目录名称',
+    input_menu_msg: '目录名称不能为空',
+
+    /* 计算指标弹窗 */
+    normal_calculate_tab: '常规计算',
+    batch_calculate_tab: '批量计算',
+    calculate_title: '计算指标',
+    calculate_edit_title: '编辑计算指标',
+    calculate_view_title: '查看计算指标',
+    add_more_param: '添加更多参数',
+    create_edb_time_index: '生成指标时间序列',
+    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:'新增分段',
+    num_overrun_msg: '添加指标个数已达上限',
+    label_move_way: '移动方式',
+    label_n_val: 'N等于',
+    label_calendar: '日历',
+    label_val_type: '数据取值',
+    val_type_end: '期末值',
+    val_type_average: '平均值',
+
+    /* 指标拼接弹窗 */
+    concat_tab_1:'直接拼接',
+    concat_tab_2:'累计值同比拼接',
+    label_concat_date: '拼接日期',
+    label_concat_date_before: '拼接日期之前',
+    label_concat_date_after: '拼接日期之后',
+    label_concat_edb: '待拼接指标',
+    label_onyear_date: '同比值指标',
+    label_end_date:'截止日期',
+
+    /* 拟合残差弹窗 */
+    label_self_var: '自变量',
+    label_depend_var: '因变量',
+    label_fit_date: '拟合时间段',
+    ph_start: '开始日期',
+    ph_to_now: '至今',
+    ph_end: '结束日期',
+    move_type_tab1: '标准指标',
+    move_type_tab2: '领先天数',
+
+    /* 扩散指数弹窗 */
+    add_more_edb: '添加更多指标',
+    label_diff_date: '扩散指标日期',
+    label_date_tab1: '全部日期并集',
+    label_date_tab2: '部分日期并集',
+
+    /* 最新值弹窗 */
+    latest_val: '最新值'
+
+  },
+
+  /* 代码运算页面 */
+  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: '请输入表格内容'
+  }
+}

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

@@ -0,0 +1,1173 @@
+/* 指标相关的通用文字 
+  在最外层commonLang中用 
+  $t('Edb.xxx')
+*/
+
+export default {
+  trend_chart_tab: {
+    zh:'走势图',
+    en: 'Trend Chart'
+  },
+  data_detail_tab: {
+    zh:'数据详情',
+    en: 'Data Detail'
+  },
+  detail_refresh_btn:{
+    zh:'刷新',
+    en:'Update'
+  },
+  detail_edit_btn:{
+    zh:'编辑',
+    en:'Edit'
+  },
+  detail_save_btn:{
+    zh:'保存',
+    en:'Save'
+  },
+  detail_trace_btn:{
+    zh:'指标溯源',
+    en:'Indicator Traceability'
+  },
+  detail_more_btn:{
+    zh:'更多操作',
+    en: 'More Operation'
+  },
+  detail_en_btn:{
+    zh:'设置英文名称',
+    en:'Set English name'
+  },
+  detail_recalculate_btn:{
+    zh:'重新计算',
+    en:'Recalculate'
+  },
+  detail_copydata_btn:{
+    zh:'复制数据',
+    en:'Copy data'
+  },
+  detail_lookdata_btn: {
+    zh:'查看数据',
+    en:'View indicators'
+  },
+  detail_del_btn:{
+    zh:'删除',
+    en:'Delete'
+  },
+  detail_add_latest:{
+    zh:'添加最新值',
+    en:'Add latest value'
+  },
+  detail_edit_latest:{
+    zh:'编辑最新值',
+    en:'Edit latest value'
+  },
+  detail_refresh_all:{
+    zh:'全部刷新',
+    en:'Update all'
+  },
+  creater: {
+    zh:'添加人',
+    en:'Creator'
+  },
+  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'
+  },
+  switch_curve: {
+    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'
+  },
+  choose_edb: {
+    zh:'选择指标',
+    en:'Select indicators'
+  },
+  have_choose_edb: {
+    zh:'已选指标',
+    en:'Selected Indicator'
+  },
+  calculate_ing: {
+    zh:'计算中...',
+    en:'Calculating...'
+  },
+  time_len_set: {
+    zh:'时间长度设置',
+    en:'Time Duration Setting'
+  },
+  recent_n_yaer: {
+    zh:'最近N年',
+    en:'Recently N years'
+  },
+  interval_set: {
+    zh:'区间设置',
+    en:'Set Time Period'
+  },
+  year_num: {
+    zh:'年数',
+    en:'Number of years'
+  },
+
+
+  /* 指标相关字段 */
+  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_start_date: {
+      zh:'起始日期',
+      en:'Start 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'
+    },
+    e_en_unit: {
+      zh:'英文单位',
+      en:'English Unit'
+    },
+    e_en_name: {
+      zh:'英文指标名称',
+      en:'Enligh Indicator Name'
+    },
+    predict_date: {
+      zh:'预测日期',
+      en:'Predictive Date'
+    },
+    predict_end_date: {
+      zh:'预测截止日期',
+      en:'Expiry Date of Prediction'
+    },
+    predict_val: {
+      zh:'预测值',
+      en:'Predictive Value'
+    },
+    add_to_edb:{
+      zh:'添加指标库',
+      en:'Add indicator library'
+    },
+    create_chart_btn:{
+      zh:'一键成图',
+      en:'Graph'
+    },
+    add_indicator_btn:{
+      zh:'添加指标',
+      en:'Add indicator'
+    },
+    select_catalogue:{
+      zh:'所属目录',
+      en:'catalogue'
+    }
+
+  },
+
+  /* 单位 */
+  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:'Decadal'
+    },
+    month: {
+      zh:'月度',
+      en:'Monthly'
+    },
+    quarter: {
+      zh:'季度',
+      en:'Quarterly'
+    },
+    half_year: {
+      zh:'半年度',
+      en:'Semi-Annual'
+    },
+    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: 'Down-conversion'
+    },
+    diff_index: {
+      zh: '扩散指数',
+      en: 'Diffusion Index'
+    },
+    cumulate: {
+      zh: '累计值',
+      en: 'Cumulative Value'
+    },
+    cumulate_oneyear: {
+      zh: '年初至今累计值',
+      en: 'Year-to-date Cumulative Value'
+    },
+    ex_smooth: {
+      zh: '指数修匀',
+      en: 'Exponential Smoothing'
+    },
+    day_mean: {
+      zh: '日均值',
+      en: 'Daily Mean'
+    },
+    standard_differ: {
+      zh: '标准差',
+      en: 'Standard deviation'
+    },
+    percent: {
+      zh: '百分比',
+      en: 'Percentile'
+    },
+    select_date: {
+      zh: '根据日期选择指标值',
+      en: 'Select values by date'
+    },
+    indicator_calculation: {
+      zh: '指标计算',
+      en: 'Indicator calculation'
+    },
+    rule_move_average: {
+      zh: 'N期移动均值',
+      en: 'Moving Average'
+    },
+    period_over_period: {
+      zh: 'N期环比值',
+      en: 'N-Period Period-over-Period Value'
+    },
+    period_difference: {
+      zh: 'N期环比值',
+      en: 'N-Period Difference Value'
+    },
+    annualized: {
+      zh: '年化值',
+      en: 'Annualized Value'
+    },
+    frequency: {
+      zh: '降频',
+      en: 'Downsample or Reduce Frequency'
+    },
+  },
+
+  /* 指标添加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: 'Moving mode can not be empty'
+    },
+    calendar_msg: {
+      zh: '日历不能为空',
+      en: 'Calendar can not be empty'
+    },
+    alpha_msg: {
+      zh: 'alpha值不能为空',
+      en: 'Alpha can not be empty'
+    },
+    alpha_value_vaild: {
+      zh: '请输入>0,<1的数值',
+      en: 'Please enter a value greater than 0 and less than 1'
+    },
+    no_edb: {
+      zh: '指标不能为空',
+      en: 'The indicator can not be empty'
+    },
+    date_msg: {
+      zh: '日期不能为空',
+      en: 'Date can not be empty'
+    },
+    val_msg: {
+      zh: '值不能为空',
+      en: 'Value can not be empty'
+    },
+    classify_msg: {
+      zh: '分类不能为空',
+      en: 'Category can not be empty'
+    },
+    common_msg: {
+      zh: '{label}不能为空',
+      en: '{label} can not be empty'
+    }
+  },
+
+  /* 计算按钮 */
+  CalculateBtns: {
+    calculate: {
+      zh: '生成计算指标',
+      en: 'Generate calculation index'
+    },
+    to_month: {
+      zh: '转月值计算',
+      en: 'Month Convertion Calculation'
+    },
+    to_quarter: {
+      zh: '转季值计算',
+      en: 'Season Convertion Calculation'
+    },
+    on_year: {
+      zh: '同比值计算',
+      en: 'YoY Calculation'
+    },
+    differ: {
+      zh: '同差值计算',
+      en: 'Difference Value Calculation'
+    },
+    n_move_average: {
+      zh: '移动平均计算',
+      en: 'Moving Average Calculation'
+    },
+    n_rate: {
+      zh: '环比值计算',
+      en: 'MoM Growth Rate Calculation'
+    },
+    n_differ: {
+      zh: '环差值计算',
+      en: 'PoP Difference Calculation'
+    },
+    up_conver: {
+      zh: '升频计算',
+      en: 'Up-conversion Calculation'
+    },
+    super_season: {
+      zh: '超季节性计算',
+      en: 'Super-seasonality Calculation'
+    },
+    fit_residu: {
+      zh: '拟合残差计算',
+      en: 'Fit Residual Calculation'
+    },
+    annual: {
+      zh: '年化计算',
+      en: 'Annualization Calculation '
+    },
+    down_conver: {
+      zh: '降频计算',
+      en: 'Downconversion Calculation'
+    },
+    diff_index: {
+      zh: '扩散指数计算',
+      en: 'Diffusion Index Calculation'
+    },
+    cumulate: {
+      zh: '累计值计算',
+      en: 'Cumulative Value Calculation '
+    },
+    cumulate_oneyear: {
+      zh: '年初至今计算',
+      en: 'Year-to-date Calculation'
+    },
+    ex_smooth: {
+      zh: '指数修匀计算',
+      en: 'Exponential Smoothing Calculation'
+    },
+    day_mean: {
+      zh: '日均值计算',
+      en: 'Daily Average Calculation'
+    },
+  },
+
+  /* 通用相关pholder */
+  InputHolderAll: {
+    input_name_orid: {
+      zh: '指标ID/指标名称',
+      en: 'Indicator ID/Indicator Name'
+    },
+    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'
+    },
+    input_n_val: {
+      zh: '请输入N值',
+      en: 'Please input N value'
+    },
+    input_alpha_val: {
+      zh: '请输入alpha值',
+      en: 'Please input alpha'
+    },
+    input_common: {
+      zh: '请输入{label}',
+      en: 'Please input {label}'
+    },
+    input_number: {
+      zh: '请输入数字',
+      en: 'Please input number'
+    },
+    input_date: {
+      zh: '请选择日期',
+      en: 'Please select date'
+    },
+    select_edb_name:{
+      zh: '请选择指标名称',
+      en: 'Please select an indicator name'
+    },
+    input_classify:{
+      zh: '请选择所属分类',
+      en: 'Please select category'
+    },
+    select_menu_name: {
+      zh: '请选择分类名称',
+      en: 'Please select category name'
+    },
+    input_select_edb: {
+      zh: '请选择指标',
+      en: 'Please select Indicator'
+    }
+  },
+  
+  /* 公示说明 */
+  FormulaTips: {
+    calculate: {
+      zh: `指标运算:<br>
+      1、选择指标参数<br>
+      2、生成指标的时间序列:以第一个指标为准,其他指标去匹配第一个指标的日期序列,没有值的,按照所选空值处理方式处理<br>
+      3、按照输入的计算公式进行计算`,
+      en: `Index calculation:<br>
+      1、Select index parameters<br>
+      2、Generate time series for the indicator: use the first indicator as a reference, align other indicators with the date sequence of the first one, and handle missing values according to the selected method for dealing with nulls.<br>
+      3、Calculate based on the input formula.`
+    },
+    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.`
+    }
+  },
+
+  /* 提示信息 */
+  MsgPrompt: {
+    del_not_relate_edb: {
+      zh: '该目录关联指标不可删除',
+      en: 'Cannot delete index linked to this directory'
+    },
+    del_confirm_menu_or_children: {
+      zh: '确认删除当前目录及包含的子目录吗?',
+      en: 'Are you sure you want to delete the current directory and all its subdirectories?'
+    },
+    del_failed: {
+      zh: '删除失败',
+      en: 'Deletion Failed'
+    },
+    del_edb_confirm: {
+      zh: '删除后指标和指标值均不可使用,确认删除吗?',
+      en: 'Once deleted, both the indicators and their values will become unusable. Are you sure you want to delete them?'
+    },
+    del_edb_use_chart: {
+      zh: '当前指标已用作画图,不可删除',
+      en: 'The current indicator is being used for drawing and cannot be deleted.'
+    },
+    del_menu_confirm: {
+      zh: '确定删除当前目录吗?',
+      en: 'Are you sure you want to delete the current directory?'
+    },
+
+    edb_not_enougth_info: {
+      zh: '指标信息请填写完整!',
+      en: 'Please fill in the indicator information completely!'
+    },
+    date_haved_msg: {
+      zh: '该日期已存在',
+      en: 'The date already exists.'
+    },
+    date_have_value_msg: {
+      zh: '该日期已存在数据值{val},确认修改?',
+      en: 'Data value {val} already exists for this date, Do you confirm the modification?'
+    }
+  }
+  
+}

+ 87 - 0
src/lang/modules/EtaChart/En.js

@@ -0,0 +1,87 @@
+/* eta图库模块 
+  $t('EtaChartPage.xxx')
+*/
+export default {
+  /* eta图库页面 */
+  EtaChartPage: {
+    tab_classify: 'Catalogue',
+    tab_series: 'Axis',
+    add_classify_btn: 'Add Chart Category',
+    label_tag_serie:'Label, Series Name',
+
+    //分类弹窗
+    one_level_menu: 'First-level Directory',
+    two_level_menu: 'Secondary Directory ',
+
+    /* 加入我的图库弹窗 */
+    add_my_classify: 'Add category'
+  },
+  
+  /* 添加编辑图库页面 */
+  EtaChartAddPage: {
+    label_lead: 'Leading',
+    label_chart_type: 'The Catagory of Chart Generated',
+    label_chart_theme: 'Chart Theme',
+    label_xserie_range: 'X-axis Display Range',
+    xserie_range_tip: `
+      Configure the time scale displayed on the X-axis</br>
+      1、If the start date is earlier than the end date, the default is not to cross the year, and you can check the check box to cross the year.</br>
+      2、If the start date is later than or equal to the end date, it will cross the year and the check is not allowed.
+    `,
+    label_cross_year:'Cross the year',
+    label_legend_set:'Legend Name Settings',
+    no_set_msg: 'No configuration available',
+    add_date_btn: 'Add date',
+    label_sort_rule: 'Sorting Rule',
+    option_sort_config: 'Default',
+    option_sort_up: 'Ascending',
+    option_sort_low: 'Descending',
+    label_date_way: 'Create Method',
+    label_day_num: 'Days',
+    label_date_choose: 'Select date',
+
+    //图例设置弹窗
+    legend_hint: 'By default, the data year of the latest date of the curve is used as the legend name. If you manually edit it to other formats, it will no longer be automatically updated.',
+
+    //标示线区弹窗
+    add_plotline_btn: 'Add Marker Line',
+    add_plotarea_btn: 'Add Marker Area',
+    edit_plotline_btn: 'Edit Marker Line',
+    edit_plotarea_btn: 'Edit Marker Area',
+    add_intro_btn: 'Add Chart Description',
+    label_select_serie:'Select axis',
+    label_line_scale:'Marker line position',
+    label_area_scale:'Marker area range',
+    label_line_sty:'Line Type',
+    label_line_intru:'Mark Line Description',
+    label_area_intru:'Mark Area Description',
+    label_text_pos:'Text Position',
+    label_text_color:'Text Color',
+    label_text_size:'Text Size',
+    section_line: 'Solid Line',
+    section_dash_long: 'Long Dash Point',
+    section_dash_short: 'Short Dash Point',
+    section_pos_top: 'Top',
+    section_pos_center: 'Center',
+    section_pos_bot: 'Bottom',
+
+    //截面散点图区域
+    label_serie_set:'Series {index} Configuration',
+    label_trend_line:'Trendline',
+    label_fitting:'Fitting Equation',
+    label_show_all:'Show all',
+    label_more_serie: 'More series',
+    label_x_serie:'X-axis',
+    label_y_serie:'Y-axis',
+    label_serie_name: 'Series Name',
+    label_serie_color:'Series Color',
+    tag_tip: 'The label defaults to the X-axis indicator name, which can be modified',
+    label_x_edb: 'X-axis Indicator',
+    label_y_edb: 'Y-axis Indicator',
+    label_edb_num: 'items',
+    label_replace_edb: 'Replace Indicator',
+    label_replace_to:'Replace with',
+    label_add_moreserie:'More series configurations',
+    label_date_unit:'Day'
+  }
+}

+ 87 - 0
src/lang/modules/EtaChart/Zh.js

@@ -0,0 +1,87 @@
+/* eta图库模块 
+  $t('EtaChartPage.xxx')
+*/
+export default {
+  /* eta图库页面 */
+  EtaChartPage: {
+    tab_classify: '目录',
+    tab_series: '坐标轴',
+    add_classify_btn: '添加图表分类',
+    label_tag_serie:'标签,系列名称',
+
+    //分类弹窗
+    one_level_menu: '一级目录',
+    two_level_menu: '二级目录',
+
+    /* 加入我的图库弹窗 */
+    add_my_classify: '新增分类'
+  },
+
+  /* 添加编辑图库页面 */
+  EtaChartAddPage: {
+    label_lead: '领先',
+    label_chart_type: '生成图表类型',
+    label_chart_theme: '图表主题',
+    label_xserie_range: '横坐标显示范围',
+    xserie_range_tip: `
+      配置横坐标显示的时间刻度</br>
+      1、若开始日期小于结束日期,则默认不跨年,允许勾选跨年</br>
+      2、若开始日期大于等于结束日期,则跨年,不允许取消勾选
+    `,
+    label_cross_year:'跨年',
+    label_legend_set:'图例名称设置',
+    no_set_msg: '暂无配置',
+    add_date_btn: '添加日期',
+    label_sort_rule: '排序规则',
+    option_sort_config: '默认',
+    option_sort_up: '升序',
+    option_sort_low: '降序',
+    label_date_way: '添加方式',
+    label_day_num: '天数',
+    label_date_choose: '选择日期',
+
+    //图例设置弹窗
+    legend_hint: '默认取该曲线最新日期的数据年份作为图例名称,手动编辑为其他格式,则不再自动更新',
+
+    //标示线区弹窗
+    add_plotline_btn: '添加标识线',
+    add_plotarea_btn: '添加标识区',
+    edit_plotline_btn: '编辑标识线',
+    edit_plotarea_btn: '编辑标识区',
+    add_intro_btn: '添加图表说明',
+    label_select_serie:'选择坐标轴',
+    label_line_scale:'标识线所在刻度',
+    label_area_scale:'标识区所在范围',
+    label_line_sty:'线型',
+    label_line_intru:'标记线说明',
+    label_area_intru:'标记区说明',
+    label_text_pos:'文本位置',
+    label_text_color:'文本颜色',
+    label_text_size:'文本字号',
+    section_line: '实线',
+    section_dash_long: '长虚线点',
+    section_dash_short: '短虚线点',
+    section_pos_top: '顶部',
+    section_pos_center: '居中',
+    section_pos_bot: '底部',
+
+    //截面散点图区域
+    label_serie_set:'系列{index}配置',
+    label_trend_line:'趋势线',
+    label_fitting:'拟合方程',
+    label_show_all:'全部显示',
+    label_more_serie: '更多系列',
+    label_x_serie:'X轴',
+    label_y_serie:'Y轴',
+    label_serie_name: '系列名称',
+    label_serie_color:'系列颜色',
+    tag_tip: '标签默认取X轴指标名称,可修改',
+    label_x_edb: 'X轴指标',
+    label_y_edb: 'Y轴指标',
+    label_edb_num: '项',
+    label_replace_edb: '指标替换',
+    label_replace_to:'替换为',
+    label_add_moreserie:'更多系列配置',
+    label_date_unit:'天'
+  }
+}

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

@@ -0,0 +1,553 @@
+/* 图表相关的通用文字 
+  在最外层commonLang中用 
+  $t('Chart.xxx')
+*/
+
+export default {
+  total_chart_show: {
+    zh: '共 {limit} 张图表',
+    en: 'Total {limit} charts',
+  },
+  list_chart_time: {
+    zh: '创建时间',
+    en: 'Create Time'
+  },
+  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'
+  },
+  chart_addmy_btn:{
+    zh:'加入我的图库',
+    en:'Add to my gallery'
+  },
+  chart_save_btn:{
+    zh:'保存',
+    en:'Save'
+  },
+  chart_copy_btn:{
+    zh:'另存为',
+    en:'Save as'
+  },
+  chart_edit_btn:{
+    zh:'编辑',
+    en:'Edit'
+  },
+  chart_en_btn:{
+    zh:'设置英文名称',
+    en:'Set English name'
+  },
+  chart_copyoffice: {
+    zh:'复制至office',
+    en:'Copy to office'
+  },
+  chart_copywx: {
+    zh:'复制至微信',
+    en:'Copy to WeChat'
+  },
+  chart_del_btn: {
+    zh:'删除',
+    en:'Delete'
+  },
+  chart_remove_btn: {
+    zh:'移出',
+    en:'Remove'
+  },
+  chart_copyto_btn: {
+    zh:'复制到',
+    en:'Copy to'
+  },
+  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_chart_btn:{
+    zh:'添加图表',
+    en:'Add chart'
+  },
+  only_see_mine:{
+    zh:'只看我的',
+    en:'Just look at mine'
+  },
+  label_create_sty: {
+    zh:'生成样式',
+    en:'Generate style'
+  },
+  up_limit: {
+    zh:'上限',
+    en:'Upper limit'
+  },
+  low_limit: {
+    zh:'下限',
+    en:'Lower limit'
+  },
+  option_date_type_new: {
+    zh:'最新日期',
+    en:'Latest Date'
+  },
+  option_date_type_before: {
+    zh:'N天前',
+    en:'N days ago'
+  },
+  option_date_type_fix: {
+    zh:'固定日期',
+    en:'Fixed Date'
+  },
+
+  //操作提示文案
+  OptMsg:{
+    refresh_ing_msg: {
+      zh:'刷新图表中...',
+      en:'Refreshing chart...'
+    },
+    copy_link_success: {
+      zh:'复制链接成功',
+      en:'Link copied successfully'
+    },
+    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?'
+    },
+    classify_delall_confirm:{
+      zh:'确认删除当前分类及包含的子分类吗?',
+      en:'Are you sure you want to delete the current category and its subcategories?'
+    },
+    chart_del_confirm:{
+      zh:'删除后该图表将不能再引用,确认删除吗?',
+      en:'After deletion, this chart will no longer be referenced. Are you sure to delete it?'
+    },
+    season_one_msg:{
+      zh:'您选择的图表样式为季节性图表,只支持单指标画图',
+      en:'The chart style you selected is a seasonal chart, which only supports single indicator drawing'
+    },
+    scatter_onlytwo_msg: {
+      zh:'您选择的图表样式为散点图,最多支持2个指标',
+      en:'The chart style you have selected is a scatter plot, which supports a maximum of 2 indicators'
+    },
+    edb_haved_msg: {
+      zh:'录入指标已存在',
+      en:'The entered indicator already exists'
+    },
+    copy_tit_success: {
+      zh:'复制标题成功',
+      en:'Title copied successfully'
+    },
+    copy_tit_fail: {
+      zh:'复制标题失败',
+      en:'Failed to copy the title'
+    },
+    add_mine_success: {
+      zh:'已加入我的图库',
+      en:'Successfully added to my gallery'
+    },
+    del_classify_chart_msg: {
+      zh:'若删除该分类,则分类下关联的所有图表将被全部删除, 是否继续?',
+      en:'If you delete this category, all charts associated with the category will be deleted. Do you want to continue?'
+    },
+    del_classify_link_msg: {
+      zh:'该图分类已添加节点链接,不允许删除!',
+      en:'This chart category has added node links and cannot be deleted!'
+    },
+    choose_repalce_msg: {
+      zh:'请选择替换指标',
+      en:'Please select a replacement metric'
+    },
+    copy_noenough_en: {
+      zh:'英文名称未输入完整,分享图表上可能出现空名称的情况,确定继续分享吗?',
+      en:'The English name is not fully entered, which may result in a blank name appearing on the shared chart. Are you sure you want to continue sharing?'
+    }
+
+
+  },
+
+  /* 图表类型 */
+  ChartType:{
+    spline_name:{
+      zh:'曲线图',
+      en:'Line Chart'
+    },
+    season_name:{
+      zh:'季节性图',
+      en:'Seasonal Chart'
+    },
+    stack_column_name:{
+      zh:'堆积柱状图',
+      en:'Stacked Histogram'
+    },
+    scatter_name:{
+      zh:'散点图',
+      en:'Scatter Plot'
+    },
+    combo_name:{
+      zh:'组合图',
+      en:'Combo Chart'
+    },
+    bar_name:{
+      zh:'柱形图',
+      en:'Bar Chart'
+    },
+    cross_scatter_name:{
+      zh:'截面散点图',
+      en:'Cross-sectional Scatter Plot'
+    },
+    radar_name:{
+      zh:'雷达图',
+      en:'Radar Chart'
+    },
+    correlation_name:{
+      zh:'相关性',
+      en:'correlation'
+    },
+    rolling_correlation_name:{
+      zh:'滚动相关性',
+      en:'Rolling correlation'
+    }
+  },
+
+  /* 详情属性 */
+  Detail: {
+    chart_name: {
+      zh:'图表名称',
+      en:'Chart Name',
+    },
+    chart_en_name: {
+      zh:'英文图表名称',
+      en:'English Chart Name',
+    },
+    good_name: {
+      zh:'期货名称',
+      en:'Futures Name',
+    },
+    good_en_name: {
+      zh:'英文期货名称',
+      en:'English Futures Name',
+    },
+    profit_name: {
+      zh:'盘面利润',
+      en:'Plate Profit Name',
+    },
+    profit_en_name: {
+      zh:'英文盘面利润名称',
+      en:'English Plate Profit Name',
+    },
+    chart_classify: {
+      zh:'图表分类',
+      en:'Chart Catagory',
+    },
+    chart_unit: {
+      zh:'图表单位',
+      en:'Chart Unit',
+    },
+    line_color: {
+      zh:'线条颜色',
+      en:'Line Color',
+    },
+    scatter_color: {
+      zh:'散点颜色',
+      en:'Dot Color',
+    },
+    color: {
+      zh:'颜色',
+      en:'Color',
+    },
+    size: {
+      zh:'粗细',
+      en:'Size',
+    },
+    predict_color: {
+      zh:'预测值颜色',
+      en:'Predicted value color',
+    },
+    line_size: {
+      zh:'线条粗细',
+      en:'Line Size',
+    },
+    re_order: {
+      zh:'逆序',
+      en:'Reverse order',
+    },
+    l_axis: {
+      zh:'左轴',
+      en:'Left Axis',
+    },
+    r_axis: {
+      zh:'右轴',
+      en:'Right Axis',
+    },
+    rtwo_axis: {
+      zh:'右2轴',
+      en:'Secondary Right Axis',
+    },
+    h_axis: {
+      zh:'横轴',
+      en:'Horizontal Axis',
+    },
+    stand_lead: {
+      zh:'标准指标',
+      en:'Standard Indicator',
+    },
+    leading_lead: {
+      zh:'领先指标',
+      en:'Leading Indicator',
+    },
+    author: {
+      zh:'作者',
+      en:'Author'
+    },
+    source: {
+      zh:'来源',
+      en:'Source'
+    },
+    x_name: {
+      zh:'X轴名称',
+      en:'X-axis Name '
+    },
+    x_en_name: {
+      zh:'英文X轴名称',
+      en:'English X-axis Name '
+    },
+    y_name: {
+      zh:'Y轴名称',
+      en:'Y-axis Name '
+    },
+    y_en_name: {
+      zh:'英文Y轴名称',
+      en:'English Y-axis Name '
+    },
+    x_unit: {
+      zh:'X轴单位',
+      en:'X-axis Unit '
+    },
+    y_unit: {
+      zh:'Y轴单位',
+      en:'Y-axis Unit '
+    },
+    variety_name: {
+      zh:'品种名称',
+      en:'Variety Name '
+    },
+    variety_en_name: {
+      zh:'英文品种名称',
+      en:'English Variety Name'
+    },
+    tag_name: {
+      zh:'标签',
+      en:'Tag'
+    },
+    serie_name: {
+      zh:'系列',
+      en:'Series'
+    },
+    date_alias: {
+      zh:'日期别名',
+      en:'Date Alias'
+    },
+    plot_line: {
+      zh:'标识线',
+      en:'Mark Line'
+    },
+    plot_area: {
+      zh:'标识区',
+      en:'Mark Area'
+    },
+    chart_intru: {
+      zh:'图表说明',
+      en:'Chart Description'
+    },
+    text_size: {
+      zh:'字号',
+      en:'Size'
+    }
+  },
+
+  /* form校验 */
+  Vailds: {
+    name_msg: {
+      zh: '图表名称不能为空',
+      en: 'Chart name can not be empty'
+    },
+    style_msg: {
+      zh: '生成样式不能为空',
+      en: 'Generate style can not be empty'
+    },
+    classify_msg: {
+      zh: '图表分类不能为空',
+      en: 'Chart category can not be empty'
+    },
+    unit_msg: {
+      zh: '图表单位不能为空',
+      en: 'Chart unit can not be empty'
+    },
+    intro_msg: {
+      zh: '图表说明不能为空',
+      en: 'Chart Description can not be empty'
+    },
+    plotline_msg: {
+      zh: '标识线所在刻度不能为空',
+      en: 'The marker line can not be empty'
+    },
+    plotarea_msg: {
+      zh: '标识区所在范围不能为空',
+      en: 'The marker area ranges can not be empty'
+    },
+    plotarea_same_msg: {
+      zh: '标识区所在范围不能相同',
+      en: 'The marker area ranges can not be identical'
+    },
+    x_name_msg: {
+      zh: 'X轴名称不能为空',
+      en: 'X-axis name can not be empty'
+    },
+    x_unit_msg: {
+      zh: 'X轴单位不能为空',
+      en: 'X-axis unit can not be empty'
+    },
+    y_name_msg: {
+      zh: 'Y轴名称不能为空',
+      en: 'Y-axis name can not be empty'
+    },
+    y_unit_msg: {
+      zh: 'Y轴单位不能为空',
+      en: 'Y-axis unit can not be empty'
+    },
+    serie_name_msg: {
+      zh: '系列名称不能为空',
+      en: 'Series Name can not be empty'
+    },
+    classify_msg: {
+      zh: '分类名称不能为空',
+      en: 'Category name can not be empty'
+    },
+    day_msg: {
+      zh: '天数不能为空',
+      en: 'Days can not be empty'
+    },
+    date_msg: {
+      zh: '日期不能为空',
+      en: 'Date can not be empty'
+    },
+  },
+
+  /* 相关placeholder */
+  InputHolderAll: {
+    input_classify: {
+      zh: '请选择图表分类',
+      en: 'Please select the chart category'
+    },
+    input_en_name: {
+      zh: '请输入英文图表名称',
+      en: 'Please input the English chart name chart'
+    },
+    input_en_unit: {
+      zh: '请输入英文单位',
+      en: 'Please input the English unit'
+    },
+    input_en_label: {
+      zh: '请输入英文名称',
+      en: 'Please input the English name'
+    },
+    input_date: {
+      zh: '请选择日期',
+      en: 'Please select Date'
+    },
+    input_common: {
+      zh: '请输入{label}',
+      en: 'Please input {label}'
+    },
+    input_content: {
+      zh: '请输入内容',
+      en: 'Please input content'
+    },
+    input_classify: {
+      zh: '请输入分类名称',
+      en: 'Please input the category name'
+    }
+  },
+
+  /* 所有source */
+  AllChartSource: {
+    eta_chart: {
+      en: "ETA Gallery",
+      zh: "ETA图库",
+    },
+    commodity_chart: {
+      en: "Commodity Price Curve",
+      zh: "商品价格曲线",
+    },
+    correla_chart: {
+      en: "Correlation Chart",
+      zh: "相关性图表",
+    },
+    equation_chart: {
+      en: "Fit Equation Curve",
+      zh: "拟合方程曲线",
+    },
+    statis_chart: {
+      en: "Statistical Features",
+      zh: "统计特征",
+    },
+    cross_chart: {
+      en: "Intercommodity Analysis",
+      zh: "跨品种分析",
+    },
+  },
+}

+ 67 - 0
src/lang/modules/MainApp/En.js

@@ -0,0 +1,67 @@
+/* 主框架 登录 
+  $t('EtaChartPage.xxx')
+*/
+
+export default {
+  MainPage: {
+    help_center: 'Help Center',
+    tab_help_update: 'Update Log',
+    tab_help_docs: 'Help Documentation',
+    tab_reset_pwd: 'Change Password',
+    tab_log_out: 'Log out'
+  },
+
+  /* 修改密码页面 */
+  ResetPwdPage: {
+    label_old_pwd: 'Old Password',
+    label_new_pwd: 'New Password',
+    label_ensure_pwd: 'Confirm New Password',
+    ph_pwd:'Please enter no more than 20 characters',
+    vaild_old:'Please enter the old password',
+    vaild_rule:'Password must be at least 8 characters with numbers, upper/lowercase letters, and symbols',
+    vaild_new:'Please enter confirmation password',
+    vaild_same:'The new password entries do not match; please check them!',
+    edit_pwd_msg:'Password change successful, please log in again!'
+  },
+
+  /* 登录页 */
+  LoginPage: {
+    login_sub_tit: 'Stay half a step ahead of the market in investment research',
+    login_btn: 'Log in',
+    other_login_type: 'Other login methods',
+    login_by_account:'Account login',
+    login_by_mobile:'Mobile phone login',
+    login_by_email:'Email login',
+    ph_account:'Please enter your account',
+    ph_pwd:'Please enter your password',
+    label_remember: 'Remember account and password',
+    vaild_day_msg: 'Valid for 60 days',
+    label_forget: 'Forgot password',
+    error_wrong_msg: 'Incorrect account or password',
+    error_abnormal_msg: 'Account is abnormal, please log in through verification',
+
+    ph_mobile: 'Please enter your mobile number',
+    ph_email:'Please enter your email address',
+    ph_img_code: 'Please enter the graphic verification code',
+    ph_msg_code: 'Please enter the verification code',
+    ver_code_msg:'Get verification code',
+    recode_ing_msg:'Retrieve Again({count})seconds',
+    recode_msg:'Retrieve Again',
+    vaild_curr_mobile: 'Please enter the correct mobile phone format',
+    vaild_curr_email:'Please enter the correct email format',
+    recode_warn_msg:'To retrieve again, you need to enter the graphic verification code once more',
+    send_code_msg: 'Verification code has been sent',
+
+    ph_new_pwd:"Please enter a new password",
+    label_find_pwd: 'You are retrieving the password for account {name}',
+    label_not_bind:'Not yet bound',
+    send_vaild_btn:'Start verification',
+    step_vaild_one: 'Choose a verification method',
+    step_vaild_two: 'Perform security verification',
+    step_vaild_three: 'Setup a password',
+    reset_pwd_success_msg:'Password reset successful, please log in',
+
+    tab_vaild_phone:'Mobile Phone Verification',
+    tab_vaild_email:'Email Verification',
+  }
+}

+ 67 - 0
src/lang/modules/MainApp/Zh.js

@@ -0,0 +1,67 @@
+/* 主框架 登录 
+  $t('EtaChartPage.xxx')
+*/
+
+export default {
+  MainPage: {
+    help_center: '帮助中心',
+    tab_help_update: '更新日志',
+    tab_help_docs: '帮助文档',
+    tab_reset_pwd: '修改密码',
+    tab_log_out: '退出登录'
+  },
+
+  /* 修改密码页面 */
+  ResetPwdPage: {
+    label_old_pwd: '原密码',
+    label_new_pwd: '新密码',
+    label_ensure_pwd: '确认新密码',
+    ph_pwd:'请输入不超过20个字符',
+    vaild_old:'请输入原密码',
+    vaild_rule:'密码要求8位及以上,包含数字、大写字母、小写字母、特殊字符中的三个类型',
+    vaild_new:'请输入确认密码',
+    vaild_same:'新密码两次输入不一致,请核对!',
+    edit_pwd_msg:'修改密码成功,请重新登录!'
+  },
+
+  /* 登录页 */
+  LoginPage: {
+    login_sub_tit: '让投研领先市场半步',
+    login_btn: '登录',
+    other_login_type: '其他登录方式',
+    login_by_account:'账号登录',
+    login_by_mobile:'手机号登录',
+    login_by_email:'邮箱登录',
+    ph_account:'请输入账号',
+    ph_pwd:'请输入密码',
+    label_remember: '记住账号密码',
+    vaild_day_msg: '有效期60天',
+    label_forget: '忘记密码',
+    error_wrong_msg: '账号或密码错误',
+    error_abnormal_msg: '账号异常,请通过验证登录',
+
+    ph_mobile: '请输入手机号',
+    ph_email:'请输入邮箱',
+    ph_img_code: '请输入图形验证码',
+    ph_msg_code: '请输入短信验证码',
+    ver_code_msg:'获取验证码',
+    recode_ing_msg:'重新获取({count})秒',
+    recode_msg:'重新获取',
+    vaild_curr_mobile: '请输入正确的手机号格式',
+    vaild_curr_email:'请输入正确的邮箱格式',
+    recode_warn_msg:'重新获取需再次输入图形验证码',
+    send_code_msg: '验证码已发送',
+    
+    ph_new_pwd:"请输入新密码",
+    label_find_pwd: '您正在找回账号{name}的密码',
+    label_not_bind:'暂未绑定',
+    send_vaild_btn:'开始验证',
+    step_vaild_one: '选择验证方式',
+    step_vaild_two: '进行安全验证',
+    step_vaild_three: '设置密码',
+    reset_pwd_success_msg:'重置密码成功,请登陆',
+
+    tab_vaild_phone:'手机号验证',
+    tab_vaild_email:'邮箱验证',
+  }
+}

+ 83 - 0
src/lang/modules/MyEta/En.js

@@ -0,0 +1,83 @@
+/* myeta模块 
+  $t('MyEtaPage.xxx')
+*/
+export default {
+  /* myeta页面 */
+  MyEtaPage: {
+    choose_chart_btn: 'Select chart',
+    tab_public: 'Public Gallery',
+    tab_my: 'My Gallery',
+    option_view_person: 'Visible only to yourself',
+    option_view_all: 'Visible to all',
+    option_op_rename:'Rename',
+    option_op_copy:'Copy',
+    add_myclassify_btn: 'Create my catagory',
+    label_share_user: ' Shared by',
+
+    //选择图表弹窗
+    label_choose_chart: 'Select chart',
+    label_update_time: 'Latest Updates',
+    label_see_mine: 'Only mine',
+
+    /* 分类弹窗 */
+    label_add_classify: 'Add catagory',
+    label_classify_name: 'Category Name',
+    label_copy_classify: 'Choose a catagory for copied chart',
+    label_copy_to: 'Copy to',
+    label_rename_classify: 'Rename Catagory',
+    ph_classify:'Please enter the category name',
+    ph_menu:'Please select a catagory',
+  },
+
+  /* 图库框架 */
+  ChartFramePage: {
+    add_frame_btn: 'Add frame',
+    ph_search:'Please enter a frame name',
+    tab_public: 'Public Frame',
+    tab_my:'My Frame',
+    option_view_person: 'Visible only to yourself',
+    option_view_all: 'Visible to all',
+    option_op_rename: 'Rename',
+    label_create_time: 'Creation Time',
+    label_update_time: 'Update Time',
+    detail_copy_img: 'Copy picture',
+    del_confirm_msg:' It cannot be recovered after deletion. Do you confirm the deletion?',
+    vaild_node_name: 'Please enter the node name',
+
+    //重命名弹窗
+    label_rename:'Rename the frame',
+    label_frame_name: 'Frame Name',
+
+    //复制弹窗
+    label_copy_mine: 'Copy to My Gallery'
+  },
+
+  /* 图库框架编辑 */
+  ChartFrameEditorPage: {
+    add_node: 'Add node',
+    edit_node:'Edit node',
+    op_redo:'Recover',
+    op_restore:'Cancel',
+    op_size:'Font Size',
+    op_bold:'Bold',
+    op_lta:'Italics',
+    op_underline:'下划线',
+    op_color:'Font Color',
+    op_align:'Text Alignment',
+    op_fill:'Fillling Color',
+    op_border:'Border Color',
+    op_linewid:'Wireframe Width',
+    op_linesty:'Border Style',
+    op_start_arrow:'Start Arrow',
+    op_end_arrow:'End Arrow',
+    no_link_msg:'The gallery linked to this node contains no charts',
+    no_classify_msg:'This node has not selected a chart category',
+
+    //节点名称
+    label_node_name:'Node Name',
+    label_label_link:'Node Link',
+    ph_link: 'Please select a node link',
+
+    no_graph_msg: 'Please draw canvas content'
+  }
+}

+ 84 - 0
src/lang/modules/MyEta/Zh.js

@@ -0,0 +1,84 @@
+/* myeta模块 
+  $t('MyEtaPage.xxx')
+*/
+export default {
+  /* myeta页面 */
+  MyEtaPage: {
+    choose_chart_btn: '选择图表',
+    tab_public: '公共图库',
+    tab_my: '我的图库',
+    option_view_person: '仅自己可见',
+    option_view_all: '所有人可见',
+    option_op_rename:'重命名',
+    option_op_copy:'复制',
+    add_myclassify_btn: '添加我的分类',
+    label_share_user: '分享人',
+
+    //选择图表弹窗
+    label_choose_chart: '选择图表',
+    label_update_time: '最近更新',
+    label_see_mine: '只看我的',
+
+    /* 分类弹窗 */
+    label_add_classify: '新增分类',
+    label_classify_name: '分类名称',
+    label_copy_classify: '复制图表分类',
+    label_copy_to: '复制到',
+    label_rename_classify: '重命名分类',
+    ph_classify:'请输入分类名称',
+    ph_menu:'请选择目录',
+
+  },
+
+  /* 图库框架 */
+  ChartFramePage: {
+    add_frame_btn: '添加框架',
+    ph_search:'请输入框架名称',
+    tab_public: '公共框架',
+    tab_my:'我的框架',
+    option_view_person: '仅自己可见',
+    option_view_all: '所有人可见',
+    option_op_rename: '重命名',
+    label_create_time: '创建时间',
+    label_update_time: '更新时间',
+    detail_copy_img: '复制图片',
+    del_confirm_msg:'删除后不可恢复,确认删除吗?',
+    vaild_node_name: '请输入节点名称',
+
+    //重命名弹窗
+    label_rename:'重命名框架',
+    label_frame_name: '框架名称',
+
+    //复制弹窗
+    label_copy_mine: '复制到我的图库'
+  },
+
+  /* 图库框架编辑 */
+  ChartFrameEditorPage: {
+    add_node: '添加节点',
+    edit_node:'编辑节点',
+    op_redo:'撤销',
+    op_restore:'恢复',
+    op_size:'字号',
+    op_bold:'加粗',
+    op_lta:'斜体',
+    op_underline:'下划线',
+    op_color:'字体颜色',
+    op_align:'文本对齐',
+    op_fill:'填充颜色',
+    op_border:'边框颜色',
+    op_linewid:'线框宽度',
+    op_linesty:'边框样式',
+    op_start_arrow:'开始箭头',
+    op_end_arrow:'结束箭头',
+    no_link_msg:'该节点链接的图库没有图表',
+    no_classify_msg:'该节点没有选择图分类',
+
+    //节点名称
+    label_node_name:'节点名称',
+    label_label_link:'节点链接',
+    ph_link: '请选择节点链接',
+
+    no_graph_msg: '请绘制画布内容'
+  }
+}

+ 102 - 0
src/lang/modules/PredictEdb/En.js

@@ -0,0 +1,102 @@
+/* 预测指标模块 
+  $t('PredictEdbPage.xxx')
+*/
+export default {
+  /* 预测指标页面 */
+  PredictEdbPage: {
+    only_see_mine: 'View My Data List',
+    total_list_view: 'Total of {limit} Predictors',
+    del_edb_msg: 'After delete, it cannot be restored. Are you sure to delete it?',
+
+    /* 查看基础指标弹窗 */
+    view_rules: 'View Prediction Rules',
+    old_edb_id: 'Raw Indicator ID',
+    old_edb_name: 'Raw Indicator Name',
+    predict_end_date: 'Raw Indicator Name',
+    predict_rule: 'Prediction Rules',
+    label_formula: 'Calculation formula',
+    label_past_year: 'Past N years',
+    label_calendar: 'Calendar',
+  },
+
+   /* 添加指标页面 */
+   PredictEditPage: {
+    add_to_classify: 'Add to Category',
+    predict_edb_name: 'Predictive Indicator Name',
+    predict_date_type: 'Predictive Date Type',
+    ph_date_type: 'Please select date type',
+    date_type_trade:'交易日',
+    date_type_normal:'自然日',
+    add_more_btn:'Add more',
+    season_select: 'Select Method',
+    season_select_cont: 'N Years Consecutive',
+    season_select_formula: 'Fixed N Years',
+    label_periods: 'Number of Periods',
+    option_season_calendar1: 'Calendar',
+    option_season_calendar2: 'Lunar Calendar',
+    label_yoy_year: 'YoY Year',
+    label_slef_var: 'Independent Variable',
+    label_lead_day: 'Number of Days ahead ',
+    lead_day_unit: 'Days',
+    label_fitting_time: 'Regression Period',
+    ph_start_time:'Start Time',
+    ph_end_time:'End Time',
+    ph_tonow:'So Far',
+    label_distru_way: 'Distribution Method',
+    option_distru_way1: 'Average ',
+    option_distru_way2: 'YoY',
+    ph_yoy_year: 'Please Select the Base Year',
+    set_mom_btn: 'Set MoM Value Added',
+    label_value_yoy_growth: 'YoY Growth Rate ',
+    label_value_yoy_add: 'YoY Value Added',
+    label_value_mom_growth: 'MoM Growth Rate',
+    label_value_mom_add: 'MoM Value Added',
+    label_value_end: 'Predictive End Value',
+    label_value_yoy_end: 'End Value of YoY',
+    label_value_year: 'Annual Value',
+
+    label_rule: 'Rule',
+    rule_newset: 'Latest Value',
+    rule_fix: "Fixed Value" ,
+    rule_onyear: "YoY" ,
+    rule_differ: "YoY Difference" ,
+    rule_mom: "MoM" ,
+    rule_mom_differ: "MoM Difference" ,
+    rule_move_average: "Moving Average" ,
+    rule_linear: "Linear Extrapolation" ,
+    rule_dynamic_differ: 'Dynamic MoM Difference' ,
+    rule_inter_end: "Interpolation-Use End Values" ,
+    rule_season: 'Seasonal',
+    rule_yoy_move: 'YoY of Moving Average',
+    rule_yoy_growth: "Interpolation-Use YoY Growth Rate" ,
+    rule_linear_reg: "Univaruate Linear Regression" ,
+    rule_n_year: "N Years' Average",
+    rule_value_back: 'Annual Value Backward Method',
+    rule_tip: `
+      Prediction Rule Instructions :<br> 
+      1、Latest Value: All predictive number equal the latest value;<br>
+      2、Fixed Value: All predictive number equal a fixed value;<br>
+      3、YoY: Predictive number equals the YoY growth rate multiply by YoY value; <br>
+      4、YoY Difference: Predictive number equals the YoY value plus YoY added value;<br>
+      5、MoM: Predictive number equals previous month's value multiply by MoM growth rate;<br>
+      6、MoM difference: Predictive number equals Previous month's value plus MoM added value;<br>
+      7、Moving Average: Predictive number equals the moving average of last N periods' value;<br>
+      8、Linear Extrapolation: Predictive number is calculated by extending previous N periods' value using linear regression formula: Y=aX+b;<br>
+      9、Select a few indicators for indicator calculation to obtain result values as dynamic period-to-period differences, where the forecast value = previous period value + dynamic period-to-period difference;<br>
+      10、Interpolation-Use End Values:Calculate the difference in periods T between the latest data and the forecasted final value, and the data difference S. The cyclic difference value is S/T. The forecasted value equals the previous period's value plus the dynamic difference value (current period - previous period);<br>
+      11、Seasonal: Calculate the average period-over-period change (current period - previous period) for the same period over the past N years, and the forecast value is equal to the previous period value plus the average period-over-period change;<br>
+      12、YoY of Moving Average:Calculate the year-on-year value of the average over the past N periods (current period / previous period), select the year-on-year comparison year, and the forecast value = same period value of the year-on-year comparison year * year-on-year value;<br>
+      13、Interpolation-Use YoY Growth Rate: Calculate the year-on-year growth rate of the latest data: (Current period value - Same period last year value) / Same period last year value * 100%. Enter the final year-on-year growth rate, and by using the difference in the number of periods, calculate the year-on-year growth rate for each period. The forecast value = Last year's same period value * (1 + the corresponding period's year-on-year growth rate);<br>
+      14、Univaruate Linear Regression: A linear regression equation, Y=aX+b, is produced from Index A (independent variable) and Index B (baseline index) over the fitting period. By substituting Index A into this equation, the fitted Index B' is obtained. By concatenating the actual values of Index B with the predicted values of B', a forecasted index is generated.<br>
+      15、N Years' Average: The past N years can be consecutive or non-consecutive, and the indicator data is completed to daily data through linear interpolation before calculation;<br>
+      16、Annual Value Backward Method:Set the annual target value, and the balance is calculated as the annual value minus the cumulative value from the beginning of the year to date (refer to the accumulation calculation method). When distributing the balance, ensure each period's value is equal using the average method (daily/weekly: remaining periods = remaining natural calendar days / natural calendar days up to the latest date of this year's indicator * number of periods for this year's indicator data; ten-day/monthly/quarterly/semi-annual: remaining periods = total periods in a year (36/12/4/2) - natural calendar periods elapsed this year). The year-on-year comparison method ensures that each period's growth rate is equal (year-on-year growth rate = balance / balance on the corresponding date of the compared year, with forecast values being equal to the same period's value of the compared year multiplied by the year-on-year growth rate).
+    `,
+    vaild_full_rule:'Please input the complete rules',
+    vaild_last_rule:'At least Remain one rule',
+
+    /* 环比增加值弹窗 */
+    calculate_one_btn:'Calculate',
+    result_column1:'Date',
+    result_column2:'MoM Value Added',
+  }
+}

+ 102 - 0
src/lang/modules/PredictEdb/Zh.js

@@ -0,0 +1,102 @@
+/* 预测指标模块 
+  $t('PredictEdbPage.xxx')
+*/
+export default {
+  /* 预测指标页面 */
+  PredictEdbPage: {
+    only_see_mine: '只看我的',
+    total_list_view: '共{limit}个预测指标',
+    del_edb_msg: 'ETA预测指标删除后不可恢复,确认删除吗',
+    
+    /* 查看基础指标弹窗 */
+    view_rules: '查看预测规则',
+    old_edb_id: '原指标ID',
+    old_edb_name: '原指标名称',
+    predict_end_date: '预测截止日期',
+    predict_rule: '预测规则',
+    label_formula: '计算公式',
+    label_past_year: '过去N年',
+    label_calendar: '日历',
+  },
+
+  /* 添加指标页面 */
+  PredictEditPage: {
+    add_to_classify: '添加到分类',
+    predict_edb_name: '预测指标名称',
+    predict_date_type: '预测日期类型',
+    ph_date_type: '请选择日期类型',
+    date_type_trade:'交易日',
+    date_type_normal:'自然日',
+    add_more_btn:'添加更多',
+    season_select: '选择方式',
+    season_select_cont: '连续N年',
+    season_select_formula: '指定N年',
+    label_periods: '期数',
+    option_season_calendar1: '公历',
+    option_season_calendar2: '农历',
+    label_yoy_year: '同比年份',
+    label_slef_var: '自变量',
+    label_lead_day: '领先天数',
+    lead_day_unit: '天',
+    label_fitting_time: '拟合时间段',
+    ph_start_time:'开始日期',
+    ph_end_time:'结束日期',
+    ph_tonow:'至今',
+    label_distru_way: '余额分配方式',
+    option_distru_way1: '均值法',
+    option_distru_way2: '同比法',
+    ph_yoy_year: '选择年份',
+    set_mom_btn: '设置环比增加值',
+    label_value_yoy_growth: '同比增速',
+    label_value_yoy_add: '同比增加值',
+    label_value_mom_growth: '环比增速',
+    label_value_mom_add: '环比增加值',
+    label_value_end: '预测终值',
+    label_value_yoy_end: '同比增速终值',
+    label_value_year: '年度值',
+
+    label_rule: '规则',
+    rule_newset: '最新',
+    rule_fix: "固定值" ,
+    rule_onyear: "同比" ,
+    rule_differ: "同差" ,
+    rule_mom: "环比" ,
+    rule_mom_differ: "环差" ,
+    rule_move_average: "N期移动均值" ,
+    rule_linear: "N期段线性外推值" ,
+    rule_dynamic_differ: '动态环差' ,
+    rule_inter_end: "给定终值后插值" ,
+    rule_season: '季节性',
+    rule_yoy_move: '移动平均同比',
+    rule_yoy_growth: "同比增速差值" ,
+    rule_linear_reg: "一元线性拟合" ,
+    rule_n_year: 'N年均值',
+    rule_value_back: '年度倒退值',
+    rule_tip: `
+      预测规则说明:<br> 
+      1、最新:预测值全部等于最新值;<br>
+      2、固定值:预测值默认全部等于常数值;<br>
+      3、同比:去年同期值乘同比增速得到预测值;<br>
+      4、同差:去年同期值加同比增加得到预测值;<br>
+      5、环比:上期值乘环比增速得到预测值;<br>
+      6、环差:上期值加同比增加得到预测值;<br>
+      7、N期移动均值:过去N期值的平均值;<br>
+      8、N期段线性外推值:过去N期值生成线性回归方程:Y=aX+b,将未来的期数代入得到预测值;<br>
+      9、动态环差:选择几个指标进行指标计算得到结果值作为动态环差值,预测值=上期值+动态环差值;<br>
+      10、给定终值后插值:计算最新数据和预测终值的期数差T和数据差S,环差值=S/T,预测数值=前一期数值+环差值(本期-上期);<br>
+      11、季节性:计算过去N年同期的环差(本期-上期)均值,预测值=上期值+环差均值;<br>
+      12、移动平均同比:计算过去N期平均值的同比值(本期/上期),选择同比年份,预测值=同比年份同期值*同比值;<br>
+      13、同比增速插值:计算最新数据的同比增速:(本期数值-去年同期数值)/去年同期数值*100%,输入同比增速终值,通过期数差值,计算每一期同比增速,预测值=去年同期值*(1+该期同比增速)。<br>
+      14、一元线性拟合:由指标A(自变量)和指标B(基础指标)在拟合时间段生成线性回归方程:Y=aX+b,将指标A代入该方程得到拟合指标B',拼接指标B的实际值和B'的预测值,生成预测指标;<br>
+      15、N年均值:过去N年同期均值。过去N年可以连续或者不连续,指标数据均用线性插值补全为日度数据后计算;<br>
+      16、年度值倒推:设定年度值,余额=年度值-年初至今累计值(算法参考累计值),进行余额分配,均值法分配时保证每期数值相等(日度/周度:剩余期数=剩余自然日历天数/今年指标最新日期自然日历天数*今年至今指标数据期数;旬度/月度/季度/半年度:剩余期数=全年期数(36/12/4/2)-今年至今自然日历期数),同比法保证每期同比相等(同比增速=余额/同比年份相应日期的余额,预测值等于同比年份同期值*同比增速)
+    `,
+    vaild_full_rule:'请填写完整的规则',
+    vaild_last_rule:'请至少保留一条预测规则',
+
+    /* 环比增加值弹窗 */
+    calculate_one_btn:'一键计算',
+    result_column1:'日期',
+    result_column2:'环比增加值',
+  }
+}

+ 0 - 0
src/lang/modules/PredictEdb/commonLang.js


+ 60 - 0
src/lang/modules/ReportManagement/AuthorManagement.js

@@ -0,0 +1,60 @@
+/**
+ * 研报管理--作者管理
+ */
+
+/* 英文 */
+export const AuthorManagementEn = {
+  add_author_btn: "Add author",
+  edit_author_btn: "Edit author",
+  author_input_name: "Author name",
+  please_input: "Please input",
+  add_confirm_btn: "Save",
+  add_author_rules: "Please enter author name",
+  add_author_rules_exists: "Author name exists",
+  add_author_success_msg: "Added successfully",
+  edit_success_msg: "Edit successful",
+  column_add_time: "Add time",
+  column_status: "Status",
+  column_disabled_btn: "Disabled",
+  column_enabled_btn: "Enabled",
+  delete_info_msg: "Deletion is irreversible. Are you sure you want to delete this author's name?",
+  delete_error_msg: "This author's name is associated with reports and cannot be deleted.",
+  delete_success_msg: "Delete successful",
+  english_report_tab: "English research report",
+  chinese_report_tab: "Chinese research report",
+  research_report_type: "Research report type",
+  research_report_type_select: "Please select the type of research report",
+
+
+};
+
+/* 中文 */
+export const AuthorManagementZh = {
+  add_author_btn: "添加作者",
+  edit_author_btn: "编辑作者",
+  author_input_name: "作者名称",
+  please_input: "请输入 ",
+  add_confirm_btn: "保存",
+  add_author_rules: "请输入作者名称",
+  add_author_rules_exists: "已存在该作者",
+  add_author_success_msg: "添加成功",
+  edit_success_msg: "编辑成功",
+  column_add_time: "添加时间",
+  column_status: "状态",
+  column_disabled_btn: "禁用",
+  column_enabled_btn: "启用",
+  delete_info_msg: "删除不可恢复,确认删除该作者名称吗?",
+  delete_error_msg: "该作者名称有关联报告,不允许删除",
+  delete_success_msg: "删除成功",
+  english_report_tab: "英文研报",
+  chinese_report_tab: "中文研报",
+  research_report_type: "研报类型",
+  research_report_type_select: "请选择研报类型",
+};
+
+/*
+研报类型
+请选择研报类型
+中文研报
+英文研报
+*/

+ 187 - 0
src/lang/modules/ReportManagement/CategoryList.js

@@ -0,0 +1,187 @@
+/**
+ * 研报管理--分类列表
+ */
+
+/* 英文 */
+export const CategoryListEn = {
+  chinese_tabs: "Chinese Classification",
+  english_tabs: "English research reports",
+  add_category_btn: "Add category",
+  edit_category_btn: "Edit Category",
+  category_name_ipt: "Category Name",
+  one_category_table: "First-level category",
+  two_category_table: "Second-level category",
+  three_category_table: "Third-level category",
+
+  configuration_btn: "Permission configuration",
+  settings_chapter_btn: "Chapter Settings",
+  please_input: "Please input",
+  parent_category_label: "Parent category ",
+  subdirectory_label: "Subdirectory",
+  click_to_add_btn: "Click to Add",
+  please_select: "Please Select",
+  category_tag_label: "Category Tag",
+  display_form_label: "Display form",
+  form_list_option: "List ",
+  form_column_option: "Column",
+  form_product_option: "Product",
+  backend_sorting_label: "Backend Sorting",
+  please_number_input: "Please enter a number",
+  page_sorting_label: "FICC page sorting",
+  page_icon_label: "FICC Page Icon",
+  up_page_icon_label: "Upload FICC Page Icon",
+  select_img_btn: "Select Image",
+  collection_report_label: "Collection of Report Illustrations",
+  up_collection_report_lable: "Upload Collection of Report Illustrations",
+  share_link_label: "Share Link Illustrations",
+  up_share_link_label: "Upload Share Link Illustrations",
+  pc_bg_label: "PC Background Color",
+  select_bg_label: "Select a background color",
+  mini_hidden_label: "Mini Program Hidden",
+  related_settings_label: "Related Settings",
+  teleconference_label: "Teleconference",
+  relate_videp_label: "Relate Video with Report",
+  share_desctription_label: "Share Desctription",
+  section_author_label: "Section Author",
+  please_author_ipt: "Please input section author name",
+  author_introduction_label: "Author Introduction",
+  please_author_introduction_ipt: "Please input author introduction ",
+  author_title_label: "Author Title",
+  section_introduction_label: "Section Introduction",
+  please_upload_label: "Please upload list background image",
+  homepage_illustrations_label: "Homepage Illustrations",
+  up_homepage_illustrations: "Please Upload Homepage Illustrations",
+  report_illustrations_label: "Report Illustrations",
+  up_report_illustrations: "Please upload report illustrations",
+  column_illustration_label: "Column Illustration",
+  up_scolumn_illustration: "Please upload column illustration",
+  banner_head_label: "Head banner ",
+  up_banner_head: "Please upload head banner",
+  img_author_label: "Image",
+  up_img_author: "Please upload author image",
+  list_background_image_label: "List Background Image",
+  up_list_background_image: "Please upload list background image",
+  please_input_name: "Please input category name",
+  please_select_category: "Please select a parent category",
+  please_input_introduction: "Please enter the category introduction",
+  please_input_description: "Please enter a classification description",
+  please_input_column_introduction: "Please enter the column introduction",
+  please_classification_label: "Please enter a classification label",
+  please_display_format: "Please choose the display format",
+  blue_color: "blue",
+  green_color: "green",
+  red_color: "red",
+  upload_image: "Upload image",
+  add_chapter_btn: "Add Chapter",
+  chapter_name_lable: "Chapter Name",
+  chapter_edit_lable: "Edit Chapter",
+  enter_chapter_name: "Please enter chapter name",
+  icon_not: "Icon not selected",
+  icon_not_empty: "Unselected icon cannot be empty",
+  select_icon: "Selected Icon",
+  select_icon_empty: "Selected icon cannot be empty",
+  icon_text: "Icon with Text",
+  icon_text_empty: "Icon with text cannot be empty",
+  chapter_img: "Chapter Image",
+  chapter_img_empty: "Chapter image cannot be empty",
+  list_sorting: "List Sorting",
+  sorting_empty: "List sorting cannot be empty",
+  hide_mini: "Hide in Mini Program",
+  chapter_name_empty: "Chapter name cannot be empty",
+  select_hide_mini: "Please choose whether to hide the mini program",
+  check_permissions: "Please check the following permissions",
+  Permission_success_msg: "Permission configuration successful",
+  is_delete_chapter: "Are you sure to delete this chapter?",
+};
+
+/* 中文 */
+export const CategoryListZh = {
+  chinese_tabs: "中文分类",
+  english_tabs: "英文分类",
+  add_category_btn: "添加分类",
+  edit_category_btn: "编辑分类",
+  category_name_ipt: "分类名称",
+  category_name_ipt: "分类名称",
+  one_category_table: "一级分类",
+  two_category_table: "二级分类",
+  three_category_table: "三级分类",
+  configuration_btn: "权限配置",
+  settings_chapter_btn: "章节设置",
+  please_input: "请输入",
+  parent_category_label: "上级分类",
+  subdirectory_label: "子目录",
+  click_to_add_btn: "点击新增",
+  please_select: "请选择",
+  category_tag_label: "分类标签",
+  display_form_label: "展示形式",
+  form_list_option: "列表 ",
+  form_column_option: "专栏",
+  form_product_option: "品种",
+  backend_sorting_label: "后台排序",
+  please_number_input: "请输入数字",
+  page_sorting_label: "FICC页排序",
+  page_icon_label: "FICC页Icon",
+  up_page_icon_label: "上传FICC页icon",
+  select_img_btn: "选择图片",
+  collection_report_label: "报告合集配图",
+  up_collection_report_lable: "上传报告合集配图",
+  share_link_label: "分享链接配图",
+  up_share_link_label: "上传分享链接配图",
+  pc_bg_label: "PC端背景颜色",
+  select_bg_label: "选择背景颜色",
+  mini_hidden_label: "小程序端隐藏",
+  related_settings_label: "关联设置",
+  teleconference_label: "报告电话会",
+  relate_videp_label: "视频关联报告",
+  share_desctription_label: "分享描述",
+  section_author_label: "栏目作者",
+  please_author_ipt: "请输入栏目作者",
+  author_introduction_label: "作者简介",
+  please_author_introduction_ipt: "请输入作者简介",
+  author_title_label: "作者头衔",
+  section_introduction_label: "栏目简介",
+  please_upload_label: "请上传列表背景图",
+  homepage_illustrations_label: "首页配图",
+  up_homepage_illustrations: "请上传首页配图",
+  report_illustrations_label: "研报配图",
+  up_report_illustrations: "请上传研报配图",
+  column_illustration_label: "专栏配图",
+  up_scolumn_illustration: "请上传专栏配图",
+  banner_head_label: "头部banner",
+  up_banner_head: "请上传头部banner",
+  img_author_label: "头像",
+  up_img_author: "请上传作者头像",
+  list_background_image_label: "列表背景图",
+  up_list_background_image: "请上传列表背景图",
+  please_input_name: "请输入分类名称",
+  please_select_category: "请选择父级分类",
+  please_input_introduction: "请输入分类简介",
+  please_input_description: "请输入分类描述",
+  please_input_column_introduction: "请输入栏目简介",
+  please_classification_label: "请输入分类标签",
+  please_display_format: "请选择展示形式",
+  blue_color: "蓝色",
+  green_color: "绿色",
+  red_color: "红色",
+  upload_image: "上传图片",
+  add_chapter_btn: "添加章节",
+  chapter_name_lable: "章节名称",
+  chapter_edit_lable: "编辑章节",
+  enter_chapter_name: "请输入章节名称",
+  icon_not: "未选中icon",
+  icon_not_empty: "未选中icon不能为空",
+  select_icon: "选中icon",
+  select_icon_empty: "选中icon不能为空",
+  icon_text: "带字icon",
+  icon_text_empty: "带字icon不能为空",
+  chapter_img: "章节配图",
+  chapter_img_empty: "章节配图不能为空",
+  list_sorting: "列表排序",
+  sorting_empty: "列表排序不能为",
+  hide_mini: "小程序隐藏",
+  chapter_name_empty: "章节名称不能为空",
+  select_hide_mini: "请选择小程序是否隐藏",
+  check_permissions: "请勾选以下权限配置",
+  Permission_success_msg: "权限配置成功",
+  is_delete_chapter: "确认删除这个章节吗?",
+};

+ 75 - 0
src/lang/modules/ReportManagement/CloudPage.js

@@ -0,0 +1,75 @@
+/**
+ * 研报管理--云盘
+ */
+
+/* 英文 */
+export const CloudPageEn = {
+  // 新建文件夹
+  folder_btn: "New Folder",
+  input_content: "Please enter keyword",
+  input_file_name: "Please enter file/folder name",
+  create_btn: "Create",
+  folder_error_msg: "The folder exists",
+  folder_success_msg: "New folder created successfully",
+  // 上传文件
+  upload_btn: "Upload document",
+  select_folder_title: "Select folder",
+  folder_location: "Folder location",
+  upload_error_msg: "Upload unsucessful",
+  upload_success_msg: "Upload successful",
+  upload_folder_error_msg: "Please select a folder director",
+  upload_please_error_msg: "A file with the same name already exists. Do you still want to proceed with uploading the file?",
+  upload_confirm_btn: "Keep both",
+  //   表格
+  column_name: "Name",
+  column_author: "Author",
+  column_font: "Font",
+  column_rename_btn: "Rename",
+  column_download_btn: "Download",
+  column_delete_btn: "Delete",
+  column_creation_time: "Creation time",
+  rules_prompt: "File/folder name cannot be empty",
+  rename_dialog_error_msg: "File name exists",
+  rename_dialog_success_msg: "Rename successful",
+  download_info_msg: "is starting to download. Please do not download again",
+  download_success_msg: "Download successful",
+  delete_success_msg: "Delete successful",
+  table_no_file: "No file available",
+  everything:'Everything'
+};
+
+/* 中文 */
+export const CloudPageZh = {
+  // 新建文件夹
+  folder_btn: "新建文件夹",
+  input_content: "请输入关键字",
+  input_file_name: "请输入文件/文件夹名称",
+  create_btn: "创建",
+  folder_error_msg: "该文件夹已存在",
+  folder_success_msg: "新建文件夹成功",
+  // 上传文件
+  upload_btn: "上传文件",
+  select_folder_title: "选择文件夹",
+  folder_location: "所在文件夹",
+  upload_error_msg: "上传失败",
+  upload_success_msg: "上传成功",
+  upload_folder_error_msg: "请选择文件夹目录",
+  upload_please_error_msg: "已有同名文件,是否继续上传文件?",
+  upload_confirm_btn: "保留两者",
+  //   表格
+  column_name: "名称",
+  column_author: "创建人",
+  column_font: "大小",
+  column_creation_time: "创建时间",
+  column_rename_btn: "重命名",
+  column_download_btn: "下载",
+  column_delete_btn: "删除",
+  rules_prompt: "文件/文件夹名称不能为空",
+  rename_dialog_error_msg: "该文件名已存在",
+  rename_dialog_success_msg: "重命名成功",
+  download_info_msg: "开始下载,请勿重复下载",
+  download_success_msg: "下载成功 ",
+  delete_success_msg: "删除成功",
+  table_no_file: "暂无文件",
+  everything:'全部'
+};

+ 47 - 0
src/lang/modules/ReportManagement/CommodityConfiguration.js

@@ -0,0 +1,47 @@
+/**
+ * 研报管理--品种配置
+ */
+
+/* 英文 */
+export const CommodityConfigurationEn = {
+  product_type: "Product type",
+  add_product_btn: "Add product",
+  add_product_input: "Please input the product type",
+  add_product_select: "Parent product",
+  add_backend_sorting: "Backend sorting",
+  add_product_error_msg: "Please input product type",
+  //   表格
+  column_top: "Top-level product",
+  column_second: "Second-level product",
+  column_edit_btn: "Edit Category",
+  edit_variety_title: "Edit variety",
+  column_delete_btn: "Edit Category",
+  delete_info_msg: "Are you sure you want to delete this file?",
+  delete_success_msg: "Delete sucessful",
+  delete_error_msg: "Please delete associated product under this category first",
+};
+
+/* 中文 */
+export const CommodityConfigurationZh = {
+  product_type: "品种名称",
+  add_product_btn: "添加品种",
+  add_product_input: "请输入品种名称",
+  add_product_select: "上级品种",
+  add_backend_sorting: "后台排序",
+  add_product_error_msg: "请填写品种名称",
+  //   表格
+  column_top: "一级品种",
+  column_second: "二级品种",
+  column_edit_btn: "编辑分类",
+  edit_variety_title: "编辑品种",
+  column_delete_btn: "删除",
+  delete_info_msg: "确认删除吗?",
+  delete_success_msg: "删除成功",
+  delete_error_msg: "请先删除该品种下关联品种",
+};
+
+/*
+编辑品种
+请选择
+编辑-编辑:成功
+*/

+ 235 - 0
src/lang/modules/ReportManagement/ReportList.js

@@ -0,0 +1,235 @@
+/**
+ * 研报管理--列表
+ */
+
+/* 英文 */
+export const ReportListEn = {
+  add_morning_weekly_btn: "Add morning/weekly reports",
+  download_data_btn: "Download reading data",
+  email_subject_btn: "Email subject:",
+  Recipient_btn: "Recipient:",
+  select_variety_permission: "Please select variety permission",
+  sending_customer_information: "Cancel sending customer information:",
+  select_customer: "Please select a customer",
+  designated_personnel: "Designated personnel",
+  designated_sender_information: "Designated sender information:",
+  please_select_personnel: "Please select personnel",
+  click_through_details: "点击量详情 Click through details",
+  customer_name: "Customer Name",
+  email_address: "e-mail address",
+  Last_click_time: "Last click time",
+  hits_btn: "Hits",
+  information_title: "Basic information",
+  new_report_radio: "New report",
+  inherit_report_radio: "Inherit report",
+  please_select_category: "Please select a category",
+  input_title_please: "Please input title",
+  please_input_abstract: "Please input abstract",
+  please_select_author: "Please select the author",
+  please_select_frequency: "Please select the frequency",
+  please_select_date: "Please select date",
+  please_report_type_select: "Please select report category",
+  please_report_category_select: "Please select report category",
+  please_report_title_input: "Please input report title",
+  no_reports_msg: "There are currently no reports for this category",
+  chart_insertion_progress: "Batch chart insertion in progress",
+  last_save_time: "Last save time",
+  click_refresh_btn: "Refresh",
+  preview_btn: "Preview",
+  save_draft_btn: "Save Draft",
+  scheduled_publish_btn: "Scheduled Publish",
+  publish_btn: "Publish",
+  submission_btn: "Submission",
+  new_method_btn: "New method",
+  title_ipt: "Title",
+  abstract_ipt: "Abstract",
+  author_select: "Author",
+  frequency_select: "Frequency",
+  creation_time_select: "Creation time",
+  insert_chart_tabs: "Insert chart",
+  chart_inventory_radio: "ETA Gallery",
+  price_curve_radio: "Commodity price curve",
+  related_charts_radio: "Related Charts",
+  curve_fitting_radio: "Curve fitting",
+  statistical_feature_radio: "Statistical Feature",
+  intercommodity_analysis_radio: "Intercommodity Analysis",
+  just_mine_radio: "Just Mine",
+  insert_sandbox_tabs: "Insert Sandbox",
+  no_reports_msg: "Sandbox Name/Commodity",
+  insert_table_tabs: "Insert Table",
+  table_name_tabs: "Table Name",
+  bulk_insertion_tabs: "Bulk Insertion of MyETA",
+  semantic_analysis_tabs: "Semantic Analysis Insertion",
+  publish_time: "Publish Time",
+  select_date_and_time: "Select Date and Time",
+  the_report_will_be_posted_on_time: "After the schedule confirmed, the report will be posted on time",
+  no_chart_table_available: "No Chart or Table available",
+  classificiation_selest: "Classificiation",
+  edit_en_report: "Editing English research reports",
+  add_ch_report: "Add English research report",
+  chart_name: "Chart Name",
+  select_date: "Select date",
+  charts_update_btn: "Charts update",
+  library_top_type: "Territory Lib",
+  eta_top_type: "ETA table",
+  statistical_top_type: "Stats Analysis",
+  sandbox_top_type: "Sandbox",
+  semantic_top_type: "Semantic Analy",
+  chart_top_type: "Chart Inventory",
+  insert_charts_msg: "Please insert charts",
+  header_setting_msg: "Page header setting successful",
+  trailer_setting_msg: "Page trailer setting successful",
+  chart_refreshed_msg: "The chart is currently being refreshed, please do not repeat the operation",
+  img_uplaod_title: "Image Upload",
+  click_img_upload: "Click to Upload Image",
+  select_img_card: "Select Image",
+  img_name_ipt: "Please input image name",
+  select_img_type: "Please select an image type",
+  page_header_op: "Page Header",
+  page_trailer_op: "Page Trailer",
+  select_layout_msg: "Please select a layout",
+  keyword_search: "Keyword Search",
+  correlation_analysis: "Correlation Analysis",
+  text_editing: "Text Editing",
+  chart_category_name: "Chart Category Name",
+  click_import: "One click import",
+  no_one_charts: "There are no charts for this category",
+  no_chart_msg: "Single chart insertion is not supported here",
+  import_all_chart_msg: "This operation will batch import all charts under theselected chart category",
+  chapter_list_label: "Chapter List",
+  add_labels_section: "Add labels",
+  recorded_audio: "The recording has been uploaded.",
+  not_recorded_audio: "The recording has not been uploaded.",
+  weChat_share: "WeChat share",
+  set_tags_title: "Set tags",
+  select_ipt_pld: "Enter or select",
+  input_email_subject: "Please input email subject",
+  author_select_ipt: "Please fill in the author",
+  display_metrics_lable: "Display Metrics",
+  upload_audio_file: "Please upload the audio recording file",
+  audio_minutes_exceed: "The audio duration must not exceed 15 minutes",
+  recording_lable: "Recording",
+  up_recording_lable: "Upload Recording",
+  note_audio_minutes: "*Note: The audio format must be mp3 or m4a",
+  upload_audio_error_msg: "Upload failed, the audio format is incorrect.",
+  upload_error_msg: "Upload failed, please refresh and try again.",
+  upload_img_error_msg: "Some images have not finished uploading, please wait.",
+  all_update_publish_msg: "This report's varieties have all been updated. Clicking 'Publish' will also release the weekly report. Are you sure you want to publish both simultaneously?",
+  is_publish_report_msg: "You have not uploaded an audio recording file yet. Are you sure you want to publish the report?",
+};
+
+/* 中文 */
+export const ReportListZh = {
+  add_morning_weekly_btn: "添加晨报/周报",
+  download_data_btn: "下载阅读数据",
+  email_subject_btn: "邮件主题:",
+  Recipient_btn: "收件人:",
+  select_variety_permission: "请选择品种权限",
+  sending_customer_information: "取消发送客户信息:",
+  select_customer: "请选择客户",
+  designated_personnel: "指定人员",
+  designated_sender_information: "指定发送人员信息:",
+  please_select_personnel: "请选择人员",
+  click_through_details: "点击量详情",
+  click_through_details: "客户名称",
+  email_address: "邮箱地址",
+  Last_click_time: "最近点击时间",
+  hits_btn: "点击量",
+  information_title: "基础信息",
+  new_report_radio: "新增报告",
+  inherit_report_radio: "继承报告",
+  please_select_category: "请选择分类",
+  input_title_please: "请输入标题",
+  please_input_abstract: "请输入摘要",
+  please_select_author: "请选择作者",
+  please_select_frequency: "请选择频度",
+  please_select_date: "请选择日期",
+  please_report_type_select: "请选择报告类型",
+  please_report_category_select: "请选择报告分类",
+  please_report_title_input: "请填写报告标题",
+  no_reports_msg: "此分类暂无报告",
+  chart_insertion_progress: "图表批量插入中...",
+  last_save_time: "最近保存时间",
+  click_refresh_btn: "一键刷新",
+  preview_btn: "预览",
+  save_draft_btn: "存草稿",
+  scheduled_publish_btn: "定时发布",
+  publish_btn: "发布",
+  submission_btn: "提交",
+  new_method_btn: "新增方式",
+  title_ipt: "标题",
+  abstract_ipt: "摘要",
+  author_select: "作者",
+  author_select_ipt: "请填写作者",
+  frequency_select: "频度",
+  creation_time_select: "创建时间",
+  insert_chart_tabs: "图表插入",
+  chart_inventory_radio: "ETA图库",
+  price_curve_radio: "商品价格曲线",
+  related_charts_radio: "相关性图表",
+  curve_fitting_radio: "拟合方程曲线",
+  statistical_feature_radio: "统计特征",
+  intercommodity_analysis_radio: "跨品种分析",
+  just_mine_radio: "只看我的",
+  insert_sandbox_tabs: "沙盘插入",
+  no_reports_msg: "沙盘名称/品种",
+  insert_table_tabs: "表格插入",
+  table_name_tabs: "表格名称",
+  bulk_insertion_tabs: "MyETA批量插入",
+  semantic_analysis_tabs: "语义分析插入",
+  publish_time: "发送时间",
+  select_date_and_time: "选择日期时间",
+  the_report_will_be_posted_on_time: "设置成功之后,研报将定时进行发送",
+  no_chart_table_available: "暂无图表",
+  classificiation_selest: "分类",
+  edit_en_report: "编辑英文研报",
+  add_ch_report: "添加英文研报",
+  chart_name: "图表名称",
+  select_date: "选择日期",
+  charts_update_btn: "图表刷新",
+  library_top_type: "版图资源库",
+  eta_top_type: "ETA表格",
+  statistical_top_type: "统计分析",
+  sandbox_top_type: "沙盘图",
+  semantic_top_type: "语义分析",
+  chart_top_type: "图库",
+  insert_charts_msg: "请插入图表",
+  header_setting_msg: "版头设置成功",
+  trailer_setting_msg: "版尾设置成功",
+  chart_refreshed_msg: "图表正在刷新中,请勿重复操作",
+  img_uplaod_title: "图片上传",
+  click_img_upload: "点击上传图片",
+  select_img_card: "选择图片",
+  img_name_ipt: "请输入图片名称",
+  select_img_type: "请选择图片类型",
+  page_header_op: "版头",
+  page_trailer_op: "版尾",
+  select_layout_msg: "请选择版图",
+  keyword_search: "关键词搜索",
+  correlation_analysis: "相关性",
+  text_editing: "文本编辑",
+  chart_category_name: "图分类名称",
+  click_import: "一键导入",
+  no_one_charts: "此处不支持单个插入图表",
+  no_chart_msg: "该分类无图表",
+  import_all_chart_msg: "该操作将批量导入所选图分类下所有图表",
+  chapter_list_label: "章节列表",
+  add_labels_section: "添加标签",
+  recorded_audio: "已传录音",
+  not_recorded_audio: "未传录音",
+  weChat_share: "微信分享",
+  set_tags_title: "设置标签",
+  select_ipt_pld: "输入或者选择",
+  input_email_subject: "请输入邮件主题",
+  display_metrics_lable: "显示指标",
+  recording_lable: "录音",
+  upload_audio_file: "请上传录音文件",
+  up_recording_lable: "上传录音",
+  note_audio_minutes: "*注:要求音频格式为mp3、m4a",
+  audio_minutes_exceed: "音频时长不超过15分钟",
+  upload_audio_error_msg: "上传失败,上传音频格式不正确",
+  upload_error_msg: "上传失败,请刷新重试",
+  upload_img_error_msg: "有图片未上传完成,请稍等",
+  all_update_publish_msg: "本期报告品种已全部更新,点击发布将同时发布周报,确认同时发布吗?",
+  is_publish_report_msg: "您还未上传录音文件,确定发布报告吗?",
+};

+ 255 - 0
src/lang/modules/ReportManagement/SmartReport.js

@@ -0,0 +1,255 @@
+/**
+ * 研报管理--智能研报 smart_report
+ */
+
+/* 英文 */
+export const SmartReportEn = {
+  smart_add_report: "Add report",
+  smart_filter_options: "Filter options",
+  smart_publish_time: "Publish Time",
+  smart_approval_time: "Approval Time",
+  smart_update_time: "Update Time",
+  smart_update_frequency_filter: "Update frequency filter",
+  smart_annually: "Annually",
+  smart_semi_annually: "Semi-annually",
+  smart_quarterly: "Quarterly",
+  smart_monthly: "Monthly",
+  smart_bi_weekly: "Bi-weekly",
+  smart_weekly: "Weekly",
+  smart_daily: "Daily",
+  smart_irregularly: "Irregularly",
+  smart_type_filtering: "Type Filtering",
+  smart_status_filtering: "Status Filtering",
+  smart_unpublished: "Unpublished",
+  smart_published: "Published",
+  smart_pending: "Pending",
+  smart_awaiting_approval: "Awaiting Approval",
+  smart_rejected: "Rejected",
+  smart_approved: "Approved",
+  smart_filtering_criteria: "Filter options",
+  smart_title_creator_updater: "Title/Creator/Updater",
+  smart_report_title: "Report title",
+  smart_select_time_type_btn: "Select time type",
+  smart_notification_status_btn: "Notification Status",
+  smart_notification_yet_pushed: "Notification Yet Pushed",
+  smart_notification_pushed: "Notification Pushed",
+  smart_filtering_criteria_btn: "Filter options",
+  smart_title_creator_btn: "Title/Creator",
+  smart_report_type: "Report type",
+  smart_creator_btn: "Creator",
+  table_col02:'Operator',
+  smart_release_approval_time: "Release/Approval Time",
+  smart_report_push_time_btn: "Report push time",
+  smart_issue_number_btn: "Issue number",
+  smart_frequency_btn: "Frequency",
+  smart_withdraw_btn: "Withdraw",
+  smart_push_notification_btn: "Push Notification",
+  smart_audio_download_btn: "Audio Download",
+  smart_please_content_ipt: "Please enter the note content",
+  smart_audio_upload_btn: "Audio Upload",
+  smart_upload_recording_btn: "Upload report recording",
+  smart_release_prompt_btn: "Release prompt",
+  smart_template_msg: "The report has been set to be released regularly. Do you want to publish the report immediately and push the template message?",
+  smart_push_template_btn: "Do you want to publish the report immediately and push template messages?",
+  smart_status_table: "status",
+  smart_abstract_table: "Abstract",
+  smart_select_file: "Select file",
+  smart_sync_policy_report: "Sync Policy Report",
+  smart_publish_filter_select: "Publish Filter",
+  smart_status_filtering_select: "Group sending status filtering",
+  smart_emails_unsent_option: "Emails unsent",
+  smart_emails_sents_option: "Email sents",
+  add_new_en_category: "Add new category",
+  smart_btn: {
+    publish: "Publish",
+    submission: "Submission",
+    editing: "Editing",
+    withdraw: "Withdraw",
+    upload: "Upload",
+    uploading: "Uploading",
+    select_all: "Select All",
+    only_publish: "Only publish",
+    publish_push: "Publish&Push",
+    morning_paper: "morning paper",
+    weekly: "weekly",
+    Submission: "Submission",
+    send_email: "Send email to group",
+    send_log: "Group send log",
+    image_download: "Image Download",
+    push: "Push",
+    not_push: "Do not push",
+  },
+  tooltip_pv_show: "The number of times the report has been opened, calculated once each time it is opened (only for authorized users)",
+  number_tooltip_pv_show: "Number of times the report has been opened, Counted each time it is opened",
+  tooltip_uv_show: "The number of people accessing the report, and the same person accessing each report is only counted once (only authorized users are counted)",
+  smart_msg: {
+    no_edit: "This research report is currently being edited and cannot be duplicated",
+    unknown_error: "Unknown error, please try again later",
+    uploaded_limitation: "The size of the uploaded file cannot exceed 200M",
+    upload_format: "The upload file format is incorrect",
+    report_recording: "Report not uploaded recording",
+    published_success: "Successfully published and pushed",
+    submit_approval: "Do you confirm to submit the report for the approval process?",
+    revoke_approval: "Are you sure you want to revoke the approval?",
+    revoke_success: "Revoke successful",
+    submit_success: "Submitted successfully",
+    sent_success: "Successfully sent",
+    push_success: "Push successful",
+    release_prompt: "Release prompt",
+    publish_it: "Are you sure to publish it?",
+    delete_it: "Confimm deletion?",
+    select_dl_report: "Please select the report that needs to be downloaded",
+    is_publish_immediately: "This report has been scheduled for publication. Would you like to change it to publish immediately?",
+    report_publish_immediately: "Are you sure you want to publish now?",
+    copy_success: "Copy link successful",
+    browser_supported: "Browser not currently supported",
+    select_email_person: "Please select email recipients ",
+    email_subject: "Please input email subject",
+    email_characters: "Email subject should be within 100 characters",
+    synchronization: "Synchronization successful",
+    upload_success: "Upload Successful",
+    please_select_file: "Please select file",
+    should_published_immediately: "Should the report be published immediately?",
+    timed_release_setup: "The report has been scheduled for publication. Do you want to publish the report now?",
+    please_manually_save: "Automatic image download failed, please manually save",
+    all_loaded_have: "All have been loaded",
+    timed_success: "Timed release successful!",
+    push_report_msg: "Do you want to publish a scheduled report and push template messages?",
+    is_push_timed: "Is a scheduled report released?",
+    than_current_time: "Timed release must not be earlier than the current time",
+    select_push_time: "Please select a scheduled release time",
+    publishing_messages: "After publishing, do you want to push template messages?",
+    img_wait: "There are some images that have not been uploaded yet. Please wait",
+    please_enter: "Please enter",
+    publishing_is_push: "After publishing, do we push template messages and customer groups?",
+    chart_is_table_msg: "Please insert a chart or table",
+
+  },
+};
+
+/* 中文 */
+export const SmartReportZh = {
+  smart_add_report: "添加研报",
+  smart_filter_options: "筛选项",
+  smart_publish_time: "发布时间",
+  smart_approval_time: "审批时间",
+  smart_update_time: "更新时间",
+  smart_update_frequency_filter: "更新频度筛选",
+  smart_annually: "年度",
+  smart_semi_annually: "半年度",
+  smart_quarterly: "季度",
+  smart_monthly: "月度",
+  smart_bi_weekly: "双周度",
+  smart_weekly: "周度",
+  smart_daily: "日度",
+  smart_irregularly: "不定时",
+  smart_type_filtering: "类型筛选",
+  smart_status_filtering: "状态筛选",
+  smart_unpublished: "未发布",
+  smart_published: "已发布",
+  smart_pending: "待提交",
+  smart_awaiting_approval: "待审批",
+  smart_rejected: "已驳回",
+  smart_approved: "已通过",
+  smart_filtering_criteria: "筛选条件",
+  smart_title_creator_updater: "标题/创建人/更新人",
+  smart_report_title: "报告标题",
+  smart_select_time_type_btn: "选择时间类型",
+  smart_notification_status_btn: "推送消息状态",
+  smart_notification_yet_pushed: "未推送消息",
+  smart_notification_pushed: "已推送消息",
+  smart_filtering_criteria_btn: "筛选条件",
+  smart_title_creator_btn: "标题 / 创建人",
+  smart_report_type: "报告类型",
+  smart_creator_btn: "创建人",
+  table_col02:'更新人',
+  smart_release_approval_time: "发布/审批时间",
+  smart_report_push_time_btn: "报告推送时间",
+  smart_issue_number_btn: "期数",
+  smart_frequency_btn: "频度",
+  smart_withdraw_btn: "撤销",
+  smart_push_notification_btn: "推送消息",
+  smart_audio_download_btn: "音频下载",
+  smart_please_content_ipt: "请输入备注内容",
+  smart_audio_upload_btn: "音频上传",
+  smart_upload_recording_btn: "上传报告录音",
+  smart_release_prompt_btn: "发布提示",
+  smart_template_msg: "该报告已设置定时发布,是否立即发布报告并推送模板消息?",
+  smart_push_template_btn: "是否立即发布报告,并推送模板消息?",
+  smart_status_table: "状态",
+  smart_abstract_table: "摘要",
+  smart_select_file: "选择文件",
+  smart_sync_policy_report: "同步策略报告",
+  smart_publish_filter_select: "发布筛选",
+  smart_status_filtering_select: "群发状态筛选",
+  smart_emails_unsent_option: "未群发邮件",
+  smart_emails_sents_option: "已群发邮件",
+  add_new_en_category: "新增英文分类",
+  smart_btn: {
+    publish: "发布",
+    submission: "提交",
+    editing: "编辑中...",
+    withdraw: "撤销",
+    upload: "上传",
+    uploading: "上传中",
+    select_all: "全选",
+    only_publish: "仅发布",
+    publish_push: "发布&推送",
+    morning_paper: "晨报",
+    weekly: "周报",
+    Submission: "提交",
+    send_email: "群发邮件",
+    send_log: "群发日志",
+    image_download: "图片下载",
+    push: "推送",
+    not_push: "不推送",
+  },
+  tooltip_pv_show: "报告被打开的次数,每次打开都计算一次(只统计有权限用户)",
+  number_tooltip_pv_show: "报告被打开的次数,每次打开都计算一次",
+  tooltip_uv_show: "访问报告的人数,每篇报告同一个人访问只计算一次(只统计有权限用户)",
+  smart_msg: {
+    no_edit: "该研报正在编辑,不可重复编辑",
+    unknown_error: "未知错误,请稍后重试",
+    uploaded_limitation: "上传文件大小不能大于200M",
+    upload_format: "上传文件格式不正确",
+    report_recording: "报告未上传录音",
+    published_success: "发布且推送成功",
+    submit_approval: "是否确认提交该报告进入审批流程?",
+    revoke_approval: "确定要撤销审批吗?",
+    revoke_success: "撤销成功",
+    submit_success: "提交成功",
+    sent_success: "发送成功",
+    push_success: "推送成功",
+    release_prompt: "发布提示",
+    publish_it: "确定发布吗?",
+    delete_it: "确认删除吗?",
+    select_dl_report: "请选择需要下载的报告",
+    is_publish_immediately: "该报告已设置定时发布,是否修改为立即发布?",
+    report_publish_immediately: "是否确定立即发布报告?",
+    copy_success: "复制链接成功",
+    browser_supported: "浏览器暂不支持",
+    select_email_person: "请选择需要发送邮件的人员",
+    email_subject: "请填写邮件主题",
+    email_characters: "邮件主题请控制在100个字符以内",
+    synchronization: "同步成功",
+    upload_success: "上传成功",
+    please_select_file: "请选择文件",
+    should_published_immediately: "是否立即发布报告?",
+    timed_release_setup: "该报告已设置定时发布,是否立即发布报告?",
+    please_manually_save: "自动下载图片失败,请手动保存",
+    all_loaded_have: "已全部加载完",
+    timed_success: "定时发布成功!",
+    push_report_msg: "是否发布定时报告,并推送模板消息?",
+    is_push_timed: "是否发布定时报告?",
+    than_current_time: "定时发布不得早于当前时间",
+    select_push_time: "请选择定时发布的时间",
+    publishing_messages: "发布后,是否推送模板消息?",
+    img_wait: "有图片未上传完成,请稍等",
+    please_enter: "请输入",
+    publishing_is_push: "发布后,是否推送模板消息和客户群?",
+    chart_is_table_msg: "请插入图表或表格",
+  },
+};
+
+/**t('ReportManage.smart_add_report')
+ */

+ 24 - 0
src/lang/modules/ReportManagement/indexEn.js

@@ -0,0 +1,24 @@
+import { CloudPageEn } from "./CloudPage";
+import { CommodityConfigurationEn } from "./CommodityConfiguration";
+import { AuthorManagementEn } from "./AuthorManagement";
+import { SmartReportEn } from "./SmartReport";
+import { CategoryListEn } from "./CategoryList";
+import { ReportListEn } from "./ReportList";
+
+export default {
+  ReportManage: {
+    ReportAdd: {
+      refresh_btn: "One click refresh",
+      preview_btn: "Preview",
+      draft_btn: "Save draft",
+      input_content: "please input content",
+      publish_btn: "Publish",
+    },
+    CloudPage: CloudPageEn,
+    CommodityConfiguration: CommodityConfigurationEn,
+    AuthorManagement: AuthorManagementEn,
+    ...SmartReportEn,
+    CategoryList: CategoryListEn,
+    ReportList: ReportListEn,
+  },
+};

+ 25 - 0
src/lang/modules/ReportManagement/indexZh.js

@@ -0,0 +1,25 @@
+// bao
+import { CloudPageZh } from "./CloudPage";
+import { CommodityConfigurationZh } from "./CommodityConfiguration";
+import { AuthorManagementZh } from "./AuthorManagement";
+import { SmartReportZh } from "./SmartReport";
+import { CategoryListZh } from "./CategoryList";
+import { ReportListZh } from "./ReportList";
+
+export default {
+  ReportManage: {
+    ReportAdd: {
+      refresh_btn: "One click refresh",
+      preview_btn: "Preview",
+      draft_btn: "Save draft",
+      input_content: "please input content",
+      publish_btn: "Publish",
+    },
+    CloudPage: CloudPageZh,
+    CommodityConfiguration: CommodityConfigurationZh,
+    AuthorManagement: AuthorManagementZh,
+    ...SmartReportZh,
+    CategoryList: CategoryListZh,
+    ReportList: ReportListZh,
+  },
+};

+ 108 - 0
src/lang/modules/SandboxManage/SandFlow.js

@@ -0,0 +1,108 @@
+/**
+ * ETA逻辑
+ */
+
+/* 英文 */
+export const SandFlowEn = {
+    element_library:'Element library',
+    style:'Style',
+    lines:'Lines',
+    basic_shapes:'Basic shapes',
+    mind_map:'mind map',
+    logic_name_placeholder:"PLease enter the logic diagram's name",
+    select_category:'Please select category',
+    copy_img:"Copy image",
+    undo:'Undo',
+    recover:'Recover',
+    font:"Font",
+    font_size:'Font Size',
+    bold:"Bold",
+    italic:"Italic",
+    underline:"Underline",
+    font_color:"Font color",
+    text_align:"Text alignment",
+    fill_color:"Fill color",
+    Line_color:"Line color",
+    line_width:'Line width',
+    line_style:'Line style',
+    connector_tyoe:'Connector type',
+    start_arrow:'Start arrow',
+    end_arrow:'End arrow',
+    yes_tag:'yes',
+    no_tag:'no',
+    solid_line:'Solid line',
+    dashed_line:'Dashed line',
+    center:'Center',
+    left:'Left',
+    right:"Right",
+    center_theme:'Central theme',
+    branch_topic:'Branch topic',
+    sub_topic:'Subtopic',
+    clear_link_success:'clear links sucessfully',
+    add_link:'Add links',
+    edit_link:'Edit links',
+    clear_link:'clear links',
+    save_link:'links saved sucessfully',
+    copy_tag:'Copy',
+    delete_tag:'Delete',
+    add_link_search_placeholder:'Indicator ID/ indicator name',
+    link_type_opt1:'ETA Indicator/ ETA forecast indicator',
+    link_type_opt2:'ETA Image library',
+    link_type_opt3:'ETA reports',
+    msg_leave_page_save:'Before leaving this page, do you want to save current contents?',
+  };
+  
+  /* 中文 */
+  export const SandFlowZh = {
+    element_library:'元素库',
+    style:'风格',
+    lines:'线条',
+    basic_shapes:'基本形状',
+    mind_map:'思维导图',
+    logic_name_placeholder:"请输入逻辑图名称",
+    select_category:'请选择分类',
+    copy_img:"复制图片",
+    undo:'撤销',
+    recover:'恢复',
+    font:"字体",
+    font_size:'字号',
+    bold:"加粗",
+    italic:"斜体",
+    underline:"下划线",
+    font_color:"字体颜色",
+    text_align:"文本对齐",
+    fill_color:"颜色填充",
+    Line_color:"线条颜色",
+    line_width:'线条宽度',
+    line_style:'线条样式',
+    connector_tyoe:'连线类型',
+    start_arrow:'开始箭头',
+    end_arrow:'结束箭头',
+    yes_tag:'有',
+    no_tag:'无',
+    solid_line:'实线',
+    dashed_line:'虚线',
+    center:'居中',
+    left:'居左',
+    right:"居右",
+    center_theme:'中心主题',
+    branch_topic:'分支主题',
+    sub_topic:'子主题',
+    clear_link_success:'清除链接成功',
+    add_link:'添加链接',
+    edit_link:'编辑链接',
+    clear_link:'清除链接',
+    save_link:'链接保存成功',
+    copy_tag:'复制',
+    delete_tag:'删除',
+    add_link_search_placeholder:'指标ID/指标名称',
+    link_type_opt1:'ETA指标/ETA预测指标',
+    link_type_opt2:'ETA图库',
+    link_type_opt3:'ETA研报',
+    msg_leave_page_save:'在离开页面之前,是否保存当前内容?',
+
+  };
+  
+  /**
+   * $t('SandboxManage.SandFlow.XXX')
+  */

+ 56 - 0
src/lang/modules/SandboxManage/SandList.js

@@ -0,0 +1,56 @@
+/**
+ * ETA逻辑
+ */
+
+/* 英文 */
+export const SandListEn = {
+    logic_add_btn:'Add logic diagram', 
+    only_see:'Only see my ETA logic diagram',
+    search_placeholder:"Please enter the logic diagram's name",
+    categories_add_btn:'Add categories',
+    categories_edit_btn:'Edit categories',
+    total_count_tag:'',
+    total_count:'logic diagrams in total',
+    copy_btn:'Copy',
+    del_btn:'Delete',
+    parent_dir:'Parent directory',
+    catalog_name:'Catalog name',
+    catalog_name_placeholder:'Please enter the catalog name',
+    catalog_variety_placeholder:'Please select variety',
+    associated_variety:'Associated variety',
+    logic_diagram_name:"Logic diagram's name",
+    delete_attention_msg1:'Logic diagrams exist under this category and cannot be deleted',
+    delete_attention_msg2:'Are you sure to delete current category?',
+    add_diagram_msg01:"Please fill in the logic diagram's name",
+    select_categories_msg:'Please select category',
+    save_as_success:'Save As successful.',
+  };
+  
+  /* 中文 */
+  export const SandListZh = {
+    logic_add_btn:'添加逻辑',
+    only_see:'只看我的',
+    search_placeholder:'请输入逻辑图名称',
+    categories_add_btn:'添加分类',
+    categories_edit_btn:'编辑分类',
+    total_count_tag:'共',
+    total_count:'个逻辑图',
+    copy_btn:'复制 ',
+    del_btn:'删除',
+    parent_dir:'上级目录',
+    catalog_name:'目录名称',
+    catalog_name_placeholder:'请输入目录名称',
+    catalog_variety_placeholder:'请选择对应品种',
+    associated_variety:'关联品种',
+    logic_diagram_name:"逻辑图名称",
+    delete_attention_msg1:'该分类下存在沙盘图,不可删除',
+    delete_attention_msg2:'确定删除当前分类吗?',
+    add_diagram_msg01:'请填写逻辑图名称',
+    select_categories_msg:'请选择所属分类',
+    save_as_success:'另存为成功',
+
+  };
+  
+  /**
+   * $t('SandboxManage.SandList.XXX')
+  */

+ 10 - 0
src/lang/modules/SandboxManage/indexEn.js

@@ -0,0 +1,10 @@
+import { SandListEn } from "./SandList";
+import { SandFlowEn } from "./SandFlow";
+
+export default {
+  // ETA逻辑
+  SandboxManage: {
+    SandList: SandListEn,
+    SandFlow: SandFlowEn,
+  },
+};

+ 10 - 0
src/lang/modules/SandboxManage/indexZh.js

@@ -0,0 +1,10 @@
+import { SandListZh } from "./SandList";
+import { SandFlowZh } from "./SandFlow";
+
+export default {
+  // ETA逻辑
+  SandboxManage: {
+    SandList: SandListZh,
+    SandFlow: SandFlowZh,
+  },
+};

+ 114 - 0
src/lang/modules/SemanticsManage/DocumentComparison.js

@@ -0,0 +1,114 @@
+/**
+ * 语义分析--文档对比
+ */
+
+/* 英文 */
+export const DocumentComparisonEn = {
+  add_document_btn: "Add Document",
+  document_name: "Document Name",
+  document_category: "Document Category",
+  edit_category: "Edit Category",
+  select_category: "Category",
+  please_select_category: "Please select a category",
+  input_enter_content: "Enter Document Name",
+  input_enter_fiel_content: "Enter Document Name",
+  add_category: "Add Category",
+  add_category_name: "Category Name",
+  add_category_input_name: "Please enter category name",
+  search_btn: "Search",
+  add_search_term: "Add Search Term",
+  add_search_input: "Please enter search term",
+  select_documents_comparison: "Select Documents for Comparison",
+  select_documents: "Choose Document",
+  select_documents_input: "Please enter document name",
+  select_tags: "Select Tags",
+  show_only_mine: "Show Only Mine",
+  semantic_analysis_name: "Semantic Analysis Name",
+  semantic_analysis_name_input: "Please enter semantic analysis name",
+  add_next_section: "Add Next Section",
+  number_tags_attached: "Number of Tags Attached",
+  document_comparison_btn: "Add Document Comparison",
+  author_detail: "Author",
+  creation_time_detail: "Creation Time",
+  no_image_information_available: "No image information available.",
+  preview_results: "Preview Results",
+  radio_yes: "Yes",
+  radio_no: "No",
+  upload_result_image: "Upload Result Image",
+  please_keep_least_one_document: "Please keep at least one document.",
+  copy_office_btn: "Copy to Office",
+  copy_wechat_btn: "to WeChat",
+  download_btn: "Download",
+  classify_name_tips: "The category name cannot be empty",
+  chrome_version_msg: "The browser does not support highlighting effects, please switch to Chrome browser version 105 or above.",
+  save_as_success_msg: "Save As successful.",
+  up_img_success_msg: "Upload of result image successful.",
+  paragraph_content_ipt: "Please enter paragraph content.",
+  document_name_no_empty: "The document name cannot be empty",
+  article_content_enter: "Please enter article content.",
+  least_one_paragraph_msg: "Please keep at least one paragraph.",
+  search_history: "Search History",
+  current_tags: "Current Tags",
+  no_tags_available: "No tags available",
+  historical_tags_mine: "Historical Tags (Mine)",
+  their_tags: "Their Tags",
+  view_tags: "View tags",
+  generating_result_image: "Generating result image...",
+  maximum_documents_msg: "A maximum of 10 documents can be selected.",
+};
+
+/* 中文 */
+export const DocumentComparisonZh = {
+  add_document_btn: "添加文档",
+  document_name: "文档名称",
+  document_category: "文档分类",
+  select_category: "所属分类",
+  please_select_category: "请选择所属分类",
+  edit_category: "编辑分类",
+  input_enter_content: "请输入文档名称",
+  input_enter_fiel_content: "请输入文件名称",
+  add_category: "添加分类",
+  add_category_name: "分类名称",
+  add_category_input_name: "请输入分类名称",
+  search_btn: "搜索",
+  add_search_term: "添加搜索词",
+  add_search_input: "请输入搜索词",
+  select_documents_comparison: "选择对比文档",
+  select_documents: "选择文档",
+  select_documents_input: "请输入文档名称",
+  select_tags: "选择标签",
+  show_only_mine: "只看我的",
+  semantic_analysis_name: "语义分析名称",
+  semantic_analysis_name_input: "请输入语义分析名称",
+  add_next_section: "添加下一段",
+  number_tags_attached: "已打标签数",
+  document_comparison_btn: "添加文档对比",
+  author_detail: "作者",
+  creation_time_detail: "创建时间",
+  no_image_information_available: "暂无图片信息",
+  parent_directory: "所属目录",
+  preview_results: "是否预览结果",
+  radio_yes: "是",
+  radio_no: "否",
+  upload_result_image: "是否上传结果图片",
+  please_keep_least_one_document: "请至少保留一个文档",
+  copy_office_btn: "复制到Office",
+  copy_wechat_btn: "复制到微信",
+  download_btn: "下载",
+  classify_name_tips: "分类名称不能为空",
+  chrome_version_msg: "该浏览器不支持高亮效果,请切换至chrome浏览器105版本以上",
+  save_as_success_msg: "另存为成功",
+  up_img_success_msg: "上传结果图片成功",
+  paragraph_content_ipt: "请输入段落内容",
+  document_name_no_empty: "文档名称不能为空",
+  article_content_enter: "请输入文章内容",
+  least_one_paragraph_msg: "请至少保留一段",
+  search_history: "历史记录",
+  current_tags: "当前标签",
+  no_tags_available: "暂无标签",
+  historical_tags_mine: "历史标签(我的)",
+  their_tags: "Ta的标签",
+  view_tags: "查看标签",
+  generating_result_image: "正在生成结果图片...",
+  maximum_documents_msg: "最多支持选择10个文档",
+};

+ 54 - 0
src/lang/modules/SemanticsManage/DocumentManagement.js

@@ -0,0 +1,54 @@
+/**
+ * 语义分析--文档管理
+ */
+
+/* 英文 */
+export const DocumentManagementEn = {
+  document_name: "Document Name",
+  add_document_btn: "Add Document",
+  input_content: "Please enter document name",
+  input_enter_content: "Enter Document Name",
+  category_name: "Category",
+  category_select: "Please select a category",
+  add_document_empty_msg: "Document name cannot be empty",
+  select_document_category_msg: "Please select a document category",
+  document_name_exists_msg: "Document name already exists",
+  add_category: "Add Category",
+  add_category_name: "Category Name",
+  add_category_input_name: "Please enter category name",
+  edit_category: "Edit Category",
+  delete_category_msg: "Delete operation cannot be undone. Are you sure you want to delete?",
+  add_next_section: "Add Next Section",
+  number_tags_attached: "Number of Tags Attached",
+  error_notifications: "Already associated with comparison results, deletion not allowed.",
+  all_num_document: "{num}documents in total",
+  select_img_mag: "Please select images in png or jpeg format",
+  img_no_empty_msg: "The category image cannot be empty",
+  no_deleted_msg: "There are related documents under this category, and deletion is not allowed.",
+
+};
+
+/* 中文 */
+export const DocumentManagementZh = {
+  document_name: "文档名称",
+  add_document_btn: "添加添加文档",
+  input_content: "请输入文件名称",
+  input_enter_content: "请输入文档名称",
+  category_name: "所属分类",
+  category_select: "请选择所属分类",
+  add_document_empty_msg: "文档名称不能为空",
+  select_document_category_msg: "请选择文档分类",
+  document_name_exists_msg: "文档名称已存在",
+  add_category: "添加分类",
+  add_category_name: "分类名称",
+  add_category_input_name: "请输入分类名称",
+  edit_category: "编辑分类",
+  delete_category_msg: "删除操作不可恢复,确认删除吗?",
+  add_next_section: "添加下一段",
+  number_tags_attached: "已打标签数",
+  error_notifications: "已关联对比结果,不允许删除",
+  all_num_document: "共{num}个文档",
+  select_img_mag: "请选择png、jpeg格式的图片",
+  img_no_empty_msg: "分类图片不能为空",
+  no_deleted_msg: "该分类下有关联文档,不允许删除",
+};

+ 41 - 0
src/lang/modules/SemanticsManage/TagManagement.js

@@ -0,0 +1,41 @@
+/**
+ * 语义分析--标签管理
+ */
+
+/* 英文 */
+export const TagManagementEn = {
+  add_tag_btn: "Add Tag",
+  tag_name: "Tag Name ",
+  input_content: "Please enter tag name",
+  note_content: "Note: Name should not exceed 15 characters",
+  tag_content: "Tag Content",
+  column_content_number: "Number of Contents",
+  column_creation_time: "Creation Time",
+  edit_tag_btn: "Edit Tag",
+  tag_name_long_msg: "The tag name is too long, please re-edit",
+  delete_tag_msg: "After deletion, it cannot be recovered. Are you sure you want to delete this tag?",
+  add_new_tag: "Add new tag",
+  tag_management: "Tag management",
+  tagging_title: "Tagging",
+  tag_name_lable: "Tag Name",
+  note_characters: "Note: The name must not exceed 15 characters",
+};
+
+/* 中文 */
+export const TagManagementZh = {
+  add_tag_btn: "添加标签",
+  tag_name: "标签名称",
+  input_content: "请输入标签名称",
+  note_content: "注:名称不得超过15字",
+  tag_content: "标签内容",
+  column_content_number: "内容数量",
+  column_creation_time: "创建时间",
+  edit_tag_btn: "编辑标签",
+  tag_name_long_msg: "标签名称过长,请重新编辑",
+  delete_tag_msg: "删除后不可恢复,是否确认删除该标签?",
+  add_new_tag: "新增标签",
+  tag_management: "标签管理",
+  tagging_title: "打标签",
+  tag_name_lable: "标签名称:",
+  note_characters: "注:名称不得超过15字",
+};

+ 13 - 0
src/lang/modules/SemanticsManage/indexEn.js

@@ -0,0 +1,13 @@
+
+// 语义分析----模块
+import { DocumentComparisonEn } from "./DocumentComparison";
+import { DocumentManagementEn } from "./DocumentManagement";
+import { TagManagementEn } from "./TagManagement";
+
+export default {
+  SemanticsManage: {
+    DocumentComparison: DocumentComparisonEn,
+    DocumentManagement: DocumentManagementEn,
+    TagManagement: TagManagementEn,
+  },
+};

+ 12 - 0
src/lang/modules/SemanticsManage/indexZh.js

@@ -0,0 +1,12 @@
+import { DocumentComparisonZh } from "./DocumentComparison";
+import { DocumentManagementZh } from "./DocumentManagement";
+import { TagManagementZh } from "./TagManagement";
+
+export default {
+  // 语义分析----模块
+  SemanticsManage: {
+    DocumentComparison: DocumentComparisonZh,
+    DocumentManagement: DocumentManagementZh,
+    TagManagement: TagManagementZh,
+  },
+};

+ 64 - 0
src/lang/modules/Slides/commonLang.js

@@ -0,0 +1,64 @@
+/**
+ * 智能PPT模块 操作按钮模块
+ */
+
+/* 英文 */
+export const operationsEn = {
+  operations_copy: "Copy",
+  operations_cut: "Cut",
+  operations_download: "Download",
+  operations_rename: "Rename",
+  operations_cancel: "Cancel",
+  operations_delete: "Delete",
+  operations_batch_delete: "Batch delete",
+  operations_share: "Share Settings",
+  operations_unshare: "unshare",
+  operations_english: "Go to English PPT",
+  operations_preview: "Preview and Publish",
+  operations_presentation: "Presentation",
+  go_to_publish: "Go to publish",
+  operations_save: "Save",
+  operations_insert: "Insert PPT",
+  operations_switch: "Switch template",
+  paste_before_slide: "Paste before this slide",
+  paste_after_slide: "Paste after this slide",
+  please_delete_existing_chartsmsg: "There is no place left, please delete existing charts/images",
+  cover_info: "cover",
+  back_cover_info: "Back cover",
+  confirmation_btn: "Confirmation",
+  slide_select: "Slide",
+  to_select: "To",
+  page_select: "Page",
+  delete_msg_selected: "Page {page} has been selected. Are you sure you want to delete it?",
+
+};
+
+/* 中文 */
+export const operationsZh = {
+  operations_copy: "复制",
+  operations_cut: "剪切",
+  operations_download: "下载",
+  operations_rename: "重命名",
+  operations_cancel: "取消",
+  operations_delete: "删除",
+  operations_batch_delete: "批量删除",
+  operations_share: "设置共享",
+  operations_unshare: "取消共享",
+  operations_english: "转英文PPT",
+  operations_preview: "预览发布",
+  operations_presentation: "演示",
+  go_to_publish: "去发布",
+  operations_save: "保存",
+  operations_insert: "插入PPT",
+  operations_switch: "切换模板",
+  paste_before_slide: "粘贴到此页前",
+  paste_after_slide: "粘贴到此页后",
+  please_delete_existing_chartsmsg: "已无位置,请删除现有图表/图片",
+  cover_info: "封面",
+  back_cover_info: "封底",
+  confirmation_btn: "确认",
+  slide_select: "第",
+  to_select: "至",
+  page_select: "页",
+  delete_msg_selected: "已选择{page}页,确认删除吗?",
+};

+ 17 - 0
src/lang/modules/Slides/indexEn.js

@@ -0,0 +1,17 @@
+/**
+ * 研报管理--智能PPT
+ */
+
+import { listEn } from "./pptList";
+import { presentEn } from "./pptPresent";
+import { operationsEn } from "./commonLang";
+import { messageEn } from "./pptMsg";
+
+export default {
+  Slides: {
+    ...listEn,
+    ...operationsEn,
+    ...presentEn,
+    ...messageEn,
+  },
+};

+ 18 - 0
src/lang/modules/Slides/indexZh.js

@@ -0,0 +1,18 @@
+/**
+ * 研报管理--智能PPT
+ */
+
+import { listZh } from "./pptList";
+import { presentZh } from "./pptPresent";
+import { operationsZh } from "./commonLang";
+import { messageZh } from "./pptMsg";
+
+/* 中文 */
+export default {
+  Slides: {
+    ...listZh,
+    ...operationsZh,
+    ...presentZh,
+    ...messageZh,
+  },
+};

+ 233 - 0
src/lang/modules/Slides/pptList.js

@@ -0,0 +1,233 @@
+/**
+ * 智能PPT
+ */
+
+/* 英文 */
+export const listEn = {
+  add_ppt_btn: "Add PPT",
+  ppt_merge_btn: "Merge PPTs",
+  input_ppt_title: "Please input slide title",
+  ppt_title_input: "PPT Title",
+  visible_to_self_only: "Visible to self only",
+  visible_to_everyone: "Visible to everyone",
+  unshare_btn: "unshare",
+  select_user_btn: "Select user",
+  add_my_directory: "Add My Directory",
+  creation_time: "Creation time",
+  author_info: "Author",
+  time_info: "Time",
+  operation_info: "Operation",
+  publish_info: "Publish",
+  save_info: "Save",
+  rename_successful: "Rename Successful",
+  copy_successfully: "Copy Successful",
+  settings_successfully: "Settings successful",
+  conversion_successfully: "Conversion successful",
+  convert_to_report: "Convert to report",
+  edit_lable_name: "Edit",
+  delete_confirm_info: "Deletion action is irreversible, and if this PPT is shared, the shared PPT will be deleted synchronously, are you sure you want to delete it? ",
+  delete_directory_info: "Deletion action is irreversible, confirm deletion?",
+  delete_directory_ppt_info: "This directory has associated PPTs, deletion is not allowed.",
+  please_preview_info: "Please preview and publish first",
+  cancel_sharing_info: "Are you sure you want to unshare?",
+  successfully_converted_ppt: "Successfully converted into English PPT",
+  batch_converted_ppt: "Successfully converted into English PPT",
+  my_ppt_tabs: "My PPT",
+  share_ppt_tabs: "Share PPT",
+  public_ppt_tabs: "Public PPT",
+  select_directory_title: "Select Directory",
+  newly_added_btn: "Newly added",
+  add_directory_dlg: "Add Directory",
+  edit_directory_dlg: "Edit directory",
+  name_directory_dlg: "Directory Name",
+  input_directory_dlg: "Please Input The Directory Name",
+  please_input_cover_title: "Please input cover title",
+  please_save_first: "Please save first",
+  re_edit_slide: "Slide",
+  please_re_edit: "content is incomplete, please re-edit!",
+  // ///////
+  view_report_btn: "View report",
+  editing_progress_msg: "Editing in progress.",
+  no_duplicated_edit_msg: "Another user is currently editing, editing cannot be duplicated.",
+  exceed_ppt_msg: "The number of charts inserted in PPT cannot exceed 100, please modify and retry.",
+  exceed_sixty_ppt_msg: "PPT pages cannot exceed 60, please modify and retry.",
+  move_success_msg: "Move successful.",
+  add_table_msg: "Please add a table of contents first!",
+  add_main_text_empty: "After adding the main text, it will be generated here.",
+  updating_chart_loading: "Updating chart information...",
+  error_ppt_data_msg: "Failed to retrieve PowerPoint data!",
+  unable_files_msg: "Unable to read files from clipboard!",
+  uploading_images_msg: "Uploading images...",
+  all_loaded_completely_text: "All loaded completely.",
+  please_add_page_msg: "Please add a page first.",
+  please_ppt_title_msg: "Please enter the title for slide number {count}!",
+  please_ppt_content_msg: "Please fill in the content for slide number {count}!",
+  most_add_ppt_msg: "A maximum of {count} PowerPoint slides can be added, please modify and try again!",
+  most_add_chart_msg: "Up to {count} charts can be added. Please make the necessary modifications and try again",
+  please_add_one_page: "Please add at least one page.",
+  deleting_process_loading: "Deleting in process...",
+  upload_error_msg: "Upload failed, please refresh and retry.",
+  no_categories_empty: "No categories available",
+  internal_chart_no_msg: "Internal chart, ppt insertion not allowed",
+  delete_chart_img_table: "There is no place left, please delete existing charts/images/tables",
+  least_one_ppt_msg: "Please add at least one PPT",
+  ppt_edit_btn: "PPT editing",
+  just_mine_radio: "Just Mine",
+  no_corresponding_ppt_msg: "No corresponding PPT data available",
+  this_one_ppt_msg: "This is already the first PPT",
+  this_last_ppt_msg: "This is already the last PPT",
+  please_select_researcher_msg: "Please select a researcher",
+  please_select_directory_msg: "Please select a directory.",
+  powerPoint_data_loading: "Loading PowerPoint data...",
+  my_company_title: "Hongze Midi Dao (Shanghai) Investment Consulting Co., Ltd.",
+  ficc_department_title: "FICC Research Department.",
+  get_report_data_loading: "Get report list...",
+  switch_template_title: "Switch template.",
+  custom_cover_page_title: "Custom Cover Page",
+  re_enter_entry_msg: "The starting page number must be less than or equal to the ending page number, please re-enter",
+  batch_import_all_chart: "This operation will batch import all charts under the selected graph category",
+  no_charts_category_msg: "No charts in this category",
+  keyword_search_ipt: "Keyword search",
+
+  copy_ppt_success: "Copying PowerPoint page successful.",
+  indicator_name_tlt: "Indicator name.",
+  es_indicator_name_tlt: "English indicator name.",
+  please_es_indicator_name: "Please enter an English indicator name.",
+  es_unit: "Unit in English.",
+  es_futures_name: "English futures name.",
+  please_es_futures_name: "Please enter an English futures name.",
+  gross_margin_name: "Gross margin name (for futures).",
+  es_gross_margin_name: "English gross margin name (for futures).",
+  please_es_margin_name: "Please enter an English gross margin name (for futures).",
+  x_axis_name: "X-axis name",
+  es_x_axis_name: "English X-axis name",
+  please_es_x_axis_name: "Please enter an English X-axis name",
+  loading_thumbnails: "Loading thumbnails",
+
+  drag_and_hold: "Drag and hold",
+  please_re_edit: "Title/Creator.",
+  download_pptx_file: "Download pptx file.",
+  is_delete_sure: "This action cannot be undone, are you sure you want to delete?",
+  last_updated_time: "Last updated time.",
+  creator_btn: "Creator.",
+  presentation_ppt: "Time taken to convert PowerPoint presentation.",
+  is_delete_ppt: "Are you sure you want to delete this PowerPoint slide?",
+  add_least_one: "Please add at least one PowerPoint slide.",
+  preview_report_btn: "Preview report.",
+};
+
+/* 中文 */
+export const listZh = {
+  add_ppt_btn: "添加ppt",
+  ppt_merge_btn: "合并ppt",
+  input_ppt_title: "请输入PPT标题",
+  ppt_title_input: "PPT标题",
+  visible_to_self_only: "仅自己可见",
+  visible_to_everyone: "所有人可见",
+  unshare_btn: "取消共享",
+  select_user_btn: "选择用户",
+  add_my_directory: "添加我的目录",
+  creation_time: "创建时间",
+  author_info: "作者",
+  time_info: "时间",
+  operation_info: "操作",
+  publish_info: "发布",
+  save_info: "保存",
+  rename_successful: "重命名成功",
+  copy_successfully: "复制成功",
+  settings_successfully: "设置成功",
+  conversion_successfully: "转换成功",
+  convert_to_report: "转报告",
+  edit_lable_name: "编辑",
+  delete_confirm_info: "删除操作不可恢复,若该PPT被共享,则同步删除共享PPT,确认删除吗?",
+  delete_directory_info: "删除操作不可恢复,确认删除吗?",
+  delete_directory_ppt_info: "该目录下有关联PPT,不允许删除",
+  please_preview_info: "请先预览发布!",
+  cancel_sharing_info: "确定要取消共享吗?",
+  successfully_converted_ppt: "转英文PPT成功",
+  batch_converted_ppt: "批量转英文PPT成功",
+  my_ppt_tabs: "我的PPT",
+  share_ppt_tabs: "共享PPT",
+  public_ppt_tabs: "公共PPT",
+  select_directory_title: "选择目录",
+  newly_added_btn: "新增",
+  add_directory_dlg: "新增目录",
+  edit_directory_dlg: "编辑目录",
+  name_directory_dlg: "目录名称",
+  input_directory_dlg: "请输入目录名称",
+  please_input_cover_title: "请输入封面标题!",
+  please_save_first: "请先保存",
+  re_edit_slide: "第",
+  please_re_edit: "页内容不完整,请重新编辑!",
+  // ///////
+  view_report_btn: "查看报告",
+  editing_progress_msg: "编辑中",
+  no_duplicated_edit_msg: "他人正在编辑中,不可重复编辑",
+  exceed_ppt_msg: "PPT插入图表数量不能超过100张,请修改后重试",
+  exceed_sixty_ppt_msg: "PPT页数不能超过60页,请修改后重试",
+  move_success_msg: "移动成功",
+  add_table_msg: "请先添加目录!",
+  add_main_text_empty: "添加正文后,会在这里生成",
+  updating_chart_loading: "正在更新图表...",
+  error_ppt_data_msg: "获取ppt数据失败!",
+  unable_files_msg: "剪贴板读取不到文件!",
+  uploading_images_msg: "上传图片中...",
+  all_loaded_completely_text: "已全部加载完",
+  please_add_page_msg: "请先添加页面",
+  please_ppt_title_msg: "请输入第{count}张PPT的标题!",
+  please_ppt_content_msg: "请填写第{count}张PPT的内容!",
+  most_add_ppt_msg: "最多可添加{count}页PPT,请修改后再试!",
+  most_add_chart_msg: "最多可添加{count}图表,请修改后再试!",
+  please_add_one_page: "请至少添加一页",
+  deleting_process_loading: "删除中...",
+  upload_error_msg: "上传失败,请刷新重试",
+  no_categories_empty: "暂无分类",
+  internal_chart_no_msg: "内部图表,不允许插入ppt",
+  delete_chart_img_table: "已无位置,请删除现有图表/图片/表格",
+  least_one_ppt_msg: "请至少添加一张PPT",
+  ppt_edit_btn: "ppt编辑",
+  just_mine_radio: "只看我的",
+  no_corresponding_ppt_msg: "无对应的ppt数据!",
+  this_one_ppt_msg: "已是第一张PPT!",
+  this_last_ppt_msg: "已是最后一张PPT!",
+  please_select_researcher_msg: "请选择研究员",
+  please_select_directory_msg: "请选择一个目录",
+  powerPoint_data_loading: "正在加载ppt数据...",
+  my_company_title: "弘则弥道(上海)投资咨询有限公司",
+  ficc_department_title: "FICC研究部",
+  get_report_data_loading: "获取报告列表中...",
+  switch_template_title: "切换模板",
+  custom_cover_page_title: "自定义封面页",
+  re_enter_entry_msg: "起始页数需小于等于终止页数,请重新输入",
+  batch_import_all_chart: "该操作将批量导入所选图分类下所有图表",
+  no_charts_category_msg: "该分类无图表",
+  keyword_search_ipt: "关键词搜索",
+
+  //?????
+
+  copy_ppt_success: "复制ppt页成功",
+  indicator_name_tlt: "指标名称",
+  es_indicator_name_tlt: "英文指标名称",
+  please_es_indicator_name: "请输入英文指标名称",
+  es_unit: "英文单位",
+  es_futures_name: "英文期货名称",
+  please_es_futures_name: "请输入英文期货名称",
+  gross_margin_name: "盘面利润名称",
+  es_gross_margin_name: "英文盘面利润名称",
+  please_es_margin_name: "请输入英文盘面利润名称",
+  x_axis_name: "X轴名称",
+  es_x_axis_name: "英文X轴名称",
+  please_es_x_axis_name: "请输入英文X轴名称",
+  loading_thumbnails: "加载缩略图中...",
+
+  drag_and_hold: "按住拖动",
+  please_re_edit: "标题/创建人",
+  download_pptx_file: "下载pptx",
+  is_delete_sure: "该操作不可撤销,确定删除吗",
+  last_updated_time: "更新时间",
+  creator_btn: "创建人",
+  presentation_ppt: "转换ppt用时",
+  is_delete_ppt: "确定删除该页ppt吗",
+  add_least_one: "请至少添加一张",
+  preview_report_btn: "预览报告",
+};

+ 35 - 0
src/lang/modules/Slides/pptMsg.js

@@ -0,0 +1,35 @@
+/**
+ * 智能PPT模块 操作按钮模块
+ */
+
+/* 英文 */
+export const messageEn = {
+  msg_olease_hold_select_ppt: "Please hold Ctrl + Left Mouse Click to select PPT slides",
+  msg_copy_ppt_success: "PPT slides copied successfully",
+  msg_cut_ppt_success: "PPT slides cut successfully",
+  msg_operating_instructions: "Operating instructions",
+  msg_instructions_text:
+    `<p> Operation instructions for copy and cut functions are as follows:</p>` +
+    `<p>1. Ctrl + Left Mouse Click to select PPT slides, supports multiple selection;</p>` +
+    `<p>2. Choose the desired location to copy or cut the PPT slides, click on the more options for the selected PPT slide, and choose "Paste Before This Slide" or "Paste After This Slide."</p>`,
+  msg_affirmative: "Affirmative",
+  is_delete_ppt_msg:'Are you sure to delete the ppt on this page',
+  generating_powerPoint_msg:'Generating PowerPoint'
+
+};
+
+/* 中文 */
+export const messageZh = {
+  msg_olease_hold_select_ppt: "请按住ctrl+鼠标左键选择ppt页",
+  msg_copy_ppt_success: "复制ppt页成功",
+  msg_cut_ppt_success: "剪切ppt页成功",
+  msg_operating_instructions: "操作说明",
+  msg_instructions_text:
+    `<p>复制与剪切功能操作说明如下所述:</p>` +
+    `<p>1、ctrl+鼠标左键,选择PPT页,支持多选;</p>` +
+    `<p>2、选择所要复制或剪切的PPT页位置,点击PPT页的更多操作项,选择“粘贴到此页前”或“粘贴到此页后”。</p>`,
+  msg_affirmative: "知道了",
+  is_delete_ppt_msg:'确定删除该页ppt吗',
+  generating_powerPoint_msg:'生成ppt中...'
+};
+// Slides

+ 192 - 0
src/lang/modules/Slides/pptPresent.js

@@ -0,0 +1,192 @@
+/**
+ * 智能PPT
+ */
+
+/* 英文 */
+export const presentEn = {
+  portrait_mode_playback: "Portrait mode playback",
+  play_from_current_slide: "Play from current slide",
+  play_for_the_first_slide: "Play for the first slide",
+  default_size: "(Default)",
+  return_to_list: "Return to list",
+  default_publish: " Publish",
+  select_cover_page: "Select cover page",
+  operating_instructions: "Operating instructions",
+  click_to_input_title: "Click to input title",
+  update_chart_btn: "Update chart",
+  paste_element_btn: "Paste element",
+  layer_editing: "Layer editing",
+  keyword_search: "Keyword search",
+  eta_chart_gallery: "ETA Chart Gallery",
+  commodity_price_curve: "Commodity Price Curve",
+  correlation_charts: "Correlation Charts",
+  fitted_equation_curves: "Fitted Equation Curves",
+  statistical_features: "Statistical Features",
+  intercommodity_analysis: "Intercommodity Analysis",
+  show_only_mine: "Show only mine",
+  sandbox_name_category: "Sandbox Name / Category",
+  sandbox_name: "Sandbox",
+  table_name: "Table",
+  table_name_input: "Table Name",
+  my_eta_batch: "MyETA Batch",
+  layer_element: "Layer element",
+  line_settings: "Line settings",
+  outline_element: "Outline settings",
+  text_element: "Text settings",
+  batch_deletion_successful: "Batch deletion successfu",
+  retrieving_ppt_data: "Retrieving PPT data",
+  loading_urgently: "Loading urgently",
+  convert_to_report_dlg: "PPT convert to report",
+  report_type_select: "Report type",
+  please_report_type_select: "Please select report type",
+  report_title_input: "Report title",
+  please_report_title_input: "Please input report title",
+  report_abstract_input: "Report abstract",
+  please_report_abstract_input: "Please input report abstract",
+  please_selecdirectory_into: "Please select the directory to merge into",
+  selected_pages: "Selected",
+  please_select_ppt_title: "Please select PPT",
+  loading_merging: "Merging...",
+  please_select_two_msg: "Please select two PPTs",
+  please_fill_title_msg: "Please fill in PPT title",
+  merging_successful_msg: " Merging successful",
+  shared_users_lable: "Shared users",
+  ficc_researchers_radio: "All FICC researchers",
+  specify_members_radio: "Specify members",
+  please_select_researcher: "Please select a researcher",
+  please_select_directory: "Please select a directory",
+  input_text_cover: "Input text",
+  text_settings_cover: "Text settings",
+  please_select_settings_cover: "Please select the text element.",
+  change_the_template_cover: "Change the template",
+  untitled_title: "Untitled",
+  please_select_slide: "Please select PPT slide",
+  chart_category_name_select: "Chart Category Name",
+  insert_charts_tooltip: "This operation will import all charts under the selected chart category in bulk.",
+  no_data_empty: "No data",
+  unselected_ppt_slides: "Unselected PPT slides",
+  selected_ppt_slides_transfer: "Selected slides",
+  hold_down_drag_tooltip: "Hold down drag",
+  add_to_my_gallery_tooltip: "Add to my gallery",
+  copy_name_tooltip: "Copy Name",
+  source_info: "source",
+  click_input_text_content: "Click to input text content",
+  delete_element_contextmenus: "Delete Element",
+  copy_element_contextmenus: "Copy  Element",
+  border_thickness_tooltip: "Border thickness",
+  border_style_tooltip: "Border style",
+  border_color_tooltip: "Border color",
+  fill_color_tooltip: "Fill color",
+  line_thickness_tooltip: "Line thickness",
+  line_style_tooltip: "Line style",
+  line_srrow_tooltip: "Line arrow",
+  line_color_tooltip: "Line color",
+  line_default: "Line",
+  exit_full_screen_default: "Exit Full Screen",
+  next_sheet_default: "Next sheet",
+  previous_sheet_default: "Previous sheet",
+  table_analysis_semantic: "Semantic analysis insert",
+  table_chart: "Chart",
+  is_incomplete_please_edit:'Slide {num} content is incomplete, please re-edit!',
+  publishing_loading:'Publishing',
+};
+
+/* 中文 */
+export const presentZh = {
+  portrait_mode_playback: "人像模式播放",
+  play_from_current_slide: "从当前页播放",
+  play_for_the_first_slide: "从首页播放",
+  default_size: "(默认)",
+  return_to_list: "返回列表",
+  default_publish: "(默认)发布",
+  select_cover_page: "选择封面页",
+  operating_instructions: "操作说明",
+  click_to_input_title: "单击输入标题",
+  update_chart_btn: "更新图表",
+  paste_element_btn: "粘贴元素",
+  layer_editing: "图层编辑",
+  keyword_search: "关键字查找",
+  eta_chart_gallery: "ETA图库",
+  commodity_price_curve: "商品价格曲线",
+  correlation_charts: "相关性图表",
+  fitted_equation_curves: "拟合方程曲线",
+  statistical_features: "统计特征",
+  intercommodity_analysis: "跨品种分析",
+  show_only_mine: "只看我的",
+  sandbox_name_category: "沙盘名称/品种",
+  sandbox_name: "沙盘",
+  table_name: "表格",
+  table_analysis_semantic: "语义分析插入",
+  table_name_input: "表格名称",
+  my_eta_batch: "MyETA批量",
+  table_chart: "图表",
+  layer_element: "图层元素",
+  line_settings: "线条设置",
+  outline_element: "线框设置",
+  text_element: "文本设置",
+  batch_deletion_successful: "批量删除成功",
+  retrieving_ppt_data: "正在获取ppt数据",
+  loading_urgently: "拼命加载中",
+  convert_to_report_dlg: "PPT转报告",
+  report_type_select: "报告类型",
+  please_report_type_select: "请选择报告类型",
+  report_title_input: "报告标题",
+  please_report_title_input: "请输入报告标题",
+  report_abstract_input: "报告摘要",
+  please_report_abstract_input: "请输入报告摘要",
+  please_selecdirectory_into: "请选择合并到目录",
+  selected_pages: "已选择",
+  please_select_ppt_title: "请选择PPT",
+  loading_merging: "合并中...",
+  please_select_two_msg: "请选择两个PPT",
+  please_fill_title_msg: "请填写PPT标题",
+  merging_successful_msg: " 合并成功",
+  shared_users_lable: "共享用户",
+  ficc_researchers_radio: "全部ficc研究员",
+  specify_members_radio: "指定成员",
+  please_select_researcher: "请选择研究员",
+  please_select_directory_msg: "请选择目录",
+  input_text_cover: "插入文本",
+  text_settings_cover: "文本设置",
+  please_select_settings_cover: "请选择文本元素",
+  change_the_template_cover: "换一个模板",
+  untitled_title: "无标题",
+  please_select_slide: "请选择PPT页",
+  chart_category_name_select: "图分类名称",
+  insert_charts_tooltip: "该操作将批量导入所选图分类下所有图表",
+  no_data_empty: "无数据",
+  unselected_ppt_slides: "未选PPT页",
+  selected_ppt_slides_transfer: "已选PPT页",
+  hold_down_drag_tooltip: "按住拖动",
+  add_to_my_gallery_tooltip: "添加到我的图",
+  copy_name_tooltip: "复制名称",
+  source_info: "来源",
+  click_input_text_content: "点击输入文本内容",
+  delete_element_contextmenus: "删除元素",
+  copy_element_contextmenus: "复制元素",
+  border_thickness_tooltip: "边框粗细",
+  border_style_tooltip: "边框样式",
+  border_color_tooltip: "边框颜色",
+  fill_color_tooltip: "填充颜色",
+  line_thickness_tooltip: "线条粗细",
+  line_style_tooltip: "线条样式",
+  line_srrow_tooltip: "线条箭头",
+  line_color_tooltip: "线条颜色",
+  line_default: "直线",
+  exit_full_screen_default: "退出全屏",
+  next_sheet_default: "下一张",
+  previous_sheet_default: "上一张",
+  is_incomplete_please_edit:'第{num}页内容不完整,请重新编辑!',
+  publishing_loading:'发布中...',
+};
+
+/**
+ * 获取ppt数据失败
+ * 无对应的ppt数据
+ * 已是最后一张PPT
+ * 已是第一张PPT
+ * 进入全屏
+ * 退出全屏
+ *   {{$t('Slides.add_my_directory')}}
+ *   this.$t('Slides.rename_successful')
+ */

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

@@ -0,0 +1,75 @@
+/**
+ * 统计分析-相关性分析
+ */
+
+/* 英文 */
+export const ChartRelevanceEn = {
+    chart_add_btn:'Add chart',
+    catagory:'Catagory',
+    only_see_mine:'Just look at mine',
+    tab_type01:'Correl',
+    tab_type02:'Roll Correl',
+    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',
+
+    calculation_window:'Calculation window',
+    B_leads_A:'B leads A',
+    analysis_cycle:'Analysis cycle',
+    update_edb:'Update indicator',
+    save_other:'Indicator Save as',
+    save_edb:'Save indicator',
+    update_edb:'update',
+    update_success:'Update success',
+    chart_save_as:'Save Chart As',
+};
+  
+/* 中文 */
+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:'领先',
+
+    calculation_window:'计算窗口',
+    B_leads_A:'B领先A',
+    analysis_cycle:'分析周期',
+    update_edb:'更新指标',
+    save_other:'指标另存为',
+    save_edb:'保存指标',
+    update_edb:'更新',
+    update_success:'更新成功',
+    chart_save_as:'图表另存为',
+};
+  
+/**
+* $t('StatisticAnalysis.ChartRelevance.XXX')
+*/

+ 49 - 0
src/lang/modules/StatisticAnalysis/CrossVarietyChart.js

@@ -0,0 +1,49 @@
+/**
+ * 统计分析-跨品种分析
+ */
+
+/* 英文 */
+export const CrossVarietyChartEn = {
+    select_variety:'Select variety',
+    variety_management:'Variety management',
+    placeholder01:'Please enter name',
+    label_config:'Label configuration',
+    label_manage:'Label management',
+    del_msg:'Are you sure to delete this',
+    label_name:'Label',
+    variety_name:'Variety',
+    time_length:'Length of time',
+    x_axis:'X-axis coordinate',
+    y_axis:'Y-axis coordinate',
+    chart_name:'Chart name',
+    selec_date:'Select date',
+    add_date:'Add date',
+    latest_date:'Latest date',
+    n_day_before:'N days ago',
+    fixed_date:'fixed date'
+};
+  
+/* 中文 */
+export const CrossVarietyChartZh = {
+    select_variety:'选择品种',
+    variety_management:'品种管理',
+    placeholder01:'请输入名称',
+    label_config:'标签配置',
+    label_manage:'标签管理',
+    del_msg:'是否确认删除该',
+    label_name:'标签',
+    variety_name:'品种',
+    time_length:'时间长度',
+    x_axis:'X轴坐标',
+    y_axis:'Y轴坐标',
+    chart_name:'图表名称',
+    selec_date:'选择日期',
+    add_date:'添加日期',
+    latest_date:'最新日期',
+    n_day_before:'N天前',
+    fixed_date:'固定日期'
+};
+  
+/**
+* $t('StatisticAnalysis.CrossVarietyChart.XXX')
+*/

+ 26 - 0
src/lang/modules/StatisticAnalysis/FittingEquationChart.js

@@ -0,0 +1,26 @@
+/**
+ * 统计分析-拟合方程曲线
+ */
+
+/* 英文 */
+export const FittingEquationChartEn = {
+    x_edb:'X-value index',
+    y_edb:'Y-value index',
+    msg01:'Please select an indicator',
+    msg02:'The number of indicators shall not be less than 2 groups',
+    msg03:'The number of indicators on the X-axis and Y-axis is inconsistent',
+};
+  
+/* 中文 */
+export const FittingEquationChartZh = {
+    x_edb:'X值指标',
+    y_edb:'Y轴指标',
+    msg01:'请先选择指标',
+    msg02:'指标数量不得少于2组',
+    msg03:'X轴与Y轴指标数量不一致',
+
+};
+  
+/**
+* $t('StatisticAnalysis.FittingEquationChart.XXX')
+*/

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

@@ -0,0 +1,16 @@
+
+import { ChartRelevanceEn } from "./ChartRelevance";
+import { CrossVarietyChartEn } from "./CrossVarietyChart";
+import { FittingEquationChartEn } from "./FittingEquationChart";
+import { StatisticFeatureChartEn } from "./statisticFeatureChart";
+
+
+export default {
+  // 统计分析
+  StatisticAnalysis: {
+    ChartRelevance:ChartRelevanceEn,
+    FittingEquationChart:FittingEquationChartEn,
+    StatisticFeatureChart:StatisticFeatureChartEn,
+    CrossVarietyChart:CrossVarietyChartEn
+  },
+};

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

@@ -0,0 +1,15 @@
+import { ChartRelevanceZh } from "./ChartRelevance";
+import { CrossVarietyChartZh } from "./CrossVarietyChart";
+import { FittingEquationChartZh } from "./FittingEquationChart";
+import { StatisticFeatureChartZh } from "./statisticFeatureChart";
+
+
+export default {
+    // 统计分析
+    StatisticAnalysis: {
+      ChartRelevance:ChartRelevanceZh,
+      FittingEquationChart:FittingEquationChartZh,
+      StatisticFeatureChart:StatisticFeatureChartZh,
+      CrossVarietyChart:CrossVarietyChartZh
+    },
+  };

+ 43 - 0
src/lang/modules/StatisticAnalysis/StatisticFeatureChart.js

@@ -0,0 +1,43 @@
+/**
+ * 统计分析-统计特征
+ */
+
+/* 英文 */
+export const StatisticFeatureChartEn = {
+  limit_name: "up and dowm limited",
+  select_edb: "Select index",
+  standard_deviation: "Standard deviation",
+  rolling_period: "Rolling period",
+  percentile: "percentile",
+  time_length: "Length of time",
+  frequency_distribution: "Frequency distribution",
+  time_period: "Time period",
+  frequency_band_number: "Frequency band number",
+  near_month: "Last {num} months",
+  near_year: "Last {num} years",
+  selecr_indicator_pld: "Please select the type of indicator",
+  data_count:'Number of data',
+  data_area:'Data interval',
+};
+
+/* 中文 */
+export const StatisticFeatureChartZh = {
+  limit_name: "上下限",
+  select_edb: "选择指标",
+  standard_deviation: "标准差",
+  rolling_period: "滚动期数",
+  percentile: "百分位",
+  time_length: "时间长度",
+  frequency_distribution: "频率分布",
+  time_period: "时间段",
+  frequency_band_number: "频段数",
+  near_month: "最近{num}月",
+  near_year: "最近{num}年",
+  selecr_indicator_pld: "请选择指标种类",
+  data_count:'数据个数',
+  data_area:'数据区间',
+};
+
+/**
+ * $t('StatisticAnalysis.StatisticFeatureChart.XXX')
+ */

+ 10 - 0
src/lang/modules/SupplyAnalysis/IndexEn.js

@@ -0,0 +1,10 @@
+import { StockPlantEn } from "./StockPlant";
+
+
+
+export default {
+    // 供应分析
+    SupplyAnalysis: {
+        StockPlant:StockPlantEn
+    },
+};

+ 9 - 0
src/lang/modules/SupplyAnalysis/IndexZh.js

@@ -0,0 +1,9 @@
+import { StockPlantZh } from "./StockPlant";
+
+
+export default {
+    // 供应分析
+    SupplyAnalysis: {
+        StockPlant:StockPlantZh
+    },
+};

+ 93 - 0
src/lang/modules/SupplyAnalysis/StockPlant.js

@@ -0,0 +1,93 @@
+/**
+ * 供应分析-装置检修
+ */
+
+/* 英文 */
+export const StockPlantEn = {
+    add_btn:'Add Commodity',
+    only_see:'View the Commodity with Permission ',
+    placeholder01:'Commodity Name/Indicator ID',
+    analysis_btn:'Analysis ',
+    no_data:'No Data',
+    table_col01:'Commodity',
+    table_col02:'Operator',
+    table_col03:'Update Time',
+    edit_commodity_btn:'Edit Commodity',
+    placeholder02:'Please Enter Commodity Name',
+    set_permission:'Set permissions',
+    placeholder03:'Please select a researcher',
+    select_user:'Selected Users',
+    download_excel:'Download Excel',
+    last_updatetime:'Last Updated',
+    year_product_day:'Days of Production/Year',
+    day_unit:'day',
+    computed_btn:'Calculate Days',
+
+    edit_table_col01:'Place',
+    edit_table_col02:'Corporate Name',
+    edit_table_col03:'Equipment/Production Line',
+    edit_table_col04:'Capacity/10,000 tons',
+    edit_table_col05:'Overhaul Date',
+    edit_table_col06:'Resumption Date',
+    edit_table_col07:'Operating Rate Decreased',
+    edit_table_col08:'Production Decreased per Day/ton',
+    edit_table_col09:'Duration',
+    edit_table_col10:'Total Cuts',
+    edit_table_col_tip01:'Default maintenance end date is the resumption of production date',
+    edit_table_col_tip02:'1 indicates shutdown, 0.1 indicates a 10% load reduction',
+    edit_table_btn_add_up:'Add above',
+    edit_table_btn_add_down:'Add below',
+    edit_table_btn_add_other:'Add New Equipment/Production Line',
+    placeholder04:'Please Select Commodity',
+    delist:'Delist',
+    placeholder05:'Please enter the factory',
+    placeholder06:'Please input device/production line',
+    placeholder07:'Please enter the annual production capacity',
+};
+  
+/* 中文 */
+export const StockPlantZh = {
+    add_btn:'添加品种',
+    only_see:'只看可分析',
+    placeholder01:'品种名称/指标ID',
+    analysis_btn:'分析',
+    no_data:'暂无品种',
+    table_col01:'品种',
+    table_col02:'更新人',
+    table_col03:'更新时间',
+    edit_commodity_btn:'编辑品种',
+    placeholder02:'请输入品种',
+    set_permission:'设置权限',
+    placeholder03:'请选择研究员',
+    select_user:'已选用户',
+    download_excel:'下载减产量EXCEL',
+    last_updatetime:'上次更新时间',
+    year_product_day:'年生产天数',
+    day_unit:'天',
+    computed_btn:'计算',
+
+    edit_table_col01:'地点',
+    edit_table_col02:'工厂',
+    edit_table_col03:'装置/产线',
+    edit_table_col04:'年产能(万吨)',
+    edit_table_col05:'检修日期',
+    edit_table_col06:'复产日期',
+    edit_table_col07:'降负系数',
+    edit_table_col08:'日均产量减量(吨)',
+    edit_table_col09:'时长',
+    edit_table_col10:'期间减量(万吨)',
+    edit_table_col_tip01:'默认检修结束日期为复产日期',
+    edit_table_col_tip02:'1表示停产,0.1表示降负10%',
+    edit_table_btn_add_up:'向上添加',
+    edit_table_btn_add_down:'向下添加',
+    edit_table_btn_add_other:'添加其他装置',
+    placeholder04:'请选择品种',
+    delist:'退市',
+    placeholder05:'请输入工厂',
+    placeholder06:'请输入装置/产线',
+    placeholder07:'请输入年产能',
+};
+  
+/**
+* $t('SupplyAnalysis.StockPlant.XXX')
+*/

+ 34 - 0
src/lang/modules/ToolBox/AIQuestion.js

@@ -0,0 +1,34 @@
+/**
+ * 工具箱-AI问答
+ */
+
+/* 英文 */
+export const AIQuestionEn = {
+    title:'Researching AI Q&A Assistant',
+    add_new_window:'New Dialogue Window',
+    new_window:'New Dialogue Window',
+    AI_use_intro:'AI Assistant Instructions',
+    input_placeholder:'Please enter a question, Shift+Enter to change the line.',
+    send_btn:'Send',
+    use_intro_title:'Instructions',
+    use_intro01:'Maximum 500 Q&A per account per day.',
+    use_intro02:'History Q&A default named with the first question in the dialogue window, can be modified.'
+
+};
+  
+/* 中文 */
+export const AIQuestionZh = {
+    title:'研究AI问答小助手',
+    add_new_window:'新建对话窗口',
+    new_window:'新对话窗口',
+    AI_use_intro:'AI助手使用说明',
+    input_placeholder:'请输入提问,Shift+Enter换行',
+    send_btn:'发送',
+    use_intro_title:'使用说明',
+    use_intro01:'每账号每天最高500次问答。',
+    use_intro02:'历史问答默认用该对话窗口内第一个提问命名,可修改。'
+};
+  
+/**
+* $t('ToolBox.AIQuestion.XXX')
+*/

+ 73 - 0
src/lang/modules/ToolBox/CommodityPriceChart.js

@@ -0,0 +1,73 @@
+/**
+ * 工具箱-商品价格曲线
+ */
+
+/* 英文 */
+export const CommodityPriceChartEn = {
+    add_price_line_btn:'Price Curve',
+    add_price_profit_btn:'Profit Curve',
+    select_spot_price:'Select spot price indicators',
+    plate_profit_set:'Plate Profit Settings',
+    select_future:'select futures',
+    please_select_future:'please select futures',
+    chart_name:'Chart Name',
+    chart_classify:'Categories of Charts',
+    please_select_classify:'Please Select Categories',
+    add_date:'Add Date',
+    add_method:'Adding Methods',
+    latest_date:'Latest Date',
+    n_day_before:'N Days Ago',
+    fix_date:'Fixed Date',
+    day_num:'Number of Days',
+    day_num_placeholder:'Please enter number',
+    select_date:'Select Date',
+    add_params_btn:'Add more parameters',
+    formula_label:'Formula',
+    formula_label_placeholder:'Please enter the formula',
+    formula_exp:'Formula Example',
+    fun_support:'Functions Support',
+    plate_profit_name:'Plate Profit',
+    tips_msg01:'Futures not selected yet',
+    tips_msg02:'Chart name cannot be empty',
+    tips_msg03:'Chart category cannot be empty',
+    tips_msg04:'Please set up the trading profit configuration first.',
+    tips_msg05:'Indicator not selected yet',
+    tips_msg06:'Please add a date.',
+};
+  
+/* 中文 */
+export const CommodityPriceChartZh = {
+    add_price_line_btn:'添加价格曲线',
+    add_price_profit_btn:'添加利润曲线',
+    select_spot_price:'选择现货价格指标',
+    plate_profit_set:'盘面利润设置',
+    select_future:'选择期货',
+    please_select_future:'请选择期货',
+    chart_name:'图表名称',
+    chart_classify:'图表分类',
+    please_select_classify:'请选择所属分类',
+    add_date:'添加日期',
+    add_method:'添加方式',
+    latest_date:'最新日期',
+    n_day_before:'N天前',
+    fix_date:'固定日期',
+    day_num:'天数',
+    day_num_placeholder:'请输入数字',
+    select_date:'选择日期',
+    add_params_btn:'添加更多参数',
+    formula_label:'计算公式',
+    formula_label_placeholder:'请输入公式',
+    formula_exp:'公式示例',
+    fun_support:'函数支持',
+    plate_profit_name:'盘面利润',
+    tips_msg01:'暂未选择期货',
+    tips_msg02:'图表名称不能为空',
+    tips_msg03:'图表分类不能为空',
+    tips_msg04:'请先设置盘面利润配置',
+    tips_msg05:'暂未选择指标',
+    tips_msg06:'请添加日期',
+};
+  
+/**
+* $t('ToolBox.CommodityPriceChart.XXX')
+*/

+ 13 - 0
src/lang/modules/ToolBox/IndexEn.js

@@ -0,0 +1,13 @@
+import { AIQuestionEn } from "./AIQuestion";
+import { CommodityPriceChartEn } from "./CommodityPriceChart";
+import { PositionAnalysisEn } from "./PositionAnalysis";
+
+
+export default {
+    // 工具箱
+    ToolBox: {
+        AIQuestion:AIQuestionEn,
+        CommodityPriceChart:CommodityPriceChartEn,
+        PositionAnalysis:PositionAnalysisEn
+    },
+};

+ 13 - 0
src/lang/modules/ToolBox/IndexZh.js

@@ -0,0 +1,13 @@
+import { AIQuestionZh } from "./AIQuestion";
+import { CommodityPriceChartZh } from "./CommodityPriceChart";
+import { PositionAnalysisZh } from "./PositionAnalysis";
+
+
+export default {
+    // 工具箱
+    ToolBox: {
+        AIQuestion:AIQuestionZh,
+        CommodityPriceChart:CommodityPriceChartZh,
+        PositionAnalysis:PositionAnalysisZh
+    },
+};

+ 59 - 0
src/lang/modules/ToolBox/PositionAnalysis.js

@@ -0,0 +1,59 @@
+/**
+ * 工具箱-持仓分析
+ */
+
+/* 英文 */
+export const PositionAnalysisEn = {
+    before_btn:'Previous Contract',
+    next_btn:'Next Contract',
+    position_list_label:'Position List',
+    history_contract:'History Contracts',
+    select_date_placeholder:'please select date',
+    see_before_day:'View the previous day',
+    see_next_day:' View the next day',
+    count_name:'Total',
+    compare_yesterday:'Compare with yesterday',
+    no_data:'no data',
+    variety:'varieties',
+    increase:'Increase',
+    decrease:'Decrease',
+    long_position:'Long Position',
+    short_position:'Short Position',
+    net_long_position:'Net Long Position',
+    net_short_position:'Net Short Position',
+    hold_long_position:'Number of Long Positions Held',
+    hold_short_position:'Number of Short Positions Held',
+    net_long_position_num:'Number of Net Long Position',
+    net_short_position_num:'Number of Net Short Position',
+    held:"Held",
+};
+  
+/* 中文 */
+export const PositionAnalysisZh = {
+    before_btn:'上一个合约',
+    next_btn:'下一个合约',
+    position_list_label:'持仓列表',
+    history_contract:'历史合约',
+    select_date_placeholder:'请选择日期',
+    see_before_day:'查看前一天',
+    see_next_day:'查看后一天',
+    count_name:'总计',
+    compare_yesterday:'较昨日',
+    no_data:'该日期无数据',
+    variety:'品种',
+    increase:'增',
+    decrease:'减',
+    long_position:'多单',
+    short_position:'空单',
+    net_long_position:'净多单',
+    net_short_position:'净空单',
+    hold_long_position:'持多单量',
+    hold_short_position:'持空单量',
+    net_long_position_num:'净多单量',
+    net_short_position_num:'净空单量',
+    held:"持",
+};
+  
+/**
+* $t('ToolBox.PositionAnalysis.XXX')
+*/

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

@@ -0,0 +1,128 @@
+/**
+ * 系统设置-基本配置
+ */
+
+/* 英文 */
+export const BaseConfigEn = {
+    tab01:'General Setting',
+    tab02:'Resource Library',
+    sub_tab01:'Login Setting',
+    sub_tab02:'Research Report Setting',
+    sub_tab03:'PPT Configuration',
+    email_tem:'Email Template',
+    email_tips:'Login System or Retrieve Password or Identity Verification',
+    email_placeholder:'Please enter email title',
+    view_example_text:'View schematic diagram',
+    company_name:'Company Name',
+    company_name_placeholder:'Please Enter Company Name',
+    compay_mark:'Company Watermark',
+    report_chart:'Research Report Charts',
+    report_share:'Research Report Analysis',
+    report_share_tips:"report detail sharing page, the watermark content should be the sharer's username + mobile number (or email address if no phone number is available)",
+    upload_format:'Upload Format: png, jpg',
+    disclaimer:'Disclaimer',
+    disclaimer_placeholder:'Please enter a disclaimer',
+    iFLYTEK_service:'iFLYTEK Service',
+    please_enter:'Please enter',
+    report_approval:'Report Approval',
+    internal_approval:'ETA Internal Approval',
+    third_approval:'Third-party Approval',
+    third_approval_tips:"Chinese Research Report(Intelligent Research Report/Research Report List) connected to third-party approval systems via API interface",
+    report_share_title_zh:'Title of Chinese research report sharing',
+    report_share_title_zh_placeholder:'Please Enter Title of English research report sharing',
+    report_share_title_en:'Title of English research report sharing',
+    report_share_title_en_placeholder:'Please Enter Title of English research report sharing',
+    connect_wx:'Associated Public Account',
+    wx_original_id:'Please Enter Original ID',
+    wx_original_tips:'Note: When filling in associated public account, AppID, AppSecret and original ID must all be provided. ',
+
+    ppt_zh:'Chinese PPT',
+    ppt_en:'English PPT',
+    ppt_type01:'PPT Cover Image',
+    ppt_type02:'PPT Background Image',
+    ppt_type03:'PPT Back Cover Image',
+    ppt_tip01:'Upload Format: png, jpg. Maximum of three images can be uploaded, recommended image ratio: 10:7',
+    ppt_tip02:'Upload Format: png, jpg. Recommended image ratio: 10:7',
+    ppt_tip03:'Upload Format: png, jpg. Recommended image ratio: 10:7',
+
+    resource_placeholder01:'Please enter the image name',
+    resource_placeholder02:'Please select the image type',
+    resource_placeholder03:'Please upload Image',
+    resource_type01:'Header',
+    resource_type02:'Footer',
+    resource_btn01:'Upload Image',
+    resource_btn02:'Rename',
+    resource_btn03:'Deselect/Deselect All',
+    resource_des01:'has been selected',
+    resource_label01:'Image Name',
+    resource_label02:'Image Type',
+    upload_suggest:'Supports formats like jpg, jpeg, png, etc. It is recommended to upload headers of 800*200 and footers of 800*80',
+    resource_del_msg:'Are you sure to delete the selected image?',
+
+    tip_msg01:'Save successful, please check the corresponding page/project later',
+
+};
+  
+/* 中文 */
+export const BaseConfigZh = {
+    tab01:'通用设置',
+    tab02:'资源库',
+    sub_tab01:'登录设置',
+    sub_tab02:'研报设置',
+    sub_tab03:'PPT配置',
+    email_tem:'邮件模板',
+    email_tips:'登陆系统或找回密码或验证身份',
+    email_placeholder:'请输入邮件标题',
+    view_example_text:'查看示意图',
+    company_name:'公司名称',
+    company_name_placeholder:'请输入公司名称',
+    compay_mark:'公司水印',
+    report_chart:'研报图表',
+    report_share:'研报分享',
+    report_share_tips:'研报详情分享页水印,水印内容为分享人用户名称+手机号(无手机号时为邮箱地址)',
+    upload_format:'上传格式:png、jpg',
+    disclaimer:'免责声明',
+    disclaimer_placeholder:'请输入免责声明',
+    iFLYTEK_service:'科大讯飞服务',
+    please_enter:'请输入',
+    report_approval:'研报审批',
+    internal_approval:'ETA内部审批',
+    third_approval:'第三方审批',
+    third_approval_tips:'中文研报(智能研报/研报列表)通过API接口对接第三方审批系统',
+    report_share_title_zh:'中文研报分享抬头',
+    report_share_title_zh_placeholder:'请输入中文研报分享抬头',
+    report_share_title_en:'英文研报分享抬头',
+    report_share_title_en_placeholder:'请输入英文研报分享抬头',
+    connect_wx:'关联公众号',
+    wx_original_id:'请输入原始Id',
+    wx_original_tips:'注:关联公众号填写时,AppID、AppSecret原始ID均需填写。',
+
+    ppt_zh:'中文PPT',
+    ppt_en:'英文PPT',
+    ppt_type01:'PPT封面图',
+    ppt_type02:'PPT背景图',
+    ppt_type03:'PPT封底图',
+    ppt_tip01:'上传格式:png、jpg,最多上传三张,建议图片比例:10:7',
+    ppt_tip02:'上传格式:png、jpg,建议图片比例:10:7',
+    ppt_tip03:'上传格式:png、jpg,建议图片比例:10:7',
+
+    resource_placeholder01:'请输入图片名称',
+    resource_placeholder02:'请选择图片类型',
+    resource_placeholder03:'请上传图片',
+    resource_type01:'版头',
+    resource_type02:'版尾',
+    resource_btn01:'上传图片',
+    resource_btn02:'重命名',
+    resource_btn03:'取消选择',
+    resource_des01:'已选择',
+    resource_label01:'图片名称',
+    resource_label02:'图片类型',
+    upload_suggest:'支持jpg、jpeg、png等格式,建议上传版头800*200,版尾800*80',
+    resource_del_msg:'是否确认删除选中图片?',
+
+    tip_msg01:'保存成功,请稍后到对应页面/项目查看',
+};
+  
+/**
+* $t('SystemManage.BaseConfig.XXX')
+*/

+ 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')
+*/

+ 37 - 0
src/lang/modules/systemManage/DataAuth.js

@@ -0,0 +1,37 @@
+/**
+ * 系统设置-手工数据权限
+ */
+
+/* 英文 */
+export const DataAuthEn = {
+    placehloder_msg01:'User Name',
+    placehloder_msg02:'Please select a parent category',
+    msg01:'Please select a user',
+    msg02:'The category that contains subcategories cannot be deleted',
+    msg03:'Deletion is irreversible. Are you sure you want to proceed?',
+    title:'Manual Indicator Categories',
+    add_category:'Add Category',
+    edit_category:'Edit Category',
+    parent_classify:'Parent Category',
+    classify_name:'Category Name',
+    placehloder_msg03:'First level classification cannot be empty',
+};
+  
+/* 中文 */
+export const DataAuthZh = {
+    placehloder_msg01:'用户名称',
+    placehloder_msg02:'请选择上级分类',
+    msg01:'请选择用户',
+    msg02:'该分类下包含子分类不可删除',
+    msg03:'删除后不可恢复,是否确认删除?',
+    title:'手工指标分类',
+    add_category:'添加分类',
+    edit_category:'编辑分类',
+    parent_classify:'上级分类',
+    classify_name:'分类名称',
+    placehloder_msg03:'一级分类不能为空',
+};
+  
+/**
+* $t('SystemManage.DataAuth.XXX')
+*/

+ 49 - 0
src/lang/modules/systemManage/DataSourceAccount.js

@@ -0,0 +1,49 @@
+/**
+ * 系统设置-数据源终端管理
+ */
+
+/* 英文 */
+export const DataSourceAccountEn = {
+    add_btn:'Add terminal account',
+    edit_btn:'Edit terminal account',
+    table_col01:'Terminal Code',
+    table_col02:'Terminal Name',
+    table_col03:'Folder Path',
+    table_col04:'Terminal Address',
+    table_col05:'Terminal Token',
+    table_col06:'Data Source Type',
+    table_col07:'Status',
+    table_col08:'Indicator Data Volume',
+    table_col09:'Update Time',
+    placeholder01:'请输入终端名称',
+    placeholder02:'请输入文件夹路径',
+    placeholder03:'请输入终端地址',
+    placeholder04:'请输入终端token',
+    placeholder05:'Please select data source type',
+    placeholder06:'请输入指标数据量',
+};
+  
+/* 中文 */
+export const DataSourceAccountZh = {
+    add_btn:'新增终端账号',
+    edit_btn:'编辑终端账号',
+    table_col01:'终端编码',
+    table_col02:'终端名称',
+    table_col03:'文件夹路径',
+    table_col04:'终端地址',
+    table_col05:'终端token',
+    table_col06:'数据源类型',
+    table_col07:'状态',
+    table_col08:'指标数据量',
+    table_col09:'更新时间',
+    placeholder01:'请输入终端名称',
+    placeholder02:'请输入文件夹路径',
+    placeholder03:'请输入终端地址',
+    placeholder04:'请输入终端token',
+    placeholder05:'请选择数据源类型',
+    placeholder06:'请输入指标数据量',
+};
+  
+/**
+* $t('SystemManage.DataSourceAccount.XXX')
+*/

+ 175 - 0
src/lang/modules/systemManage/DepartManage.js

@@ -0,0 +1,175 @@
+/**
+ * 系统设置-部门管理
+ */
+
+/* 英文 */
+export const DepartManageEn = {
+    depart_info_title:"Department Information",
+    depart_create:'Create Department',
+    depart_edit:'Edit Department',
+    depart_name_placeholder:'Please enter the department name',
+    depart:'Department',
+    depart_del_success:'Department Deletion Successful',
+    delete_confirm:'Are you sure you want to delete',
+    group_add:'Add Group',
+    group:'Group',
+    group_name:'Group Name',
+    group_edit:'Edit Group',
+    group_name_placeholder:'Please Enter Group Name',
+    group_del_success:'Group Deletion Successful',
+    group_select:'Select Group',
+    group_select_placeholer:'Please Select Group',
+
+    user_add_btn:'Add User',
+    user_edit_btn:'Edit User',
+    user_login_accout:'Login Account',
+    user_login_pwd:'Login Password',
+    user_depart:'Department',
+    user_email:'Email',
+    user_role:'Assign Role',
+    user_add_placeholder01:'It is recommended to use the email prefix or phone number',
+    user_add_placeholder02:'6-12 characters combining numbers and letters',
+    user_add_placeholder03:'Please enter the user name',
+    user_add_placeholder04:'Please enter the phone number',
+    user_add_placeholder05:'Please select the department/group',
+    user_add_placeholder06:'Please enter the email',
+    user_add_placeholder07:'Please enter the employee ID',
+    user_add_placeholder08:'Please select the research direction',
+    user_add_placeholder09:'Please enter the position',
+
+    use_add_valid_msg01:'It is recommended to use the email prefix or phone number',
+    use_add_valid_msg02:'Please enter a new password',
+    use_add_valid_msg03:'Password must be 8 characters or more, including three of the following: numbers, uppercase letters, lowercase letters, special characters',
+    use_add_valid_msg04:'Name cannot be empty',
+    use_add_valid_msg05:'Either phone number or email must be filled',
+    use_add_valid_msg06:'Please enter the correct phone number format',
+    use_add_valid_msg07:'Please enter the correct email format',
+    use_add_valid_msg08:'Department/group cannot be empty',
+    use_add_valid_msg09:'Please enter four digits',
+    use_add_valid_msg10:'Role cannot be empty',
+
+    user_search_placeholder:'Name/Account/Phone Number Search',
+    user_table_name:'Name',
+    user_table_account:'Account',
+    user_table_mobile:'Phone Number',
+    user_table_role:'Role',
+    user_table_depart:'Department/Group',
+    user_table_status:'Status',
+    user_table_reset_pwd:'Reset Password',
+    user_table_move_group:'Move to Group',
+    user_table_status_ban:'Disable',
+    user_table_status_open:'Enable',
+    user_table_employee_id:'Employee ID',
+    user_table_position:'Position',
+    user_table_direct:'Research Direction',
+    user_table_address:'Work Location',
+    user_table_manage_auth:'Manage Permissions',
+    user_table_login_text:'Login account/Password',
+    use_tag01:'Super Admin',
+    use_tag02:'Admin',
+    use_tag03:'department manager',
+    use_tag04:'Team Leader',
+    use_tag05:'Supervisor',
+
+    look_auth:'View permissions',
+    no_auth:'No permission',
+    auth_text:'permission',
+
+    new_pwd:'New Password',
+    confirm_pwd:'Confirm Password',
+
+    del_msg:'Are you sure you want to delete user',
+
+    user_add_placeholder10:'Please select the province',
+    user_add_placeholder11:'Please select the city'
+};
+  
+/* 中文 */
+export const DepartManageZh = {
+    depart_info_title:"部门信息 ",
+    depart_create:'新建部门',
+    depart_edit:'编辑部门',
+    depart_name_placeholder:'请填写部门名称',
+    depart:'部门',
+    depart_del_success:'删除部门成功',
+    delete_confirm:'确定删除吗',
+    group_add:'添加分组',
+    group:'分组',
+    group_name:'分组名',
+    group_edit:'编辑分组',
+    group_name_placeholder:'请填写分组名称',
+    group_del_success:'删除分组成功',
+    group_select:'选择分组',
+    group_select_placeholer:'请选择部门分组',
+
+    user_add_btn:'添加用户',
+    user_edit_btn:'编辑用户',
+    user_login_accout:'登录账号',
+    user_login_pwd:'登录密码',
+    user_depart:'所属部门',
+    user_email:'邮箱',
+    user_role:'分配角色',
+    user_add_placeholder01:'建议使用邮箱前缀或者手机号码',
+    user_add_placeholder02:'6-12位数字与字母的组合',
+    user_add_placeholder03:'请输入用户名称',
+    user_add_placeholder04:'请输入手机号码',
+    user_add_placeholder05:'请选择部门分组',
+    user_add_placeholder06:'请输入邮箱',
+    user_add_placeholder07:'请输入工号',
+    user_add_placeholder08:'请选择研究方向',
+    user_add_placeholder09:'请输入职务',
+
+    use_add_valid_msg01:'登录账号不能为空',
+    use_add_valid_msg02:'请输入新密码',
+    use_add_valid_msg03:'密码要求8位及以上,包含数字、大写字母、小写字母、特殊字符中的三个类型',
+    use_add_valid_msg04:'姓名不能为空',
+    use_add_valid_msg05:'手机号码和邮箱至少填一个',
+    use_add_valid_msg06:'请输入正确的手机号格式',
+    use_add_valid_msg07:'请输入正确的邮箱格式',
+    use_add_valid_msg08:'部门分组不能为空',
+    use_add_valid_msg09:'请输入四位数字',
+    use_add_valid_msg10:'角色不能为空',
+
+
+
+    user_search_placeholder:'姓名/账号/手机号搜索',
+    user_table_name:'姓名',
+    user_table_account:'账号',
+    user_table_mobile:'手机号',
+    user_table_role:'角色',
+    user_table_depart:'部门/分组',
+    user_table_status:'状态',
+    user_table_reset_pwd:'重置密码',
+    user_table_move_group:'移动分组',
+    user_table_status_ban:'禁用',
+    user_table_status_open:'启用',
+    user_table_employee_id:'工号',
+    user_table_position:'职务',
+    user_table_direct:'研究方向',
+    user_table_address:'工作地点',
+    user_table_manage_auth:'管理权限',
+    user_table_login_text:'登录账号/密码',
+
+    use_tag01:'超管',
+    use_tag02:'管理员',
+    use_tag03:'部门经理',
+    use_tag04:'组长',
+    use_tag05:'主管',
+
+    look_auth:'查看权限',
+    no_auth:'暂无权限',
+    auth_text:'权限',
+
+    new_pwd:'新密码',
+    confirm_pwd:'确认新密码',
+
+    del_msg:'是否确认删除用户',
+
+    user_add_placeholder10:'请选择省',
+    user_add_placeholder11:'请选择市'
+
+};
+  
+/**
+* $t('SystemManage.DepartManage.XXX')
+*/

+ 33 - 0
src/lang/modules/systemManage/EnAuthSet.js

@@ -0,0 +1,33 @@
+/**
+ * 系统设置-英文权限配置
+ */
+
+/* 英文 */
+export const EnAuthSetEn = {
+    title:'English Permission List',
+    tips:'Deleting only removes English permissions for this user',
+    enable:'Disabled',
+    opened:'Enabled',
+    opt_text01:'English Customer List Administrator',
+    opt_text02:'English Research Report Administrator',
+    opt_text03:'English PPT Administrator',
+    opt_text04:'Daily News Administrator',
+    opt_text05:'海外客户管理员'
+};
+  
+/* 中文 */
+export const EnAuthSetZh = {
+    title:'英文权限列表',
+    tips:'删除操作仅删除该用户的英文权限',
+    enable:'已禁用',
+    opened:'已启用',
+    opt_text01:'英文客户列表管理员',
+    opt_text02:'英文研报管理员',
+    opt_text03:'英文PPT管理员',
+    opt_text04:'每日资讯管理员',
+    opt_text05:'海外客户管理员'
+};
+  
+/**
+* $t('SystemManage.EnAuthSet.XXX')
+*/

+ 82 - 0
src/lang/modules/systemManage/OperateAuth.js

@@ -0,0 +1,82 @@
+/**
+ * 系统设置-数据操作权限
+ */
+
+/* 英文 */
+export const OperateAuthEn = {
+    tab01:'Manual Data Indicators',
+    tab02:'My Steel Chemical Database',
+    tab03:'ETA Indicator Library',
+    tab04:'ETA Predictive Indicators',
+    tab05:'Image Library',
+
+    placeholder01:'Please Enter Chart Name',
+    placeholder02:'Enter Indicator ID/Indicator Name',
+    placeholder03:'Select Category',
+    placeholder04:'Select User',
+
+    btn_text01:'Batch Edit',
+    btn_text02:'Permission Settings',
+
+    table_col_name01:'Chart Name',
+    table_col_name02:'Chart category',
+    table_col_name03:'Creator',
+    table_col_name04:'Indicator ID',
+    table_col_name05:'Indicator Name',
+
+    edit_title01:'Edit Permissions',
+    edit_title02:'Batch Edit Permissions',
+    original_creator:'Original Creator',
+    new_creator:'New Creator',
+
+    msg01:'Please select at least one',
+
+    permission_title01:'Permission Settings',
+    permission_title02:'批量权限设置',
+    invisible_users:'Invisible Users',
+    permission_confirm_msg:"Are you sure you want to delete the user's invisible permission?",
+    set_success:'Setting Successful',
+    placeholder05:'New creator cannot be empty',
+};
+  
+/* 中文 */
+export const OperateAuthZh = {
+    tab01:'手工数据指标',
+    tab02:'钢联化工数据库',
+    tab03:'ETA指标库',
+    tab04:'ETA预测指标',
+    tab05:'图库',
+
+    placeholder01:'请输入图表名称',
+    placeholder02:'请输入指标Id/指标名称',
+    placeholder03:'请选择分类',
+    placeholder04:'请选择用户',
+
+    btn_text01:'批量编辑',
+    btn_text02:'权限设置',
+
+    table_col_name01:'图表名称',
+    table_col_name02:'图分类',
+    table_col_name03:'创建人',
+    table_col_name04:'指标ID',
+    table_col_name05:'指标名称',
+
+    edit_title01:'编辑权限',
+    edit_title02:'批量编辑权限',
+    original_creator:'原创建人',
+    new_creator:'新创建人',
+
+    msg01:'请至少勾选一个',
+
+    permission_title01:'权限设置',
+    permission_title02:'批量权限设置',
+    invisible_users:'不可见用户',
+    permission_confirm_msg:'是否确认删除该用户的不可见权限?',
+    set_success:'配置成功',
+    placeholder05:'新创建人不能为空',
+
+};
+  
+/**
+* $t('SystemManage.OperateAuth.XXX')
+*/

+ 35 - 0
src/lang/modules/systemManage/OutLinkConfig.js

@@ -0,0 +1,35 @@
+/**
+ * 系统设置-外部链接配置
+ */
+
+/* 英文 */
+export const OutLinkConfigEn = {
+    menu_add_btn:'Add menu',
+    menu_edit_btn:'Edit menu',
+    tale_col01:'Menu Name',
+    tale_col02:'Page Link',
+    tale_col03:'Creation Time',
+    placeholder01:'Enter menu name',
+    placeholder02:'Enter URL',
+    del_success_msg:'Delete menu successfully',
+    tips_msg01:'Menu name cannot be empty',
+    tips_msg02:'URL cannot be empty',
+};
+  
+/* 中文 */
+export const OutLinkConfigZh = {
+    menu_add_btn:'添加菜单',
+    menu_edit_btn:'编辑菜单',
+    tale_col01:'菜单名称',
+    tale_col02:'页面链接',
+    tale_col03:'创建时间',
+    placeholder01:'请输入菜单名称',
+    placeholder02:'请输入URL',
+    del_success_msg:'删除菜单成功',
+    tips_msg01:'菜单名称不能为空',
+    tips_msg02:'URL不能为空',
+};
+  
+/**
+* $t('SystemManage.OutLinkConfig.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')
+*/

+ 43 - 0
src/lang/modules/systemManage/RoleManage.js

@@ -0,0 +1,43 @@
+/**
+ * 系统设置-角色管理
+ */
+
+/* 英文 */
+export const RoleManageEn = {
+    role_add_btn:'Add Role',
+    role_edit_btn:'Edit Role',
+    role_name:'Role',
+    serial_num:'Serial Number',
+    role_type:'Role Type',
+    set_permission:'Set Permissions',
+    search_placeholder:'Role Search',
+    no_role_data:'No Roles Available',
+    input_role_placeholder:'Please Input Role Name',
+    select_role_placeholder:'Please Select Role Type',
+    delete_role_msg:'Are you sure you want to delete this role?',
+    permission_set:'Permission Settings',
+    set_permission_msg01:'Please select at least one permission',
+    set_permission_success:'Permission Settings Successful'
+};
+  
+/* 中文 */
+export const RoleManageZh = {
+    role_add_btn:'添加角色',
+    role_edit_btn:'编辑角色',
+    role_name:'角色',
+    serial_num:'序号',
+    role_type:'角色类型',
+    set_permission:'设置权限 ',
+    search_placeholder:'Role Search',
+    no_role_data:'暂无角色',
+    input_role_placeholder:'请填写角色名称',
+    select_role_placeholder:'选择角色类型',
+    delete_role_msg:'是否确认删除该角色?',
+    permission_set:'权限设置',
+    set_permission_msg01:'请至少选择一个权限 ',
+    set_permission_success:'权限设置成功'
+};
+  
+/**
+* $t('SystemManage.RoleManage.XXX')
+*/

+ 27 - 0
src/lang/modules/systemManage/indexEn.js

@@ -0,0 +1,27 @@
+import { DepartManageEn } from "./DepartManage";
+import { RoleManageEn } from "./RoleManage";
+import { OperateAuthEn } from "./OperateAuth";
+import {DataAuthEn} from './DataAuth'
+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 {
+  // 系统设置
+  SystemManage: {
+    DepartManage: DepartManageEn,
+    RoleManage: RoleManageEn,
+    OperateAuth:OperateAuthEn,
+    DataAuth:DataAuthEn,
+    EnAuthSet:EnAuthSetEn,
+    BaseConfig:BaseConfigEn,
+    OutLinkConfig:OutLinkConfigEn,
+    DataSourceAccount:DataSourceAccountEn,
+    ChartSet:ChartSetEn,
+    ReportApprove:ReportApproveEn
+  },
+};
+

+ 26 - 0
src/lang/modules/systemManage/indexZh.js

@@ -0,0 +1,26 @@
+import { DepartManageZh } from "./DepartManage";
+import { RoleManageZh } from "./RoleManage";
+import { OperateAuthZh } from "./OperateAuth";
+import {DataAuthZh} from './DataAuth'
+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 {
+  // 系统设置
+  SystemManage: {
+    DepartManage: DepartManageZh,
+    RoleManage: RoleManageZh,
+    OperateAuth:OperateAuthZh,
+    DataAuth:DataAuthZh,
+    EnAuthSet:EnAuthSetZh,
+    BaseConfig:BaseConfigZh,
+    OutLinkConfig:OutLinkConfigZh,
+    DataSourceAccount:DataSourceAccountZh,
+    ChartSet:ChartSetZh,
+    ReportApprove:ReportApproveZh
+  },
+};

+ 27 - 0
src/lang/zh.js

@@ -0,0 +1,27 @@
+/*
+ ** 中文区
+ * @param {为了方便区分,页面模块以大驼峰命名,具体要翻译的key变量用小写字母加_命名} */
+import { transformLanguageData } from "./langUtils";
+import commonLang from "./commonLang";
+
+let allZh = {};
+const importAllLang = (zh) => {
+  zh.keys().forEach((key) => {
+    allZh={...allZh,...zh(key).default}
+  });
+};
+
+importAllLang(require.context("./modules", true, /\Zh.js$/));
+
+export default {
+  ...allZh,
+  // 公共模块
+  Dialog: transformLanguageData(commonLang.Dialog, "zh"),
+  Confirm: transformLanguageData(commonLang.Confirm, "zh"),
+  Table: transformLanguageData(commonLang.Table, "zh"),
+  MsgPrompt: transformLanguageData(commonLang.MsgPrompt, "zh"),
+  Common:transformLanguageData(commonLang.Common,'zh'),
+  Edb: transformLanguageData(commonLang.Edb, "zh"),
+  Chart: transformLanguageData(commonLang.Chart, "zh"),
+  ETable: transformLanguageData(commonLang.ETable, "zh"),
+};

+ 30 - 1
src/main.js

@@ -13,12 +13,39 @@ import "@/utils/option-scroll.js";
 import "@/utils/buttonPermission.js";
 import { dataBaseInterface } from '@/api/api.js';
 import { mixins } from "@/mixins";
-Vue.mixin(mixins);
+import VueI18n from 'vue-i18n';
+import messagesLocal from './lang/index';
+import langEN from 'element-ui/lib/locale/lang/en'
+import langZH from 'element-ui/lib/locale/lang/zh-CN'
+import locale from 'element-ui/lib/locale'
 
+Vue.mixin(mixins);
+Vue.use(VueI18n);
+const i18n = new VueI18n({
+  locale: localStorage.getItem('i18n')||'zh', // 默认语言
+  messages:{
+    zh:{
+      ...langZH,
+      ...messagesLocal.zh,
+    },
+    en:{
+      ...langEN,
+      ...messagesLocal.en
+    }
+  },
+  // 隐藏警告
+  silentTranslationWarn: true
+});
 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))
+
 import{endCalc,optionTimeCalc,init}from'@/utils/TimeOnPage.js';
 
 
@@ -35,6 +62,7 @@ Vue.prototype.toHistoryPage =  async(EdbInfoId,from=[])=>{
     })
     pathArr.push({
         name:'指标溯源',
+        name_en:'Indicator Traceability',
         path:'/edbHistory'
     })
     sessionStorage.setItem('edbHistoryPath',JSON.stringify(pathArr))
@@ -235,6 +263,7 @@ Vue.config.devtools = true;
 new Vue({
   router,
   store,
+  i18n,
   render: (h) => h(App),
 }).$mount("#app");
 

+ 18 - 17
src/utils/defaultOptions.js

@@ -1,3 +1,4 @@
+import bus from "@/api/bus";
 export const defaultOpts = {
 	//图表配置
 	chart: {
@@ -118,19 +119,19 @@ export const defaultOpts = {
 /* 图表分类弹窗校验 */
 export const formRules = {
 	level_1:[
-		{ required: true, message: '分类名称不能为空', trigger: 'blur' },
+		{ required: true, message: /* '分类名称不能为空' */bus.$i18nt.t('Chart.Vailds.classify_msg'), trigger: 'blur' },
 	],
 	level_2:[
-		{ required: true, message: '分类名称不能为空', trigger: 'blur' },
+		{ required: true, message: /* '分类名称不能为空' */bus.$i18nt.t('Chart.Vailds.classify_msg'), trigger: 'blur' },
 	],
 	level_3:[
-		{ required: true, message: '分类名称不能为空', trigger: 'blur' },
+		{ required: true, message: /* '分类名称不能为空' */bus.$i18nt.t('Chart.Vailds.classify_msg'), trigger: 'blur' },
 	],
 	level_4:[
-		{ required: true, message: '图表名称不能为空', trigger: 'blur' },
+		{ required: true, message: /* '图表名称不能为空' */bus.$i18nt.t('Chart.Vailds.name_msg'), trigger: 'blur' },
 	],
 	level_menu:[
-		{ required: true, message: '所属分类不能为空', trigger: 'blur' },
+		{ required: true, message: /* '图表分类不能为空' */bus.$i18nt.t('Chart.Vailds.classify_msg'), trigger: 'blur' },
 	],
 }
 /* 添加图表表单校验 */
@@ -219,27 +220,27 @@ export const copyOtherOptions = {
 /* 图表年份筛选框 */
 export const yearSelector = [
 	{
-		name: '15年至今',
+		name: bus.$i18nt?bus.$i18nt.t('Chart.since_onefive'):'15年至今',//'15年至今'
 		value: 3,
 	},
-	// {
-	// 	name: '18年至今',
-	// 	value: 7,
-	// },
-	// {
-	// 	name: '19年至今',
-	// 	value: 8,
-	// },
+	// // {
+	// // 	name: '18年至今',
+	// // 	value: 7,
+	// // },
+	// // {
+	// // 	name: '19年至今',
+	// // 	value: 8,
+	// // },
 	{
-		name: '20年至今',
+		name: bus.$i18nt?bus.$i18nt.t('Chart.since_twozero'):'20年至今',//'20年至今'
 		value: 9,
 	},
 	{
-		name: '21年至今',
+		name: bus.$i18nt?bus.$i18nt.t('Chart.since_twoone'):'21年至今',//'21年至今'
 		value: 4,
 	},
 	{
-		name: '22年至今',
+		name: bus.$i18nt?bus.$i18nt.t('Chart.since_twotwo'):'22年至今',//'22年至今'
 		value: 11,
 	},
 ]

+ 3 - 3
src/utils/svgToblob.js

@@ -22,15 +22,15 @@
           const data = [new ClipboardItem({ [blob.type]: blob })];
           await navigator.clipboard.write(data).then(
             () => {
-              bus.$message.success('复制成功!')
+              bus.$message.success(/* '复制成功!' */bus.$i18nt.t('MsgPrompt.copy_success_msg'))
             },
             () => {
-              bus.$message.warning('浏览器暂不支持')
+              bus.$message.warning(/* '浏览器暂不支持' */bus.$i18nt.t('MsgPrompt.browser_not_support'))
             }
           );
         })
       }else {
-        bus.$message.warning('当前协议暂不支持,仅支持https协议')
+        bus.$message.warning(/* '当前协议暂不支持,仅支持https协议' */ bus.$i18nt.t('MsgPrompt.http_not_support'))
       }
     }	
  

+ 67 - 88
src/views/Home.vue

@@ -7,7 +7,7 @@
           <img
             class="logo"
             v-if="!isCollapse"
-            :src="$setting.g_logo"
+            :src="logoLarge"
           />
           <!-- 折叠侧边栏logo尺寸 -->
           <img
@@ -67,7 +67,7 @@
                         font-size: 15px;
                         margin-left: 20px;
                       "
-                      >{{ item.name }}</span
+                      >{{ $i18nt.locale==='zh'?item.name:item.name_en }}</span
                     >
                   </a>
                 </el-menu-item>
@@ -90,7 +90,7 @@
                         font-size: 15px;
                         margin-left: 20px;
                       "
-                      >{{ item.name }}</span
+                      >{{ $i18nt.locale==='zh'?item.name:item.name_en }}</span
                     >
                   </template>
                   <el-menu-item
@@ -108,7 +108,7 @@
                       @click="handleClickSubMenuItem(child,$event)"
                     >
                       <svg t="1689672247666" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7676" width="30" height="30"><path d="M640 499.2v25.6a21.333333 21.333333 0 0 1-21.333333 21.333333h-213.333334a21.333333 21.333333 0 0 1-21.333333-21.333333v-25.6a21.333333 21.333333 0 0 1 21.333333-21.333333h213.333334a21.333333 21.333333 0 0 1 21.333333 21.333333z"  p-id="7677" :fill="child.path === activePath ? $setting.theme_color : '#666'"></path></svg>
-                      <span style="margin-left:15px;">{{ child.name }}</span>
+                      <span style="margin-left:15px;">{{ $i18nt.locale==='zh'?child.name:child.name_en }}</span>
                     </a>
                   </el-menu-item>
                 </el-submenu>
@@ -132,72 +132,47 @@
               <!-- 面包屑 -->
               <el-breadcrumb separator="/" class="breadcrumb-inner">
                 <template v-if="$route.path!=='/edbHistory'">
-                    <el-breadcrumb-item
-                  v-for="item in $route.matched"
-                  :key="item.path"
-                >
-                  <span
-                    v-if="item.meta.pathFrom"
-                    @click.stop="handleClickBread(item)"
-                    :style="`cursor: pointer; color: ${$setting.theme_color}`"
+                  <el-breadcrumb-item
+                    v-for="item in $route.matched"
+                    :key="item.path"
                   >
-                    <template v-if="item.meta.pathFrom == 'pickList'">
-                      {{ RoleType == "ficc" ? "权益客户" : "ficc客户" }}
-                    </template>
-                    <template
-                      v-if="item.meta.pathFrom == '/regionCustomerDetail'"
+                    <span
+                      v-if="item.meta.pathFrom"
+                      @click.stop="handleClickBread(item)"
+                      :style="`cursor: pointer; color: ${$setting.theme_color}`"
                     >
-                      {{
-                        $route.query.title
-                          ? $route.query.title.split("/")[1] || ""
-                          : ""
-                      }}客户列表
-                    </template>
-                    <template v-else>
                       {{ item.meta.pathName }}
-                    </template>
-                  </span>
-                  <span
-                    v-if="item.meta.pathFrom"
-                    style="
-                      margin: 0 9px;
-                      font-weight: 700;
-                      color: #c0c4cc;
-                      fontsize: 16px;
-                    "
-                    >/</span
-                  >
-                  <span
-                    v-if="item.parent"
-                    :style="`cursor: pointer; color: ${$setting.theme_color}`"
-                    @click.stop="routeClick(item)"
-                  >
-                    <template v-if="item.path == '/pickList'">
-                      {{ RoleType == "ficc" ? "权益客户" : "ficc客户" }}
-                    </template>
-                    <template v-if="item.path == '/regionCustomerDetail'">
-                      {{
-                        $route.query.title
-                          ? $route.query.title.split("/")[1] || ""
-                          : ""
-                      }}客户列表
-                    </template>
-                    <template v-if="$route.path==='/positionAnalysisDetail'">
-                      {{breadSelfName||'持仓详情'}}
-                    </template>
-                    <template v-else>
-                      {{ item.name }}
-                    </template>
-                  </span>
-                  <span v-else>{{ item.name }}</span>
-                </el-breadcrumb-item>
+                    </span>
+                    <span
+                      v-if="item.meta.pathFrom"
+                      style="
+                        margin: 0 9px;
+                        font-weight: 700;
+                        color: #c0c4cc;
+                        font-size: 16px;
+                      "
+                    >/</span>
+                    <span
+                      v-if="item.parent"
+                      :style="`cursor: pointer; color: ${$setting.theme_color}`"
+                      @click.stop="routeClick(item)"
+                    >
+                      <template v-if="$route.path==='/positionAnalysisDetail'">
+                        {{breadSelfName||'持仓详情'}}
+                      </template>
+                      <template v-else>
+                        {{ item.name }}
+                      </template>
+                    </span>
+                    <span v-else>{{ item.name }}</span>
+                  </el-breadcrumb-item>
                 </template>
                 <template v-else>
                     <el-breadcrumb-item v-for="(item,index) in edbHistoryPath" :key="item.path">
                         <span v-if="index===0">{{item.name}}</span>
                         <span v-else>
                             <span @click.stop="$router.push(item.path)" :style="`cursor: pointer; color: ${$setting.theme_color}`">
-                                {{item.name}}
+                                {{$i18nt.locale==='zh'?item.name:item.name_en}}
                             </span>
                         </span>
                     </el-breadcrumb-item>
@@ -228,31 +203,22 @@
                   {{item.name}}
                 </el-button>
 
-                <!-- <el-tooltip effect="dark" content="帮助文档" placement="bottom">
-                  <div class="icon-box-item" v-if="isShowRole" @click="toOperation('fingerpost')">
-                    <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" style="color:#333">
-                      <path d="M9.24255 14.5C9.24255 14.0858 9.57834 13.75 9.99255 13.75C10.4068 13.75 10.7426 14.0858 10.7426 14.5C10.7426 14.9142 10.4068 15.25 9.99255 15.25C9.57834 15.25 9.24255 14.9142 9.24255 14.5Z" fill="currentColor"/>
-                      <path d="M9.99261 5.00763C8.32056 5.00763 6.96136 6.36682 6.96136 8.03888H8.21136C8.21136 7.05718 9.01092 6.25763 9.99261 6.25763C10.9743 6.25763 11.7739 7.05718 11.7739 8.03888C11.7739 8.71106 11.2183 9.3851 10.4931 9.67971L10.4899 9.68101C9.82793 9.95419 9.36767 10.6052 9.36767 11.3656V12.5H10.6177V11.3656C10.6177 11.1228 10.7618 10.9216 10.9655 10.837C11.9996 10.4161 13.0239 9.37337 13.0239 8.03888C13.0239 6.36682 11.6647 5.00763 9.99261 5.00763Z" fill="currentColor"/>
-                      <path d="M18.7427 10C18.7427 5.16751 14.8252 1.25 9.99268 1.25C5.16019 1.25 1.24268 5.16751 1.24268 10C1.24267 14.8325 5.16018 18.75 9.99267 18.75C14.8252 18.75 18.7427 14.8325 18.7427 10ZM17.4927 10C17.4927 14.1421 14.1348 17.5 9.99267 17.5C5.85054 17.5 2.49267 14.1421 2.49268 10C2.49268 5.85786 5.85054 2.5 9.99268 2.5C14.1348 2.5 17.4927 5.85787 17.4927 10Z" fill="currentColor"/>
-                    </svg>
-                  </div>
-                </el-tooltip> -->
-                <el-dropdown trigger="click" style="width:130px;" v-if="isUpdateLogShow||isHelpDocShow">
+                <el-dropdown trigger="click" style="width:140px;" v-if="isUpdateLogShow||isHelpDocShow">
                   <span class="el-dropdown-link userinfo-inner help-center-inner">
                     <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" style="color:#333">
                       <path d="M9.24255 14.5C9.24255 14.0858 9.57834 13.75 9.99255 13.75C10.4068 13.75 10.7426 14.0858 10.7426 14.5C10.7426 14.9142 10.4068 15.25 9.99255 15.25C9.57834 15.25 9.24255 14.9142 9.24255 14.5Z" fill="currentColor"/>
                       <path d="M9.99261 5.00763C8.32056 5.00763 6.96136 6.36682 6.96136 8.03888H8.21136C8.21136 7.05718 9.01092 6.25763 9.99261 6.25763C10.9743 6.25763 11.7739 7.05718 11.7739 8.03888C11.7739 8.71106 11.2183 9.3851 10.4931 9.67971L10.4899 9.68101C9.82793 9.95419 9.36767 10.6052 9.36767 11.3656V12.5H10.6177V11.3656C10.6177 11.1228 10.7618 10.9216 10.9655 10.837C11.9996 10.4161 13.0239 9.37337 13.0239 8.03888C13.0239 6.36682 11.6647 5.00763 9.99261 5.00763Z" fill="currentColor"/>
                       <path d="M18.7427 10C18.7427 5.16751 14.8252 1.25 9.99268 1.25C5.16019 1.25 1.24268 5.16751 1.24268 10C1.24267 14.8325 5.16018 18.75 9.99267 18.75C14.8252 18.75 18.7427 14.8325 18.7427 10ZM17.4927 10C17.4927 14.1421 14.1348 17.5 9.99267 17.5C5.85054 17.5 2.49267 14.1421 2.49268 10C2.49268 5.85786 5.85054 2.5 9.99268 2.5C14.1348 2.5 17.4927 5.85787 17.4927 10Z" fill="currentColor"/>
                     </svg>
-                    <span style="line-height: 20px;margin-left: 4px;">帮助中心</span>
+                    <span style="line-height: 20px;margin-left: 4px;"><!-- 帮助中心 -->{{ $t('MainPage.help_center') }}</span>
                     <i class="el-icon-arrow-down el-icon--right" />
                   </span>
                   <el-dropdown-menu slot="dropdown">
                     <el-dropdown-item divided @click.native="toDoc" v-if="isUpdateLogShow"
-                      >更新日志</el-dropdown-item
+                      ><!-- 更新日志 -->{{ $t('MainPage.tab_help_update') }}</el-dropdown-item
                     >
                     <el-dropdown-item divided @click.native="toOperation" v-if="isHelpDocShow"
-                      >帮助文档</el-dropdown-item
+                      ><!-- 帮助文档 -->{{ $t('MainPage.tab_help_docs') }}</el-dropdown-item
                     >
                   </el-dropdown-menu>
                 </el-dropdown>
@@ -260,6 +226,7 @@
                   <img src="~@/assets/img/questionnaire.png" v-if="isQuestionShow" @click="showQuestionDia=true"
                 style="width: 84px;height: 24; cursor: pointer;" />
                 </div>
+                <div class="lang-content" @click="langChangeHandler">{{$i18n.locale == 'zh'?'切换英文版':'切换中文版'}}</div>
               </div>
                <!-- 消息通知 -->
               <notification-msg ref="notification"/>
@@ -271,10 +238,10 @@
                 </span>
                 <el-dropdown-menu slot="dropdown">
                   <el-dropdown-item divided @click.native="resetpwd"
-                    >修改密码</el-dropdown-item
+                    ><!-- 修改密码 -->{{ $t('MainPage.tab_reset_pwd') }}</el-dropdown-item
                   >
                   <el-dropdown-item divided @click.native="logout"
-                    >退出登录</el-dropdown-item
+                    ><!-- 退出登录 -->{{ $t('MainPage.tab_log_out') }}</el-dropdown-item
                   >
                   <!-- <el-dropdown-item divided @click.native="toDoc"
                     >更新日志</el-dropdown-item
@@ -331,7 +298,6 @@ import EventBus from "@/api/bus.js";
 
 import {recordActiveLoginFun,loginEndCalc} from "@/utils/TimeOnPage.js"
 import NotificationMsg from "../components/notificationMsg.vue";
-
 export default {
   components: {
     PwdDlg,
@@ -381,14 +347,7 @@ export default {
     isHaveAside() {
       return this.$route.path !== "/mychartdetail";
     },
-    /* wrapper style */
-    dynamicContStyle() {
-      if (this.isHaveAside) {
-        return this.isCollapse ? "left:70px" : "left:200px";
-      } else {
-        return "left:0;padding-top:0;height:calc(100vh - 68px)";
-      }
-    },
+
     //帮助文档是否展示
     isHelpDocShow(){
         return this.permissionBtn.checkPermissionBtn(
@@ -404,7 +363,11 @@ export default {
 		// 是否是eta试用
     isTrail(){
 			return this.$store.state.hasTrialUserPermisson
-		}
+		},
+
+    logoLarge() {
+      return this.$i18n.locale == 'en' ? require('@/assets/img/en/logo.png') : this.$setting.g_logo
+    }
   },
   data() {
     return {
@@ -832,7 +795,7 @@ export default {
     logout() {
       //退出登录
       var that = this;
-      this.$confirm("确认退出吗?", "提示", {
+      this.$confirm(/* "确认退出吗?" */this.$t('MsgPrompt.confirm_logout_msg'), this.$t('Dialog.warn_tit'), {
         type: "warning",
       })
         .then(() => {
@@ -912,7 +875,12 @@ export default {
       if(res.Ret !== 200) return
       
       this.$store.commit('SET_DYNAMIC_LINK',res.Data)
-    }
+    },
+    // 中英文的切换
+    langChangeHandler(){
+       this.$i18n.locale =  this.$i18n.locale == 'zh' ? 'en' : 'zh'
+       localStorage.setItem('i18n',this.$i18n.locale)
+    },
   },
 };
 </script>
@@ -1220,6 +1188,17 @@ export default {
       display: flex;
       align-items: center;
     }
+    .lang-content {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      width: 100px;
+      height: 40px;
+      border-radius: 4px;
+      color: #0052D9;
+      background-color:#ECF2FE;
+      cursor: pointer;
+    }
     .safariStyle {
       border-right: none;
       margin-left: -1px;

+ 108 - 98
src/views/Login.vue

@@ -64,39 +64,32 @@
 					>
 				</el-form-item>
 			</el-form>  -->
+
+            <el-radio-group v-model="lang" @input="changeLang" class="lang-wrapper">
+                <el-radio-button label="zh">中文版</el-radio-button>
+                <el-radio-button label="en">英文版</el-radio-button>
+            </el-radio-group>
+
 			<div class="login-box" id="login-container" v-if="activeModel!=='forgetPassModel'">
                 <div class="fixed-login-cont">
                     <span class="login-title">{{ loginTitle }}</span>
-                    <span class="login-sub-title">ETA — 让投研领先市场半步</span>
+                    <span class="login-sub-title">ETA — {{ $t('LoginPage.login_sub_tit') }}<!-- 让投研领先市场半步 --></span>
                     <el-tabs v-model="activeModel" >
-                        <!-- <el-tab-pane label="账号登录" name="ordinaryModel">
-                            <OrdinaryModel ref="ordinaryModel"
-                                :loginCheck="loginCheck"
-                                :accountCheck="accountCheck"
-                                @clearnHint="clearnHint"
-                                @changeModel="changeModel('forgetPassModel')"
-                            />
-                        </el-tab-pane>
-                        <el-tab-pane label="手机号登录" name="mobileModel">
-                            <MobileModel ref="mobileModel"
-                                :areaCode="areaCode"
-                            />
-                        </el-tab-pane> -->
 
                         <OrdinaryModel ref="ordinaryModel"
                             :loginCheck="loginCheck"
                             :accountCheck="accountCheck"
                             @clearnHint="clearnHint"
                             @changeModel="changeModel('forgetPassModel')"
-                            v-show="activeModel=='ordinaryModel'"
+                            v-if="activeModel=='ordinaryModel'"
                         />
 
                         <MobileModel ref="mobileModel"
                             :areaCode="areaCode"
-                            v-show="activeModel=='mobileModel'"
+                            v-if="activeModel=='mobileModel'"
                         />
 
-                        <EmailModel ref="emailModel" v-show="activeModel=='emailModel'"/>
+                        <EmailModel ref="emailModel" v-if="activeModel=='emailModel'"/>
                     </el-tabs>
                     <el-button
                         type="primary"
@@ -104,11 +97,11 @@
                         @click.native="handleLogin"
                         :loading="logining"
                         class="submit_btn"
-                        >登录</el-button>
+                        ><!-- 登录 -->{{ $t('LoginPage.login_btn') }}</el-button>
                     <div class="another-login-type">
                         <div class="another-type-hint">
                             <div class="type-hint-line"></div>
-                            <div class="type-hint-text">其他登录方式</div>
+                            <div class="type-hint-text"><!-- 其他登录方式 -->{{ $t('LoginPage.other_login_type') }}</div>
                             <div class="type-hint-line"></div>
                         </div>
                         <div class="another-type">
@@ -121,7 +114,6 @@
                             <div v-html="item.svg"></div>
                             {{item.label}}
                             </div>
-                                <!-- <img src="~@/assets/img/icons/email-login-type.png" @click="activeModel='emailModel';handleClick({name:'emailModel'})" /> -->
                         </div>
                     </div>
                 </div>
@@ -149,12 +141,12 @@
 			@close="isCheckDialogShow = false"
 			>
 			<el-tabs v-model="checkActiveModel" @tab-click="handleClick">
-				<el-tab-pane label="手机号验证" name="checkMobileModel">
+				<el-tab-pane :label="$t('LoginPage.tab_vaild_phone')" name="checkMobileModel">
 						<MobileModel ref="checkMobileModel"
 							:areaCode="areaCode"
 						/>
 					</el-tab-pane>
-					<el-tab-pane label="邮箱验证" name="checkEmailModel">
+					<el-tab-pane :label="$t('LoginPage.tab_vaild_email')" name="checkEmailModel">
 						<EmailModel ref="checkEmailModel"/>
 					</el-tab-pane>
 			</el-tabs>
@@ -162,7 +154,7 @@
 				<el-button 
 					type="primary" 
 					:loading="checkLogining"
-					@click="submitCheck">提 交</el-button>
+					@click="submitCheck"><!-- 提 交 -->{{ $t('Dialog.submit_btn') }}</el-button>
 			</span>
 		</el-dialog>
 	</div>
@@ -180,6 +172,88 @@ import OrdinaryModel from "./login_manage/OrdinaryModel.vue";
 
 export default {
     components: { OrdinaryModel, MobileModel, EmailModel, ForgetPassModel },
+    computed: {
+        lang() {
+            return this.$i18n.locale
+        },
+         /* 登录方式icon */
+        loginTypeIcons(){
+          return  [
+                    {
+                        name: 'ordinaryModel',
+                        label: /* '账号登录'  */this.$t('LoginPage.login_by_account'),
+                        svg: `<svg data-v-5b948168="" width="64" height="64" viewBox="0 0 60 64" fill="none" xmlns="http://www.w3.org/2000/svg"><g filter="url(#filter0_d_6575_1450)">
+                            <circle cx="26" cy="25" r="20" fill="white"></circle>
+                            <circle cx="26" cy="25" r="19.75" stroke="#DCDFE6" stroke-width="0.5"></circle>
+                            </g>
+                            <g clip-path="url(#clip0_6575_1450)">
+                            <path d="M30.9555 24.9201C29.6869 26.0392 28.0029 26.7261 26.1469 26.7261C24.2634 26.7261 22.5516 26.0169 21.2775 24.8647C18.3137 25.6402 16.48 28.2883 16.48 31.4516V33.0637C16.48 36.8364 35.5204 36.8364 35.5204 33.0637V31.4516C35.5203 28.3716 33.7809 25.7678 30.9555 24.9201ZM26.1469 25.5794C29.4321 25.5794 32.1023 23.0144 32.1023 19.8457C32.1023 16.677 29.4376 14.1064 26.1469 14.1064C22.8673 14.1064 20.1972 16.677 20.1972 19.8457C20.1972 23.0145 22.8673 25.5794 26.1469 25.5794Z" fill="#0052D9"></path>
+                            </g>
+                            <defs>
+                            <filter id="filter0_d_6575_1450" x="0" y="0" width="52" height="52" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+                            <feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood>
+                            <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"></feColorMatrix>
+                            <feOffset dy="1"></feOffset>
+                            <feGaussianBlur stdDeviation="3"></feGaussianBlur>
+                            <feComposite in2="hardAlpha" operator="out"></feComposite>
+                            <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"></feColorMatrix>
+                            <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_6575_1450"></feBlend>
+                            <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_6575_1450" result="shape"></feBlend>
+                            </filter>
+                            <clipPath id="clip0_6575_1450">
+                            <rect width="24" height="24" fill="white" transform="translate(14 13)"></rect>
+                            </clipPath>
+                            </defs></svg>`
+                    },
+                    {
+                        name:'mobileModel',
+                        label: /* '手机号登录' */this.$t('LoginPage.login_by_mobile'),
+                        svg: `<svg data-v-5b948168="" width="64" height="64" viewBox="0 0 56 64" fill="none" xmlns="http://www.w3.org/2000/svg">
+                            <g filter="url(#filter0_d_6575_1430)">
+                            <circle cx="26" cy="25" r="20" fill="white"></circle>
+                            <circle cx="26" cy="25" r="19.75" stroke="#DCDFE6" stroke-width="0.5"></circle>
+                            </g>
+                            <path d="M31.7982 13.6985H19.7718C18.6414 13.6985 17.7246 14.6153 17.7246 15.7457V34.2977C17.7246 35.4281 18.6414 36.3449 19.7718 36.3449H24.8262H27.6366H31.7982C32.9286 36.3449 33.8454 35.4281 33.8454 34.2977V15.7457C33.8454 14.6153 32.9286 13.6985 31.7982 13.6985ZM23.8038 15.1577H27.7662C27.963 15.1577 28.1238 15.3185 28.1238 15.5153C28.1238 15.7121 27.963 15.8729 27.7662 15.8729H23.8038C23.607 15.8729 23.4462 15.7121 23.4462 15.5153C23.4462 15.3185 23.607 15.1577 23.8038 15.1577ZM25.7862 33.9689C24.9894 33.9689 24.3438 33.3233 24.3438 32.5265C24.3438 31.7297 24.9894 31.0841 25.7862 31.0841C26.583 31.0841 27.2286 31.7297 27.2286 32.5265C27.2262 33.3233 26.5806 33.9689 25.7862 33.9689ZM32.3478 28.6337C32.3478 28.9169 32.1198 29.1449 31.8366 29.1449H19.7334C19.4502 29.1449 19.2222 28.9169 19.2222 28.6337V17.7377C19.2222 17.4545 19.4502 17.2265 19.7334 17.2265H31.8342C32.1174 17.2265 32.3454 17.4545 32.3454 17.7377V28.6337H32.3478Z" fill="#0052D9"></path>
+                            <defs>
+                            <filter id="filter0_d_6575_1430" x="0" y="0" width="52" height="52" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+                            <feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood>
+                            <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"></feColorMatrix>
+                            <feOffset dy="1"></feOffset>
+                            <feGaussianBlur stdDeviation="3"></feGaussianBlur>
+                            <feComposite in2="hardAlpha" operator="out"></feComposite>
+                            <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"></feColorMatrix>
+                            <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_6575_1430"></feBlend>
+                            <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_6575_1430" result="shape"></feBlend>
+                            </filter>
+                            </defs></svg>`
+                    },
+                    {
+                        name: 'emailModel',
+                        label: /* '邮箱登录' */this.$t('LoginPage.login_by_email'),
+                        svg: `
+                            <svg data-v-5b948168="" width="64" height="64" viewBox="0 4 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
+                            <g filter="url(#filter0_d_6575_1422)">
+                            <circle cx="32" cy="30" r="20" fill="white"></circle>
+                            <circle cx="32" cy="30" r="19.5" stroke="#DCDFE6"></circle>
+                            </g>
+                            <path d="M41.1382 34.9875C41.1382 37.1966 39.3473 38.9875 37.1382 38.9875H26.8774C24.6683 38.9875 22.8774 37.1966 22.8774 34.9875V28.1164C22.8774 26.864 23.464 25.6839 24.4623 24.9278L31.3139 19.7381C31.517 19.5832 31.7594 19.5 32.0078 19.5C32.2562 19.5 32.4986 19.5832 32.7017 19.7381L39.5533 24.9278C40.5516 25.6839 41.1382 26.864 41.1382 28.1164V34.9875Z" fill="#0052D9"></path>
+                            <path d="M38.682 26.5957C38.682 27.0061 38.4316 27.3751 38.0501 27.5266L33.4963 29.3353C32.5408 29.7148 31.4758 29.7119 30.5224 29.327L25.956 27.4837C25.5853 27.334 25.3425 26.9743 25.3425 26.5745C25.3425 26.033 25.7815 25.594 26.323 25.594H37.6803C38.2335 25.594 38.682 26.0425 38.682 26.5957Z" fill="white"></path>
+                            <defs>
+                            <filter id="filter0_d_6575_1422" x="0" y="0" width="64" height="64" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+                            <feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood>
+                            <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"></feColorMatrix>
+                            <feOffset dy="2"></feOffset>
+                            <feGaussianBlur stdDeviation="6"></feGaussianBlur>
+                            <feComposite in2="hardAlpha" operator="out"></feComposite>
+                            <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"></feColorMatrix>
+                            <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_6575_1422"></feBlend>
+                            <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_6575_1422" result="shape"></feBlend>
+                            </filter>
+                            </defs></svg>`
+                    },
+                  ]
+        } 
+    },
     data() {
         return {
             b: new http.Base64(),
@@ -219,81 +293,6 @@ export default {
             isCheckDialogShow:false,
             checkActiveModel:'checkMobileModel',
             
-            /* 登录方式icon */
-            loginTypeIcons: [
-                {
-                    name: 'ordinaryModel',
-                    label: '账号登录',
-                    svg: `<svg data-v-5b948168="" width="64" height="64" viewBox="0 0 60 64" fill="none" xmlns="http://www.w3.org/2000/svg"><g filter="url(#filter0_d_6575_1450)">
-                        <circle cx="26" cy="25" r="20" fill="white"></circle>
-                        <circle cx="26" cy="25" r="19.75" stroke="#DCDFE6" stroke-width="0.5"></circle>
-                        </g>
-                        <g clip-path="url(#clip0_6575_1450)">
-                        <path d="M30.9555 24.9201C29.6869 26.0392 28.0029 26.7261 26.1469 26.7261C24.2634 26.7261 22.5516 26.0169 21.2775 24.8647C18.3137 25.6402 16.48 28.2883 16.48 31.4516V33.0637C16.48 36.8364 35.5204 36.8364 35.5204 33.0637V31.4516C35.5203 28.3716 33.7809 25.7678 30.9555 24.9201ZM26.1469 25.5794C29.4321 25.5794 32.1023 23.0144 32.1023 19.8457C32.1023 16.677 29.4376 14.1064 26.1469 14.1064C22.8673 14.1064 20.1972 16.677 20.1972 19.8457C20.1972 23.0145 22.8673 25.5794 26.1469 25.5794Z" fill="#0052D9"></path>
-                        </g>
-                        <defs>
-                        <filter id="filter0_d_6575_1450" x="0" y="0" width="52" height="52" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
-                        <feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood>
-                        <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"></feColorMatrix>
-                        <feOffset dy="1"></feOffset>
-                        <feGaussianBlur stdDeviation="3"></feGaussianBlur>
-                        <feComposite in2="hardAlpha" operator="out"></feComposite>
-                        <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"></feColorMatrix>
-                        <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_6575_1450"></feBlend>
-                        <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_6575_1450" result="shape"></feBlend>
-                        </filter>
-                        <clipPath id="clip0_6575_1450">
-                        <rect width="24" height="24" fill="white" transform="translate(14 13)"></rect>
-                        </clipPath>
-                        </defs></svg>`
-                },
-                {
-                    name:'mobileModel',
-                    label: '手机号登录',
-                    svg: `<svg data-v-5b948168="" width="64" height="64" viewBox="0 0 56 64" fill="none" xmlns="http://www.w3.org/2000/svg">
-                        <g filter="url(#filter0_d_6575_1430)">
-                        <circle cx="26" cy="25" r="20" fill="white"></circle>
-                        <circle cx="26" cy="25" r="19.75" stroke="#DCDFE6" stroke-width="0.5"></circle>
-                        </g>
-                        <path d="M31.7982 13.6985H19.7718C18.6414 13.6985 17.7246 14.6153 17.7246 15.7457V34.2977C17.7246 35.4281 18.6414 36.3449 19.7718 36.3449H24.8262H27.6366H31.7982C32.9286 36.3449 33.8454 35.4281 33.8454 34.2977V15.7457C33.8454 14.6153 32.9286 13.6985 31.7982 13.6985ZM23.8038 15.1577H27.7662C27.963 15.1577 28.1238 15.3185 28.1238 15.5153C28.1238 15.7121 27.963 15.8729 27.7662 15.8729H23.8038C23.607 15.8729 23.4462 15.7121 23.4462 15.5153C23.4462 15.3185 23.607 15.1577 23.8038 15.1577ZM25.7862 33.9689C24.9894 33.9689 24.3438 33.3233 24.3438 32.5265C24.3438 31.7297 24.9894 31.0841 25.7862 31.0841C26.583 31.0841 27.2286 31.7297 27.2286 32.5265C27.2262 33.3233 26.5806 33.9689 25.7862 33.9689ZM32.3478 28.6337C32.3478 28.9169 32.1198 29.1449 31.8366 29.1449H19.7334C19.4502 29.1449 19.2222 28.9169 19.2222 28.6337V17.7377C19.2222 17.4545 19.4502 17.2265 19.7334 17.2265H31.8342C32.1174 17.2265 32.3454 17.4545 32.3454 17.7377V28.6337H32.3478Z" fill="#0052D9"></path>
-                        <defs>
-                        <filter id="filter0_d_6575_1430" x="0" y="0" width="52" height="52" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
-                        <feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood>
-                        <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"></feColorMatrix>
-                        <feOffset dy="1"></feOffset>
-                        <feGaussianBlur stdDeviation="3"></feGaussianBlur>
-                        <feComposite in2="hardAlpha" operator="out"></feComposite>
-                        <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"></feColorMatrix>
-                        <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_6575_1430"></feBlend>
-                        <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_6575_1430" result="shape"></feBlend>
-                        </filter>
-                        </defs></svg>`
-                },
-                {
-                    name: 'emailModel',
-                    label: '邮箱登录',
-                    svg: `
-                        <svg data-v-5b948168="" width="64" height="64" viewBox="0 4 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
-                        <g filter="url(#filter0_d_6575_1422)">
-                        <circle cx="32" cy="30" r="20" fill="white"></circle>
-                        <circle cx="32" cy="30" r="19.5" stroke="#DCDFE6"></circle>
-                        </g>
-                        <path d="M41.1382 34.9875C41.1382 37.1966 39.3473 38.9875 37.1382 38.9875H26.8774C24.6683 38.9875 22.8774 37.1966 22.8774 34.9875V28.1164C22.8774 26.864 23.464 25.6839 24.4623 24.9278L31.3139 19.7381C31.517 19.5832 31.7594 19.5 32.0078 19.5C32.2562 19.5 32.4986 19.5832 32.7017 19.7381L39.5533 24.9278C40.5516 25.6839 41.1382 26.864 41.1382 28.1164V34.9875Z" fill="#0052D9"></path>
-                        <path d="M38.682 26.5957C38.682 27.0061 38.4316 27.3751 38.0501 27.5266L33.4963 29.3353C32.5408 29.7148 31.4758 29.7119 30.5224 29.327L25.956 27.4837C25.5853 27.334 25.3425 26.9743 25.3425 26.5745C25.3425 26.033 25.7815 25.594 26.323 25.594H37.6803C38.2335 25.594 38.682 26.0425 38.682 26.5957Z" fill="white"></path>
-                        <defs>
-                        <filter id="filter0_d_6575_1422" x="0" y="0" width="64" height="64" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
-                        <feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood>
-                        <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"></feColorMatrix>
-                        <feOffset dy="2"></feOffset>
-                        <feGaussianBlur stdDeviation="6"></feGaussianBlur>
-                        <feComposite in2="hardAlpha" operator="out"></feComposite>
-                        <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"></feColorMatrix>
-                        <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_6575_1422"></feBlend>
-                        <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_6575_1422" result="shape"></feBlend>
-                        </filter>
-                        </defs></svg>`
-                },
-            ],
             recordInformation:[],
             loginTitle:''
         };
@@ -625,6 +624,11 @@ export default {
                     }
                 }
             }
+        },
+
+        changeLang(val) {
+            this.$i18n.locale = val
+            localStorage.setItem('i18n',this.$i18n.locale)
         }
     },
     destroyed() {
@@ -864,5 +868,11 @@ export default {
 			font-size: 14px;
 		}
 	}
+
+    .lang-wrapper {
+        position: absolute;
+        top: 3%;
+        right: 3%;
+    }
 }
 </style>

+ 14 - 14
src/views/approve_manage/approveDetail.vue

@@ -3,9 +3,9 @@
     <div class="approve-detail-wrap" v-if="isETAApprove">
         <div class="approve-detail">
             <div class="approve-info">
-                <span>研报名称:{{reportInfo.title||''}}</span>
-                <span>研报分类:{{reportInfo.classify||''}}</span>
-                <span style="min-width: 100px;">发起人:{{reportInfo.approver||''}}</span>
+                <span>{{$t('AprrovalDetailPage.report_name_info')}}:{{reportInfo.title||''}}</span>
+                <span>{{$t('AprrovalDetailPage.classification_info')}}:{{reportInfo.classify||''}}</span>
+                <span style="min-width: 100px;">{{$t('AprrovalDetailPage.initiator_info')}}:{{reportInfo.approver||''}}</span>
             </div>
             <div class="approve-content" 
                 v-loading="isLoading"
@@ -26,15 +26,15 @@
             <div class="tool-btn">
                 <!-- 根据审批的状态决定显示 -->
                 <el-button type="danger" @click="changeApprove('reject')"
-                    v-if="formType==='approve'&&approveInfo.isCurrentApprover&&permissionBtn.isShowBtn('approvePermission','reportApprove_reject')">驳回</el-button>
+                    v-if="formType==='approve'&&approveInfo.isCurrentApprover&&permissionBtn.isShowBtn('approvePermission','reportApprove_reject')">{{$t('AprrovalDetailPage.rejected_btn')}}</el-button>
                 <el-button type="primary" @click="changeApprove('pass')"
-                    v-if="formType==='approve'&&approveInfo.isCurrentApprover&&permissionBtn.isShowBtn('approvePermission','reportApprove_agree')">同意</el-button>
+                    v-if="formType==='approve'&&approveInfo.isCurrentApprover&&permissionBtn.isShowBtn('approvePermission','reportApprove_agree')">{{$t('AprrovalDetailPage.agree_btn')}}</el-button>
                 <el-button type="primary" @click="changeApprove('return')"
-                    v-if="formType==='myself'&&approveInfo.state!==4&&permissionBtn.isShowBtn('approvePermission','reportApprove_repeal')">撤销</el-button>
-                <el-button type="primary" plain @click="$router.replace(`/approveList?formType=${formType}`)">返回</el-button>
+                    v-if="formType==='myself'&&approveInfo.state!==4&&permissionBtn.isShowBtn('approvePermission','reportApprove_repeal')">{{$t('AprrovalDetailPage.cancel_btn')}}</el-button>
+                <el-button type="primary" plain @click="$router.replace(`/approveList?formType=${formType}`)">{{$t('AprrovalDetailPage.back_btn')}}</el-button>
             </div>
             <div class="approve-timeline-wrap">
-                <p>审批流程</p>
+                <p>{{$t('AprrovalDetailPage.approval_process')}}</p>
                 <div class="timeline">
                     <TimeLine 
                         :TimeLineData="TimeLineData"
@@ -53,7 +53,7 @@
         />
     </div>
     <div class="nodata-wrap approve-page-wrap" v-else>
-        <tableNoData :text="pageLoading?'':'系统暂未开通审批流程,请开启审批流程后再进行操作!'"></tableNoData>
+        <tableNoData :text="pageLoading?'':$t('AprrovalPage.prompt_loading')"></tableNoData>
     </div>
 </template>
 
@@ -126,7 +126,7 @@ export default {
             //发起人节点
             const startNode = {
                 nodeType:1,
-                nodeText:'发起人:',
+                nodeText:`${this.$t('AprrovalDetailPage.initiator_info')}:`,
                 nodeStatus:'passed',
                 approveList:[{
                     approverName:Approve.ApplyUserName||'',
@@ -144,7 +144,7 @@ export default {
                 const strApproveType = `(${ApproveType[i.ApproveType]})`
                 const node = {
                     nodeType:2,
-                    nodeText:'审批人:'+i.Users.length+'人'+(i.Users.length>1?strApproveType:''),
+                    nodeText:`${this.$t('AprrovalDetailPage.approval_by',{num:i.Users.length}) }`+(i.Users.length>1?strApproveType:''),
                     nodeStatus:i.ReportApproveNodeId===Approve.CurrNodeId?'process':'future',
                     approveType:ApproveType[i.ApproveType]
                 }
@@ -226,7 +226,7 @@ export default {
                 //在最后加上撤销节点
                 Nodes.push({
                     nodeType:3,
-                    nodeText:'发起人:',
+                    nodeText:`${this.$t('AprrovalDetailPage.initiator_info')}:`,
                     nodeStatus:'return',
                     approveList:[{
                         approverName:(Approve.ApplyUserName||'')+'(已撤销)',
@@ -274,7 +274,7 @@ export default {
                 })
             }
             if(res.Ret!==200) return 
-            this.$message.success(`${type==='return'?'撤销':'通过'}成功`)
+            this.$message.success( type==='return'?this.$t('AprrovalPage.revoke_success') :this.$t('AprrovalDetailPage.passed_success'));
             type!=='reject'&&(this.$router.replace("/approveList"))
         },
         rejectApprove(reason){
@@ -284,7 +284,7 @@ export default {
                 ApproveRemark:reason||''
             }).then(res=>{
                 if(res.Ret!==200) return 
-                this.$message.success("驳回成功")
+                this.$message.success(this.$t('AprrovalDetailPage.rejected_success') )
                 this.$router.replace("/approveList")
             })
         }

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

+ 48 - 31
src/views/approve_manage/approveList.vue

@@ -3,15 +3,15 @@
     <div class="approve-list-wrap approve-page-wrap" v-if="isETAApprove">
         <div class="head-tab">
             <el-tabs v-model="activeTab" @tab-click="handleClick">
-                <el-tab-pane label="待处理" name="pending"></el-tab-pane>
-                <el-tab-pane label="已处理" name="processed"></el-tab-pane>
-                <el-tab-pane label="我发起的" name="originate"></el-tab-pane>
+                <el-tab-pane :label="$t('AprrovalPage.be_processed_tab')" name="pending"></el-tab-pane>
+                <el-tab-pane :label="$t('AprrovalPage.processed_tab')" name="processed"></el-tab-pane>
+                <el-tab-pane :label="$t('AprrovalPage.i_initiated_tab')" name="originate"></el-tab-pane>
             </el-tabs>
         </div>
         <div class="approve-list">
             <div class="select-box">
                 <el-cascader v-model="classify"
-                    placeholder="请选择关联报告" clearable
+                    :placeholder="$t('AprrovalPage.associated_report_ipt')" clearable
                     :options="classifyTree"
                     :props="{value:'ClassifyId',label:'ClassifyName',children:'Children'}"
                     @change="handleCurrentChange(1)">
@@ -19,39 +19,39 @@
                 <div class="select-time-box">
                     <el-select v-show="activeTab!=='pending'" v-model="timeType" 
                         @change="handleCurrentChange(1)"
-                        placeholder="时间类型" style="max-width:120px;" class="custom-select">
-                        <el-option label="提交时间" :value="1" />
-                        <el-option label="处理时间" :value="2" v-if="activeTab==='processed'"/>
-                        <el-option label="审批时间" :value="3" v-if="activeTab==='originate'"/>
+                        :placeholder="$t('AprrovalPage.time_type_select')" style="max-width:120px;" class="custom-select">
+                        <el-option :label="$t('AprrovalPage.submint_time')" :value="1" />
+                        <el-option :label="$t('AprrovalPage.processing_time')" :value="2" v-if="activeTab==='processed'"/>
+                        <el-option :label="$t('AprrovalPage.approval_time')" :value="3" v-if="activeTab==='originate'"/>
                     </el-select>
                     <div class="line" v-show="activeTab!=='pending'"></div>
                     <el-date-picker v-model="timeDate"
                         @change="handleCurrentChange(1)"
                         type="daterange"
                         value-format="yyyy-MM-dd"
-                        range-separator="至"
-                        start-placeholder="开始日期"
-                        end-placeholder="结束日期">
+                        :range-separator="$t('Common.to')"
+                        :start-placeholder="$t('Common.ph_time_start')"
+                        :end-placeholder="$t('Common.ph_time_end')">
                     </el-date-picker>
                 </div>
                 
-                <el-select placeholder="请选择处理状态" v-model="ApproveState" clearable v-show="activeTab!=='pending'"
+                <el-select :placeholder="$t('AprrovalPage.select_processing_status')" v-model="ApproveState" clearable v-show="activeTab!=='pending'"
                     @change="handleCurrentChange(1)">
                     <template v-if="activeTab==='processed'">
-                        <el-option label="已同意" :value="2" />
-                        <el-option label="已驳回" :value="3" />
+                        <el-option :label="$t('AprrovalPage.agreed_option')" :value="2" />
+                        <el-option :label="$t('AprrovalPage.rejected_option')" :value="3" />
                     </template>
                     <template v-if="activeTab==='originate'">
-                        <el-option label="待审批" :value="1" />
-                        <el-option label="已通过" :value="2" />
-                        <el-option label="已驳回" :value="3" />
-                        <el-option label="已撤销" :value="4" />
+                        <el-option :label="$t('AprrovalPage.awaiting_approval_option')" :value="1" />
+                        <el-option :label="$t('AprrovalPage.approved_option')" :value="2" />
+                        <el-option :label="$t('AprrovalPage.rejected_option')" :value="3" />
+                        <el-option :label="$t('AprrovalPage.revoked_option')" :value="4" />
                     </template>
                     
                 </el-select>
 
                 <el-input v-model="keyword" prefix-icon="el-icon-search" clearable @input="handleCurrentChange(1)"
-                    placeholder="请输入报告标题" style="width:260px;margin-left: auto;"></el-input>
+                    :placeholder="$t('AprrovalPage.report_title_ipt')" style="width:260px;margin-left: auto;"></el-input>
             </div>
             <div class="list-box">
                 <el-table 
@@ -62,38 +62,38 @@
                     <el-table-column
                         v-for="item in tableColumns"
                         :key="item.key"
-                        :label="item.label"
+                        :label="getContentMenuOptText(item.label)"
                         :prop="item.key"
                         :sortable="item.sortable"
                         align="center"
                     >
                         <template slot-scope="{row}">
                             <span v-if="item.key==='State'">
-                                {{['','待审批','已通过','已驳回','已撤销'][row.State]}}
+                                {{getContentMenuOptText(['','待审批','已通过','已驳回','已撤销'][row.State])}}
                             </span>
                             <span v-else-if="item.key==='RecordState'">
-                                {{['','待审批','已同意','已驳回'][row.RecordState]}}
+                                {{getContentMenuOptText(['','待审批','已同意','已驳回'][row.RecordState])}}
                             </span>
                             <span v-else>{{row[item.key]}}</span>
                         </template>
                     </el-table-column>
-                    <el-table-column label="操作" align="center">
+                    <el-table-column :label="$t('Table.column_operations')" align="center">
                         <template slot-scope="{row}">
                             <template v-if="activeTab==='pending'">
                                 <el-button type="text" style="padding:0;" @click="toApproveDetail(row,'approve')"
-                                    v-if="permissionBtn.isShowBtn('approvePermission','reportApprove_approve')">审批</el-button>
+                                    v-if="permissionBtn.isShowBtn('approvePermission','reportApprove_approve')">{{$t('AprrovalPage.approve_table')}}</el-button>
                             </template>
                             <template v-if="activeTab==='processed'">
-                                <el-button type="text" style="padding:0;" @click="toApproveDetail(row,'detail')">详情</el-button>
+                                <el-button type="text" style="padding:0;" @click="toApproveDetail(row,'detail')">{{$t('AprrovalPage.details_table')}}</el-button>
                                 <el-button type="text" style="padding:0" @click="handleShowDetail(row)" 
-                                    v-if="row.State===3&&permissionBtn.isShowBtn('approvePermission','reportApprove_rejectreason')">驳回理由</el-button>
+                                    v-if="row.State===3&&permissionBtn.isShowBtn('approvePermission','reportApprove_rejectreason')">{{$t('AprrovalPage.rejection_table')}}</el-button>
                             </template>
                             <template v-if="activeTab==='originate'">
-                                <el-button type="text" style="padding:0;" @click="toApproveDetail(row,'myself')">详情</el-button>
+                                <el-button type="text" style="padding:0;" @click="toApproveDetail(row,'myself')">{{$t('AprrovalPage.details_table')}}</el-button>
                                 <el-button type="text" style="padding:0;" @click="cancelApprove(row)" 
-                                    v-if="row.State!==4&&permissionBtn.isShowBtn('approvePermission','reportApprove_repeal')">撤销</el-button>
+                                    v-if="row.State!==4&&permissionBtn.isShowBtn('approvePermission','reportApprove_repeal')">{{$t('AprrovalPage.cancel_table')}}</el-button>
                                 <el-button type="text" style="padding:0" @click="handleShowDetail(row)" 
-                                    v-if="row.State===3&&permissionBtn.isShowBtn('approvePermission','reportApprove_rejectreason')">驳回理由</el-button>
+                                    v-if="row.State===3&&permissionBtn.isShowBtn('approvePermission','reportApprove_rejectreason')">{{$t('AprrovalPage.rejection_table')}}</el-button>
                             </template>
                         </template>
                         
@@ -120,7 +120,7 @@
         />
     </div>
     <div class="approve-page-wrap" v-else>
-        <tableNoData :text="pageLoading?'':'系统暂未开通审批流程,请开启审批流程后再进行操作!'"></tableNoData>
+        <tableNoData :text="pageLoading?'':$t('AprrovalPage.prompt_loading')"></tableNoData>
     </div>
 </template>
 
@@ -243,10 +243,27 @@ export default {
                 ReportApproveId:Number(item.ReportApproveId)
             }).then(res=>{
                 if(res.Ret!==200) return 
-                this.$message.success("撤销成功")
+                this.$message.success(this.$t('AprrovalPage.revoke_success') )
                 this.handleCurrentChange(1)
             })
         },
+        // 语言切换
+        getContentMenuOptText(e){
+            if(e==='报告标题') return this.$t('AprrovalPage.report_title_lable') 
+            if(e==='关联报告') return this.$t('AprrovalPage.associated_report_lable') 
+            if(e==='提交人') return this.$t('AprrovalPage.submitter_lable') 
+            if(e==='提交时间') return this.$t('AprrovalPage.submission_time_lable') 
+            if(e==='审批状态') return this.$t('AprrovalPage.approval_status_lable') 
+            if(e==='处理时间') return this.$t('AprrovalPage.processing_time_lable') 
+            if(e==='处理结果') return this.$t('AprrovalPage.processing_result_lable') 
+            if(e==='审批时间') return this.$t('AprrovalPage.approval_time') 
+            if(e==='已通过') return this.$t('AprrovalPage.approved_option') 
+            if(e==='已驳回') return this.$t('AprrovalPage.rejected_option') 
+            if(e==='已撤销') return this.$t('AprrovalPage.revoked_option') 
+            if(e==='待审批') return this.$t('AprrovalPage.awaiting_approval_option') 
+            if(e==='已同意') return this.$t('AprrovalPage.agreed_option') 
+            return e
+        }
     },
     mounted(){
         this.getClassifyTree()

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

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio