Karsa 1 rok pred
rodič
commit
ee7723b308

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

@@ -245,4 +245,13 @@ export const searchTarget  = params => {
  */
 export const insertData = params => {
 	return http.get('/datamanage/edb_info/date_data',params)
+}
+
+/**
+ * 获取日期最近几期的数据
+ * @param {*} params EdbInfoId Date Num
+ * @returns 
+ */
+export const getDateLatelyData = params => {
+	return http.get('/datamanage/edb_info/date_data/before_after',params)
 }

+ 11 - 4
src/views/datasheet_manage/common/customTable.js

@@ -183,14 +183,14 @@ export function checkDateFormat(str) {
   }
 }
 
-/* 根据key找到关联格子 设置关联格子样式 */
-export function setRelationStyle(query) {
+/* 根据key找到格子 设置格子样式 */
+export function setRelationStyle(query,classname="td-relation") {
   const { key } = query;
 
   let table = document.querySelector('.table');
   let el = table.querySelector("td[data-key='" + key + "']");
   
-  el.nodeName==='TD' && $(el).addClass("td-relation")
+  el.nodeName==='TD' && $(el).addClass(classname)
 }
 
 //根据cell key找到cell数据
@@ -210,7 +210,6 @@ export function findCellByKey(arr,key) {
   return cell
 }
 
-
 /* 清空插入单元格重置关联样式 */
 export function resetRelationStyle() {
   let table = document.querySelector('.table');
@@ -219,3 +218,11 @@ export function resetRelationStyle() {
   })
 }
 
+/* 重置右键选择指标时的单元格标识样式 弹窗消失样式就消失 */
+export function resetDialogCellStyle() {
+  let table = document.querySelector('.table');
+  table.querySelectorAll(".td-choose-insert-target").forEach(el => {
+    el.classList.remove('td-choose-insert-target')
+  })
+}
+

+ 6 - 6
src/views/datasheet_manage/components/CustomTable.vue

@@ -72,7 +72,7 @@
                 :key="edb_index"
                 :data-rindex="rowHeader[dateIndex]"
                 :data-cindex="columnHeader[edb_index]"
-                :class="([2,3].includes(edb.Data.find(_ =>_.DataTime === date).DataType)&&edb.Data.find(_ =>_.DataTime === date).ShowValue)?'insert': ''"
+                :class="([2,3,5].includes(edb.Data.find(_ =>_.DataTime === date).DataType)&&edb.Data.find(_ =>_.DataTime === date).ShowValue)?'insert': ''"
                 @click="clickCell($event,edb.Data.find(_ =>_.DataTime === date))"
                 @dblclick="dblClickCell($event,edb.Data.find(_ =>_.DataTime === date))"
               >
@@ -113,7 +113,7 @@
                 :key="`${index}_${cell_index}`"
                 :data-rindex="rowHeader[index+dateArr.length]"
                 :data-cindex="cell_index===0?-1:columnHeader[cell_index-1]"
-                :class="([2,3].includes(cell.DataType)&&cell.ShowValue)?'insert': ''"
+                :class="([2,3,5].includes(cell.DataType)&&cell.ShowValue)?'insert': ''"
                 @click="clickCell($event,cell)"
                 @dblclick="dblClickCell($event,cell)"
               >
@@ -189,7 +189,7 @@
                 :key="index"
                 :data-cindex="-1"
                 :data-rindex="rowHeader[index+dateArr.length]"
-                :class="([2,3].includes(column[0].DataType)&&column[0].ShowValue)?'insert': ''"
+                :class="([2,3,5].includes(column[0].DataType)&&column[0].ShowValue)?'insert': ''"
                 @click="clickCell($event,column[0])"
                  @dblclick="dblClickCell($event,column[0])"
               >
@@ -243,7 +243,7 @@
                 :key="`${edb.EdbInfoId}_${rowHeader[data_index]}_${columnHeader[edb_index]}`"
                 :data-rindex="rowHeader[data_index]"
                 :data-cindex="columnHeader[edb_index]"
-                :class="([2,3].includes(data.DataType)&&data.ShowValue)?'insert': ''"
+                :class="([2,3,5].includes(data.DataType)&&data.ShowValue)?'insert': ''"
                 @click="clickCell($event,data)"
                 @dblclick="dblClickCell($event,data)"
               >
@@ -274,7 +274,7 @@
                 :key="`${rowHeader[column_index+dateArr.length]}_${columnHeader[edb_index]}`"
                 :data-rindex="rowHeader[column_index+dateArr.length]"
                 :data-cindex="columnHeader[edb_index]"
-                :class="([2,3].includes(column[edb_index+1].DataType)&&column[edb_index+1].ShowValue)?'insert': ''"
+                :class="([2,3,5].includes(column[edb_index+1].DataType)&&column[edb_index+1].ShowValue)?'insert': ''"
                 @click="clickCell($event,column[edb_index+1])"
                 @dblclick="dblClickCell($event,column[edb_index+1])"
               >
@@ -439,7 +439,7 @@ export default {
         type: this.sheetType,
         order: 2,// 1降序 2升序
         EdbKeys: ["EdbName", "Unit"],
-        data: [], //单元格类型 1默认格 2补充格 3自定义输入 4公式求值格
+        data: [], //单元格类型 1默认格 2补充格 3自定义输入 4公式求值格 5预测值
         textRowData: [],
         contextMenuOption: [
           { label: '删除',key: 'del' },

+ 67 - 25
src/views/datasheet_manage/components/MixedTable.vue

@@ -64,15 +64,19 @@
                 :data-key="cell.Uid"
                 :data-rindex="rowHeader[index]"
                 :data-cindex="columnHeader[cell_index]"
+                :highlight-first-item="cell.DataType===2"
                 @select="selectTarget($event,cell)"
                 @click="clickCell($event, cell)"
                 @change.native="changeVal($event, cell)"
               >
                 <template slot-scope="scope">
                     <edbDetailPopover :info="scope.item">
-                      <div slot="reference">
-                          {{ scope.item.EdbName }}
+                      <div slot="reference" v-if="cell.DataType===2" class="edb-item">
+                         <span class="edb-item-name text_oneLine">{{ scope.item.EdbName }}</span>
+                         <i class="el-icon-check" style="color:#0052D9;font-size:18px;"/>
                       </div>
+
+                      <div slot="reference" v-else>{{ scope.item.EdbName }}</div>
                     </edbDetailPopover>
                 </template>
               </el-autocomplete>
@@ -109,9 +113,11 @@ import {
   checkDateFormat,
   setFocus,
   findCellByKey,
-  resetRelationStyle
+  resetRelationStyle,
+  resetDialogCellStyle
 } from "../common/customTable";
 import * as sheetInterface from "@/api/modules/sheetApi.js";
+import { dataBaseInterface } from '@/api/api.js';
 import md5 from '@/utils/md5.js';
 import selectTargetValueDia from './selectTargetValueDia.vue';
 export default {
@@ -160,17 +166,21 @@ export default {
   methods: {
 
     async searchTarget(query,cb) {
-      if(!query) return cb([])
-      // cb([])
+      if(!query||checkDateFormat(query)) return cb([])
       
-      const res = await sheetInterface.searchTarget({
-        KeyWord: query,
-        CurrentIndex: 1,
-        PageSize: 1000
-      })
+      const { DataType,EdbInfoId } = this.selectCell;
+
+      const res = DataType===2 
+        ? await dataBaseInterface.targetDetail({EdbInfoId})
+        : await sheetInterface.searchTarget({
+            KeyWord: query,
+            CurrentIndex: 1,
+            PageSize: 1000
+          })
       if(res.Ret !== 200) return
 
-      cb(res.Data.List)
+      let arr = DataType===2 ? [res.Data] : (res.Data.List||[])
+      cb(arr);
     },
 
     /* 单击 */
@@ -183,7 +193,7 @@ export default {
       setFocus(e);
 
       //插入值时寻找关联依赖的单元格 设置选框
-      if(cell.DataType === 4) {
+      if([4,5].includes(cell.DataType)) {
         const { key } = e.target.dataset;
         if(!this.insertRelationArr.find(_ => _.key===key)) return
         let { relation_date,relation_edb } = this.insertRelationArr.find(_ => _.key===key)
@@ -303,16 +313,20 @@ export default {
 
     },
 
-    /* 选择指标 单元格类型为2*/
+    /* 选择指标 单元格类型为2 已经是指标单元格了就重置单元格 否则就视为选择指标*/
     selectTarget(e,cell) {
       const { EdbName,EdbInfoId }  = e;
 
-      cell.DataType = 2;
-      cell.DataTime = '';
-      cell.ShowValue = EdbName;
-      cell.Value = EdbName;
-      cell.EdbInfoId = EdbInfoId;
-
+      //如果已经是指标单元格了再次点击就清空
+      if(cell.DataType===2&&cell.EdbInfoId) {
+        this.clearCell()
+      }else {
+        cell.DataType = 2;
+        cell.DataTime = '';
+        cell.ShowValue = EdbName;
+        cell.Value = EdbName;
+        cell.EdbInfoId = EdbInfoId;
+      }
 
       this.checkCellRelation(cell)
     },
@@ -374,7 +388,7 @@ export default {
           //刷新插入值结果
           let params = null;
           if(relation_date.key === key && cell.DataType === 1) { //修改的是依赖日期格
-            let { EdbInfoId } = findCellByKey(this.config.data,relation_edb.key)
+            let { EdbInfoId } = findCellByKey(this.config.data,relation.key)
             params = {
               EdbInfoId,
               Date: cell.ShowValue
@@ -396,7 +410,7 @@ export default {
           res.Data && this.config.data.forEach(row => {
             row.forEach(cell => {
               if(cell.Uid === relation.key) {
-                  cell.DataType = 4;
+                  cell.DataType = relation.type;
                   cell.ShowValue = res.Data;
                   cell.Value = res.Data;
                   cell.EdbInfoId = params.EdbInfoId;
@@ -491,18 +505,29 @@ export default {
     打开弹窗后仍可以在页面上点击 多存一个选择指标时的信息 */
     selectTargetOpen() {
       this.insertTargetCell = this.selectCell;
+      resetDialogCellStyle();
+      setRelationStyle({ key:this.insertTargetCell.Uid },'td-choose-insert-target')
       this.isSelectTargetValueDialog = true;
     },
 
     /* 插入选择指标的值 */
     insertSelectData({ edbId,value }) {
-        // let { key } = this.insertTargetCell;
+
       this.insertTargetCell.DataType = 5;
       this.insertTargetCell.ShowValue = value;
       this.insertTargetCell.Value = value;
       this.insertTargetCell.EdbInfoId = edbId;
 
-      // console.log(this.insertTargetCell)
+      //建立新的关联关系
+      let relation = {
+        insert_cell: {
+          key: this.insertTargetCell.Uid,
+          relation_date: this.selectCell.Uid,
+          relation_edb: '',
+        }
+      }
+
+      this.setRelation(relation,5);
 
     },
 
@@ -707,8 +732,17 @@ export default {
       border-left: none;
       border-right: none;
     }
-    &.insert {
-      background: #ffefdd;
+    &.td-choose-insert-target::after {
+      position: absolute;
+      top: 0;
+      left: 0;
+      right: 0;
+      bottom: 0;
+      content: "";
+      display: block;
+      outline: 0;
+      border: 2px dashed orange;
+      box-shadow: 0 0 5px rgba(73, 177, 249, 0.5);
     }
   }
 
@@ -778,5 +812,13 @@ export default {
 }
 .edb-select-popover {
   width: 300px !important;
+  .edb-item {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    .edb-item-name {
+      max-width: 260px;
+    }
+  }
 }
 </style>

+ 30 - 12
src/views/datasheet_manage/components/selectTargetValueDia.vue

@@ -23,7 +23,7 @@
       </ul>
 
       <div class="dia-bot">
-        <el-button type="primary" style="margin-right: 20px" @click="insertData"
+        <el-button type="primary" style="margin-right: 20px" :disabled="!dataList.length" @click="insertData"
           >插入值</el-button
         >
         <el-button type="primary" plain @click="cancelHandle">取消</el-button>
@@ -34,27 +34,28 @@
 </div>
 </template>
 <script>
+import * as sheetInterface from "@/api/modules/sheetApi.js";
 import selectTarget from '@/views/chartRelevance_manage/components/selectTarget.vue';
-import draggable from 'vuedraggable';
+import { resetDialogCellStyle } from "../common/customTable";
 export default {
   props: {
     isShow: {
       type: Boolean,
     }
   },
-  components: { selectTarget,draggable },
+  components: { selectTarget },
   data() {
     return {
-      dataList: [
-        { Value: 1515, DataTime: '2020-5-6' },
-        { Value: 1515, DataTime: '2020-5-6' },
-      ],
-      edbId: 0,
+      dataList: [],
+      chooseItem: {
+        edbId: 0,
+        value:''
+      }
     }
   },
   methods:{
     /* 选择指标和日期获取近5期数据 */
-    chooseEdb(edb) {
+    async chooseEdb(edb) {
       if(!edb) return
       
       if(this.$parent.selectCell.DataType !== 1){
@@ -63,16 +64,33 @@ export default {
         this.$refs.selectRef.search_txt='';
         return
       }
+      this.dataList = [];
+
+      const res = await sheetInterface.getDateLatelyData({ 
+        EdbInfoId: edb.EdbInfoId,
+        Date: this.$parent.selectCell.ShowValue
+      })
+      if(res.Ret !== 200) return
+
+      this.dataList = res.Data || [];
+      this.chooseItem = {
+        edbId: edb.EdbInfoId,
+        value: this.dataList.find(_ =>_.DataTime===this.$parent.selectCell.ShowValue)?this.dataList.find(_ =>_.DataTime===this.$parent.selectCell.ShowValue).Value:''
+      }
+
     },
 
     insertData() {
-      let data = { edbId:this.edbId,value: '2000' };
-      this.$emit('insert',data)
+      this.$emit('insert',this.chooseItem)
       this.cancelHandle();
     },
 
     cancelHandle() {
-      this.$emit('update:isShow',false)
+      this.dataList = [];
+      this.chooseItem = { edbId:0,value:'' };
+      this.$refs.selectRef.search_txt='';
+      this.$emit('update:isShow',false);
+      resetDialogCellStyle();
     }
   },
 }

+ 10 - 2
src/views/datasheet_manage/customSheetEdit.vue

@@ -132,8 +132,16 @@ export default {
       if(this.$refs.customTableRef.config.data.find(_ => _.EdbInfoId===EdbInfoId)) return this.$message.warning('指标已存在')
       
       const {Data} = this.$refs.customTableRef.config.data.length 
-      ? await sheetInterface.getEdbInsertDataOther({EdbInfoId: EdbInfoId,DateList: this.$refs.customTableRef.dateArr})
-      : await sheetInterface.getEdbInsertDataA({EdbInfoId: EdbInfoId,Num: 12})
+      ? await sheetInterface.getEdbInsertDataOther({
+        EdbInfoId: EdbInfoId,
+        DateList: this.$refs.customTableRef.dateArr,
+        SortType: this.$refs.customTableRef.config.order===1 ? 'desc' : 'asc'
+      })
+      : await sheetInterface.getEdbInsertDataA({
+        EdbInfoId: EdbInfoId,
+        SortType: this.$refs.customTableRef.config.order===1 ? 'desc' : 'asc',
+        Num: 12
+      })
       
       this.$refs.customTableRef.updateEdbData({
         Data: Data.Data.map(_ => ({..._,DataTimeType: 1,})),