瀏覽代碼

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. 二進制
      src/assets/img/cloudDisk/audio_icon.png
  5. 0 0
      src/assets/img/cloudDisk/config_icon.png
  6. 二進制
      src/assets/img/cloudDisk/excel_icon.png
  7. 二進制
      src/assets/img/cloudDisk/file_icon.png
  8. 二進制
      src/assets/img/cloudDisk/img_icon.png
  9. 0 0
      src/assets/img/cloudDisk/pdf_icon.png
  10. 0 0
      src/assets/img/cloudDisk/ppt_icon.png
  11. 二進制
      src/assets/img/cloudDisk/video_icon.png
  12. 二進制
      src/assets/img/cloudDisk/word_icon.png
  13. 1 1
      src/components/chart/chartDetailHandlesWrap.vue
  14. 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备案信息

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


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


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


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


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


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


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


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


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


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

@@ -23,7 +23,7 @@
         ><i class="el-icon-refresh" style="margin-left: 0" />&nbsp;刷新
       </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');