Browse Source

平衡表新增图表

jwyu 11 months ago
parent
commit
e122c651b8

+ 15 - 0
src/api/modules/sheetApi.js

@@ -161,6 +161,21 @@ export const setBalanceTableWorker=params=>{
 	return http.post('/datamanage/excel_info/worker/save',params)
 }
 
+//获取平衡表中图表数据
+export const getBalanceChartData=params=>{
+	return http.get('/datamanage/excel_info/balance/chart_list',params)
+}
+
+//平衡表中新增图表数据
+export const addBalanceChart=params=>{
+	return http.post('/datamanage/excel_info/balance/chart_add',params)
+}
+
+//平衡表中编辑图表数据
+export const editBalanceChart=params=>{
+	return http.post('/datamanage/excel_info/balance/chart_edit',params)
+}
+
 /* =====自定义表格====== */
 
 /**

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

@@ -88,6 +88,13 @@ export default {
     save_static_table:'Save as a static table',
     save_static_table_tip:'Please enter the version name',
     static_table_version_name:'Version name',
+    chart_source_placehoder:'please enter data source',
+    left_limit:'Left axis limits',
+    right_limit:'Right axis limits',
+    right_two_limit:'limits of the right second axis',
+    y_limit:'Vertical axis limits',
+    time_serial:'Time Series',
+    value_serial:'numerical sequence',
   },
 
   /* 自定义分析  */

+ 8 - 2
src/lang/modules/ETATables/Zh.js

@@ -87,8 +87,14 @@ export default {
     Co_editor:'协作人',
     save_static_table:'存为静态表',
     save_static_table_tip:'请输入版本名称',
-    static_table_version_name:'版本名称'
-
+    static_table_version_name:'版本名称',
+    chart_source_placehoder:'请输入数据来源',
+    left_limit:'左轴上下限',
+    right_limit:'右轴上下限',
+    right_two_limit:'右二轴上下限',
+    y_limit:'纵轴上下限',
+    time_serial:'时间序列',
+    value_serial:'数值序列',
   },
 
   /* 自定义分析  */

+ 1 - 1
src/views/dataEntry_manage/mixins/chartPublic.js

@@ -1090,7 +1090,7 @@ export const chartSetMixin = {
       const chartDataHandle=this.calendar_type === '农历'?
                             this.isPredictorChart?chartData.DataList.List.filter((item, index) => index > 0):
                             chartData.DataList.filter((item, index) => index > 0):
-                            chartData.DataList
+                            chartData.DataList||[]
        /* 主题样式*/
        const chartTheme =  this.chartInfo.ChartThemeStyle ? JSON.parse(this.chartInfo.ChartThemeStyle) : null;
 

+ 18 - 0
src/views/datasheet_manage/balanceSheetEdit.vue

@@ -180,6 +180,16 @@ export default {
     this.getSystemUserList()
     this.getChildTable()
     this.getDetail()
+  },
+  beforeRouteLeave(to,from,next){
+    console.log('退出编辑',from);
+    if(from.path==='/editBalanceSheet'){
+      this.markFinishStatus()
+    }
+    next()
+  },
+  beforeDestroy(){
+    
   },
   methods: {
     handleShowSaveStaticTable(){
@@ -303,6 +313,14 @@ export default {
           this.userList = res.Data || []
         }
       })
+    },
+
+    //更新编辑状态
+    markFinishStatus(){
+      if(!this.sheetId) return
+      sheetInterface.markSheetEditStatus({ExcelInfoId:Number(this.sheetId),Status:2}).then(res=>{
+        if(res.Ret != 200) return 
+      })
     }
   },
 }

+ 254 - 35
src/views/datasheet_manage/components/BalanceAddChart.vue

@@ -27,10 +27,10 @@
               ></el-input>
             </el-form-item>
             <!-- 数据来源 -->
-            <el-form-item label="数据来源" prop="chartSource">
+            <el-form-item :label="$t('Edb.Detail.source')" prop="chartSource">
               <el-input
                 v-model="formData.chartSource"
-                placeholder="请输入数据来源"
+                :placeholder="$t('OnlineExcelPage.chart_source_placehoder')"
                 style="width: 150px"
               ></el-input>
               <el-switch
@@ -42,7 +42,7 @@
           </div>
           <div class="item-tr">
             <!-- 图表类型 -->
-            <el-form-item label="图表类型" prop="chartType">
+            <el-form-item :label="$t('SystemManage.ChartSet.label01')" prop="chartType">
               <el-select v-model="formData.chartType" style="width: 200px">
                 <el-option
                   :label="item.label"
@@ -58,7 +58,9 @@
                 style="display: inline-block; margin-right: 20px"
                 v-if="hasLeftAxis"
               >
-                <span>左轴上下限</span>
+                <span>
+                  <!-- 左轴上下限 -->
+                  {{$t('OnlineExcelPage.left_limit')}}</span>
                 <el-input
                   class="number-input"
                   size="mini"
@@ -66,7 +68,7 @@
                   style="width: 60px"
                   v-model="formData.leftMin"
                 ></el-input>
-                <span></span>
+                <span>{{$t('Common.to')}}</span>
                 <el-input
                   class="number-input"
                   size="mini"
@@ -79,7 +81,10 @@
                 style="display: inline-block; margin-right: 20px"
                 v-if="hasRightAxis"
               >
-                <span>右轴上下限</span>
+                <span>
+                  <!-- 右轴上下限 -->
+                  {{$t('OnlineExcelPage.right_limit')}}
+                </span>
                 <el-input
                   class="number-input"
                   size="mini"
@@ -87,7 +92,7 @@
                   style="width: 60px"
                   v-model="formData.rightMin"
                 ></el-input>
-                <span></span>
+                <span>{{$t('Common.to')}}</span>
                 <el-input
                   class="number-input"
                   size="mini"
@@ -100,7 +105,10 @@
                 style="display: inline-block; margin-right: 20px"
                 v-if="hasRightTwoAxis"
               >
-                <span>右二轴上下限</span>
+                <span>
+                  <!-- 右二轴上下限 -->
+                  {{$t('OnlineExcelPage.right_two_limit')}}
+                </span>
                 <el-input
                   class="number-input"
                   size="mini"
@@ -108,7 +116,7 @@
                   style="width: 60px"
                   v-model="formData.rightTwoMin"
                 ></el-input>
-                <span></span>
+                <span>{{$t('Common.to')}}</span>
                 <el-input
                   class="number-input"
                   size="mini"
@@ -120,7 +128,10 @@
             </el-form-item>
             <el-form-item v-if="formData.chartType == 2">
               <span style="display: inline-block; margin-right: 20px">
-                <span>坐标轴范围</span>
+                <span>
+                  <!-- 纵轴上下限 -->
+                  {{$t('OnlineExcelPage.y_limit')}}
+                </span>
                 <el-input
                   class="number-input"
                   size="mini"
@@ -128,7 +139,7 @@
                   style="width: 60px"
                   v-model="formData.leftMin"
                 ></el-input>
-                <span></span>
+                <span>{{$t('Common.to')}}</span>
                 <el-input
                   class="number-input"
                   size="mini"
@@ -141,9 +152,11 @@
             <el-form-item v-if="formData.chartType == 4">
               <span
                 style="display: inline-block; margin-right: 20px"
-                v-if="hasLeftAxis"
+                v-if="edbList[0].axis===1"
               >
-                <span>纵轴上下限</span>
+                <span>
+                  <!-- 纵轴上下限 -->
+                  {{$t('OnlineExcelPage.y_limit')}}</span>
                 <el-input
                   class="number-input"
                   size="mini"
@@ -151,7 +164,7 @@
                   style="width: 60px"
                   v-model="formData.leftMin"
                 ></el-input>
-                <span></span>
+                <span>{{$t('Common.to')}}</span>
                 <el-input
                   class="number-input"
                   size="mini"
@@ -162,9 +175,12 @@
               </span>
               <span
                 style="display: inline-block; margin-right: 20px"
-                v-if="hasRightAxis"
+                v-if="edbList[0].axis===0"
               >
-                <span>纵轴上下限</span>
+                <span>
+                  <!-- 纵轴上下限 -->
+                  {{$t('OnlineExcelPage.y_limit')}}
+                </span>
                 <el-input
                   class="number-input"
                   size="mini"
@@ -172,7 +188,7 @@
                   style="width: 60px"
                   v-model="formData.rightMin"
                 ></el-input>
-                <span></span>
+                <span>{{$t('Common.to')}}</span>
                 <el-input
                   class="number-input"
                   size="mini"
@@ -192,25 +208,29 @@
               style="width: 16px; position: relative; top: 3px; cursor: pointer"
               alt=""
             />
-            <span class="edb-tag-box">指标{{ item.tag }}</span>
-            <el-form-item label="时间序列">
+            <span class="edb-tag-box">{{$t('Edb.eta_name')}}{{ item.tag }}</span>
+            <el-form-item :label="$t('OnlineExcelPage.time_serial')">
               <el-input
+                :class="{'select_input': selectInput===item.tag+'_timeSerial'}"
                 v-model="item.timeSerial"
-                placeholder="请选择日期序列"
+                :placeholder="$t('CustomAnalysisPage.select_date_sequence')"
                 style="width: 180px"
+                @focus="handleChooseInput(item.tag+'_timeSerial')"
               ></el-input>
             </el-form-item>
-            <el-form-item label="数值序列">
+            <el-form-item :label="$t('OnlineExcelPage.value_serial')">
               <el-input
+                :class="{'select_input': selectInput===item.tag+'_valueSerial'}"
                 v-model="item.valueSerial"
-                placeholder="请选择数值序列"
+                :placeholder="$t('CustomAnalysisPage.select_date_numerical')"
                 style="width: 180px"
+                @focus="handleChooseInput(item.tag+'_valueSerial')"
               ></el-input>
             </el-form-item>
-            <el-form-item label="指标名称">
+            <el-form-item :label="$t('Table.edb_name')">
               <el-input
                 v-model="item.name"
-                placeholder="请输入指标名称"
+                :placeholder="$t('Edb.InputHolderAll.input_name')"
                 style="width: 180px"
               ></el-input>
             </el-form-item>
@@ -226,7 +246,7 @@
             > 
               <!-- 堆积柱状图只有第一个指标有设置左右轴和逆序功能 -->
               <template v-if="!(formData.chartType ===4&&index>0)">
-              <el-radio-group v-model="item.axis" size="mini">
+              <el-radio-group v-model="item.axis" size="mini" @change="handleAxisChange">
                 <el-radio-button :label="1">{{
                   $t("Chart.Detail.l_axis")
                 }}</el-radio-button>
@@ -329,10 +349,10 @@
             ></el-checkbox>
             <!-- 春节对齐 -->
             <el-radio-group v-model="SeasonExtraConfig.type" size="mini">
-              <!-- 标准指标 -->
-              <el-radio-button :label="1">公历</el-radio-button>
-              <!-- 领先指标 -->
-              <el-radio-button :label="0">春节对齐</el-radio-button>
+              <!-- 公历 -->
+              <el-radio-button label="公历">{{$t('Chart.calendar_gre')}}</el-radio-button>
+              <!-- 农历 -->
+              <el-radio-button label="农历">{{$t('Chart.calendar_lunar')}}</el-radio-button>
             </el-radio-group>
           </div>
           <!-- 季节图设置图例名称按钮 -->
@@ -353,7 +373,8 @@
             @click="handleAddEdb"
             v-if="formData.chartType !== 2"
           >
-            添加指标
+            <!-- 添加指标 -->
+            {{$t('SteelChemicalPage.add_edb')}}
           </div>
         </el-form>
       </div>
@@ -381,6 +402,7 @@
 </template>
 
 <script>
+import * as sheetInterface from "@/api/modules/sheetApi.js";
 import LegendEditDia from '@/views/dataEntry_manage/components/LegendEditDia.vue';
 import { generateSeriesArray } from '@/views/dataEntry_manage/databaseComponents/util'
 const tag_arr = generateSeriesArray();
@@ -391,6 +413,17 @@ export default {
     isShow: {
       type: Boolean,
     },
+    ExcelInfoId:0
+  },
+  watch: {
+    'formData.chartType':{
+      handler(newVal,oldVal){
+        if(newVal===2&&this.edbList.length>1){
+          this.formData.chartType = oldVal;
+					return this.$message.warning(/* '您选择的图表样式为季节性图表,只支持单指标画图' */this.$t('Chart.OptMsg.season_one_msg'));
+        }
+      }
+    }
   },
   computed: {
     hasLeftAxis() {
@@ -413,7 +446,7 @@ export default {
       ],
       formData: {
         chartName: '',
-        chartSource: '',
+        chartSource: '平衡表',
         showChartSource: false,
         chartType: 1,
         leftMin: 0,
@@ -430,19 +463,119 @@ export default {
 				XEndDate:"12-31", // 横坐标显示范围-结束
 				JumpYear:false, //是否跨年
         isSpanYearDisable:false,
-        type:1,
+        type:'公历',
 			},
       legendEditDiaShow:false,
 
       formRules: {},
 
-      edbList: [],
+      edbList: [],//sheet1!$A$3:$A$13
+      selectInput:''
     }
   },
   created() {
     this.edbList.push(this.createEbdListItem('A'))
   },
   methods: {
+    // 点击选中哪个指标的时间\数值序列
+    handleChooseInput(e){
+      this.selectInput=e
+    },
+
+    // 指标轴改变
+    handleAxisChange(){
+      this.updateLimit()
+    },
+
+    // 选中的序列
+    tableSelect(start,end,str){
+      if(this.selectInput){
+        // 如果选择的不是同行或者同列 
+        if(!(start.col==end.col||start.row==end.row)){
+          this.$message.warning(this.$t('CustomAnalysisPage.only_allowed_select_msg'));
+          return
+        }
+        //查找到是哪个指标
+        const tag=this.selectInput.split('_')[0]
+        const type=this.selectInput.split('_')[1]
+        this.edbList.forEach(edb => {
+          if(edb.tag===tag){
+            if(type==='timeSerial'){
+              edb.timeSerial=str
+            }
+            if(type==='valueSerial'){
+              edb.valueSerial=str
+              edb.maxData=this.findLimitData(start,end).maxData
+              edb.minData=this.findLimitData(start,end).minData
+              this.updateLimit()
+            }
+          }
+        });
+      }
+    },
+
+    // 根据选择的数据更新上下限
+    updateLimit(){
+      let leftArr=[],rightArr=[],rightTwoArr=[];
+      this.edbList.forEach(item=>{
+        if(item.axis===1){
+          leftArr.push(...[item.minData,item.maxData])
+        }
+        if(item.axis===0){
+          rightArr.push(...[item.minData,item.maxData])
+        }
+        if(item.axis===2){
+          rightTwoArr.push(...[item.minData,item.maxData])
+        }
+      })
+      this.formData.leftMin=Math.min(...leftArr)||0
+      this.formData.leftMax=Math.max(...leftArr)||0
+      this.formData.rightMin=Math.min(...rightArr)||0
+      this.formData.rightMax=Math.max(...rightArr)||0
+      this.formData.rightTwoMin=Math.min(...rightTwoArr)||0
+      this.formData.rightTwoMax=Math.max(...rightTwoArr)||0
+    },
+
+    // 找出选择的最大最小值
+    findLimitData(start,end){
+      let minData=0,maxData=0;
+      const data=this.$parent.config.data
+      // console.log(data);
+      let numArr=[]
+      // 判断是选择的同行还是同列
+      if(start.col===end.col&&start.row!=end.row){//同列
+        for (let index = start.row; index < data.length; index++) {
+         numArr.push(data[index][start.col].ShowValue)
+        }
+      }
+      if(start.col!=end.col&&start.row==end.row){//同行
+        const rowData=data[start.row]
+        for (let index = start.col; index <= end.col; index++) {
+          numArr.push(rowData[index].ShowValue)
+        }
+      }
+      //只选择了一个单元格
+      if(start.row===end.row&&start.col===end.col){
+        numArr.push(data[start.row][start.col].ShowValue)
+      }
+
+      numArr=[...new Set(numArr)]
+      numArr=numArr.filter(item=>!isNaN(item)).map(Number)
+      
+      if(numArr.length!==0){
+        maxData=Math.max(...numArr)
+        minData=Math.min(...numArr)
+      }
+
+      // console.log(numArr);
+      // console.log(minData,maxData);
+      return{
+        maxData,
+        minData
+      }
+    },
+
+
     // 图例编辑接口保存
 		saveLegend(copyList){
 			if(copyList && copyList.length>0){
@@ -452,7 +585,7 @@ export default {
 			}
 		},
 
-
+    //添加指标
     handleAddEdb() {
       if (this.edbList.length === MAX_ADD_NUM) {
         this.$message.warning(this.$t('EtaBasePage.num_overrun_msg'))
@@ -469,6 +602,8 @@ export default {
         tag: t,
         timeSerial: '',
         valueSerial: '',
+        maxData:0,//选中数据的最大值
+        minData:0,//选中数据的最大=小值
         name: '',
         axis: 1,//哪个轴 1左轴 0右轴 2右二轴
         EdbInfoType: 1,//指标类型 1标准指标 0领先指标
@@ -481,10 +616,86 @@ export default {
     handleDelEdb(index) {
       this.edbList.splice(index, 1)
     },
+    // 初始化表单
     initData() {
+      // this.
+    },
+    saveHandle() { 
+      const params={
+        ExcelInfoId:this.ExcelInfoId,
+        ChartInfoId:0,
+        ChartEdbInfoList:[],
+        ChartName:this.formData.chartName,
+        ChartType:this.formData.chartType,
+        SourcesFrom:JSON.stringify({
+          text:this.formData.chartSource,
+          isShow:this.formData.showChartSource
+        }),
+        LeftMin:this.formData.leftMin+'',
+        LeftMax:this.formData.leftMax+'',
+        RightMin:this.formData.rightMin+'',
+        RightMax:this.formData.rightMax+'',
+        Right2Min:this.formData.rightTwoMin+'',
+        Right2Max:this.formData.rightTwoMax+'',
+        MinMaxSave:1,
+        Source:11
+      }
+
+      // 季节图横坐标范围必须有
+      if(params.ChartType===2){
+        params.SeasonExtraConfig={
+          ChartLegend:this.SeasonExtraConfig.ChartLegend,// 图例名称数组
+          XStartDate:this.SeasonExtraConfig.XStartDate,
+          XEndDate:this.SeasonExtraConfig.XEndDate,
+          JumpYear:this.SeasonExtraConfig.JumpYear?1:0
+        }
+        params.Calendar=this.SeasonExtraConfig.type
+
+        //季节图横坐标范围必须有
+        if(!(params.SeasonExtraConfig.XStartDate&&params.SeasonExtraConfig.XEndDate)){
+          this.$message.warning('横坐标显示范围不能为空');
+          return
+        }
+
+      }
+      if(!params.ChartName){
+        this.$message.warning('请填写图表名称')
+        return
+      }
+
+      // 处理指标数据
+      let arr=[]
+      this.edbList.forEach(item=>{
+        arr.push({
+          FromTag:item.tag,
+          ExcelChartEdbId:0,
+          EdbName:item.name,
+          IsAxis:item.axis,
+          IsOrder:item.IsOrder,
+          EdbInfoType:item.EdbInfoType,
+          LeadUnit:item.leadUnit,
+          LeadValue:item.leadVal,
+          MaxData:item.maxData,
+          MinData:item.minData,
+          DateSequenceStr:item.timeSerial,
+          DataSequenceStr:item.valueSerial
+        })
+      })
+      params.ChartEdbInfoList=arr
+      // 检测选择的指标名称是否填写了
+      for (let index = 0; index < params.ChartEdbInfoList.length; index++) {
+        const item = params.ChartEdbInfoList[index];
+        if(!item.EdbName) return this.$message.warning(`第${index+1}个指标名称未填写`)
+      }
+
+      sheetInterface.addBalanceChart(params).then(res=>{
+        if(res.Ret===200){
+          this.$message.success(this.$t('MsgPrompt.add_msg2'));
+          this.$emit('success')
+        }
+      })
 
     },
-    saveHandle() { },
     cancelHandle() {
       this.$emit('update:isShow', false);
     },
@@ -505,6 +716,14 @@ export default {
       padding: 0;
     }
   }
+  .select_input .el-input__inner {
+       border: 2px dashed #18ad18;
+      border-radius: 4px;
+    }
+}
+    /*他不要下拉选择框 QAQ */
+.x-range-picker-date {
+	display: none;
 }
 .dia-bot{
   text-align: center;

+ 132 - 0
src/views/datasheet_manage/components/BalanceSheetChartItem.vue

@@ -0,0 +1,132 @@
+<template>
+    <div class="chart-item-wrap">
+        <div class="chart-item-box">
+            <div style="text-align:center">{{chartInfo.ChartName}}</div>
+            <Chart 
+                :options="options" 
+                :chartInfo="chartInfo" 
+                :index="chartInfo.ChartInfoId"
+                height="330px"
+                ref="chartRef"
+            />
+        </div>
+        <div class="opt-box">
+            <span>{{$t('Chart.Detail.source')}}:{{ JSON.parse(chartInfo.SourcesFrom).text}}</span>
+            <div>
+                <!-- 加入我的图库 -->
+                <span class="btn-o" @click="handleAddMyChart">{{$t('Chart.chart_addmy_btn')}}</span>
+                <!-- 编辑 -->
+                <span class="btn-o">{{$t('Chart.chart_edit_btn')}}</span>
+                <!-- 删除 -->
+                <span class="btn-o" style="color:#f00">{{$t('Chart.chart_del_btn')}}</span>
+            </div>
+        </div>
+
+        <!-- 加入我的图库弹窗 -->
+        <addMyClassifyDia
+            :isAddMyDialog="isAddMyChart"
+            :add_id="add_chart_id"
+            :add_ids="add_ids"
+            @cancel="isAddMyChart = false"
+            @addSuccess="addMySuccess"
+        />
+    </div>
+</template>
+
+<script>
+import { dataBaseInterface } from '@/api/api.js';
+import { chartSetMixin } from '@/views/dataEntry_manage/mixins/chartPublic'
+import Chart from '@/views/dataEntry_manage/components/chart';
+import addMyClassifyDia from '@/views/dataEntry_manage/components/addMyClassifyDia';
+export default {
+    components:{Chart,addMyClassifyDia},
+    props:{
+        chartData:{}
+    },
+    mixins: [chartSetMixin],
+    watch: {
+        chartData:{
+            handler(nval){
+                console.log('图表数据',nval);
+                this.initData(nval)
+            },
+            deep:true,
+            immediate:true
+        }
+    },
+    data() {
+        return {
+            chartInfo: {}, //图表信息
+
+            isAddMyChart:false,//加入图库弹窗
+            add_chart_id: 0, //要加入的图表
+            add_ids:[],//加入时已有的分类
+        }
+    },
+    methods: {
+        initData(data){
+            this.chartInfo=data.ChartInfo
+            this.tableData=data.EdbInfoList
+            this.tableData.length&&this.setChartOptionHandle(this.tableData)
+        },
+
+        /* 加入我的图库成功 */
+        addMySuccess(params){
+            this.isAddMyChart = false;
+            this.chartInfo.IsAdd = true;
+            this.chartInfo.MyChartId = params.MyChartInfoId;
+            this.chartInfo.MyChartClassifyId = params.MyChartClassifyId
+
+            // 如果没有图表图片则生成一次
+            if(!this.chartInfo.ChartImage) {
+                this.getChartImg()
+            }
+        },
+        async getChartImg(){
+            let svg = this.$refs.chartRef.chart.getSVG({
+                chart: {
+                width: 340,
+                height: 230,
+                }
+            });
+            let form = new FormData();
+            form.append('Img', svg);
+            let { Data } = await dataBaseInterface.uploadImgSvg(form);
+
+            await dataBaseInterface.setChartImage({
+                ChartInfoId: this.chartInfo.ChartInfoId,
+                ImageUrl: Data.ResourceUrl,
+            });
+        },
+
+        handleAddMyChart(){
+            this.add_chart_id = this.chartInfo.ChartInfoId;
+            //已有的分类ids
+            this.add_ids = this.chartInfo.MyChartClassifyId ? this.chartInfo.MyChartClassifyId.split(',').map(item => Number(item)) : [];
+            this.isAddMyChart = true;
+        }
+    },
+}
+</script>
+
+<style lang="scss" scoped>
+.chart-item-wrap{
+    margin-bottom: 20px;
+    .chart-item-box{
+        padding: 10px;
+        border: 1px solid #C8CDD9;
+        border-radius: 8px;
+    }
+    .opt-box{
+        margin-top: 5px;
+        display: flex;
+        justify-content: space-between;
+        .btn-o{
+            display: inline-block;
+            margin-left: 5px;
+            cursor: pointer;
+            color: #0052D9;
+        }
+    }
+}
+</style>

+ 23 - 7
src/views/datasheet_manage/components/BalanceSheetList.vue

@@ -30,7 +30,7 @@
             class="editsty"
             @click="itemHandle(row, 'edit')"
             style="margin-right: 10px"
-            >{{ $t("ETable.Btn.edit_btn") }}</span
+            >{{row.CanEdit?$t("ETable.Btn.edit_btn"):row.Editor+$t('OnlineExcelPage.editing_msg')}}</span
           >
           <span
             class="editsty"
@@ -122,12 +122,7 @@ export default {
   methods: {
     itemHandle(data,type){
       if(type==='edit'){
-        this.$router.push({
-          path:'/editBalanceSheet',
-          query:{
-            id:data.ExcelInfoId
-          }
-        })
+        this.handleEdit(data)
         return
       }
       if(type==='refresh'){
@@ -150,6 +145,27 @@ export default {
 
     },
 
+    // 去编辑
+    async handleEdit(data){
+      const res=await sheetInterface.markSheetEditStatus({ExcelInfoId: data.ExcelInfoId,Status:1})
+      if(res.Ret!==200) return
+      if(res.Data.Status==0){
+        this.$router.push({
+          path:'/editBalanceSheet',
+          query:{
+            id:data.ExcelInfoId
+          }
+        })
+      }else if(res.Data.Status==1){//编辑中
+        const text=`${res.Data.Editor}${this.$t('OnlineExcelPage.editing_msg')}`
+        this.$emit('updateEdit',{
+          ExcelInfoId:data.ExcelInfoId,
+          Editor:res.Data.Editor,
+        })
+        this.$message.warning('当前'+text)
+      }
+    },
+
     /* 刷新表格 */
     refreshSheetEdb: _.debounce(async function (id) {
       if(this.sheetRefreshing) return

+ 51 - 10
src/views/datasheet_manage/components/BalanceTable.vue

@@ -238,7 +238,12 @@
           </div>
         </div>
         <!-- 图表模块 -->
-        <div class="right-wrap"></div>
+        <div class="right-wrap" v-if="chartList.length>0">
+          <div class="chart-list">
+            <BalanceSheetChartItem :chartData="item" v-for="item in chartList" :key="item.ChartInfo.ChartInfoId"/>
+          </div>
+          
+        </div>
       </div>
 
       <!-- 右键菜单 -->
@@ -345,6 +350,8 @@
     <BalanceAddChart
       ref="balanceAddChart"
       :isShow.sync="isShowAddChart"
+      :ExcelInfoId="activeSheetId"
+      @success="addChartSuccess"
     />
   </div>
 </template>
@@ -379,9 +386,10 @@ import calculateDateDia from './calculateDateDia.vue';
 import toolBarSection from './toolBarSection.vue';
 import { formulaTip } from '@/views/dataEntry_manage/databaseComponents/util';
 import BalanceAddChart from './BalanceAddChart.vue';
+import BalanceSheetChartItem from './BalanceSheetChartItem.vue';
 
-let autoSaveInterval=null//自动保存定时器
-let dblclickInterval=null//双击事件的定时器 为了解决同一个元素双击事件重复触发单击事件的问题
+let autoSaveInterval=null;//自动保存定时器
+let dblclickInterval=null;//双击事件的定时器 为了解决同一个元素双击事件重复触发单击事件的问题
 
 export default {
   props: {
@@ -396,7 +404,8 @@ export default {
     calculateEdbDia,
     calculateDateDia,
     toolBarSection,
-    BalanceAddChart
+    BalanceAddChart,
+    BalanceSheetChartItem
   },
   computed: {
     //列头
@@ -492,6 +501,7 @@ export default {
       activeSheetId:0,//当前子表id
 
       isShowAddChart:false,//添加图表
+      chartList:[],//当前平衡表图表数据
 
       startSelectTable:false,//开始选择单元格
       selectionStart: null,
@@ -510,13 +520,28 @@ export default {
     clearInterval(autoSaveInterval)
   },
   methods: {
+    // 获取图表数据
+    async getChartList(){
+      const res = await sheetInterface.getBalanceChartData({
+				ExcelInfoId: Number(this.activeSheetId)
+			})
+      if(res.Ret!==200) return 
+      this.chartList=res.Data.List||[]
+    },
+
+    // 添加图表成功回调
+    addChartSuccess(){
+      this.isShowAddChart=false
+      this.getChartList()
+    },
+
 
     startSelection(startRow, startCol) {
       console.log('开始选择');
       this.startSelectTable=true
       this.selectionStart = { row: startRow, col: startCol };
       this.selectionEnd = { row: startRow, col: startCol };
-      this.clearSelectedCells();
+      this.selectedCells = [];
     },
     extendSelection(endRow, endCol) {
       if (this.selectionStart) {
@@ -526,7 +551,7 @@ export default {
         const maxRow = Math.max(start.row, end.row);
         const minCol = Math.min(start.col, end.col);
         const maxCol = Math.max(start.col, end.col);
-        this.clearSelectedCells();
+        this.selectedCells = [];
         for (let row = minRow; row <= maxRow; row++) {
           for (let col = minCol; col <= maxCol; col++) {
             this.selectedCells.push({ row, col });
@@ -535,18 +560,24 @@ export default {
         this.selectionEnd = end;
       }
     },
+    // 选择表格结束
     endSelection() {
       console.log('结束选择');
-      console.log(this.selectionStart,this.selectionEnd);
+      // console.log(this.selectedCells);
+      // console.log(this.selectionStart,this.selectionEnd);
+      if(this.selectionStart){
+        // 找到当前sheet 数据
+        const sobj=this.sheetOpts.filter(_e=>_e.ExcelInfoId===this.activeSheetId)[0]
+        const str=`${sobj.ExcelName}!$${this.columnHeader[this.selectionStart.col]}$${this.selectionStart.row+1}:$${this.columnHeader[this.selectionEnd.col]}$${this.selectionEnd.row+1}`
+        this.$refs.balanceAddChart.tableSelect(this.selectionStart,this.selectionEnd,str)
+      }
+      
       this.selectionStart = null;
       this.startSelectTable=false
     },
     isSelected(row, col) {
       return this.selectedCells.some(cell => cell.row === row && cell.col === col);
     },
-    clearSelectedCells() {
-      this.selectedCells = [];
-    },
 
     // 点击添加sheet
     async handleAddSheet() {
@@ -699,6 +730,9 @@ export default {
       this.updateTime =  this.$moment(ModifyTime).format('YYYY-MM-DD HH:mm:ss')
 
       this.initData(TableData);
+
+      // 获取平衡表中的图表
+      this.getChartList()
       
       type==='refresh' && this.$message.success(this.$t('OnlineExcelPage.table_data_update_msg') )
     },
@@ -1698,6 +1732,13 @@ export default {
       width: 400px;
       margin-left: 20px;
       flex-shrink: 0;
+      .chart-list{
+        background-color: #fff;
+        height: 100%;
+        height: calc(100vh - 440px);
+        overflow-y: auto;
+        padding: 20px;
+      }
     }
   }
   .table-wrap {

+ 11 - 0
src/views/datasheet_manage/sheetList.vue

@@ -177,6 +177,7 @@
           @loadMoreHandle="loadMoreHandle"
           @delSheetHandle="delSheetHandle"
           @downloadExcel="downloadExcel"
+          @updateEdit="balanceSheetUpdateEdit"
         />
       </div>
 
@@ -652,6 +653,16 @@ export default {
           } 
         });
     },
+    // 更新平衡表编辑状态
+    balanceSheetUpdateEdit(data){
+      // 找到哪个表格
+      this.sheetList.forEach(item => {
+        if(item.ExcelInfoId===data.ExcelInfoId){
+          item.CanEdit=false
+          item.Editor=data.Editor
+        }
+      });
+    },
 
     /* 添加表格 */
     goAddSheetHandle() {