瀏覽代碼

marge lang_dev

bding 1 年之前
父節點
當前提交
dbd05d00bb
共有 98 個文件被更改,包括 2065 次插入612 次删除
  1. 4 4
      src/App.vue
  2. 9 0
      src/api/modules/chartRelevanceApi.js
  3. 7 0
      src/api/modules/setApi.js
  4. 二進制
      src/assets/img/cloudDisk/audio_icon.png
  5. 0 0
      src/assets/img/cloudDisk/config_icon.png
  6. 二進制
      src/assets/img/cloudDisk/excel_icon.png
  7. 二進制
      src/assets/img/cloudDisk/file_icon.png
  8. 二進制
      src/assets/img/cloudDisk/img_icon.png
  9. 0 0
      src/assets/img/cloudDisk/pdf_icon.png
  10. 0 0
      src/assets/img/cloudDisk/ppt_icon.png
  11. 二進制
      src/assets/img/cloudDisk/video_icon.png
  12. 二進制
      src/assets/img/cloudDisk/word_icon.png
  13. 1 1
      src/components/chart/chartDetailHandlesWrap.vue
  14. 52 0
      src/lang/commonLang.js
  15. 8 1
      src/lang/modules/DataSources/En.js
  16. 7 1
      src/lang/modules/DataSources/Zh.js
  17. 5 1
      src/lang/modules/EtaBase/commonLang.js
  18. 8 0
      src/lang/modules/EtaChart/commonLang.js
  19. 67 0
      src/lang/modules/MainApp/En.js
  20. 67 0
      src/lang/modules/MainApp/Zh.js
  21. 4 2
      src/lang/modules/MyEta/En.js
  22. 3 1
      src/lang/modules/MyEta/Zh.js
  23. 7 0
      src/lang/modules/SandboxManage/SandList.js
  24. 3 3
      src/utils/svgToblob.js
  25. 8 20
      src/views/Home.vue
  26. 115 100
      src/views/Login.vue
  27. 12 5
      src/views/chartFrame_manage/frameEditor.vue
  28. 2 2
      src/views/chartFrame_manage/index.vue
  29. 2 0
      src/views/chartRelevance_manage/components/chartCard.vue
  30. 6 2
      src/views/chartRelevance_manage/components/explainText.js
  31. 7 5
      src/views/chartRelevance_manage/crossVarietyAnalysis/chartEditor.vue
  32. 68 5
      src/views/chartRelevance_manage/crossVarietyAnalysis/components/chartFormSection.vue
  33. 72 4
      src/views/chartRelevance_manage/crossVarietyAnalysis/list.vue
  34. 16 2
      src/views/chartRelevance_manage/css/index.scss
  35. 34 1
      src/views/chartRelevance_manage/statistic/statisticFeatureChartEditor.vue
  36. 83 4
      src/views/dataEntry_manage/addChart.vue
  37. 91 10
      src/views/dataEntry_manage/chartSetting.vue
  38. 7 4
      src/views/dataEntry_manage/coal/index.vue
  39. 30 12
      src/views/dataEntry_manage/components/addTarget.vue
  40. 3 3
      src/views/dataEntry_manage/components/changeLang.vue
  41. 33 21
      src/views/dataEntry_manage/components/editTarget.vue
  42. 8 0
      src/views/dataEntry_manage/css/baseTargetPage.scss
  43. 3 2
      src/views/dataEntry_manage/css/coalCommon.scss
  44. 4 4
      src/views/dataEntry_manage/dataEntry.vue
  45. 12 2
      src/views/dataEntry_manage/databaseComponents/addTargetDiaBase.vue
  46. 10 6
      src/views/dataEntry_manage/databaseList.vue
  47. 85 5
      src/views/dataEntry_manage/editChart.vue
  48. 100 8
      src/views/dataEntry_manage/mixins/addOreditMixin.js
  49. 307 19
      src/views/dataEntry_manage/mixins/chartPublic.js
  50. 14 9
      src/views/dataEntry_manage/targetList.vue
  51. 7 5
      src/views/dataEntry_manage/thirdBase/BAIINFOTargetbase.vue
  52. 6 4
      src/views/dataEntry_manage/thirdBase/FwmtData.vue
  53. 7 5
      src/views/dataEntry_manage/thirdBase/SCITargetbase.vue
  54. 10 4
      src/views/dataEntry_manage/thirdBase/YyzxData.vue
  55. 1 1
      src/views/dataEntry_manage/thirdBase/components/batchAddEdbDia.vue
  56. 3 2
      src/views/dataEntry_manage/thirdBase/elaSteoBase.vue
  57. 1 0
      src/views/dataEntry_manage/thirdBase/glTargetbase.vue
  58. 1 0
      src/views/dataEntry_manage/thirdBase/lzTargetbase.vue
  59. 12 10
      src/views/dataEntry_manage/thirdBase/smmTargetbase.vue
  60. 7 6
      src/views/dataEntry_manage/thirdBase/steelChemicalbase.vue
  61. 26 2
      src/views/datasheet_manage/common/option.js
  62. 1 0
      src/views/datasheet_manage/customAnalysis/list.vue
  63. 9 4
      src/views/datasheet_manage/sheetList.vue
  64. 16 13
      src/views/login_manage/EmailModel.vue
  65. 18 18
      src/views/login_manage/ForgetPassModel.vue
  66. 17 14
      src/views/login_manage/MobileModel.vue
  67. 9 9
      src/views/login_manage/OrdinaryModel.vue
  68. 6 2
      src/views/login_manage/components/ModelSteps.vue
  69. 1 1
      src/views/login_manage/components/VerificationBox.vue
  70. 2 2
      src/views/login_manage/modelMixins.js
  71. 110 66
      src/views/mychart_manage/components/chartDetailDia.vue
  72. 4 4
      src/views/mychart_manage/components/classifyDeleteCheck.vue
  73. 14 15
      src/views/mychart_manage/index.vue
  74. 12 11
      src/views/operation_manage/AIQA/AIQA.vue
  75. 8 5
      src/views/operation_manage/AIQA/components/messageItem.vue
  76. 194 11
      src/views/ppt_manage/mixins/mixins.js
  77. 8 4
      src/views/ppt_manage/mixins/pptMixins.js
  78. 1 0
      src/views/ppt_manage/newVersion/pptCatalog.vue
  79. 1 0
      src/views/ppt_manage/newVersion/pptEnCatalog.vue
  80. 6 2
      src/views/predictEdb_manage/predictEdb.vue
  81. 2 2
      src/views/report_manage/addreportNew.vue
  82. 37 2
      src/views/report_manage/cloudDisk.vue
  83. 1 1
      src/views/report_manage/editreportNew.vue
  84. 1 1
      src/views/report_manage/mixins/editor.js
  85. 1 1
      src/views/report_manage/mixins/reportMixin.js
  86. 2 2
      src/views/report_manage/reportEn/reportEditor.vue
  87. 19 23
      src/views/resetpassword.vue
  88. 6 8
      src/views/sandbox_manage/common/mindmap.js
  89. 3 3
      src/views/sandbox_manage/common/toolConfig.js
  90. 17 30
      src/views/sandbox_manage/index_new_version.vue
  91. 2 1
      src/views/sandbox_manage/sandFlowNew/components/addLInkDia.vue
  92. 39 30
      src/views/sandbox_manage/sandFlowNew/index.vue
  93. 2 2
      src/views/smartReport/components/BaseInfo.vue
  94. 4 3
      src/views/smartReport/components/ImgSource.vue
  95. 1 1
      src/views/smartReport/components/TextEdit.vue
  96. 10 5
      src/views/system_manage/components/addUserDialog.vue
  97. 15 7
      src/views/system_manage/departManage.vue
  98. 1 1
      src/vuex/modules/sand.js

+ 4 - 4
src/App.vue

@@ -226,8 +226,8 @@ iframe {
 
 
 /*修改滚动条样式 chrome edge safari*/
 /*修改滚动条样式 chrome edge safari*/
 div::-webkit-scrollbar {
 div::-webkit-scrollbar {
-  width: 6px;
+  width: 7px;
-  height: 6px;
+  height: 7px;
 }
 }
 div::-webkit-scrollbar-track {
 div::-webkit-scrollbar-track {
   background: rgb(239, 239, 239);
   background: rgb(239, 239, 239);
@@ -278,8 +278,8 @@ div::-webkit-scrollbar-corner {
 
 
 /*修改滚动条样式 chrome edge safari*/
 /*修改滚动条样式 chrome edge safari*/
 ul::-webkit-scrollbar {
 ul::-webkit-scrollbar {
-  width: 6px;
+  width: 7px;
-  height: 6px;
+  height: 7px;
 }
 }
 ul::-webkit-scrollbar-track {
 ul::-webkit-scrollbar-track {
   background: rgb(239, 239, 239);
   background: rgb(239, 239, 239);

+ 9 - 0
src/api/modules/chartRelevanceApi.js

@@ -1018,5 +1018,14 @@ export const crossVarietyInterface = {
      */
      */
     getTagRelation: params => {
     getTagRelation: params => {
       return http.get('/cross_variety/tag/variety_edb/list',params)
       return http.get('/cross_variety/tag/variety_edb/list',params)
+    },
+
+    /**
+     * 保存图表上下限
+     * @param {*} params 
+     * @returns 
+     */
+    saveChart: params => {
+      return http.post('/cross_variety/chart_info/save',params)
     }
     }
 }
 }

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

@@ -338,6 +338,13 @@ const departInterence = {
 	getPhoneAreaCode:params=>{
 	getPhoneAreaCode:params=>{
 		return http.get('/user_login/area_code/list',params)
 		return http.get('/user_login/area_code/list',params)
 	},
 	},
+
+	// 判断用户是否为域用户
+	checkUserIsLdap:params=>{
+		return http.post('/user_login/ldap/user_check',params)
+	},
+
+
 	/**
 	/**
 	 * 获取登录页的信息 
 	 * 获取登录页的信息 
 	 * @returns ETATitle登录标题 Icp备案信息
 	 * @returns ETATitle登录标题 Icp备案信息

二進制
src/assets/img/cloudDisk/audio_icon.png


+ 0 - 0
src/assets/img/icons/file_type_unknown.png → src/assets/img/cloudDisk/config_icon.png


二進制
src/assets/img/cloudDisk/excel_icon.png


二進制
src/assets/img/cloudDisk/file_icon.png


二進制
src/assets/img/cloudDisk/img_icon.png


+ 0 - 0
src/assets/img/icons/file_type_pdf.png → src/assets/img/cloudDisk/pdf_icon.png


+ 0 - 0
src/assets/img/icons/file_type_ppt.png → src/assets/img/cloudDisk/ppt_icon.png


二進制
src/assets/img/cloudDisk/video_icon.png


二進制
src/assets/img/cloudDisk/word_icon.png


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

@@ -23,7 +23,7 @@
         ><i class="el-icon-refresh" style="margin-left: 0" />&nbsp;{{$t('Edb.detail_refresh_btn')}}
         ><i class="el-icon-refresh" style="margin-left: 0" />&nbsp;{{$t('Edb.detail_refresh_btn')}}
       </span>
       </span>
     </li>
     </li>
-    <li class="span-item" v-if="['/commordityChartBase'].includes($route.path)">
+    <li class="span-item" v-if="['/commordityChartBase','/crossVarietyChartList'].includes($route.path)">
       <span @click="saveChartHandle">
       <span @click="saveChartHandle">
         <i class="el-icon-collection" />&nbsp;{{$t('Chart.chart_save_btn')}}
         <i class="el-icon-collection" />&nbsp;{{$t('Chart.chart_save_btn')}}
       </span>
       </span>

+ 52 - 0
src/lang/commonLang.js

@@ -48,6 +48,14 @@ export default {
     submit_btn: {
     submit_btn: {
       en: 'Submit',
       en: 'Submit',
       zh: '提交'
       zh: '提交'
+    },
+    next_step: {
+      en: 'Next step',
+      zh: '下一步'
+    },
+    prev_step: {
+      en: 'Previous step',
+      zh: '上一步'
     }
     }
   },
   },
   Table: {
   Table: {
@@ -167,6 +175,10 @@ export default {
       en: "Saved successfully.",
       en: "Saved successfully.",
       zh: "保存成功",
       zh: "保存成功",
     },
     },
+    entry_msg: {
+      en: "Entry Successful",
+      zh: "录入成功",
+    },
     delete_info_msg: {
     delete_info_msg: {
       en: "Are you sure you want to permanently delete this file?",
       en: "Are you sure you want to permanently delete this file?",
       zh: "删除后不可恢复,是否确认删除?",
       zh: "删除后不可恢复,是否确认删除?",
@@ -238,6 +250,18 @@ export default {
     move_success_msg: {
     move_success_msg: {
       en: 'Move successful',
       en: 'Move successful',
       zh: '移动成功'
       zh: '移动成功'
+    },
+    move_out_msg: {
+      en: 'Removed successful',
+      zh: '移出成功'
+    },
+    clean_classify_msg: {
+      en: 'Category Cleared Successfully',
+      zh: '清除分类成功'
+    },
+    confirm_logout_msg: {
+      en: 'Are you sure you want to log out?',
+      zh: '确认退出吗?'
     }
     }
   },
   },
   Common: {
   Common: {
@@ -304,6 +328,34 @@ export default {
     copy_excel: {
     copy_excel: {
       en: 'Copy Excel Data',
       en: 'Copy Excel Data',
       zh: '复制excel数据',
       zh: '复制excel数据',
+    },
+    switch_to_en_v: {
+      en: 'Switch to English version',
+      zh: '切换英文版',
+    },
+    switch_to_zh_v: {
+      en: 'Switch to Chinese version',
+      zh: '切换中文版',
+    },
+    switch_to_en: {
+      en: 'Switch to English',
+      zh: '切换英文',
+    },
+    switch_to_zh: {
+      en: 'Switch to Chinese',
+      zh: '切换中文',
+    },
+    ya_hei:{
+      en:'Microsoft YaHei',
+      zh:'微软雅黑'
+    },
+    sim_sun:{
+      en:'SimSun',
+      zh:'宋体'
+    },
+    sim_hei:{
+      en:'SimHei',
+      zh:'黑体'
     }
     }
   },
   },
   Edb,
   Edb,

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

@@ -58,6 +58,10 @@ export default {
     step_two:'2. Step Two: Upload data. Click on "Import Data" to upload the completed template and confirm the import. ',
     step_two:'2. Step Two: Upload data. Click on "Import Data" to upload the completed template and confirm the import. ',
     step_three:'Step Three: Complete the import. If there is any data that failed to import, download ',
     step_three:'Step Three: Complete the import. If there is any data that failed to import, download ',
     upload_size_msg:'The file size must not exceed 10MB',
     upload_size_msg:'The file size must not exceed 10MB',
+    down_fail_list2: 'Download Failure List',
+
+    col_status_1:'Completed',
+    col_status_2:'Incomplete',
   },
   },
 
 
   /* 期货数据库页面 */
   /* 期货数据库页面 */
@@ -101,7 +105,9 @@ export default {
     label_edb_classify:'Affiliated Category',
     label_edb_classify:'Affiliated Category',
     ph_edbid:'Indicator ID can not be empty',
     ph_edbid:'Indicator ID can not be empty',
     ph_classify:'Affiliated Category can not be empty',
     ph_classify:'Affiliated Category can not be empty',
-    add_loading_msg:'The loading time is approximately five minutes; closing the popup will not affect the loading process'
+    add_loading_msg:'The loading time is approximately five minutes; closing the popup will not affect the loading process',
+    add_max_msg: 'The number of additions has reached the upper limit (upper limit 100)!',
+    ph_classify_name: 'Please select a category name',
   },
   },
 
 
   /* un数据页面 */
   /* un数据页面 */
@@ -150,6 +156,7 @@ export default {
   /* 上期能源 */
   /* 上期能源 */
   SqEnergyPage: {
   SqEnergyPage: {
     contranct_code:'Contract Code',
     contranct_code:'Contract Code',
+    product_name:'Product Name',
     col_rank:'Rank',
     col_rank:'Rank',
     col_sname:'Membership Abbreviation',
     col_sname:'Membership Abbreviation',
     col_trade:'Volume (lots)',
     col_trade:'Volume (lots)',

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

@@ -58,6 +58,10 @@ export default {
     step_two:'2、第二步,上传数据。点击“导入数据”,上传已经填写好的模板,确认导入。',
     step_two:'2、第二步,上传数据。点击“导入数据”,上传已经填写好的模板,确认导入。',
     step_three:'3、第三步,完成导入。若有导入失败数据,下载',
     step_three:'3、第三步,完成导入。若有导入失败数据,下载',
     upload_size_msg:'文件大小不得超过10M',
     upload_size_msg:'文件大小不得超过10M',
+    down_fail_list2: '下载失败列表',
+
+    col_status_1:'完成',
+    col_status_2:'未完成',
   },
   },
 
 
   /* 期货数据库页面 */
   /* 期货数据库页面 */
@@ -100,7 +104,9 @@ export default {
     label_edb_classify:'所属分类',
     label_edb_classify:'所属分类',
     ph_edbid:'指标ID不能为空',
     ph_edbid:'指标ID不能为空',
     ph_classify:'所属分类不能为空',
     ph_classify:'所属分类不能为空',
-    add_loading_msg:'加载时间大概五分钟,关闭弹窗不影响加载'
+    add_loading_msg:'加载时间大概五分钟,关闭弹窗不影响加载',
+    add_max_msg: '添加数量已达上限(上限100)!',
+    ph_classify_name: '请选择分类名称',
   },
   },
 
 
   /* un数据页面 */
   /* un数据页面 */

+ 5 - 1
src/lang/modules/EtaBase/commonLang.js

@@ -315,7 +315,7 @@ export default {
     },
     },
     dekad: {
     dekad: {
       zh:'旬度',
       zh:'旬度',
-      en:'Every ten days'
+      en:'Decadal'
     },
     },
     month: {
     month: {
       zh:'月度',
       zh:'月度',
@@ -325,6 +325,10 @@ export default {
       zh:'季度',
       zh:'季度',
       en:'Quarterly'
       en:'Quarterly'
     },
     },
+    half_year: {
+      zh:'半年度',
+      en:'Semi-Annual'
+    },
     year: {
     year: {
       zh:'年度',
       zh:'年度',
       en:'Yearly'
       en:'Yearly'

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

@@ -198,6 +198,14 @@ export default {
     add_mine_success: {
     add_mine_success: {
       zh:'已加入我的图库',
       zh:'已加入我的图库',
       en:'Successfully added to my gallery'
       en:'Successfully added to my gallery'
+    },
+    del_classify_chart_msg: {
+      zh:'若删除该分类,则分类下关联的所有图表将被全部删除, 是否继续?',
+      en:'If you delete this category, all charts associated with the category will be deleted. Do you want to continue?'
+    },
+    del_classify_link_msg: {
+      zh:'该图分类已添加节点链接,不允许删除!',
+      en:'This chart category has added node links and cannot be deleted!'
     }
     }
 
 
 
 

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

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

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

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

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

@@ -73,8 +73,10 @@ export default {
     no_classify:'This node has not selected a chart category',
     no_classify:'This node has not selected a chart category',
 
 
     //节点名称
     //节点名称
-    label_node_name:'节点名称',
+    label_node_name:'Node Name',
     label_label_link:'Node Link',
     label_label_link:'Node Link',
-    ph_link: 'Please select a node link'
+    ph_link: 'Please select a node link',
+
+    no_graph_msg: 'Please draw canvas content'
   }
   }
 }
 }

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

@@ -76,6 +76,8 @@ export default {
     //节点名称
     //节点名称
     label_node_name:'节点名称',
     label_node_name:'节点名称',
     label_label_link:'节点链接',
     label_label_link:'节点链接',
-    ph_link: '请选择节点链接'
+    ph_link: '请选择节点链接',
+
+    no_graph_msg: '请绘制画布内容'
   }
   }
 }
 }

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

@@ -16,10 +16,13 @@ export const SandListEn = {
     parent_dir:'Parent directory',
     parent_dir:'Parent directory',
     catalog_name:'Catalog name',
     catalog_name:'Catalog name',
     catalog_name_placeholder:'Please enter the catalog name',
     catalog_name_placeholder:'Please enter the catalog name',
+    catalog_variety_placeholder:'Please select variety',
     associated_variety:'Associated variety',
     associated_variety:'Associated variety',
     logic_diagram_name:"Logic diagram's name",
     logic_diagram_name:"Logic diagram's name",
     delete_attention_msg1:'Logic diagrams exist under this category and cannot be deleted',
     delete_attention_msg1:'Logic diagrams exist under this category and cannot be deleted',
     delete_attention_msg2:'Are you sure to delete current category?',
     delete_attention_msg2:'Are you sure to delete current category?',
+    add_diagram_msg01:"Please fill in the logic diagram's name",
+    select_categories_msg:'Please select category',
   };
   };
   
   
   /* 中文 */
   /* 中文 */
@@ -36,10 +39,14 @@ export const SandListEn = {
     parent_dir:'上级目录',
     parent_dir:'上级目录',
     catalog_name:'目录名称',
     catalog_name:'目录名称',
     catalog_name_placeholder:'请输入目录名称',
     catalog_name_placeholder:'请输入目录名称',
+    catalog_variety_placeholder:'请选择对应品种',
     associated_variety:'关联品种',
     associated_variety:'关联品种',
     logic_diagram_name:"逻辑图名称",
     logic_diagram_name:"逻辑图名称",
     delete_attention_msg1:'该分类下存在沙盘图,不可删除',
     delete_attention_msg1:'该分类下存在沙盘图,不可删除',
     delete_attention_msg2:'确定删除当前分类吗?',
     delete_attention_msg2:'确定删除当前分类吗?',
+    add_diagram_msg01:'请填写逻辑图名称',
+    select_categories_msg:'请选择所属分类',
+
   };
   };
   
   
   /**
   /**

+ 3 - 3
src/utils/svgToblob.js

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

+ 8 - 20
src/views/Home.vue

@@ -149,7 +149,7 @@
                         margin: 0 9px;
                         margin: 0 9px;
                         font-weight: 700;
                         font-weight: 700;
                         color: #c0c4cc;
                         color: #c0c4cc;
-                        fontsize: 16px;
+                        font-size: 16px;
                       "
                       "
                     >/</span>
                     >/</span>
                     <span
                     <span
@@ -203,31 +203,22 @@
                   {{item.name}}
                   {{item.name}}
                 </el-button>
                 </el-button>
 
 
-                <!-- <el-tooltip effect="dark" content="帮助文档" placement="bottom">
+                <el-dropdown trigger="click" style="width:140px;" v-if="isUpdateLogShow||isHelpDocShow">
-                  <div class="icon-box-item" v-if="isShowRole" @click="toOperation('fingerpost')">
-                    <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" style="color:#333">
-                      <path d="M9.24255 14.5C9.24255 14.0858 9.57834 13.75 9.99255 13.75C10.4068 13.75 10.7426 14.0858 10.7426 14.5C10.7426 14.9142 10.4068 15.25 9.99255 15.25C9.57834 15.25 9.24255 14.9142 9.24255 14.5Z" fill="currentColor"/>
-                      <path d="M9.99261 5.00763C8.32056 5.00763 6.96136 6.36682 6.96136 8.03888H8.21136C8.21136 7.05718 9.01092 6.25763 9.99261 6.25763C10.9743 6.25763 11.7739 7.05718 11.7739 8.03888C11.7739 8.71106 11.2183 9.3851 10.4931 9.67971L10.4899 9.68101C9.82793 9.95419 9.36767 10.6052 9.36767 11.3656V12.5H10.6177V11.3656C10.6177 11.1228 10.7618 10.9216 10.9655 10.837C11.9996 10.4161 13.0239 9.37337 13.0239 8.03888C13.0239 6.36682 11.6647 5.00763 9.99261 5.00763Z" fill="currentColor"/>
-                      <path d="M18.7427 10C18.7427 5.16751 14.8252 1.25 9.99268 1.25C5.16019 1.25 1.24268 5.16751 1.24268 10C1.24267 14.8325 5.16018 18.75 9.99267 18.75C14.8252 18.75 18.7427 14.8325 18.7427 10ZM17.4927 10C17.4927 14.1421 14.1348 17.5 9.99267 17.5C5.85054 17.5 2.49267 14.1421 2.49268 10C2.49268 5.85786 5.85054 2.5 9.99268 2.5C14.1348 2.5 17.4927 5.85787 17.4927 10Z" fill="currentColor"/>
-                    </svg>
-                  </div>
-                </el-tooltip> -->
-                <el-dropdown trigger="click" style="width:130px;" v-if="isUpdateLogShow||isHelpDocShow">
                   <span class="el-dropdown-link userinfo-inner help-center-inner">
                   <span class="el-dropdown-link userinfo-inner help-center-inner">
                     <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" style="color:#333">
                     <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" style="color:#333">
                       <path d="M9.24255 14.5C9.24255 14.0858 9.57834 13.75 9.99255 13.75C10.4068 13.75 10.7426 14.0858 10.7426 14.5C10.7426 14.9142 10.4068 15.25 9.99255 15.25C9.57834 15.25 9.24255 14.9142 9.24255 14.5Z" fill="currentColor"/>
                       <path d="M9.24255 14.5C9.24255 14.0858 9.57834 13.75 9.99255 13.75C10.4068 13.75 10.7426 14.0858 10.7426 14.5C10.7426 14.9142 10.4068 15.25 9.99255 15.25C9.57834 15.25 9.24255 14.9142 9.24255 14.5Z" fill="currentColor"/>
                       <path d="M9.99261 5.00763C8.32056 5.00763 6.96136 6.36682 6.96136 8.03888H8.21136C8.21136 7.05718 9.01092 6.25763 9.99261 6.25763C10.9743 6.25763 11.7739 7.05718 11.7739 8.03888C11.7739 8.71106 11.2183 9.3851 10.4931 9.67971L10.4899 9.68101C9.82793 9.95419 9.36767 10.6052 9.36767 11.3656V12.5H10.6177V11.3656C10.6177 11.1228 10.7618 10.9216 10.9655 10.837C11.9996 10.4161 13.0239 9.37337 13.0239 8.03888C13.0239 6.36682 11.6647 5.00763 9.99261 5.00763Z" fill="currentColor"/>
                       <path d="M9.99261 5.00763C8.32056 5.00763 6.96136 6.36682 6.96136 8.03888H8.21136C8.21136 7.05718 9.01092 6.25763 9.99261 6.25763C10.9743 6.25763 11.7739 7.05718 11.7739 8.03888C11.7739 8.71106 11.2183 9.3851 10.4931 9.67971L10.4899 9.68101C9.82793 9.95419 9.36767 10.6052 9.36767 11.3656V12.5H10.6177V11.3656C10.6177 11.1228 10.7618 10.9216 10.9655 10.837C11.9996 10.4161 13.0239 9.37337 13.0239 8.03888C13.0239 6.36682 11.6647 5.00763 9.99261 5.00763Z" fill="currentColor"/>
                       <path d="M18.7427 10C18.7427 5.16751 14.8252 1.25 9.99268 1.25C5.16019 1.25 1.24268 5.16751 1.24268 10C1.24267 14.8325 5.16018 18.75 9.99267 18.75C14.8252 18.75 18.7427 14.8325 18.7427 10ZM17.4927 10C17.4927 14.1421 14.1348 17.5 9.99267 17.5C5.85054 17.5 2.49267 14.1421 2.49268 10C2.49268 5.85786 5.85054 2.5 9.99268 2.5C14.1348 2.5 17.4927 5.85787 17.4927 10Z" fill="currentColor"/>
                       <path d="M18.7427 10C18.7427 5.16751 14.8252 1.25 9.99268 1.25C5.16019 1.25 1.24268 5.16751 1.24268 10C1.24267 14.8325 5.16018 18.75 9.99267 18.75C14.8252 18.75 18.7427 14.8325 18.7427 10ZM17.4927 10C17.4927 14.1421 14.1348 17.5 9.99267 17.5C5.85054 17.5 2.49267 14.1421 2.49268 10C2.49268 5.85786 5.85054 2.5 9.99268 2.5C14.1348 2.5 17.4927 5.85787 17.4927 10Z" fill="currentColor"/>
                     </svg>
                     </svg>
-                    <span style="line-height: 20px;margin-left: 4px;">帮助中心</span>
+                    <span style="line-height: 20px;margin-left: 4px;"><!-- 帮助中心 -->{{ $t('MainPage.help_center') }}</span>
                     <i class="el-icon-arrow-down el-icon--right" />
                     <i class="el-icon-arrow-down el-icon--right" />
                   </span>
                   </span>
                   <el-dropdown-menu slot="dropdown">
                   <el-dropdown-menu slot="dropdown">
                     <el-dropdown-item divided @click.native="toDoc" v-if="isUpdateLogShow"
                     <el-dropdown-item divided @click.native="toDoc" v-if="isUpdateLogShow"
-                      >更新日志</el-dropdown-item
+                      ><!-- 更新日志 -->{{ $t('MainPage.tab_help_update') }}</el-dropdown-item
                     >
                     >
                     <el-dropdown-item divided @click.native="toOperation" v-if="isHelpDocShow"
                     <el-dropdown-item divided @click.native="toOperation" v-if="isHelpDocShow"
-                      >帮助文档</el-dropdown-item
+                      ><!-- 帮助文档 -->{{ $t('MainPage.tab_help_docs') }}</el-dropdown-item
                     >
                     >
                   </el-dropdown-menu>
                   </el-dropdown-menu>
                 </el-dropdown>
                 </el-dropdown>
@@ -247,10 +238,10 @@
                 </span>
                 </span>
                 <el-dropdown-menu slot="dropdown">
                 <el-dropdown-menu slot="dropdown">
                   <el-dropdown-item divided @click.native="resetpwd"
                   <el-dropdown-item divided @click.native="resetpwd"
-                    >修改密码</el-dropdown-item
+                    ><!-- 修改密码 -->{{ $t('MainPage.tab_reset_pwd') }}</el-dropdown-item
                   >
                   >
                   <el-dropdown-item divided @click.native="logout"
                   <el-dropdown-item divided @click.native="logout"
-                    >退出登录</el-dropdown-item
+                    ><!-- 退出登录 -->{{ $t('MainPage.tab_log_out') }}</el-dropdown-item
                   >
                   >
                   <!-- <el-dropdown-item divided @click.native="toDoc"
                   <!-- <el-dropdown-item divided @click.native="toDoc"
                     >更新日志</el-dropdown-item
                     >更新日志</el-dropdown-item
@@ -307,9 +298,6 @@ import EventBus from "@/api/bus.js";
 
 
 import {recordActiveLoginFun,loginEndCalc} from "@/utils/TimeOnPage.js"
 import {recordActiveLoginFun,loginEndCalc} from "@/utils/TimeOnPage.js"
 import NotificationMsg from "../components/notificationMsg.vue";
 import NotificationMsg from "../components/notificationMsg.vue";
-import langEN from 'element-ui/lib/locale/lang/en'
-import langZH from 'element-ui/lib/locale/lang/zh-CN'
-import locale from 'element-ui/lib/locale'
 export default {
 export default {
   components: {
   components: {
     PwdDlg,
     PwdDlg,
@@ -810,7 +798,7 @@ export default {
     logout() {
     logout() {
       //退出登录
       //退出登录
       var that = this;
       var that = this;
-      this.$confirm("确认退出吗?", "提示", {
+      this.$confirm(/* "确认退出吗?" */this.$t('MsgPrompt.confirm_logout_msg'), this.$t('Dialog.warn_tit'), {
         type: "warning",
         type: "warning",
       })
       })
         .then(() => {
         .then(() => {

+ 115 - 100
src/views/Login.vue

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

+ 12 - 5
src/views/chartFrame_manage/frameEditor.vue

@@ -117,7 +117,7 @@ export default {
                 return this.$message.warning(/* "请输入框架名称" */this.$t('ChartFramePage.ph_search'))
                 return this.$message.warning(/* "请输入框架名称" */this.$t('ChartFramePage.ph_search'))
             }
             }
             if(!this.$refs.container.graph.toJSON().cells.length){
             if(!this.$refs.container.graph.toJSON().cells.length){
-                return this.$message.warning('请绘制画布内容');
+                return this.$message.warning(/* '请绘制画布内容' */this.$t('ChartFrameEditorPage.no_graph_msg'));
             }
             }
 
 
             this.lockLoding = this.$loading({
             this.lockLoding = this.$loading({
@@ -141,22 +141,29 @@ export default {
                 this.frameDetail.FrameworkImg = Data.ResourceUrl||''
                 this.frameDetail.FrameworkImg = Data.ResourceUrl||''
             }
             }
             //获取框架节点和内容
             //获取框架节点和内容
-            this.frameDetail.Nodes = this.$refs.container.getContentNodes()
+            const Nodes = this.$refs.container.getContentNodes() //与frameDetail.Nodes的结构不同
             this.frameDetail.FrameworkContent = JSON.stringify(this.$refs.container.graph.toJSON())
             this.frameDetail.FrameworkContent = JSON.stringify(this.$refs.container.graph.toJSON())
             if(this.frameId){
             if(this.frameId){
                 //edit
                 //edit
-                chartFrameInterface.editFrame({...this.frameDetail,...{ChartFrameworkId:Number(this.frameId)}}).then(res=>{
+                chartFrameInterface.editFrame({
+                    ...this.frameDetail,
+                    ChartFrameworkId:Number(this.frameId),
+                    Nodes,
+                }).then(res=>{
                     this.lockLoding.close();
                     this.lockLoding.close();
                     if(res.Ret!==200) return 
                     if(res.Ret!==200) return 
                     this.$message.success(/* "编辑成功" */this.$t('MsgPrompt.edit_msg'))
                     this.$message.success(/* "编辑成功" */this.$t('MsgPrompt.edit_msg'))
                 })
                 })
             }else{
             }else{
                 //add 
                 //add 
-                chartFrameInterface.addFrame(this.frameDetail).then(res=>{
+                chartFrameInterface.addFrame({
+                    ...this.frameDetail,
+                    Nodes,
+                }).then(res=>{
                     this.lockLoding.close();
                     this.lockLoding.close();
                     if(res.Ret!==200) return 
                     if(res.Ret!==200) return 
                     this.frameId = res.Data?res.Data.ChartFrameworkId:0
                     this.frameId = res.Data?res.Data.ChartFrameworkId:0
-                    this.frameDetail = res.Data||{FrameworkName:'',FrameworkContent:''}
+                    this.frameDetail = res.Data||{FrameworkName:'',FrameworkContent:'',Nodes:[]}
                     this.$message.success(/* "新增成功" */ this.$t('MsgPrompt.add_msg'))
                     this.$message.success(/* "新增成功" */ this.$t('MsgPrompt.add_msg'))
                     //切换至编辑页
                     //切换至编辑页
                     this.$router.replace({path:'/editframe',query:{frameId:this.frameId}})
                     this.$router.replace({path:'/editframe',query:{frameId:this.frameId}})

+ 2 - 2
src/views/chartFrame_manage/index.vue

@@ -188,7 +188,7 @@
             <div class="dialog-container">
             <div class="dialog-container">
                 <div>
                 <div>
                     <span style="margin-right:5px;"><!-- 框架名称 -->{{$t('ChartFramePage.label_frame_name')}}</span>
                     <span style="margin-right:5px;"><!-- 框架名称 -->{{$t('ChartFramePage.label_frame_name')}}</span>
-                    <el-input v-model.trim="modifyFrame.FrameworkName" placeholder="请输入框架名称"></el-input>
+                    <el-input v-model.trim="modifyFrame.FrameworkName" :placeholder="$t('ChartFramePage.ph_search')"></el-input>
                 </div>
                 </div>
             </div>
             </div>
             <div class="dialog-footer">
             <div class="dialog-footer">
@@ -520,7 +520,7 @@ export default {
         },
         },
         renameFrame(){
         renameFrame(){
             if(!this.modifyFrame.FrameworkName.length){
             if(!this.modifyFrame.FrameworkName.length){
-                this.$message.warning("请输入框架名称")
+                this.$message.warning(/* "请输入框架名称" */this.$t('ChartFramePage.ph_search'))
                 return
                 return
             }
             }
             chartFrameInterface.reNameFrame({
             chartFrameInterface.reNameFrame({

+ 2 - 0
src/views/chartRelevance_manage/components/chartCard.vue

@@ -125,6 +125,8 @@ export default {
       switch(data.ChartInfo.Source) {//1曲线 
       switch(data.ChartInfo.Source) {//1曲线 
         case 1:
         case 1:
           this.chartInfo = data.ChartInfo;
           this.chartInfo = data.ChartInfo;
+          //初始化上下限
+          this.setLimitData(data.EdbInfoList)
           this.setDefaultChart(data.EdbInfoList);
           this.setDefaultChart(data.EdbInfoList);
           break
           break
         case 3: //3相关性 
         case 3: //3相关性 

+ 6 - 2
src/views/chartRelevance_manage/components/explainText.js

@@ -53,7 +53,9 @@ export const statisticFeatureListTextArr = [
     `<p style='font-weight:bold;'>标准差处理逻辑:</p>
     `<p style='font-weight:bold;'>标准差处理逻辑:</p>
     <p>计算所选时间范围内数据的样本标准差s,s=sqrt(((x1-x)^2 (x2-x)^2 ......(xn-x)^2)/(n-1)),n表示数据个数</p>`,
     <p>计算所选时间范围内数据的样本标准差s,s=sqrt(((x1-x)^2 (x2-x)^2 ......(xn-x)^2)/(n-1)),n表示数据个数</p>`,
     `<p style='font-weight:bold;'>百分位处理逻辑:</p>
     `<p style='font-weight:bold;'>百分位处理逻辑:</p>
-    <p>对所选时间范围内的数据,取最大值Max,最小值Min,计算Max-Min,百分位=(现值-Min)/(Max-Min),Max=Min时不计算</p>`,
+    <p>1、数据个数百分位算法:数据区间第一个(较远日期)和最后一个数据点(较近日期)分别为 (T1,S1),(T2,S2)。T代表时间。S代表对应的值;N=T1到T2时间段指标数据个数。n=小于等于S2的数据个数。个数百分位=(n-1)/(N-1) ,N=1时不计算。</p>
+    <p>2、数据区间百分位算法:对所选时间范围内的数据,取最大值Max,最小值Min,计算Max-Min,百分位=(现值-Min)/(Max-Min),Max=Min时不计算
+    </p>`,
     `<p style='font-weight:bold;'>频率分布处理逻辑:</p>
     `<p style='font-weight:bold;'>频率分布处理逻辑:</p>
     <p>1、在所选时间范围内,取最大值和最小值;</p>
     <p>1、在所选时间范围内,取最大值和最小值;</p>
     <p>2、根据频段数划分多个间距相同的区间(左闭右开,最后一个区间为左闭右闭),统计数据值落在每个区间的数据个数;</p>
     <p>2、根据频段数划分多个间距相同的区间(左闭右开,最后一个区间为左闭右闭),统计数据值落在每个区间的数据个数;</p>
@@ -75,7 +77,9 @@ export const statisticFeatureListTextArrEn = [
 //跨品种分析
 //跨品种分析
 export const crossVarietyAnalisisTextArr = [
 export const crossVarietyAnalisisTextArr = [
     `<p style="font-weight:bold;">一、处理逻辑</p>
     `<p style="font-weight:bold;">一、处理逻辑</p>
-    <p>1、百分位计算公式:对所选时间范围内的数据,取最大值Max,最小值Min,计算Max-Min,百分位=(现值-Min)/(Max-Min),Max=Min时不计算</p>
+    <p>1、百分位计算公式:</p>
+    <p>(1)数据个数百分位算法:数据区间第一个(较远日期)和最后一个数据点(较近日期)分别为 (T1,S1),(T2,S2)。T代 表时间。S代表对应的值。 N=T1到T2时间段指标数据个数。n=小于等于S2的数据个数。个数百分位=(n-1)/(N-1) ,N=1时不计算。</p>
+    <p>(2)数据区间百分位算法:对所选时间范围内的数据,取最大值Max,最小值Min,计算Max-Min,百分位=(现值-Min)/(Max-Min),Max=Min时不计算</p>
     <p>2、取值方式:</p>
     <p>2、取值方式:</p>
     <p>(1)通过“选择日期”和“时间长度”,时间范围为“选择日期”至选择的日期往过去推“时间长度”,在这个时间段找出指标最大值和最小值,进行百分位计算。</p>
     <p>(1)通过“选择日期”和“时间长度”,时间范围为“选择日期”至选择的日期往过去推“时间长度”,在这个时间段找出指标最大值和最小值,进行百分位计算。</p>
     <p>(2)若在(1)的时间范围下找不到值,则继续往过去找,直到找到值。</p>
     <p>(2)若在(1)的时间范围下找不到值,则继续往过去找,直到找到值。</p>

+ 7 - 5
src/views/chartRelevance_manage/crossVarietyAnalysis/chartEditor.vue

@@ -298,11 +298,13 @@ export default {
       this.chartInfo = ChartInfo;
       this.chartInfo = ChartInfo;
       this.tableData = EdbInfoList;
       this.tableData = EdbInfoList;
       this.crossVarietyChartData = DataResp;
       this.crossVarietyChartData = DataResp;
+
+      /* 历史数据chartInfo里全是空 兼容下历史数据不崩 */
       this.chartLimit = {
       this.chartLimit = {
-        min: DataResp.YMinValue,
+        min: ChartInfo.LeftMin?Number(ChartInfo.LeftMin):Number(DataResp.YMinValue),
-        max: DataResp.YMaxValue ,
+        max: ChartInfo.LeftMax?Number(ChartInfo.LeftMax):Number(DataResp.YMaxValue),
-        x_min: DataResp.XMinValue,
+        x_min: ChartInfo.XMin?Number(ChartInfo.XMin):Number(DataResp.XMinValue),
-        x_max: DataResp.XMaxValue,
+        x_max: ChartInfo.XMax?Number(ChartInfo.XMax):Number(DataResp.XMaxValue),
       }
       }
 
 
       this.setCrossVarietyChart()
       this.setCrossVarietyChart()
@@ -576,7 +578,7 @@ export default {
     overflow-x: auto;
     overflow-x: auto;
     .chart-min-cont {
     .chart-min-cont {
       background: #fff;
       background: #fff;
-      min-width: 880px;
+      min-width: 900px;
       height: calc(100vh - 118px);
       height: calc(100vh - 118px);
       overflow-y: auto;
       overflow-y: auto;
       display: flex;
       display: flex;

+ 68 - 5
src/views/chartRelevance_manage/crossVarietyAnalysis/components/chartFormSection.vue

@@ -29,6 +29,29 @@
           />
           />
         </el-select>
         </el-select>
       </el-form-item>
       </el-form-item>
+      <el-form-item label="百分位" prop="PercentType">
+        <el-select
+          v-model="form.PercentType"
+          style="width: 240px"
+          placeholder="请选择"
+          @change="changeParams"
+        >
+          <el-option
+            v-for="item in percentOptions"
+            :key="item.val"
+            :label="item.label"
+            :value="item.val"
+          />
+        </el-select>
+        <el-tooltip effect="dark" placement="right">
+          <div
+            slot="content"
+            v-html="tips.percent"
+            style="line-height: 20px;width:300px"
+          ></div>
+          <i class="el-icon-question" style="color: #666" />
+        </el-tooltip>
+      </el-form-item>
       <el-form-item :label="$t('StatisticAnalysis.CrossVarietyChart.x_axis')" prop="TagX">
       <el-form-item :label="$t('StatisticAnalysis.CrossVarietyChart.x_axis')" prop="TagX">
         <el-select
         <el-select
           v-model="form.TagX"
           v-model="form.TagX"
@@ -41,6 +64,7 @@
             :key="item.ChartTagId"
             :key="item.ChartTagId"
             :label="item.ChartTagName"
             :label="item.ChartTagName"
             :value="item.ChartTagId"
             :value="item.ChartTagId"
+            :disabled="item.ChartTagId===form.TagY"
           />
           />
         </el-select>
         </el-select>
       </el-form-item>
       </el-form-item>
@@ -56,6 +80,7 @@
             :key="item.ChartTagId"
             :key="item.ChartTagId"
             :label="item.ChartTagName"
             :label="item.ChartTagName"
             :value="item.ChartTagId"
             :value="item.ChartTagId"
+            :disabled="item.ChartTagId===form.TagX"
           />
           />
         </el-select>
         </el-select>
       </el-form-item>
       </el-form-item>
@@ -75,7 +100,7 @@
         <li class="date-li" v-for="(item,index) in form.DateConfigList" :key="index">
         <li class="date-li" v-for="(item,index) in form.DateConfigList" :key="index">
           <el-select
           <el-select
             v-model="item.DateType"
             v-model="item.DateType"
-            style="width: 150px"
+            style="width: 140px"
             placeholder="请选择"
             placeholder="请选择"
             @change="changeParams"
             @change="changeParams"
           >
           >
@@ -96,6 +121,21 @@
             @change="(val) => {item.Num = Number(val);changeParams()}"
             @change="(val) => {item.Num = Number(val);changeParams()}"
           />
           />
 
 
+          <el-date-picker
+            v-model="item.FixDate"
+            v-else-if="item.DateType===3"
+            value-format="yyyy-MM-dd"
+            type="date"
+            placeholder="选择日期"
+            style="width: 150px"
+            @change="changeParams"
+          />
+
+          <span>
+            <i class="el-icon-view" v-if="item.ShowTips===1" @click="()=>{item.ShowTips=item.ShowTips===1?0:1;changeParams()}"/>
+            <img :src="$icons.no_view" v-else style="width:24px;height:24px" @click="()=>{item.ShowTips=item.ShowTips===1?0:1;changeParams()}">
+          </span>
+
           <el-button type="text" v-if="index===0" @click="addDateHandle">
           <el-button type="text" v-if="index===0" @click="addDateHandle">
             <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 -2 16 16" fill="none">
             <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 -2 16 16" fill="none">
               <path d="M5.23966 8.48046H7.51966V10.7605C7.51966 10.8265 7.57366 10.8805 7.63966 10.8805H8.35966C8.42566 10.8805 8.47966 10.8265 8.47966 10.7605V8.48046H10.7597C10.8257 8.48046 10.8797 8.42646 10.8797 8.36046V7.64046C10.8797 7.57446 10.8257 7.52046 10.7597 7.52046H8.47966V5.24046C8.47966 5.17446 8.42566 5.12046 8.35966 5.12046H7.63966C7.57366 5.12046 7.51966 5.17446 7.51966 5.24046V7.52046H5.23966C5.17366 7.52046 5.11966 7.57446 5.11966 7.64046V8.36046C5.11966 8.42646 5.17366 8.48046 5.23966 8.48046Z" fill="#0052D9"/>
               <path d="M5.23966 8.48046H7.51966V10.7605C7.51966 10.8265 7.57366 10.8805 7.63966 10.8805H8.35966C8.42566 10.8805 8.47966 10.8265 8.47966 10.7605V8.48046H10.7597C10.8257 8.48046 10.8797 8.42646 10.8797 8.36046V7.64046C10.8797 7.57446 10.8257 7.52046 10.7597 7.52046H8.47966V5.24046C8.47966 5.17446 8.42566 5.12046 8.35966 5.12046H7.63966C7.57366 5.12046 7.51966 5.17446 7.51966 5.24046V7.52046H5.23966C5.17366 7.52046 5.11966 7.57446 5.11966 7.64046V8.36046C5.11966 8.42646 5.17366 8.48046 5.23966 8.48046Z" fill="#0052D9"/>
@@ -139,6 +179,7 @@ export default {
       return [
       return [
         { label: this.$t('StatisticAnalysis.CrossVarietyChart.latest_date')||'最新日期',val: 1 },
         { label: this.$t('StatisticAnalysis.CrossVarietyChart.latest_date')||'最新日期',val: 1 },
         { label: this.$t('StatisticAnalysis.CrossVarietyChart.n_day_before')||'N天前',val: 2 },
         { label: this.$t('StatisticAnalysis.CrossVarietyChart.n_day_before')||'N天前',val: 2 },
+        { label: '固定日期',val: 3 },
       ]
       ]
     }
     }
   },
   },
@@ -147,12 +188,13 @@ export default {
       form: {
       form: {
         ChartName:'',
         ChartName:'',
         Source: 10,
         Source: 10,
+        PercentType: 1,
         CalculateValue: 6,
         CalculateValue: 6,
         CalculateUnit: '月',
         CalculateUnit: '月',
         TagX: '',
         TagX: '',
         TagY: '',
         TagY: '',
         DateConfigList: [
         DateConfigList: [
-          { DateType: 1,Num: 0 },
+          { DateType: 1,Num: 0,FixDate:'',ShowTips: 1 },
         ],
         ],
       },
       },
       // unitOpt: [
       // unitOpt: [
@@ -167,6 +209,15 @@ export default {
       //   { label: '最新日期',val: 1 },
       //   { label: '最新日期',val: 1 },
       //   { label: 'N天前',val: 2 },
       //   { label: 'N天前',val: 2 },
       // ]
       // ]
+
+      percentOptions: [
+        { label: '数据个数',val: 1 },
+        { label: '数据区间',val: 0 },
+      ],
+      tips: {
+        'percent':`1、数据个数百分位算法:数据区间第一个(较远日期)和最后一个数据点(较近日期)分别为 (T1,S1),(T2,S2)。T代表时间。S代表对应的值,N=T1到T2时间段指标数据个数。n=小于等于S2的数据个数。个数百分位=(n-1)/(N-1) ,N=1时不计算。<br>
+        2、数据区间百分位算法:对所选时间范围内的数据,取最大值Max,最小值Min,计算Max-Min,百分位=(现值-Min)/(Max-Min),Max=Min时不计算`
+      }
     };
     };
   },
   },
   methods: {
   methods: {
@@ -174,21 +225,25 @@ export default {
       if(this.form.DateConfigList.length === 5) return this.$message.warning('日期数量已达上限')
       if(this.form.DateConfigList.length === 5) return this.$message.warning('日期数量已达上限')
 
 
       this.form.DateConfigList.push({
       this.form.DateConfigList.push({
-        DateType: 1,Num: 1
+        DateType: 1,Num: 1,FixDate:'',ShowTips: 1
       })
       })
       
       
       this.changeParams()
       this.changeParams()
     },
     },
 
 
     initData(data) {
     initData(data) {
-      const { ChartName,CalculateValue,CalculateUnit,TagX,TagY,DateConfigList } = data;
+      const { ChartName,CalculateValue,CalculateUnit,TagX,TagY,DateConfigList,PercentType } = data;
       this.form = {
       this.form = {
         ChartName,
         ChartName,
         CalculateValue,
         CalculateValue,
         CalculateUnit,
         CalculateUnit,
         TagX,
         TagX,
         TagY,
         TagY,
-        DateConfigList
+        DateConfigList: DateConfigList.map(_ =>({
+          ..._,
+          ShowTips: _.ShowTips || 0
+        })),
+        PercentType: PercentType||0
       }
       }
     },
     },
 
 
@@ -219,6 +274,14 @@ export default {
       align-items: center;
       align-items: center;
       gap: 10px;
       gap: 10px;
       margin-bottom: 20px;
       margin-bottom: 20px;
+      .el-icon-view {
+        width: 24px;
+        height: 24px;
+        line-height: 24px;
+        text-align: center;
+        font-size: 20px;
+        color: #409EFF;
+      }
     }
     }
   }
   }
 }
 }

+ 72 - 4
src/views/chartRelevance_manage/crossVarietyAnalysis/list.vue

@@ -143,6 +143,54 @@
 											height="500px"
 											height="500px"
 											ref="chartRef"
 											ref="chartRef"
 										/>
 										/>
+										<!-- 上下限 -->
+										<template>	
+											<div class="range-cont left">
+												<el-input
+													style="width: 60px; display: block"
+													size="mini"
+													type="number"
+													:min="0"
+													:max="100"
+													placeholder="上限"
+													v-model="chartLimit.max"
+													@change="changeLimit"
+												/>
+												<el-input
+													class="min-data-input"
+													size="mini"
+													type="number"
+													:min="0"
+													:max="100"
+													placeholder="下限"
+													v-model="chartLimit.min"
+													@change="changeLimit"
+												/>
+											</div>
+											<!-- x轴上下限 -->
+											<div class="range-cont bottom" > 
+												<el-input
+													class="left"
+													size="mini"
+													type="number"
+													:min="0"
+													:max="100"
+													placeholder="下限"
+													v-model="chartLimit.x_min"
+													@change="changeLimit"
+												/>
+												<el-input
+													class="left"
+													size="mini"
+													type="number"
+													:min="0"
+													:max="100"
+													placeholder="上限"
+													v-model="chartLimit.x_max"
+													@change="changeLimit"
+												/>
+											</div>
+										</template>
                   </div>
                   </div>
                   <span class="chart-author">{{$t('MsgPrompt.author')}}:{{ chartInfo.SysUserRealName}}</span>
                   <span class="chart-author">{{$t('MsgPrompt.author')}}:{{ chartInfo.SysUserRealName}}</span>
                 </div>
                 </div>
@@ -158,6 +206,7 @@
 									@copyChartConfirm="copyChartConfirm"
 									@copyChartConfirm="copyChartConfirm"
 									@addMychartHandle="addMychartHandle"
 									@addMychartHandle="addMychartHandle"
 									@refreshHandle="refreshHandle"
 									@refreshHandle="refreshHandle"
+									@saveChartHandle="saveChartHandle"
 									@saveChartOtherHandle="saveChartOtherHandle"
 									@saveChartOtherHandle="saveChartOtherHandle"
 									@editChartHandle="editChartHandle"
 									@editChartHandle="editChartHandle"
 									@openEnNameDia="openEnNameDia"
 									@openEnNameDia="openEnNameDia"
@@ -415,6 +464,23 @@ export default {
       }
       }
 		},
 		},
 
 
+		/* 保存上下限 */
+		async saveChartHandle() {
+			let { min,max,x_min,x_max } = this.chartLimit;
+      let params = {
+        ChartInfoId: this.chartInfo.ChartInfoId,
+        XMin: String(x_min),
+				XMax: String(x_max),
+				LeftMin: String(min),
+				LeftMax: String(max),
+      }
+			let res = await crossVarietyInterface.saveChart(params);
+
+			if(res.Ret !== 200) return
+
+			this.$message.success('保存成功')
+		},
+
 		/* 获取图表列表 */
 		/* 获取图表列表 */
 		getPublicList() {
 		getPublicList() {
 			crossVarietyInterface.getChartList({
 			crossVarietyInterface.getChartList({
@@ -453,11 +519,13 @@ export default {
 				this.chartInfo = ChartInfo;
 				this.chartInfo = ChartInfo;
 				this.tableData = EdbInfoList;
 				this.tableData = EdbInfoList;
 				this.crossVarietyChartData = DataResp;
 				this.crossVarietyChartData = DataResp;
+
+				/* 历史数据chartInfo里全是空 兼容下历史数据不崩 */
 				this.chartLimit = {
 				this.chartLimit = {
-					min: DataResp.YMinValue,
+					min: ChartInfo.LeftMin?Number(ChartInfo.LeftMin):Number(DataResp.YMinValue),
-					max: DataResp.YMaxValue ,
+					max: ChartInfo.LeftMax?Number(ChartInfo.LeftMax):Number(DataResp.YMaxValue),
-					x_min: DataResp.XMinValue,
+					x_min: ChartInfo.XMin?Number(ChartInfo.XMin):Number(DataResp.XMinValue),
-					x_max: DataResp.XMaxValue,
+					x_max: ChartInfo.XMax?Number(ChartInfo.XMax):Number(DataResp.XMaxValue),
 				}
 				}
 
 
 				this.setCrossVarietyChart()
 				this.setCrossVarietyChart()

+ 16 - 2
src/views/chartRelevance_manage/css/index.scss

@@ -77,6 +77,7 @@ $normal-font: 14px;
         padding: 30px 20px;
         padding: 30px 20px;
         max-height: calc(100vh - 280px);
         max-height: calc(100vh - 280px);
         overflow: auto;
         overflow: auto;
+        margin-right: 20px;
       }
       }
       .target_tree {
       .target_tree {
         color: #333;
         color: #333;
@@ -136,7 +137,7 @@ $normal-font: 14px;
           margin-bottom: 20px;
           margin-bottom: 20px;
 
 
           .chart-show-cont {
           .chart-show-cont {
-            padding: 0 160px 0 100px;
+            padding: 0 160px 50px 120px;
             position: relative;
             position: relative;
             min-height: 400px;
             min-height: 400px;
             .chart-title {
             .chart-title {
@@ -162,7 +163,7 @@ $normal-font: 14px;
                   display: block;
                   display: block;
                 }
                 }
                 &.left {
                 &.left {
-                  left: -80px;
+                  left: -70px;
                 }
                 }
                 &.right {
                 &.right {
                   right: -65px;
                   right: -65px;
@@ -170,6 +171,19 @@ $normal-font: 14px;
                 &.rightTwo {
                 &.rightTwo {
                   right: -130px;
                   right: -130px;
                 }
                 }
+                &.bottom {
+                  width: 100%;
+                  display: flex;
+                  justify-content: space-between;
+                  top: auto;
+                  right: 0;
+                  bottom: -4%;
+                  .left {
+                    width: 60px;
+                    display: block;
+                    flex-shrink: 0;
+                  }
+                }
               }
               }
             }
             }
           }
           }

+ 34 - 1
src/views/chartRelevance_manage/statistic/statisticFeatureChartEditor.vue

@@ -108,6 +108,29 @@
               <i class="el-icon-question" style="color: #666" />
               <i class="el-icon-question" style="color: #666" />
             </el-tooltip> -->
             </el-tooltip> -->
           </div>
           </div>
+          <div class="section-item">
+            <span style="flex-shrink:0;min-width:70px">百分位:</span>
+            <el-select
+              v-model="chartInfo.Percentile.PercentType"
+              style="width: 120px"
+              placeholder="请选择"
+            >
+              <el-option
+                v-for="item in percentOptions"
+                :key="item.val"
+                :label="item.label"
+                :value="item.val"
+              />
+            </el-select>
+            <el-tooltip effect="dark" placement="right">
+              <div
+                slot="content"
+                v-html="tips.percent"
+                style="line-height: 20px;width:300px"
+              ></div>
+              <i class="el-icon-question" style="color: #666" />
+            </el-tooltip>
+          </div>
           <div class="section-item">
           <div class="section-item">
             <span style="flex-shrink:0;min-width:70px">{{$t('StatisticAnalysis.StatisticFeatureChart.time_length')}}:</span>
             <span style="flex-shrink:0;min-width:70px">{{$t('StatisticAnalysis.StatisticFeatureChart.time_length')}}:</span>
             <el-input
             <el-input
@@ -372,7 +395,8 @@ export default {
         },
         },
         Percentile: {
         Percentile: {
           CalculateValue: 0,
           CalculateValue: 0,
-          CalculateUnit: '天'
+          CalculateUnit: '天',
+          PercentType: 1
         },
         },
         FrequencyDistribution: {
         FrequencyDistribution: {
           DateType: 1,
           DateType: 1,
@@ -405,6 +429,15 @@ export default {
         FrequencyDistribution: `在所选时间范围内,取最大值和最小值,根据频段数划分多个间距相同的区间(左闭右开,最后一个区间为左闭右闭),统计数据值落在每个区间的数据个数,频率=落在某区间数据个数/所选时间段内数据总个数,累计频率为从最小值所在区间对应的频率开始累加。`
         FrequencyDistribution: `在所选时间范围内,取最大值和最小值,根据频段数划分多个间距相同的区间(左闭右开,最后一个区间为左闭右闭),统计数据值落在每个区间的数据个数,频率=落在某区间数据个数/所选时间段内数据总个数,累计频率为从最小值所在区间对应的频率开始累加。`
       },
       },
 
 
+      percentOptions: [
+        { label: '数据个数',val: 1 },
+        { label: '数据区间',val: 0 },
+      ],
+      tips: {
+        'percent':`1、数据个数百分位算法:数据区间第一个(较远日期)和最后一个数据点(较近日期)分别为 (T1,S1),(T2,S2),T代表时间,S代表对应的值。个数百分位=(n-1)/(N-1) ,N=1时不计算, N=T1到T2时间段指标数据个数,n=小于等于S2的数据个数。<br>
+        2、数据区间百分位算法:对所选时间范围内的数据,取最大值Max,最小值Min,计算Max-Min,百分位=(现值-Min)/(Max-Min),Max=Min时不计算`
+      },
+
       /* 图表入库 */
       /* 图表入库 */
       isSaveChartToBase: false,
       isSaveChartToBase: false,
       saveSource:0,//图表位置1 2 3 4
       saveSource:0,//图表位置1 2 3 4

+ 83 - 4
src/views/dataEntry_manage/addChart.vue

@@ -412,7 +412,7 @@
 							</h2>
 							</h2>
 
 
 							<Chart :options="options" :chartInfo="chartInfo" ref="chartRef"/>
 							<Chart :options="options" :chartInfo="chartInfo" ref="chartRef"/>
-							<div class="range-cont left" v-if="leftIndex != -1">
+							<!-- <div class="range-cont left" v-if="leftIndex != -1">
 								<el-input
 								<el-input
 									style="width: 60px; display: block"
 									style="width: 60px; display: block"
 									size="mini"
 									size="mini"
@@ -444,7 +444,6 @@
 									v-model="tableData[rightIndex].MinData"
 									v-model="tableData[rightIndex].MinData"
 								/>
 								/>
 							</div>
 							</div>
-							<!-- 右2上下限设置 -->
 							<div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
 							<div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
 								<el-input
 								<el-input
 									style="width: 60px; display: block"
 									style="width: 60px; display: block"
@@ -460,7 +459,65 @@
 									placeholder="下限"
 									placeholder="下限"
 									v-model="tableData[rightTwoIndex].MinData"
 									v-model="tableData[rightTwoIndex].MinData"
 								/>
 								/>
-							</div>
+							</div> -->
+							<!-- 需求:曲线图、堆积柱状图、组合图加入新指标时上下限自动调整 -->
+							<template v-if="![7,10,11].includes(chartInfo.ChartType)">
+								<div class="range-cont left" v-if="leftIndex !== -1">
+									<el-input
+										style="width: 60px; display: block"
+										size="mini"
+										type="number"
+										placeholder="上限"
+										v-model="chartLimit.max"
+										@change="changeLimit"
+									/>
+									<el-input
+										class="min-data-input"
+										size="mini"
+										type="number"
+										placeholder="下限"
+										v-model="chartLimit.min"
+										@change="changeLimit"
+									/>
+								</div>
+								<div class="range-cont right" v-if="rightIndex !== -1">
+									<el-input
+										style="width: 60px; display: block"
+										size="mini"
+										type="number"
+										placeholder="上限"
+										v-model="chartLimit.rightMax"
+										@change="changeLimit"
+									/>
+									<el-input
+										class="min-data-input"
+										size="mini"
+										type="number"
+										placeholder="下限"
+										v-model="chartLimit.rightMin"
+										@change="changeLimit"
+									/>
+								</div>
+								<!-- 右2上下限设置 -->
+								<div class="range-cont rightTwo" v-if="rightTwoIndex !== -1">
+									<el-input
+										style="width: 60px; display: block"
+										size="mini"
+										type="number"
+										placeholder="上限"
+										v-model="chartLimit.rightTwoMax"
+										@change="changeLimit"
+									/>
+									<el-input
+										class="min-data-input"
+										size="mini"
+										type="number"
+										placeholder="下限"
+										v-model="chartLimit.rightTwoMin"
+										@change="changeLimit"
+									/>
+								</div>
+							</template>
 
 
 							<!-- 后续新图专用上下限 和其他数据依赖不公用 柱形图 截面散点-->
 							<!-- 后续新图专用上下限 和其他数据依赖不公用 柱形图 截面散点-->
 							<template v-if="[7,10,11].includes(chartInfo.ChartType)">	
 							<template v-if="[7,10,11].includes(chartInfo.ChartType)">	
@@ -719,7 +776,7 @@ export default {
 					}else {
 					}else {
 						//拼接标题
 						//拼接标题
 						this.chartInfo.ChartName =  this.sameOptionType.includes(this.chartInfo.ChartType) ? newval.map((item,index) => index === newval.length-1 ? item.EdbName : `${item.EdbName}和`).join('') : `${newval[0].EdbName}季节性`;
 						this.chartInfo.ChartName =  this.sameOptionType.includes(this.chartInfo.ChartType) ? newval.map((item,index) => index === newval.length-1 ? item.EdbName : `${item.EdbName}和`).join('') : `${newval[0].EdbName}季节性`;
-	
+						this.EdbAxisChange()
 						this.setAddChartDefault();
 						this.setAddChartDefault();
 						this.setChartOptionHandle(newval);
 						this.setChartOptionHandle(newval);
 					}
 					}
@@ -794,6 +851,13 @@ export default {
 							MinData: Number(item.MinData)
 							MinData: Number(item.MinData)
 						})
 						})
 					)
 					)
+					let hasLimitChange = false
+					//需检测上下限是否修改
+					if(![7,10,11].includes(this.chartInfo.ChartType)){
+						const limitSame= this.getLimitInfo()
+						hasLimitChange = !limitSame
+					}
+					
 					if(![10,11].includes(this.chartInfo.ChartType)){
 					if(![10,11].includes(this.chartInfo.ChartType)){
 						//每个数据转换需要检测是否合法
 						//每个数据转换需要检测是否合法
 						for(let i=0;i<db_arr.length;i++){
 						for(let i=0;i<db_arr.length;i++){
@@ -852,6 +916,21 @@ export default {
 								EndDate: this.year_select === 5 ? this.select_date[1] : '',
 								EndDate: this.year_select === 5 ? this.select_date[1] : '',
 							} 
 							} 
 						: typePrams
 						: typePrams
+					if(![7,10,11].includes(this.chartInfo.ChartType)){
+						const {
+							min,max,rightMin,rightMax,rightTwoMin,rightTwoMax
+						} = this.chartLimit
+						params = {
+							...params,
+							LeftMin:min+'',
+							LeftMax:max+'',
+							RightMin:rightMin+'',
+							RightMax:rightMax+'',
+							Right2Min:rightTwoMin+'',
+							Right2Max:rightTwoMax+'',
+							MinMaxSave:Number(hasLimitChange)
+						}
+					}
 					dataBaseInterface.chartAdd(params).then(res => {
 					dataBaseInterface.chartAdd(params).then(res => {
 						if(res.Ret !== 200) return;
 						if(res.Ret !== 200) return;
 							this.setChartImage(res.Data);
 							this.setChartImage(res.Data);

+ 91 - 10
src/views/dataEntry_manage/chartSetting.vue

@@ -27,8 +27,8 @@
             @click="$router.push({path: '/addchart'})" type="primary"
             @click="$router.push({path: '/addchart'})" type="primary"
           ><!-- 添加图表 -->{{$t('Chart.add_chart_btn')}}</el-button>
           ><!-- 添加图表 -->{{$t('Chart.add_chart_btn')}}</el-button>
 
 
-          <!-- <change-lang v-permission="permissionBtn.chartLibPermission.chartLib_switchEn"
+          <change-lang v-permission="permissionBtn.chartLibPermission.chartLib_switchEn"
-            :lang="currentLang" @changeLang="changeLanguage" style="margin-left: 10px;"/> -->
+            :lang="currentLang" @changeLang="changeLanguage" style="margin-left: 10px;"/>
 
 
         </div>
         </div>
         
         
@@ -388,7 +388,7 @@
 
 
                     <Chart :options="options" :chartInfo="chartInfo" ref="chartRef"/>
                     <Chart :options="options" :chartInfo="chartInfo" ref="chartRef"/>
 
 
-                    <div class="range-cont left" v-if="leftIndex != -1">
+                   <!--  <div class="range-cont left" v-if="leftIndex != -1">
                       <el-input
                       <el-input
                         style="width: 60px; display: block"
                         style="width: 60px; display: block"
                         size="mini"
                         size="mini"
@@ -427,8 +427,6 @@
                         v-model="tableData[rightIndex].MinData"
                         v-model="tableData[rightIndex].MinData"
                       />
                       />
                     </div>
                     </div>
-
-                    <!-- 右2上下限设置 -->
                     <div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
                     <div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
                       <el-input
                       <el-input
                         style="width: 60px; display: block"
                         style="width: 60px; display: block"
@@ -446,7 +444,72 @@
                         :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
                         :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
                         v-model="tableData[rightTwoIndex].MinData"
                         v-model="tableData[rightTwoIndex].MinData"
                       />
                       />
+                    </div> -->
+                    <template v-if="![7,10,11].includes(chartInfo.ChartType)">
+                        <div class="range-cont left" v-if="leftIndex != -1">
+                            <el-input
+                                style="width: 60px; display: block"
+                                size="mini"
+                                type="number"
+                                placeholder="上限"
+                                :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                                v-model="chartLimit.max"
+                                @change="changeLimit"
+                            />
+                            <el-input
+                                class="min-data-input"
+                                size="mini"
+                                type="number"
+                                placeholder="下限"
+                                :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                                v-model="chartLimit.min"
+                                @change="changeLimit"
+                            />
+                        </div>
+                    <div 
+                      class="range-cont right" 
+                      v-if="rightIndex != -1"
+                    >
+                      <el-input
+                        style="width: 60px; display: block"
+                        size="mini"
+                        type="number"
+                        placeholder="上限"
+                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                        v-model="chartLimit.rightMax"
+                        @change="changeLimit"
+                      />
+                      <el-input
+                        class="min-data-input"
+                        size="mini"
+                        type="number"
+                        placeholder="下限"
+                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                        v-model="chartLimit.rightMin"
+                        @change="changeLimit"
+                      />
                     </div>
                     </div>
+                    <div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
+                      <el-input
+                        style="width: 60px; display: block"
+                        size="mini"
+                        type="number"
+                        placeholder="上限"
+                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                        v-model="chartLimit.rightTwoMax"
+                        @change="changeLimit"
+                      />
+                      <el-input
+                        class="min-data-input"
+                        size="mini"
+                        type="number"
+                        placeholder="下限"
+                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                        v-model="chartLimit.rightTwoMin"
+                        @change="changeLimit"
+                      />
+                    </div>
+                    </template>
 
 
                     <!-- 后续新图专用上下限 和其他数据依赖不公用 柱形图 截面散点-->
                     <!-- 后续新图专用上下限 和其他数据依赖不公用 柱形图 截面散点-->
                     <template v-if="[7,10,11].includes(chartInfo.ChartType)">	
                     <template v-if="[7,10,11].includes(chartInfo.ChartType)">	
@@ -788,7 +851,6 @@ import {
   copyOtherOptions
   copyOtherOptions
 } from '@/utils/defaultOptions';
 } from '@/utils/defaultOptions';
 import { chartSetMixin } from './mixins/chartPublic'
 import { chartSetMixin } from './mixins/chartPublic'
-
 import mPage from '@/components/mPage';
 import mPage from '@/components/mPage';
 import Chart from './components/chart';
 import Chart from './components/chart';
 import chartDialog from './components/chartDialog';
 import chartDialog from './components/chartDialog';
@@ -1410,8 +1472,8 @@ export default {
       }).then((res) => {
       }).then((res) => {
         if (res.Ret === 200) {
         if (res.Ret === 200) {
           this.$message.success('移动成功!');
           this.$message.success('移动成功!');
-          this.getTreeData();
         }
         }
+        this.getTreeData();
       });
       });
 		},
 		},
 
 
@@ -1594,6 +1656,9 @@ export default {
 			this.setDefaultSourceFrom();
 			this.setDefaultSourceFrom();
   
   
       this.tableData = res.Data.EdbInfoList;
       this.tableData = res.Data.EdbInfoList;
+      //初始化上下限
+      this.setLimitData(this.tableData)
+        
       // 设置起始日期和最新日期
       // 设置起始日期和最新日期
       this.setExtremumDate()
       this.setExtremumDate()
 
 
@@ -1851,7 +1916,22 @@ export default {
               EndDate: this.year_select === 5 ? this.select_date[1] : '',
               EndDate: this.year_select === 5 ? this.select_date[1] : '',
             }
             }
           : typeChartParam;
           : typeChartParam;
-
+        if(![7,10,11].includes(this.selected_chartType)){
+            const {
+                min,max,rightMin,rightMax,rightTwoMin,rightTwoMax
+            } = this.chartLimit
+            params = {
+                ...params,
+                LeftMin:min+'',
+                LeftMax:max+'',
+                RightMin:rightMin+'',
+                RightMax:rightMax+'',
+                Right2Min:rightTwoMin+'',
+                Right2Max:rightTwoMax+'',
+                //手动保存视为更改过上下限
+                MinMaxSave:1
+            }
+        }
         dataBaseInterface.chartSave(params).then((res) => {
         dataBaseInterface.chartSave(params).then((res) => {
           if (res.Ret === 200) {
           if (res.Ret === 200) {
             // this.$message.success('保存成功');
             // this.$message.success('保存成功');
@@ -2682,9 +2762,9 @@ export default {
     }
     }
     .chartSetting_main {
     .chartSetting_main {
       /* display: flex; */
       /* display: flex; */
-      div::-webkit-scrollbar {
+      /* div::-webkit-scrollbar {
         width: 5px !important;
         width: 5px !important;
-      }
+      } */
       .slide-icon {
       .slide-icon {
         padding: 20px 0;
         padding: 20px 0;
         /* display: block; */
         /* display: block; */
@@ -2729,6 +2809,7 @@ export default {
           padding: 15px 20px 30px;
           padding: 15px 20px 30px;
           overflow: auto;
           overflow: auto;
           max-height: calc(100vh - 330px);
           max-height: calc(100vh - 330px);
+          margin-right: 20px;
         }
         }
         .target_tree {
         .target_tree {
           font-size: 14px;
           font-size: 14px;

+ 7 - 4
src/views/dataEntry_manage/coal/index.vue

@@ -526,8 +526,10 @@ export default {
     }
     }
   }
   }
   .el-tree-node__content {
   .el-tree-node__content {
-    // min-height: 26px;
+    min-height: 26px;
-    // white-space: normal;
+    height: auto;
+    white-space: normal;
+    margin-bottom: 5px;
   }
   }
 }
 }
 </style>
 </style>
@@ -552,9 +554,9 @@ export default {
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     border-radius: 4px;
     border-radius: 4px;
   }
   }
-  div::-webkit-scrollbar {
+  /* div::-webkit-scrollbar {
     width: 5px !important;
     width: 5px !important;
-  }
+  } */
   .left-cont {
   .left-cont {
     min-width: 250px;
     min-width: 250px;
     width:250px;
     width:250px;
@@ -569,6 +571,7 @@ export default {
       /* margin-top: 20px; */
       /* margin-top: 20px; */
       height: calc(100vh - 280px);
       height: calc(100vh - 280px);
       overflow-y: auto;
       overflow-y: auto;
+      margin-right: 20px;
       .classify-item {
       .classify-item {
         font-size: 14px;
         font-size: 14px;
         color: #666;
         color: #666;

+ 30 - 12
src/views/dataEntry_manage/components/addTarget.vue

@@ -84,7 +84,7 @@
 								class="inline-input"
 								class="inline-input"
 								v-model="formData.unit"
 								v-model="formData.unit"
 								:fetch-suggestions="querySearchUnit"
 								:fetch-suggestions="querySearchUnit"
-								placeholder="请填写单位"
+								:placeholder="$t('Edb.InputHolderAll.input_unit')"
 								suffix-icon="el-icon-arrow-down"
 								suffix-icon="el-icon-arrow-down"
 								style="width: 321px;"
 								style="width: 321px;"
 							></el-autocomplete>
 							></el-autocomplete>
@@ -190,13 +190,34 @@ import {dataInterence} from 'api/api.js';
 					],
 					],
 				},
 				},
 				frequencyArr: [
 				frequencyArr: [
-					{ label:'日度',value:'日度' },
+					{
-					{ label:'周度',value:'周度' },
+						value: '日度',
-					{ label:'旬度',value:'旬度' },
+						label: /* '日度'  */this.$t('Edb.FreAll.day'),
-					{ label:'月度',value:'月度' },
+					},
-					{ label:'季度',value:'季度' },
+					{
-					{ label:'半年度',value:'半年度' },
+						value: '周度',
-					{ label:'年度',value:'年度' },
+						label: /* '周度' */this.$t('Edb.FreAll.week'),
+					},
+					{
+						value: '旬度',
+						label: /* '旬度' */this.$t('Edb.FreAll.dekad'),
+					},
+					{
+						value: '月度',
+						label: /* '月度' */this.$t('Edb.FreAll.month'),
+					},
+					{
+						value: '季度',
+						label: /* '季度' */ this.$t('Edb.FreAll.quarter'),
+					},
+					{
+						value: '半年度',
+						label: /* '半年度' */ this.$t('Edb.FreAll.month'),
+					},
+					{
+						value: '年度',
+						label: /* '年度' */ this.$t('Edb.FreAll.year'),
+					}
 				],
 				],
 				weeksArr: [
 				weeksArr: [
 					{ label:'周一',value:'周一' },
 					{ label:'周一',value:'周一' },
@@ -360,10 +381,7 @@ import {dataInterence} from 'api/api.js';
 								NoticeTime:notice_time
 								NoticeTime:notice_time
 							}).then(res => {
 							}).then(res => {
 								if(res.Ret === 200) {
 								if(res.Ret === 200) {
-									this.$message({
+									this.$message.success(this.$t('MsgPrompt.add_msg'));
-										message: '新增指标成功!',
-										type: 'success'
-									});
 									this.$emit('addOver',this.formData.type)
 									this.$emit('addOver',this.formData.type)
 									// // 重置分类id
 									// // 重置分类id
 									// this.classify_id = sessionStorage.getItem('default_id') || '';
 									// this.classify_id = sessionStorage.getItem('default_id') || '';

+ 3 - 3
src/views/dataEntry_manage/components/changeLang.vue

@@ -1,11 +1,11 @@
 <template>
 <template>
   <div class="changeLang-box" >
   <div class="changeLang-box" >
     <div class="changeLang-item" @click="changeLang">
     <div class="changeLang-item" @click="changeLang">
-      <el-button type="primary" v-if="showButton">{{lang==='ch'?'切换英文版':'切换中文版'}}</el-button>
+      <el-button type="primary" v-if="showButton">{{lang==='ch'?$t('Common.switch_to_en_v'):$t('Common.switch_to_zh_v')}}</el-button>
       <template v-else>
       <template v-else>
         <img src="../../../assets/img/icons/changeLang.png" />
         <img src="../../../assets/img/icons/changeLang.png" />
-        <span v-show="lang=='en'">切换中文</span>
+        <span v-show="lang=='en'"><!-- 切换中文 -->{{ $t('Common.switch_to_zh') }}</span>
-        <span v-show="lang=='ch'">切换英文</span>
+        <span v-show="lang=='ch'"><!-- 切换英文 -->{{ $t('Common.switch_to_en') }}</span>
 
 
       </template>
       </template>
     </div>
     </div>

+ 33 - 21
src/views/dataEntry_manage/components/editTarget.vue

@@ -76,7 +76,7 @@
 								class="inline-input"
 								class="inline-input"
 								v-model="formData.unit"
 								v-model="formData.unit"
 								:fetch-suggestions="querySearchUnit"
 								:fetch-suggestions="querySearchUnit"
-								placeholder="请填写单位"
+								:placeholder="$t('Edb.InputHolderAll.input_unit')"
 								suffix-icon="el-icon-arrow-down"
 								suffix-icon="el-icon-arrow-down"
 								style="width: 321px;"
 								style="width: 321px;"
 							></el-autocomplete>
 							></el-autocomplete>
@@ -193,13 +193,34 @@ import {dataInterence} from 'api/api.js';
 					],
 					],
 				},
 				},
 				frequencyArr: [
 				frequencyArr: [
-					{ label:'日度',value:'日度' },
+					{
-					{ label:'周度',value:'周度' },
+						value: '日度',
-					{ label:'旬度',value:'旬度' },
+						label: /* '日度'  */this.$t('Edb.FreAll.day'),
-					{ label:'月度',value:'月度' },
+					},
-					{ label:'季度',value:'季度' },
+					{
-					{ label:'半年度',value:'半年度' },
+						value: '周度',
-					{ label:'年度',value:'年度' },
+						label: /* '周度' */this.$t('Edb.FreAll.week'),
+					},
+					{
+						value: '旬度',
+						label: /* '旬度' */this.$t('Edb.FreAll.dekad'),
+					},
+					{
+						value: '月度',
+						label: /* '月度' */this.$t('Edb.FreAll.month'),
+					},
+					{
+						value: '季度',
+						label: /* '季度' */ this.$t('Edb.FreAll.quarter'),
+					},
+					{
+						value: '半年度',
+						label: /* '半年度' */ this.$t('Edb.FreAll.month'),
+					},
+					{
+						value: '年度',
+						label: /* '年度' */ this.$t('Edb.FreAll.year'),
+					}
 				],
 				],
 				weeksArr: [
 				weeksArr: [
 					{ label:'周一',value:'周一' },
 					{ label:'周一',value:'周一' },
@@ -306,10 +327,7 @@ import {dataInterence} from 'api/api.js';
 										OldCreateDate:this.old_date
 										OldCreateDate:this.old_date
 									}).then(res => {
 									}).then(res => {
 										if(res.Ret === 200) {
 										if(res.Ret === 200) {
-											this.$message({
+											this.$message.success(this.$t('MsgPrompt.entry_msg'));
-												message: '录入成功',
-												type: 'success'
-											});
 											this.$emit('editDataOver')
 											this.$emit('editDataOver')
 										}else {
 										}else {
 											this.$message({
 											this.$message({
@@ -319,7 +337,7 @@ import {dataInterence} from 'api/api.js';
 										}
 										}
 									})
 									})
 								}else if(res.Data.Status==1) {
 								}else if(res.Data.Status==1) {
-									this.$confirm('该日期已存在数据值'+res.Data.Close+',确认修改?','提示',{
+									this.$confirm('该日期已存在数据值'+res.Data.Close+',确认修改?',this.$t('Dialog.warn_tit'),{
 										type:'warning'
 										type:'warning'
 									}).then(() => {
 									}).then(() => {
 										//编辑数据
 										//编辑数据
@@ -330,10 +348,7 @@ import {dataInterence} from 'api/api.js';
 											OldCreateDate:this.old_date
 											OldCreateDate:this.old_date
 										}).then(res => {
 										}).then(res => {
 											if(res.Ret === 200) {
 											if(res.Ret === 200) {
-												this.$message({
+												this.$message.success(this.$t('MsgPrompt.edit_msg'));
-													message: '修改成功',
-													type: 'success'
-												});
 												this.$emit('editDataOver')
 												this.$emit('editDataOver')
 											}else {
 											}else {
 												this.$message({
 												this.$message({
@@ -379,10 +394,7 @@ import {dataInterence} from 'api/api.js';
 								NoticeTime:notice_time
 								NoticeTime:notice_time
 							}).then(res => {
 							}).then(res => {
 								if(res.Ret === 200) {
 								if(res.Ret === 200) {
-									this.$message({
+									this.$message.success(this.$t('MsgPrompt.edit_msg'));
-										message: '修改成功',
-										type: 'success'
-									});
 									this.$emit('editDataOver',1)
 									this.$emit('editDataOver',1)
 								}else if(res.Ret!=403){
 								}else if(res.Ret!=403){
 									this.$message({
 									this.$message({

+ 8 - 0
src/views/dataEntry_manage/css/baseTargetPage.scss

@@ -19,4 +19,12 @@
             margin-left: 0 !important;
             margin-left: 0 !important;
         }
         }
     }
     }
+    .word-wrap{
+        .el-tree-node__content {
+            min-height: 26px;
+            height: auto;
+            white-space: normal;
+            margin-bottom: 5px;
+          }
+    }
 }
 }

+ 3 - 2
src/views/dataEntry_manage/css/coalCommon.scss

@@ -19,9 +19,9 @@
     border-radius: 4px;
     border-radius: 4px;
     box-sizing: border-box;
     box-sizing: border-box;
   }
   }
-  div::-webkit-scrollbar {
+  /* div::-webkit-scrollbar {
     width: 5px !important;
     width: 5px !important;
-  }
+  } */
   .left-cont {
   .left-cont {
     min-width: 240px;
     min-width: 240px;
     width:240px;
     width:240px;
@@ -36,6 +36,7 @@
       margin-top: 20px;
       margin-top: 20px;
       height: calc(100vh - 280px);
       height: calc(100vh - 280px);
       overflow-y: auto;
       overflow-y: auto;
+      margin-right: 20px;
       .classify-item {
       .classify-item {
         font-size: 14px;
         font-size: 14px;
         color: #666;
         color: #666;

+ 4 - 4
src/views/dataEntry_manage/dataEntry.vue

@@ -107,12 +107,12 @@
                       <span
                       <span
                         v-if="data[item] === '未完成'"
                         v-if="data[item] === '未完成'"
                         style="color: #ff0000"
                         style="color: #ff0000"
-                        >{{ data[item] }}</span
+                        >{{ $t('ManualEntryPage.col_status_2') }}</span
                       >
                       >
                       <span
                       <span
                         v-else-if="data[item] === '完成'"
                         v-else-if="data[item] === '完成'"
                         style="color: #4ac526"
                         style="color: #4ac526"
-                        >{{ data[item] }}</span
+                        >{{$t('ManualEntryPage.col_status_1')}}</span
                       >
                       >
                       <span v-else>{{ data[item] }}</span>
                       <span v-else>{{ data[item] }}</span>
                     </template>
                     </template>
@@ -1180,9 +1180,9 @@ export default {
       padding: 0 10px;
       padding: 0 10px;
       height: calc(100% - 176px);
       height: calc(100% - 176px);
       overflow-y: scroll;
       overflow-y: scroll;
-      &::-webkit-scrollbar {
+      /* &::-webkit-scrollbar {
         width: 0px !important;
         width: 0px !important;
-      }
+      } */
       .classify-item {
       .classify-item {
         text-align: left;
         text-align: left;
         font-size: 15px;
         font-size: 15px;

+ 12 - 2
src/views/dataEntry_manage/databaseComponents/addTargetDiaBase.vue

@@ -21,6 +21,13 @@
 							</el-option>
 							</el-option>
 						</el-select>
 						</el-select>
 					</div>
 					</div>
+
+					<!-- 路透增加频度选择 -->
+					<el-select v-model="rtrFromFrequency" placeholder="请选择频度" v-if="fromType==='路透'">
+						<el-option :label="item" :value="item"
+						v-for="item in frequencyArr" :key="item"></el-option>
+					</el-select>
+
 					<el-input v-show="isCompanyCode" :placeholder="$t('EtaBasePage.complany_pholder')" v-model="search_company_txt" style="maxWidth:340px;"
 					<el-input v-show="isCompanyCode" :placeholder="$t('EtaBasePage.complany_pholder')" v-model="search_company_txt" style="maxWidth:340px;"
 						@keyup.enter.native="searchHandle" :disabled="haveResult" clearable>
 						@keyup.enter.native="searchHandle" :disabled="haveResult" clearable>
 						<i slot="prefix" class="el-input__icon el-icon-search"></i>
 						<i slot="prefix" class="el-input__icon el-icon-search"></i>
@@ -304,7 +311,8 @@ export default {
 			THSIndexCodeTypeArr:[
 			THSIndexCodeTypeArr:[
 				{value:1,label:this.$t('EtaBasePage.future_common_edb')},
 				{value:1,label:this.$t('EtaBasePage.future_common_edb')},
 				{value:2,label:this.$t('EtaBasePage.stock_common_edb')}
 				{value:2,label:this.$t('EtaBasePage.stock_common_edb')}
-			]
+			],
+			rtrFromFrequency:frequencyArr[0],//路透频度
 		};
 		};
 	},
 	},
 	watch:{
 	watch:{
@@ -334,6 +342,7 @@ export default {
 			this.indexCodeSelected=[]
 			this.indexCodeSelected=[]
 			this.THSIndexCodeType=1
 			this.THSIndexCodeType=1
 			this.isCompanyCode = false;
 			this.isCompanyCode = false;
+			this.rtrFromFrequency=frequencyArr[0]
 		},
 		},
 		cancelHandle() {
 		cancelHandle() {
 			this.init();
 			this.init();
@@ -375,7 +384,8 @@ export default {
 				dataBaseInterface.getTarget({
 				dataBaseInterface.getTarget({
 					Source: Number(this.fromCode.get(this.fromType)),
 					Source: Number(this.fromCode.get(this.fromType)),
 					EdbCode: this.search_txt,
 					EdbCode: this.search_txt,
-					CompanyCode: this.search_company_txt
+					CompanyCode: this.search_company_txt,
+					Frequency: this.rtrFromFrequency
 				}).then(res => {
 				}).then(res => {
 					if (res.Ret === 200) {
 					if (res.Ret === 200) {
 						this.haveResult = false;
 						this.haveResult = false;

+ 10 - 6
src/views/dataEntry_manage/databaseList.vue

@@ -17,8 +17,12 @@
 			</div>
 			</div>
 			<div class="top-right">
 			<div class="top-right">
 
 
-				<!-- <change-lang v-permission="permissionBtn.edbDataPermission.edbData_switchEn"
+				<change-lang 
-					:lang="currentLang" style="height: 32px;" @changeLang="changeLanguage"/> -->
+					v-permission="permissionBtn.edbDataPermission.edbData_switchEn"
+					:lang="currentLang" 
+					style="height: 32px;" 
+					@changeLang="changeLanguage"
+				/>
 
 
 				<el-select
 				<el-select
 					v-model="search_txt"
 					v-model="search_txt"
@@ -422,7 +426,7 @@
 			<ul class="computed-ul">
 			<ul class="computed-ul">
 				<li
 				<li
 					:class="['cpmputed-li',item.type === computed_type?'act':'']" 
 					:class="['cpmputed-li',item.type === computed_type?'act':'']" 
-					v-for="item in computedTypes" 
+					v-for="item in computedShowTypes" 
 					:key="item.type" 
 					:key="item.type" 
 					@click="changeComputedType(item.type)">
 					@click="changeComputedType(item.type)">
 					{{item.name}}
 					{{item.name}}
@@ -2222,9 +2226,9 @@ export default {
 		position:relative;
 		position:relative;
 		width:100%;
 		width:100%;
 		overflow-x: auto;
 		overflow-x: auto;
-		div::-webkit-scrollbar {
+		/* div::-webkit-scrollbar {
 			width: 5px !important;
 			width: 5px !important;
-		}
+		} */
 		.main-left {
 		.main-left {
 			width: 400px;
 			width: 400px;
 			min-width: 300px;
 			min-width: 300px;
@@ -2238,7 +2242,7 @@ export default {
 			position: relative;
 			position: relative;
 			box-sizing: border-box;
 			box-sizing: border-box;
 			.tree-cont {
 			.tree-cont {
-				padding: 30px 0 30px 30px;
+				padding: 30px;
 				/* height: calc(100vh - 290px);
 				/* height: calc(100vh - 290px);
 				overflow: auto; */
 				overflow: auto; */
 			}
 			}

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

@@ -418,7 +418,7 @@
 								{{ chartInfo.ChartName }}
 								{{ chartInfo.ChartName }}
 							</h2>
 							</h2>
 							<Chart :options="options" :chartInfo="chartInfo" ref="chartRef" />
 							<Chart :options="options" :chartInfo="chartInfo" ref="chartRef" />
-							<div class="range-cont left" v-if="leftIndex != -1">
+							<!-- <div class="range-cont left" v-if="leftIndex != -1">
 								<el-input
 								<el-input
 									style="width: 60px; display: block"
 									style="width: 60px; display: block"
 									size="mini"
 									size="mini"
@@ -450,7 +450,6 @@
 									v-model="tableData[rightIndex].MinData"
 									v-model="tableData[rightIndex].MinData"
 								/>
 								/>
 							</div>
 							</div>
-							<!-- 右2上下限设置 -->
 							<div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
 							<div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
 								<el-input
 								<el-input
 									style="width: 60px; display: block"
 									style="width: 60px; display: block"
@@ -466,7 +465,65 @@
 									placeholder="下限"
 									placeholder="下限"
 									v-model="tableData[rightTwoIndex].MinData"
 									v-model="tableData[rightTwoIndex].MinData"
 								/>
 								/>
-							</div>
+							</div> -->
+							<!-- 需求:曲线图、堆积柱状图、组合图加入新指标时上下限自动调整 -->
+							<template v-if="![7,10,11].includes(chartInfo.ChartType)">
+								<div class="range-cont left" v-if="leftIndex !== -1">
+									<el-input
+										style="width: 60px; display: block"
+										size="mini"
+										type="number"
+										placeholder="上限"
+										v-model="chartLimit.max"
+										@change="changeLimit"
+									/>
+									<el-input
+										class="min-data-input"
+										size="mini"
+										type="number"
+										placeholder="下限"
+										v-model="chartLimit.min"
+										@change="changeLimit"
+									/>
+								</div>
+								<div class="range-cont right" v-if="rightIndex !== -1">
+									<el-input
+										style="width: 60px; display: block"
+										size="mini"
+										type="number"
+										placeholder="上限"
+										v-model="chartLimit.rightMax"
+										@change="changeLimit"
+									/>
+									<el-input
+										class="min-data-input"
+										size="mini"
+										type="number"
+										placeholder="下限"
+										v-model="chartLimit.rightMin"
+										@change="changeLimit"
+									/>
+								</div>
+								<!-- 右2上下限设置 -->
+								<div class="range-cont rightTwo" v-if="rightTwoIndex !== -1">
+									<el-input
+										style="width: 60px; display: block"
+										size="mini"
+										type="number"
+										placeholder="上限"
+										v-model="chartLimit.rightTwoMax"
+										@change="changeLimit"
+									/>
+									<el-input
+										class="min-data-input"
+										size="mini"
+										type="number"
+										placeholder="下限"
+										v-model="chartLimit.rightTwoMin"
+										@change="changeLimit"
+									/>
+								</div>
+							</template>
 
 
 							<!-- 后续新图专用上下限 和其他数据依赖不公用 柱形图 截面散点-->
 							<!-- 后续新图专用上下限 和其他数据依赖不公用 柱形图 截面散点-->
 							<template v-if="[7,10,11].includes(chartInfo.ChartType)">	
 							<template v-if="[7,10,11].includes(chartInfo.ChartType)">	
@@ -680,7 +737,6 @@ import { dataBaseInterface } from '@/api/api.js';
 import { chartSetMixin } from './mixins/chartPublic';
 import { chartSetMixin } from './mixins/chartPublic';
 import {unitArr} from '@/utils/defaultOptions.js'
 import {unitArr} from '@/utils/defaultOptions.js'
 import addOrEditMixn from './mixins/addOreditMixin';
 import addOrEditMixn from './mixins/addOreditMixin';
-
 import Chart from './components/chart';
 import Chart from './components/chart';
 import DateChooseDia from './components/DateChooseDia';
 import DateChooseDia from './components/DateChooseDia';
 import SaveChartOther from './components/SaveChartOther';
 import SaveChartOther from './components/SaveChartOther';
@@ -728,6 +784,7 @@ export default {
 						//雷达图
 						//雷达图
 						this.chartInfo.ChartType === 11 && this.$refs.BarOptRef && this.$refs.BarOptRef.getBarData();
 						this.chartInfo.ChartType === 11 && this.$refs.BarOptRef && this.$refs.BarOptRef.getBarData();
 					}else {
 					}else {
+						this.EdbAxisChange()
 						this.setAddChartDefault();
 						this.setAddChartDefault();
 						newval.length && !this.chartInfo.WarnMsg && this.setChartOptionHandle(newval);
 						newval.length && !this.chartInfo.WarnMsg && this.setChartOptionHandle(newval);
 					}
 					}
@@ -809,6 +866,8 @@ export default {
 					this.chartInfo.ChartType === 11 && this.initRadarData(res.Data);
 					this.chartInfo.ChartType === 11 && this.initRadarData(res.Data);
 					
 					
 					this.getThemeList();
 					this.getThemeList();
+					//初始化上下限
+					this.setLimitData(this.tableData)
 
 
         });
         });
 		},
 		},
@@ -903,6 +962,13 @@ export default {
 							MinData: Number(item.MinData)
 							MinData: Number(item.MinData)
 						})
 						})
 					)
 					)
+					
+					let hasLimitChange = Boolean(this.chartInfo.MinMaxSave)
+					//需检测上下限是否修改
+					if(![7,10,11].includes(this.chartInfo.ChartType)&&!this.chartInfo.MinMaxSave){
+						const limitSame= this.getLimitInfo()
+						hasLimitChange = !limitSame
+					}
 					if(![10,11].includes(this.chartInfo.ChartType)){
 					if(![10,11].includes(this.chartInfo.ChartType)){
 						//每个数据转换需要检测是否合法
 						//每个数据转换需要检测是否合法
 						for(let i=0;i<db_arr.length;i++){
 						for(let i=0;i<db_arr.length;i++){
@@ -968,7 +1034,21 @@ export default {
 							height: 230,
 							height: 230,
 						}
 						}
 					});
 					});
-
+					if(![7,10,11].includes(this.chartInfo.ChartType)){
+						const {
+							min,max,rightMin,rightMax,rightTwoMin,rightTwoMax
+						} = this.chartLimit
+						params = {
+							...params,
+							LeftMin:min+'',
+							LeftMax:max+'',
+							RightMin:rightMin+'',
+							RightMax:rightMax+'',
+							Right2Min:rightTwoMin+'',
+							Right2Max:rightTwoMax+'',
+							MinMaxSave:Number(hasLimitChange)
+						}
+					}
 					dataBaseInterface.chartEdit(params).then(res => {
 					dataBaseInterface.chartEdit(params).then(res => {
 						if(res.Ret !== 200) return;
 						if(res.Ret !== 200) return;
 						
 						

+ 100 - 8
src/views/dataEntry_manage/mixins/addOreditMixin.js

@@ -82,6 +82,7 @@ export default {
 			sourceEditForm: {
 			sourceEditForm: {
 
 
 			},
 			},
+
 			updateData:[],
 			updateData:[],
 			useUnit:''
 			useUnit:''
 		}
 		}
@@ -153,6 +154,8 @@ export default {
 
 
 				//共用结构的类型切换可以直接画图
 				//共用结构的类型切换可以直接画图
 				if(![7,10,11].includes(newval)) {
 				if(![7,10,11].includes(newval)) {
+					//初始化上下限
+					this.setLimitData(this.tableData)
 					//单指标允许切换到季节图需药重新请求数据
 					//单指标允许切换到季节图需药重新请求数据
 					this.tableData.length===1 && this.selectTarget(this.tableData[0],'switch');
 					this.tableData.length===1 && this.selectTarget(this.tableData[0],'switch');
 					this.tableData.length > 1 && this.setChartOptionHandle(this.tableData);
 					this.tableData.length > 1 && this.setChartOptionHandle(this.tableData);
@@ -183,7 +186,7 @@ export default {
 			}
 			}
 			//如果类型为对数,检测数据是否包含负数
 			//如果类型为对数,检测数据是否包含负数
 			if(ConvertType===3){
 			if(ConvertType===3){
-				if(!this.checkEdbData(this.tableData[index].DataList)){
+				if(!this.checkEdbData(this.tableData[index].DataList||[])){
 					this.updateData[index].IsConvert = false
 					this.updateData[index].IsConvert = false
 					return this.$message.warning("指标数据含有负数或0,无法进行对数运算")
 					return this.$message.warning("指标数据含有负数或0,无法进行对数运算")
 				}
 				}
@@ -242,9 +245,22 @@ export default {
 			}
 			}
 		},
 		},
 		checkEdbData(data){
 		checkEdbData(data){
-			const ValueArr = data.map(i=>(i.Value||0))
+			//季节性图要遍历data 取下一层的DataList
-			const minData = Math.min(...ValueArr)
+			if(this.chartInfo.ChartType===2){
-			return minData>0
+				let minDataArr = []
+				data.forEach(d=>{
+					const DataList = d.DataList||[]
+					const ValueArr = DataList.map(i=>(i.Value||0))
+					const minData = Math.min(...ValueArr)
+					minDataArr.push(minData)
+				})
+				return Math.min(...minDataArr)>0
+			}else{
+				//其他图
+				const ValueArr = data.map(i=>(i.Value||0))
+				const minData = Math.min(...ValueArr)
+				return minData>0
+			}
 		},
 		},
 		/* 选择指标 获取指标详情并push到表格中*/
 		/* 选择指标 获取指标详情并push到表格中*/
 		selectTarget(item,type='') {
 		selectTarget(item,type='') {
@@ -314,6 +330,8 @@ export default {
 									text: sourceStr
 									text: sourceStr
 								});
 								});
 							}
 							}
+							//新增指标后,检测上下限变化,修改上下限
+							this.EdbAxisChange()
 
 
 							this.$nextTick(()=>{
 							this.$nextTick(()=>{
 								// 等待 tableData的 监听里面的获取到 起始时间和最近日期
 								// 等待 tableData的 监听里面的获取到 起始时间和最近日期
@@ -579,7 +597,14 @@ export default {
 			this.dateForm = {};
 			this.dateForm = {};
 			this.dateTip = /* '请选择时间段' */ this.$t('Chart.choose_time');
 			this.dateTip = /* '请选择时间段' */ this.$t('Chart.choose_time');
 			this.barDateList = [];
 			this.barDateList = [];
-      this.chartLimit = {};
+			this.chartLimit = {
+				min:'', //左轴上下限
+				max:'',
+				rightMin:'',//右轴上下限
+				rightMax:'',
+				rightTwoMin:'',//右二轴上下限
+				rightTwoMax:'',
+			};
       this.sectionScatterData = {};
       this.sectionScatterData = {};
 
 
 			this.$nextTick(()=>{
 			this.$nextTick(()=>{
@@ -661,9 +686,10 @@ export default {
 		delTarget(item) {
 		delTarget(item) {
 			let index = this.tableData.findIndex(obj => obj.EdbInfoId === item.EdbInfoId);
 			let index = this.tableData.findIndex(obj => obj.EdbInfoId === item.EdbInfoId);
 			this.tableData.splice(index, 1);
 			this.tableData.splice(index, 1);
-			// this.$message.success('删除成功')
+			this.updateData.splice(index, 1)
 			this.$message.success(this.$t('MsgPrompt.delete_msg'))
 			this.$message.success(this.$t('MsgPrompt.delete_msg'))
-
+			//删除指标时,检测上下限,修改上下限
+			this.EdbAxisChange()
 			//添加图表时重置默认样式
 			//添加图表时重置默认样式
 			this.$route.path==='/addchart' && this.resetChartEdbDefault();
 			this.$route.path==='/addchart' && this.resetChartEdbDefault();
 			
 			
@@ -1037,6 +1063,72 @@ export default {
 				...JSON.parse(this.chartInfo.SourcesFrom),
 				...JSON.parse(this.chartInfo.SourcesFrom),
 				isShow:this.chartInfo.SourcesFromVisable
 				isShow:this.chartInfo.SourcesFromVisable
 			})
 			})
-		}
+		},
+		/* 图表轴发生变化:增加/删除指标,改变指标左右轴*/
+		EdbAxisChange(){
+			//若用户没有修改过,则计算y轴的上下限
+			if(!this.chartInfo.MinMaxSave){
+				this.calcYAxislimit(this.tableData)
+			}else{
+				//若用户修改过,则检测轴的上下限是否为空,若为空,则需要计算对应轴的上下限
+				this.checkChartLimit(this.tableData)
+			}
+		},
+		//新增/编辑保存图表时-判断用户有没有手动更改过上下限
+		getLimitInfo(){
+			//散点图单独处理
+			if(this.chartInfo.ChartType===5){
+				if(this.tableData[1]){
+					const {min,max} = this.chartLimit
+					return Number(max)===Number(this.tableData[1].MaxData)
+					&& Number(min)===Number(this.tableData[1].MinData)
+				}
+				return false
+			}
+			const leftData = this.tableData.filter(i=>i.IsAxis===1).map(i=>[Number(i.MinData),Number(i.MaxData)])
+			const rightData = this.tableData.filter(i=>!i.IsAxis).map(i=>[Number(i.MinData),Number(i.MaxData)])
+			const rightTwoData = this.tableData.filter(i=>i.IsAxis===2).map(i=>[Number(i.MinData),Number(i.MaxData)])
+			let leftLimitSame=true,rightLimitSame=true,rightTwoLimitSame=true
+			const {
+				min,max,rightMin,rightMax,rightTwoMin,rightTwoMax
+			} = this.chartLimit
+			//若每个轴的最大值和最小值不一致,则认为是更改过
+			if(leftData.length){
+				const {Max,Min} = this.calcLimit(leftData.flat())
+				leftLimitSame = Max===Number(max)&&Min===Number(min)
+				console.table([{
+					'y轴': '左轴',
+					'设置最大值': max,
+					'设置最小值': min,
+					'指标最大值':Max,
+					'指标最小值':Min
+				}])
+			}
+			if(rightData.length){
+				const {Max,Min} = this.calcLimit(rightData.flat())
+				rightLimitSame = Max===Number(rightMax)&&Min===Number(rightMin)
+				console.table([{
+					'y轴': '右轴',
+					'设置最大值': rightMax,
+					'设置最小值': rightMin,
+					'指标最大值':Max,
+					'指标最小值':Min
+				}])
+			}
+			if(rightTwoData.length){
+				const {Max,Min} = this.calcLimit(rightTwoData.flat())
+				rightTwoLimitSame = Max===Number(rightTwoMax)&&Min===Number(rightTwoMin)
+				console.table([{
+					'y轴': '右二轴',
+					'设置最大值': rightTwoMax,
+					'设置最小值': rightTwoMin,
+					'指标最大值':Max,
+					'指标最小值':Min
+				}])
+			}
+			let limitSame = leftLimitSame&&rightLimitSame&&rightTwoLimitSame
+			console.log('是否修改过上下限?',!limitSame)
+			return limitSame
+		},
 	}
 	}
 }
 }

+ 307 - 19
src/views/dataEntry_manage/mixins/chartPublic.js

@@ -38,7 +38,7 @@ const basicYAxis = {
 }
 }
 /**备注一下 越多越乱
 /**备注一下 越多越乱
  * @params
  * @params
- * Source 1 ; chartType 1曲线 2季节 3面积 4堆积柱 5散点 6组合 7柱形 8截面散点
+ * Source 1 ; chartType 1曲线 2季节 3面积 4堆积柱 5散点 6组合 7柱形 10截面散点 11雷达图
  * 2 商品价格
  * 2 商品价格
  * 3 相关性
  * 3 相关性
  * 4 滚动相关性
  * 4 滚动相关性
@@ -158,7 +158,15 @@ export const chartSetMixin = {
       barXData: [],//柱形图的x轴
       barXData: [],//柱形图的x轴
       barXIdList: [],//x轴id数组 用于切换英文遍历用
       barXIdList: [],//x轴id数组 用于切换英文遍历用
       barEdbData: [],//柱形图的表格数据 只用于取值
       barEdbData: [],//柱形图的表格数据 只用于取值
-      chartLimit: {},
+      chartLimit: {
+        min:'', //左轴上下限
+        max:'',
+        rightMin:'',//右轴上下限
+        rightMax:'',
+        rightTwoMin:'',//右二轴上下限
+        rightTwoMax:'',
+
+      },
 
 
       /* 商品价格曲线 本来逻辑分开写 但需求又得加入myeta和eta图库共存 还是写一块算了 */
       /* 商品价格曲线 本来逻辑分开写 但需求又得加入myeta和eta图库共存 还是写一块算了 */
       commodityChartData: [],
       commodityChartData: [],
@@ -312,7 +320,7 @@ export const chartSetMixin = {
         notEdit:true
         notEdit:true
       },
       },
       {
       {
-        label:/* '英文图表名称' */this.$t('Chart.Detail.chart_name'),
+        label:/* '英文图表名称' */this.$t('Chart.Detail.chart_en_name'),
         value:this.chartInfo.ChartNameEn,
         value:this.chartInfo.ChartNameEn,
         key:'ChartNameEn',
         key:'ChartNameEn',
         id:this.chartInfo.ChartInfoId,
         id:this.chartInfo.ChartInfoId,
@@ -502,10 +510,7 @@ export const chartSetMixin = {
 
 
 			if(res.Ret !==200) return
 			if(res.Ret !==200) return
 
 
-			this.$message({
+			this.$message.success(this.$t('MsgPrompt.edit_msg'))
-				message:res.Msg,
-				type:"success"
-			})
       this.getChartInfo()
       this.getChartInfo()
 			this.setEnName = false
 			this.setEnName = false
     },
     },
@@ -625,7 +630,14 @@ export const chartSetMixin = {
         this.leftIndex = -1;
         this.leftIndex = -1;
         this.rightIndex = -1;
         this.rightIndex = -1;
         this.rightTwoIndex = -1;
         this.rightTwoIndex = -1;
-        this.chartLimit = {};
+        this.chartLimit = {
+            min:'', //左轴上下限
+            max:'',
+            rightMin:'',//右轴上下限
+            rightMax:'',
+            rightTwoMin:'',//右二轴上下限
+            rightTwoMax:'',
+        };
       }else {
       }else {
         this.leftIndex = newval.findIndex((item) => item.IsAxis===1);
         this.leftIndex = newval.findIndex((item) => item.IsAxis===1);
         this.rightIndex = newval.findIndex((item) => !item.IsAxis);
         this.rightIndex = newval.findIndex((item) => !item.IsAxis);
@@ -646,7 +658,31 @@ export const chartSetMixin = {
         let sameSideIndex = chartData.findIndex(
         let sameSideIndex = chartData.findIndex(
           (i) => i.IsAxis === item.IsAxis
           (i) => i.IsAxis === item.IsAxis
         );
         );
-
+        
+        //获取对应轴的上下限
+        //预测指标-走势图;图表配置-主题设置;不使用自定义上下限,剔除
+        const useTableLimit = ['/predictEdb','/addpredictEdb','/editpredictEdb','/chartThemeSet'].includes(this.$route.path)
+        //非ETA图库图表也不设置自定义上下限,相关性和统计特征也会用到曲线图
+        //若chartInfo.Source为1,需在之前调用setLimitData
+        const isETASource = this.chartInfo.Source===1
+        let minLimit = 0,maxLimit = 0
+        if(useTableLimit||!isETASource){
+            minLimit = newval[sameSideIndex].MinData
+            maxLimit = newval[sameSideIndex].MaxData
+        }
+        if(!useTableLimit&&isETASource){
+            const limitMap = {
+                0:['rightMin','rightMax'],
+                1:['min','max'],
+                2:['rightTwoMin','rightTwoMax']
+            }
+            if(limitMap[item.IsAxis]){
+                minLimit = this.chartLimit[`${limitMap[item.IsAxis][0]}`]||0
+                maxLimit = this.chartLimit[`${limitMap[item.IsAxis][1]}`]||0
+            }
+        }
+        
+        
         //y轴
         //y轴
         const textZh = item.ConvertUnit||item.Unit
         const textZh = item.ConvertUnit||item.Unit
         const textEn = item.ConvertEnUnit||item.UnitEn||item.ConvertUnit||item.Unit
         const textEn = item.ConvertEnUnit||item.UnitEn||item.ConvertUnit||item.Unit
@@ -679,8 +715,8 @@ export const chartSetMixin = {
           },
           },
           opposite: [0,2].includes(item.IsAxis),
           opposite: [0,2].includes(item.IsAxis),
           reversed: item.IsOrder,
           reversed: item.IsOrder,
-          min: Number(item.MinData),
+          min: Number(minLimit),
-          max: Number(item.MaxData),
+          max: Number(maxLimit),
           tickWidth: 1,
           tickWidth: 1,
           visible: sameSideIndex === index,
           visible: sameSideIndex === index,
           plotBands: this.setAxisPlotAreas(item.IsAxis),
           plotBands: this.setAxisPlotAreas(item.IsAxis),
@@ -826,6 +862,26 @@ export const chartSetMixin = {
         ? -1
         ? -1
         : newval.findIndex((item) => item.IsAxis===2);
         : newval.findIndex((item) => item.IsAxis===2);
 
 
+
+        //获取对应轴的上下限
+        //预测指标-走势图;图表配置-主题设置;不使用自定义上下限,剔除
+        const useTableLimit = ['/predictEdb','/chartThemeSet'].includes(this.$route.path)
+        let minLimit = 0,maxLimit = 0
+        if(useTableLimit){
+            minLimit = chartData[sameSideIndex].MinData
+            maxLimit = chartData[sameSideIndex].MaxData
+        }else{
+            const limitMap = {
+                0:['rightMin','rightMax'],
+                1:['min','max'],
+                2:['rightTwoMin','rightTwoMax']
+            }
+            if(limitMap[item.IsAxis]){
+                minLimit = this.chartLimit[`${limitMap[item.IsAxis][0]}`]||0
+                maxLimit = this.chartLimit[`${limitMap[item.IsAxis][1]}`]||0
+            }
+        }
+        
         //y轴
         //y轴
         const textZh = item.ConvertUnit||item.Unit
         const textZh = item.ConvertUnit||item.Unit
         const textEn = item.ConvertEnUnit||item.UnitEn||item.ConvertUnit||item.Unit
         const textEn = item.ConvertEnUnit||item.UnitEn||item.ConvertUnit||item.Unit
@@ -858,8 +914,8 @@ export const chartSetMixin = {
           },
           },
           opposite: [0,2].includes(item.IsAxis),
           opposite: [0,2].includes(item.IsAxis),
           reversed: item.IsOrder,
           reversed: item.IsOrder,
-          min: Number(chartData[sameSideIndex].MinData),
+          min: Number(minLimit),
-          max: Number(chartData[sameSideIndex].MaxData),
+          max: Number(maxLimit),
           tickWidth: 1,
           tickWidth: 1,
           visible: serie_yIndex === index && sameSideIndex ===index,
           visible: serie_yIndex === index && sameSideIndex ===index,
           plotBands: this.setAxisPlotAreas(item.IsAxis),
           plotBands: this.setAxisPlotAreas(item.IsAxis),
@@ -956,6 +1012,18 @@ export const chartSetMixin = {
       let seasonYdata = [],
       let seasonYdata = [],
         seasonData = [];
         seasonData = [];
 
 
+        //获取对应轴的上下限
+        //预测指标-走势图;图表配置-主题设置;不使用自定义上下限,剔除
+        const useTableLimit = ['/predictEdb','/chartThemeSet','/addpredictEdb','/editpredictEdb'].includes(this.$route.path)
+        let minLimit = 0,maxLimit = 0
+        if(useTableLimit){
+            minLimit = chartData.MinData
+            maxLimit = chartData.MaxData
+        }else{
+            minLimit = this.chartLimit.min||0
+            maxLimit = this.chartLimit.max||0
+        }
+
       //数据列
       //数据列
       for (let j of chartDataHandle) {
       for (let j of chartDataHandle) {
         //预测指标配置
         //预测指标配置
@@ -1008,8 +1076,8 @@ export const chartSetMixin = {
           textAlign: 'left',
           textAlign: 'left',
           reserveSpace: false
           reserveSpace: false
         },
         },
-        max: Number(chartData.MaxData),
+        max: Number(maxLimit),
-        min: Number(chartData.MinData),
+        min: Number(minLimit),
         plotBands: this.setAxisPlotAreas(1),
         plotBands: this.setAxisPlotAreas(1),
         plotLines: this.setAxisPlotLines(1)
         plotLines: this.setAxisPlotLines(1)
       }];
       }];
@@ -1042,11 +1110,52 @@ export const chartSetMixin = {
       }
       }
 
 
       let colors = chartTheme&&chartTheme.colorsOptions.reverse()||seasonOptions.colors;
       let colors = chartTheme&&chartTheme.colorsOptions.reverse()||seasonOptions.colors;
+      // 季节性 农历成图老逻辑,需要截取 指标成图还在用,后面需要统一或者拆分
+      let rangeSelector =
+      this.calendar_type === '农历' && this.isPredictorChart
+        ? {
+            enabled: true,
+            selected: 0,
+            inputStyle: {
+              display: 'none',
+            },
+            labelStyle: {
+              display: 'none',
+            },
+            buttonTheme: {
+              style: {
+                display: 'none',
+              },
+            },
+            buttons: [
+              {
+                type: 'month',
+                count: 12,
+                text: '12月',
+              },
+              {
+                type: 'month',
+                count: 15,
+                text: '15月',
+              },
+              {
+                type: 'all',
+                text: '全部',
+                type: 'all',
+              },
+            ],
+          }
+        : {
+            enabled: false,
+          };
+
+
       this.options = {
       this.options = {
         colors: colors.slice(-chartDataHandle.length),
         colors: colors.slice(-chartDataHandle.length),
         series: seasonData,
         series: seasonData,
         yAxis: seasonYdata,
         yAxis: seasonYdata,
         xAxis,
         xAxis,
+        rangeSelector,
         tooltip
         tooltip
       };
       };
       if(this.currentLang=='en') this.changeOptions()
       if(this.currentLang=='en') this.changeOptions()
@@ -1132,6 +1241,18 @@ export const chartSetMixin = {
       } */
       } */
 
 
 
 
+      //获取对应轴的上下限
+        //预测指标-走势图;图表配置-主题设置;不使用自定义上下限,剔除
+        const useTableLimit = ['/predictEdb','/chartThemeSet'].includes(this.$route.path)
+        let minLimit = 0,maxLimit = 0
+        if(useTableLimit){
+            minLimit = Math.min(...real_data.map(_ => _.y));
+            maxLimit = Math.max(...real_data.map(_ => _.y));
+        }else{
+            minLimit = this.chartLimit.min||0
+            maxLimit = this.chartLimit.max||0
+        }
+
       const { IsOrder,ChartColor } = newval[0];
       const { IsOrder,ChartColor } = newval[0];
       //y轴
       //y轴
       const textYZh = newval[1].ConvertUnit||newval[1].Unit
       const textYZh = newval[1].ConvertUnit||newval[1].Unit
@@ -1165,8 +1286,8 @@ export const chartSetMixin = {
         },
         },
         opposite: false,
         opposite: false,
         reversed: IsOrder,
         reversed: IsOrder,
-        min: Number(newval[1].MinData),
+        min: Number(minLimit),
-        max: Number(newval[1].MaxData),
+        max: Number(maxLimit),
         tickWidth: 1,
         tickWidth: 1,
         plotBands: this.setAxisPlotAreas(1),
         plotBands: this.setAxisPlotAreas(1),
         plotLines: this.setAxisPlotLines(1)
         plotLines: this.setAxisPlotLines(1)
@@ -1232,6 +1353,9 @@ export const chartSetMixin = {
       x轴为指标名称的柱形图 以日期作为series
       x轴为指标名称的柱形图 以日期作为series
     */
     */
     setBarChart() {
     setBarChart() {
+      this.leftIndex = -1;
+      this.rightIndex = -1;
+      this.rightTwoIndex = -1;
       let seriesData = [];
       let seriesData = [];
       const data = _.cloneDeep(this.barDateList);
       const data = _.cloneDeep(this.barDateList);
 
 
@@ -2140,6 +2264,10 @@ export const chartSetMixin = {
 
 
        //数据列
        //数据列
       let series = [];
       let series = [];
+      const tagMap = { //标签对应文字
+        1: '最新',
+        3: 'Fix'
+      }
       DataList.forEach(item => {
       DataList.forEach(item => {
         //数据列
         //数据列
         let series_item = {
         let series_item = {
@@ -2153,7 +2281,16 @@ export const chartSetMixin = {
           zIndex:1
           zIndex:1
         }
         }
         item.CoordinatePointData.forEach(_ => {
         item.CoordinatePointData.forEach(_ => {
-          series_item.data.push({x: _.X,y: _.Y,})
+          series_item.data.push({
+            x: _.X,
+            y: _.Y,
+            dataLabels: {
+              enabled: _.ShowTips===1,
+              allowOverlap: true,
+              align: 'left',
+              format: tagMap[_.DateType] || `-${_.DaysAgo}D`,
+            }
+          })
         })
         })
         series.push(series_item);
         series.push(series_item);
       })
       })
@@ -2509,6 +2646,12 @@ export const chartSetMixin = {
     changeLimit() {
     changeLimit() {
       //source1 eta图库的类型对应
       //source1 eta图库的类型对应
       const typeMap = {
       const typeMap = {
+        1: this.setDefaultChart,
+        2: this.setSeasonChart,
+        3: this.setStackOrCombinChart,
+        4: this.setStackOrCombinChart,
+        5: this.setScatterChart,
+        6: this.setStackOrCombinChart,
         7: this.setBarChart,
         7: this.setBarChart,
         10: this.setSectionScatterChart,
         10: this.setSectionScatterChart,
         11: this.setRadarChart
         11: this.setRadarChart
@@ -2520,7 +2663,13 @@ export const chartSetMixin = {
         // 3:
         // 3:
       }
       }
       if(this.chartInfo.Source === 1) {
       if(this.chartInfo.Source === 1) {
-        typeMap[this.chartInfo.ChartType]()
+        if([7,10,11].includes(this.chartInfo.ChartType)){
+            typeMap[this.chartInfo.ChartType]()
+        }else{
+            this.setAddChartDefault&&this.setAddChartDefault();
+            typeMap[this.chartInfo.ChartType](this.tableData)
+        }
+        
       }else {
       }else {
         sourceMap[this.chartInfo.Source]();
         sourceMap[this.chartInfo.Source]();
       }
       }
@@ -2652,5 +2801,144 @@ export const chartSetMixin = {
 				});
 				});
 			}
 			}
 		},
 		},
+    /* ----自定义上下限相关--- */
+        /* 计算y轴上下限 */
+        calcYAxislimit(tableData=[]) {
+            //散点图单独处理
+            if(this.chartInfo.ChartType===5){
+                if(tableData[1]){
+                    this.chartLimit.min = tableData[1].MinData
+                    this.chartLimit.max = tableData[1].MaxData
+                }
+                return 
+            }
+            //分组
+            const leftData = tableData.filter(i => i.IsAxis === 1).map(i => [Number(i.MinData), Number(i.MaxData)])
+            const rightData = tableData.filter(i => !i.IsAxis).map(i => [Number(i.MinData), Number(i.MaxData)])
+            const rightTwoData = tableData.filter(i => i.IsAxis === 2).map(i => [Number(i.MinData), Number(i.MaxData)])
+            //计算最大最小值
+            if (leftData.length) {
+                const {
+                    Max,
+                    Min
+                } = this.calcLimit(leftData.flat())
+                this.chartLimit.min=Min
+                this.chartLimit.max=Max
+            } else {
+                this.leftIndex = -1
+                this.chartLimit.min=0
+                this.chartLimit.max=0
+            }
+            if (rightData.length) {
+                const {
+                    Max,
+                    Min
+                } = this.calcLimit(rightData.flat())
+                this.chartLimit.rightMin = Min
+                this.chartLimit.rightMax = Max
+            } else {
+                this.rightIndex = -1
+                this.chartLimit.rightMin = 0
+                this.chartLimit.rightMax = 0
+            }
+            if (rightTwoData.length) {
+                const {
+                    Max,
+                    Min
+                } = this.calcLimit(rightTwoData.flat())
+                this.chartLimit.rightTwoMin = Min
+                this.chartLimit.rightTwoMax = Max
+            } else {
+                this.rightTwoIndex = -1
+                this.chartLimit.rightTwoMin = 0
+                this.chartLimit.rightTwoMax = 0
+            }
+            console.table([{
+                    'y轴': '左轴',
+                    '最大值': this.chartLimit.max,
+                    '最小值': this.chartLimit.min
+                },
+                {
+                    'y轴': '右轴',
+                    '最大值': this.chartLimit.rightMax,
+                    '最小值': this.chartLimit.rightMin
+                },
+                {
+                    'y轴': '右二轴',
+                    '最大值': this.chartLimit.rightTwoMax,
+                    '最小值': this.chartLimit.rightTwoMin
+                }
+            ])
+        },
+        calcLimit(arr) {
+            return {
+                Max: Math.max(...arr),
+                Min: Math.min(...arr)
+            }
+        },
+        //图表详情-设置图表上下限
+        setLimitData(tableData=[]){
+            const {
+                //左右轴极值字段 
+                LeftMin=0,LeftMax=0,
+                RightMin=0,RightMax=0,
+                Right2Min=0,Right2Max=0,
+                MinMaxSave
+            } = this.chartInfo
+            if(MinMaxSave){
+                this.chartLimit.min = Number(LeftMin)
+                this.chartLimit.max = Number(LeftMax)
+                this.chartLimit.rightMin = Number(RightMin)
+                this.chartLimit.rightMax = Number(RightMax)
+                this.chartLimit.rightTwoMin = Number(Right2Min)
+                this.chartLimit.rightTwoMax = Number(Right2Max)
+                //若用户修改过,则检测轴的上下限是否为空,若为空,则需要计算对应轴的上下限
+                this.checkChartLimit(tableData)
+            }else{
+                this.calcYAxislimit(tableData)
+            }
+        },
+        checkChartLimit(tableData=[]){
+            //散点图单独处理
+            if(this.chartInfo.ChartType===5){
+                if(tableData[1]){
+                    const {min,max} = this.chartLimit
+                    if(Number(min)===0&&Number(max)===0){
+                        this.chartLimit.min = tableData[1].MinData
+                        this.chartLimit.max = tableData[1].MaxData
+                    }
+                }
+                return 
+            }
+            const {
+                min,max,rightMin,rightMax,rightTwoMin,rightTwoMax
+            } = this.chartLimit
+            //若轴的上下限均为0,则不管用户有没有修改过,都重新赋值
+            if(Number(min)===0&&Number(max)===0){
+                const leftData = tableData.filter(i=>i.IsAxis===1).map(i=>[Number(i.MinData),Number(i.MaxData)])
+                if(leftData.length){
+                    const {Max,Min} = this.calcLimit(leftData.flat())
+                    this.chartLimit.min=Min
+                    this.chartLimit.max=Max
+                }
+            }
+            if(Number(rightMin)===0&&Number(rightMax)===0){
+                const rightData = tableData.filter(i => !i.IsAxis).map(i=>[Number(i.MinData),Number(i.MaxData)])
+                if(rightData.length){
+                    const {Max,Min} = this.calcLimit(rightData.flat())
+                    this.chartLimit.rightMin = Min
+                    this.chartLimit.rightMax = Max
+                }
+            }
+            if(Number(rightTwoMin)===0&&Number(rightTwoMax)===0){
+                const rightTwoData = tableData.filter(i=>i.IsAxis===2).map(i=>[Number(i.MinData),Number(i.MaxData)])
+                if(rightTwoData.length){
+                    const {Max,Min} = this.calcLimit(rightTwoData.flat())
+                    this.chartLimit.rightTwoMin = Min
+                    this.chartLimit.rightTwoMax = Max
+                }
+            }
+        },
+    /*-------------------- */
 	}
 	}
 }
 }

+ 14 - 9
src/views/dataEntry_manage/targetList.vue

@@ -50,8 +50,8 @@
 					v-model="date"
 					v-model="date"
 					type="daterange"
 					type="daterange"
 					:range-separator="$t('Common.to')"
 					:range-separator="$t('Common.to')"
-					:start-placeholder="$t('Edb.InputHolderAll.ph_start_time')"
+					:start-placeholder="$t('ManualEdbListPage.ph_start_time')"
-					:end-placeholder="$t('Edb.InputHolderAll.ph_end_time')"
+					:end-placeholder="$t('ManualEdbListPage.ph_end_time')"
 					@change="dateChange"
 					@change="dateChange"
 					value-format="yyyy-MM-dd">
 					value-format="yyyy-MM-dd">
 				</el-date-picker>
 				</el-date-picker>
@@ -194,31 +194,31 @@ export default {
 			frequencyList:[
 			frequencyList:[
 				{
 				{
 					value: '日度',
 					value: '日度',
-					label: '日度',
+					label: /* '日度'  */this.$t('Edb.FreAll.day'),
 				},
 				},
 				{
 				{
 					value: '周度',
 					value: '周度',
-					label: '周度',
+					label: /* '周度' */this.$t('Edb.FreAll.week'),
 				},
 				},
 				{
 				{
 					value: '旬度',
 					value: '旬度',
-					label: '旬度',
+					label: /* '旬度' */this.$t('Edb.FreAll.dekad'),
 				},
 				},
 				{
 				{
 					value: '月度',
 					value: '月度',
-					label: '月度',
+					label: /* '月度' */this.$t('Edb.FreAll.month'),
 				},
 				},
 				{
 				{
 					value: '季度',
 					value: '季度',
-					label: '季度',
+					label: /* '季度' */ this.$t('Edb.FreAll.quarter'),
 				},
 				},
 				{
 				{
 					value: '半年度',
 					value: '半年度',
-					label: '半年度',
+					label: /* '半年度' */ this.$t('Edb.FreAll.month'),
 				},
 				},
 				{
 				{
 					value: '年度',
 					value: '年度',
-					label: '年度',
+					label: /* '年度' */ this.$t('Edb.FreAll.year'),
 				}
 				}
 			],//频度列表
 			],//频度列表
 			tableData: [],
 			tableData: [],
@@ -562,6 +562,10 @@ export default {
 			dataInterence.checkTarget({
 			dataInterence.checkTarget({
 				TradeCode:item.TradeCode
 				TradeCode:item.TradeCode
 			}).then(res => {
 			}).then(res => {
+				if(res.Data.Status===1){
+					this.$message.error("该指标已加入ETA指标库,不可删除")
+					return
+				}else{
 					this.$confirm(
 					this.$confirm(
 						res.Data.Status===0 ? this.$t('ManualEdbListPage.del_edb_msg') : this.$t('ManualEdbListPage.del_edb_rela_msg'),
 						res.Data.Status===0 ? this.$t('ManualEdbListPage.del_edb_msg') : this.$t('ManualEdbListPage.del_edb_rela_msg'),
 						this.$t('Dialog.warn_tit'),{
 						this.$t('Dialog.warn_tit'),{
@@ -575,6 +579,7 @@ export default {
 								this.getTableData();
 								this.getTableData();
 							});
 							});
 					}).catch(() => {});
 					}).catch(() => {});
+				}
 			})
 			})
 		}
 		}
 	},
 	},

+ 7 - 5
src/views/dataEntry_manage/thirdBase/BAIINFOTargetbase.vue

@@ -907,7 +907,7 @@ export default {
       if (type === "classify") {
       if (type === "classify") {
         //检查classify_name
         //检查classify_name
         if (!classify_name.length) {
         if (!classify_name.length) {
-          this.$message.warning("请输入分类名称");
+          this.$message.warning(/* "请输入分类名称" */ this.$t('Edb.InputHolderAll.input_common',{label: this.$t('SteelChemicalPage.label_classify_name')}));
           return;
           return;
         }
         }
         //添加分类
         //添加分类
@@ -941,7 +941,8 @@ export default {
         });
         });
       }
       }
       if (res.Ret !== 200) return;
       if (res.Ret !== 200) return;
-      this.$message.success(`${optionType}成功`);
+      // this.$message.success(`${optionType}成功`);
+      this.$message.success(`${title.includes("添加")?this.$t('MsgPrompt.add_msg2'):this.$t('MsgPrompt.edit_msg')}`);
       this.getClassify();
       this.getClassify();
       this.cancelDialogHandle();
       this.cancelDialogHandle();
       //判断是分类还是指标,请求对应详情
       //判断是分类还是指标,请求对应详情
@@ -1222,9 +1223,9 @@ export default {
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     border-radius: 4px;
     border-radius: 4px;
   }
   }
-  div::-webkit-scrollbar {
+/*   div::-webkit-scrollbar {
     width: 5px !important;
     width: 5px !important;
-  }
+  } */
   .left-cont {
   .left-cont {
     min-width: 300px;
     min-width: 300px;
     width: 300px;
     width: 300px;
@@ -1236,9 +1237,10 @@ export default {
       padding: 0 20px;
       padding: 0 20px;
     }
     }
     .scroll-wrap {
     .scroll-wrap {
-      padding: 0 10px;
+      padding: 0 20px;
       height: calc(100vh - 280px);
       height: calc(100vh - 280px);
       overflow-y: auto;
       overflow-y: auto;
+      margin-right: 20px;
       .target_tree {
       .target_tree {
         color: #333;
         color: #333;
         .label-input .el-input__inner {
         .label-input .el-input__inner {

+ 6 - 4
src/views/dataEntry_manage/thirdBase/FwmtData.vue

@@ -50,7 +50,7 @@
       <div class="scroll-wrap">
       <div class="scroll-wrap">
         <el-tree
         <el-tree
           ref="treeRef"
           ref="treeRef"
-          class="target_tree"
+          class="target_tree word-wrap"
           :data="classifyList"
           :data="classifyList"
           node-key="ClassifyId"
           node-key="ClassifyId"
           :props="{
           :props="{
@@ -389,6 +389,7 @@ export default {
 </script>
 </script>
 <style lang="scss">
 <style lang="scss">
 @import "../css/customtree.scss";
 @import "../css/customtree.scss";
+@import "../css/baseTargetPage.scss";
 .smmTarget-dialog-cont {
 .smmTarget-dialog-cont {
   .el-cascader {
   .el-cascader {
     .el-input {
     .el-input {
@@ -409,9 +410,9 @@ export default {
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     border-radius: 4px;
     border-radius: 4px;
   }
   }
-  div::-webkit-scrollbar {
+/*   div::-webkit-scrollbar {
     width: 5px !important;
     width: 5px !important;
-  }
+  } */
   .left-cont {
   .left-cont {
     min-width: 300px;
     min-width: 300px;
     width: 300px;
     width: 300px;
@@ -423,9 +424,10 @@ export default {
       padding: 0 20px;
       padding: 0 20px;
     }
     }
     .scroll-wrap {
     .scroll-wrap {
-      padding: 0 10px;
+      padding: 0 20px;
       height: calc(100vh - 280px);
       height: calc(100vh - 280px);
       overflow-y: auto;
       overflow-y: auto;
+      margin-right: 20px;
       .target_tree {
       .target_tree {
         color: #333;
         color: #333;
         .label-input .el-input__inner {
         .label-input .el-input__inner {

+ 7 - 5
src/views/dataEntry_manage/thirdBase/SCITargetbase.vue

@@ -813,7 +813,7 @@ export default {
       if (type === "classify") {
       if (type === "classify") {
         //检查classify_name
         //检查classify_name
         if (!classify_name.length) {
         if (!classify_name.length) {
-          this.$message.warning("请输入分类名称");
+          this.$message.warning(/* "请输入分类名称" */ this.$t('Edb.InputHolderAll.input_common',{label: this.$t('SteelChemicalPage.label_classify_name')}));
           return;
           return;
         }
         }
         //添加分类
         //添加分类
@@ -845,7 +845,8 @@ export default {
       }
       }
 
 
       if (res.Ret !== 200) return;
       if (res.Ret !== 200) return;
-      this.$message.success(`${optionType}成功`);
+      // this.$message.success(`${optionType}成功`);
+      this.$message.success(`${title.includes("添加")?this.$t('MsgPrompt.add_msg2'):this.$t('MsgPrompt.edit_msg')}`);
       this.getClassify();
       this.getClassify();
       this.cancelDialogHandle();
       this.cancelDialogHandle();
     },
     },
@@ -1110,9 +1111,9 @@ export default {
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     border-radius: 4px;
     border-radius: 4px;
   }
   }
-  div::-webkit-scrollbar {
+  /* div::-webkit-scrollbar {
     width: 5px !important;
     width: 5px !important;
-  }
+  } */
   .left-cont {
   .left-cont {
     min-width: 300px;
     min-width: 300px;
     width: 300px;
     width: 300px;
@@ -1124,9 +1125,10 @@ export default {
       padding: 0 20px;
       padding: 0 20px;
     }
     }
     .scroll-wrap {
     .scroll-wrap {
-      padding: 0 10px;
+      padding: 0 20px;
       height: calc(100vh - 280px);
       height: calc(100vh - 280px);
       overflow-y: auto;
       overflow-y: auto;
+      margin-right:20px;
       .target_tree {
       .target_tree {
         color: #333;
         color: #333;
         .label-input .el-input__inner {
         .label-input .el-input__inner {

+ 10 - 4
src/views/dataEntry_manage/thirdBase/YyzxData.vue

@@ -51,7 +51,7 @@
       <div class="scroll-wrap">
       <div class="scroll-wrap">
         <el-tree
         <el-tree
           ref="treeRef"
           ref="treeRef"
-          class="target_tree"
+          class="target_tree word-wrap"
           :data="classifyList"
           :data="classifyList"
           node-key="ClassifyId"
           node-key="ClassifyId"
           :props="{
           :props="{
@@ -375,6 +375,11 @@ export default {
   
   
     //改变选中节点
     //改变选中节点
     nodeChangeHandle(data, node) {
     nodeChangeHandle(data, node) {
+      //目录不显示数据
+      if(data.Level===1&&data.Children){
+        this.rightShow = false
+        return
+      }
       if (data.ClassifyId === this.select_classify) return;
       if (data.ClassifyId === this.select_classify) return;
       this.select_classify = data.ClassifyId;
       this.select_classify = data.ClassifyId;
       this.leftSearchVal=''
       this.leftSearchVal=''
@@ -433,9 +438,9 @@ export default {
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     border-radius: 4px;
     border-radius: 4px;
   }
   }
-  div::-webkit-scrollbar {
+  /* div::-webkit-scrollbar {
     width: 5px !important;
     width: 5px !important;
-  }
+  } */
   .left-cont {
   .left-cont {
     min-width: 300px;
     min-width: 300px;
     width: 300px;
     width: 300px;
@@ -447,9 +452,10 @@ export default {
       padding: 0 20px;
       padding: 0 20px;
     }
     }
     .scroll-wrap {
     .scroll-wrap {
-      padding: 0 10px;
+      padding: 0 20px;
       height: calc(100vh - 280px);
       height: calc(100vh - 280px);
       overflow-y: auto;
       overflow-y: auto;
+      margin-right: 20px;
       .target_tree {
       .target_tree {
         color: #333;
         color: #333;
         .label-input .el-input__inner {
         .label-input .el-input__inner {

+ 1 - 1
src/views/dataEntry_manage/thirdBase/components/batchAddEdbDia.vue

@@ -186,7 +186,7 @@ import { steelInterface } from "@/api/modules/thirdBaseApi";
         this.$refs.edbFormDataListRef.validate(valid=>{
         this.$refs.edbFormDataListRef.validate(valid=>{
           if(valid){
           if(valid){
             if(this.edbForm.edbDataList.length>=100){
             if(this.edbForm.edbDataList.length>=100){
-              this.$message.warning('添加数量已达上限(上限100)!')
+              this.$message.warning(/* '添加数量已达上限(上限100)!' */this.$t('SteelChemicalPage.add_max_msg'))
               return 
               return 
             }
             }
             let lastItem = this.edbForm.edbDataList[this.edbForm.edbDataList.length-1]
             let lastItem = this.edbForm.edbDataList[this.edbForm.edbDataList.length-1]

+ 3 - 2
src/views/dataEntry_manage/thirdBase/elaSteoBase.vue

@@ -322,9 +322,9 @@ export default {
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     border-radius: 4px;
     border-radius: 4px;
   }
   }
-  div::-webkit-scrollbar {
+  /* div::-webkit-scrollbar {
     width: 5px !important;
     width: 5px !important;
-  }
+  } */
   .left-cont {
   .left-cont {
     min-width: 240px;
     min-width: 240px;
     width:240px;
     width:240px;
@@ -339,6 +339,7 @@ export default {
       /* margin-top: 20px; */
       /* margin-top: 20px; */
       height: calc(100vh - 280px);
       height: calc(100vh - 280px);
       overflow-y: auto;
       overflow-y: auto;
+      margin-right: 20px;
       .classify-item {
       .classify-item {
         font-size: 14px;
         font-size: 14px;
         color: #666;
         color: #666;

+ 1 - 0
src/views/dataEntry_manage/thirdBase/glTargetbase.vue

@@ -482,6 +482,7 @@ export default {
       /* margin-top: 20px; */
       /* margin-top: 20px; */
       height: calc(100vh - 280px);
       height: calc(100vh - 280px);
       overflow-y: auto;
       overflow-y: auto;
+      margin-right: 20px;
       .classify-item {
       .classify-item {
         font-size: 14px;
         font-size: 14px;
         color: #666;
         color: #666;

+ 1 - 0
src/views/dataEntry_manage/thirdBase/lzTargetbase.vue

@@ -415,6 +415,7 @@ export default {
       margin-top: 20px;
       margin-top: 20px;
       height: calc(100vh - 280px);
       height: calc(100vh - 280px);
       overflow-y: auto;
       overflow-y: auto;
+      margin-right: 20px;
       .classify-item {
       .classify-item {
         font-size: 14px;
         font-size: 14px;
         color: #666;
         color: #666;

+ 12 - 10
src/views/dataEntry_manage/thirdBase/smmTargetbase.vue

@@ -231,7 +231,7 @@
             <el-input
             <el-input
               v-model="classifyForm.classify_name"
               v-model="classifyForm.classify_name"
               style="width: 80%"
               style="width: 80%"
-              placeholder="请输入分类名称"
+              :placeholder="$t('Edb.InputHolderAll.input_common',{label: $t('SteelChemicalPage.label_classify_name')})"
             />
             />
           </el-form-item>
           </el-form-item>
           <el-form-item :label="$t('SteelChemicalPage.label_classify_name')" prop="classifys_id" v-else>
           <el-form-item :label="$t('SteelChemicalPage.label_classify_name')" prop="classifys_id" v-else>
@@ -315,7 +315,7 @@ export default {
       }, //弹窗可编辑信息
       }, //弹窗可编辑信息
       classifyFormRules: {
       classifyFormRules: {
         classify_name: [
         classify_name: [
-          { required: true, message: "分类名称不能为空", trigger: "blur" },
+          { required: true, message: /* "分类名称不能为空"  */this.$t('Edb.InputHolderAll.input_common',{label: this.$t('SteelChemicalPage.label_classify_name')}), trigger: "blur" },
         ],
         ],
       }, //可编辑信息校验
       }, //可编辑信息校验
     };
     };
@@ -798,8 +798,8 @@ export default {
       //如果分类下有子分类或指标
       //如果分类下有子分类或指标
       let hintText =
       let hintText =
         Children && Children.length
         Children && Children.length
-          ? this.$t('SteelChemicalPage.del_classify_msg')
+          ? this.$t('SteelChemicalPage.del_classify_only_msg')
-          : "删除分类不可恢复,确定删除吗?";
+          : this.$t('SteelChemicalPage.del_classify_msg');
       this.$confirm(hintText,this.$t('Dialog.warn_tit'), {
       this.$confirm(hintText,this.$t('Dialog.warn_tit'), {
         type: "warning",
         type: "warning",
       })
       })
@@ -826,7 +826,7 @@ export default {
         })
         })
         .then((res) => {
         .then((res) => {
           if (res.Ret !== 200) return;
           if (res.Ret !== 200) return;
-          this.$message.success("清除分类成功");
+          this.$message.success(/* "清除分类成功" */this.$t('MsgPrompt.clean_classify_msg'));
           this.getClassify();
           this.getClassify();
         });
         });
     },
     },
@@ -879,7 +879,7 @@ export default {
       if (type === "classify") {
       if (type === "classify") {
         //检查classify_name
         //检查classify_name
         if (!classify_name.length) {
         if (!classify_name.length) {
-          this.$message.warning("请输入分类名称");
+          this.$message.warning(/* "请输入分类名称" */this.$t('Edb.InputHolderAll.input_common',{label: this.$t('SteelChemicalPage.label_classify_name')}));
           return;
           return;
         }
         }
         //添加分类
         //添加分类
@@ -911,7 +911,8 @@ export default {
       }
       }
 
 
       if (res.Ret !== 200) return;
       if (res.Ret !== 200) return;
-      this.$message.success(`${optionType}成功`);
+      // this.$message.success(`${optionType}成功`);
+      this.$message.success(`${title.includes("添加")?this.$t('MsgPrompt.add_msg2'):this.$t('MsgPrompt.edit_msg')}`);
       this.getClassify();
       this.getClassify();
       this.cancelDialogHandle();
       this.cancelDialogHandle();
     },
     },
@@ -1178,9 +1179,9 @@ export default {
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     border-radius: 4px;
     border-radius: 4px;
   }
   }
-  div::-webkit-scrollbar {
+  /* div::-webkit-scrollbar {
     width: 5px !important;
     width: 5px !important;
-  }
+  } */
   .left-cont {
   .left-cont {
     min-width: 300px;
     min-width: 300px;
     width: 300px;
     width: 300px;
@@ -1192,9 +1193,10 @@ export default {
       padding: 0 20px;
       padding: 0 20px;
     }
     }
     .scroll-wrap {
     .scroll-wrap {
-      padding: 0 10px;
+      padding: 0 20px;
       height: calc(100vh - 280px);
       height: calc(100vh - 280px);
       overflow-y: auto;
       overflow-y: auto;
+      margin-right: 20px;
       .target_tree {
       .target_tree {
         color: #333;
         color: #333;
         .label-input .el-input__inner {
         .label-input .el-input__inner {

+ 7 - 6
src/views/dataEntry_manage/thirdBase/steelChemicalbase.vue

@@ -302,7 +302,7 @@ export default {
       },
       },
       classifyFormRules: {
       classifyFormRules: {
         classify_name: [
         classify_name: [
-          { required: true, message: "分类名称不能为空", trigger: "blur" },
+          { required: true, message: /* "分类名称不能为空"  */this.$t('Edb.InputHolderAll.input_common',{label: this.$t('SteelChemicalPage.label_classify_name')}), trigger: "blur" },
         ],
         ],
       },
       },
 
 
@@ -749,12 +749,12 @@ export default {
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     border-radius: 4px;
     border-radius: 4px;
   }
   }
-  div::-webkit-scrollbar {
+  /* div::-webkit-scrollbar {
     width: 5px !important;
     width: 5px !important;
-  }
+  } */
   .left-cont {
   .left-cont {
-    min-width: 300px;
+    min-width: 330px;
-    width: 300px;
+    width: 330px;
     flex-shrink: 0;
     flex-shrink: 0;
     margin-right: 20px;
     margin-right: 20px;
     padding: 30px 0;
     padding: 30px 0;
@@ -764,9 +764,10 @@ export default {
       padding: 0 20px;
       padding: 0 20px;
     }
     }
     .scroll-wrap {
     .scroll-wrap {
-      padding: 0 10px;
+      padding: 0 20px;
       height: calc(100vh - 280px);
       height: calc(100vh - 280px);
       overflow-y: auto;
       overflow-y: auto;
+      margin-right: 20px;
     }
     }
     .target_tree {
     .target_tree {
       color: #333;
       color: #333;

+ 26 - 2
src/views/datasheet_manage/common/option.js

@@ -9,6 +9,7 @@ import * as sheetInterface from '@/api/modules/sheetApi.js';
 import { Message } from 'element-ui';
 import { Message } from 'element-ui';
 
 
 export function initSheet(container,options={},sheetInfo={},limit,callbackItems) {
 export function initSheet(container,options={},sheetInfo={},limit,callbackItems) {
+  console.log(limit);
   const configOpt = {
   const configOpt = {
     container,
     container,
     lang: localStorage.getItem('i18n') == 'en' ? 'en' : 'zh', // 设定表格语言
     lang: localStorage.getItem('i18n') == 'en' ? 'en' : 'zh', // 设定表格语言
@@ -50,9 +51,32 @@ export function initSheet(container,options={},sheetInfo={},limit,callbackItems)
       //   console.log(range,data,'range,data','rangeCopyAfter');
       //   console.log(range,data,'range,data','rangeCopyAfter');
       // },
       // },
       updated: (a,b,c,d,e)=> {
       updated: (a,b,c,d,e)=> {
+        /**
+         * lucksheet 本身没有完美的禁止用户编辑的功能,只能自己控制了,用户操作后撤销,用户撤销后重做
+         * stopUndo -- 阻止撤销 由于撤销会触发updated,又再进行撤销,直接撤销到最初状态了,我们只需要撤销一次
+         * withdrawUndo -- 撤销用户撤销的操作 即重做
+         */
         if(limit.disabled){
         if(limit.disabled){
-          Message.warning("当前不可编辑")
+          if((!luckysheet.stopUndo)){
-          luckysheet.undo()
+            setTimeout(()=>{
+              Message.warning("当前不可编辑")
+              if(luckysheet.withdrawUndo) {
+                // 重做用户撤销的操作,我们自己的重做操作,不能再撤销
+                luckysheet.stopUndo=false
+                luckysheet.withdrawUndo=false
+                return
+              }
+              let result=luckysheet.undo()
+              luckysheet.stopUndo=false
+              if(Object.keys(result).length==0){
+                requestAnimationFrame(()=>{
+                  luckysheet.redo()
+                  luckysheet.withdrawUndo=true
+                })
+              }
+            },0)
+            luckysheet.stopUndo=true
+          }
           return 
           return 
         }
         }
         // console.log(callbackItems);
         // console.log(callbackItems);

+ 1 - 0
src/views/datasheet_manage/customAnalysis/list.vue

@@ -956,6 +956,7 @@ $normal-font: 14px;
         padding: 30px 20px;
         padding: 30px 20px;
         max-height: calc(100vh - 280px);
         max-height: calc(100vh - 280px);
         overflow: auto;
         overflow: auto;
+        margin-right:20px;
       }
       }
       .target_tree {
       .target_tree {
         color: #333;
         color: #333;

+ 9 - 4
src/views/datasheet_manage/sheetList.vue

@@ -779,9 +779,13 @@ export default {
         return 
         return 
       }
       }
       this.$message.success(this.$t('MsgPrompt.saved_msg') );
       this.$message.success(this.$t('MsgPrompt.saved_msg') );
-      this.markFinishStatus()
+      // this.markFinishStatus()
+
+      if(this.autoSaveType == "nameEdit"){
+        this.getTreeData();
+        this.autoSaveType=''
+      }
 
 
-      this.getTreeData();
       this.getDetailHandle();
       this.getDetailHandle();
     }, 300),
     }, 300),
     autoSaveFun:_.debounce(async function(){
     autoSaveFun:_.debounce(async function(){
@@ -790,7 +794,7 @@ export default {
         this.cancelAutoSave=false
         this.cancelAutoSave=false
         return
         return
       }
       }
-      luckysheet.exitEditMode();
+      // luckysheet.exitEditMode();
       //结构类型乱飘 强制定义下
       //结构类型乱飘 强制定义下
       let data = {...luckysheet.getAllSheets()[0],status:Number(luckysheet.getAllSheets()[0].status)}
       let data = {...luckysheet.getAllSheets()[0],status:Number(luckysheet.getAllSheets()[0].status)}
       if (!data.celldata.length) return this.$message.warning(this.$t('OnlineExcelPage.input_content_msg') );
       if (!data.celldata.length) return this.$message.warning(this.$t('OnlineExcelPage.input_content_msg') );
@@ -983,7 +987,7 @@ export default {
       if(!this.onlineExcelEditing) return
       if(!this.onlineExcelEditing) return
       this.editNodeLabel(sheetDetailInfo, type)
       this.editNodeLabel(sheetDetailInfo, type)
     },
     },
-    // 标记 编辑完成
+    // 标记 编辑完成 退出编辑状态
     markFinishStatus(select_id){
     markFinishStatus(select_id){
       let id = select_id || this.select_id
       let id = select_id || this.select_id
       if((!this.onlineExcelEditing) || (!id) || id=='0'){
       if((!this.onlineExcelEditing) || (!id) || id=='0'){
@@ -1115,6 +1119,7 @@ $normal-font: 14px;
         padding: 30px 20px;
         padding: 30px 20px;
         max-height: calc(100vh - 280px);
         max-height: calc(100vh - 280px);
         overflow: auto;
         overflow: auto;
+        margin-right: 20px;
       }
       }
       .target_tree {
       .target_tree {
         color: #333;
         color: #333;

+ 16 - 13
src/views/login_manage/EmailModel.vue

@@ -11,7 +11,7 @@
                     type="text"
                     type="text"
                     v-model="form.email"
                     v-model="form.email"
                     auto-complete="off"
                     auto-complete="off"
-                    placeholder="请输入邮箱"
+                    :placeholder="$t('LoginPage.ph_email')"
                 >
                 >
                 </el-input>
                 </el-input>
                 <span class="inline-message el-form-item__error" 
                 <span class="inline-message el-form-item__error" 
@@ -25,7 +25,7 @@
                     type="text"
                     type="text"
                     v-model="form.picCode"
                     v-model="form.picCode"
                     auto-complete="off"
                     auto-complete="off"
-                    placeholder="请输入图形验证码"
+                    :placeholder="$t('LoginPage.ph_img_code')"
                 >
                 >
                     <div class="pic-box" slot="append" @click="getCodePic">
                     <div class="pic-box" slot="append" @click="getCodePic">
                         <img :src="picSrc" alt="图形验证码"/>
                         <img :src="picSrc" alt="图形验证码"/>
@@ -37,7 +37,7 @@
                     type="text"
                     type="text"
                     v-model="form.checkCode"
                     v-model="form.checkCode"
                     auto-complete="off"
                     auto-complete="off"
-                    placeholder="请输入验证码"
+                    :placeholder="$t('LoginPage.ph_msg_code')"
                 ></el-input>
                 ></el-input>
                 <el-button type="text" class="code-btn" @click="checkForm" :disabled="codeCountDown<60&&codeCountDown>0">{{codeStr}}</el-button>
                 <el-button type="text" class="code-btn" @click="checkForm" :disabled="codeCountDown<60&&codeCountDown>0">{{codeStr}}</el-button>
             </el-form-item>
             </el-form-item>
@@ -71,7 +71,7 @@ export default {
             picSrc:'',
             picSrc:'',
             picId:'',
             picId:'',
             timer:0,
             timer:0,
-            codeStr:'获取验证码',
+            codeStr:/* '获取验证码'  */this.$t('LoginPage.ver_code_msg'),
             codeCountDown:60,
             codeCountDown:60,
             isGetNewCode:false,
             isGetNewCode:false,
             form:{
             form:{
@@ -81,17 +81,17 @@ export default {
             },
             },
             rules:{
             rules:{
                 email:[
                 email:[
-                    {required:true,message:'请输入邮箱',trigger:'blur'},
+                    {required:true,message:/* '请输入邮箱' */this.$t('LoginPage.ph_email'),trigger:'blur'},
                     {validator:(rule,value,callback)=>{
                     {validator:(rule,value,callback)=>{
                         if(!patternEmail.test(value)){
                         if(!patternEmail.test(value)){
-                            callback(new Error("请输入正确的邮箱格式"))
+                            callback(new Error(/* "请输入正确的邮箱格式" */this.$t('LoginPage.vaild_curr_email')))
                         }else{
                         }else{
                             callback()
                             callback()
                         }
                         }
                     },trigger:'blur'}
                     },trigger:'blur'}
                 ],
                 ],
-                picCode:[{required:true,message:'请输入图形验证码',trigger:'blur'}],
+                picCode:[{required:true,message:/* '请输入图形验证码' */this.$t('LoginPage.ph_img_code'),trigger:'blur'}],
-                checkCode:[{required:true,message:'请输入短信验证码',trigger:'blur'}]
+                checkCode:[{required:true,message:/* '请输入短信验证码' */this.$t('LoginPage.ph_msg_code'),trigger:'blur'}]
             },
             },
             hintMessage:''
             hintMessage:''
         };
         };
@@ -99,9 +99,9 @@ export default {
     methods: {
     methods: {
         checkForm(){
         checkForm(){
             //首先检查是否是重新获取验证码
             //首先检查是否是重新获取验证码
-            if(this.codeStr==='重新获取'&&!this.isGetNewCode){
+            if(this.codeStr===this.$t('LoginPage.recode_msg')&&!this.isGetNewCode){
                 //引导用户重新输入图形验证码
                 //引导用户重新输入图形验证码
-                this.$message.warning('重新获取需再次输入图形验证码')
+                this.$message.warning(/* '重新获取需再次输入图形验证码' */this.$t('LoginPage.recode_warn_msg'))
                 this.getCodePic()
                 this.getCodePic()
                 this.form.picCode = ''
                 this.form.picCode = ''
                 this.isGetNewCode = true
                 this.isGetNewCode = true
@@ -110,11 +110,11 @@ export default {
             //检查邮箱和图形验证码是否正确
             //检查邮箱和图形验证码是否正确
             const {email,picCode} = this.form
             const {email,picCode} = this.form
             if(!picCode.length){
             if(!picCode.length){
-                this.$message.warning('请输入图形验证码')
+                this.$message.warning(/* '请输入图形验证码' */this.$t('LoginPage.ph_img_code'))
                 return
                 return
             }
             }
             if(!patternEmail.test(email)){
             if(!patternEmail.test(email)){
-                this.$message.warning('请输入正确的邮箱')
+                this.$message.warning(/* '请输入正确的邮箱' */this.$t('LoginPage.vaild_curr_email'))
                 return
                 return
             }
             }
             //通过请求发送验证码
             //通过请求发送验证码
@@ -126,7 +126,7 @@ export default {
                 Source:this.Source
                 Source:this.Source
             }).then(res=>{
             }).then(res=>{
                 if(res.Ret!==200) return 
                 if(res.Ret!==200) return 
-                this.$message.success('验证码已发送')
+                this.$message.success(/* '验证码已发送' */this.$t('LoginPage.send_code_msg'))
                 this.isGetNewCode = false
                 this.isGetNewCode = false
                 //60秒倒计时
                 //60秒倒计时
                 this.codeCountDown = 60
                 this.codeCountDown = 60
@@ -137,6 +137,9 @@ export default {
             })
             })
         }
         }
     },
     },
+    mounted() {
+        this.getCodePic()
+    }
 };
 };
 </script>
 </script>
 
 

+ 18 - 18
src/views/login_manage/ForgetPassModel.vue

@@ -2,7 +2,7 @@
     <div class="forget-pass-model">
     <div class="forget-pass-model">
         <div class="header-nav" @click="changeModel">
         <div class="header-nav" @click="changeModel">
             <span><i class="el-icon-back"></i></span>
             <span><i class="el-icon-back"></i></span>
-            <span>忘记密码</span>
+            <span><!-- 忘记密码 -->{{ $t('LoginPage.label_forget') }}</span>
         </div>
         </div>
         <div class="step-container model-wrap" v-show="currentStep===0">
         <div class="step-container model-wrap" v-show="currentStep===0">
             <el-form 
             <el-form 
@@ -16,7 +16,7 @@
                         type="text"
                         type="text"
                         v-model="form.account"
                         v-model="form.account"
                         auto-complete="off"
                         auto-complete="off"
-                        placeholder="请输入账号">
+                        :placeholder="$t('LoginPage.ph_account')">
                     </el-input>
                     </el-input>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item prop="picCode">
                 <el-form-item prop="picCode">
@@ -25,7 +25,7 @@
                         type="text"
                         type="text"
                         v-model="form.picCode"
                         v-model="form.picCode"
                         auto-complete="off"
                         auto-complete="off"
-                        placeholder="请输入图形验证码"
+                        :placeholder="$t('LoginPage.ph_img_code')"
                     >
                     >
                         <div class="pic-box" slot="append" @click="getCodePic">
                         <div class="pic-box" slot="append" @click="getCodePic">
                             <img :src="picSrc" alt="图形验证码"/>
                             <img :src="picSrc" alt="图形验证码"/>
@@ -33,23 +33,23 @@
                     </el-input>
                     </el-input>
                 </el-form-item>
                 </el-form-item>
             </el-form>
             </el-form>
-            <el-button class="submit_btn" @click="getUserInfo">下一步</el-button>
+            <el-button class="submit_btn" @click="getUserInfo"><!-- 下一步 -->{{ $t('Dialog.next_step') }}</el-button>
         </div>
         </div>
         <div class="step-container" v-show="currentStep>0">
         <div class="step-container" v-show="currentStep>0">
             <div class="container-header">
             <div class="container-header">
-                <p>您正在找回账号{{form.account}}的密码</p>
+                <p> {{ $t('LoginPage.label_find_pwd',{name: form.account}) }}</p>
                 <ModelSteps :active-step="currentStep"/>
                 <ModelSteps :active-step="currentStep"/>
             </div>
             </div>
             <div class="container-inner model-wrap" v-show="currentStep===1">
             <div class="container-inner model-wrap" v-show="currentStep===1">
                 <VerificationBox
                 <VerificationBox
                     verifies-type="mobile"
                     verifies-type="mobile"
-                    :info-text="userMobile||'暂未绑定'"
+                    :info-text="userMobile||$t('LoginPage.label_not_bind')"
                     :hideBtn="!userMobile"
                     :hideBtn="!userMobile"
                     @goNext="getCode"
                     @goNext="getCode"
                 />
                 />
                 <VerificationBox
                 <VerificationBox
                     verifies-type="email"
                     verifies-type="email"
-                    :info-text="userEmail||'暂未绑定'"
+                    :info-text="userEmail||$t('LoginPage.label_not_bind')"
                     :hideBtn="!userEmail"
                     :hideBtn="!userEmail"
                     @goNext="getCode"
                     @goNext="getCode"
                 />
                 />
@@ -59,8 +59,8 @@
                     ref="captInput"
                     ref="captInput"
                 />
                 />
                 <div class="btn-wrap">
                 <div class="btn-wrap">
-                    <el-button type="primary" plain @click="changeModel">上一步</el-button>
+                    <el-button type="primary" plain @click="changeModel"><!-- 上一步 -->{{ $t('Dialog.prev_step') }}</el-button>
-                    <el-button type="primary" @click="checkInput">下一步</el-button>
+                    <el-button type="primary" @click="checkInput"><!-- 下一步 -->{{ $t('Dialog.next_step') }}</el-button>
                 </div>
                 </div>
                 
                 
             </div>
             </div>
@@ -79,7 +79,7 @@
                             @copy.native.capture.prevent="()=>{return false}"
                             @copy.native.capture.prevent="()=>{return false}"
                             @cut.native.capture.prevent="()=>{return false}"
                             @cut.native.capture.prevent="()=>{return false}"
                             @paste.native.capture.prevent="()=>{return false}"
                             @paste.native.capture.prevent="()=>{return false}"
-                            placeholder="请输入新密码">
+                            :placeholder="$t('LoginPage.ph_new_pwd')">
                         </el-input>
                         </el-input>
                     </el-form-item>
                     </el-form-item>
                     <el-form-item prop="pass2">
                     <el-form-item prop="pass2">
@@ -90,7 +90,7 @@
                             @copy.native.capture.prevent="()=>{return false}"
                             @copy.native.capture.prevent="()=>{return false}"
                             @cut.native.capture.prevent="()=>{return false}"
                             @cut.native.capture.prevent="()=>{return false}"
                             @paste.native.capture.prevent="()=>{return false}"
                             @paste.native.capture.prevent="()=>{return false}"
-                            placeholder="请确认新密码">
+                            :placeholder="$t('ResetPwdPage.vaild_new')">
                         </el-input>
                         </el-input>
                     </el-form-item>
                     </el-form-item>
                 </el-form>
                 </el-form>
@@ -120,22 +120,22 @@ export default {
     data() {
     data() {
         const validatePass = (rule,value,callback)=>{
         const validatePass = (rule,value,callback)=>{
             if(value===''){
             if(value===''){
-                callback(new Error('请输入新密码'))
+                callback(new Error(/* '请输入新密码' */this.$t('LoginPage.ph_new_pwd')))
             }
             }
             if(this.passForm.pass2!==''){
             if(this.passForm.pass2!==''){
                 this.$refs.passForm.validateField('pass2')
                 this.$refs.passForm.validateField('pass2')
             }
             }
             if(!checkPassWord(value)){
             if(!checkPassWord(value)){
-                callback(new Error('密码要求8位及以上,包含数字、大写字母、小写字母、特殊字符中的三个类型'))
+                callback(new Error(/* '密码要求8位及以上,包含数字、大写字母、小写字母、特殊字符中的三个类型' */this.$t('ResetPwdPage.vaild_rule')))
             }else{
             }else{
                 callback()
                 callback()
             }
             }
         }
         }
         const validateCheck = (rule,value,callback)=>{
         const validateCheck = (rule,value,callback)=>{
             if(value===''){
             if(value===''){
-                callback(new Error('请输入确认密码'))
+                callback(new Error(/* '请输入确认密码' */this.$t('ResetPwdPage.vaild_new')))
             }else if(value!==this.passForm.pass1){
             }else if(value!==this.passForm.pass1){
-                callback(new Error('两次输入的密码不一致,请检查'))
+                callback(new Error(/* '两次输入的密码不一致,请检查' */this.$t('ResetPwdPage.vaild_same')))
             }else{
             }else{
                 callback()
                 callback()
             }
             }
@@ -182,11 +182,11 @@ export default {
             //检查form是否填写完整
             //检查form是否填写完整
             const {account,picCode} = this.form
             const {account,picCode} = this.form
             if(!account){
             if(!account){
-                this.$message.warning('请输入账号')
+                this.$message.warning(/* '请输入账号' */this.$t('LoginPage.ph_account'))
                 return
                 return
             }
             }
             if(!picCode){
             if(!picCode){
-                this.$message.warning('请输入图形验证码')
+                this.$message.warning(/* '请输入图形验证码' */this.$t('LoginPage.ph_img_code'))
                 return
                 return
             }
             }
             //请求接口获取账号数据,赋值userMobile,userEmail
             //请求接口获取账号数据,赋值userMobile,userEmail
@@ -280,7 +280,7 @@ export default {
                         RePassword:new http.Base64().encode(this.passForm.pass2)
                         RePassword:new http.Base64().encode(this.passForm.pass2)
                     }).then(res=>{
                     }).then(res=>{
                         if(res.Ret!==200) return
                         if(res.Ret!==200) return
-                        this.$message.success('重置密码成功,请登陆')
+                        this.$message.success(/* '重置密码成功,请登陆' */this.$t('LoginPage.reset_pwd_success_msg'))
                         localStorage.setItem('timeKey',Date.now())
                         localStorage.setItem('timeKey',Date.now())
                         localStorage.setItem("account", new http.Base64().encode(this.form.account));
                         localStorage.setItem("account", new http.Base64().encode(this.form.account));
                         localStorage.setItem("checkPass", new http.Base64().encode(this.passForm.pass1));
                         localStorage.setItem("checkPass", new http.Base64().encode(this.passForm.pass1));

+ 17 - 14
src/views/login_manage/MobileModel.vue

@@ -12,7 +12,7 @@
                     type="text"
                     type="text"
                     v-model="form.mobile"
                     v-model="form.mobile"
                     auto-complete="off"
                     auto-complete="off"
-                    placeholder="请输入手机号"
+                    :placeholder="$t('LoginPage.ph_mobile')"
                 >
                 >
                     <el-select v-model="areaCodeSelect" slot="prepend" placeholder="请选择">
                     <el-select v-model="areaCodeSelect" slot="prepend" placeholder="请选择">
                         <el-option v-for="item in areaCode" :key="item.Value"
                         <el-option v-for="item in areaCode" :key="item.Value"
@@ -30,7 +30,7 @@
                     type="text"
                     type="text"
                     v-model="form.picCode"
                     v-model="form.picCode"
                     auto-complete="off"
                     auto-complete="off"
-                    placeholder="请输入图形验证码"
+                    :placeholder="$t('LoginPage.ph_img_code')"
                 >
                 >
                     <div class="pic-box" slot="append" @click="getCodePic">
                     <div class="pic-box" slot="append" @click="getCodePic">
                         <img :src="picSrc" alt="图形验证码"/>
                         <img :src="picSrc" alt="图形验证码"/>
@@ -42,7 +42,7 @@
                     type="text"
                     type="text"
                     v-model="form.checkCode"
                     v-model="form.checkCode"
                     auto-complete="off"
                     auto-complete="off"
-                    placeholder="请输入验证码">
+                    :placeholder="$t('LoginPage.ph_msg_code')">
                 </el-input>
                 </el-input>
                 <el-button type="text" class="code-btn" @click="checkForm" :disabled="codeCountDown<60&&codeCountDown>0">{{codeStr}}</el-button>
                 <el-button type="text" class="code-btn" @click="checkForm" :disabled="codeCountDown<60&&codeCountDown>0">{{codeStr}}</el-button>
             </el-form-item>
             </el-form-item>
@@ -81,7 +81,7 @@ export default {
             picSrc:'',//图形验证码地址
             picSrc:'',//图形验证码地址
             picId:'',//图形验证码id
             picId:'',//图形验证码id
             timer:0,
             timer:0,
-            codeStr:'获取验证码',
+            codeStr:/* '获取验证码'  */this.$t('LoginPage.ver_code_msg'),
             codeCountDown:60,
             codeCountDown:60,
             isGetNewCode:false,
             isGetNewCode:false,
             form:{
             form:{
@@ -91,28 +91,28 @@ export default {
             },
             },
             rules:{
             rules:{
                 mobile:[
                 mobile:[
-                    {required: true,message: "请输入手机号",trigger: "blur"},
+                    {required: true,message: /* "请输入手机号" */this.$t('LoginPage.ph_mobile'),trigger: "blur"},
                     {validator:(rule,value,callback)=>{
                     {validator:(rule,value,callback)=>{
                         if(this.areaCodeSelect==='86'&&!isMobileNo(value)){
                         if(this.areaCodeSelect==='86'&&!isMobileNo(value)){
-                            callback(new Error('请输入正确的手机号格式'));
+                            callback(new Error(/* '请输入正确的手机号格式' */this.$t('LoginPage.vaild_curr_mobile')));
                         }else if(this.areaCodeSelect!=='86'&&isNaN(value.trim())){
                         }else if(this.areaCodeSelect!=='86'&&isNaN(value.trim())){
-                            callback(new Error('请输入正确的手机号格式'));
+                            callback(new Error(/* '请输入正确的手机号格式' */this.$t('LoginPage.vaild_curr_mobile')));
                         }else{
                         }else{
                             callback()
                             callback()
                         }
                         }
                     },trigger:'blur'}
                     },trigger:'blur'}
                 ],
                 ],
-                picCode:[{required:true,message:'请输入图形验证码',trigger:'blur'}],
+                picCode:[{required:true,message:/* '请输入图形验证码' */this.$t('LoginPage.ph_img_code'),trigger:'blur'}],
-                checkCode:[{required:true,message:'请输入短信验证码',trigger:'blur'}]
+                checkCode:[{required:true,message:/* '请输入短信验证码' */this.$t('LoginPage.ph_msg_code'),trigger:'blur'}]
             }
             }
         };
         };
     },
     },
     methods: {
     methods: {
         checkForm(){
         checkForm(){
             //首先检查是否是重新获取验证码
             //首先检查是否是重新获取验证码
-            if(this.codeStr==='重新获取'&&!this.isGetNewCode){
+            if(this.codeStr===this.$t('LoginPage.recode_msg')&&!this.isGetNewCode){
                 //引导用户重新输入图形验证码
                 //引导用户重新输入图形验证码
-                this.$message.warning('重新获取需再次输入图形验证码')
+                this.$message.warning(/* '重新获取需再次输入图形验证码' */this.$t('LoginPage.recode_warn_msg'))
                 this.getCodePic()
                 this.getCodePic()
                 this.form.picCode = ''
                 this.form.picCode = ''
                 this.isGetNewCode = true
                 this.isGetNewCode = true
@@ -121,11 +121,11 @@ export default {
             //检查手机号和图形验证码是否正确
             //检查手机号和图形验证码是否正确
             const {picCode,mobile} = this.form
             const {picCode,mobile} = this.form
             if(!picCode.length){
             if(!picCode.length){
-                this.$message.warning('请输入图形验证码')
+                this.$message.warning(/* '请输入图形验证码' */this.$t('LoginPage.ph_img_code'))
                 return
                 return
             }
             }
             if(this.areaCodeSelect==='86'&&!isMobileNo(mobile)){
             if(this.areaCodeSelect==='86'&&!isMobileNo(mobile)){
-                this.$message.warning('请输入正确的手机号')
+                this.$message.warning(/* '请输入正确的手机号' */this.$t('LoginPage.vaild_curr_mobile'))
                 return
                 return
             }
             }
 
 
@@ -139,7 +139,7 @@ export default {
                 Source:this.Source
                 Source:this.Source
             }).then(res=>{
             }).then(res=>{
                 if(res.Ret!==200) return 
                 if(res.Ret!==200) return 
-                this.$message.success('验证码已发送')
+                this.$message.success(/* '验证码已发送' */this.$t('LoginPage.send_code_msg'))
                 this.isGetNewCode = false
                 this.isGetNewCode = false
                 //60秒倒计时
                 //60秒倒计时
                 this.codeCountDown = 60
                 this.codeCountDown = 60
@@ -151,6 +151,9 @@ export default {
 
 
         }
         }
     },
     },
+    mounted() {
+        this.getCodePic()
+    }
 };
 };
 </script>
 </script>
 
 

+ 9 - 9
src/views/login_manage/OrdinaryModel.vue

@@ -11,7 +11,7 @@
                     type="text"
                     type="text"
                     v-model="form.account"
                     v-model="form.account"
                     auto-complete="off"
                     auto-complete="off"
-                    placeholder="请输入用户名"
+                    :placeholder="$t('LoginPage.ph_account')"
                 />
                 />
                 <span class="inline-message el-form-item__error" 
                 <span class="inline-message el-form-item__error" 
                     v-show="(loginCheck||accountCheck)&&form.account.length">
                     v-show="(loginCheck||accountCheck)&&form.account.length">
@@ -23,7 +23,7 @@
                     type="password" show-password
                     type="password" show-password
                     v-model="form.checkPass"
                     v-model="form.checkPass"
                     auto-complete="off"
                     auto-complete="off"
-                    placeholder="请输入密码"
+                    :placeholder="$t('LoginPage.ph_pwd')"
                     @copy.native.capture.prevent="()=>{return false}"
                     @copy.native.capture.prevent="()=>{return false}"
                     @cut.native.capture.prevent="()=>{return false}"
                     @cut.native.capture.prevent="()=>{return false}"
                     @paste.native.capture.prevent="()=>{return false}"
                     @paste.native.capture.prevent="()=>{return false}"
@@ -34,14 +34,14 @@
             </el-form-item>
             </el-form-item>
             <el-form-item class="remember-cont" prop="checked">
             <el-form-item class="remember-cont" prop="checked">
                 <el-checkbox v-model="form.checked" class="remember">
                 <el-checkbox v-model="form.checked" class="remember">
-                    记住账号密码
+                    <!-- 记住账号密码 -->{{ $t('LoginPage.label_remember') }}
-                    <el-tooltip effect="dark" content="有效期60天" placement="top">
+                    <el-tooltip effect="dark" :content="$t('LoginPage.vaild_day_msg')" placement="top">
                         <span class="hint-text">
                         <span class="hint-text">
                             <i class="el-icon-question"></i>
                             <i class="el-icon-question"></i>
                         </span>
                         </span>
                     </el-tooltip>
                     </el-tooltip>
                 </el-checkbox>
                 </el-checkbox>
-                <el-button type="text" style="font-size: 16px;" @click="changeModel">忘记密码</el-button>
+                <el-button type="text" style="font-size: 16px;" @click="changeModel"><!-- 忘记密码 -->{{ $t('LoginPage.label_forget') }}</el-button>
             </el-form-item>
             </el-form-item>
         </el-form>
         </el-form>
     </div>
     </div>
@@ -76,11 +76,11 @@ export default {
             },
             },
             rules:{
             rules:{
                 account:[
                 account:[
-                    {required: true,message: "请输入账号",trigger: "blur"},
+                    {required: true,message: /* "请输入账号" */this.$t('LoginPage.ph_account'),trigger: "blur"},
                     {validator:validateClearn,trigger:['change']}
                     {validator:validateClearn,trigger:['change']}
                 ],
                 ],
                 checkPass:[
                 checkPass:[
-                    {required: true,message: "请输入密码",trigger: "blur"},
+                    {required: true,message: /* "请输入密码" */this.$t('LoginPage.ph_pwd'),trigger: "blur"},
                     {validator:validateClearn,trigger:['change']}
                     {validator:validateClearn,trigger:['change']}
                 ]
                 ]
             },
             },
@@ -91,14 +91,14 @@ export default {
         loginCheck(newVal){
         loginCheck(newVal){
             //显示/隐藏inline-message
             //显示/隐藏inline-message
             if(newVal){
             if(newVal){
-                this.hintMessage="账号或密码错误"
+                this.hintMessage=/* "账号或密码错误" */ this.$t('LoginPage.error_wrong_msg')
             }else{
             }else{
                 this.hintMessage=''
                 this.hintMessage=''
             }
             }
         },
         },
         accountCheck(newVal){
         accountCheck(newVal){
             if(newVal){
             if(newVal){
-                this.hintMessage="账号异常,请通过验证登录"
+                this.hintMessage=/* "账号异常,请通过验证登录" */this.$t('LoginPage.error_abnormal_msg')
             }else{
             }else{
                 this.hintMessage=''
                 this.hintMessage=''
             }
             }

+ 6 - 2
src/views/login_manage/components/ModelSteps.vue

@@ -7,7 +7,7 @@
             <div class="step-line"></div>
             <div class="step-line"></div>
             <div class="step-num" v-if="index+1>=activeStep">{{index+1}}</div>
             <div class="step-num" v-if="index+1>=activeStep">{{index+1}}</div>
             <div class="step-num" v-else><i class="el-icon-check"></i></div>
             <div class="step-num" v-else><i class="el-icon-check"></i></div>
-            <div class="step-text">{{step.text}}</div>
+            <div class="step-text">{{textMap[step.text]}}</div>
             
             
         </li>
         </li>
     </ul>
     </ul>
@@ -33,7 +33,11 @@ export default {
     },
     },
     data() {
     data() {
         return {
         return {
-
+            textMap: {
+                '选择验证方式':  this.$t('LoginPage.step_vaild_one'),
+                '进行安全验证':  this.$t('LoginPage.step_vaild_two'),
+                '设置密码':  this.$t('LoginPage.step_vaild_three'),
+            }
         };
         };
     },
     },
     methods: {
     methods: {

+ 1 - 1
src/views/login_manage/components/VerificationBox.vue

@@ -4,7 +4,7 @@
             <img :src="verifiesType==='mobile'?mobile_src:email_src" />
             <img :src="verifiesType==='mobile'?mobile_src:email_src" />
         </div>
         </div>
         <div class="text">{{infoText}}</div>
         <div class="text">{{infoText}}</div>
-        <el-button  type="primary" @click="goNext" v-if="!hideBtn" :disabled="countDown">{{countDown?`重发(${countDown}秒)`:btnText}}</el-button>
+        <el-button  type="primary" @click="goNext" v-if="!hideBtn" :disabled="countDown">{{countDown?`重发(${countDown}秒)`:(btnText==='开始验证'?$t('LoginPage.send_vaild_btn'):btnText)}}</el-button>
     </div>
     </div>
 </template>
 </template>
 
 

+ 2 - 2
src/views/login_manage/modelMixins.js

@@ -23,10 +23,10 @@ export default {
             /* if(!this.timer) return */
             /* if(!this.timer) return */
             //console.log('click down')
             //console.log('click down')
             this.codeCountDown--
             this.codeCountDown--
-            this.codeStr=`重新获取(${this.codeCountDown})秒`
+            this.codeStr=/* `重新获取(${this.codeCountDown})秒` */ this.$t('LoginPage.recode_ing_msg',{count: this.codeCountDown})
             if(this.codeCountDown<=0){
             if(this.codeCountDown<=0){
                 clearInterval(this.timer)
                 clearInterval(this.timer)
-                this.codeStr = '重新获取'
+                this.codeStr = /* '重新获取' */ this.$t('LoginPage.recode_msg')
                 return
                 return
             }
             }
         }
         }

+ 110 - 66
src/views/mychart_manage/components/chartDetailDia.vue

@@ -122,7 +122,7 @@
               class="span-item"
               class="span-item"
               style="margin-left: 7px"
               style="margin-left: 7px"
               @click="saveChartMapHandle"
               @click="saveChartMapHandle"
-              v-if="[1,2,5].includes(chartInfo.Source)"
+              v-if="[1,2,5,10].includes(chartInfo.Source)"
             >
             >
               <span> <i class="el-icon-collection" />&nbsp;<!-- 保存 -->{{$t('Chart.chart_save_btn')}} </span>
               <span> <i class="el-icon-collection" />&nbsp;<!-- 保存 -->{{$t('Chart.chart_save_btn')}} </span>
             </span>
             </span>
@@ -193,6 +193,8 @@
               v-permission="permissionBtn.myETAPermission.myChart_del"
               v-permission="permissionBtn.myETAPermission.myChart_del"
               :title="$t('Chart.OptMsg.chart_del_confirm')"
               :title="$t('Chart.OptMsg.chart_del_confirm')"
               icon="el-icon-info"
               icon="el-icon-info"
+              :confirm-button-text="$t('Dialog.confirm_btn')"
+              :cancel-button-text="$t('Dialog.cancel_btn')"
               @onConfirm="delChartHandle"
               @onConfirm="delChartHandle"
               v-if="chartInfo.Button.IsEdit"
               v-if="chartInfo.Button.IsEdit"
             >
             >
@@ -214,65 +216,66 @@
               <template v-if="!chartInfo.WarnMsg">
               <template v-if="!chartInfo.WarnMsg">
                 <Chart :options="options" :chartInfo="chartInfo" ref="chartRef"/>
                 <Chart :options="options" :chartInfo="chartInfo" ref="chartRef"/>
                 <!-- 上下限 -->
                 <!-- 上下限 -->
-                <div class="range-cont left" v-if="leftIndex != -1">
+                <template v-if="chartInfo.Source===1&&![7,10,11].includes(chartInfo.ChartType)">
-                  <el-input
+                    <div class="range-cont left" v-if="leftIndex !== -1">
-                    style="width: 60px; display: block"
+                        <el-input
-                    size="mini"
+                            style="width: 60px; display: block"
-                    type="number"
+                            size="mini"
-                    placeholder="上限"
+                            type="number"
-                    :disabled="!isAllowEditLimit"
+                            placeholder="上限"
-                    v-model="tableData[leftIndex].MaxData"
+                            v-model="chartLimit.max"
-                  />
+                            @change="changeLimit"
-                  <el-input
+                        />
-                    class="min-data-input"
+                        <el-input
-                    size="mini"
+                            class="min-data-input"
-                    type="number"
+                            size="mini"
-                    placeholder="下限"
+                            type="number"
-                    :disabled="!isAllowEditLimit"
+                            placeholder="下限"
-                    v-model="tableData[leftIndex].MinData"
+                            v-model="chartLimit.min"
-                  />
+                            @change="changeLimit"
-                </div>
+                        />
-                <div class="range-cont right" v-if="rightIndex != -1">
+                    </div>
-                  <el-input
+                    <div class="range-cont right" v-if="rightIndex !== -1">
-                    style="width: 60px; display: block"
+                        <el-input
-                    size="mini"
+                            style="width: 60px; display: block"
-                    type="number"
+                            size="mini"
-                    placeholder="上限"
+                            type="number"
-                    :disabled="!isAllowEditLimit"
+                            placeholder="上限"
-                    v-model="tableData[rightIndex].MaxData"
+                            v-model="chartLimit.rightMax"
-                  />
+                            @change="changeLimit"
-                  <el-input
+                        />
-                    class="min-data-input"
+                        <el-input
-                    size="mini"
+                            class="min-data-input"
-                    type="number"
+                            size="mini"
-                    placeholder="下限"
+                            type="number"
-                    :disabled="!isAllowEditLimit"
+                            placeholder="下限"
-                    v-model="tableData[rightIndex].MinData"
+                            v-model="chartLimit.rightMin"
-                  />
+                            @change="changeLimit"
-                </div>
+                        />
-
+                    </div>
-                <!-- 右2上下限设置 -->
+                    <!-- 右2上下限设置 -->
-                <div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
+                    <div class="range-cont rightTwo" v-if="rightTwoIndex !== -1">
-                  <el-input
+                        <el-input
-                    style="width: 60px; display: block"
+                            style="width: 60px; display: block"
-                    size="mini"
+                            size="mini"
-                    type="number"
+                            type="number"
-                    placeholder="上限"
+                            placeholder="上限"
-                    :disabled="!isAllowEditLimit"
+                            v-model="chartLimit.rightTwoMax"
-                    v-model="tableData[rightTwoIndex].MaxData"
+                            @change="changeLimit"
-                  />
+                        />
-                  <el-input
+                        <el-input
-                    class="min-data-input"
+                            class="min-data-input"
-                    size="mini"
+                            size="mini"
-                    type="number"
+                            type="number"
-                    placeholder="下限"
+                            placeholder="下限"
-                    :disabled="!isAllowEditLimit"
+                            v-model="chartLimit.rightTwoMin"
-                    v-model="tableData[rightTwoIndex].MinData"
+                            @change="changeLimit"
-                  />
+                        />
-                </div>
+                    </div>
+                </template>
 
 
                   <!-- 后续新图专用上下限 和其他数据依赖不公用 柱形图 截面散点-->
                   <!-- 后续新图专用上下限 和其他数据依赖不公用 柱形图 截面散点-->
-                <template v-if="[7,10,11].includes(chartInfo.ChartType)">	
+                <template v-if="[7,10,11].includes(chartInfo.ChartType)||[2,5,10].includes(chartInfo.Source)">	
                   <div class="range-cont left">
                   <div class="range-cont left">
                     <el-input
                     <el-input
                       style="width: 60px; display: block"
                       style="width: 60px; display: block"
@@ -577,7 +580,7 @@
 import { dataBaseInterface,mychartInterface } from '@/api/api.js';
 import { dataBaseInterface,mychartInterface } from '@/api/api.js';
 import futuresInterface from '@/api/modules/futuresBaseApi';
 import futuresInterface from '@/api/modules/futuresBaseApi';
 import chartRelevanceApi from '@/api/modules/chartRelevanceApi';
 import chartRelevanceApi from '@/api/modules/chartRelevanceApi';
-import { fittingEquationInterface,statisticFeatureInterface } from '@/api/modules/chartRelevanceApi';
+import { fittingEquationInterface,statisticFeatureInterface,crossVarietyInterface } from '@/api/modules/chartRelevanceApi';
 import {
 import {
   seasonOptions,
   seasonOptions,
   copyOtherOptions
   copyOtherOptions
@@ -592,7 +595,7 @@ import { copyFit } from '@/utils/svgToblob.js';
 
 
 export default {
 export default {
   components: { Chart, DateChooseDia,SaveChartOther,changeLang,setEnNameDia },
   components: { Chart, DateChooseDia,SaveChartOther,changeLang,setEnNameDia },
-  mixins: [ chartSetMixin ],
+  mixins: [ chartSetMixin],
   directives: {
   directives: {
     'click-outside':{
     'click-outside':{
       bind(el, binding) {
       bind(el, binding) {
@@ -731,8 +734,12 @@ export default {
             this.setDefaultSourceFrom();
             this.setDefaultSourceFrom();
             
             
             this.tableData = res.Data.EdbInfoList;
             this.tableData = res.Data.EdbInfoList;
+            //初始化上下限
+            this.setLimitData(this.tableData)
+            
             //eta图
             //eta图
             this.setDefaultDateSelect(); //设置默认的日期选中
             this.setDefaultDateSelect(); //设置默认的日期选中
+
             this.chartInfo.ChartType === 7 && this.initBarData(res.Data);
             this.chartInfo.ChartType === 7 && this.initBarData(res.Data);
 
 
             //截面散点图
             //截面散点图
@@ -786,11 +793,13 @@ export default {
           }else if(this.chartInfo.Source===10) { //跨品种分析
           }else if(this.chartInfo.Source===10) { //跨品种分析
             this.tableData = res.Data.EdbInfoList;
             this.tableData = res.Data.EdbInfoList;
             this.crossVarietyChartData = res.Data.DataResp;
             this.crossVarietyChartData = res.Data.DataResp;
+
+            /* 历史数据chartInfo里全是空 兼容下历史数据不崩 */
             this.chartLimit = {
             this.chartLimit = {
-              min: Number(res.Data.DataResp.YMinValue),
+              min: res.Data.ChartInfo.LeftMin?Number(res.Data.ChartInfo.LeftMin):Number(res.Data.DataResp.YMinValue),
-              max: Number(res.Data.DataResp.YMaxValue),
+              max: res.Data.ChartInfo.LeftMax?Number(res.Data.ChartInfo.LeftMax):Number(res.Data.DataResp.YMaxValue),
-              x_min: Number(res.Data.DataResp.XMinValue),
+              x_min: res.Data.ChartInfo.XMin?Number(res.Data.ChartInfo.XMin):Number(res.Data.DataResp.XMinValue),
-              x_max: Number(res.Data.DataResp.XMaxValue)
+              x_max: res.Data.ChartInfo.XMax?Number(res.Data.ChartInfo.XMax):Number(res.Data.DataResp.XMaxValue),
             }
             }
             this.setCrossVarietyChart();
             this.setCrossVarietyChart();
           }
           }
@@ -1110,6 +1119,7 @@ export default {
         1: this.saveChartHandle,
         1: this.saveChartHandle,
         2: this.saveCommodityChart,
         2: this.saveCommodityChart,
         5: this.saveCommodityChart,//利润曲线
         5: this.saveCommodityChart,//利润曲线
+        10: this.saveCrossVarietyChart
       }
       }
       sourceMap[this.chartInfo.Source]&&sourceMap[this.chartInfo.Source]();
       sourceMap[this.chartInfo.Source]&&sourceMap[this.chartInfo.Source]();
     },
     },
@@ -1129,6 +1139,24 @@ export default {
 			this.setChartImage();
 			this.setChartImage();
 		},300),
 		},300),
 
 
+    saveCrossVarietyChart: _.debounce(async function() {
+      let { min,max,x_min,x_max } = this.chartLimit;
+      let params = {
+        ChartInfoId: this.chartInfo.ChartInfoId,
+        XMin: String(x_min),
+				XMax: String(x_max),
+				LeftMin: String(min),
+				LeftMax: String(max),
+      }
+			let res = await crossVarietyInterface.saveChart(params);
+
+			if(res.Ret !== 200) return
+
+			this.$message.success('保存成功')
+			//关联图表和图片
+			this.setChartImage();
+    },300),
+
     /* 保存当前图表配置 */
     /* 保存当前图表配置 */
     saveChartHandle: _.debounce(function () {
     saveChartHandle: _.debounce(function () {
       //遍历每条线的指标配置
       //遍历每条线的指标配置
@@ -1202,7 +1230,23 @@ export default {
             EndDate: this.year_select === 5 ? this.select_date[1] : '',
             EndDate: this.year_select === 5 ? this.select_date[1] : '',
           }
           }
         : typeChartParam;
         : typeChartParam;
-
+        
+        if(![7,10,11].includes(this.selected_chartType)){
+            const {
+                min,max,rightMin,rightMax,rightTwoMin,rightTwoMax
+            } = this.chartLimit
+            params = {
+                ...params,
+                LeftMin:min+'',
+                LeftMax:max+'',
+                RightMin:rightMin+'',
+                RightMax:rightMax+'',
+                Right2Min:rightTwoMin+'',
+                Right2Max:rightTwoMax+'',
+                //手动保存视为更改过上下限
+                MinMaxSave:1
+            }
+        }
       dataBaseInterface.chartSave(params).then((res) => {
       dataBaseInterface.chartSave(params).then((res) => {
         if (res.Ret === 200) {
         if (res.Ret === 200) {
           // this.$message.success('保存成功');
           // this.$message.success('保存成功');
@@ -1313,7 +1357,7 @@ export default {
         );
         );
       mychartInterface.del({ MyChartId: item.MyChartId,MyChartClassifyId: this.select_classify }).then((res) => {
       mychartInterface.del({ MyChartId: item.MyChartId,MyChartClassifyId: this.select_classify }).then((res) => {
         if (res.Ret !== 200) return;
         if (res.Ret !== 200) return;
-        this.$message.success('移出成功');
+        this.$message.success(/* '移出成功' */this.$t('MsgPrompt.move_out_msg'));
         item.IsAdd = false;
         item.IsAdd = false;
 				sessionStorage.removeItem('myChartbeforeOptions');
 				sessionStorage.removeItem('myChartbeforeOptions');
 
 

+ 4 - 4
src/views/mychart_manage/components/classifyDeleteCheck.vue

@@ -11,10 +11,10 @@
     >
     >
         <div slot="title" style="display: flex; align-items: center;">
         <div slot="title" style="display: flex; align-items: center;">
             <i style="color:#FF8A00;font-size: 16px;" class="el-icon-warning"></i>
             <i style="color:#FF8A00;font-size: 16px;" class="el-icon-warning"></i>
-            <span style="font-size: 16px;color:#333;margin-left: 5px;">提示</span>
+            <span style="font-size: 16px;color:#333;margin-left: 5px;"><!-- 提示 -->{{$t('Dialog.warn_tit')}}</span>
         </div>
         </div>
         <div class="dialog-container">
         <div class="dialog-container">
-            <p>该图分类已添加节点链接,不允许删除!</p>
+            <p><!-- 该图分类已添加节点链接,不允许删除! -->{{ $t('Chart.OptMsg.del_classify_link_msg') }}</p>
             <div class="frame-list">
             <div class="frame-list">
                 <p class="frame-item" v-for="(item,index) in detailArr" :key="index" @click="goToFrameList(item)">
                 <p class="frame-item" v-for="(item,index) in detailArr" :key="index" @click="goToFrameList(item)">
                     {{index+1}}、{{item.FrameworkName}}({{item.NodeName}})
                     {{index+1}}、{{item.FrameworkName}}({{item.NodeName}})
@@ -22,8 +22,8 @@
             </div>
             </div>
         </div>
         </div>
         <div class="dialog-footer">
         <div class="dialog-footer">
-            <el-button @click="$emit('close')">取消</el-button>
+            <el-button @click="$emit('close')"><!-- 取消 -->{{$t('Dialog.cancel_btn')}}</el-button>
-            <el-button type="primary" @click="$emit('close')">确定</el-button>
+            <el-button type="primary" @click="$emit('close')"><!-- 确定 -->{{$t('Dialog.confirm_btn')}}</el-button>
         </div>
         </div>
     </el-dialog>
     </el-dialog>
 </template>
 </template>

+ 14 - 15
src/views/mychart_manage/index.vue

@@ -643,19 +643,19 @@ export default {
 
 
     /* 添加分类回调 */
     /* 添加分类回调 */
     addClassifyBack(params, title) {
     addClassifyBack(params, title) {
-      title === '新增分类' &&
+      title === this.$t('MyEtaPage.label_add_classify') &&
         mychartInterface
         mychartInterface
           .addClassify({
           .addClassify({
             MyChartClassifyName: params.name,
             MyChartClassifyName: params.name,
           })
           })
           .then((res) => {
           .then((res) => {
             if (res.Ret !== 200) return;
             if (res.Ret !== 200) return;
-            this.$message.success('新增成功');
+            this.$message.success(/* '新增成功' */this.$t('MsgPrompt.add_msg'));
             this.isClassifyDia = false;
             this.isClassifyDia = false;
             this.getClassify();
             this.getClassify();
           });
           });
 
 
-      title === '重命名分类' &&
+      title === this.$t('MyEtaPage.label_rename_classify') &&
         mychartInterface
         mychartInterface
           .editClassify({
           .editClassify({
             MyChartClassifyName: params.name,
             MyChartClassifyName: params.name,
@@ -663,13 +663,13 @@ export default {
           })
           })
           .then((res) => {
           .then((res) => {
             if (res.Ret !== 200) return;
             if (res.Ret !== 200) return;
-            this.$message.success('编辑成功');
+            this.$message.success(/* '编辑成功' */this.$t('MsgPrompt.edit_msg'));
             this.isClassifyDia = false;
             this.isClassifyDia = false;
             this.getClassify();
             this.getClassify();
             this.getPublicClassify();
             this.getPublicClassify();
           });
           });
 
 
-      title === '复制图表分类' &&
+      title === this.$t('MyEtaPage.label_copy_classify') &&
         mychartInterface
         mychartInterface
           .copyMyChart({
           .copyMyChart({
             ChartInfoId: this.move_id,
             ChartInfoId: this.move_id,
@@ -677,7 +677,7 @@ export default {
           })
           })
           .then((res) => {
           .then((res) => {
             if (res.Ret !== 200) return;
             if (res.Ret !== 200) return;
-            this.$message.success('复制成功');
+            this.$message.success(/* '复制成功' */this.$t('MsgPrompt.copy_success_msg'));
             this.isClassifyDia = false;
             this.isClassifyDia = false;
             // this.isOpenDetail = false;
             // this.isOpenDetail = false;
             // this.select_classify = '';
             // this.select_classify = '';
@@ -716,7 +716,7 @@ export default {
         MyChartClassifyId: this.select_classify
         MyChartClassifyId: this.select_classify
       }).then(res => {
       }).then(res => {
         if(res.Ret !== 200) return;
         if(res.Ret !== 200) return;
-        this.$message.success('复制成功');
+        this.$message.success(/* '复制成功' */this.$t('MsgPrompt.copy_success_msg'));
         this.getClassify();
         this.getClassify();
       });
       });
 
 
@@ -727,7 +727,7 @@ export default {
         MyChartClassifyId: this.select_classify
         MyChartClassifyId: this.select_classify
       }).then(res => {
       }).then(res => {
         if(res.Ret !== 200) return;
         if(res.Ret !== 200) return;
-        this.$message.success('设置成功');
+        this.$message.success(/* '设置成功' */this.$t('MsgPrompt.set_success_msg'));
         if(key === 'own'){
         if(key === 'own'){
           item.IsPublic=0
           item.IsPublic=0
           item.IsCompanyPublic=0
           item.IsCompanyPublic=0
@@ -744,7 +744,7 @@ export default {
           IsCompanyPublic:IsCompanyPublic
           IsCompanyPublic:IsCompanyPublic
         }).then(res=>{
         }).then(res=>{
           if(res.Ret !== 200) return;
           if(res.Ret !== 200) return;
-          this.$message.success('操作成功');
+          this.$message.success(/* '操作成功' */this.$t('MsgPrompt.operate_success_msg'));
           item.IsCompanyPublic=IsCompanyPublic
           item.IsCompanyPublic=IsCompanyPublic
           // 不想请求接口
           // 不想请求接口
           // this.getPublicClassify();
           // this.getPublicClassify();
@@ -794,11 +794,9 @@ export default {
             return
             return
         }
         }
         this.$confirm(
         this.$confirm(
-          '若删除该分类,则分类下关联的所有图表将被全部删除, 是否继续?',
+          /* '若删除该分类,则分类下关联的所有图表将被全部删除, 是否继续?' */this.$t('Chart.OptMsg.del_classify_chart_msg'),
-          '提示',
+          /* '提示' */this.$t('Dialog.warn_tit'),
           {
           {
-            confirmButtonText: '确定',
-            cancelButtonText: '取消',
             type: 'warning',
             type: 'warning',
           }
           }
         )
         )
@@ -809,7 +807,7 @@ export default {
               })
               })
               .then((res) => {
               .then((res) => {
                 if (res.Ret !== 200) return;
                 if (res.Ret !== 200) return;
-                this.$message.success('删除成功');
+                this.$message.success(/* '删除成功' */ this.$t('MsgPrompt.delete_msg'));
                 this.getClassify();
                 this.getClassify();
                 this.getPublicClassify();
                 this.getPublicClassify();
               });
               });
@@ -930,7 +928,7 @@ export default {
         })
         })
         .then((res) => {
         .then((res) => {
           if (res.Ret !== 200) return;
           if (res.Ret !== 200) return;
-          this.$message.success('移出成功');
+          this.$message.success(/* '移出成功' */this.$t('MsgPrompt.move_out_msg'));
           this.page_no = 1;
           this.page_no = 1;
           this.getChartList();
           this.getChartList();
         });
         });
@@ -1091,6 +1089,7 @@ export default {
       overflow: auto;
       overflow: auto;
       max-height: calc(100vh - 290px);
       max-height: calc(100vh - 290px);
       position: relative;
       position: relative;
+      margin-right: 20px;
       .classify-item {
       .classify-item {
         padding: 10px 30px;
         padding: 10px 30px;
         display: flex;
         display: flex;

+ 12 - 11
src/views/operation_manage/AIQA/AIQA.vue

@@ -63,7 +63,7 @@
                 <div class="upload-row">
                 <div class="upload-row">
                     <el-upload
                     <el-upload
                     style="display: inline-block; margin-right: 8px"
                     style="display: inline-block; margin-right: 8px"
-                    accept=".pptx,.pdf"
+                    accept=".pptx,.pdf,.docx"
                     action=""
                     action=""
                     :http-request="handleUpload"
                     :http-request="handleUpload"
                     :before-upload="handleBeforeUpload"
                     :before-upload="handleBeforeUpload"
@@ -71,7 +71,7 @@
                     :disabled="startUploadAudio">
                     :disabled="startUploadAudio">
                         <img src="~@/assets/img/icons/ai-upload.png" />
                         <img src="~@/assets/img/icons/ai-upload.png" />
                     </el-upload>
                     </el-upload>
-                    <span>支持格式:PDF、PPTX;大小不超过10MB;要求纯文本,不含图片</span>
+                    <span>支持格式:PDF、PPTX、DOCX;大小不超过50MB</span>
                 </div>
                 </div>
                 <textarea rows="6" v-model="inputText" :placeholder="$t('ToolBox.AIQuestion.input_placeholder')" @keydown.enter="handleSendMsg"></textarea>
                 <textarea rows="6" v-model="inputText" :placeholder="$t('ToolBox.AIQuestion.input_placeholder')" @keydown.enter="handleSendMsg"></textarea>
                 <div class="send-btn" @click="handleSendMsg"><img src="~@/assets/img/ai_m/send.png" />{{$t('ToolBox.AIQuestion.send_btn')}}</div>
                 <div class="send-btn" @click="handleSendMsg"><img src="~@/assets/img/ai_m/send.png" />{{$t('ToolBox.AIQuestion.send_btn')}}</div>
@@ -131,7 +131,8 @@ export default {
             companyName:'',
             companyName:'',
             aiFileIds:[],
             aiFileIds:[],
             // 上传窗口的队列
             // 上传窗口的队列
-            windowSet:new Set()
+            windowSet:new Set(),
+            fileTypeRule:new RegExp(/\.pdf|\.pptx|\.docx$/,'i')
         };
         };
     },
     },
     watch:{
     watch:{
@@ -453,14 +454,14 @@ export default {
                     return this.$message.error("单次只能上传一个文件,请重试");
                     return this.$message.error("单次只能上传一个文件,请重试");
                 }else{
                 }else{
                     let file = DataTransferItemList[0]
                     let file = DataTransferItemList[0]
-                    if(file.type && (file.name.endsWith('.pdf')||file.name.endsWith('.pptx'))){
+                    if(file.type && this.fileTypeRule.test(file.name)){
-                        if(file.size/1024/1024 > 10.1){
+                        if(file.size/1024/1024 > 50.1){
-                            this.$message.error("上传文件大小不超过10MB");
+                            this.$message.error("上传文件大小不超过50MB");
                             return false;
                             return false;
                         }
                         }
                         this.handleUpload({file})
                         this.handleUpload({file})
                     }else{
                     }else{
-                        return this.$message.error("上传文件格式只支持PDF、PPTX");
+                        return this.$message.error("上传文件格式只支持PDF、PPTX、DOCX");
                     }
                     }
                 }
                 }
             }else{
             }else{
@@ -470,12 +471,12 @@ export default {
             }
             }
         },
         },
         handleBeforeUpload(e) {
         handleBeforeUpload(e) {
-            if(!(e.name.endsWith('.pdf') || e.name.endsWith('.pptx'))){
+            if(!this.fileTypeRule.test(e.name)){
-                this.$message.error("上传文件格式只支持PDF、PPTX");
+                this.$message.error("上传文件格式只支持PDF、PPTX、DOCX");
                 return false;
                 return false;
             }
             }
-            if(!(e.size/1024/1024 < 10.1)){
+            if(!(e.size/1024/1024 < 50.1)){
-                this.$message.error("上传文件大小不超过10MB");
+                this.$message.error("上传文件大小不超过50MB");
                 return false;
                 return false;
             }
             }
         },
         },

+ 8 - 5
src/views/operation_manage/AIQA/components/messageItem.vue

@@ -69,12 +69,15 @@ export default {
         },
         },
         getFileIcon(){
         getFileIcon(){
             if(this.messageInfo.askFileUrl){
             if(this.messageInfo.askFileUrl){
-                if(this.messageInfo.askFileUrl.endsWith('.pdf')){
+                let fileUrl=this.messageInfo.askFileUrl.toLocaleLowerCase()
-                    return require('@/assets/img/icons/file_type_pdf.png')
+                if(fileUrl.endsWith('.pdf')){
-                }else if(this.messageInfo.askFileUrl.endsWith('.pptx')){
+                    return require('@/assets/img/cloudDisk/pdf_icon.png')
-                    return require('@/assets/img/icons/file_type_ppt.png')
+                }else if(fileUrl.endsWith('.pptx')){
+                    return require('@/assets/img/cloudDisk/ppt_icon.png')
+                }else if(fileUrl.endsWith('.doc') || fileUrl.endsWith('.docx')){
+                    return require('@/assets/img/cloudDisk/word_icon.png')
                 }else{
                 }else{
-                    return require('@/assets/img/icons/file_type_unknown.png')
+                    return require('@/assets/img/cloudDisk/config_icon.png')
                 }
                 }
             }else{
             }else{
                 return ''
                 return ''

+ 194 - 11
src/views/ppt_manage/mixins/mixins.js

@@ -52,7 +52,14 @@ export default {
       barDateList: [],//柱形图的绘图数据
       barDateList: [],//柱形图的绘图数据
       barXIdData: [],//柱形图的x轴
       barXIdData: [],//柱形图的x轴
       barEdbData: [],//柱形图的表格数据 只用于取值
       barEdbData: [],//柱形图的表格数据 只用于取值
-      chartLimit: {},
+      chartLimit: {
+        min:'', //左轴上下限
+        max:'',
+        rightMin:'',//右轴上下限
+        rightMax:'',
+        rightTwoMin:'',//右二轴上下限
+        rightTwoMax:'',
+      },
 
 
       /* 商品价格曲线 */
       /* 商品价格曲线 */
       commodityChartData: [],
       commodityChartData: [],
@@ -115,6 +122,26 @@ export default {
       chartData.forEach((item, index) => {
       chartData.forEach((item, index) => {
         //轴位置值相同的下标
         //轴位置值相同的下标
         let sameSideIndex = chartData.findIndex(i => i.IsAxis === item.IsAxis);
         let sameSideIndex = chartData.findIndex(i => i.IsAxis === item.IsAxis);
+        //获取对应轴的上下限
+        //非ETA图库图表也不设置自定义上下限
+        const isETASource = this.chartInfo.Source===1
+        let minLimit = 0,maxLimit = 0
+        if(isETASource){
+            const limitMap = {
+                0:['rightMin','rightMax'],
+                1:['min','max'],
+                2:['rightTwoMin','rightTwoMax']
+            }
+            if(limitMap[item.IsAxis]){
+                minLimit = this.chartLimit[`${limitMap[item.IsAxis][0]}`]||0
+                maxLimit = this.chartLimit[`${limitMap[item.IsAxis][1]}`]||0
+            }
+        }else{
+            minLimit = this.dataList[sameSideIndex].MinData
+            maxLimit = this.dataList[sameSideIndex].MaxData
+            console.log('useDefault',minLimit,maxLimit)
+        }
+        
         //y轴
         //y轴
         const textZh = item.ConvertUnit||item.Unit
         const textZh = item.ConvertUnit||item.Unit
         const textEn = item.ConvertEnUnit||item.UnitEn||item.ConvertUnit||item.Unit
         const textEn = item.ConvertEnUnit||item.UnitEn||item.ConvertUnit||item.Unit
@@ -147,8 +174,8 @@ export default {
           },
           },
           opposite: [0,2].includes(item.IsAxis),
           opposite: [0,2].includes(item.IsAxis),
           reversed: item.IsOrder,
           reversed: item.IsOrder,
-          min: Number(item.MinData),
+          min: Number(minLimit),
-          max: Number(item.MaxData),
+          max: Number(maxLimit),
           tickWidth: 1,
           tickWidth: 1,
           visible: sameSideIndex === index,
           visible: sameSideIndex === index,
           plotBands: this.setAxisPlotAreas(item.IsAxis),
           plotBands: this.setAxisPlotAreas(item.IsAxis),
@@ -278,6 +305,19 @@ export default {
         ? -1
         ? -1
         : this.dataList.findIndex((item) => item.IsAxis===2);
         : this.dataList.findIndex((item) => item.IsAxis===2);
 
 
+         //获取对应轴的上下限
+         let minLimit = 0,maxLimit = 0
+         const limitMap = {
+            0:['rightMin','rightMax'],
+            1:['min','max'],
+            2:['rightTwoMin','rightTwoMax']
+        }
+        if(limitMap[item.IsAxis]){
+            minLimit = this.chartLimit[`${limitMap[item.IsAxis][0]}`]||0
+            maxLimit = this.chartLimit[`${limitMap[item.IsAxis][1]}`]||0
+        }
+        console.log('test堆积',minLimit,maxLimit)
+
         //y轴
         //y轴
         let yItem = {
         let yItem = {
           ...basicYAxis,
           ...basicYAxis,
@@ -308,8 +348,8 @@ export default {
           },
           },
           opposite: [0,2].includes(item.IsAxis),
           opposite: [0,2].includes(item.IsAxis),
           reversed: item.IsOrder,
           reversed: item.IsOrder,
-          min: Number(chartData[sameSideIndex].MinData),
+          min: Number(minLimit),
-          max: Number(chartData[sameSideIndex].MaxData),
+          max: Number(maxLimit),
           tickWidth: sameSideIndex !== index ? 0 : 1,
           tickWidth: sameSideIndex !== index ? 0 : 1,
           visible: serie_yIndex === index && sameSideIndex ===index,
           visible: serie_yIndex === index && sameSideIndex ===index,
           plotBands: this.setAxisPlotAreas(item.IsAxis),
           plotBands: this.setAxisPlotAreas(item.IsAxis),
@@ -402,6 +442,10 @@ export default {
       let seasonYdata = [],
       let seasonYdata = [],
         seasonData = []
         seasonData = []
 
 
+        //获取对应轴的上下限
+        let minLimit = 0,maxLimit = 0
+        minLimit = this.chartLimit.min||0
+        maxLimit = this.chartLimit.max||0
       //数据列
       //数据列
       for (let j of chartDataHandle) {
       for (let j of chartDataHandle) {
           //预测指标配置
           //预测指标配置
@@ -455,8 +499,8 @@ export default {
           textAlign: 'left',
           textAlign: 'left',
           reserveSpace: false
           reserveSpace: false
         },
         },
-        max: Number(chartData.MaxData),
+        max: Number(maxLimit),
-        min: Number(chartData.MinData),
+        min: Number(minLimit),
         plotBands: this.setAxisPlotAreas(1),
         plotBands: this.setAxisPlotAreas(1),
         plotLines: this.setAxisPlotLines(1)
         plotLines: this.setAxisPlotLines(1)
       }];
       }];
@@ -560,6 +604,10 @@ export default {
       }
       }
 
 
       const { IsOrder,ChartColor,MaxData,MinData } = chartData[0];
       const { IsOrder,ChartColor,MaxData,MinData } = chartData[0];
+      //获取对应轴的上下限
+      let minLimit = 0,maxLimit = 0
+      minLimit = this.chartLimit.min||0
+      maxLimit = this.chartLimit.max||0
       //y轴
       //y轴
       const textYZh = chartData[1].ConvertUnit||chartData[1].Unit
       const textYZh = chartData[1].ConvertUnit||chartData[1].Unit
       const textYEn = chartData[1].ConvertEnUnit||chartData[1].UnitEn||chartData[1].ConvertUnit||chartData[1].Unit
       const textYEn = chartData[1].ConvertEnUnit||chartData[1].UnitEn||chartData[1].ConvertUnit||chartData[1].Unit
@@ -587,8 +635,8 @@ export default {
         },
         },
         opposite: false,
         opposite: false,
         reversed: IsOrder,
         reversed: IsOrder,
-        min: Number(chartData[1].MinData),
+        min: Number(minLimit),
-        max: Number(chartData[1].MaxData),
+        max: Number(maxLimit),
         tickWidth: 1,
         tickWidth: 1,
         tickLength: 5,
         tickLength: 5,
         lineWidth: 1,
         lineWidth: 1,
@@ -1429,6 +1477,10 @@ export default {
 
 
        //数据列
        //数据列
       let series = [];
       let series = [];
+      const tagMap = { //标签对应文字
+        1: '最新',
+        3: 'Fix'
+      }
       DataList.forEach(item => {
       DataList.forEach(item => {
         //数据列
         //数据列
         let series_item = {
         let series_item = {
@@ -1442,7 +1494,16 @@ export default {
           zIndex:1
           zIndex:1
         }
         }
         item.CoordinatePointData.forEach(_ => {
         item.CoordinatePointData.forEach(_ => {
-          series_item.data.push({x: _.X,y: _.Y,})
+          series_item.data.push({
+            x: _.X,
+            y: _.Y,
+            dataLabels: {
+              enabled: _.ShowTips===1,
+              allowOverlap: true,
+              align: 'left',
+              format: tagMap[_.DateType] || `-${_.DaysAgo}D`,
+            }
+          })
         })
         })
         series.push(series_item);
         series.push(series_item);
       })
       })
@@ -1812,6 +1873,128 @@ export default {
       })
       })
 
 
       return plotBands
       return plotBands
-    }
+    },
+    /* ----自定义上下限相关--- */
+    setLimitData(tableData=[]){
+        const {
+            //左右轴极值字段 
+            LeftMin=0,LeftMax=0,
+            RightMin=0,RightMax=0,
+            Right2Min=0,Right2Max=0,
+            MinMaxSave
+        } = this.chartInfo
+        if(MinMaxSave){
+            this.chartLimit.min = Number(LeftMin)
+            this.chartLimit.max = Number(LeftMax)
+            this.chartLimit.rightMin = Number(RightMin)
+            this.chartLimit.rightMax = Number(RightMax)
+            this.chartLimit.rightTwoMin = Number(Right2Min)
+            this.chartLimit.rightTwoMax = Number(Right2Max)
+            //若用户修改过,则检测轴的上下限是否为空,若为空,则需要计算对应轴的上下限
+            this.checkChartLimit(tableData)
+        }else{
+            this.calcYAxislimit(tableData)
+        }
+    },
+    checkChartLimit(tableData=[]){
+        //散点图单独处理
+        if(this.chartInfo.ChartType===5){
+            if(tableData[1]){
+                const {min,max} = this.chartLimit
+                if(Number(min)===0&&Number(max)===0){
+                    this.chartLimit.min = tableData[1].MinData
+                    this.chartLimit.max = tableData[1].MaxData
+                }
+            }
+            return 
+        }
+        const {
+            min,max,rightMin,rightMax,rightTwoMin,rightTwoMax
+        } = this.chartLimit
+        //若轴的上下限均为0,则不管用户有没有修改过,都重新赋值
+        if(Number(min)===0&&Number(max)===0){
+            const leftData = tableData.filter(i=>i.IsAxis===1).map(i=>[Number(i.MinData),Number(i.MaxData)])
+            if(leftData.length){
+                const {Max,Min} = this.calcLimit(leftData.flat())
+                this.chartLimit.min=Min
+                this.chartLimit.max=Max
+            }
+        }
+        if(Number(rightMin)===0&&Number(rightMax)===0){
+            const rightData = tableData.filter(i => !i.IsAxis).map(i=>[Number(i.MinData),Number(i.MaxData)])
+            if(rightData.length){
+                const {Max,Min} = this.calcLimit(rightData.flat())
+                this.chartLimit.rightMin = Min
+                this.chartLimit.rightMax = Max
+            }
+        }
+        if(Number(rightTwoMin)===0&&Number(rightTwoMax)===0){
+            const rightTwoData = tableData.filter(i=>i.IsAxis===2).map(i=>[Number(i.MinData),Number(i.MaxData)])
+            if(rightTwoData.length){
+                const {Max,Min} = this.calcLimit(rightTwoData.flat())
+                this.chartLimit.rightTwoMin = Min
+                this.chartLimit.rightTwoMax = Max
+            }
+        }
+    },
+    /* 计算y轴上下限 */
+    calcYAxislimit(tableData=[]) {
+        //散点图单独处理
+        if(this.chartInfo.ChartType===5){
+            if(tableData[1]){
+                this.chartLimit.min = tableData[1].MinData
+                this.chartLimit.max = tableData[1].MaxData
+            }
+            return 
+        }
+        //分组
+        const leftData = tableData.filter(i => i.IsAxis === 1).map(i => [Number(i.MinData), Number(i.MaxData)])
+        const rightData = tableData.filter(i => !i.IsAxis).map(i => [Number(i.MinData), Number(i.MaxData)])
+        const rightTwoData = tableData.filter(i => i.IsAxis === 2).map(i => [Number(i.MinData), Number(i.MaxData)])
+        //计算最大最小值
+        if (leftData.length) {
+            const {
+                Max,
+                Min
+            } = this.calcLimit(leftData.flat())
+            this.chartLimit.min=Min
+            this.chartLimit.max=Max
+        } else {
+            this.leftIndex = -1
+            this.chartLimit.min=0
+            this.chartLimit.max=0
+        }
+        if (rightData.length) {
+            const {
+                Max,
+                Min
+            } = this.calcLimit(rightData.flat())
+            this.chartLimit.rightMin = Min
+            this.chartLimit.rightMax = Max
+        } else {
+            this.rightIndex = -1
+            this.chartLimit.rightMin = 0
+            this.chartLimit.rightMax = 0
+        }
+        if (rightTwoData.length) {
+            const {
+                Max,
+                Min
+            } = this.calcLimit(rightTwoData.flat())
+            this.chartLimit.rightTwoMin = Min
+            this.chartLimit.rightTwoMax = Max
+        } else {
+            this.rightTwoIndex = -1
+            this.chartLimit.rightTwoMin = 0
+            this.chartLimit.rightTwoMax = 0
+        }
+    },
+    calcLimit(arr) {
+        return {
+            Max: Math.max(...arr),
+            Min: Math.min(...arr)
+        }
+    },
+    /*-------------------- */
   },
   },
 };
 };

+ 8 - 4
src/views/ppt_manage/mixins/pptMixins.js

@@ -211,6 +211,8 @@ export default {
         this.setDefaultSourceFrom();
         this.setDefaultSourceFrom();
         
         
         this.dataList = Data.EdbInfoList;
         this.dataList = Data.EdbInfoList;
+        //初始化上下限
+        this.setLimitData(this.dataList)
         //柱形图独立数据
         //柱形图独立数据
         this.chartInfo.ChartType === 7 && this.initBarData(res.Data);
         this.chartInfo.ChartType === 7 && this.initBarData(res.Data);
         //截面散点图
         //截面散点图
@@ -265,11 +267,13 @@ export default {
       }else if(this.chartInfo.Source===10) {
       }else if(this.chartInfo.Source===10) {
         this.dataList = res.Data.EdbInfoList;
         this.dataList = res.Data.EdbInfoList;
         this.crossVarietyChartData = res.Data.DataResp;
         this.crossVarietyChartData = res.Data.DataResp;
+        
+        /* 历史数据chartInfo里全是空 兼容下历史数据不崩 */
         this.chartLimit = {
         this.chartLimit = {
-          min: Number(res.Data.DataResp.YMinValue),
+          min: res.Data.ChartInfo.LeftMin?Number(res.Data.ChartInfo.LeftMin):Number(res.Data.DataResp.YMinValue),
-          max: Number(res.Data.DataResp.YMaxValue),
+          max: res.Data.ChartInfo.LeftMax?Number(res.Data.ChartInfo.LeftMax):Number(res.Data.DataResp.YMaxValue),
-          x_min: Number(res.Data.DataResp.XMinValue),
+          x_min: res.Data.ChartInfo.XMin?Number(res.Data.ChartInfo.XMin):Number(res.Data.DataResp.XMinValue),
-          x_max: Number(res.Data.DataResp.XMaxValue)
+          x_max: res.Data.ChartInfo.XMax?Number(res.Data.ChartInfo.XMax):Number(res.Data.DataResp.XMaxValue),
         }
         }
         this.setCrossVarietyChart();
         this.setCrossVarietyChart();
         this.changeRelevanceOptions();//更改英文一样
         this.changeRelevanceOptions();//更改英文一样

+ 1 - 0
src/views/ppt_manage/newVersion/pptCatalog.vue

@@ -1440,6 +1440,7 @@ export default {
       margin-top:20px;
       margin-top:20px;
       height: calc(100vh - 290px);
       height: calc(100vh - 290px);
       overflow-y: scroll;
       overflow-y: scroll;
+      margin-right:8px;
       &::-webkit-scrollbar-track{
       &::-webkit-scrollbar-track{
         display: none;
         display: none;
       }
       }

+ 1 - 0
src/views/ppt_manage/newVersion/pptEnCatalog.vue

@@ -1332,6 +1332,7 @@ export default {
       margin-top:20px;
       margin-top:20px;
       height: calc(100vh - 290px);
       height: calc(100vh - 290px);
       overflow-y: scroll;
       overflow-y: scroll;
+      margin-right:8px;
       &::-webkit-scrollbar-track{
       &::-webkit-scrollbar-track{
         display: none;
         display: none;
       }
       }

+ 6 - 2
src/views/predictEdb_manage/predictEdb.vue

@@ -14,8 +14,12 @@
 							type="primary" @click="addEdbHandle"><!-- 添加指标 -->{{$t('EtaBasePage.add_edb_btn')}}</el-button>
 							type="primary" @click="addEdbHandle"><!-- 添加指标 -->{{$t('EtaBasePage.add_edb_btn')}}</el-button>
 						<el-button v-permission="permissionBtn.predictEdbPermission.edbPreData_calcuEdb"
 						<el-button v-permission="permissionBtn.predictEdbPermission.edbPreData_calcuEdb"
 							type="primary" @click="addComputedHandler" style="margin-right:10px;"><!-- 计算指标 -->{{$t('EtaBasePage.calculation_edb_btn')}}</el-button>
 							type="primary" @click="addComputedHandler" style="margin-right:10px;"><!-- 计算指标 -->{{$t('EtaBasePage.calculation_edb_btn')}}</el-button>
-						<!-- <change-lang v-permission="permissionBtn.predictEdbPermission.edbPreData_switchEn"
+						<change-lang 
-							:lang="currentLang" style="height: 32px;" @changeLang="changeLangHandle"/> -->
+							v-permission="permissionBtn.predictEdbPermission.edbPreData_switchEn"
+							:lang="currentLang" 
+							style="height: 32px;" 
+							@changeLang="changeLangHandle"
+						/>
 				</div>
 				</div>
 				<div class="search-cont" v-loading="searchLoading">
 				<div class="search-cont" v-loading="searchLoading">
 					<el-select
 					<el-select

+ 2 - 2
src/views/report_manage/addreportNew.vue

@@ -407,7 +407,7 @@ export default {
 				classifynameArr: [],
 				classifynameArr: [],
 				title: '',
 				title: '',
 				abstract: '',
 				abstract: '',
-				author: ['FICC团队'],
+				author: ['投研团队'],
 				frequency: '日度',
 				frequency: '日度',
 				create_time: http.dateFormatter(new Date(), false).replace(/\./g,'-'),
 				create_time: http.dateFormatter(new Date(), false).replace(/\./g,'-'),
 				content: '',
 				content: '',
@@ -922,7 +922,7 @@ export default {
 					classifynameArr: [],
 					classifynameArr: [],
 					title: '',
 					title: '',
 					abstract: '',
 					abstract: '',
-					author: ['FICC团队'],
+					author: ['投研团队'],
 					frequency: this.$t('ReportManage.smart_daily'),
 					frequency: this.$t('ReportManage.smart_daily'),
 					create_time: http.dateFormatter(new Date(), false),
 					create_time: http.dateFormatter(new Date(), false),
 					content: '',
 					content: '',

+ 37 - 2
src/views/report_manage/cloudDisk.vue

@@ -52,7 +52,7 @@
             </template>
             </template>
             <template slot-scope="{row}">
             <template slot-scope="{row}">
               <div class="file-name">
               <div class="file-name">
-                <img :src="row.ItemIcon" />
+                <img :src="iconGetMap(row)" />
                 <span class="active-file-name">{{ row.ItemName }}</span>
                 <span class="active-file-name">{{ row.ItemName }}</span>
               </div>
               </div>
             </template>
             </template>
@@ -195,7 +195,17 @@ import 'streamsaver/examples/zip-stream'
         isUploading:false,
         isUploading:false,
         folderPath:'',
         folderPath:'',
         // 选择文件弹窗
         // 选择文件弹窗
-        chooseFolderDiaShow:false
+        chooseFolderDiaShow:false,
+
+        staticFileIco: require('@/assets/img/cloudDisk/file_icon.png'),
+        staticImageIco: require('@/assets/img/cloudDisk/img_icon.png'),
+        staticWordIco: require('@/assets/img/cloudDisk/word_icon.png'),
+        staticExcelIco: require('@/assets/img/cloudDisk/excel_icon.png'),
+        staticPptIco: require('@/assets/img/cloudDisk/ppt_icon.png'),
+        staticPdfIco: require('@/assets/img/cloudDisk/pdf_icon.png'),
+        staticVideoIco: require('@/assets/img/cloudDisk/video_icon.png'),
+        staticAudioIco: require('@/assets/img/cloudDisk/audio_icon.png'),
+        staticConfigIco: require('@/assets/img/cloudDisk/config_icon.png'),
       }
       }
     },
     },
     watch:{
     watch:{
@@ -449,6 +459,7 @@ import 'streamsaver/examples/zip-stream'
       },
       },
       // 下载文件
       // 下载文件
       downloadFile(row){
       downloadFile(row){
+        if(row.Size === 0) return this.$message.warning('文件夹为空')
         let downloadHint = this.$message({
         let downloadHint = this.$message({
           type:"info",
           type:"info",
           message:row.ItemName+'开始下载,请勿重复下载',
           message:row.ItemName+'开始下载,请勿重复下载',
@@ -679,6 +690,30 @@ import 'streamsaver/examples/zip-stream'
           this.downloadFile(row)
           this.downloadFile(row)
         }
         }
         // console.log(type,row);
         // console.log(type,row);
+      },
+
+      //静态icon资源
+      iconGetMap(item) {
+
+        //文件夹icon
+        if(item.ItemIcon.includes('file_type_menu')) return this.staticFileIco
+        //img icon
+        if(item.ItemIcon.includes('file_type_pic')) return this.staticImageIco
+        //其他icon
+        if(item.ItemIcon.includes('file_type_unknown')) return this.staticConfigIco
+        //音频icon
+        if(item.ItemIcon.includes('file_type_audio')) return this.staticAudioIco
+        //视频icon
+        if(item.ItemIcon.includes('file_type_video')) return this.staticVideoIco
+        //word icon
+        if(item.ItemIcon.includes('file_type_docx')) return this.staticWordIco
+        //excel icon
+        if(item.ItemIcon.includes('file_type_xlsx')) return this.staticExcelIco
+        //ppt icon
+        if(item.ItemIcon.includes('file_type_ppt')) return this.staticPptIco
+        //pdf icon
+        if(item.ItemIcon.includes('file_type_pdf')) return this.staticPdfIco
+
       }
       }
     },
     },
     created(){
     created(){

+ 1 - 1
src/views/report_manage/editreportNew.vue

@@ -404,7 +404,7 @@ export default {
 				classifynameArr: [],
 				classifynameArr: [],
 				title: '',
 				title: '',
 				abstract: '',
 				abstract: '',
-				author: ['FICC团队'],
+				author: ['投研团队'],
 				frequency: '日度',
 				frequency: '日度',
 				create_time: http.dateFormatter(new Date(), false),
 				create_time: http.dateFormatter(new Date(), false),
 				content: '',
 				content: '',

+ 1 - 1
src/views/report_manage/mixins/editor.js

@@ -42,7 +42,7 @@ export default {
           "redo",
           "redo",
         ],
         ],
         height: 800,
         height: 800,
-        fontSize: ["12", "14", "16", "18", "20", "24", "28", "32", "36", "40"],
+        fontSize: ["12", "13","14","15", "16", "18", "20", "24", "28", "32", "36", "40"],
         fontSizeDefaultSelection: "16",
         fontSizeDefaultSelection: "16",
         theme: "dark", //主题
         theme: "dark", //主题
         placeholderText: "请输入内容",
         placeholderText: "请输入内容",

+ 1 - 1
src/views/report_manage/mixins/reportMixin.js

@@ -92,7 +92,7 @@ export default {
           "redo",
           "redo",
         ],
         ],
         height: 800,
         height: 800,
-        fontSize: ["12", "14", "16", "18", "20", "24", "28", "32", "36", "40"],
+        fontSize: ["12", "13","14","15", "16", "18", "20", "24", "28", "32", "36", "40"],
         fontSizeDefaultSelection: "16",
         fontSizeDefaultSelection: "16",
         theme: "dark", //主题
         theme: "dark", //主题
         placeholderText: "请输入内容",
         placeholderText: "请输入内容",

+ 2 - 2
src/views/report_manage/reportEn/reportEditor.vue

@@ -419,7 +419,7 @@ export default {
 				classifynameArr: [],
 				classifynameArr: [],
 				title: '',
 				title: '',
 				abstract: '',
 				abstract: '',
-				author: ['Horizon Insights FICC Team'],
+				author: ['Investment Research Team'],
 				frequency: '日度',
 				frequency: '日度',
 				create_time: http.dateFormatter(new Date(), false),
 				create_time: http.dateFormatter(new Date(), false),
 				content: '',
 				content: '',
@@ -489,7 +489,7 @@ export default {
 					'undo',
 					'undo',
 					'redo',
 					'redo',
         ],
         ],
-        fontSize: ["12", "14", "16", "18", "20", "24", "28", "32", "36", "40"],
+        fontSize: ["12", "13","14","15", "16", "18", "20", "24", "28", "32", "36", "40"],
         height:300,
         height:300,
         fontSizeDefaultSelection: "16",
         fontSizeDefaultSelection: "16",
         quickInsertEnabled: false,
         quickInsertEnabled: false,

+ 19 - 23
src/views/resetpassword.vue

@@ -2,7 +2,7 @@
   <div>
   <div>
     <el-card class="box-card">
     <el-card class="box-card">
       <div slot="header" class="clearfix">
       <div slot="header" class="clearfix">
-        <b>修改密码</b>
+        <b><!-- 修改密码 -->{{ $t('MainPage.tab_reset_pwd') }}</b>
       </div>
       </div>
       <el-form
       <el-form
         :model="addForm"
         :model="addForm"
@@ -11,76 +11,72 @@
         ref="addForm"
         ref="addForm"
         style="width: 500px"
         style="width: 500px"
       >
       >
-        <el-form-item label="原密码" prop="OldPwd">
+        <el-form-item :label="$t('ResetPwdPage.label_old_pwd')" prop="OldPwd">
           <el-input
           <el-input
             type="text"
             type="text"
             v-model="addForm.OldPwd"
             v-model="addForm.OldPwd"
-            placeholder="请输入不超过20个字符"
+            :placeholder="$t('ResetPwdPage.ph_pwd')"
             clearable
             clearable
             autocomplete="new-password"
             autocomplete="new-password"
           ></el-input>
           ></el-input>
         </el-form-item>
         </el-form-item>
-        <el-form-item label="新密码" prop="NewPwd" v-if="visible">
+        <el-form-item :label="$t('ResetPwdPage.label_new_pwd')" prop="NewPwd" v-if="visible">
           <el-input
           <el-input
             type="password"
             type="password"
             v-model="addForm.NewPwd"
             v-model="addForm.NewPwd"
-            placeholder="请输入长度不超过20个字符"
+            :placeholder="$t('ResetPwdPage.ph_pwd')"
             maxlength="20"
             maxlength="20"
             autocomplete="new-password"
             autocomplete="new-password"
           >
           >
             <i
             <i
               slot="suffix"
               slot="suffix"
               class="el-icon-view el-input__icon"
               class="el-icon-view el-input__icon"
-              title="显示密码"
               @click="changePass('show')"
               @click="changePass('show')"
               style="cursor: pointer"
               style="cursor: pointer"
             ></i>
             ></i>
           </el-input>
           </el-input>
         </el-form-item>
         </el-form-item>
-        <el-form-item label="新密码" prop="NewPwd" v-else>
+        <el-form-item :label="$t('ResetPwdPage.label_new_pwd')" prop="NewPwd" v-else>
           <el-input
           <el-input
             type="text"
             type="text"
             v-model="addForm.NewPwd"
             v-model="addForm.NewPwd"
-            placeholder="请输入长度不超过20个字符"
+            :placeholder="$t('ResetPwdPage.ph_pwd')"
             maxlength="20"
             maxlength="20"
             autocomplete="new-password"
             autocomplete="new-password"
           >
           >
             <i
             <i
               slot="suffix"
               slot="suffix"
               class="el-icon-more el-input__icon"
               class="el-icon-more el-input__icon"
-              title="隐藏密码"
               @click="changePass('hide')"
               @click="changePass('hide')"
               style="cursor: pointer"
               style="cursor: pointer"
             ></i>
             ></i>
           </el-input>
           </el-input>
         </el-form-item>
         </el-form-item>
-        <el-form-item label="确认新密码" prop="twoNewPwd" v-if="twovisible">
+        <el-form-item :label="$t('ResetPwdPage.label_ensure_pwd')" prop="twoNewPwd" v-if="twovisible">
           <el-input
           <el-input
             type="password"
             type="password"
             v-model="addForm.twoNewPwd"
             v-model="addForm.twoNewPwd"
-            placeholder="请输入长度不超过20个字符"
+            :placeholder="$t('ResetPwdPage.ph_pwd')"
             maxlength="20"
             maxlength="20"
           >
           >
             <i
             <i
               slot="suffix"
               slot="suffix"
               class="el-icon-view el-input__icon"
               class="el-icon-view el-input__icon"
-              title="显示密码"
               @click="changetwoPass('show')"
               @click="changetwoPass('show')"
               style="cursor: pointer"
               style="cursor: pointer"
             ></i>
             ></i>
           </el-input>
           </el-input>
         </el-form-item>
         </el-form-item>
-        <el-form-item label="确认新密码" prop="twoNewPwd" v-else>
+        <el-form-item :label="$t('ResetPwdPage.label_ensure_pwd')" prop="twoNewPwd" v-else>
           <el-input
           <el-input
             type="text"
             type="text"
             v-model="addForm.twoNewPwd"
             v-model="addForm.twoNewPwd"
-            placeholder="请输入长度不超过20个字符"
+            :placeholder="$t('ResetPwdPage.ph_pwd')"
             maxlength="20"
             maxlength="20"
           >
           >
             <i
             <i
               slot="suffix"
               slot="suffix"
               class="el-icon-more el-input__icon"
               class="el-icon-more el-input__icon"
-              title="隐藏密码"
               @click="changetwoPass('hide')"
               @click="changetwoPass('hide')"
               style="cursor: pointer"
               style="cursor: pointer"
             ></i>
             ></i>
@@ -88,14 +84,14 @@
         </el-form-item>
         </el-form-item>
         <el-form-item style="text-align: center;">
         <el-form-item style="text-align: center;">
           <el-button type="primary" size="medium" @click.native="addSubmit"
           <el-button type="primary" size="medium" @click.native="addSubmit"
-            >确定</el-button
+            ><!-- 确定 -->{{ $t('Dialog.confirm_btn') }}</el-button
           >
           >
           <el-button
           <el-button
             type="primary"
             type="primary"
             size="medium"
             size="medium"
             plain
             plain
             @click.native="historyBack"
             @click.native="historyBack"
-            >返回</el-button
+            ><!-- 返回 -->{{ $t('Dialog.back_btn') }}</el-button
           >
           >
         </el-form-item>
         </el-form-item>
       </el-form>
       </el-form>
@@ -122,7 +118,7 @@ export default {
         OldPwd: [
         OldPwd: [
           {
           {
             required: true,
             required: true,
-            message: "请输入原密码",
+            message: /* "请输入原密码" */ this.$t('ResetPwdPage.vaild_old'),
             trigger: "blur",
             trigger: "blur",
           },
           },
         ],
         ],
@@ -130,7 +126,7 @@ export default {
             {
             {
                 validator:(rule,value,callback)=>{
                 validator:(rule,value,callback)=>{
                     if(!checkPassWord(value)){
                     if(!checkPassWord(value)){
-                        callback(new Error('密码要求8位及以上,包含数字、大写字母、小写字母、特殊字符中的三个类型'))
+                        callback(new Error(/* '密码要求8位及以上,包含数字、大写字母、小写字母、特殊字符中的三个类型' */this.$t('ResetPwdPage.vaild_rule')))
                     }else{
                     }else{
                         callback()
                         callback()
                     }
                     }
@@ -138,14 +134,14 @@ export default {
             },
             },
           {
           {
             required: true,
             required: true,
-            message: "请输入确认密码",
+            message: /* "请输入确认密码" */this.$t('ResetPwdPage.vaild_new'),
             trigger: "blur",
             trigger: "blur",
           },
           },
         ],
         ],
         twoNewPwd: [
         twoNewPwd: [
           {
           {
             required: true,
             required: true,
-            message: "请输入确认密码",
+            message: /* "请输入确认密码" */this.$t('ResetPwdPage.vaild_new'),
             trigger: "blur",
             trigger: "blur",
           },
           },
         ],
         ],
@@ -165,7 +161,7 @@ export default {
         if (valid) {
         if (valid) {
           let that = this;
           let that = this;
           if (that.addForm.NewPwd != that.addForm.twoNewPwd) {
           if (that.addForm.NewPwd != that.addForm.twoNewPwd) {
-            that.$message.warning("新密码两次输入不一致,请核对!");
+            that.$message.warning(/* "新密码两次输入不一致,请核对!"  */this.$t('ResetPwdPage.vaild_same'));
             return false;
             return false;
           }
           }
           modifyPwd({
           modifyPwd({
@@ -173,7 +169,7 @@ export default {
             NewPwd: md5.hex_md5(that.addForm.NewPwd),
             NewPwd: md5.hex_md5(that.addForm.NewPwd),
           }).then((res) => {
           }).then((res) => {
             if (res.Ret == 200) {
             if (res.Ret == 200) {
-              that.$message.success("修改密码成功,请重新登录!");
+              that.$message.success(/* "修改密码成功,请重新登录!" */ this.$t('ResetPwdPage.edit_pwd_msg'));
               setTimeout(function () {
               setTimeout(function () {
                 localStorage.setItem("auth", "");
                 localStorage.setItem("auth", "");
                 localStorage.setItem("userName", "");
                 localStorage.setItem("userName", "");

+ 6 - 8
src/views/sandbox_manage/common/mindmap.js

@@ -58,8 +58,7 @@ export default {
             refY2: -8,
             refY2: -8,
             width: 16,
             width: 16,
             height: 16,
             height: 16,
-            'xlink:href':
+            'xlink:href':require('@/assets/img/icons/add_blue_new.png'),
-              'https://gw.alipayobjects.com/mdn/rms_43231b/afts/img/A*SYCuQ6HHs5cAAAAAAAAAAAAAARQnAQ',
             event: 'add:topic:left',
             event: 'add:topic:left',
             class: 'left-topic-image',
             class: 'left-topic-image',
           },
           },
@@ -70,8 +69,7 @@ export default {
             refY2: -8,
             refY2: -8,
             width: 16,
             width: 16,
             height: 16,
             height: 16,
-            'xlink:href':
+            'xlink:href':require('@/assets/img/icons/add_blue_new.png'),
-              'https://gw.alipayobjects.com/mdn/rms_43231b/afts/img/A*SYCuQ6HHs5cAAAAAAAAAAAAAARQnAQ',
             event: 'add:topic:right',
             event: 'add:topic:right',
             class: 'right-topic-image',
             class: 'right-topic-image',
           },
           },
@@ -124,8 +122,7 @@ export default {
             refY2: -8,
             refY2: -8,
             width: 16,
             width: 16,
             height: 16,
             height: 16,
-            'xlink:href':
+            'xlink:href':require('@/assets/img/icons/add_blue_new.png'),
-              'https://gw.alipayobjects.com/mdn/rms_43231b/afts/img/A*SYCuQ6HHs5cAAAAAAAAAAAAAARQnAQ',
             event: 'add:topic:left',
             event: 'add:topic:left',
             class: 'left-topic-image',
             class: 'left-topic-image',
           },
           },
@@ -178,8 +175,9 @@ export default {
             refY2: -8,
             refY2: -8,
             width: 16,
             width: 16,
             height: 16,
             height: 16,
-            'xlink:href':
+            'xlink:href':require('@/assets/img/icons/add_blue_new.png'),
-              'https://gw.alipayobjects.com/mdn/rms_43231b/afts/img/A*SYCuQ6HHs5cAAAAAAAAAAAAAARQnAQ',
+            // 'xlink:href':
+            // 'https://gw.alipayobjects.com/mdn/rms_43231b/afts/img/A*SYCuQ6HHs5cAAAAAAAAAAAAAARQnAQ',
             event: 'add:topic:right',
             event: 'add:topic:right',
             class: 'right-topic-image',
             class: 'right-topic-image',
           },
           },

+ 3 - 3
src/views/sandbox_manage/common/toolConfig.js

@@ -23,9 +23,9 @@ export let configOpt = {
 export const colorsOptions = ['#333','#5B9BD5','#f00','#fff','#00f','#000','#00FFFF','#70DB93','#9F5F9F','#A67D3D','#5F9F9F']
 export const colorsOptions = ['#333','#5B9BD5','#f00','#fff','#00f','#000','#00FFFF','#70DB93','#9F5F9F','#A67D3D','#5F9F9F']
 
 
 export const familyOptions = [
 export const familyOptions = [
-	{name:'微软雅黑',value:'微软雅黑'},
+	{name:localStorage.getItem('i18n')=='zh'?'微软雅黑':'Microsoft YaHei',value:'微软雅黑'},
-	{name:'宋体',value:'宋体'},
+	{name:localStorage.getItem('i18n')=='zh'?'宋体':'SimSun',value:'宋体'},
-	{name:'黑体',value:'黑体'}
+	{name:localStorage.getItem('i18n')=='zh'?'黑体':'SimHei',value:'黑体'}
 ]
 ]
 export const fontSizeOptions = [
 export const fontSizeOptions = [
 	{name:'12px',value:12},
 	{name:'12px',value:12},

+ 17 - 30
src/views/sandbox_manage/index_new_version.vue

@@ -138,7 +138,7 @@
 							:options="classifyArr"
 							:options="classifyArr"
 							:props="classifyProps"
 							:props="classifyProps"
 							v-model="classifyForm.ChartPermissionId" 
 							v-model="classifyForm.ChartPermissionId" 
-							placeholder="请选择对应品种" 
+							:placeholder="this.$t('SandboxManage.SandList.catalog_variety_placeholder')" 
               id="classifyAddCascader"
               id="classifyAddCascader"
               ref="chartPermissionCascader"
               ref="chartPermissionCascader"
               :disabled="(classifyForm.SandboxClassifyId && classifyForm.Level!=1) || (!classifyForm.SandboxClassifyId && classifyForm.Level!=0)"
               :disabled="(classifyForm.SandboxClassifyId && classifyForm.Level!=1) || (!classifyForm.SandboxClassifyId && classifyForm.Level!=0)"
@@ -302,7 +302,7 @@ import { myGraph } from './common/gragh';
         },
         },
         classifyFormRules:{
         classifyFormRules:{
           SandboxClassifyName:{required: true, message:this.$t('SandboxManage.SandList.catalog_name_placeholder')||'请输入目录名称', trigger: 'blur'},
           SandboxClassifyName:{required: true, message:this.$t('SandboxManage.SandList.catalog_name_placeholder')||'请输入目录名称', trigger: 'blur'},
-          ChartPermissionId:{required: true, message:'请选择对应品种', trigger: 'change'}
+          ChartPermissionId:{required: true, message:this.$t('SandboxManage.SandList.catalog_variety_placeholder')||'请选择对应品种', trigger: 'change'}
         },
         },
         classifyProps: {
         classifyProps: {
           children: 'Items',
           children: 'Items',
@@ -873,7 +873,7 @@ import { myGraph } from './common/gragh';
             });
             });
           }else {
           }else {
             this.lockLoding && this.lockLoding.close();
             this.lockLoding && this.lockLoding.close();
-            this.$message.warning(this.$t('MsgPrompt.http_not_support'))
+            this.$message.warning(this.$t('MsgPrompt.http_not_support')||'当前协议暂不支持,仅支持https协议')
           }
           }
         }
         }
       },500),
       },500),
@@ -998,6 +998,11 @@ import { myGraph } from './common/gragh';
             },{
             },{
               preserveDimensions:true,//让svg为实际图片大小
               preserveDimensions:true,//让svg为实际图片大小
               beforeSerialize:(svg)=>{
               beforeSerialize:(svg)=>{
+                let shouldRemoveElement = svg.querySelectorAll('.right-topic-image,.left-topic-image')
+                for (let i = 0; i < shouldRemoveElement.length; i++) {
+                  const element = shouldRemoveElement[i];
+                  element.remove()
+                }
                 // const zoom = this.graph.zoom();
                 // const zoom = this.graph.zoom();
                 const {x,y,width,height} = this.graph.getContentBBox(cells)
                 const {x,y,width,height} = this.graph.getContentBBox(cells)
                 // let {tx,ty} = this.graph.translate() // 画布偏移量
                 // let {tx,ty} = this.graph.translate() // 画布偏移量
@@ -1017,20 +1022,7 @@ import { myGraph } from './common/gragh';
                 // gNode.appendChild(textNode)
                 // gNode.appendChild(textNode)
                   },
                   },
               copyStyles:false,
               copyStyles:false,
-              stylesheet: `
+              stylesheet: `svg{background-color:white;} .x6-port{visibility: hidden;}` 
-                  svg{
-                      background-color:white;
-                  }
-                .x6-port {
-                    visibility: hidden;
-                }
-                .left-topic-image{
-                  visibility:hidden;
-                }
-                .right-topic-image{
-                  visibility: hidden;
-                }
-                ` 
             })
             })
           }
           }
         })
         })
@@ -1093,6 +1085,11 @@ import { myGraph } from './common/gragh';
       },{
       },{
         preserveDimensions:true,//让svg为实际图片大小
         preserveDimensions:true,//让svg为实际图片大小
         beforeSerialize:(svg)=>{
         beforeSerialize:(svg)=>{
+          let shouldRemoveElement = svg.querySelectorAll('.right-topic-image,.left-topic-image')
+          for (let i = 0; i < shouldRemoveElement.length; i++) {
+            const element = shouldRemoveElement[i];
+            element.remove()
+          }
           const {x,y,width,height} = this.graph.getContentBBox(cells)
           const {x,y,width,height} = this.graph.getContentBBox(cells)
           // let {tx,ty} = this.graph.translate()
           // let {tx,ty} = this.graph.translate()
           //给导出的svg增加一点宽高
           //给导出的svg增加一点宽高
@@ -1110,19 +1107,7 @@ import { myGraph } from './common/gragh';
           // gNode.appendChild(textNode)
           // gNode.appendChild(textNode)
             },
             },
           copyStyles:false,
           copyStyles:false,
-          stylesheet: `
+          stylesheet: `svg{background-color:white;} .x6-port{visibility: hidden;}` 
-            svg{
-                background-color:white;
-            }
-          .x6-port {
-              visibility: hidden;
-          }
-          .left-topic-image{
-            visibility:hidden;
-          }
-          .right-topic-image{
-            visibility: hidden;
-          }` 
         })
         })
       },500),
       },500),
       //==============================画布
       //==============================画布
@@ -1243,6 +1228,7 @@ import { myGraph } from './common/gragh';
       border-bottom: solid 1px #DCDFE6;
       border-bottom: solid 1px #DCDFE6;
       box-shadow: 0px 2px 12px 0px rgba($color: #000000, $alpha: 0.08);
       box-shadow: 0px 2px 12px 0px rgba($color: #000000, $alpha: 0.08);
       display: flex;
       display: flex;
+      flex-wrap: wrap;
       align-items: center;
       align-items: center;
       justify-content: space-between;
       justify-content: space-between;
     }
     }
@@ -1255,6 +1241,7 @@ import { myGraph } from './common/gragh';
         padding: 0 20px;
         padding: 0 20px;
         overflow: auto;
         overflow: auto;
         scroll-behavior: smooth;
         scroll-behavior: smooth;
+        margin-right: 20px;
         .add-classify{
         .add-classify{
           margin: 30px 0 50px;
           margin: 30px 0 50px;
           display: flex;
           display: flex;

+ 2 - 1
src/views/sandbox_manage/sandFlowNew/components/addLInkDia.vue

@@ -388,7 +388,8 @@ import { dataBaseInterface,reportlist} from '@/api/api.js';
         if (res.Ret !== 200) return;
         if (res.Ret !== 200) return;
         this.chartInfo = res.Data.ChartInfo || {}
         this.chartInfo = res.Data.ChartInfo || {}
         this.edbData = res.Data.EdbInfoList|| []
         this.edbData = res.Data.EdbInfoList|| []
-
+        //初始化上下限
+        this.setLimitData(this.edbData)
         const chartTypeMap = {
         const chartTypeMap = {
           7: this.initBarData, //柱形图
           7: this.initBarData, //柱形图
           10: this.initSectionScatterData //截面散点
           10: this.initSectionScatterData //截面散点

+ 39 - 30
src/views/sandbox_manage/sandFlowNew/index.vue

@@ -187,6 +187,30 @@
               />
               />
             </el-tooltip>
             </el-tooltip>
           </div>
           </div>
+          <div class="sand-tool-item">
+            <el-dropdown trigger="click" @command="(e)=>toolClickOptions('changeLineHeight',nodeTextDisable,e)" 
+              placement="bottom">
+              <div :class="nodeTextDisable?'tool-disabled':''" class="dropdown-box">
+                <el-tooltip content="文本行高" placement="top" :open-delay="250">
+                  <div class="dropdown-content"  >
+                    <img :src="nodeTextDisable? 
+                      require('@/assets/img/sand_new/tools/line-height-disabled.png'):
+                      require('@/assets/img/sand_new/tools/line-height.png')" 
+                      style="vertical-align: middle;"/>
+                  </div>
+                </el-tooltip>
+                <el-tooltip content="文本行高" placement="top" :open-delay="250">
+                  <span v-show="nodeTextDisable" class="disabled-item" @click.stop="()=>{}"></span>
+                </el-tooltip>
+              </div>
+              <el-dropdown-menu slot="dropdown">
+                <el-dropdown-item v-for="s in lineHeightOptions" :command="s" :key="s"
+                :class="styleOptions.lineHeight==s?'style-acitve':''">
+                    {{ s }}
+                </el-dropdown-item>
+              </el-dropdown-menu>
+            </el-dropdown>
+          </div>
           <div class="sand-tool-item">
           <div class="sand-tool-item">
             <el-dropdown trigger="click" @command="(e)=>toolClickOptions('changeTextAlign',nodeTextDisable,e)" 
             <el-dropdown trigger="click" @command="(e)=>toolClickOptions('changeTextAlign',nodeTextDisable,e)" 
               placement="bottom">
               placement="bottom">
@@ -886,6 +910,12 @@ import addLInkDia from './components/addLInkDia.vue';
         },{
         },{
           preserveDimensions:false,//让svg为实际图片大小
           preserveDimensions:false,//让svg为实际图片大小
           beforeSerialize:(svg)=>{
           beforeSerialize:(svg)=>{
+            let shouldRemoveElement = svg.querySelectorAll('.right-topic-image,.left-topic-image')
+            for (let i = 0; i < shouldRemoveElement.length; i++) {
+              const element = shouldRemoveElement[i];
+              element.remove()
+            }
+
             const {x,y,width,height} = this.graph.getContentBBox(cells)
             const {x,y,width,height} = this.graph.getContentBBox(cells)
             // let {tx,ty} = this.graph.translate()
             // let {tx,ty} = this.graph.translate()
             //给导出的svg增加一点宽高
             //给导出的svg增加一点宽高
@@ -894,7 +924,6 @@ import addLInkDia from './components/addLInkDia.vue';
             //设置viewBox使图像居中
             //设置viewBox使图像居中
             svg.setAttribute('viewBox',`${x-25} ${y-25} ${width+50} ${height+50}`)
             svg.setAttribute('viewBox',`${x-25} ${y-25} ${width+50} ${height+50}`)
             // let gNode = svg.getElementsByClassName('x6-graph-svg-viewport')[0]
             // let gNode = svg.getElementsByClassName('x6-graph-svg-viewport')[0]
-            // console.log(leftImg,rightImg,'rightImg');
 
 
             // let textNode = document.createElement('text')
             // let textNode = document.createElement('text')
             // textNode.setAttribute('x',x-tx+width-90)
             // textNode.setAttribute('x',x-tx+width-90)
@@ -905,27 +934,15 @@ import addLInkDia from './components/addLInkDia.vue';
             // gNode.appendChild(textNode)
             // gNode.appendChild(textNode)
               },
               },
           copyStyles:false,
           copyStyles:false,
-          stylesheet: `
+          stylesheet: `svg{background-color:white;} .x6-port{visibility: hidden;}` 
-              svg{
-                  background-color:white;
-              }
-            .x6-port {
-                visibility: hidden;
-            }
-            .left-topic-image{
-              visibility:hidden;
-            }
-            .right-topic-image{
-              visibility: hidden;
-            }` 
             
             
         })
         })
       },500),
       },500),
       saveChart: _.debounce(function(callback=null) {
       saveChart: _.debounce(function(callback=null) {
         if(!this.sandSaveParams.Name) 
         if(!this.sandSaveParams.Name) 
-          return this.$message.warning('请填写逻辑图名称');
+          return this.$message.warning(this.$t('SandboxManage.SandList.add_diagram_msg01'));
         if(!this.sandSaveParams.SandboxClassifyId) 
         if(!this.sandSaveParams.SandboxClassifyId) 
-          return this.$message.warning('请选择所属分类');
+          return this.$message.warning(this.$t('SandboxManage.SandList.select_categories_msg'));
 
 
         if(!this.graph.toJSON().cells.length) return this.$message.warning('请绘制画布内容');
         if(!this.graph.toJSON().cells.length) return this.$message.warning('请绘制画布内容');
 
 
@@ -979,6 +996,11 @@ import addLInkDia from './components/addLInkDia.vue';
         },{
         },{
           preserveDimensions:true,//让svg为实际图片大小
           preserveDimensions:true,//让svg为实际图片大小
           beforeSerialize:(svg)=>{
           beforeSerialize:(svg)=>{
+            let shouldRemoveElement = svg.querySelectorAll('.right-topic-image,.left-topic-image')
+            for (let i = 0; i < shouldRemoveElement.length; i++) {
+              const element = shouldRemoveElement[i];
+              element.remove()
+            }
             // const zoom = this.graph.zoom();
             // const zoom = this.graph.zoom();
             const {x,y,width,height} = this.graph.getContentBBox(cells)
             const {x,y,width,height} = this.graph.getContentBBox(cells)
             // let {tx,ty} = this.graph.translate() // 画布偏移量
             // let {tx,ty} = this.graph.translate() // 画布偏移量
@@ -998,20 +1020,7 @@ import addLInkDia from './components/addLInkDia.vue';
             // gNode.appendChild(textNode)
             // gNode.appendChild(textNode)
               },
               },
           copyStyles:false,
           copyStyles:false,
-          stylesheet: `
+          stylesheet: `svg{background-color:white;} .x6-port{visibility: hidden;}` 
-              svg{
-                  background-color:white;
-              }
-            .x6-port {
-                visibility: hidden;
-            }
-            .left-topic-image{
-              visibility:hidden;
-            }
-            .right-topic-image{
-              visibility: hidden;
-            }
-            ` 
         })
         })
           
           
       },500),
       },500),

+ 2 - 2
src/views/smartReport/components/BaseInfo.vue

@@ -116,7 +116,7 @@ export default {
                 this.formData.classify=[]
                 this.formData.classify=[]
                 this.formData.title=''
                 this.formData.title=''
                 this.formData.abstract=''
                 this.formData.abstract=''
-                this.formData.author=['FICC团队']
+                this.formData.author=['投研团队']
                 this.formData.frequency='日度'
                 this.formData.frequency='日度'
                 this.formData.time=this.$moment().format('YYYY-MM-DD')
                 this.formData.time=this.$moment().format('YYYY-MM-DD')
             }else{
             }else{
@@ -146,7 +146,7 @@ export default {
                 classify:[],
                 classify:[],
                 title:'',
                 title:'',
                 abstract:'',
                 abstract:'',
-                author:['FICC团队'],
+                author:['投研团队'],
                 frequency:'日度',
                 frequency:'日度',
                 time:this.$moment().format('YYYY-MM-DD')||''
                 time:this.$moment().format('YYYY-MM-DD')||''
             },
             },

+ 4 - 3
src/views/smartReport/components/ImgSource.vue

@@ -9,11 +9,11 @@
                     class="search-box"
                     class="search-box"
 					:placeholder="$t('ReportManage.ReportList.img_name_ipt')"
 					:placeholder="$t('ReportManage.ReportList.img_name_ipt')"
 					v-model="keyword"
 					v-model="keyword"
-					size="medium"
                     @input="handleSearch"
                     @input="handleSearch"
                     style="width:240px"
                     style="width:240px"
+                    size="medium"
 				/>
 				/>
-                <el-select :placeholder="$t('ReportManage.ReportList.select_img_type')" v-model="type" style="width:240px" @change="handleSearch">
+                <el-select :placeholder="$t('ReportManage.ReportList.select_img_type')" v-model="type" style="width:240px" @change="handleSearch" size="medium">
                     <el-option :label="$t('ReportManage.ReportList.page_header_op')" :value="1"></el-option>
                     <el-option :label="$t('ReportManage.ReportList.page_header_op')" :value="1"></el-option>
                     <el-option :label="$t('ReportManage.ReportList.page_trailer_op')" :value="2"></el-option>
                     <el-option :label="$t('ReportManage.ReportList.page_trailer_op')" :value="2"></el-option>
                 </el-select>
                 </el-select>
@@ -96,6 +96,7 @@ export default {
         handleSearch(){
         handleSearch(){
             this.page=1
             this.page=1
             this.finished=false
             this.finished=false
+            this.selectItem=null
             this.getImgList()
             this.getImgList()
         },
         },
 
 
@@ -113,7 +114,7 @@ export default {
             //     return
             //     return
             // }
             // }
             if(!this.selectItem){
             if(!this.selectItem){
-                this.$message.warning(this.$t('ReportManage.ReportList.select_layout_msg'))
+                this.$message.warning(this.type==1?'请选择版头':'请选择版尾')
                 return
                 return
             }
             }
             this.$emit('change',{
             this.$emit('change',{

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

@@ -59,7 +59,7 @@ export default {
                     "redo",
                     "redo",
                 ],
                 ],
                 height: 800,
                 height: 800,
-                fontSize: ["12", "14", "16", "18", "20", "24", "28", "32", "36", "40"],
+                fontSize: ["12", "13","14","15", "16", "18", "20", "24", "28", "32", "36", "40"],
                 fontSizeDefaultSelection: "16",
                 fontSizeDefaultSelection: "16",
                 theme: "dark", //主题
                 theme: "dark", //主题
                 placeholderText: "请输入内容",
                 placeholderText: "请输入内容",

+ 10 - 5
src/views/system_manage/components/addUserDialog.vue

@@ -28,6 +28,12 @@
                         :label="item.Name" :value="item.Value" />
                         :label="item.Name" :value="item.Value" />
                 </el-select>
                 </el-select>
             </el-form-item>
             </el-form-item>
+            <el-form-item label="用户类型" prop="IsLdap">
+                <el-select v-model="userForm.IsLdap" placeholder="请选择用户类型">
+                    <el-option label="系统用户" :value="0"></el-option>
+                    <el-option label="域用户" :value="1"></el-option>
+                </el-select>
+            </el-form-item>
             <el-form-item :label="$t('SystemManage.DepartManage.user_depart')" prop="depart" v-if="userForm.title == $t('SystemManage.DepartManage.user_add_btn')">
             <el-form-item :label="$t('SystemManage.DepartManage.user_depart')" prop="depart" v-if="userForm.title == $t('SystemManage.DepartManage.user_add_btn')">
                 <el-cascader :options="departArr" v-model="userForm.depart" :props="form_departProp"
                 <el-cascader :options="departArr" v-model="userForm.depart" :props="form_departProp"
                     :placeholder="$t('SystemManage.DepartManage.user_add_placeholder05')" :disabled="userForm.disabledForm" clearable>
                     :placeholder="$t('SystemManage.DepartManage.user_add_placeholder05')" :disabled="userForm.disabledForm" clearable>
@@ -118,14 +124,13 @@ import {patternEmail,isMobileNo,checkPassWord} from '@/utils/commonOptions';
                 pwd:[
                 pwd:[
                     {
                     {
                         validator:(rule,value,callback)=>{
                         validator:(rule,value,callback)=>{
+                            if(this.userForm.IsLdap==1){
+                                callback()
+                                return
+                            }
                             if(value===''){
                             if(value===''){
                                 callback(new Error(this.$t('SystemManage.DepartManage.use_add_valid_msg02')))
                                 callback(new Error(this.$t('SystemManage.DepartManage.use_add_valid_msg02')))
                             }
                             }
-                            if(!checkPassWord(value)){
-                                callback(new Error(this.$t('SystemManage.DepartManage.use_add_valid_msg03')))
-                            }else{
-                                callback()
-                            }
                         }
                         }
                     }
                     }
                 ],
                 ],

+ 15 - 7
src/views/system_manage/departManage.vue

@@ -493,6 +493,7 @@ export default {
 				disabledForm:false,//是否禁用表单的某些选项
 				disabledForm:false,//是否禁用表单的某些选项
 				disabledStatus:false,//是否禁用表单的状态项
 				disabledStatus:false,//是否禁用表单的状态项
 				departmentName:'',//所属一级部门名称
 				departmentName:'',//所属一级部门名称
+				IsLdap:0,//用户类型
 			},//用户弹框表单
 			},//用户弹框表单
 			// 是否有工号
 			// 是否有工号
 			hasEmployeeNo:false,
 			hasEmployeeNo:false,
@@ -986,7 +987,8 @@ export default {
 				email:'',
 				email:'',
 				areacode:'86',
 				areacode:'86',
 				auth:0,
 				auth:0,
-				status:1
+				status:1,
+				IsLdap:0,
 			}
 			}
 		},
 		},
 		// 同步每刻
 		// 同步每刻
@@ -1041,7 +1043,8 @@ export default {
 							Province:this.userForm.province,
 							Province:this.userForm.province,
 							City:this.userForm.city,
 							City:this.userForm.city,
 							Email:this.userForm.email,
 							Email:this.userForm.email,
-							TelAreaCode:this.userForm.areacode
+							TelAreaCode:this.userForm.areacode,
+							IsLdap:this.userForm.IsLdap
 						}
 						}
 						//console.log('testAdd',params)
 						//console.log('testAdd',params)
 						departInterence.addUser(params).then(res => {
 						departInterence.addUser(params).then(res => {
@@ -1064,7 +1067,8 @@ export default {
 									email:'',
 									email:'',
 									areacode:'86',
 									areacode:'86',
 									auth:0,
 									auth:0,
-									status:1
+									status:1,
+									IsLdap:0
 								}
 								}
 								this.getTableUser();
 								this.getTableUser();
 							}
 							}
@@ -1093,7 +1097,8 @@ export default {
 							Province:this.userForm.province,
 							Province:this.userForm.province,
 							City:this.userForm.city,
 							City:this.userForm.city,
 							Email:this.userForm.email,
 							Email:this.userForm.email,
-							TelAreaCode:this.userForm.areacode
+							TelAreaCode:this.userForm.areacode,
+							IsLdap:this.userForm.IsLdap
 						}
 						}
 						//console.log('testEdit',params)
 						//console.log('testEdit',params)
 						departInterence.editUser(params).then(res => {
 						departInterence.editUser(params).then(res => {
@@ -1116,7 +1121,8 @@ export default {
 									email:'',
 									email:'',
 									areacode:'86',
 									areacode:'86',
 									auth:0,
 									auth:0,
-									status:1
+									status:1,
+									IsLdap:0
 								}
 								}
 								this.getTableUser();
 								this.getTableUser();
 							}
 							}
@@ -1158,7 +1164,8 @@ export default {
 					email:'',
 					email:'',
 					areacode:'86',
 					areacode:'86',
 					auth:'无',
 					auth:'无',
-					status:1
+					status:1,
+					IsLdap:0
 				},
 				},
 				this.$refs.addUserDialog.$refs.userForm.resetFields();//重置校验
 				this.$refs.addUserDialog.$refs.userForm.resetFields();//重置校验
 				this.isAddUser = false;
 				this.isAddUser = false;
@@ -1255,7 +1262,8 @@ export default {
         disabledForm:false,
         disabledForm:false,
 				disabledStatus:false,
 				disabledStatus:false,
 				email:item.Email,
 				email:item.Email,
-				areacode:item.TelAreaCode
+				areacode:item.TelAreaCode,
+				IsLdap:item.IsLdap||0
 			}
 			}
 			this.hasEmployeeNo=!!item.EmployeeId
 			this.hasEmployeeNo=!!item.EmployeeId
 			this.isAddUser = true;
 			this.isAddUser = true;

+ 1 - 1
src/vuex/modules/sand.js

@@ -44,7 +44,7 @@ const setSandboxToolStatus=(state,payload)=>{
 				fontStyleSet.add(attrs.text.fontStyle)
 				fontStyleSet.add(attrs.text.fontStyle)
 				textDecorationSet.add(attrs.text.textDecoration)
 				textDecorationSet.add(attrs.text.textDecoration)
 				colorSet.add(attrs.text.fill)
 				colorSet.add(attrs.text.fill)
-				lineHeightSet.add(Math.round((attrs.text.lineHeight/attrs.text.fontSize)*10)/10)
+				lineHeightSet.add(Math.round((attrs.text.lineHeight/attrs.text.fontSize)*100)/100)
 				textAlignSet.add(attrs.text.textAnchor)
 				textAlignSet.add(attrs.text.textAnchor)
 				if(!(element.data) || element.data.key!='text'){
 				if(!(element.data) || element.data.key!='text'){
 					// console.log('不是text');
 					// console.log('不是text');