Ver Fonte

Merge branch 'master' of http://8.136.199.33:3000/eta_front/eta_front into ppt-demand-124

cxmo há 4 meses atrás
pai
commit
2a55d318b8
100 ficheiros alterados com 2418 adições e 223 exclusões
  1. 3 8
      README.md
  2. 1 0
      config/dev.env.js
  3. 1 0
      config/prod.env.js
  4. 1 0
      config/prod.test.env.js
  5. 5 1
      package.json
  6. 11 0
      src/App.vue
  7. 12 4
      src/api/api.js
  8. 64 10
      src/api/http.js
  9. 41 2
      src/api/modules/chartApi.js
  10. 43 3
      src/api/modules/chartRelevanceApi.js
  11. 10 0
      src/api/modules/classifyApi.js
  12. 15 2
      src/api/modules/classifyEnApi.js
  13. 63 1
      src/api/modules/dataSource.js
  14. 11 1
      src/api/modules/futuresBaseApi.js
  15. 38 2
      src/api/modules/oldApi.js
  16. 7 2
      src/api/modules/reportEnApi.js
  17. 68 5
      src/api/modules/reportVariety.js
  18. 239 1
      src/api/modules/semanticsApi.js
  19. 120 0
      src/api/modules/setApi.js
  20. 74 6
      src/api/modules/sheetApi.js
  21. 7 4
      src/api/modules/smartReport.js
  22. 102 1
      src/api/modules/thirdBaseApi.js
  23. 100 0
      src/api/modules/toolBoxApi.js
  24. BIN
      src/assets/icons/menu/eta_forum.png
  25. BIN
      src/assets/img/asr.png
  26. BIN
      src/assets/img/document_m/audio-backward.png
  27. BIN
      src/assets/img/document_m/audio-forward.png
  28. BIN
      src/assets/img/document_m/audio-start.png
  29. BIN
      src/assets/img/document_m/audio-stop.png
  30. BIN
      src/assets/img/eta_base_config/ETA_mobile_logo.png
  31. BIN
      src/assets/img/eta_base_config/ETA_mobile_title.png
  32. BIN
      src/assets/img/eta_base_config/Logo_ch.png
  33. BIN
      src/assets/img/eta_base_config/Logo_en.png
  34. BIN
      src/assets/img/filter.png
  35. BIN
      src/assets/img/icons/arrow_black_up.png
  36. BIN
      src/assets/img/icons/arrow_left_black.png
  37. BIN
      src/assets/img/icons/changeLang01.png
  38. BIN
      src/assets/img/icons/close.png
  39. BIN
      src/assets/img/icons/copy-active.png
  40. BIN
      src/assets/img/icons/copy.png
  41. BIN
      src/assets/img/icons/edb-icon.png
  42. BIN
      src/assets/img/icons/edit_icon01.png
  43. BIN
      src/assets/img/icons/eyes-hide-active.png
  44. BIN
      src/assets/img/icons/eyes-hide.png
  45. BIN
      src/assets/img/icons/eyes-show-active.png
  46. BIN
      src/assets/img/icons/eyes-show.png
  47. BIN
      src/assets/img/icons/layout-option-icon.png
  48. BIN
      src/assets/img/icons/lock_big.png
  49. BIN
      src/assets/img/icons/lock_black.png
  50. BIN
      src/assets/img/icons/update_to_forum.png
  51. BIN
      src/assets/img/icons/upload_to_forum.png
  52. BIN
      src/assets/img/icons/variety_add.png
  53. BIN
      src/assets/img/icons/variety_name_edit.png
  54. BIN
      src/assets/img/icons/variety_set.png
  55. BIN
      src/assets/img/icons/withdraw_form_forum.png
  56. BIN
      src/assets/img/logo_mobile.png
  57. BIN
      src/assets/img/more.png
  58. BIN
      src/assets/img/ppt_m/list_bg.png
  59. BIN
      src/assets/img/ppt_m/move_ico2.png
  60. BIN
      src/assets/img/sand_new/move.png
  61. BIN
      src/assets/img/set_m/no_auth.png
  62. BIN
      src/assets/img/tag-gray.png
  63. BIN
      src/assets/img/tag.png
  64. 154 0
      src/components/antvVueComponents/tooltipCom.vue
  65. 3 3
      src/components/chart/chartDetailHandlesWrap.vue
  66. 7 2
      src/components/chart/chartListWrap.vue
  67. 23 0
      src/components/edb/noAuth.vue
  68. 51 14
      src/components/edbDetailPopover.vue
  69. 2 2
      src/components/edbLabelList.vue
  70. 50 21
      src/components/lzTable.vue
  71. 40 0
      src/components/noDataAuth.vue
  72. 301 56
      src/components/notificationMsg.vue
  73. 63 13
      src/components/selectUnit.vue
  74. 28 0
      src/directives/tooltip-hidable.js
  75. 28 0
      src/lang/commonLang.js
  76. 9 0
      src/lang/modules/Aprroval/En.js
  77. 9 0
      src/lang/modules/Aprroval/Zh.js
  78. 2 2
      src/lang/modules/DataReport/GlStatisticTable.js
  79. 25 1
      src/lang/modules/DataSources/En.js
  80. 28 1
      src/lang/modules/DataSources/Zh.js
  81. 22 1
      src/lang/modules/ETATables/En.js
  82. 23 1
      src/lang/modules/ETATables/Zh.js
  83. 40 0
      src/lang/modules/ETATables/commonLang.js
  84. 71 5
      src/lang/modules/EtaBase/En.js
  85. 68 2
      src/lang/modules/EtaBase/Zh.js
  86. 99 15
      src/lang/modules/EtaBase/commonLang.js
  87. 21 1
      src/lang/modules/EtaChart/En.js
  88. 19 1
      src/lang/modules/EtaChart/Zh.js
  89. 42 2
      src/lang/modules/EtaChart/commonLang.js
  90. 2 1
      src/lang/modules/MainApp/En.js
  91. 1 0
      src/lang/modules/MainApp/Zh.js
  92. 2 1
      src/lang/modules/MyEta/En.js
  93. 2 1
      src/lang/modules/MyEta/Zh.js
  94. 3 1
      src/lang/modules/PredictEdb/En.js
  95. 5 3
      src/lang/modules/PredictEdb/Zh.js
  96. 1 1
      src/lang/modules/ReportManagement/AuthorManagement.js
  97. 56 1
      src/lang/modules/ReportManagement/CategoryList.js
  98. 12 2
      src/lang/modules/ReportManagement/CloudPage.js
  99. 47 1
      src/lang/modules/ReportManagement/CommodityConfiguration.js
  100. 23 15
      src/lang/modules/ReportManagement/ReportList.js

+ 3 - 8
README.md

@@ -7,15 +7,10 @@
 
 ### branch
 - master  debug  sandbox
-
-### pack
-- 在static/下新建base_config.js
-- base_config.js用于导出正式环境加密用的key,`window.key='对应环境的密钥'`
-- 在index.html中引入
-- 在src/api/crypto.js中,将key替换成window.key
-- 打包完成后,发布不同环境,只需要更改base_config.js中的密钥
+- custom 客户主分支 每周五将要给客户发版的代码合并到此分支上,
+    如果有要临时给客户发版的内容从此分支拉取代码再进行修改。
 
 ### link
 - http://8.136.199.33:7778 弘则测试
 - https://eta.hzinsights.com 弘则正式
-- https://exptest.hzinsights.com 试用平台
+- https://exptest.hzinsights.com 试用平台

+ 1 - 0
config/dev.env.js

@@ -15,4 +15,5 @@ module.exports = merge(prodEnv, {
   VUE_APP_ETA_DOCS:'"http://8.136.199.33:8622/update/index"',
 	VUE_APP_ETA_HELP_DOCS:'"http://8.136.199.33:8622/help/index"',
     VUE_APP_ETA_VIDEO:'"http://8.136.199.33:8622/video/list"',
+    VUE_APP_ETA_FORUM:'"http://8.136.199.33:8901/"',
 });

+ 1 - 0
config/prod.env.js

@@ -12,5 +12,6 @@ module.exports = {
 	VUE_APP_ETA_DOCS:'"https://etadocs.hzinsights.com/update/index"',
 	VUE_APP_ETA_HELP_DOCS:'"https://etadocs.hzinsights.com/help/index"',
 	VUE_APP_ETA_VIDEO:'"https://etadocs.hzinsights.com/video/list"',
+	VUE_APP_ETA_FORUM:'"https://forum.hzinsights.com"',
 		
 }

+ 1 - 0
config/prod.test.env.js

@@ -12,4 +12,5 @@ module.exports = {
 	VUE_APP_ETA_DOCS:'"http://8.136.199.33:8622/update/index"',
 	VUE_APP_ETA_HELP_DOCS:'"http://8.136.199.33:8622/help/index"',
 	VUE_APP_ETA_VIDEO:'"http://8.136.199.33:8622/video/list"',
+	VUE_APP_ETA_FORUM:'"http://8.136.199.33:8901/"',
 }

+ 5 - 1
package.json

@@ -15,6 +15,7 @@
   "dependencies": {
     "@antv/hierarchy": "^0.6.11",
     "@antv/x6": "^1.29.1",
+    "@antv/x6-vue-shape": "1.1.4",
     "@fullcalendar/interaction": "^5.10.1",
     "@fullcalendar/timegrid": "^5.10.1",
     "@fullcalendar/vue": "^5.10.1",
@@ -28,6 +29,7 @@
     "canvas2image": "^1.0.5",
     "clipboard": "^2.0.1",
     "crypto-js": "^3.1.9-1",
+    "dagre": "^0.8.5",
     "dependencies": "^0.0.1",
     "dll": "^0.2.0",
     "element-resize-detector": "^1.2.2",
@@ -53,6 +55,7 @@
     "vue-clipboard2": "^0.3.3",
     "vue-codemirror": "^4.0.6",
     "vue-count-to": "^1.0.13",
+    "vue-drag-resize": "^1.5.4",
     "vue-froala-wysiwyg": "^3.1.0",
     "vue-giant-tree": "^1.0.0",
     "vue-i18n": "^8.28.2",
@@ -63,7 +66,8 @@
     "vue2-datepicker": "^3.8.0",
     "vuedraggable": "^2.24.3",
     "vuex": "^2.0.0-rc.6",
-    "webpack-parallel-uglify-plugin": "1.0.0"
+    "webpack-parallel-uglify-plugin": "1.0.0",
+    "xlsx": "^0.18.5"
   },
   "devDependencies": {
     "@babel/runtime-corejs2": "^7.9.2",

+ 11 - 0
src/App.vue

@@ -6,6 +6,7 @@
 
 <script>
 // import { loginconf } from "api/api.js";
+import { getRealPublicSettings } from '@/api/modules/oldApi';
 export default {
   name: "app",
   provide() {
@@ -27,6 +28,16 @@ export default {
       });
     },
   },
+  created(){
+    // 获取公共配置
+    getRealPublicSettings().then(res=>{
+      if(res.Ret == 200){
+        this.$store.commit('SET_PUBLIC_CONFIG',res.Data || [])
+      }else{
+        this.$store.commit('SET_PUBLIC_CONFIG',[])
+      }
+    })
+  }
 };
 </script>
 

+ 12 - 4
src/api/api.js

@@ -15,7 +15,10 @@ import {
   fwmtInterface,
   guangqiInterface,
   icpiInterface,
-  coalWordInterface
+  zczxInterface,
+  coalWordInterface,
+  bloombergInterface,
+  ccfDataInterface
 } from './modules/thirdBaseApi';
 
 //手工指标 手工数据 手工数据权限
@@ -122,7 +125,10 @@ export {
   fwmtInterface,
   guangqiInterface,
   icpiInterface,
-  coalWordInterface
+  zczxInterface,
+  coalWordInterface,
+  bloombergInterface,
+  ccfDataInterface
 };
 
 //老接口 研报 ppt等
@@ -201,7 +207,8 @@ const {
   weekReportValidAudio,
   getUserUuid,
   getBusinessCode,
-  recordActiveLogin
+  recordActiveLogin,
+  userLogOut
 
 } = oldApis;
 
@@ -278,6 +285,7 @@ export {
   weekReportValidAudio,
   getUserUuid,
   getBusinessCode,
-  recordActiveLogin
+  recordActiveLogin,
+  userLogOut
 };
 

+ 64 - 10
src/api/http.js

@@ -1,6 +1,16 @@
 "use strict";
 import axios from "axios";
 import bus from "./bus.js";
+let store=null
+// 异步加载store模块 不异步加载的话,@/api/modules/oldApi.js的导入导出写法会有问题
+import('@/vuex/index.js')
+.then(module => {
+  store=module.default
+})
+.catch(err => {
+  console.error(err,'vuex加载错误');
+});
+
 axios.defaults.withCredentials = true;
 axios.defaults.timeout = 0;
 axios.interceptors.request.use(
@@ -13,6 +23,9 @@ axios.interceptors.request.use(
     const uuid = localStorage.getItem("uuid") || "";
     config.headers.Uuid = uuid;
     config.headers.AccessToken = uuid + "--zheshiyigename";
+
+    config.headers.Lang = localStorage.getItem("i18n") || 'zh';
+
     return config;
   },
   (error) => {
@@ -40,16 +53,29 @@ function getData(val, url) {
   return val;
 }
 
-function checkStatus(response) {
+function errorMsgShow(closableErrMsg,msg){
+  if(closableErrMsg){
+    let messageHint = bus.$message.error({
+      message:msg,
+      duration:0,
+      showClose:true
+    })
+    store.mutations.PUSH_CLOSABLE_HINT(store.state,messageHint)
+  }else{
+    bus.$message.error(msg);
+  }
+}
+
+function checkStatus(response,closableErrMsg) {
   //处理响应数据
   if (response && response.status === 200) {
     // loading,如果http状态码正常,则直接返回数据
     let res = bus.$parseData(response);
     if (!res) {
-      bus.$message.error("服务器开了个小差");
+      errorMsgShow(closableErrMsg,'服务器开了个小差')
       return false;
     } else if (res.Ret == 403) {
-      bus.$message.error(res.Msg);
+      errorMsgShow(closableErrMsg,res.Msg)
     } else if (res.Ret === 408) {
       localStorage.setItem("auth", "")
       localStorage.setItem("loginTime", "")
@@ -63,14 +89,19 @@ function checkStatus(response) {
     }
     return res;
   } else {
-    bus.$message.error("网络异常");
+    errorMsgShow(closableErrMsg,'网络异常')
     return false;
   }
 }
 
-function checkCode(res) {
-  bus.$message.error("网络异常");
+function checkCode(res,closableErrMsg) {
+  errorMsgShow(closableErrMsg,'网络异常')
 }
+
+function isFormData(obj) {
+  return typeof obj === 'object' && obj instanceof FormData;
+}
+
 // 请求时间需要过长,取消限制
 const cancelTimeoutUrlPost = ["/cloud_disk/resource/upload"];
 
@@ -78,6 +109,16 @@ export default {
   post(url, data) {
     //post请求方式
     let timeout = cancelTimeoutUrlPost.includes(url) ? 0 : 600000;
+    // 自定义参数
+    /**
+     * closableErrMsg123 -- 错误提示需要时可关闭类型的
+     */
+    let closableErrMsg=false
+    if(data){
+      // 区分formData格式
+      closableErrMsg = isFormData(data)?!!data.get('closableErrMsg123'):!!data.closableErrMsg123
+      isFormData(data)?data.delete('closableErrMsg123'):(data.closableErrMsg123=undefined)
+    }
     return axios({
       method: "post",
       url: url,
@@ -87,13 +128,23 @@ export default {
       headers: { "Content-Type": "application/json; charset=utf-8" },
     })
       .then((response) => {
-        return checkStatus(response);
+        return checkStatus(response,closableErrMsg);
       })
       .catch((res) => {
-        return checkCode(res);
+        return checkCode(res,closableErrMsg);
       });
   },
   get(url, data, responseType = "json") {
+    // 自定义参数
+    /**
+     * closableErrMsg123 -- 错误提示需要时可关闭类型的
+     */
+    let closableErrMsg=false
+    if(data){
+      closableErrMsg = !!data.closableErrMsg123
+      data.closableErrMsg123=undefined
+    }
+
     //get请求方式
     return axios({
       method: "get",
@@ -117,10 +168,13 @@ export default {
       ],
     })
       .then((response) => {
-        return checkStatus(response);
+        if(responseType==='blob'){
+          return response
+        }
+        return checkStatus(response,closableErrMsg);
       })
       .catch((res) => {
-        return checkCode(res);
+        return checkCode(res,closableErrMsg);
       });
   },
   Base64,

+ 41 - 2
src/api/modules/chartApi.js

@@ -418,6 +418,27 @@ const dataBaseInterface = {
 	getBatchAddEdbSearchList:params=>{
 		return http.get('/datamanage/edb_info/calculate/multi/search',params)
 	},
+	/**
+	 * 设置指标对应版本信息
+	 * @param {*} params 
+	 * EdbInfoId EdbName Unit
+	 */
+	setEdbLangInfo: params => {
+		return http.post('/datamanage/edb_info/base/edit',params)
+	},
+
+	/**
+	 * 设置图表对应版本信息
+	 * @param {*} params 
+	 * ChartInfoId ChartName ChartEdbInfoList
+	 * @returns 
+	 */
+	setChartLangInfo: params => {
+		return http.post('/datamanage/chart_info/base/edit',params)
+	},
+
+
+
 	//========================================chart
 	// /**
 	//  * 
@@ -658,7 +679,10 @@ const dataBaseInterface = {
 		},
 		/**
 		 * 多图表一键刷新
-		 * @param {ChartInfoCode} params 
+		 * @param {Object} params
+		 * @param {Array} params.ChartInfoCode
+		 * @param {String} params.Source 来源,枚举值:report、english_report、smart_report、ppt、en_ppt
+		 * @param {Number} params.PrimaryId 报告id/pptId
 		 * @returns 
 		 */
 		reportRefresh: params => {
@@ -941,7 +965,9 @@ const dataBaseInterface = {
 
 	/** 
 	 * 获取图表批量刷新结果
-	 *   Source ReportId ReportChapterId
+	 * @param {Object} params
+	 * @param {String} params.Source 来源,枚举值:report、english_report、smart_report、ppt、en_ppt
+	 * @param {Number} params.PrimaryId 报告id/pptId
 	 * 
 	 */
 	getReportrefreshStatus: params => {
@@ -972,6 +998,19 @@ const dataBaseInterface = {
 		 */
 	getChangeEdbData:params=>{
 		return http.get('/datamanage/chart_info/convert/detail',params)
+	},
+
+	//上传至社区
+	chartUploadToForum:params=>{
+		return http.post('/datamanage/chart_info/forum/upload',params)
+	},
+	//同步至社区
+	chartUpdateToForum:params=>{
+		return http.post('/datamanage/chart_info/forum/update',params)
+	},
+	//从社区撤回
+	chartWithdrawFromForum:params=>{
+		return http.post('/datamanage/chart_info/forum/delete',params)
 	}
 	
 }

+ 43 - 3
src/api/modules/chartRelevanceApi.js

@@ -253,6 +253,16 @@ export default{
     return http.post('/datamanage/multiple_graph/preview_cure',params)
   },
 
+  /**
+	 * 设置图表对应版本信息
+	 * @param {*} params 
+	 * ChartInfoId ChartName
+	 * @returns 
+	 */
+	setChartLangInfo: params => {
+		return http.post('/correlation/chart_info/base/edit',params)
+	},
+
 }
 
 /* 拟合方程曲线 */
@@ -452,7 +462,17 @@ export const fittingEquationInterface = {
    */
   editChartEn: params => {
     return http.post('/line_equation/chart_info/en/edit',params)
-  }
+  },
+
+  /**
+	 * 设置图表对应版本信息
+	 * @param {*} params 
+	 * ChartInfoId ChartName
+	 * @returns 
+	 */
+	setChartLangInfo: params => {
+		return http.post('/line_equation/chart_info/base/edit',params)
+	},
 }
 
 /* 统计特征曲线 */
@@ -693,7 +713,17 @@ export const statisticFeatureInterface = {
      */
     previewSpline: params => {
       return http.post('/line_feature/preview_cure',params)
-    }
+    },
+    
+    /**
+     * 设置图表对应版本信息
+     * @param {*} params 
+     * ChartInfoId ChartName
+     * @returns 
+     */
+    setChartLangInfo: params => {
+      return http.post('/line_feature/chart_info/base/edit',params)
+    },
 }
 
 /* 跨品种分析 */
@@ -1027,5 +1057,15 @@ export const crossVarietyInterface = {
      */
     saveChart: params => {
       return http.post('/cross_variety/chart_info/save',params)
-    }
+    },
+
+    /**
+     * 设置图表对应版本信息
+     * @param {*} params 
+     * ChartInfoId ChartName TagList VarietyList
+     * @returns 
+     */
+    setChartLangInfo: params => {
+      return http.post('/cross_variety/chart_info/base/edit',params)
+    },
 }

+ 10 - 0
src/api/modules/classifyApi.js

@@ -14,4 +14,14 @@ export const classifyPermissionInterface={
      editClassifyPermission:params=>{
 	    return http.post('/classify/permission/edit',params)
 	},
+
+	// 拖动排序
+	moveSort:params=>{
+		return http.post('/classify/move',params)
+	},
+
+	//启用\禁用
+	enableSet:params=>{
+		return http.post('/classify/enabled/set',params)
+	},
 }

+ 15 - 2
src/api/modules/classifyEnApi.js

@@ -16,7 +16,7 @@ export const classifyList = params => {
  * @returns 
  */
 export const classifyAdd = params => {
-  return http.get('/english_report/classify/add',params)
+  return http.post('/english_report/classify/add',params)
 }
 
 /**
@@ -25,7 +25,7 @@ export const classifyAdd = params => {
  * @returns 
  */
 export const classifyEdit = params => {
-  return http.get('/english_report/classify/edit',params)
+  return http.post('/english_report/classify/edit',params)
 }
 
 /**
@@ -53,3 +53,16 @@ export const setClassifyVariety=params=>{
   return http.post('/english_classify/permission/edit',params)
 }
 
+/**
+ * 拖动排序
+ */
+export const moveSort=params=>{
+  return http.post('/english_report/classify/move',params)
+}
+
+//启用\禁用
+export const enableSet=params=>{
+  return http.post('/english_report/classify/enabled/set',params)
+}
+
+

+ 63 - 1
src/api/modules/dataSource.js

@@ -66,8 +66,70 @@ const apiDataSource={
 
     
 
+}
+
+//自有数据
+const selfDataInterface = {
+    /**
+     * 来源列表
+     * @param {*} params 
+     * @returns 
+     */
+    getSourceList: params => {
+        return http.get('/datamanage/business_data/source/list')
+    },
+
+    /**
+     * 指标数据
+     * @param {*} params 
+     * PageSize CurrentIndex Frequency Keywords Source
+     * @returns 
+     */
+    getEdbList: params => {
+        return http.get('/datamanage/business_data/list',params)
+    },
+    
+    /**
+     * 校验指标是否存在
+     * @param {*} params 
+     * PageSize CurrentIndex Frequency Keywords Source ListAll IndexCodes
+     * @returns 
+     */
+    checkEdb: params => {
+        return http.post('/datamanage/business_data/add_check',params)
+    },
+
+    /**
+     * 校验指标名称
+     * @param {*} parmas 
+     * @returns 
+     */
+    checkName: parmas => {
+        return http.post('/datamanage/business_data/name_check',parmas)
+    },
+
+    /**
+     * 添加入指标库
+     * @param {*} parmas 
+     * [{Source EdbCode EdbName Frequency Unit ClassifyId}]
+     * @returns 
+     */
+    batchSaveEdb: parmas => {
+        return http.post('/datamanage/business_data/batch_add',parmas)
+    },
+
+    /**
+     * 数据列表
+     * @param {*} parmas 
+     * PageSize CurrentIndex IndexCode
+     * @returns 
+     */
+    getDataList: parmas => {
+        return http.get('/datamanage/business_data/data/list',parmas)
+    }
 }
 
 export {
-    apiDataSource
+    apiDataSource,
+    selfDataInterface
 }

+ 11 - 1
src/api/modules/futuresBaseApi.js

@@ -314,6 +314,16 @@ export default {
   */
   getChartBasicInfo: params => {
     return http.get('/future_good/chart_info/base_detail/from_unique_code',params)
-  }
+  },
+
+  /**
+	 * 设置图表对应版本信息
+	 * @param {*} params 
+	 * ChartInfoId ChartName ChartEdbInfoList
+	 * @returns 
+	 */
+	setChartLangInfo: params => {
+		return http.post('/future_good/chart_info/base/edit',params)
+	},
   
 }

+ 38 - 2
src/api/modules/oldApi.js

@@ -37,7 +37,9 @@ import http from "@/api/http.js"
  const banneradd = params => { return http.post('/banner/add',params); };  //新增banner
  const banneredit = params => { return http.post('/banner/edit',params); };  //编辑banner
  const bannerdelete = params => { return http.post('/banner/delete',params); };  //删除banner
- const getUserUuid=()=>{return http.get('/sysuser/uuid',{})}//获取用户uuid
+ const getUserUuid=()=>{return http.get('/sysuser/uuid',{})};//获取用户uuid
+ const userLogOut = params => { return http.post('/sysuser/logout',params); };  //系统用户退出登录,用于后端清空Token
+
 
 /* ppt */
 const pptlist = params => { 
@@ -293,6 +295,16 @@ const setchapterTPermission=params=>{
 	return http.post('/report/chapter_type/auth_setting',params)
 }
 
+//章节启用\禁用
+const setChapterEnable=params=>{
+	return http.post('/report/chapter_type/enabled/set',params)
+}
+
+//章节拖动排序
+const setChapterSort=params=>{
+	return http.post('/report/chapter_type/move',params)
+}
+
 // 同时推送客群和模板消息
 const reportMessageSend=params=>{
 	return http.post('/report/sendMsg',params)
@@ -316,6 +328,24 @@ const getPublicSettingsApi = params => {
 	return http.get('/system/config')
 }
 
+/**
+ * 真·获取公共配置
+ * @param {*} params 
+ */
+const getRealPublicSettings = params => {
+	return http.get('/sysuser/public_config')
+}
+
+// 下载文件公共接口
+const apiDownloadResource=params=>{
+	return http.get('/resource/file/download',params,'blob')
+}
+
+// 中英文研报、智能研报转pdf和长图
+const report2PdfImg=params=>{
+	return http.post('/smart_report/get_pdf_url',params)
+}
+
 export {
 	userLogin,
 	modifyPwd,
@@ -390,5 +420,11 @@ export {
 	getUserUuid,
 	getBusinessCode,
 	getPublicSettingsApi,
-	recordActiveLogin
+	recordActiveLogin,
+	setChapterEnable,
+	setChapterSort,
+	getRealPublicSettings,
+	userLogOut,
+	apiDownloadResource,
+	report2PdfImg
 }

+ 7 - 2
src/api/modules/reportEnApi.js

@@ -142,12 +142,17 @@ export const saveCustomEamil=params=>{
 }
 
 /**
- * 点击量
+ * 点击量 PV
  */
 export const PVDetailList=params=>{
 	return http.get('/english_report/email/pv_list',params)
 }
-
+/**
+ * UV
+ */
+export const UVDetailList=params=>{
+	return http.get('/english_report/email/uv_list',params)
+}
 /**
  * 批量发送邮件
  */

+ 68 - 5
src/api/modules/reportVariety.js

@@ -9,17 +9,24 @@ export const reportVarietyENInterence={
     },
     //获取过滤后的品种列表数据
     filterVarietyOpts:params=>{
+        // return http.get('/en_permission/list',{Enabled:1})
         return new Promise((resolve,reject)=>{
             http.get('/en_permission/list',params).then(res=>{
                 if(res.Ret===200){
-                    const arr=res.Data||[]
-                    arr.forEach(e => {
-                        e.Child&&e.Child.forEach(_e=>{
+                    let temArr=res.Data||[]
+                    temArr=temArr.filter(e=>e.Child&&e.Enabled===1)
+                    
+                    temArr.forEach(e => {
+                        e.Child=e.Child.filter(_e=>_e.Enabled===1)
+                    });
+                    temArr.forEach(e => {
+                        e.Child.forEach(_e=>{
                             delete _e.Child
                         })
                     });
-                    const resArr=arr.filter(e=>e.Child&&e.Child.length>0)
-                    resolve(resArr)
+                    resolve({Ret:200,Data:temArr})
+                }else{
+                    resolve(res)
                 }
             })
         })
@@ -39,6 +46,62 @@ export const reportVarietyENInterence={
     //删除品种
     delVariety:params=>{
         return http.post('/en_permission/remove',params)
+    },
+    sortVariety:params=>{
+        return http.post('/en_permission/move',params)
+    },
+    // 禁用\启用
+    setEnable:params=>{
+        return http.post('/en_permission/enabled/set',params)
     }
 
+}
+
+//中文品种
+export const reportVarietyInterence={
+    // 品种列表
+    varietyList:params=>{
+        return http.get('/permission/list',params)
+    },
+    //获取过滤后的品种列表数据
+    filterVarietyOpts:params=>{
+        // return http.get('/custom/permission/list',params)
+        // 后端给的接口格式有问题 算了 自己通过品种列表判断过滤下把
+        //将禁用的去掉
+        return new Promise((resolve,reject)=>{
+            http.get('/permission/list',params).then(res=>{
+                if(res.Ret===200){
+                    let temArr=res.Data||[]
+                    temArr=temArr.filter(e=>e.Child&&e.Enabled===1)
+                    
+                    temArr.forEach(e => {
+                        e.Child=e.Child.filter(_e=>_e.Enabled===1)
+                    });
+                    temArr.forEach(e => {
+                        e.Child.forEach(_e=>{
+                            delete _e.Child
+                        })
+                    });
+                    resolve({Ret:200,Data:temArr})
+                }else{
+                    resolve(res)
+                }
+            })
+        })
+    },
+    //新增品种
+    addVariety:params=>{
+        return http.post('/permission/add',params)
+    },
+    //编辑品种
+    editVariety:params=>{
+        return http.post('/permission/edit',params)
+    },
+    sortVariety:params=>{
+        return http.post('/permission/move',params)
+    },
+    // 禁用\启用
+    setEnable:params=>{
+        return http.post('/permission/enabled/set',params)
+    }
 }

+ 239 - 1
src/api/modules/semanticsApi.js

@@ -277,6 +277,244 @@ const semanticInterface = {
   }
 }
 
+//语音识别
+const asrInterface = {
+  /**
+   * 获取目录的列表
+   * @param {} 
+   * ParentId
+   */
+  getCatalogueList:params=>{
+    return http.get('/speech_recognition/menu/list',params)
+  },
+  /** 
+   * 获取目录的目录树
+   * @param {} 
+   * ParentId
+  */
+  getCatalogueTree:params=>{
+    return http.get('/speech_recognition/menu/tree',params)
+  },
+  /**
+   * 新增目录
+   * @param {} 
+   * ParentId MenuName
+  */ 
+  addCatalogue:params=>{
+    return http.post('/speech_recognition/menu/add',params)
+  }, 
+  /**
+   * 编辑目录
+   * @param {} 
+   * MenuId MenuName
+  */ 
+  editCatalogue:params=>{
+    return http.post('/speech_recognition/menu/edit',params)
+  },
+  /**
+   * 删除目录-检查
+   * @param {} 
+   * MenuId
+  */ 
+  removeCatalogueCheck:params=>{
+    return http.post('/speech_recognition/menu/remove_check',params)
+  },
+  /**
+   * 删除目录
+   * @param {} 
+   * MenuId
+  */ 
+  removeCatalogue:params=>{
+    return http.post('/speech_recognition/menu/remove',params)
+  },
+  /**
+   * 移动目录/文件
+   * @param {} 
+   * MenuId ParentMenuId PrevMenuId NextMenuId SpeechId PrevSpeechId NextSpeechId
+  */ 
+  moveCatalogueEle:params=>{
+    return http.post('/speech_recognition/menu/move',params)
+  },
+  /**
+   * 获取标签的目录列表
+   * @param {} ParentId
+  */
+  getTagCatalogueList:params=>{
+    return http.get('/speech_recognition/tag/menu/list',params)
+  },
+  /**
+   * 新增标签目录
+   * @param {} 
+   * ParentId MenuName
+  */ 
+  addTagCatalogue:params=>{
+    return http.post('/speech_recognition/tag/menu/add',params)
+  }, 
+  /**
+   * 编辑标签目录
+   * @param {} 
+   * MenuId MenuName
+  */ 
+  editTagCatalogue:params=>{
+    return http.post('/speech_recognition/tag/menu/edit',params)
+  },
+  /**
+   * 删除标签目录-检查
+   * @param {} 
+   * MenuId
+  */ 
+  removeTagCatalogueCheck:params=>{
+    return http.post('/speech_recognition/tag/menu/remove_check',params)
+  },
+  /**
+   * 删除标签目录
+   * @param {} 
+   * MenuId
+  */ 
+  removeTagCatalogue:params=>{
+    return http.post('/speech_recognition/tag/menu/remove',params)
+  },
+  /**
+   * 移动标签目录/标签
+   * @param {} 
+   * MenuId ParentMenuId PrevMenuId NextMenuId TagId PrevTagId NextTagId
+  */ 
+  moveTagCatalogueEle:params=>{
+    return http.post('/speech_recognition/tag/menu/move',params)
+  },
+  /**
+   * 获取标签的目录列表
+  */
+  getTagTree:params=>{
+    return http.get('/speech_recognition/tag/menu/tree',params)
+  },
+  /**
+   * 获取标签列表
+   * Keywords
+  */
+  getTagsList:params=>{
+    return http.get('/speech_recognition/tag/list',params)
+  },
+  /**
+   * 新增标签
+   * @param {} 
+   * MenuId TagName
+  */ 
+  addTag:params=>{
+    return http.post('/speech_recognition/tag/add',params)
+  }, 
+  /**
+   * 编辑标签
+   * @param {} 
+   * TagId TagName
+  */ 
+  editTag:params=>{
+    return http.post('/speech_recognition/tag/edit',params)
+  },
+  /**
+   * 删除标签-检查
+   * @param {} 
+   * TagId
+  */ 
+  removeTagCheck:params=>{
+    return http.post('/speech_recognition/tag/remove_check',params)
+  },
+  /**
+   * 删除标签
+   * @param {} 
+   * TagId
+  */ 
+  removeTag:params=>{
+    return http.post('/speech_recognition/tag/remove',params)
+  },
+  /**
+   * 语音识别列表
+   * @param {} 
+   * 
+  */
+  getSpeechList:params=>{
+    return http.get('/speech_recognition/list',params)
+  },
+  /**
+   * 语音识别-待转换列表
+  */
+  getConvertList:params=>{
+    return http.get('/speech_recognition/convert_list',params)
+  },
+  /**
+   * 校验文件是否重命
+   * @param {} 
+   * MenuId Files:[{FileName,ResourceUrl}] 
+  */ 
+  speechFlieRepetitionCheck:params=>{
+    return http.post('/speech_recognition/convert/check_name',params)
+  },
+  /**
+   * 新建 - 批量转写
+   * @param {} 
+   * MenuId Files:[{FileName,ResourceUrl}] 
+  */ 
+  speechTransfer:params=>{
+    return http.post('/speech_recognition/convert',params)
+  },
+  /**
+   * 获取详情
+   * @param {} 
+   * SpeechRecognitionId
+  */ 
+  getSpeechDetail:params=>{
+    return http.get('/speech_recognition/detail',params)
+  },
+  /**
+   * 重命名
+   * @param {} 
+   * SpeechRecognitionId FileName
+  */ 
+  speechRename:params=>{
+    return http.post('/speech_recognition/rename',params)
+  },
+  /**
+   * 导出 
+   * /speech_recognition/export
+   * SpeechRecognitionId
+   * ExportType 导出类型:1-txt;2-doc;3-pdf 
+   * Timestamp:boolean
+  */ 
+  /**
+   * 删除
+   * @param {} 
+   * SpeechRecognitionId
+  */ 
+  speechRemove:params=>{
+    return http.post('/speech_recognition/remove',params)
+  },
+  /**
+   * 保存标签
+   * @param {} 
+   * SpeechRecognitionId
+   * TagIds:Array
+  */ 
+  speechSaveTag:params=>{
+    return http.post('/speech_recognition/save_tag',params)
+  },
+  /**
+   * 删除音视频
+   * @param {} 
+   * SpeechRecognitionId
+  */ 
+  speechMediaRemove:params=>{
+    return http.post('/speech_recognition/remove_file',params)
+  },
+  /**
+   * 保存
+   * @param {} 
+   * SpeechRecognitionId FileName TagIds:[number] Contents:[{SpeechRecognitionContentId,Content}] 
+  */ 
+  speechSave:params=>{
+    return http.post('/speech_recognition/save',params)
+  },
+}
+
 
 
-export {tagInterface,documentInterface,semanticInterface}
+export {tagInterface,documentInterface,semanticInterface,asrInterface}

+ 120 - 0
src/api/modules/setApi.js

@@ -512,6 +512,126 @@ const operateAuthInterface = {
 	 */
 	edbNoAuthBatchSet: params => {
 		return http.post('/datamanage/edb_no_permission/batch_add',params)
+	},
+
+	/**
+	 * 全量资产转移
+	 * @param {*} params Source NewUserId OldUserId
+	 */
+	transferAllData: params => {
+		return http.post('/datamanage/edb_chart/all/change_user',params)
+	},
+
+	/**
+	 * 获取用户的资产数量统计
+	 * @param {*} params UserId
+	 * @returns 
+	 */
+	getUserStatistic: params => {
+		return http.get('/datamanage/edb_chart/count',params)
+	},
+
+	/**
+	 * 设置涉密分类
+	 * @param {*} params 
+	 * "Source": 3,
+		"SubSource": 0,
+		"ClassifyIdList": []
+	 * @returns 
+	 */
+	setPermissionClassify: params => {
+		return http.post('/datamanage/edb_chart/classify/permission/is_permission/set',params)
+	},
+
+	/**
+	 * 设置分类权限
+	 * @param {*} params 
+	 * Source SubSource UserList[] ClassifyIdList[]
+	 * @returns 
+	 */
+	setClassifyAuth: params => {
+		return http.post('/datamanage/edb_chart/classify/permission/set',params)
+	},
+
+	/**
+	 * 设置数据权限
+	 * @param {*} params  
+	 * Source 
+	 * SubSource 
+	 * UserId 
+	 * DataIdList 
+	 * NoDataIdList 
+	 * UserList 
+	 * IsSelectAll 
+	 * ClassifyId 
+	 * Keyword
+	 */
+	setDataAuth: params => {
+		return http.post('/datamanage/edb_chart/permission/set',params)
+	},
+
+	/**
+	 * 根据用户获取权限分类
+	 * @param {*} params Source SubSource UserId
+	 * @returns 
+	 */
+	getSecretClassifyByUser: params => {
+		return http.get('/datamanage/edb_chart/classify/permission/show_by_user',params)
+	},
+	
+	/**
+	 * 根据数据获取权限用户
+	 * @param {*} params  Source SubSource DataId
+	 * @returns 
+	 */
+	getAuthUserByData: params => {
+		return http.get('/datamanage/edb_chart/permission/show_by_data',params)
+	},
+
+	/**
+	 * 获取消息列表
+	 * @param {*} params 
+	 * @returns 
+	 */
+	getNoticeList: params => {
+		return http.get('/datamanage/message/list',params)
+	},
+
+	/**
+	 * 标记已读
+	 * @param {*} params MessageId
+	 * @returns 
+	 */
+	redMessage: params => {
+		return http.post('/datamanage/message/read',params)
+	},
+
+	/**
+	 * 消息详情
+	 * @param {*} params 
+	 * MessageId Source SubSource PageSize CurrentIndex
+	 * @returns 
+	 */
+	getNoticeDetail: params => {
+		return http.get('/datamanage/message/detail',params)
+	},
+
+	/**
+	 * 获取所有私密分类
+	 * @param {*} params Source SubSource
+	 * @returns 
+	 */
+	getSecretClassify: params => {
+		return http.get('/datamanage/edb_chart/classify/secret',params)
+	},
+
+	/**
+	 * 消息通知 所有未读
+	 * @param {*} params 
+	 * @returns 
+	 */
+	getAllUnread: params => {
+		return http.get('/message/unread/num')
 	}
 }
 

+ 74 - 6
src/api/modules/sheetApi.js

@@ -141,6 +141,67 @@ export const uploadImg = params => {
   return http.get('/datamanage/excel_info/table_data',params)
 }
 
+// 平衡表获取子表列表
+export const getBalanceChildTable=params=>{
+	return http.get('/datamanage/excel_info/child_table',params)
+}
+
+// 平衡表修改子表名称
+export const balanceChildTableRename=params=>{
+	return http.post('/datamanage/excel_info/rename',params)
+}
+
+//获取平衡表协作人数据
+export const getBalanceTableWorker=params=>{
+	return http.get('/datamanage/excel_info/worker',params)
+}
+
+//设置平衡表协作人数据
+export const setBalanceTableWorker=params=>{
+	return http.post('/datamanage/excel_info/worker/save',params)
+}
+
+//获取平衡表中图表数据
+export const getBalanceChartData=params=>{
+	return http.get('/datamanage/excel_info/balance/chart_list',params)
+}
+
+//平衡表中新增图表数据
+export const addBalanceChart=params=>{
+	return http.post('/datamanage/excel_info/balance/chart_add',params)
+}
+
+//平衡表中编辑图表数据
+export const editBalanceChart=params=>{
+	return http.post('/datamanage/excel_info/balance/chart_edit',params)
+}
+
+//平衡表中删除图表
+export const delBalanceChart=params=>{
+	return http.post('/datamanage/excel_info/balance/chart_del',params)
+}
+
+//平衡表季节图预览 获取数据
+export const balanceSeasonChart=params=>{
+	return http.post('/datamanage/excel_info/balance/chartLegend/preview',params)
+}
+
+//平衡表获取版本列表
+export const balanceTableVersion=params=>{
+	return http.get('/datamanage/excel_info/balance/version',params)
+}
+
+//平衡表存为静态表
+export const balanceTableSaveStatic=params=>{
+	return http.post('/datamanage/excel_info/balance/static/add',params)
+}
+
+//平衡表静态表重命名
+export const balanceStaticTableRename=params=>{
+	return http.post('/datamanage/excel_info/balance/version/modify',params)
+}
+
+
 /* =====自定义表格====== */
 
 /**
@@ -219,6 +280,15 @@ export const refreshCustomSheet = params => {
 	return http.get('/datamanage/excel_info/table/refresh',params)
 }
 
+/**
+ * 表格 获取原始指标来源
+ * @param {*} params  EdbInfoId
+ * @returns  
+ */
+export const getEdbBaseSource = params => {
+	return http.get('/datamanage/excel_info/get_edb_source',params)
+}
+
 /**
  * 下载excel
  * @param {*} params ExcelInfoId authorization
@@ -291,9 +361,8 @@ export const getMixedCalculateData = params => {
  * 表格一键刷新
  * @param {Object} params
  * @param {Array} params.ExcelCodes 表格唯一编码
- * @param {String} params.Source 来源,枚举值:report、english_report、smart_report
- * @param {Number} params.ReportId 报告id
- * @param {Number} params.ReportChapterId 章节id 非章节传0
+ * @param {String} params.Source 来源,枚举值:report、english_report、smart_report、ppt、en_ppt
+ * @param {Number} params.PrimaryId 报告id/pptId
  */
 export const refreshSheet = (params)=>{
     return http.post('/datamanage/excel_info/table/batch_refresh',params)
@@ -301,9 +370,8 @@ export const refreshSheet = (params)=>{
 /**
  * 获取表格刷新结果
  * @param {Object} params
- * @param {String} params.Source 来源,枚举值:report、english_report、smart_report
- * @param {Number} params.ReportId 报告id
- * @param {Number} params.ReportChapterId 章节id 非章节传0
+ * @param {String} params.Source 来源,枚举值:report、english_report、smart_report、ppt、en_ppt
+ * @param {Number} params.PrimaryId 报告id/pptId
  */
 export const getRefreshResult = (params)=>{
     return http.post('/datamanage/excel_info/table/batch_refresh/result',params)

+ 7 - 4
src/api/modules/smartReport.js

@@ -88,11 +88,14 @@ const apiSmartReport={
         return http.post('/smart_report/resource/add',params)
     },
 
-    //资源库图片重命名
-    imgReourceRename:params=>{
-        return http.post('/smart_report/resource/rename',params)
+    // //资源库图片重命名
+    // imgReourceRename:params=>{
+    //     return http.post('/smart_report/resource/rename',params)
+    // },
+    //资源库图片编辑
+    imgReourceEdit:params=>{
+        return http.post('/smart_report/resource/edit',params)
     },
-
     //资源库图片删除
     imgReourceDel:params=>{
         return http.post('/smart_report/resource/remove',params)

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

@@ -910,7 +910,105 @@ const coalWordInterface={
 		return http.get('/entry/data/mtjh/frequency',params)
 	},
 }
+/* 彭博数据源 */
+const bloombergInterface={
+    /**
+     * 数据列表
+     * @param {Object} params 
+     * @param {Number} params.PageSize
+     * @param {Number} params.CurrentIndex
+     * @param {String} params.Frequency
+     * @param {String} params.Keywords
+     * @param {Boolean} params.ListAll
+     * @param {Number} params.SortField
+     * @param {Number} params.SortRule
+     * @returns 
+     */
+    getTableList:params=>{
+        return http.get('/datamanage/bloomberg_source/list',params)
+    },
+    /**
+     * 指标重名校验
+     * @param {Object[]} params
+     * @param {String} params[].EdbCode //指标编码
+     * @param {String} params[].EdbName //指标名称
+     * @returns 
+     */
+    edbNameCheck:params=>{
+        return http.post('/datamanage/bloomberg_source/name_check',params)
+    },
+    /**
+     * 添加指标校验
+     * @param {Object} params 
+     * @param {Object} params.Frequency
+     * @param {Object} params.Keywords
+     * @param {Object} params.SortField
+     * @param {Object} params.SortRule
+     * @param {Boolean} params.ListAll
+     * @param {String[]} params.IndexCodes
+     * @returns 
+     */
+    edbAddCheck:params=>{
+        return http.post('/datamanage/bloomberg_source/add_check',params)
+    },
+    /**
+     * 批量新增指标
+     * @param {Object[]} params 
+     * @param {String} params[].EdbCode
+     * @param {String} params[].EdbName
+     * @param {String} params[].Frequency
+     * @param {String} params[].Unit
+     * @param {Number} params[].ClassifyId
+     * @returns 
+     */
+    edbBatchAdd:params=>{
+        return http.post('/datamanage/bloomberg_source/batch_add',params)
+    },
 
+}
+/* 卓创资讯数据源 */
+const zczxInterface={
+	/**
+	 * 分类列表
+	 */
+	classifyList:params=>{
+			return http.get('/data_source/sci99/classify/list',params)
+	},
+	/**
+	 * 数据列表
+	 * @param {String} ClassifyId
+	 * @returns 
+	 */
+	dataList:params=>{
+			return http.get('/data_source/sci99/index/data',params)
+	}
+}
+
+/* CCF化纤信息 */
+const ccfDataInterface={
+	/**
+	 * 分类列表
+	 * @param {} params 
+	 * @returns 
+	 */
+	classifyList: params => {
+		return http.get('/datamanage/ccf/classify',params);
+	},
+	/**
+	 * 获取指标列表详情
+	 */
+	dataList: params => {
+		return http.get('/datamanage/ccf/index/data',params);
+	},
+	//单个指标数据
+	getTargetDataList:params=>{
+		return http.get('/datamanage/ccf/single_data',params);
+	},
+	// 搜索
+	getTargetListByName:params=>{
+		return http.get('/datamanage/ccf/search_list',params);
+	}
+}
 export { 
 	lzDataInterface,
 	glDataInterface,
@@ -926,5 +1024,8 @@ export {
   fwmtInterface,
 	guangqiInterface,
 	icpiInterface,
-	coalWordInterface
+	zczxInterface,
+	coalWordInterface,
+	bloombergInterface,
+	ccfDataInterface
 }

+ 100 - 0
src/api/modules/toolBoxApi.js

@@ -11,4 +11,104 @@ export const ToolBoxInterface = {
     getSheetDetail:(params)=>{
         return http.get('/meeting_probabilities/detail',params)
     }
+}
+
+//外汇日历表
+export const ForexCalendarInterface = {
+    /**
+     * 获取品种列表
+     * @param {*} params 
+     * @returns [{ChartPermissionId,ChartPermissionName }]
+     */
+    getPermissionList:(params)=>{
+        return http.get("/fe_calendar/permission/list",params)
+    },
+    /**
+     * 获取日期范围内事项列表
+     * @param {*} params 
+     * @param {Number} params.ChartPermissionId 品种ID
+     * @param {String} params.StartDate 起始时间
+     * @param {String} params.EndDate 终止时间
+     * @returns [{
+     *      Date:"2024-03-28",//事项日期
+     *      Matters:[],//事项详情
+     * }]
+     */
+    getCalendarEventList:(params)=>{
+        return http.get("/fe_calendar/matter/list?",params)
+    },
+    /**
+     * 获取指定日期事项列表
+     * @param {Object} params 
+     * @param {Number} params.ChartPermissionId 品种ID
+     * @param {String} params.MatterDate "2024-03-29" 指定日期
+     * @returns [{ //事项详情
+     *      "FeCalendarMatterId": 2, //事项ID
+            "ChartPermissionId": 3, //品种ID
+            "ChartPermissionName": "原油", //品种名称
+            "MatterDate": "2024-03-29", //事项日期
+            "Title": "指标B0002", //事项标题
+            "MatterType": 2, //事项类型:1-自定义事项;2-基础指标;3-预测指标
+            "EdbInfoId": 104507, //指标ID
+            "EdbUniqueCode": "c7959050a204e7479c392d11d1b3b88e", //指标唯一编码
+            "EdbCode": "C2403297186", //指标编码
+            "FontColor": "#000fff", //字体颜色
+            "FillingColor": "#f28500", /填充颜色
+            "FontBold": 1, //字体加粗:0-否;1-是
+            "Sort": 1 //排序
+     * }]
+     */
+    getDailyEventList:(params)=>{
+        return http.get("/fe_calendar/matter/detail",params)
+    },
+    /**
+     * 保存指定日期的事项
+     * @param {Object} params //品种ID
+     * @param {Number} params.ChartPermissionId //事项日期
+     * @param {String} params.MatterDate //事项列表
+     * @param {Object[]} params.Matters
+     * @param {Number} params.Matters.FeCalendarMatterId //事项ID,大于0为更新
+     * @param {String} params.Matters.Title //事项标题
+     * @param {Number} params.Matters.MatterType //事项类型:1-自定义事项;2-基础指标;3-预测指标
+     * @param {Number} params.Matters.EdbInfoId //指标ID,类型为2/3时必填
+     * @param {String} params.Matters.EdbUniqueCode //指标唯一编码,类型为2/3时必填
+     * @param {String} params.Matters.EdbCode //指标编码,类型为2/3时必填
+     * @param {String} params.Matters.FontColor //字体颜色
+     * @param {String} params.Matters.FillingColor //填充颜色
+     * @param {Number} params.Matters.FontBold //字体加粗:0-否;1-是
+     * @param {Number} params.Matters.Sort //排序
+     * @returns 
+     */
+    saveDailyEvents:(params)=>{
+        return http.post("/fe_calendar/matter/save",params)
+    },
+    /**
+     * 搜索指标/预测指标库
+     * @param {*} params 
+     * @param {String} params.KeyWord
+     * @param {Number} params.CurrentIndex
+     * @returns 
+     */
+    searchEdbInfo:(params)=>{
+        return http.get("/datamanage/edb_info/filter_by_es/all",params)
+    }
+}
+
+//CCF化纤信息装置
+export const CCFStockInterface = {
+    /**
+     * 获取分类列表
+     */
+    classifyList:()=>{
+        return http.get("/datamanage/ccf/stock/classify")
+    },
+    /**
+     * 获取数据详情
+     * @param {*} params 
+     * @param {Number} params.ClassifyId 分类Id
+     * @param {String} params.TableDate 时间
+     */
+    excelDataDetail:(params)=>{
+        return http.get("/datamanage/ccf/stock/table",params)
+    }
 }

BIN
src/assets/icons/menu/eta_forum.png


BIN
src/assets/img/asr.png


BIN
src/assets/img/document_m/audio-backward.png


BIN
src/assets/img/document_m/audio-forward.png


BIN
src/assets/img/document_m/audio-start.png


BIN
src/assets/img/document_m/audio-stop.png


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


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


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


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


BIN
src/assets/img/filter.png


BIN
src/assets/img/icons/arrow_black_up.png


BIN
src/assets/img/icons/arrow_left_black.png


BIN
src/assets/img/icons/changeLang01.png


BIN
src/assets/img/icons/close.png


BIN
src/assets/img/icons/copy-active.png


BIN
src/assets/img/icons/copy.png


BIN
src/assets/img/icons/edb-icon.png


BIN
src/assets/img/icons/edit_icon01.png


BIN
src/assets/img/icons/eyes-hide-active.png


BIN
src/assets/img/icons/eyes-hide.png


BIN
src/assets/img/icons/eyes-show-active.png


BIN
src/assets/img/icons/eyes-show.png


BIN
src/assets/img/icons/layout-option-icon.png


BIN
src/assets/img/icons/lock_big.png


BIN
src/assets/img/icons/lock_black.png


BIN
src/assets/img/icons/update_to_forum.png


BIN
src/assets/img/icons/upload_to_forum.png


BIN
src/assets/img/icons/variety_add.png


BIN
src/assets/img/icons/variety_name_edit.png


BIN
src/assets/img/icons/variety_set.png


BIN
src/assets/img/icons/withdraw_form_forum.png


BIN
src/assets/img/logo_mobile.png


BIN
src/assets/img/more.png


BIN
src/assets/img/ppt_m/list_bg.png


BIN
src/assets/img/ppt_m/move_ico2.png


BIN
src/assets/img/sand_new/move.png


BIN
src/assets/img/set_m/no_auth.png


BIN
src/assets/img/tag-gray.png


BIN
src/assets/img/tag.png


+ 154 - 0
src/components/antvVueComponents/tooltipCom.vue

@@ -0,0 +1,154 @@
+<template>
+  <div class="container" ref="container" @mouseover="nodeMouseEnter" @mouseout="nodeMouseOut"
+  @click="nodeClick">
+    <el-tooltip :content="currentLang==='en'?(data.RuleTitleEn||data.RuleTitle):data.RuleTitle" placement="top" ref="antvTooltip"
+    class="container-input">
+      <span ref="containerText">{{currentLang==='en'?(data.EdbNameEn||data.EdbName):data.EdbName}}</span> 
+    </el-tooltip>
+    <i :class="data.fold?'el-icon-circle-plus':'el-icon-remove'" v-if="!data.isLeaf"
+    class="fold-icon" @click="flodApi" v-show="show"></i>
+  </div>
+</template>
+
+<script>
+
+export default {
+  name:"toolTipCom",
+  inject: ["getGraph", "getNode"],
+  data() {
+    return {
+      node:{},
+      data:{
+        fold:false,
+        routeQuery:{}
+      },
+      graph:{},
+      show:false
+    };
+  },
+  props:{
+    params:{
+      type:Object,
+      default:()=>{
+        return {
+          stopNodeClick:false
+        }
+      }
+    }
+  },
+  mounted() {
+    this.initNode()
+  },
+  computed: {
+    currentLang() {
+      return this.$store.state.lang
+    }
+  },
+  methods: {
+    initNode(){
+      this.node = this.getNode();
+      this.graph= this.getGraph()
+      this.node.data = this.node.data?{...this.data,...this.node.data}:this.data
+      this.data = this.node.data
+      
+      let {style} = this.data
+      this.initStyle(style)
+
+    },
+    initStyle(style){
+      // !important 是有的节点 :hover不变色
+      if(style){
+        // 背景色
+        if(style.backgroundColor && style.backgroundColor.indexOf("!important")!=-1){
+          let value = style.backgroundColor.split("!")[0]
+          this.$refs.containerText.style.setProperty('background-color',value,'important')
+        }else{
+          this.$refs.container.style.backgroundColor = style.backgroundColor?style.backgroundColor:
+                                                        this.data.isRoot?'#0052d9': "#f2f6fa"
+        }
+        // 字体颜色
+        if(style.color && style.color.indexOf("!important")!=-1){
+          let value = style.color.split("!")[0]
+          this.$refs.containerText.style.setProperty('color',value,'important')
+        }else{
+          this.$refs.container.style.color = style.color?style.color:
+                                              this.data.isRoot?'#ffffff': "#000000"
+        }
+        this.$refs.containerText.style.color = style.color
+      }
+    },
+    flodApi(event){
+      event.stopPropagation()
+      const succ = this.graph.getSuccessors(this.node)
+      if (succ) {
+        succ.forEach((node,index) => {
+          node.setVisible(this.data.fold)
+          if(this.data.fold){
+            node.toBack()
+            requestAnimationFrame(()=>{
+              let edge = this.graph.getIncomingEdges(node) || []
+              edge[0].toBack()
+            })
+          }
+          node.data.fold=!this.data.fold
+        })
+      }
+      this.data.fold=!this.data.fold
+    },
+    nodeMouseEnter(){
+      this.show=true
+    },
+    nodeMouseOut(){
+      this.show=false
+    },
+    nodeClick(){
+      if(this.params.stopNodeClick) return 
+      //EdbInfoType 1:跳预测指标详情 0:跳指标库详情
+      const { ClassifyId, UniqueCode, EdbInfoId, EdbInfoType } = this.data.routeQuery
+      let { href } =
+      this.$router.resolve({ path: EdbInfoType === 1 ? '/predictEdb' : '/database', query: { code: UniqueCode, id:
+      EdbInfoId, classifyId: ClassifyId } });
+      window.open(href, '_blank');
+    }
+  },
+};
+</script>
+<style lang="scss" scoped>
+.container{
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: 20px;
+  height: 100%;
+  width: 100%;
+  box-sizing: border-box;
+  background-color: #0052d9;
+  box-shadow: 0 1px 5px rgba(0,0,0,0.15);
+  display: flex;
+  cursor: pointer;
+  position: relative;
+  border-radius: 4px;
+  .container-input{
+    text-align: center;
+    font-size: 16px;
+    color: #ffffff;
+    font-weight: 400;
+    word-break: break-all;
+  }
+  &:hover{
+    background-color: #ecf5ff;
+    .container-input{
+      color: #0052d9!important;
+      text-decoration: underline;
+    }
+  }
+  .fold-icon{
+    position: absolute;
+    font-size: 24px;
+    color: #666666;
+    bottom: -24px;
+    left: 50%;
+    transform: translateX(-50%);
+  }
+}
+</style>

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

@@ -58,7 +58,7 @@
       />&nbsp;{{$t('Chart.chart_copywx')}}
     </li>
     <li v-if="isShowBtn('enNameSetting')"
-        class="span-item copy" @click="openEnNameDia">
+        class="span-item copy" @click="openLangInfoDia">
       <img
         style="width: 16px; vertical-align: middle"
         :src="$icons.to_en"
@@ -96,8 +96,8 @@ export default {
     editChartHandle() {
       this.$emit('editChartHandle')
     },
-    openEnNameDia() {
-      this.$emit('openEnNameDia')
+    openLangInfoDia() {
+      this.$emit('openLangInfoDia')
     },
     delChartHandle() {
       this.$emit('delChartHandle')

+ 7 - 2
src/components/chart/chartListWrap.vue

@@ -13,9 +13,9 @@
         :key="chart.ChartInfoId"
       >
         <el-card class="sheet-item">
-          <div class="chartEn-mark" v-show="chart.IsEnChart" style="top: 0;left: 0;">En</div>
+          <!-- <div class="chartEn-mark" v-show="chart.IsEnChart" style="top: 0;left: 0;">En</div> -->
           <div slot="header" class="item-top">
-            <span class="text_oneLine">{{ chart.ChartName }}</span>
+            <span class="text_oneLine">{{ currentLang === 'en' ? (chart.ChartNameEn||chart.ChartName) : chart.ChartName }}</span>
           </div>
           <img
             :src="chart.ChartImage"
@@ -50,6 +50,11 @@
 <script>
 export default {
   props: ['total','list'],
+  computed: {
+    currentLang() {
+			return this.$store.state.lang
+		}
+  },
   data() {
     return {
 

+ 23 - 0
src/components/edb/noAuth.vue

@@ -0,0 +1,23 @@
+<template>
+  <div>
+
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+
+    }
+  },
+  mounted(){
+
+  },
+  methods:{
+
+  },
+}
+</script>
+<style scoped lang='scss'>
+
+</style>

+ 51 - 14
src/components/edbDetailPopover.vue

@@ -5,11 +5,15 @@
     width="350"
     offset="100"
     trigger="hover"
+    :disabled="!info.HaveOperaAuth"
   >
     <ul class="edb-info-cont">
       <li v-for="key in keysArr" :key="key">
         <label class="li-label">{{keysLabel[key]}}</label> 
-        {{info[key]}}
+        <!-- {{info[key]}} -->
+        <span v-if="key==='Frequency'">{{ getFrequencyTrans(dataInfo[key]) }}</span>
+        <span v-else-if="key==='Unit'||key==='UnitEn'">{{ getUnitTrans(dataInfo[key]) }}</span>
+        <span v-else>{{ dataInfo[key] }}</span>
       </li>
     </ul>
     <div slot="reference">
@@ -27,23 +31,56 @@ export default {
     }
   },
   computed: {
+    keysLabel(){
+      return {
+          'EdbName': /* '指标名称' */ this.$t('Edb.Detail.e_name'),
+          'EdbNameEn': /* '指标名称' */ 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'),
+          'UnitEn': /* '单位' */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'),
+        }
+    },
     keysArr(){
-      return Object.keys(this.keysLabel)
-    }
+      const keys = [
+        'EdbName',
+        'EdbCode',
+        'Frequency',
+        'Unit',
+        'StartDate',
+        'LatestDate',
+        'LatestValue',
+        'ModifyTime',
+        'SourceName'
+      ]
+
+      const enKeyMap = {
+        'EdbName': 'EdbNameEn',
+        'Unit': 'UnitEn'
+      }
+      return this.currentLang==='en'
+        ? keys.map(_=>enKeyMap[_]?enKeyMap[_]:_)
+        : keys
+    },
+    currentLang() {
+      return this.$store.state.lang
+    },
+    dataInfo(){
+        const {EdbName,EdbNameEn,Unit,UnitEn} = this.info
+        return {
+            ...this.info,
+            EdbNameEn:EdbNameEn||EdbName,
+            UnitEn:UnitEn||Unit
+        }
+    },
   },
   data() {
     return {
-      keysLabel: {
-        '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'),
-      }
     };
   }
 };

+ 2 - 2
src/components/edbLabelList.vue

@@ -40,7 +40,7 @@ export default {
         },
         currentLang:{ //默认是中文版
             type:String,
-            default:'ch'
+            default:'zh'
         }
 
     },
@@ -53,7 +53,7 @@ export default {
         //决定展示的指标名称为中文还是英文
         getLabelText(label){
             const nameMap = {
-                'ch':label.EdbName,
+                'zh':label.EdbName,
                 'en':label.EdbNameEn.length?label.EdbNameEn:label.EdbName
             }
             return nameMap[this.currentLang]

+ 50 - 21
src/components/lzTable.vue

@@ -9,24 +9,30 @@
 			>
 				<th>{{ labelArr.get(item) }}</th>
 				<td v-for="(data, sub_index) in tableOption" :key="sub_index">
-          <template v-if="source!=='baiinfo'">
-            {{ (item === 'Frequency' && source === 'lz') ? frequencyType.get(data[item]) : data[item] }}
-          </template>
+					<template v-if="source!=='baiinfo'">
+						{{
+							(['FrequencyName','Frequency'].includes(item)) 
+							? (source === 'lz')
+								? frequencyType.get(data[item])
+								: frequencyMap.get(data[item])
+							: data[item] 
+						}}
+					</template>
 					<!-- 百川盈孚数据源 频度和单位需要可编辑 -->
 					<template v-else>
-            <span>
-              {{data[item]}}
-              <span v-if="data['IndexCode']&&(item==='Frequency'||item==='Unit')">
-                <img
-                  v-permission="permissionBtn.dataSourcePermission.bcyfData_edit"
-                  src="~@/assets/img/set_m/edit.png"
-                  alt="edit"
-                  style="width: 14px; height: 14px; margin-left: 5px;cursor:pointer;"
-                  @click.stop="editTarget(data)"
-                />
-              </span>
-            </span>
-          </template>
+						<span>
+							{{ item==='Frequency'?frequencyMap.get(data[item]):data[item] }}
+							<span v-if="data['IndexCode']&&(item==='Frequency'||item==='Unit')">
+								<img
+									v-permission="permissionBtn.dataSourcePermission.bcyfData_edit"
+									src="~@/assets/img/set_m/edit.png"
+									alt="edit"
+									style="width: 14px; height: 14px; margin-left: 5px;cursor:pointer;"
+									@click.stop="editTarget(data)"
+								/>
+							</span>
+						</span>
+					</template>
 				</td>
 			</tr>
 		</template>
@@ -69,7 +75,7 @@ export default {
 		headerArr(){
 			let arr=['QuotaName','LzCode','Frequency','UnitName','ModifyTime']
 
-			let sourceTypeOne = ['smm','coal','baiinfo','yyzx','icpi','coalWord']
+			let sourceTypeOne = ['smm','coal','baiinfo','yyzx','icpi','coalWord','ccf']
 
 			if(this.source==='gl'){
 				arr=['IndexName','IndexCode','FrequencyName','UnitName','UpdateTime']
@@ -87,7 +93,7 @@ export default {
 				['UnitName', /* '单位' */this.$t('Edb.Detail.e_unit')],
 				['ModifyTime', /* '更新时间' */this.$t('Edb.Detail.e_update_time')],
 			])
-			let sourceTypeOne = ['smm','coal','baiinfo','yyzx','icpi','coalWord']
+			let sourceTypeOne = ['smm','coal','baiinfo','yyzx','icpi','coalWord','ccf']
 
 			if(this.source==='gl'){
 				temMap=new Map([
@@ -111,13 +117,36 @@ export default {
 		},
 		dynamic_key(){
 			let key='InputValue'
-			if(['smm','baiinfo','coal','yyzx','icpi'].includes(this.source)){
+			if(['smm','baiinfo','coal','yyzx','icpi','ccf'].includes(this.source)){
 				key='Value'
 			}else if(this.source=='coalWord'){
 				key='DealValue'
 			}
 
 			return key
+		},
+		//隆众原始数据库,返回频度不是string是number,分开写
+		frequencyType(){
+			return new Map([
+				[1, /* 日度 */ this.$t('Edb.FreAll.day')],
+				[2, /*周度*/ this.$t('Edb.FreAll.week')],
+				[3, /*月度*/ this.$t('Edb.FreAll.month')],
+				[4, /*季度*/ this.$t('Edb.FreAll.quarter')],
+				[5, /*年度*/ this.$t('Edb.FreAll.year')],
+				[99, /*无固定频率*/ this.$t('Edb.FreAll.unfixed')],
+			])
+		},
+		//其他数据源
+		frequencyMap(){
+			return new Map([
+				['日度',this.$t('Edb.FreAll.day')],
+				['周度',this.$t('Edb.FreAll.week')],
+				['月度',this.$t('Edb.FreAll.month')],
+				['旬度',this.$t('Edb.FreAll.dekad')],
+				['季度',this.$t('Edb.FreAll.quarter')],
+				['半年度',this.$t('Edb.FreAll.half_year')],
+				['年度',this.$t('Edb.FreAll.year')]
+			])
 		}
 	},
 	data() {
@@ -133,14 +162,14 @@ export default {
     //   : this.source==='baiinfo'
     //   ? ['IndexName','IndexCode','Frequency','Unit','ModifyTime']
 	// 		:['QuotaName','LzCode','Frequency','UnitName','ModifyTime'],
-			frequencyType:new Map([
+			/* frequencyType:new Map([
 				[1,'日度'],
 				[2,'周度'],
 				[3,'月度'],
 				[4,'季度'],
 				[5,'年度'],
 				[99,'无固定频率'],
-			]),
+			]), */
 			// labelArr: this.source === 'gl' ? new Map([
 			// 	['IndexName', '指标名称'],
 			// 	['IndexCode', '指标ID'],

+ 40 - 0
src/components/noDataAuth.vue

@@ -0,0 +1,40 @@
+<template>
+  <div class="no-auth-wapper">
+    <img
+      src="~@/assets/img/set_m/no_auth.png"
+      alt=""
+    />
+    <span>{{text}}</span>
+  </div>
+</template>
+<script>
+export default {
+  props: {
+    text: {
+      type:String
+    }
+  },
+  data() {
+    return {
+
+    }
+  },
+  mounted(){
+
+  },
+  methods:{
+
+  },
+}
+</script>
+<style scoped lang='scss'>
+.no-auth-wapper {
+  padding: 100px 0;
+  text-align: center;
+  color: #666;
+  img {
+    margin: 20px auto 10px;
+    display: block
+  }
+}
+</style>

+ 301 - 56
src/components/notificationMsg.vue

@@ -1,87 +1,304 @@
 <template>
     <!-- 消息通知 -->
-    <el-popover
-        placement="bottom"
-        width="443"
-        trigger="click" v-model="visible">
-        <div class="notifation-wrap">
-            <!-- 防止tabs在popover前渲染,会导致tab选中状态不正确 -->
-            <el-tabs v-model="activeName" v-if="visible">
-                <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)">
-                    <span class="icon">
-                        <img :src="require(`@/assets/img/approve_m/${approveState[item.ApproveState]||'process'}-msg.svg`)" alt="">
-                    </span>
-                    <div class="info">
-                        <div class="head">
-                            <span class="title">{{item.Content}}</span>
-                            <span class="time">{{item.CreateTime}}</span>
+    <div>
+        <el-popover
+            placement="bottom"
+            width="443"
+            trigger="click" v-model="visible">
+            <div class="notifation-wrap">
+                <!-- 防止tabs在popover前渲染,会导致tab选中状态不正确 -->
+                <el-tabs v-model="activeName" v-if="visible" @tab-click="getMsgList">
+                    <el-tab-pane :label="`${$t('AprrovalPage.research_approval_btn')}${activeName==='first'?'('+UnreadTotal+')':''}`" name="first"></el-tab-pane>
+                    <el-tab-pane :label="`${$t('SystemManage.OperateAuth.label_notice_title')}${activeName==='second'?'('+UnreadTotal+')':''}`" name="second"></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)">
+                        <span class="icon">
+                            <img :src="require(`@/assets/img/approve_m/${approveState[item.ApproveState]||'process'}-msg.svg`)" alt="">
+                        </span>
+                        <div class="info">
+                            <div class="head">
+                                <span class="title">{{item.Content}}</span>
+                                <span class="time">{{item.CreateTime}}</span>
+                            </div>
+                            <!-- 审批内容 -->
+                            <div class="content" v-if="activeName==='first'">{{item.Remark||''}}&nbsp;</div>
+                            <!-- 权限内容 -->
+                            <div class="content" v-else>
+                                {{item.Remark||''}}
+                                <span>,点击<el-button type="text" @click="openAuthDetail(item)">查看详情</el-button>!</span>
+                            </div>
                         </div>
-                        <div class="content">{{item.Remark||''}}&nbsp;</div>
                     </div>
+                    <tableNoData v-if="!msgList.length" :text="$t('AprrovalPage.no_news_yet')"></tableNoData>
                 </div>
-                <tableNoData v-if="!msgList.length" :text="$t('AprrovalPage.no_news_yet')"></tableNoData>
+                <el-button type="text" class="close-btn" @click="visible=false">{{$t('AprrovalPage.close_btn')}}</el-button>
             </div>
-            <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">
-                <path d="M16.7344 15.4904L15.2941 12.9564V7.84847C15.2941 5.89142 13.8231 3.77337 11.6786 2.99732C11.5741 1.96012 10.8811 1.20374 9.97287 1.20374C9.06595 1.20374 8.37036 1.96014 8.26717 2.99732C6.12392 3.77337 4.65292 5.8914 4.65292 7.84847V12.9564L3.14258 15.6146C3.04183 15.7903 3.04429 16.0054 3.14504 16.1799C3.24581 16.3544 3.43263 16.4601 3.63415 16.4601H7.22871C7.49293 17.7357 8.62233 18.6967 9.97289 18.6967C11.3247 18.6967 12.4541 17.7357 12.7171 16.4601H16.3116C16.3215 16.4601 16.3288 16.4601 16.3374 16.4601C16.6508 16.4601 16.904 16.2082 16.904 15.8948C16.904 15.7362 16.8401 15.5925 16.7344 15.4904ZM9.97287 2.33803C10.1769 2.33803 10.3415 2.49286 10.4472 2.7239C10.2899 2.70792 10.1375 2.67106 9.97287 2.67106C9.8082 2.67106 9.65583 2.70792 9.49851 2.7239C9.60422 2.49284 9.76889 2.33803 9.97287 2.33803ZM9.97287 17.5636C9.25396 17.5636 8.65303 17.1016 8.41951 16.4601H11.5262C11.2927 17.1015 10.693 17.5636 9.97287 17.5636ZM4.60745 15.3282L5.71102 13.3853C5.76015 13.3017 5.78719 13.2034 5.78719 13.1051V7.84847C5.78719 5.93934 7.57648 3.80413 9.97287 3.80413C12.3692 3.80413 14.161 5.93934 14.161 7.84847V13.1051C14.161 13.2034 14.1868 13.3017 14.2347 13.3853L15.3395 15.3282H4.60745Z" fill="currentColor"/>
-            </svg>
-            <div class="unread" v-if="UnreadTotal">{{UnreadTotal>99?'99+':UnreadTotal}}</div>
-        </span>
-    </el-popover>
+            <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">
+                    <path d="M16.7344 15.4904L15.2941 12.9564V7.84847C15.2941 5.89142 13.8231 3.77337 11.6786 2.99732C11.5741 1.96012 10.8811 1.20374 9.97287 1.20374C9.06595 1.20374 8.37036 1.96014 8.26717 2.99732C6.12392 3.77337 4.65292 5.8914 4.65292 7.84847V12.9564L3.14258 15.6146C3.04183 15.7903 3.04429 16.0054 3.14504 16.1799C3.24581 16.3544 3.43263 16.4601 3.63415 16.4601H7.22871C7.49293 17.7357 8.62233 18.6967 9.97289 18.6967C11.3247 18.6967 12.4541 17.7357 12.7171 16.4601H16.3116C16.3215 16.4601 16.3288 16.4601 16.3374 16.4601C16.6508 16.4601 16.904 16.2082 16.904 15.8948C16.904 15.7362 16.8401 15.5925 16.7344 15.4904ZM9.97287 2.33803C10.1769 2.33803 10.3415 2.49286 10.4472 2.7239C10.2899 2.70792 10.1375 2.67106 9.97287 2.67106C9.8082 2.67106 9.65583 2.70792 9.49851 2.7239C9.60422 2.49284 9.76889 2.33803 9.97287 2.33803ZM9.97287 17.5636C9.25396 17.5636 8.65303 17.1016 8.41951 16.4601H11.5262C11.2927 17.1015 10.693 17.5636 9.97287 17.5636ZM4.60745 15.3282L5.71102 13.3853C5.76015 13.3017 5.78719 13.2034 5.78719 13.1051V7.84847C5.78719 5.93934 7.57648 3.80413 9.97287 3.80413C12.3692 3.80413 14.161 5.93934 14.161 7.84847V13.1051C14.161 13.2034 14.1868 13.3017 14.2347 13.3853L15.3395 15.3282H4.60745Z" fill="currentColor"/>
+                </svg>
+                <div class="unread" v-if="allUnreadTotal">{{allUnreadTotal>99?'99+':allUnreadTotal}}</div>
+            </span>
+        </el-popover>
+        
+        <m-dialog
+            :show.sync="isOpenAuthDia"
+            width="800px"
+            title="权限变更详情"
+            @close="isOpenAuthDia = false"
+        >
+            <div class="notice-auth-box">
+                <div class="main">
+
+                    <div class="left" v-if="!detailInfo.isAuthSet">
+
+                        <el-radio-group v-model="detailInfo.Source" @input="changeSource" style="margin-bottom:10px;">
+                            <el-radio-button
+                                v-for="item in tabs" 
+                                :key="item.key"
+                                :label="item.key"
+                            >{{item.label}}</el-radio-button>
+                        </el-radio-group>
+
+                        <ul class="data-types" v-if="detailInfo.Source===6">
+                            <li 
+                                v-for="item in subTabs" 
+                                :key="item.key" 
+                                :class="item.key===detailInfo.SubSource&&'act'"
+                                @click="changeSubSource(item)"
+                            >{{item.label}}</li>
+                        </ul>
+                    </div>
+
+                    <div class="right">
+                        <label v-if="detailInfo.isAuthSet">{{tabs.find(_ => _.key===detailInfo.Source).label}}</label>
+
+                        <el-table
+                            :data="tableData"
+                            ref="table"
+                            element-loading-text="加载中..."
+                            v-loading="tableLoading"
+                            border
+                            style="margin:20px 0"
+                            max-height="400"
+                        >
+                            <el-table-column
+                                v-for="item in tableColums"
+                                :key="item.label"
+                                :label="item.label"
+                                :prop="item.key"
+                                :width="item.widthsty"
+                                :min-width="item.minwidthsty"
+                                align="center"
+                            >
+                                <template slot-scope="{row}">
+
+                                    <span>{{ row[item.key] }}</span>
+                                </template>
+                            </el-table-column>
+                            
+                            <div slot="empty" style="padding: 20px 0">
+                                <tableNoData :text="$t('Table.prompt_slogan')" size="mini"/>
+                            </div>
+                        </el-table>
+                    </div>
+                </div>
+                
+                <div class="dia-bot">
+                    <el-button type="primary" plain @click="isOpenAuthDia = false"
+                    >{{$t('Dialog.known')}}</el-button
+                    >
+                </div>
+            </div>
+        </m-dialog>
+    </div>
 </template>
 
 <script>
 import {approveInterence} from '@/api/modules/approve.js';
+import { operateAuthInterface } from '@/api/modules/setApi';
+import mDialog from './mDialog.vue';
 export default {
+    components: { mDialog },
     data() {
         this.approveState=['','process','passed','reject','return',]
         return {
             activeName:'first',
             visible:false,
             msgList:[],
-            UnreadTotal:0
+            UnreadTotal:0,
+
+            allUnreadTotal: 0,
+
+            //详情弹窗
+            isOpenAuthDia: false,
+            tableData: [],
+            page_no: 1,
+            haveMore: false,
+            detailInfo: {
+                MessageId: 0,
+                isAuthSet: false,//true权限设置 false资产转移
+                Source: 1,
+                SubSource: 0,
+            }
         };
     },
+    computed: {
+        tabs(){
+            const tabs = [
+                { label: this.$t('SystemManage.OperateAuth.tab01'), key: 1 },
+                { label: this.$t('SystemManage.OperateAuth.tab02'), key: 2 },
+                { label: this.$t('SystemManage.OperateAuth.tab03'), key: 3 },
+                { label: this.$t('SystemManage.OperateAuth.tab04'), key: 4 },
+                { label: this.$t('SystemManage.OperateAuth.tab05'), key: 5 },
+                { label: this.$t('SystemManage.OperateAuth.tab06'), key: 6 },
+            ]
+            return tabs
+        },
+        subTabs() {
+            const subTabs = [
+                { label: /* '自定义分析' */this.$t('SystemManage.OperateAuth.tab_sub_sheet1'), key: 4 },
+                { label:/*  '时间序列表格' */this.$t('SystemManage.OperateAuth.tab_sub_sheet2'), key: 2 },
+                { label: /* '混合表格' */this.$t('SystemManage.OperateAuth.tab_sub_sheet3'), key: 3 },
+            ]
+
+            return subTabs
+        },
+        tableColums() {
+            const clomusMap = {
+                5: [
+                    { label: this.$t('SystemManage.OperateAuth.table_col_name01'),key: 'DataName' },
+                    { label: '操作时间',key: 'CreateTime' },
+                ],
+                6: [
+                    { label: this.$t('SystemManage.OperateAuth.table_col_sheet_name'),key: 'DataName' },
+                    { label: '操作时间',key: 'CreateTime' },
+                ],
+            }
+            return clomusMap[this.detailInfo.Source] ? clomusMap[this.detailInfo.Source] 
+                : [
+                    { label: this.$t('SystemManage.OperateAuth.table_col_name05'),key: 'DataName' },
+                    { label: '操作时间',key: 'CreateTime' },
+                ]
+        },
+    },
     watch:{
         visible(val){
             if(val){
                 this.getMsgList()
             }
+        },
+        isOpenAuthDia(nval) {
+            if(!nval){
+                this.$refs.table.bodyWrapper.removeEventListener('scroll',this.handleScroll)
+                return
+            } 
+
+            this.getAuthMsgDetail()
+            this.$nextTick(() => {
+                this.$refs.table.bodyWrapper.addEventListener('scroll',this.handleScroll)
+            })
         }
     },
     methods:{
-        readMsg(msg){
-            const {ApproveState,ReportApproveId,Id} = msg
-            approveInterence.readApproveMsg({
-                MessageId:Id
-            }).then(res=>{
-                if(res.Ret!==200) return 
-                this.getMsgList()
-            })
-            const type = ApproveState===1?'approve':ApproveState===4?'detail':'myself'
-            this.$router.push({
-                path:'/approveDetail',
-                query:{
-                    type,
-                    approveId:ReportApproveId
-                }
-            })
+        async readMsg(msg){
+            const {ApproveState,ReportApproveId,Id,DataPermissionMessageId} = msg
+            
+            const res = this.activeName === 'first' 
+                ? await approveInterence.readApproveMsg({
+                    MessageId:Id
+                  })
+                : await operateAuthInterface.redMessage({ MessageId: DataPermissionMessageId })
+
+            if(res.Ret!==200) return 
+            this.getMsgList()
+            this.getUnreadNum()
+
+            if(this.activeName === 'first' ) {
+                const type = ApproveState===1?'approve':ApproveState===4?'detail':'myself'
+                this.$router.push({
+                    path:'/approveDetail',
+                    query:{
+                        type,
+                        approveId:ReportApproveId
+                    }
+                })
+            }
+        },
+        async getMsgList(){
+            const res = this.activeName === 'first' 
+                ? await approveInterence.getApproveMsgList({
+                    CurrentIndex:1,
+                    PageSize:1000
+                })
+                : await operateAuthInterface.getNoticeList({
+                    CurrentIndex:1,
+                    PageSize:1000
+                })
+
+            if(res.Ret!==200) return 
+            this.msgList = res.Data.List||[]
+            this.UnreadTotal = res.Data.UnreadTotal||0
+        },
+
+        async getUnreadNum() {
+            const res = await operateAuthInterface.getAllUnread()
+
+            if(res.Ret !== 200) return
+            
+            this.allUnreadTotal = res.Data
+        },
+
+        openAuthDetail(item) {
+            this.detailInfo.MessageId = item.DataPermissionMessageId;
+            this.detailInfo.isAuthSet = [3,4].includes(item.OpType);
+            this.detailInfo.Source = item.Source;
+            this.detailInfo.SubSource = item.SubSource;
+            this.isOpenAuthDia = true
         },
-        getMsgList(){
-            approveInterence.getApproveMsgList({
-                CurrentIndex:1,
-                PageSize:1000
-            }).then(res=>{
-                if(res.Ret!==200) return 
-                this.msgList = res.Data.List||[]
-                this.UnreadTotal = res.Data.UnreadTotal||0
+
+        changeSource() {
+            this.page_no = 1;
+            this.detailInfo.SubSource = this.detailInfo.Source===6?4:0;
+            this.getAuthMsgDetail()
+        },
+
+        changeSubSource({key}) {
+            this.page_no = 1;
+            this.detailInfo.SubSource = key;
+            this.getAuthMsgDetail()
+        },
+
+        async getAuthMsgDetail() {
+            const { MessageId,Source,SubSource } = this.detailInfo;
+            const res = await operateAuthInterface.getNoticeDetail({
+                MessageId,
+                Source,
+                SubSource,
+                CurrentIndex: this.page_no
             })
-        }
+
+            if(res.Ret !== 200) return 
+
+            let arr = res.Data.List||[]
+            
+            this.haveMore = res.Data.Paging.Pages > this.page_no
+            this.tableData = this.page_no ===1 ? arr : [...this.tableData,...arr];
+        },
+
+        /* 滚动事件 */
+        handleScroll:_.throttle(function(){
+            const {scrollTop,clientHeight,scrollHeight} = this.$refs.table.bodyWrapper
+            if(scrollTop + clientHeight >= scrollHeight-10 && this.haveMore){
+                this.page_no++;
+                this.getAuthMsgDetail();
+            }
+        },300),
+    },
+
+    mounted() {
+        this.getUnreadNum()
     }
 };
 </script>
@@ -143,4 +360,32 @@ export default {
         font-size: 12px;
     }
 }
-</style>
+.notice-auth-box {
+    .main {
+        //display: flex;
+        .left {
+            flex-shrink: 0;
+            margin-right: 15px;
+            .data-types {
+                display: flex;
+                gap: 15px;
+                li {
+                    padding: 5px 0;
+                    border-bottom: 2px solid transparent;
+                    &.act {
+                        border-color: #0052D9;
+                    }
+                }
+            }
+        }
+        .right {
+            flex: 1;
+        }
+    }
+    .dia-bot {
+        display: flex;
+        justify-content: center;
+        margin-top: 30px;
+    }
+}
+</style>

+ 63 - 13
src/components/selectUnit.vue

@@ -3,6 +3,7 @@
         <el-autocomplete
             style="width:100%"
             v-model="unit"
+            value-key="label"
             :fetch-suggestions="querySearch"
             :disabled="disabled"
             :placeholder="$t('Edb.InputHolderAll.input_unit')"
@@ -10,13 +11,16 @@
             @change="handleChange"
             @blur.stop="handleChange"
         >
+            <template slot-scope="{ item }">
+                <div>{{ item.label }}</div>
+            </template>
         </el-autocomplete>
     </div>
 </template>
 
 <script>
 // import { unitArr } from '@/utils/defaultOptions';
-const unitArr = [
+/* const unitArr = [
 	'无',
 	'万吨',
 	'亿元',
@@ -31,7 +35,8 @@ const unitArr = [
 	'美元/桶',
 	'美分/加仑',
 	'手'
-]
+] */
+//selectUnit在registryComponents就被初始化,用不了bus
 export default {
     name:"selectUnit",
     props:{
@@ -45,21 +50,28 @@ export default {
         }
     },
     watch:{
-        value(){
-            this.unit=this.value
+        value:{
+            handler(){
+                if(this.value){
+                    console.log('value',this.value)
+                    this.unit = this.getUnitTrans(this.value)
+                }
+            },
+            immediate:true
         }
     },
     data() {
         return {
-            unit:this.value,
-            unitArr: [],
+            unit:'',
+            /* unitArr: [], */
         }
     },
-    mounted(){
-        this.unitArr=unitArr.map(item=>{
-            return {value:item}
-        })
+    computed:{
+        unitArr(){
+            return this.getUnitArr()
+        }
     },
+    mounted(){},
     methods:{
         querySearch(queryString, cb) {
             const unitArr = this.unitArr;
@@ -69,12 +81,50 @@ export default {
         },
         createFilter(queryString) {
             return (unit) => {
-                return (unit.value.toLowerCase().indexOf(queryString.toLowerCase()) !== -1);
+                return (unit.label.toLowerCase().indexOf(queryString.toLowerCase()) !== -1);
             };
         },
-        handleChange(){
+        handleChange(item){
+            //this.unit = item.value
             console.log('单位',this.unit);
-            this.$emit('input',this.unit)
+            this.$emit('input',item.value||this.unit); //若为unitArr内的单位,则存对应的中文,若为自行输入的单位,则输什么存什么
+        },
+        getUnitArr(){
+            return [
+                {value:'无',label:this.$i18nt.t('Edb.UnitAll.u_null')},
+                {value:'万吨',label:this.$i18nt.t('Edb.UnitAll.wanton')},
+                {value:'亿元',label:this.$i18nt.t('Edb.UnitAll.u_bill')},
+                {value:'元',label:this.$i18nt.t('Edb.UnitAll.u_yuan')},
+                {value:'元/吨',label:this.$i18nt.t('Edb.UnitAll.yuan_ton')},
+                {value:'元/湿吨',label:this.$i18nt.t('Edb.UnitAll.yuan_wetton')},
+                {value:'千克',label:this.$i18nt.t('Edb.UnitAll.u_kg')},
+                {value:'吨',label:this.$i18nt.t('Edb.UnitAll.u_ton')},
+                {value:'短吨',label:this.$i18nt.t('Edb.UnitAll.short_ton')},
+                {value:'美元/吨',label:this.$i18nt.t('Edb.UnitAll.doll_ton')},
+                {value:'万平方千米',label:this.$i18nt.t('Edb.UnitAll.wan_skilo')},
+                {value:'美元/桶',label:this.$i18nt.t('Edb.UnitAll.doll_bar')},
+                {value:'美分/加仑',label:this.$i18nt.t('Edb.UnitAll.cent_gal')},
+                {value:'手',label:this.$i18nt.t('Edb.UnitAll.u_hand')},
+            ]
+        },
+        getUnitTrans(unit){
+            const map = {
+                '无':this.$i18nt.t('Edb.UnitAll.u_null'),
+                '万吨':this.$i18nt.t('Edb.UnitAll.wanton'),
+                '亿元':this.$i18nt.t('Edb.UnitAll.u_bill'),
+                '元':this.$i18nt.t('Edb.UnitAll.u_yuan'),
+                '元/吨':this.$i18nt.t('Edb.UnitAll.yuan_ton'),
+                '元/湿吨':this.$i18nt.t('Edb.UnitAll.yuan_wetton'),
+                '千克':this.$i18nt.t('Edb.UnitAll.u_kg'),
+                '吨':this.$i18nt.t('Edb.UnitAll.u_ton'),
+                '短吨':this.$i18nt.t('Edb.UnitAll.short_ton'),
+                '美元/吨':this.$i18nt.t('Edb.UnitAll.doll_ton'),
+                '万平方千米':this.$i18nt.t('Edb.UnitAll.wan_skilo'),
+                '美元/桶':this.$i18nt.t('Edb.UnitAll.doll_bar'),
+                '美分/加仑':this.$i18nt.t('Edb.UnitAll.cent_gal'),
+                '手':this.$i18nt.t('Edb.UnitAll.u_hand'),
+            }
+            return map[unit]||unit //若是自行输入的单位,直接返回
         }
     }
 }

+ 28 - 0
src/directives/tooltip-hidable.js

@@ -0,0 +1,28 @@
+// 长度溢出显示ToolTip 请绑定的标签元素包裹住 element-ui的el-tooltip。
+/**
+ * binding.value 为长度溢出的元素的css选择器,没有请设置
+ */
+import { Message } from "element-ui"
+
+export default {
+  bind(el,binding,vnode) {
+    try {
+      // console.log(vnode,'vnode');
+      el.onmouseenter=(e)=>{
+        // console.log(e);
+        if(el.scrollWidth > el.clientWidth){
+          // 超出
+          vnode.componentInstance.disabled=false
+        }else{
+          vnode.componentInstance.disabled=true
+        }
+      }
+    } catch (error) {
+      console.error(error);
+      Message.error(error.message)
+    }
+  },
+  updated(el,binding,vnode) {
+    console.log('updated');
+  },
+}

+ 28 - 0
src/lang/commonLang.js

@@ -60,6 +60,10 @@ export default {
     reset_btn: {
       en: 'Reset',
       zh: '重置'
+    },
+    complete_btn: {
+      en: 'Complete',
+      zh: '完成'
     }
   },
   Table: {
@@ -288,6 +292,26 @@ export default {
       en: 'Upload failed!',
       zh: '上传失败!'
     },
+    no_edb_auth: {
+      zh:'暂无指标权限,如有问题请联系管理员!',
+      en:'You currently have no metric permissions. If there is an issue, please contact the administrator!'
+    },
+    no_chart_auth: {
+      zh:'暂无图表权限,如有问题请联系管理员!',
+      en:'You currently have no chart permissions. If there is an issue, please contact the administrator!'
+    },
+    no_sheet_auth: {
+      zh:'暂无表格权限,如有问题请联系管理员!',
+      en:'You currently have no table permissions. If there is an issue, please contact the administrator!'
+    },
+    no_file_for_download_btn:{
+      en: 'No files available for download.',
+      zh: '暂无下载文件'
+    },
+    no_data_date_msg:{
+      en: 'No data available for this date.',
+      zh: '该日期暂无数据'
+    },
   },
   Common: {
     category: {
@@ -314,6 +338,10 @@ export default {
       en:'Add',
       zh:'新增'
     },
+    edit_btn:{
+      en:'Edit',
+      zh:'编辑'
+    },
     to: {
       en: ' To ',
       zh:'至'

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

@@ -50,4 +50,13 @@ export default {
     rejection_title: "Examination and rejection",
     rejection_reason_ipt: "Please enter the reason for rejection",
   },
+  ApprovalEdit:{
+    name_placeholder:'Please enter an approval flow name',
+    name_max_hint:'The name is within 20 characters',
+    report_placeholder:'Please select the associated report',
+    add_node_hint:'Please add an approval node',
+    node_select_hint:'If no approver is selected for a node, check it',
+    edit_success_text:'Edit successfully',
+    add_success_text:'Add successfully'
+  }
 };

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

@@ -50,4 +50,13 @@ export default {
     rejection_title: "审批驳回",
     rejection_reason_ipt: "请输入驳回理由",
   },
+  ApprovalEdit:{
+    name_placeholder:'请输入审批流名称',
+    name_max_hint:'长度在20个字符内',
+    report_placeholder:'请选择关联报告',
+    add_node_hint:'请添加审批节点',
+    node_select_hint:'有节点未选择审批人,请检查',
+    edit_success_text:'编辑成功',
+    add_success_text:'新增成功'
+  }
 };

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

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

+ 25 - 1
src/lang/modules/DataSources/En.js

@@ -30,7 +30,9 @@ export default {
     label_classify:'Indicator Category',
     label_update_remin:'Update Reminder',
     ph_update_remin:'Please select the update time',
-    add_tobase_btn:'Add to Indicator Library'
+    add_tobase_btn:'Add to Indicator Library',
+
+    edb_not_allow_delete:'This metric has been added to the ETA database and cannot be deleted',
   },
 
   /* 数据录入 */
@@ -82,6 +84,8 @@ export default {
     col_amt:'Turnover',
     col_oi:'Holdings',
     col_settle:'Settlement Price',
+    ph_inland:'Domestic exchange',
+    ph_foreign:'Overseas exchange',
   },
 
   /* 钢联化工数据库 */
@@ -193,6 +197,26 @@ export default {
     col_status_irr:'Updates dependent on external sources may experience irregular delays',
     haved_all_msg:'All indicators added this time are already in the indicator library, please do not add them again!',
     haved_some_msg:'The following indicators already exist in the indicator library and will be automatically filtered out!'
+  },
+
+
+  /* 自有数据 */
+  SelftDataPage: {
+    ph_channel: 'Please select a channel',
+    col_channel:'Channel',
+    col_start_time:'Indicator Start Time',
+    col_newest_time:'Indicator Latest Time',
+    col_create:'Data Entry Time',
+  },
+
+
+  
+  /* 彭博数据源 */
+  BloombergPage:{
+    operation_prompt:'Operation Prompt',
+    add_edb_hint:'Max 30 indicators for bulk add!',
+    add_edb_check_hint1:'Incomplete Indicator Info',
+    add_edb_check_hint2:'Indicator name exists, please re-enter'
   }
   
 }

+ 28 - 1
src/lang/modules/DataSources/Zh.js

@@ -30,7 +30,9 @@ export default {
     label_classify:'指标分类',
     label_update_remin:'更新提醒',
     ph_update_remin:'请选择更新时间',
-    add_tobase_btn:'加入指标库'
+    add_tobase_btn:'加入指标库',
+
+    edb_not_allow_delete:'该指标已加入指标库,不可删除',
   },
 
   /* 数据录入 */
@@ -83,6 +85,8 @@ export default {
     col_amt:'成交额',
     col_oi:'持仓量',
     col_settle:'结算价',
+    ph_inland:'国内交易所',
+    ph_foreign:'海外交易所',
   },
 
   /* 钢联化工数据库 */
@@ -192,5 +196,28 @@ export default {
     col_status_irr:'更新依赖外部会有不定期延迟',
     haved_all_msg:'本次添加的指标均已在指标库中,请勿重复添加!',
     haved_some_msg:'指标库中已存在以下指标,会自动过滤!'
+  },
+
+  /* 自有数据 */
+  SelftDataPage: {
+    ph_channel: '请选择渠道',
+    col_channel:'渠道',
+    col_start_time:'指标开始时间',
+    col_newest_time:'指标最新时间',
+    col_create:'入库时间',
+    col_menu: '目录',
+    col_part_menu: '分目录',
+    col_same_menu: '同目录',
+
+  },
+
+
+  
+  /* 彭博数据源 */
+  BloombergPage:{
+    operation_prompt:'操作提示',
+    add_edb_hint:'批量添加指标数量不得超过30个!',
+    add_edb_check_hint1:'指标信息未填写完整',
+    add_edb_check_hint2:'指标名称已存在,请重新填写'
   }
 }

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

@@ -36,7 +36,7 @@ export default {
     keep_one_row_msg: "Please keep at least one row",
     no_here_val_msg: "Unable to insert value here",
     TableInstructionsText: `Table Instructions:<br />
-    1. Manual Input: Click on each cell to directly enter text, numbers, or dates (format example: 2023-05-23). The entered content can match the names of metrics. Metrics from both the ETA Metric Library and the ETA Forecast Metric Library are searchable. If a metric is selected from the dropdown list, then that cell becomes a designated row/column for the selected metric.<br />
+    1. Manual Input: Click on each cell to directly enter text, numbers, or dates (format example: 2023-05-23). The entered content can match the names of metrics. Metrics from both the Metric Library and the Forecast Metric Library are searchable. If a metric is selected from the dropdown list, then that cell becomes a designated row/column for the selected metric.<br />
     2. Insert Metric Value: Right-click on a cell and click "Insert Metric Value". The system will query for the closest date and metric name based on the cell's row and column, and then populate the cell with the value of the metric corresponding to that date. The metric value is always positioned in the lower right corner of the cell.<br />
     3. Update and Calculation Rules: The dates associated with metric values in the table do not update automatically, and values do not support calculations within cells.`,
     select_table_category: "Please select table category",
@@ -83,6 +83,19 @@ export default {
     table_data_update_msg: "The table data has been updated",
     formula_lable: "Formula",
     parent_directory_lable: "Parent directory",
+    add_balance_table_btn:'Add Balance Sheet',
+    Co_editor:'Co-editor',
+    save_static_table:'Save as a static table',
+    save_static_table_tip:'Please enter the version name',
+    static_table_version_name:'Version name',
+    chart_source_placehoder:'please enter data source',
+    left_limit:'Left axis limits',
+    right_limit:'Right axis limits',
+    right_two_limit:'limits of the right second axis',
+    y_limit:'Vertical axis limits',
+    time_serial:'Time Series',
+    value_serial:'numerical sequence',
+    not_allow_edit:'Currently not editable'
   },
 
   /* 自定义分析  */
@@ -158,4 +171,12 @@ export default {
     lagging_lable: "lagging",
     select_metric: "Please select a metric",
   },
+
+  /* 平衡表  */
+  BalanceSheet:{
+    version:'Version',
+    active_table:'Active',
+    save_static_table:'Save as a static table',
+    only_edit:'Editable',
+  },
 };

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

@@ -50,7 +50,7 @@ export default {
     table_name_empty_msg: "表格名称不能为空",
     name_empty_msg: "名称不能为空",
     TableInstructionsText: `表格说明:<br>
-    1、手动输入:单击每个单元格可直接输入文本、数字、日期(格式示例:2023-05-23),输入内容可匹配指标名称,ETA指标库和ETA预测指标库指标均可搜索,在下拉框中选择指标,则该单元格为已选指标行/列。<br>
+    1、手动输入:单击每个单元格可直接输入文本、数字、日期(格式示例:2023-05-23),输入内容可匹配指标名称,指标库和预测指标库指标均可搜索,在下拉框中选择指标,则该单元格为已选指标行/列。<br>
     2、插入指标值:右键单元格,点击“插入指标值”,则查询该单元格行、列最近的日期和指标名称,将查找到的指标对应日期的值填入该单元格,指标值总是在右下角。<br>
     3、更新与计算规则:表格中指标值的日期不自动更新,数值不支持单元格计算`,
     date_type_label: "日期类型",
@@ -83,6 +83,19 @@ export default {
     table_data_update_msg: "表格数据已更新",
     formula_lable: "公式",
     parent_directory_lable: "上级目录",
+    add_balance_table_btn:'添加平衡表',
+    Co_editor:'协作人',
+    save_static_table:'存为静态表',
+    save_static_table_tip:'请输入版本名称',
+    static_table_version_name:'版本名称',
+    chart_source_placehoder:'请输入数据来源',
+    left_limit:'左轴上下限',
+    right_limit:'右轴上下限',
+    right_two_limit:'右二轴上下限',
+    y_limit:'纵轴上下限',
+    time_serial:'时间序列',
+    value_serial:'数值序列',
+    not_allow_edit:'当前不可编辑'
   },
 
   /* 自定义分析  */
@@ -170,4 +183,13 @@ export default {
   lagging_lable: "滞后",
   select_metric: "请选择指标",
   },
+
+  /* 平衡表  */
+  BalanceSheet:{
+    version:'版本',
+    active_table:'动态表',
+    save_static_table:'存为静态表',
+    only_edit:'只看可编辑',
+    
+  },
 };

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

@@ -4,6 +4,10 @@ export default {
       zh: "刷新",
       en: "Refresh",
     },
+    refreshing_btn: {
+      zh: "刷新中...",
+      en: "Refreshing...",
+    },
     download_btn: {
       zh: "下载",
       en: "Download",
@@ -44,6 +48,10 @@ export default {
       en: "Renew",
       zh: "更新",
     },
+    renewing_btn: {
+      en: "Renewing",
+      zh: "更新中...",
+    },
   },
   Msg: {
     is_del_table_msg: {
@@ -74,6 +82,10 @@ export default {
       en: "Insertion Successful",
       zh: "插入成功",
     },
+    is_del_balance_chart_msg:{
+      en:'After deletion, this chart will no longer be referenced. Are you sure to delete it?',
+      zh:'删除后该图表将不能再引用,确认删除吗?',
+    },
   },
   Date: {
     monday: {
@@ -211,6 +223,34 @@ export default {
       en: "Insert row below",
     },
   },
+  BalanceSheetTable:{
+    name:{
+      zh: "名称",
+      en: "Name",
+    },
+    creator:{
+      zh: "创建人",
+      en: "Creator",
+    },
+    updater:{
+      zh: "更新人",
+      en: "Updater",
+    },
+    update_time:{
+      zh: "更新时间 ",
+      en: "Updating Time",
+    }
+  },
+  Common:{
+    data_source:{
+      zh: "数据来源",
+      en: "Source",
+    },
+    source:{
+      zh: "来源",
+      en: "Source",
+    }
+  }
 };
 
 //ETable

+ 71 - 5
src/lang/modules/EtaBase/En.js

@@ -3,6 +3,7 @@
 export default {
   /* 指标库页面 */
   EtaBasePage: {
+    tab_menu: 'Catagory',
     add_edb_btn: 'Add Indicator',
     calculation_edb_btn: 'Calculation',
     replace_edb_btn: 'Indicator Replacement',
@@ -53,12 +54,15 @@ export default {
     complate_info: 'Complete Information',
     no_companyid_msg: 'Please input Company ID',
     no_edbid_msg: 'Please input Indicator ID',
+    no_source_msg:'Please select a source',
+    no_database_msg:'Please select database',
+    search_hint:'Searching data...',
     
     /* 替换指标弹窗 */
     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_tip: 'Note: After replacement, all references to the original metric in charts, tables, calculated metrics, and logic diagrams will be substituted with the replacement metric.',
     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',
@@ -78,21 +82,40 @@ export default {
     add_more_param: 'Add more parameters',
     create_edb_time_index: 'Generate Indicator Time Series',
     null_val_deal: 'Null Value Handling',
+    null_val_deal_0:'View Nearest Value Within 35 Days Before and After',
+    null_val_deal_1:'Do Not Calculate',
+    null_val_deal_2:'Forward Fill',
+    null_val_deal_3:'Backward Fill',
+    null_val_deal_4:'Equal to Zero',
+    null_val_del_hint:`1. find the latest value of 35 days before and after: When there is no value on the date series participating in the calculation, the index to find the nearest value forward/back as the value of the day to calculate, traversal allows across the year, up to 35 days before, up to 35 days after <br>
+    2. do not calculate: as long as an indicator has no value on a certain date (that is, null value), the calculated indicator has no value on that date <br>
+    3. Fill the previous value: empty value is first filled with the most recent previous value. When there is no previous value, fill with the last value <br>
+    4. post-value filling: the null value is first filled with the most recent post-value, when there is no previous value, fill with the post-value <br>
+    5. equal to 0: the null value is 0 value to participate in the calculation <br>
+    Note: The processing of missing values here applies to all time periods of the data`,
     max_null_val: 'MAX、MIN Null Value Handling',
+    max_null_val_2:'Skip null',
+    max_null_val_hint:`If there is a null value in the MAX and MIN formulas, handle it according to the following rules: <br>
+    1. equal to 0, null value with 0 to participate in the calculation; <br>
+    2. Skip the null value, remove the null value indicator, and calculate the remaining indicators. If all indicators of the date are null values, the date has no value;`,
     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',
+    formula_examp_hint:`1. support new segments, to achieve different segments use different formulas, if no new segments, all date sequences are calculated with a unified formula <br>
+    2. A new formula and time node need to be configured to add segments. The new formula is used before (excluding) the time node, and the configured formula is used after (including) the time node.
+    3. the segmented time node is not allowed to repeat, not allowed to exceed the date interval of the first indicator`,
     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: '平均值',
+    label_calendar_placeholder:'Please select a calendar',
+    label_val_type: 'Data Retrieval',
+    val_type_end: 'Period-End Value',
+    val_type_average: 'Average Value',
 
     /* 指标拼接弹窗 */
     concat_tab_1:'Direct Splicing',
@@ -121,7 +144,50 @@ export default {
     label_date_tab2: 'Union of Part of Dates',
 
     /* 最新值弹窗 */
-    latest_val: 'latest value'
+    latest_val: 'latest value',
+
+    /* 批量计算弹窗 */
+    title_batch_calc : 'Batch Calc - Select',
+    title_batch_save : 'Batch Save Results',
+    default_select_text : 'Default',
+    mean_imputation_select_text : 'Mean Imputation',
+    formula_example_text : 'Formula Example: A+100, or A*2',
+    formula_example_text_a_b : 'A+B, or A/B, A/(A+B)',
+    formula_lable: "Formula",
+    metric_label_b: "Metric B",
+    alpha_value_lable: "Alpha Value",
+    equal_zeto: "Equal to Zero",
+    sum_radio_label: "Sum",
+    average_radio_label: "Average",
+    pending_metrics: "Pending Metrics (<{num})",
+    label_classify:'Metric Category',
+    select_frequency: "Choose Frequency",
+    table_col_creator:'Creator',
+    label_all_check:'Select All List',
+    full_metric_name:'Full Metric Name',
+    add_to_selections:'Add to Selections',
+    serial_num:'Serial Number',
+    search_value_days_options:'Search Nearest Value Within 35 Days Before and After',
+    not_alculate_options:'Do Not Calculate',
+    forward_fill_options:'Forward Fill',
+    backward_fill_options:'Backward Fill',
+    edbTagA:'Metric A',
+    edbTagB:'Metric B',
+    specify_series_label:'Specify Metric Time Series',
+    union_series_label:'Union of All Metric Time Series',
+    numeric_greater_msg:'Please enter a numeric alpha value greater than 0 and less than 1',
+    select_indicator_msg:'Please select indicator B',
+    limit_indicators_msg:'The limit for batch adding indicators has been reached',
+    gen_metric_name_label:'Gen Metric Name',
+    metric_name_input:'Enter Metric Name',
+    catalogue_directory:'Catalogue / Directory',
+    subdirectory_radio:'Subdirectory',
+    directory_radio:'Same Directory',
+    calculating_batch:'Calculating Batch...',
+    complete_information_msg:'Please fill in the complete information',
+    please_which_take_msg:'Please wait for the calculation to complete, which may take 2-3 minutes',
+    time_duration_num:'Enter a valid number',
+    time_duration_type:'Select the correct time period'
   },
 
   /* 代码运算页面 */

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

@@ -3,6 +3,7 @@
 export default {
   /* 指标库页面 */
   EtaBasePage: {
+    tab_menu: '目录',
     add_edb_btn: '添加指标',
     calculation_edb_btn: '计算指标',
     replace_edb_btn: '替换指标',
@@ -53,12 +54,15 @@ export default {
     complate_info: '完善信息',
     no_companyid_msg: '请输入公司ID',
     no_edbid_msg: '请输入指标ID',
+    no_source_msg:'请选择来源',
+    no_database_msg:'请选择数据库',
+    search_hint:'搜索数据中...',
 
     /* 替换指标弹窗 */
     origin_edb: '原指标',
     replace: '替换为',
     replace_all: '全部替换',
-    replace_tip: '提示:替换后,图表和计算指标引用到原指标的会全部由替换指标替代',
+    replace_tip: '提示:替换后,图、表、计算指标和逻辑图引用到原指标的会全部由替换指标替代',
     replace_success_msg: '本次替换将持续较长时间,是否确认替换?',
     replace_ing_msg: '当前正在替换中,请耐心等待',
     input_origin_vaild: '原指标不能为空',
@@ -78,18 +82,37 @@ export default {
     add_more_param: '添加更多参数',
     create_edb_time_index: '生成指标时间序列',
     null_val_deal: '空值处理',
+    null_val_deal_0:'查找前后35天最近值',
+    null_val_deal_1:'不计算',
+    null_val_deal_2:'前值填充',
+    null_val_deal_3:'后值填充',
+    null_val_deal_4:'等于0',
+    null_val_del_hint:`1、查找前后35天最近值:在参与计算的日期序列上某指标无值时,该指标往前/往后找距离最近的值作为当天的值进行计算,遍历允许跨年,往前最多35天,往后最多35天<br>
+    2、不计算:只要有一个指标在某个日期没有值(即空值),则计算指标在该日期没有值 <br>
+    3、前值填充:空值优先以最近的前值填充,没有前值时,用后值填充 <br>
+    4、后值填充:空值优先以最近的后值填充,没有前值时,用后值填充 <br>
+    5、等于0:空值以0值参与计算 <br>
+    注意:此处缺失值的处理,作用于数据全部时间段`,
     max_null_val: 'MAX、MIN空值处理',
+    max_null_val_2:'跳过空值',
+    max_null_val_hint:`MAX、MIN公式中指标存在空值时按如下规则处理:<br>
+    1、等于0,空值用0参与计算;<br>
+    2、跳过空值,去除空值指标,剩余指标进行计算,若该日期所有指标均为空值,则该日期无值;`,
     calculate_formula: '计算公式',
     input_formula_msg: '请输入公式',
     input_formula_valid: '计算公式不能为空',
     input_date_msg: '选择日期',
     formula_examp: '公式示例',
+    formula_examp_hint:`1、支持新增分段,实现不同分段使用不同的计算公式,若未新增分段,则所有日期序列用统一公式计算<br>
+    2、新增分段需配置新公式和时间节点,在时间节点之前(不含)使用新公式,在时间节点之后(含)使用已配置公式,每个分段公式支持修改<br>
+    3、分段时间节点不允许重复,不允许超出第一个指标的日期区间`,
     func_examp: '函数支持',
     add_segm:'新增分段',
     num_overrun_msg: '添加指标个数已达上限',
     label_move_way: '移动方式',
     label_n_val: 'N等于',
     label_calendar: '日历',
+    label_calendar_placeholder:'请选择日历',
     label_val_type: '数据取值',
     val_type_end: '期末值',
     val_type_average: '平均值',
@@ -121,8 +144,51 @@ export default {
     label_date_tab2: '部分日期并集',
 
     /* 最新值弹窗 */
-    latest_val: '最新值'
+    latest_val: '最新值',
 
+    /* 批量计算弹窗 */
+    title_batch_calc : '批量计算-选择指标和计算公式',
+    title_batch_save : '批量计算-结果保存',
+    default_select_text : '默认',
+    mean_imputation_select_text : '均值填充',
+    formula_example_text : '公式示例:A+100,或A*2',
+    formula_example_text_a_b : '公式示例:A+B,或A/B,A/(A+B)',
+    formula_lable: "公式",
+    metric_label_b: "指标B",
+    alpha_value_lable: "alpha值",
+    equal_zeto: "等于0",
+    sum_radio_label: "求和",
+    average_radio_label: "求平均",
+    pending_metrics: "待选指标(选择指标数量不超过{num})",
+    label_classify:'指标分类',
+    select_frequency: "请选择频率",
+    table_col_creator:'创建人',
+    label_all_check:'列表全选',
+    full_metric_name:'指标全称',
+    add_to_selections:'加入已选指标',
+    serial_num:'序号',
+    search_value_days_options:'查找前后35天最近值',
+    not_alculate_options:'不计算',
+    forward_fill_options:'前值填充',
+    backward_fill_options:'后值填充',
+    edbTagA:'指标A',
+    edbTagB:'指标B',
+    specify_series_label:'指定指标时间序列',
+    union_series_label:'所有指标时间序列并集',
+    numeric_greater_msg:'请输入>0,<1的数值的alpha值',
+    select_indicator_msg:'请选择指标B',
+    limit_indicators_msg:'已达批量添加指标数量上限',
+    gen_metric_name_label:'生成指标名称',
+    metric_name_input:'请填写指标名称',
+    catalogue_directory:'目录',
+    subdirectory_radio:'分目录',
+    directory_radio:'同目录',
+    calculating_batch:'批量计算中...',
+    complete_information_msg:'请填写完整信息',
+    please_which_take_msg:'请等待计算完成,该过程可能持续2-3分钟',
+    time_duration_num:'请输入正确的数字',
+    time_duration_type:'请选择正确的时间段'
+     
   },
 
   /* 代码运算页面 */

+ 99 - 15
src/lang/modules/EtaBase/commonLang.js

@@ -33,8 +33,8 @@ export default {
     en: 'More Operation'
   },
   detail_en_btn:{
-    zh:'设置英文名称',
-    en:'Set English name'
+    zh:'编辑信息',
+    en:'Edit Information'
   },
   detail_recalculate_btn:{
     zh:'重新计算',
@@ -48,6 +48,22 @@ export default {
     zh:'查看数据',
     en:'View indicators'
   },
+  detail_formula_btn: {
+    zh:'查看公式',
+    en:'Formula'
+  },
+  detail_related_charts_btn: {
+    zh:'关联图',
+    en:'Related Charts'
+  },
+  detail_related_metrics_btn: {
+    zh:'关联指标',
+    en:'Related Metrics'
+  },
+  detail_return_btn:{
+    zh:'返回',
+    en:'Return'
+  },
   detail_del_btn:{
     zh:'删除',
     en:'Delete'
@@ -85,12 +101,12 @@ export default {
     en:'Switch to curve chart'
   },
   eta_name:{
-    zh:'ETA指标',
-    en:'ETA index'
+    zh:'指标',
+    en:'index'
   },
   eta_predictor_name:{
-    zh:'ETA预测指标',
-    en:'ETA predictor index'
+    zh:'预测指标',
+    en:'predictor index'
   },
   formula_instru: {
     zh:'公式说明',
@@ -108,6 +124,10 @@ export default {
     zh:'计算中...',
     en:'Calculating...'
   },
+  save_ing: {
+    zh:'保存中,请稍后······',
+    en:'Saving, please wait...'
+  },
   time_len_set: {
     zh:'时间长度设置',
     en:'Time Duration Setting'
@@ -124,6 +144,14 @@ export default {
     zh:'年数',
     en:'Number of years'
   },
+  please_select: {
+    en: "Please select",
+    zh: "请选择",
+  },
+  only_see_mine:{
+    zh:'只看我的',
+    en:'Just look at mine'
+  },
 
 
   /* 指标相关字段 */
@@ -239,8 +267,7 @@ export default {
     select_catalogue:{
       zh:'所属目录',
       en:'catalogue'
-    }
-
+    },
   },
 
   /* 单位 */
@@ -353,6 +380,14 @@ export default {
       zh:'天',
       en:'day'
     },
+    unfixed: {
+      zh:'无固定频率',
+      en:'Unfixed frequency'
+    },
+    total:{
+      zh:'全部',
+      en:'All'
+    }
   },
 
   /* 计算方式 */
@@ -363,7 +398,7 @@ export default {
     },
     to_month_quarter: {
       zh: '累计值转月/季值',
-      en: 'Convert Cumulative Values to Monthly/Quarterly'
+      en: 'Cumul to M/Q'
     },
     to_month: {
       zh: '累计值转月值',
@@ -383,15 +418,15 @@ export default {
     },
     n_move_average: {
       zh: 'N数值移动平均计算',
-      en: 'Calculation of N-number Moving Average'
+      en: 'N-Mov Avg'
     },
     n_rate: {
       zh: 'N数值环比值',
-      en: 'Sequential Growth Rate'
+      en: 'N-Seq Comp'
     },
     n_differ: {
       zh: 'N数值环差值',
-      en: 'N Period-over-Period Difference Calculation'
+      en: 'N-Seq Diff'
     },
     up_conver: {
       zh: '升频',
@@ -435,7 +470,7 @@ export default {
     },
     ex_smooth: {
       zh: '指数修匀',
-      en: 'Exponential Smoothing'
+      en: 'Index Smooth'
     },
     day_mean: {
       zh: '日均值',
@@ -466,7 +501,7 @@ export default {
       en: 'N-Period Period-over-Period Value'
     },
     period_difference: {
-      zh: 'N期环值',
+      zh: 'N期环值',
       en: 'N-Period Difference Value'
     },
     annualized: {
@@ -477,6 +512,34 @@ export default {
       zh: '降频',
       en: 'Downsample or Reduce Frequency'
     },
+    to_monthly_v2: {
+      zh: '转月值',
+      en: 'To Monthly Value'
+    },
+    to_quarterly_v2: {
+      zh: '转季值',
+      en: 'To Quarterly Value'
+    },
+    latest_processing: {
+      zh: '最新值处理',
+      en: 'Latest Value Processing'
+    },
+    compute_w_const: {
+      zh: '与常数计算',
+      en: 'Compute w/ Const'
+    },
+    single_metric_op: {
+      zh: '与单指标计算',
+      en: 'Single Metric Op'
+    },
+    multi_metric: {
+      zh: '多指标求和/平均',
+      en: 'Sum/Avg Multi-Metric'
+    },
+    super_seasonal: {
+      zh: '超级季节性',
+      en: 'Super Seasonal'
+    },
   },
 
   /* 指标添加form提示 */
@@ -633,6 +696,10 @@ export default {
       zh: '请输入单位',
       en: 'Please input unit'
     },
+    select_unit: {
+      zh: '请选择单位',
+      en: 'Please select a unit'
+    },
     input_fre: {
       zh: '请选择频度',
       en: 'Please input frequency'
@@ -672,7 +739,20 @@ export default {
     input_select_edb: {
       zh: '请选择指标',
       en: 'Please select Indicator'
+    },
+    input_n_value: {
+      zh: '请输入N数值',
+      en: 'Enter N Value'
+    },
+    input_keyword: {
+      zh: '请输入关键词',
+      en: 'Please enter a keyword'
+    },
+    input_value: {
+      zh: '请输入值',
+      en: 'Please input a value'
     }
+    
   },
   
   /* 公示说明 */
@@ -1149,7 +1229,11 @@ export default {
     },
     del_edb_use_chart: {
       zh: '当前指标已用作画图,不可删除',
-      en: 'The current indicator is being used for drawing and cannot be deleted.'
+      en: 'The current metric is in use for charting and cannot be deleted.'
+    },
+    del_edb_use_table: {
+      zh: '当前指标已被表格引用,不可删除',
+      en: 'The current metric is referenced by a table and cannot be deleted.'
     },
     del_menu_confirm: {
       zh: '确定删除当前目录吗?',

+ 21 - 1
src/lang/modules/EtaChart/En.js

@@ -42,6 +42,8 @@ export default {
 
     //图例设置弹窗
     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.',
+    legend_placeholder:'Please enter a legend name',
+    legend_check_hint:'All legend names cannot be empty',
 
     //标示线区弹窗
     add_plotline_btn: 'Add Marker Line',
@@ -50,6 +52,7 @@ export default {
     edit_plotarea_btn: 'Edit Marker Area',
     add_intro_btn: 'Add Chart Description',
     label_select_serie:'Select axis',
+    label_select_seris_placeholder:'Please select the date axis',
     label_line_scale:'Marker line position',
     label_area_scale:'Marker area range',
     label_line_sty:'Line Type',
@@ -82,6 +85,23 @@ export default {
     label_replace_edb: 'Replace Indicator',
     label_replace_to:'Replace with',
     label_add_moreserie:'More series configurations',
-    label_date_unit:'Day'
+    label_date_unit:'Day',
+
+
+
+    //图表单位转换
+    data_transformation: "Data Transformation",
+    divide_by: "Divide by",
+    multiply_by: "Multiply by",
+    logarithm: "Logarithm",
+    /**
+     * 单位:Edb.Detail.e_unit
+     * 保存:Dialog.confirm_save_btn
+     */
+    chart_set_radio: "Set to chart unit",
+    data_transformation_hint: "Invalid data conversion, please check the value",
+    data_transformation_hint2: "The indicator data contains negative numbers or zeros and cannot be logarithmically calculated",
+    data_transformation_list_hint: "Invalid data conversion, please check the value",
+    data_transformation_list_hint2: "The indicator data contains negative numbers or zeros and cannot be logarithmically calculated"
   }
 }

+ 19 - 1
src/lang/modules/EtaChart/Zh.js

@@ -42,6 +42,8 @@ export default {
 
     //图例设置弹窗
     legend_hint: '默认取该曲线最新日期的数据年份作为图例名称,手动编辑为其他格式,则不再自动更新',
+    legend_placeholder:'请输入图例名称',
+    legend_check_hint:'所有图例名称都不能为空',
 
     //标示线区弹窗
     add_plotline_btn: '添加标识线',
@@ -50,6 +52,7 @@ export default {
     edit_plotarea_btn: '编辑标识区',
     add_intro_btn: '添加图表说明',
     label_select_serie:'选择坐标轴',
+    label_select_seris_placeholder:'请选择日期坐标轴',
     label_line_scale:'标识线所在刻度',
     label_area_scale:'标识区所在范围',
     label_line_sty:'线型',
@@ -82,6 +85,21 @@ export default {
     label_replace_edb: '指标替换',
     label_replace_to:'替换为',
     label_add_moreserie:'更多系列配置',
-    label_date_unit:'天'
+    label_date_unit:'天',
+
+    //图表单位转换
+    data_transformation: "数据转换",
+    divide_by: "除以",
+    multiply_by: "乘以",
+    logarithm: "对数",
+    /**
+     * 单位:Edb.Detail.e_unit,e_en_unit
+     * 保存:Dialog.confirm_save_btn
+     */
+    chart_set_radio: "设置为图表单位",
+    data_transformation_hint: "数据转换不合法,请检查数值",
+    data_transformation_hint2: "指标数据含有负数或0,无法进行对数运算",
+    data_transformation_list_hint: "第{num}个数据转换不合法,请检查数值",
+    data_transformation_list_hint2: "第{num}个指标数据含有负数或0,无法进行对数运算"
   }
 }

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

@@ -40,6 +40,14 @@ export default {
     zh:'请选择时间段',
     en:'Please select time period'
   },
+  date_tip_count:{
+    zh:'最近{year}年',
+    en:'Last {year} years'
+  },
+  data_tip_since:{
+    zh:'{date}~至今',
+    en:'Since {date}'
+  },
   calendar_gre: {
     zh: '公历',
     en: 'Gregorian Calendar'
@@ -144,6 +152,30 @@ export default {
     zh:'固定日期',
     en:'Fixed Date'
   },
+  upload_to_forum:{
+    zh:'上传至社区',
+    en:'Upload to Forum'
+  },
+  update_to_forum:{
+    zh:'同步至社区',
+    en:'Update to Forum'
+  },
+  withdraw_from_forum:{
+    zh:'从社区撤回',
+    en:'Withdraw from Forum'
+  },
+  upload_to_forum_title:{
+    zh:'上传图表至社区',
+    en:'Chart upload to Forum'
+  },
+  upload_to_forum_tip:{
+    zh:'逻辑简述',
+    en:'Introduction'
+  },
+  upload_to_forum_placeholder:{
+    zh:'请简述图表逻辑',
+    en:'Please Enter Introduction'
+  },
 
   //操作提示文案
   OptMsg:{
@@ -179,6 +211,14 @@ export default {
       zh:'您选择的图表样式为季节性图表,只支持单指标画图',
       en:'The chart style you selected is a seasonal chart, which only supports single indicator drawing'
     },
+    season_add_hint:{
+        zh:'请添加系列指标',
+        en:'Please Add a series indicator'
+    },
+    season_area_hint:{
+        zh:'横坐标显示范围不能为空',
+        en:'The horizontal coordinate display range cannot be empty'
+    },
     scatter_onlytwo_msg: {
       zh:'您选择的图表样式为散点图,最多支持2个指标',
       en:'The chart style you have selected is a scatter plot, which supports a maximum of 2 indicators'
@@ -526,8 +566,8 @@ export default {
   /* 所有source */
   AllChartSource: {
     eta_chart: {
-      en: "ETA Gallery",
-      zh: "ETA图库",
+      en: "Gallery",
+      zh: "图库",
     },
     commodity_chart: {
       en: "Commodity Price Curve",

+ 2 - 1
src/lang/modules/MainApp/En.js

@@ -43,7 +43,7 @@ export default {
     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',
+    ph_msg_code: 'Enter verification code',
     ver_code_msg:'Get verification code',
     recode_ing_msg:'Retrieve Again({count})seconds',
     recode_msg:'Retrieve Again',
@@ -63,5 +63,6 @@ export default {
 
     tab_vaild_phone:'Mobile Phone Verification',
     tab_vaild_email:'Email Verification',
+    no_menu_hint:'This account does not have any menu permissions. Please contact the administrator',
   }
 }

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

@@ -63,5 +63,6 @@ export default {
 
     tab_vaild_phone:'手机号验证',
     tab_vaild_email:'邮箱验证',
+    no_menu_hint:"该账号没有任何菜单权限,请联系管理员"
   }
 }

+ 2 - 1
src/lang/modules/MyEta/En.js

@@ -78,6 +78,7 @@ export default {
     label_label_link:'Node Link',
     ph_link: 'Please select a node link',
 
-    no_graph_msg: 'Please draw canvas content'
+    no_graph_msg: 'Please draw canvas content',
+    upload_pic_fail:'Upload picture failed'
   }
 }

+ 2 - 1
src/lang/modules/MyEta/Zh.js

@@ -79,6 +79,7 @@ export default {
     label_label_link:'节点链接',
     ph_link: '请选择节点链接',
 
-    no_graph_msg: '请绘制画布内容'
+    no_graph_msg: '请绘制画布内容',
+    upload_pic_fail:'上传图片失败'
   }
 }

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

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

+ 5 - 3
src/lang/modules/PredictEdb/Zh.js

@@ -6,7 +6,7 @@ export default {
   PredictEdbPage: {
     only_see_mine: '只看我的',
     total_list_view: '共{limit}个预测指标',
-    del_edb_msg: 'ETA预测指标删除后不可恢复,确认删除吗',
+    del_edb_msg: '预测指标删除后不可恢复,确认删除吗',
     
     /* 查看基础指标弹窗 */
     view_rules: '查看预测规则',
@@ -32,6 +32,7 @@ export default {
     season_select_cont: '连续N年',
     season_select_formula: '指定N年',
     label_periods: '期数',
+    label_years: '年数',
     option_season_calendar1: '公历',
     option_season_calendar2: '农历',
     label_yoy_year: '同比年份',
@@ -55,7 +56,8 @@ export default {
     label_value_yoy_end: '同比增速终值',
     label_value_year: '年度值',
 
-    label_rule: '规则',
+    // label_rule: '规则',
+    label_time_period: '时间段',
     rule_newset: '最新',
     rule_fix: "固定值" ,
     rule_onyear: "同比" ,
@@ -71,7 +73,7 @@ export default {
     rule_yoy_growth: "同比增速差值" ,
     rule_linear_reg: "一元线性拟合" ,
     rule_n_year: 'N年均值',
-    rule_value_back: '年度倒退值',
+    rule_value_back: '年度值倒推',
     rule_tip: `
       预测规则说明:<br> 
       1、最新:预测值全部等于最新值;<br>

+ 1 - 1
src/lang/modules/ReportManagement/AuthorManagement.js

@@ -22,7 +22,7 @@ export const AuthorManagementEn = {
   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: "Report Type",
   research_report_type_select: "Please select the type of research report",
 
 

+ 56 - 1
src/lang/modules/ReportManagement/CategoryList.js

@@ -6,7 +6,7 @@
 export const CategoryListEn = {
   chinese_tabs: "Chinese Classification",
   english_tabs: "English research reports",
-  add_category_btn: "Add category",
+  add_category_btn: "Add Category",
   edit_category_btn: "Edit Category",
   category_name_ipt: "Category Name",
   one_category_table: "First-level category",
@@ -92,6 +92,31 @@ export const CategoryListEn = {
   check_permissions: "Please check the following permissions",
   Permission_success_msg: "Permission configuration successful",
   is_delete_chapter: "Are you sure to delete this chapter?",
+
+
+    /* 新版 */
+    add_category: "Add Category",
+    edit_category: "Edit Category",
+    //弹窗内容
+    category_name: "Category Name",
+    category_name_hint: "Enter Category Name",
+    category_name_check_hint: "Category Name: {name} Already Exists",
+    section_settings: "Section Settings",
+    add_section: "Add Section",
+    edit_section: "Edit Section",
+    section_name: "Section Name",
+    section_name_hint: "Enter Section Name",
+    parent_category: "Parent Category",
+    parent_none: "none",
+    related_variety: "Related Variety",
+    related_variety_inputhint: "Please Select",
+    related_variety_hint: "Control Report Reading Permission",
+    addition_successful: "Addition Successful",
+    modification_successful: "Modification Successful",
+    move_successful: "Move Successful",
+    add_section_successful: "Add Section Successful",
+    edit_section_successful: "Edit Section Successful",
+    setup_successful: "Setup Successful"
 };
 
 /* 中文 */
@@ -184,4 +209,34 @@ export const CategoryListZh = {
   check_permissions: "请勾选以下权限配置",
   Permission_success_msg: "权限配置成功",
   is_delete_chapter: "确认删除这个章节吗?",
+
+
+
+    /* 新版 */
+    add_category: "添加分类",
+    edit_category:"编辑分类",
+    /**
+     * 保存 取消:Dialog.confirm_save_btn,cancel_btn
+     * 启用 禁用: Common.enable,disable
+     */
+    category_name: "分类名称",
+    category_name_hint: "请输入分类名称",
+    category_name_check_hint: "分类名称: {name} 已存在",
+    section_settings: "章节设置",
+    add_section: "添加章节",
+    edit_section: "编辑章节",
+    section_name: "章节名称",
+    section_name_hint: "请输入章节名称",
+    parent_category: "上级分类",
+    parent_none:'无',
+    related_variety: "关联品种",
+    related_variety_inputhint: "请选择",
+    related_variety_hint: "控制报告阅读权限",
+    addition_successful: "新增成功",
+    modification_successful: "修改成功",
+    move_successful: "移动成功",
+    add_section_successful: "添加章节成功",
+    edit_section_successful: "编辑章节成功",
+    setup_successful: "设置成功" 
 };
+

+ 12 - 2
src/lang/modules/ReportManagement/CloudPage.js

@@ -11,6 +11,7 @@ export const CloudPageEn = {
   create_btn: "Create",
   folder_error_msg: "The folder exists",
   folder_success_msg: "New folder created successfully",
+  selected_msg:"Selected {num} files/folders",
   // 上传文件
   upload_btn: "Upload document",
   select_folder_title: "Select folder",
@@ -20,6 +21,7 @@ export const CloudPageEn = {
   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",
+  upload_msg:"Uploading, please hold on······",
   //   表格
   column_name: "Name",
   column_author: "Author",
@@ -33,9 +35,12 @@ export const CloudPageEn = {
   rename_dialog_success_msg: "Rename successful",
   download_info_msg: "is starting to download. Please do not download again",
   download_success_msg: "Download successful",
+  download_fail_msg:"Download failed",
   delete_success_msg: "Delete successful",
   table_no_file: "No file available",
-  everything:'Everything'
+  everything:'Everything',
+  download_msg:"The folder is empty and cannot be downloaded",
+  download_banch_msg:"Please select at least one file/folder",
 };
 
 /* 中文 */
@@ -47,6 +52,7 @@ export const CloudPageZh = {
   create_btn: "创建",
   folder_error_msg: "该文件夹已存在",
   folder_success_msg: "新建文件夹成功",
+  selected_msg:"已选中{num}个文件/文件夹",
   // 上传文件
   upload_btn: "上传文件",
   select_folder_title: "选择文件夹",
@@ -56,6 +62,7 @@ export const CloudPageZh = {
   upload_folder_error_msg: "请选择文件夹目录",
   upload_please_error_msg: "已有同名文件,是否继续上传文件?",
   upload_confirm_btn: "保留两者",
+  upload_msg:"上传中,请稍后······",
   //   表格
   column_name: "名称",
   column_author: "创建人",
@@ -69,7 +76,10 @@ export const CloudPageZh = {
   rename_dialog_success_msg: "重命名成功",
   download_info_msg: "开始下载,请勿重复下载",
   download_success_msg: "下载成功 ",
+  download_fail_msg:"下载失败",
   delete_success_msg: "删除成功",
   table_no_file: "暂无文件",
-  everything:'全部'
+  everything:'全部',
+  download_msg:"文件夹为空,暂不支持下载",
+  download_banch_msg:"请至少选择一个文件/文件夹",
 };

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

@@ -1,5 +1,5 @@
 /**
- * 研报管理--品种配置
+ * 研报管理--品种管理
  */
 
 /* 英文 */
@@ -19,6 +19,27 @@ export const CommodityConfigurationEn = {
   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",
+
+
+  /* 新版 */
+  chinese_tabs: "CN Commodity",
+  english_tabs: "EN Commodity",
+  add_variety: "Add Variety",
+  edit_variety: "Variety Settings",
+  variety_name: "Variety Name",
+  parent_variety: "Parent Variety",
+  active_status: "Active Status",
+  set_root_hint:"The default value is private. Select and save the Settings to public",
+  set_root_text:"Public permission Settings",
+  variety_name_hint: "Enter Variety Name",
+  variety_name_check_hint: "Please Fill in Variety Name",
+  variety_name_check_hint2: "Variety Name Exists",
+  variety_add_succ_msg: "Addition Successful",
+  variety_edit_succ_msg: "Edit Successful",
+  variety_public:"Public",
+  variety_private:"Private",
+
+
 };
 
 /* 中文 */
@@ -38,6 +59,31 @@ export const CommodityConfigurationZh = {
   delete_info_msg: "确认删除吗?",
   delete_success_msg: "删除成功",
   delete_error_msg: "请先删除该品种下关联品种",
+
+
+
+  /* 新版 */
+  chinese_tabs: "中文品种",
+  english_tabs: "英文品种",
+  add_variety: "添加品种",
+  edit_variety: "品种设置",
+  variety_name: "品种名称",
+  parent_variety: "上级品种",
+  active_status: "启动状态",
+  set_root_hint:"默认为私有,勾选并保存设置为公有",
+  set_root_text:"公有权限设置",
+  variety_name_hint: "请输入品种名称",
+  variety_name_check_hint: "请填写品种名称",
+  variety_name_check_hint2: "品种名称已存在",
+  variety_add_succ_msg: "新增成功",
+  variety_edit_succ_msg: "编辑成功",
+  variety_public:"公有",
+  variety_private:"私有",
+  /**
+   * 全选 Common.all_select
+   * 确定,取消 Dialog.confirm_btn,cancel_btn
+   * 设置成功 ReportManage.CategoryList.setup_successful
+   */
 };
 
 /*

+ 23 - 15
src/lang/modules/ReportManagement/ReportList.js

@@ -14,7 +14,9 @@ export const ReportListEn = {
   designated_personnel: "Designated personnel",
   designated_sender_information: "Designated sender information:",
   please_select_personnel: "Please select personnel",
-  click_through_details: "点击量详情 Click through details",
+  pv_detail:'PV Details',
+  uv_detail:'UV Details',
+  click_through_details: "Click through details",
   customer_name: "Customer Name",
   email_address: "e-mail address",
   Last_click_time: "Last click time",
@@ -34,10 +36,10 @@ export const ReportListEn = {
   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",
+  click_refresh_btn: "Rfrsh",
   preview_btn: "Preview",
-  save_draft_btn: "Save Draft",
-  scheduled_publish_btn: "Scheduled Publish",
+  save_draft_btn: "Draft",
+  scheduled_publish_btn: "Schedule",
   publish_btn: "Publish",
   submission_btn: "Submission",
   new_method_btn: "New method",
@@ -47,18 +49,18 @@ export const ReportListEn = {
   frequency_select: "Frequency",
   creation_time_select: "Creation time",
   insert_chart_tabs: "Insert chart",
-  chart_inventory_radio: "ETA Gallery",
+  chart_inventory_radio: "Gallery",
   price_curve_radio: "Commodity price curve",
   related_charts_radio: "Related Charts",
-  curve_fitting_radio: "Curve fitting",
-  statistical_feature_radio: "Statistical Feature",
-  intercommodity_analysis_radio: "Intercommodity Analysis",
+  curve_fitting_radio: "Fit Curve",
+  statistical_feature_radio: "Stats Traits",
+  intercommodity_analysis_radio: "Cross-Comm",
   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",
+  bulk_insertion_tabs: "My gallery batch insert",
   semantic_analysis_tabs: "Semantic Analysis Insertion",
   publish_time: "Publish Time",
   select_date_and_time: "Select Date and Time",
@@ -71,12 +73,14 @@ export const ReportListEn = {
   select_date: "Select date",
   charts_update_btn: "Charts update",
   library_top_type: "Territory Lib",
-  eta_top_type: "ETA table",
+  eta_top_type: "table",
   statistical_top_type: "Stats Analysis",
   sandbox_top_type: "Sandbox",
   semantic_top_type: "Semantic Analy",
   chart_top_type: "Chart Inventory",
   insert_charts_msg: "Please insert charts",
+  select_header_setting:"Select the Page header",
+  select_trailer_setting:"Select the Page trailer",
   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",
@@ -89,7 +93,7 @@ export const ReportListEn = {
   page_trailer_op: "Page Trailer",
   select_layout_msg: "Please select a layout",
   keyword_search: "Keyword Search",
-  correlation_analysis: "Correlation Analysis",
+  correlation_analysis: "Correlation",
   text_editing: "Text Editing",
   chart_category_name: "Chart Category Name",
   click_import: "One click import",
@@ -130,8 +134,10 @@ export const ReportListZh = {
   designated_personnel: "指定人员",
   designated_sender_information: "指定发送人员信息:",
   please_select_personnel: "请选择人员",
+  pv_detail:'PV详情',
+  uv_detail:'UV详情',
   click_through_details: "点击量详情",
-  click_through_details: "客户名称",
+  customer_name:"客户名称",
   email_address: "邮箱地址",
   Last_click_time: "最近点击时间",
   hits_btn: "点击量",
@@ -164,7 +170,7 @@ export const ReportListZh = {
   frequency_select: "频度",
   creation_time_select: "创建时间",
   insert_chart_tabs: "图表插入",
-  chart_inventory_radio: "ETA图库",
+  chart_inventory_radio: "图库",
   price_curve_radio: "商品价格曲线",
   related_charts_radio: "相关性图表",
   curve_fitting_radio: "拟合方程曲线",
@@ -175,7 +181,7 @@ export const ReportListZh = {
   no_reports_msg: "沙盘名称/品种",
   insert_table_tabs: "表格插入",
   table_name_tabs: "表格名称",
-  bulk_insertion_tabs: "MyETA批量插入",
+  bulk_insertion_tabs: "我的图库批量插入",
   semantic_analysis_tabs: "语义分析插入",
   publish_time: "发送时间",
   select_date_and_time: "选择日期时间",
@@ -188,12 +194,14 @@ export const ReportListZh = {
   select_date: "选择日期",
   charts_update_btn: "图表刷新",
   library_top_type: "版图资源库",
-  eta_top_type: "ETA表格",
+  eta_top_type: "表格",
   statistical_top_type: "统计分析",
   sandbox_top_type: "沙盘图",
   semantic_top_type: "语义分析",
   chart_top_type: "图库",
   insert_charts_msg: "请插入图表",
+  select_header_setting:"请选择版头",
+  select_trailer_setting:"请选择版尾",
   header_setting_msg: "版头设置成功",
   trailer_setting_msg: "版尾设置成功",
   chart_refreshed_msg: "图表正在刷新中,请勿重复操作",

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff