소스 검색

Merge branch 'master' of http://8.136.199.33:3000/eta_front/eta_front into login_identification

hbchen 1 년 전
부모
커밋
ff6f2f8377
69개의 변경된 파일1420개의 추가작업 그리고 291개의 파일을 삭제
  1. 4 4
      src/App.vue
  2. 9 0
      src/api/modules/chartRelevanceApi.js
  3. 7 0
      src/api/modules/setApi.js
  4. BIN
      src/assets/img/cloudDisk/audio_icon.png
  5. 0 0
      src/assets/img/cloudDisk/config_icon.png
  6. BIN
      src/assets/img/cloudDisk/excel_icon.png
  7. BIN
      src/assets/img/cloudDisk/file_icon.png
  8. BIN
      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. BIN
      src/assets/img/cloudDisk/video_icon.png
  12. BIN
      src/assets/img/cloudDisk/word_icon.png
  13. 1 1
      src/components/chart/chartDetailHandlesWrap.vue
  14. 7 2
      src/views/Login.vue
  15. 11 4
      src/views/chartFrame_manage/frameEditor.vue
  16. 2 0
      src/views/chartRelevance_manage/components/chartCard.vue
  17. 6 2
      src/views/chartRelevance_manage/components/explainText.js
  18. 7 5
      src/views/chartRelevance_manage/crossVarietyAnalysis/chartEditor.vue
  19. 69 6
      src/views/chartRelevance_manage/crossVarietyAnalysis/components/chartFormSection.vue
  20. 73 4
      src/views/chartRelevance_manage/crossVarietyAnalysis/list.vue
  21. 16 2
      src/views/chartRelevance_manage/css/index.scss
  22. 34 1
      src/views/chartRelevance_manage/statistic/statisticFeatureChartEditor.vue
  23. 83 4
      src/views/dataEntry_manage/addChart.vue
  24. 89 8
      src/views/dataEntry_manage/chartSetting.vue
  25. 7 4
      src/views/dataEntry_manage/coal/index.vue
  26. 8 0
      src/views/dataEntry_manage/css/baseTargetPage.scss
  27. 3 2
      src/views/dataEntry_manage/css/coalCommon.scss
  28. 2 2
      src/views/dataEntry_manage/dataEntry.vue
  29. 13 2
      src/views/dataEntry_manage/databaseComponents/addTargetDiaBase.vue
  30. 3 3
      src/views/dataEntry_manage/databaseList.vue
  31. 85 5
      src/views/dataEntry_manage/editChart.vue
  32. 99 7
      src/views/dataEntry_manage/mixins/addOreditMixin.js
  33. 264 14
      src/views/dataEntry_manage/mixins/chartPublic.js
  34. 6 1
      src/views/dataEntry_manage/targetList.vue
  35. 4 3
      src/views/dataEntry_manage/thirdBase/BAIINFOTargetbase.vue
  36. 6 4
      src/views/dataEntry_manage/thirdBase/FwmtData.vue
  37. 4 3
      src/views/dataEntry_manage/thirdBase/SCITargetbase.vue
  38. 10 4
      src/views/dataEntry_manage/thirdBase/YyzxData.vue
  39. 3 2
      src/views/dataEntry_manage/thirdBase/elaSteoBase.vue
  40. 1 0
      src/views/dataEntry_manage/thirdBase/glTargetbase.vue
  41. 1 0
      src/views/dataEntry_manage/thirdBase/lzTargetbase.vue
  42. 4 3
      src/views/dataEntry_manage/thirdBase/smmTargetbase.vue
  43. 4 3
      src/views/dataEntry_manage/thirdBase/steelChemicalbase.vue
  44. 1 0
      src/views/datasheet_manage/customAnalysis/list.vue
  45. 7 3
      src/views/datasheet_manage/sheetList.vue
  46. 107 65
      src/views/mychart_manage/components/chartDetailDia.vue
  47. 1 0
      src/views/mychart_manage/index.vue
  48. 12 11
      src/views/operation_manage/AIQA/AIQA.vue
  49. 8 5
      src/views/operation_manage/AIQA/components/messageItem.vue
  50. 194 11
      src/views/ppt_manage/mixins/mixins.js
  51. 8 4
      src/views/ppt_manage/mixins/pptMixins.js
  52. 1 0
      src/views/ppt_manage/newVersion/pptCatalog.vue
  53. 1 0
      src/views/ppt_manage/newVersion/pptEnCatalog.vue
  54. 2 2
      src/views/report_manage/addreportNew.vue
  55. 37 2
      src/views/report_manage/cloudDisk.vue
  56. 1 1
      src/views/report_manage/editreportNew.vue
  57. 1 1
      src/views/report_manage/mixins/editor.js
  58. 1 1
      src/views/report_manage/mixins/reportMixin.js
  59. 2 2
      src/views/report_manage/reportEn/reportEditor.vue
  60. 6 8
      src/views/sandbox_manage/common/mindmap.js
  61. 13 27
      src/views/sandbox_manage/index_new_version.vue
  62. 2 1
      src/views/sandbox_manage/sandFlowNew/components/addLInkDia.vue
  63. 37 28
      src/views/sandbox_manage/sandFlowNew/index.vue
  64. 2 2
      src/views/smartReport/components/BaseInfo.vue
  65. 4 3
      src/views/smartReport/components/ImgSource.vue
  66. 1 1
      src/views/smartReport/components/TextEdit.vue
  67. 10 0
      src/views/system_manage/components/addUserDialog.vue
  68. 15 7
      src/views/system_manage/departManage.vue
  69. 1 1
      src/vuex/modules/sand.js

+ 4 - 4
src/App.vue

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

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

@@ -1018,5 +1018,14 @@ export const crossVarietyInterface = {
      */
     getTagRelation: 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=>{
 		return http.get('/user_login/area_code/list',params)
 	},
+
+	// 判断用户是否为域用户
+	checkUserIsLdap:params=>{
+		return http.post('/user_login/ldap/user_check',params)
+	},
+
+
 	/**
 	 * 获取登录页的信息 
 	 * @returns ETATitle登录标题 Icp备案信息

BIN
src/assets/img/cloudDisk/audio_icon.png


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


BIN
src/assets/img/cloudDisk/excel_icon.png


BIN
src/assets/img/cloudDisk/file_icon.png


BIN
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


BIN
src/assets/img/cloudDisk/video_icon.png


BIN
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;刷新
       </span>
     </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">
         <i class="el-icon-collection" />&nbsp;保存
       </span>

+ 7 - 2
src/views/Login.vue

@@ -483,14 +483,18 @@ export default {
                 }
             })
         },
-        ordinaryModelLogin(){
+        async ordinaryModelLogin(){
             const {account,checkPass,checked} = this.$refs.ordinaryModel.form
             const t=new Date().getTime()
             const md5key='MiQM9yusNA9T2uIH'
+            // 校验一下是不是域用户
+            let IsLdap=false
+            const checkRes=await departInterence.checkUserIsLdap({UserName:account})
+            if(checkRes.Ret===200&&checkRes.Data) IsLdap=true
             departInterence.userLogin({
                 LoginType:1,
                 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}`
             }).then(res=>{
                 //this.logining = false
@@ -529,6 +533,7 @@ export default {
             departInterence.userLogin({
                 LoginType:2,
                 Mobile:mobile,
+                TelAreaCode:this.$refs[model].areaCodeSelect,
                 VerifyCode:checkCode
             }).then(res=>{
                 if(res.Ret!==200){

+ 11 - 4
src/views/chartFrame_manage/frameEditor.vue

@@ -141,22 +141,29 @@ export default {
                 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())
             if(this.frameId){
                 //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();
                     if(res.Ret!==200) return 
                     this.$message.success("编辑成功")
                 })
             }else{
                 //add 
-                chartFrameInterface.addFrame(this.frameDetail).then(res=>{
+                chartFrameInterface.addFrame({
+                    ...this.frameDetail,
+                    Nodes,
+                }).then(res=>{
                     this.lockLoding.close();
                     if(res.Ret!==200) return 
                     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.$router.replace({path:'/editframe',query:{frameId:this.frameId}})

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

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

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

@@ -29,7 +29,9 @@ export const statisticFeatureListTextArr = [
     `<p style='font-weight:bold;'>标准差处理逻辑:</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>对所选时间范围内的数据,取最大值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>1、在所选时间范围内,取最大值和最小值;</p>
     <p>2、根据频段数划分多个间距相同的区间(左闭右开,最后一个区间为左闭右闭),统计数据值落在每个区间的数据个数;</p>
@@ -40,7 +42,9 @@ export const statisticFeatureListTextArr = [
 //跨品种分析
 export const crossVarietyAnalisisTextArr = [
     `<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>(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.tableData = EdbInfoList;
       this.crossVarietyChartData = DataResp;
+
+      /* 历史数据chartInfo里全是空 兼容下历史数据不崩 */
       this.chartLimit = {
-        min: DataResp.YMinValue,
-        max: DataResp.YMaxValue ,
-        x_min: DataResp.XMinValue,
-        x_max: DataResp.XMaxValue,
+        min: ChartInfo.LeftMin?Number(ChartInfo.LeftMin):Number(DataResp.YMinValue),
+        max: ChartInfo.LeftMax?Number(ChartInfo.LeftMax):Number(DataResp.YMaxValue),
+        x_min: ChartInfo.XMin?Number(ChartInfo.XMin):Number(DataResp.XMinValue),
+        x_max: ChartInfo.XMax?Number(ChartInfo.XMax):Number(DataResp.XMaxValue),
       }
 
       this.setCrossVarietyChart()
@@ -576,7 +578,7 @@ export default {
     overflow-x: auto;
     .chart-min-cont {
       background: #fff;
-      min-width: 880px;
+      min-width: 900px;
       height: calc(100vh - 118px);
       overflow-y: auto;
       display: flex;

+ 69 - 6
src/views/chartRelevance_manage/crossVarietyAnalysis/components/chartFormSection.vue

@@ -29,6 +29,29 @@
           />
         </el-select>
       </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="X轴坐标" prop="TagX">
         <el-select
           v-model="form.TagX"
@@ -41,6 +64,7 @@
             :key="item.ChartTagId"
             :label="item.ChartTagName"
             :value="item.ChartTagId"
+            :disabled="item.ChartTagId===form.TagY"
           />
         </el-select>
       </el-form-item>
@@ -56,6 +80,7 @@
             :key="item.ChartTagId"
             :label="item.ChartTagName"
             :value="item.ChartTagId"
+            :disabled="item.ChartTagId===form.TagX"
           />
         </el-select>
       </el-form-item>
@@ -75,7 +100,7 @@
         <li class="date-li" v-for="(item,index) in form.DateConfigList" :key="index">
           <el-select
             v-model="item.DateType"
-            style="width: 150px"
+            style="width: 140px"
             placeholder="请选择"
             @change="changeParams"
           >
@@ -96,6 +121,21 @@
             @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">
             <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"/>
@@ -130,12 +170,13 @@ export default {
       form: {
         ChartName:'',
         Source: 10,
+        PercentType: 1,
         CalculateValue: 6,
         CalculateUnit: '月',
         TagX: '',
         TagY: '',
         DateConfigList: [
-          { DateType: 1,Num: 0 },
+          { DateType: 1,Num: 0,FixDate:'',ShowTips: 1 },
         ],
       },
       unitOpt: [
@@ -149,7 +190,17 @@ export default {
       dateOptions: [
         { label: '最新日期',val: 1 },
         { label: 'N天前',val: 2 },
-      ]
+        { label: '固定日期',val: 3 },
+      ],
+
+      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: {
@@ -157,21 +208,25 @@ export default {
       if(this.form.DateConfigList.length === 5) return this.$message.warning('日期数量已达上限')
 
       this.form.DateConfigList.push({
-        DateType: 1,Num: 1
+        DateType: 1,Num: 1,FixDate:'',ShowTips: 1
       })
       
       this.changeParams()
     },
 
     initData(data) {
-      const { ChartName,CalculateValue,CalculateUnit,TagX,TagY,DateConfigList } = data;
+      const { ChartName,CalculateValue,CalculateUnit,TagX,TagY,DateConfigList,PercentType } = data;
       this.form = {
         ChartName,
         CalculateValue,
         CalculateUnit,
         TagX,
         TagY,
-        DateConfigList
+        DateConfigList: DateConfigList.map(_ =>({
+          ..._,
+          ShowTips: _.ShowTips || 0
+        })),
+        PercentType: PercentType||0
       }
     },
 
@@ -202,6 +257,14 @@ export default {
       align-items: center;
       gap: 10px;
       margin-bottom: 20px;
+      .el-icon-view {
+        width: 24px;
+        height: 24px;
+        line-height: 24px;
+        text-align: center;
+        font-size: 20px;
+        color: #409EFF;
+      }
     }
   }
 }

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

@@ -143,8 +143,57 @@
 											height="500px"
 											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>
                   <span class="chart-author">作者:{{ chartInfo.SysUserRealName}}</span>
+
                 </div>
 
                 <!-- 异常显示 -->
@@ -158,6 +207,7 @@
 									@copyChartConfirm="copyChartConfirm"
 									@addMychartHandle="addMychartHandle"
 									@refreshHandle="refreshHandle"
+									@saveChartHandle="saveChartHandle"
 									@saveChartOtherHandle="saveChartOtherHandle"
 									@editChartHandle="editChartHandle"
 									@openEnNameDia="openEnNameDia"
@@ -415,6 +465,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() {
 			crossVarietyInterface.getChartList({
@@ -453,11 +520,13 @@ export default {
 				this.chartInfo = ChartInfo;
 				this.tableData = EdbInfoList;
 				this.crossVarietyChartData = DataResp;
+
+				/* 历史数据chartInfo里全是空 兼容下历史数据不崩 */
 				this.chartLimit = {
-					min: DataResp.YMinValue,
-					max: DataResp.YMaxValue ,
-					x_min: DataResp.XMinValue,
-					x_max: DataResp.XMaxValue,
+					min: ChartInfo.LeftMin?Number(ChartInfo.LeftMin):Number(DataResp.YMinValue),
+					max: ChartInfo.LeftMax?Number(ChartInfo.LeftMax):Number(DataResp.YMaxValue),
+					x_min: ChartInfo.XMin?Number(ChartInfo.XMin):Number(DataResp.XMinValue),
+					x_max: ChartInfo.XMax?Number(ChartInfo.XMax):Number(DataResp.XMaxValue),
 				}
 
 				this.setCrossVarietyChart()

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

@@ -77,6 +77,7 @@ $normal-font: 14px;
         padding: 30px 20px;
         max-height: calc(100vh - 280px);
         overflow: auto;
+        margin-right: 20px;
       }
       .target_tree {
         color: #333;
@@ -136,7 +137,7 @@ $normal-font: 14px;
           margin-bottom: 20px;
 
           .chart-show-cont {
-            padding: 0 160px 0 100px;
+            padding: 0 160px 50px 120px;
             position: relative;
             min-height: 400px;
             .chart-title {
@@ -162,7 +163,7 @@ $normal-font: 14px;
                   display: block;
                 }
                 &.left {
-                  left: -80px;
+                  left: -70px;
                 }
                 &.right {
                   right: -65px;
@@ -170,6 +171,19 @@ $normal-font: 14px;
                 &.rightTwo {
                   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" />
             </el-tooltip> -->
           </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">
             <span style="flex-shrink:0;min-width:70px">时间长度:</span>
             <el-input
@@ -361,7 +384,8 @@ export default {
         },
         Percentile: {
           CalculateValue: 0,
-          CalculateUnit: '天'
+          CalculateUnit: '天',
+          PercentType: 1
         },
         FrequencyDistribution: {
           DateType: 1,
@@ -394,6 +418,15 @@ export default {
         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,
       saveSource:0,//图表位置1 2 3 4

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

@@ -410,7 +410,7 @@
 							</h2>
 
 							<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
 									style="width: 60px; display: block"
 									size="mini"
@@ -442,7 +442,6 @@
 									v-model="tableData[rightIndex].MinData"
 								/>
 							</div>
-							<!-- 右2上下限设置 -->
 							<div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
 								<el-input
 									style="width: 60px; display: block"
@@ -458,7 +457,65 @@
 									placeholder="下限"
 									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)">	
@@ -717,7 +774,7 @@ export default {
 					}else {
 						//拼接标题
 						this.chartInfo.ChartName =  this.sameOptionType.includes(this.chartInfo.ChartType) ? newval.map((item,index) => index === newval.length-1 ? item.EdbName : `${item.EdbName}和`).join('') : `${newval[0].EdbName}季节性`;
-	
+						this.EdbAxisChange()
 						this.setAddChartDefault();
 						this.setChartOptionHandle(newval);
 					}
@@ -792,6 +849,13 @@ export default {
 							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)){
 						//每个数据转换需要检测是否合法
 						for(let i=0;i<db_arr.length;i++){
@@ -850,6 +914,21 @@ export default {
 								EndDate: this.year_select === 5 ? this.select_date[1] : '',
 							} 
 						: 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 => {
 						if(res.Ret !== 200) return;
 							this.setChartImage(res.Data);

+ 89 - 8
src/views/dataEntry_manage/chartSetting.vue

@@ -382,7 +382,7 @@
 
                     <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
                         style="width: 60px; display: block"
                         size="mini"
@@ -421,8 +421,6 @@
                         v-model="tableData[rightIndex].MinData"
                       />
                     </div>
-
-                    <!-- 右2上下限设置 -->
                     <div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
                       <el-input
                         style="width: 60px; display: block"
@@ -440,7 +438,72 @@
                         :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
                         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 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)">	
@@ -798,7 +861,6 @@ import {
   copyOtherOptions
 } from '@/utils/defaultOptions';
 import { chartSetMixin } from './mixins/chartPublic'
-
 import mPage from '@/components/mPage';
 import Chart from './components/chart';
 import chartDialog from './components/chartDialog';
@@ -1413,8 +1475,8 @@ export default {
       }).then((res) => {
         if (res.Ret === 200) {
           this.$message.success('移动成功!');
-          this.getTreeData();
         }
+        this.getTreeData();
       });
 		},
 
@@ -1597,6 +1659,9 @@ export default {
 			this.setDefaultSourceFrom();
   
       this.tableData = res.Data.EdbInfoList;
+      //初始化上下限
+      this.setLimitData(this.tableData)
+        
       // 设置起始日期和最新日期
       this.setExtremumDate()
 
@@ -1854,7 +1919,22 @@ export default {
               EndDate: this.year_select === 5 ? this.select_date[1] : '',
             }
           : 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) => {
           if (res.Ret === 200) {
             this.$message.success('保存成功');
@@ -2680,9 +2760,9 @@ export default {
     }
     .chartSetting_main {
       /* display: flex; */
-      div::-webkit-scrollbar {
+      /* div::-webkit-scrollbar {
         width: 5px !important;
-      }
+      } */
       .slide-icon {
         padding: 20px 0;
         /* display: block; */
@@ -2727,6 +2807,7 @@ export default {
           padding: 15px 20px 30px;
           overflow: auto;
           max-height: calc(100vh - 330px);
+          margin-right: 20px;
         }
         .target_tree {
           font-size: 14px;

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

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

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

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

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

@@ -1180,9 +1180,9 @@ export default {
       padding: 0 10px;
       height: calc(100% - 176px);
       overflow-y: scroll;
-      &::-webkit-scrollbar {
+      /* &::-webkit-scrollbar {
         width: 0px !important;
-      }
+      } */
       .classify-item {
         text-align: left;
         font-size: 15px;

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

@@ -21,6 +21,13 @@
 							</el-option>
 						</el-select>
 					</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="公司ID" v-model="search_company_txt" style="maxWidth:340px;"
 						@keyup.enter.native="searchHandle" :disabled="haveResult" clearable>
 						<i slot="prefix" class="el-input__icon el-icon-search"></i>
@@ -301,7 +308,9 @@ export default {
 			THSIndexCodeTypeArr:[
 				{value:1,label:"期货常用指标"},
 				{value:2,label:"股票常用指标"}
-			]
+			],
+
+			rtrFromFrequency:frequencyArr[0],//路透频度
 		};
 	},
 	watch:{
@@ -331,6 +340,7 @@ export default {
 			this.indexCodeSelected=[]
 			this.THSIndexCodeType=1
 			this.isCompanyCode = false;
+			this.rtrFromFrequency=frequencyArr[0]
 		},
 		cancelHandle() {
 			this.init();
@@ -369,7 +379,8 @@ export default {
 				dataBaseInterface.getTarget({
 					Source: Number(this.fromCode.get(this.fromType)),
 					EdbCode: this.search_txt,
-					CompanyCode: this.search_company_txt
+					CompanyCode: this.search_company_txt,
+					Frequency: this.rtrFromFrequency
 				}).then(res => {
 					if (res.Ret === 200) {
 						this.haveResult = false;

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

@@ -2120,9 +2120,9 @@ export default {
 		position:relative;
 		width:100%;
 		overflow-x: auto;
-		div::-webkit-scrollbar {
+		/* div::-webkit-scrollbar {
 			width: 5px !important;
-		}
+		} */
 		.main-left {
 			width: 400px;
 			min-width: 300px;
@@ -2136,7 +2136,7 @@ export default {
 			position: relative;
 			box-sizing: border-box;
 			.tree-cont {
-				padding: 30px 0 30px 30px;
+				padding: 30px;
 				/* height: calc(100vh - 290px);
 				overflow: auto; */
 			}

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

@@ -407,7 +407,7 @@
 								{{ chartInfo.ChartName }}
 							</h2>
 							<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
 									style="width: 60px; display: block"
 									size="mini"
@@ -439,7 +439,6 @@
 									v-model="tableData[rightIndex].MinData"
 								/>
 							</div>
-							<!-- 右2上下限设置 -->
 							<div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
 								<el-input
 									style="width: 60px; display: block"
@@ -455,7 +454,65 @@
 									placeholder="下限"
 									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)">	
@@ -669,7 +726,6 @@ import { dataBaseInterface } from '@/api/api.js';
 import { chartSetMixin } from './mixins/chartPublic';
 import {unitArr} from '@/utils/defaultOptions.js'
 import addOrEditMixn from './mixins/addOreditMixin';
-
 import Chart from './components/chart';
 import DateChooseDia from './components/DateChooseDia';
 import SaveChartOther from './components/SaveChartOther';
@@ -717,6 +773,7 @@ export default {
 						//雷达图
 						this.chartInfo.ChartType === 11 && this.$refs.BarOptRef && this.$refs.BarOptRef.getBarData();
 					}else {
+						this.EdbAxisChange()
 						this.setAddChartDefault();
 						newval.length && !this.chartInfo.WarnMsg && this.setChartOptionHandle(newval);
 					}
@@ -798,6 +855,8 @@ export default {
 					this.chartInfo.ChartType === 11 && this.initRadarData(res.Data);
 					
 					this.getThemeList();
+					//初始化上下限
+					this.setLimitData(this.tableData)
 
         });
 		},
@@ -892,6 +951,13 @@ export default {
 							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)){
 						//每个数据转换需要检测是否合法
 						for(let i=0;i<db_arr.length;i++){
@@ -957,7 +1023,21 @@ export default {
 							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 => {
 						if(res.Ret !== 200) return;
 						

+ 99 - 7
src/views/dataEntry_manage/mixins/addOreditMixin.js

@@ -82,6 +82,7 @@ export default {
 			sourceEditForm: {
 
 			},
+
 			updateData:[],
 			useUnit:''
 		}
@@ -153,6 +154,8 @@ export default {
 
 				//共用结构的类型切换可以直接画图
 				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.setChartOptionHandle(this.tableData);
@@ -183,7 +186,7 @@ export default {
 			}
 			//如果类型为对数,检测数据是否包含负数
 			if(ConvertType===3){
-				if(!this.checkEdbData(this.tableData[index].DataList)){
+				if(!this.checkEdbData(this.tableData[index].DataList||[])){
 					this.updateData[index].IsConvert = false
 					return this.$message.warning("指标数据含有负数或0,无法进行对数运算")
 				}
@@ -242,9 +245,22 @@ export default {
 			}
 		},
 		checkEdbData(data){
-			const ValueArr = data.map(i=>(i.Value||0))
-			const minData = Math.min(...ValueArr)
-			return minData>0
+			//季节性图要遍历data 取下一层的DataList
+			if(this.chartInfo.ChartType===2){
+				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到表格中*/
 		selectTarget(item,type='') {
@@ -314,6 +330,8 @@ export default {
 									text: sourceStr
 								});
 							}
+							//新增指标后,检测上下限变化,修改上下限
+							this.EdbAxisChange()
 
 							this.$nextTick(()=>{
 								// 等待 tableData的 监听里面的获取到 起始时间和最近日期
@@ -578,7 +596,14 @@ export default {
 			this.dateForm = {};
 			this.dateTip = '请选择时间段';
 			this.barDateList = [];
-      this.chartLimit = {};
+			this.chartLimit = {
+				min:'', //左轴上下限
+				max:'',
+				rightMin:'',//右轴上下限
+				rightMax:'',
+				rightTwoMin:'',//右二轴上下限
+				rightTwoMax:'',
+			};
       this.sectionScatterData = {};
 
 			this.$nextTick(()=>{
@@ -662,7 +687,8 @@ export default {
 			this.tableData.splice(index, 1);
 			this.updateData.splice(index, 1)
 			this.$message.success('删除成功')
-
+			//删除指标时,检测上下限,修改上下限
+			this.EdbAxisChange()
 			//添加图表时重置默认样式
 			this.$route.path==='/addchart' && this.resetChartEdbDefault();
 			
@@ -1036,6 +1062,72 @@ export default {
 				...JSON.parse(this.chartInfo.SourcesFrom),
 				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
+		},
 	}
 }

+ 264 - 14
src/views/dataEntry_manage/mixins/chartPublic.js

@@ -38,7 +38,7 @@ const basicYAxis = {
 }
 /**备注一下 越多越乱
  * @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 商品价格
  * 3 相关性
  * 4 滚动相关性
@@ -158,7 +158,15 @@ export const chartSetMixin = {
       barXData: [],//柱形图的x轴
       barXIdList: [],//x轴id数组 用于切换英文遍历用
       barEdbData: [],//柱形图的表格数据 只用于取值
-      chartLimit: {},
+      chartLimit: {
+        min:'', //左轴上下限
+        max:'',
+        rightMin:'',//右轴上下限
+        rightMax:'',
+        rightTwoMin:'',//右二轴上下限
+        rightTwoMax:'',
+
+      },
 
       /* 商品价格曲线 本来逻辑分开写 但需求又得加入myeta和eta图库共存 还是写一块算了 */
       commodityChartData: [],
@@ -567,7 +575,14 @@ export const chartSetMixin = {
         this.leftIndex = -1;
         this.rightIndex = -1;
         this.rightTwoIndex = -1;
-        this.chartLimit = {};
+        this.chartLimit = {
+            min:'', //左轴上下限
+            max:'',
+            rightMin:'',//右轴上下限
+            rightMax:'',
+            rightTwoMin:'',//右二轴上下限
+            rightTwoMax:'',
+        };
       }else {
         this.leftIndex = newval.findIndex((item) => item.IsAxis===1);
         this.rightIndex = newval.findIndex((item) => !item.IsAxis);
@@ -588,7 +603,31 @@ export const chartSetMixin = {
         let sameSideIndex = chartData.findIndex(
           (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轴
         const textZh = item.ConvertUnit||item.Unit
         const textEn = item.ConvertEnUnit||item.UnitEn||item.ConvertUnit||item.Unit
@@ -621,8 +660,8 @@ export const chartSetMixin = {
           },
           opposite: [0,2].includes(item.IsAxis),
           reversed: item.IsOrder,
-          min: Number(item.MinData),
-          max: Number(item.MaxData),
+          min: Number(minLimit),
+          max: Number(maxLimit),
           tickWidth: 1,
           visible: sameSideIndex === index,
           plotBands: this.setAxisPlotAreas(item.IsAxis),
@@ -768,6 +807,26 @@ export const chartSetMixin = {
         ? -1
         : 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轴
         const textZh = item.ConvertUnit||item.Unit
         const textEn = item.ConvertEnUnit||item.UnitEn||item.ConvertUnit||item.Unit
@@ -800,8 +859,8 @@ export const chartSetMixin = {
           },
           opposite: [0,2].includes(item.IsAxis),
           reversed: item.IsOrder,
-          min: Number(chartData[sameSideIndex].MinData),
-          max: Number(chartData[sameSideIndex].MaxData),
+          min: Number(minLimit),
+          max: Number(maxLimit),
           tickWidth: 1,
           visible: serie_yIndex === index && sameSideIndex ===index,
           plotBands: this.setAxisPlotAreas(item.IsAxis),
@@ -898,6 +957,18 @@ export const chartSetMixin = {
       let seasonYdata = [],
         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) {
         //预测指标配置
@@ -950,8 +1021,8 @@ export const chartSetMixin = {
           textAlign: 'left',
           reserveSpace: false
         },
-        max: Number(chartData.MaxData),
-        min: Number(chartData.MinData),
+        max: Number(maxLimit),
+        min: Number(minLimit),
         plotBands: this.setAxisPlotAreas(1),
         plotLines: this.setAxisPlotLines(1)
       }];
@@ -1115,6 +1186,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];
       //y轴
       const textYZh = newval[1].ConvertUnit||newval[1].Unit
@@ -1148,8 +1231,8 @@ export const chartSetMixin = {
         },
         opposite: false,
         reversed: IsOrder,
-        min: Number(newval[1].MinData),
-        max: Number(newval[1].MaxData),
+        min: Number(minLimit),
+        max: Number(maxLimit),
         tickWidth: 1,
         plotBands: this.setAxisPlotAreas(1),
         plotLines: this.setAxisPlotLines(1)
@@ -1215,6 +1298,9 @@ export const chartSetMixin = {
       x轴为指标名称的柱形图 以日期作为series
     */
     setBarChart() {
+      this.leftIndex = -1;
+      this.rightIndex = -1;
+      this.rightTwoIndex = -1;
       let seriesData = [];
       const data = _.cloneDeep(this.barDateList);
 
@@ -2123,6 +2209,10 @@ export const chartSetMixin = {
 
        //数据列
       let series = [];
+      const tagMap = { //标签对应文字
+        1: '最新',
+        3: 'Fix'
+      }
       DataList.forEach(item => {
         //数据列
         let series_item = {
@@ -2136,7 +2226,16 @@ export const chartSetMixin = {
           zIndex:1
         }
         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);
       })
@@ -2489,6 +2588,12 @@ export const chartSetMixin = {
     changeLimit() {
       //source1 eta图库的类型对应
       const typeMap = {
+        1: this.setDefaultChart,
+        2: this.setSeasonChart,
+        3: this.setStackOrCombinChart,
+        4: this.setStackOrCombinChart,
+        5: this.setScatterChart,
+        6: this.setStackOrCombinChart,
         7: this.setBarChart,
         10: this.setSectionScatterChart,
         11: this.setRadarChart
@@ -2500,7 +2605,13 @@ export const chartSetMixin = {
         // 3:
       }
       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 {
         sourceMap[this.chartInfo.Source]();
       }
@@ -2632,5 +2743,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
+                }
+            }
+        },
+    /*-------------------- */
 	}
 }

+ 6 - 1
src/views/dataEntry_manage/targetList.vue

@@ -552,8 +552,12 @@ export default {
 			dataInterence.checkTarget({
 				TradeCode:item.TradeCode
 			}).then(res => {
+				if(res.Data.Status===1){
+					this.$message.error("该指标已加入ETA指标库,不可删除")
+					return
+				}else{
 					this.$confirm(
-						res.Data.Status===0 ? '是否确认删除该指标?' : '若删除此指标,该指标下关联的数据也将全部删除,是否确认删除?',
+						'是否确认删除该指标?',
 						'提示',{
 						type:'warning'
 					}).then(() => {
@@ -565,6 +569,7 @@ export default {
 								this.getTableData();
 							});
 					}).catch(() => {});
+				}
 			})
 		}
 	},

+ 4 - 3
src/views/dataEntry_manage/thirdBase/BAIINFOTargetbase.vue

@@ -1226,9 +1226,9 @@ export default {
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     border-radius: 4px;
   }
-  div::-webkit-scrollbar {
+/*   div::-webkit-scrollbar {
     width: 5px !important;
-  }
+  } */
   .left-cont {
     min-width: 300px;
     width: 300px;
@@ -1240,9 +1240,10 @@ export default {
       padding: 0 20px;
     }
     .scroll-wrap {
-      padding: 0 10px;
+      padding: 0 20px;
       height: calc(100vh - 280px);
       overflow-y: auto;
+      margin-right: 20px;
       .target_tree {
         color: #333;
         .label-input .el-input__inner {

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

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

+ 4 - 3
src/views/dataEntry_manage/thirdBase/SCITargetbase.vue

@@ -1114,9 +1114,9 @@ export default {
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     border-radius: 4px;
   }
-  div::-webkit-scrollbar {
+  /* div::-webkit-scrollbar {
     width: 5px !important;
-  }
+  } */
   .left-cont {
     min-width: 300px;
     width: 300px;
@@ -1128,9 +1128,10 @@ export default {
       padding: 0 20px;
     }
     .scroll-wrap {
-      padding: 0 10px;
+      padding: 0 20px;
       height: calc(100vh - 280px);
       overflow-y: auto;
+      margin-right:20px;
       .target_tree {
         color: #333;
         .label-input .el-input__inner {

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

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

+ 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);
     border-radius: 4px;
   }
-  div::-webkit-scrollbar {
+  /* div::-webkit-scrollbar {
     width: 5px !important;
-  }
+  } */
   .left-cont {
     min-width: 240px;
     width:240px;
@@ -339,6 +339,7 @@ export default {
       /* margin-top: 20px; */
       height: calc(100vh - 280px);
       overflow-y: auto;
+      margin-right: 20px;
       .classify-item {
         font-size: 14px;
         color: #666;

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

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

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

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

+ 4 - 3
src/views/dataEntry_manage/thirdBase/smmTargetbase.vue

@@ -1182,9 +1182,9 @@ export default {
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     border-radius: 4px;
   }
-  div::-webkit-scrollbar {
+  /* div::-webkit-scrollbar {
     width: 5px !important;
-  }
+  } */
   .left-cont {
     min-width: 300px;
     width: 300px;
@@ -1196,9 +1196,10 @@ export default {
       padding: 0 20px;
     }
     .scroll-wrap {
-      padding: 0 10px;
+      padding: 0 20px;
       height: calc(100vh - 280px);
       overflow-y: auto;
+      margin-right: 20px;
       .target_tree {
         color: #333;
         .label-input .el-input__inner {

+ 4 - 3
src/views/dataEntry_manage/thirdBase/steelChemicalbase.vue

@@ -749,9 +749,9 @@ export default {
     box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
     border-radius: 4px;
   }
-  div::-webkit-scrollbar {
+  /* div::-webkit-scrollbar {
     width: 5px !important;
-  }
+  } */
   .left-cont {
     min-width: 300px;
     width: 300px;
@@ -764,9 +764,10 @@ export default {
       padding: 0 20px;
     }
     .scroll-wrap {
-      padding: 0 10px;
+      padding: 0 20px;
       height: calc(100vh - 280px);
       overflow-y: auto;
+      margin-right: 20px;
     }
     .target_tree {
       color: #333;

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

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

+ 7 - 3
src/views/datasheet_manage/sheetList.vue

@@ -776,9 +776,12 @@ export default {
         return 
       }
       this.$message.success("保存成功");
-      this.markFinishStatus()
+      // this.markFinishStatus()
 
-      this.getTreeData();
+      if(this.autoSaveType == "nameEdit"){
+        this.getTreeData();
+        this.autoSaveType=''
+      }
 
       this.getDetailHandle();
     }, 300),
@@ -981,7 +984,7 @@ export default {
       if(!this.onlineExcelEditing) return
       this.editNodeLabel(sheetDetailInfo, type)
     },
-    // 标记 编辑完成
+    // 标记 编辑完成 退出编辑状态
     markFinishStatus(select_id){
       let id = select_id || this.select_id
       if((!this.onlineExcelEditing) || (!id) || id=='0'){
@@ -1113,6 +1116,7 @@ $normal-font: 14px;
         padding: 30px 20px;
         max-height: calc(100vh - 280px);
         overflow: auto;
+        margin-right: 20px;
       }
       .target_tree {
         color: #333;

+ 107 - 65
src/views/mychart_manage/components/chartDetailDia.vue

@@ -122,7 +122,7 @@
               class="span-item"
               style="margin-left: 7px"
               @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;保存 </span>
             </span>
@@ -214,65 +214,66 @@
               <template v-if="!chartInfo.WarnMsg">
                 <Chart :options="options" :chartInfo="chartInfo" ref="chartRef"/>
                 <!-- 上下限 -->
-                <div class="range-cont left" v-if="leftIndex != -1">
-                  <el-input
-                    style="width: 60px; display: block"
-                    size="mini"
-                    type="number"
-                    placeholder="上限"
-                    :disabled="!isAllowEditLimit"
-                    v-model="tableData[leftIndex].MaxData"
-                  />
-                  <el-input
-                    class="min-data-input"
-                    size="mini"
-                    type="number"
-                    placeholder="下限"
-                    :disabled="!isAllowEditLimit"
-                    v-model="tableData[leftIndex].MinData"
-                  />
-                </div>
-                <div class="range-cont right" v-if="rightIndex != -1">
-                  <el-input
-                    style="width: 60px; display: block"
-                    size="mini"
-                    type="number"
-                    placeholder="上限"
-                    :disabled="!isAllowEditLimit"
-                    v-model="tableData[rightIndex].MaxData"
-                  />
-                  <el-input
-                    class="min-data-input"
-                    size="mini"
-                    type="number"
-                    placeholder="下限"
-                    :disabled="!isAllowEditLimit"
-                    v-model="tableData[rightIndex].MinData"
-                  />
-                </div>
-
-                <!-- 右2上下限设置 -->
-                <div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
-                  <el-input
-                    style="width: 60px; display: block"
-                    size="mini"
-                    type="number"
-                    placeholder="上限"
-                    :disabled="!isAllowEditLimit"
-                    v-model="tableData[rightTwoIndex].MaxData"
-                  />
-                  <el-input
-                    class="min-data-input"
-                    size="mini"
-                    type="number"
-                    placeholder="下限"
-                    :disabled="!isAllowEditLimit"
-                    v-model="tableData[rightTwoIndex].MinData"
-                  />
-                </div>
+                <template v-if="chartInfo.Source===1&&![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)||[2,5,10].includes(chartInfo.Source)">	
                   <div class="range-cont left">
                     <el-input
                       style="width: 60px; display: block"
@@ -577,7 +578,7 @@
 import { dataBaseInterface,mychartInterface } from '@/api/api.js';
 import futuresInterface from '@/api/modules/futuresBaseApi';
 import chartRelevanceApi from '@/api/modules/chartRelevanceApi';
-import { fittingEquationInterface,statisticFeatureInterface } from '@/api/modules/chartRelevanceApi';
+import { fittingEquationInterface,statisticFeatureInterface,crossVarietyInterface } from '@/api/modules/chartRelevanceApi';
 import {
   seasonOptions,
   copyOtherOptions
@@ -592,7 +593,7 @@ import { copyFit } from '@/utils/svgToblob.js';
 
 export default {
   components: { Chart, DateChooseDia,SaveChartOther,changeLang,setEnNameDia },
-  mixins: [ chartSetMixin ],
+  mixins: [ chartSetMixin],
   directives: {
     'click-outside':{
       bind(el, binding) {
@@ -731,8 +732,12 @@ export default {
             this.setDefaultSourceFrom();
             
             this.tableData = res.Data.EdbInfoList;
+            //初始化上下限
+            this.setLimitData(this.tableData)
+            
             //eta图
             this.setDefaultDateSelect(); //设置默认的日期选中
+
             this.chartInfo.ChartType === 7 && this.initBarData(res.Data);
 
             //截面散点图
@@ -786,11 +791,13 @@ export default {
           }else if(this.chartInfo.Source===10) { //跨品种分析
             this.tableData = res.Data.EdbInfoList;
             this.crossVarietyChartData = res.Data.DataResp;
+
+            /* 历史数据chartInfo里全是空 兼容下历史数据不崩 */
             this.chartLimit = {
-              min: Number(res.Data.DataResp.YMinValue),
-              max: Number(res.Data.DataResp.YMaxValue),
-              x_min: Number(res.Data.DataResp.XMinValue),
-              x_max: Number(res.Data.DataResp.XMaxValue)
+              min: res.Data.ChartInfo.LeftMin?Number(res.Data.ChartInfo.LeftMin):Number(res.Data.DataResp.YMinValue),
+              max: res.Data.ChartInfo.LeftMax?Number(res.Data.ChartInfo.LeftMax):Number(res.Data.DataResp.YMaxValue),
+              x_min: res.Data.ChartInfo.XMin?Number(res.Data.ChartInfo.XMin):Number(res.Data.DataResp.XMinValue),
+              x_max: res.Data.ChartInfo.XMax?Number(res.Data.ChartInfo.XMax):Number(res.Data.DataResp.XMaxValue),
             }
             this.setCrossVarietyChart();
           }
@@ -1109,6 +1116,7 @@ export default {
         1: this.saveChartHandle,
         2: this.saveCommodityChart,
         5: this.saveCommodityChart,//利润曲线
+        10: this.saveCrossVarietyChart
       }
       sourceMap[this.chartInfo.Source]&&sourceMap[this.chartInfo.Source]();
     },
@@ -1127,6 +1135,24 @@ export default {
 			this.setChartImage();
 		},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 () {
       //遍历每条线的指标配置
@@ -1200,7 +1226,23 @@ export default {
             EndDate: this.year_select === 5 ? this.select_date[1] : '',
           }
         : 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) => {
         if (res.Ret === 200) {
           this.$message.success('保存成功');

+ 1 - 0
src/views/mychart_manage/index.vue

@@ -1110,6 +1110,7 @@ export default {
       overflow: auto;
       max-height: calc(100vh - 290px);
       position: relative;
+      margin-right: 20px;
       .classify-item {
         padding: 10px 30px;
         display: flex;

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

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

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

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

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

@@ -52,7 +52,14 @@ export default {
       barDateList: [],//柱形图的绘图数据
       barXIdData: [],//柱形图的x轴
       barEdbData: [],//柱形图的表格数据 只用于取值
-      chartLimit: {},
+      chartLimit: {
+        min:'', //左轴上下限
+        max:'',
+        rightMin:'',//右轴上下限
+        rightMax:'',
+        rightTwoMin:'',//右二轴上下限
+        rightTwoMax:'',
+      },
 
       /* 商品价格曲线 */
       commodityChartData: [],
@@ -115,6 +122,26 @@ export default {
       chartData.forEach((item, index) => {
         //轴位置值相同的下标
         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轴
         const textZh = 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),
           reversed: item.IsOrder,
-          min: Number(item.MinData),
-          max: Number(item.MaxData),
+          min: Number(minLimit),
+          max: Number(maxLimit),
           tickWidth: 1,
           visible: sameSideIndex === index,
           plotBands: this.setAxisPlotAreas(item.IsAxis),
@@ -278,6 +305,19 @@ export default {
         ? -1
         : 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轴
         let yItem = {
           ...basicYAxis,
@@ -308,8 +348,8 @@ export default {
           },
           opposite: [0,2].includes(item.IsAxis),
           reversed: item.IsOrder,
-          min: Number(chartData[sameSideIndex].MinData),
-          max: Number(chartData[sameSideIndex].MaxData),
+          min: Number(minLimit),
+          max: Number(maxLimit),
           tickWidth: sameSideIndex !== index ? 0 : 1,
           visible: serie_yIndex === index && sameSideIndex ===index,
           plotBands: this.setAxisPlotAreas(item.IsAxis),
@@ -402,6 +442,10 @@ export default {
       let seasonYdata = [],
         seasonData = []
 
+        //获取对应轴的上下限
+        let minLimit = 0,maxLimit = 0
+        minLimit = this.chartLimit.min||0
+        maxLimit = this.chartLimit.max||0
       //数据列
       for (let j of chartDataHandle) {
           //预测指标配置
@@ -455,8 +499,8 @@ export default {
           textAlign: 'left',
           reserveSpace: false
         },
-        max: Number(chartData.MaxData),
-        min: Number(chartData.MinData),
+        max: Number(maxLimit),
+        min: Number(minLimit),
         plotBands: this.setAxisPlotAreas(1),
         plotLines: this.setAxisPlotLines(1)
       }];
@@ -560,6 +604,10 @@ export default {
       }
 
       const { IsOrder,ChartColor,MaxData,MinData } = chartData[0];
+      //获取对应轴的上下限
+      let minLimit = 0,maxLimit = 0
+      minLimit = this.chartLimit.min||0
+      maxLimit = this.chartLimit.max||0
       //y轴
       const textYZh = 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,
         reversed: IsOrder,
-        min: Number(chartData[1].MinData),
-        max: Number(chartData[1].MaxData),
+        min: Number(minLimit),
+        max: Number(maxLimit),
         tickWidth: 1,
         tickLength: 5,
         lineWidth: 1,
@@ -1429,6 +1477,10 @@ export default {
 
        //数据列
       let series = [];
+      const tagMap = { //标签对应文字
+        1: '最新',
+        3: 'Fix'
+      }
       DataList.forEach(item => {
         //数据列
         let series_item = {
@@ -1442,7 +1494,16 @@ export default {
           zIndex:1
         }
         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);
       })
@@ -1812,6 +1873,128 @@ export default {
       })
 
       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.dataList = Data.EdbInfoList;
+        //初始化上下限
+        this.setLimitData(this.dataList)
         //柱形图独立数据
         this.chartInfo.ChartType === 7 && this.initBarData(res.Data);
         //截面散点图
@@ -265,11 +267,13 @@ export default {
       }else if(this.chartInfo.Source===10) {
         this.dataList = res.Data.EdbInfoList;
         this.crossVarietyChartData = res.Data.DataResp;
+        
+        /* 历史数据chartInfo里全是空 兼容下历史数据不崩 */
         this.chartLimit = {
-          min: Number(res.Data.DataResp.YMinValue),
-          max: Number(res.Data.DataResp.YMaxValue),
-          x_min: Number(res.Data.DataResp.XMinValue),
-          x_max: Number(res.Data.DataResp.XMaxValue)
+          min: res.Data.ChartInfo.LeftMin?Number(res.Data.ChartInfo.LeftMin):Number(res.Data.DataResp.YMinValue),
+          max: res.Data.ChartInfo.LeftMax?Number(res.Data.ChartInfo.LeftMax):Number(res.Data.DataResp.YMaxValue),
+          x_min: res.Data.ChartInfo.XMin?Number(res.Data.ChartInfo.XMin):Number(res.Data.DataResp.XMinValue),
+          x_max: res.Data.ChartInfo.XMax?Number(res.Data.ChartInfo.XMax):Number(res.Data.DataResp.XMaxValue),
         }
         this.setCrossVarietyChart();
         this.changeRelevanceOptions();//更改英文一样

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

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

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

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

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

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

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

@@ -52,7 +52,7 @@
             </template>
             <template slot-scope="{row}">
               <div class="file-name">
-                <img :src="row.ItemIcon" />
+                <img :src="iconGetMap(row)" />
                 <span class="active-file-name">{{ row.ItemName }}</span>
               </div>
             </template>
@@ -195,7 +195,17 @@ import 'streamsaver/examples/zip-stream'
         isUploading:false,
         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:{
@@ -449,6 +459,7 @@ import 'streamsaver/examples/zip-stream'
       },
       // 下载文件
       downloadFile(row){
+        if(row.Size === 0) return this.$message.warning('文件夹为空')
         let downloadHint = this.$message({
           type:"info",
           message:row.ItemName+'开始下载,请勿重复下载',
@@ -679,6 +690,30 @@ import 'streamsaver/examples/zip-stream'
           this.downloadFile(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(){

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

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

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

@@ -42,7 +42,7 @@ export default {
           "redo",
         ],
         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",
         theme: "dark", //主题
         placeholderText: "请输入内容",

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

@@ -82,7 +82,7 @@ export default {
           "redo",
         ],
         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",
         theme: "dark", //主题
         placeholderText: "请输入内容",

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

@@ -419,7 +419,7 @@ export default {
 				classifynameArr: [],
 				title: '',
 				abstract: '',
-				author: ['Horizon Insights FICC Team'],
+				author: ['Investment Research Team'],
 				frequency: '日度',
 				create_time: http.dateFormatter(new Date(), false),
 				content: '',
@@ -489,7 +489,7 @@ export default {
 					'undo',
 					'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,
         fontSizeDefaultSelection: "16",
         quickInsertEnabled: false,

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

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

+ 13 - 27
src/views/sandbox_manage/index_new_version.vue

@@ -998,6 +998,11 @@ import { myGraph } from './common/gragh';
             },{
               preserveDimensions:true,//让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 {x,y,width,height} = this.graph.getContentBBox(cells)
                 // let {tx,ty} = this.graph.translate() // 画布偏移量
@@ -1017,20 +1022,7 @@ import { myGraph } from './common/gragh';
                 // gNode.appendChild(textNode)
                   },
               copyStyles:false,
-              stylesheet: `
-                  svg{
-                      background-color:white;
-                  }
-                .x6-port {
-                    visibility: hidden;
-                }
-                .left-topic-image{
-                  visibility:hidden;
-                }
-                .right-topic-image{
-                  visibility: hidden;
-                }
-                ` 
+              stylesheet: `svg{background-color:white;} .x6-port{visibility: hidden;}` 
             })
           }
         })
@@ -1093,6 +1085,11 @@ import { myGraph } from './common/gragh';
       },{
         preserveDimensions:true,//让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)
           // let {tx,ty} = this.graph.translate()
           //给导出的svg增加一点宽高
@@ -1110,19 +1107,7 @@ import { myGraph } from './common/gragh';
           // gNode.appendChild(textNode)
             },
           copyStyles:false,
-          stylesheet: `
-            svg{
-                background-color:white;
-            }
-          .x6-port {
-              visibility: hidden;
-          }
-          .left-topic-image{
-            visibility:hidden;
-          }
-          .right-topic-image{
-            visibility: hidden;
-          }` 
+          stylesheet: `svg{background-color:white;} .x6-port{visibility: hidden;}` 
         })
       },500),
       //==============================画布
@@ -1255,6 +1240,7 @@ import { myGraph } from './common/gragh';
         padding: 0 20px;
         overflow: auto;
         scroll-behavior: smooth;
+        margin-right: 20px;
         .add-classify{
           margin: 30px 0 50px;
           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;
         this.chartInfo = res.Data.ChartInfo || {}
         this.edbData = res.Data.EdbInfoList|| []
-
+        //初始化上下限
+        this.setLimitData(this.edbData)
         const chartTypeMap = {
           7: this.initBarData, //柱形图
           10: this.initSectionScatterData //截面散点

+ 37 - 28
src/views/sandbox_manage/sandFlowNew/index.vue

@@ -187,6 +187,30 @@
               />
             </el-tooltip>
           </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">
             <el-dropdown trigger="click" @command="(e)=>toolClickOptions('changeTextAlign',nodeTextDisable,e)" 
               placement="bottom">
@@ -879,6 +903,12 @@ import addLInkDia from './components/addLInkDia.vue';
         },{
           preserveDimensions:false,//让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)
             // let {tx,ty} = this.graph.translate()
             //给导出的svg增加一点宽高
@@ -887,7 +917,6 @@ import addLInkDia from './components/addLInkDia.vue';
             //设置viewBox使图像居中
             svg.setAttribute('viewBox',`${x-25} ${y-25} ${width+50} ${height+50}`)
             // let gNode = svg.getElementsByClassName('x6-graph-svg-viewport')[0]
-            // console.log(leftImg,rightImg,'rightImg');
 
             // let textNode = document.createElement('text')
             // textNode.setAttribute('x',x-tx+width-90)
@@ -898,19 +927,7 @@ import addLInkDia from './components/addLInkDia.vue';
             // gNode.appendChild(textNode)
               },
           copyStyles:false,
-          stylesheet: `
-              svg{
-                  background-color:white;
-              }
-            .x6-port {
-                visibility: hidden;
-            }
-            .left-topic-image{
-              visibility:hidden;
-            }
-            .right-topic-image{
-              visibility: hidden;
-            }` 
+          stylesheet: `svg{background-color:white;} .x6-port{visibility: hidden;}` 
             
         })
       },500),
@@ -972,6 +989,11 @@ import addLInkDia from './components/addLInkDia.vue';
         },{
           preserveDimensions:true,//让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 {x,y,width,height} = this.graph.getContentBBox(cells)
             // let {tx,ty} = this.graph.translate() // 画布偏移量
@@ -991,20 +1013,7 @@ import addLInkDia from './components/addLInkDia.vue';
             // gNode.appendChild(textNode)
               },
           copyStyles:false,
-          stylesheet: `
-              svg{
-                  background-color:white;
-              }
-            .x6-port {
-                visibility: hidden;
-            }
-            .left-topic-image{
-              visibility:hidden;
-            }
-            .right-topic-image{
-              visibility: hidden;
-            }
-            ` 
+          stylesheet: `svg{background-color:white;} .x6-port{visibility: hidden;}` 
         })
           
       },500),

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

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

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

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

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

@@ -59,7 +59,7 @@ export default {
                     "redo",
                 ],
                 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",
                 theme: "dark", //主题
                 placeholderText: "请输入内容",

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

@@ -28,6 +28,12 @@
                         :label="item.Name" :value="item.Value" />
                 </el-select>
             </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="所属部门" prop="depart" v-if="userForm.title == '添加用户'">
                 <el-cascader :options="departArr" v-model="userForm.depart" :props="form_departProp"
                     placeholder="请选择部门分组" :disabled="userForm.disabledForm" clearable>
@@ -116,6 +122,10 @@ import {patternEmail,isMobileNo,checkPassWord} from '@/utils/commonOptions';
                 userRule: {
                     account:[{required: true, message: '登录账号不能为空', trigger: 'blur'}],
                     pwd:[{validator:(rule,value,callback)=>{
+                        if(this.userForm.IsLdap==1){
+                            callback()
+                            return
+                        }
                         if(value===''){
                             callback(new Error('请输入新密码'))
                         }

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

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

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

@@ -44,7 +44,7 @@ const setSandboxToolStatus=(state,payload)=>{
 				fontStyleSet.add(attrs.text.fontStyle)
 				textDecorationSet.add(attrs.text.textDecoration)
 				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)
 				if(!(element.data) || element.data.key!='text'){
 					// console.log('不是text');