Browse Source

插入系统日期,指标日期

Karsa 1 year ago
parent
commit
0a24fc9601

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

@@ -256,6 +256,17 @@ export const getDateLatelyData = params => {
 	return http.get('/datamanage/edb_info/date_data/before_after',params)
 }
 
+/**
+ * 获取系统日期
+ * @param {*} params 
+ * "DataTimeType": 1,
+    "Value": "{\"Source\":3,\"Frequency\":\"本周\",\"Day\":\"周日\",\"CalculateNum\":0,\"CalculateFrequency\":\"\"}"
+ * @returns 
+ */
+export const getSystemDate = params => {
+	return http.post('/datamanage/excel_info/get_system_date',params)
+}
+
 
 /* =====自定义分析==== */
 

+ 13 - 8
src/views/datasheet_manage/common/customTable.js

@@ -136,7 +136,16 @@ export function setCellBg(e) {
 }
 
 //右键菜单
-export function getRightClickMenu(pos) {
+export function getRightClickMenu(pos,canEdit=false) {
+
+  let cellMenu = [
+    { label: "根据表格中日期选择指标值", key: "choose-target" },
+    { label: "插入指标值", key: "insert-value" },
+    { label: "导入系统日期", key: "insert-sys-date" },
+    { label: "导入指标日期", key: "insert-edb-date" },
+    { label: "清空", key: "reset" },
+  ]
+
   const menuMap = {
     'col': [
       { label: "向左插入列", key: "insert-col-left" },
@@ -148,13 +157,9 @@ export function getRightClickMenu(pos) {
       { label: "向下插入行", key: "insert-row-down" },
       { label: "删除", key: "del" },
     ],
-    'cell': [
-      { label: "根据表格中日期选择指标值", key: "choose-target" },
-      { label: "插入指标值", key: "insert-value" },
-      { label: "导入系统日期", key: "insert-sys-date" },
-      { label: "导入指标日期", key: "insert-edb-date" },
-      { label: "清空", key: "reset" },
-    ]
+    'cell': canEdit 
+      ? [{ label: '编辑',key: 'cell-edit' },...cellMenu]
+      : cellMenu
   }
 
   return menuMap[pos];

+ 52 - 19
src/views/datasheet_manage/components/MixedTable.vue

@@ -64,7 +64,11 @@
             >
 
             <!-- 插入单元格禁止编辑 -->
-            <template v-if="([4,5,6].includes(cell.DataType)&&!cell.CanEdit) || disabled">
+            <template 
+              v-if="([4,5,6].includes(cell.DataType)&&!cell.CanEdit)
+              ||disabled
+              ||(cell.DataType===1&&[1,2].includes(cell.DataTimeType))"
+            >
               
               <!-- 单元格类型5显示指标浮窗 -->
               <el-popover
@@ -146,9 +150,11 @@
       ref="selectTargetValueRef"
     />
 
+    <!-- 插入系统/指标日期弹窗 -->
     <insertDateDia
       :isShow.sync="isInsertDateDialog"
       :info="insertDateInfo"
+      @insert="insertDatehandle"
     />
   </div>
 </template>
@@ -199,14 +205,14 @@ export default {
     return {
       config: {
         /* 单元格类型 
-          1手动日期格 
+          1手动日期格 DataTimeType 0
           2指标格 
           3自定义输入 
           4插入值 表格里有关联的日期和指标格 
           5弹窗里的插入值 有关联日期格 
-          6公式计算单元格
-          7系统日期导入格
-          8指标日期导入格
+          6公式计算单元格 
+          1系统日期导入格 DataTimeType 1
+          1指标日期导入格 DataTimeType 2
         */
         data: [], 
         contextMenuOption: [],
@@ -274,11 +280,11 @@ export default {
       setFocus(e);
 
       /* 如果当前有公式单元格在编辑就拼接当前单元格进公式 */
-      if(this.calculateClickCell && this.calculateClickCell.Uid!==cell.Uid) {
-        console.log(this.calculateClickCell)
-        const { cindex,rindex } = e.target.dataset;
-        this.calculateClickCell.Value += `${cindex}${rindex}`
-      }
+      // if(this.calculateClickCell && this.calculateClickCell.Uid!==cell.Uid) {
+      //   console.log(this.calculateClickCell)
+      //   const { cindex,rindex } = e.target.dataset;
+      //   this.calculateClickCell.Value += `${cindex}${rindex}`
+      // }
 
       //是插值单元格时寻找关联依赖的单元格 设置选框
       if([4,5].includes(cell.DataType)) {
@@ -301,6 +307,7 @@ export default {
       console.log(params)
       if(!params) {
         this.selectCell.DataType = 3;
+        this.selectCell.DataTimeType = 0;
         this.selectCell.ShowValue = '';
         this.selectCell.Value = '';
         this.selectCell.DataTime = '';
@@ -309,13 +316,15 @@ export default {
         return
       }
 
-      const { EdbInfoId,Date } = params
+      const { EdbInfoId,Date,DataTimeType } = params
 
       const res = await sheetInterface.insertData({EdbInfoId,Date})
       if(res.Ret !==200) return
 
-      if(!res.Data){
+      //系统日期无值也要建立关联关系
+      if(!res.Data&&!DataTimeType){
         this.selectCell.DataType = 3;
+        this.selectCell.DataTimeType = 0;
         this.selectCell.ShowValue = '';
         this.selectCell.Value = '';
         this.selectCell.DataTime = '';
@@ -324,7 +333,7 @@ export default {
         return
       }
 
-      this.$message.success('插入成功')
+      res.Data ? this.$message.success('插入成功') : this.$message.warning('当前日期暂无值') 
 
       this.selectCell.DataType = 4;
       this.selectCell.ShowValue = res.Data;
@@ -387,6 +396,7 @@ export default {
             if((row_cell_arr[i].DataType===1&&col_cell_arr[j].DataType===2)
             ||(row_cell_arr[i].DataType===2&&col_cell_arr[j].DataType===1)) {
               params = {
+                DataTimeType: row_cell_arr[i].DataType===1 ? row_cell_arr[i].DataTimeType : col_cell_arr[j].DataTimeType,
                 Date: row_cell_arr[i].DataType===1 ? row_cell_arr[i].ShowValue : col_cell_arr[j].ShowValue,
                 EdbInfoId: row_cell_arr[i].DataType===2 ? row_cell_arr[i].EdbInfoId : col_cell_arr[j].EdbInfoId,
                 insert_cell: {
@@ -599,7 +609,7 @@ export default {
       }else {//单元格
         pos = 'cell'
       }
-      this.config.contextMenuOption = getRightClickMenu(pos)
+      this.config.contextMenuOption = getRightClickMenu(pos,cell.DataType===1&&[1,2].includes(cell.DataTimeType))
 
 
       const dom = $('#contextMenu-wrapper')[0];
@@ -629,7 +639,8 @@ export default {
         'choose-target': this.selectTargetOpen,//选择指标插入值
         'insert-sys-date': this.insertDateOpen,//导入系统日期
         'insert-edb-date': this.insertDateOpen,//导入指标日期
-        'reset': this.clearCell //清空
+        'reset': this.clearCell, //清空
+        'cell-edit': this.insertDateOpen
       }
       keyMap[key] && keyMap[key](key)
       
@@ -677,6 +688,7 @@ export default {
       this.selectCell.ShowValue = '';
       this.selectCell.Value = '';
       this.selectCell.DataTime = '';
+      this.selectCell.DataTimeType = 0;
       this.selectCell.EdbInfoId = 0;
 
       this.checkCellRelation(this.selectCell)
@@ -786,15 +798,35 @@ export default {
     },
 
     /* 导入系统/指标日期弹窗 */
-    insertDateOpen(key) {
+    insertDateOpen(type) {
       this.insertTargetCell = this.selectCell;
       resetDialogCellStyle();
-      this.insertDateInfo = {
-        key
+
+      if(type === 'cell-edit') { //编辑日期
+        const { DataTimeType } = this.insertTargetCell;
+        this.insertDateInfo = {
+          key: DataTimeType===1? 'insert-sys-date' : 'insert-edb-date',
+          ...this.insertTargetCell
+        }
+      }else {
+        this.insertDateInfo = {
+          key:type
+        }
       }
       this.isInsertDateDialog = true;
     },
 
+    /* 插入系统/指标日期 */
+    insertDatehandle({insertValue,dataTimeType,str}) {
+
+      this.insertTargetCell.DataType = 1;
+      this.insertTargetCell.DataTimeType = dataTimeType;
+      this.insertTargetCell.ShowValue = insertValue;
+      this.insertTargetCell.Value = str;
+      this.insertTargetCell.EdbInfoId = 0;
+      this.insertTargetCell.DataTime = insertValue;
+    },
+
     /* 初始化8行5列 */
     initData(initData=null) {
       if(initData) {
@@ -808,6 +840,7 @@ export default {
             ShowValue: "",
             Value: "",
             DataType: 3,
+            DataTimeType: 0,
             DataTime: "",
             EdbInfoId:0,
             Uid: md5.hex_md5(`${new Date().getTime()}${_rindex}${_cindex}`)
@@ -857,7 +890,7 @@ export default {
 
       this.calculateClickCell = cell;
 
-      setRelationStyle({ key:cell.Uid },'td-choose-insert-target')
+      // setRelationStyle({ key:cell.Uid },'td-choose-insert-target')
 
       this.$nextTick(() => {
         if(e.target.childNodes[0].childNodes[0].childNodes[1].nodeName==='INPUT') e.target.childNodes[0].childNodes[0].childNodes[1].focus();

+ 95 - 40
src/views/datasheet_manage/components/insertDateDia.vue

@@ -15,8 +15,9 @@
               <li class="form-item">
                 <label>导入方式</label>
                 <el-select
-                    v-model="formData.way"
+                    v-model="formData.Source"
                     placeholder="请选择导入方式"
+                    @change="init('form')"
                 >
                   <el-option
                       v-for="item in wayOptions"
@@ -26,11 +27,12 @@
                   />
                 </el-select>
 
-                <template v-if="formData.way===3">
+                <template v-if="formData.Source===3">
                   <el-select
                       style="max-width: 120px;margin:0 10px"
-                      v-model="formData.frequency"
+                      v-model="formData.Frequency"
                       placeholder="请选择频度"
+                      @change="formData.Day=frequencyDaysOptions[0].name"
                   >
                     <el-option
                         v-for="item in frequencyOptions"
@@ -42,7 +44,7 @@
 
                   <el-select
                       style="max-width: 120px;"
-                      v-model="formData.frequency_day"
+                      v-model="formData.Day"
                       placeholder="请选择"
                   >
                     <el-option
@@ -63,15 +65,16 @@
                   <i class="el-icon-question" style="font-size:18px;"/>
                 </el-tooltip>
               </li>
-              <template v-if="formData.way===2">
+              <template v-if="formData.Source===2">
                 <li class="form-item">
                   <label>天数</label>
                   <el-input
-                    v-model="formData.num"
+                    v-model="formData.CalculateNum"
                     type="number"
                     style="margin-right:10px;width:200px"
+                    @change="e => {formData.CalculateNum=Number(e)}"
                   />
-                  
+                  {{formData.CalculateFrequency}}
                 </li>
                 <li style="color:#999">示例:5,表示当前日期+5天的日期; -5,表示当前日期-5天的日期;</li>
               </template>
@@ -81,16 +84,16 @@
           <ul v-else> 
             <li class="form-item">
               <el-select
-                v-model="formData.insert_edb"
+                v-model="search_edb"
                 v-loadMore="searchLoad"
-                :filterable="!formData.insert_edb"
+                :filterable="!search_edb"
                 remote
                 clearable
                 placeholder="请选择指标名称"
                 style="flex: 1"
                 :remote-method="searchHandle"
                 @click.native="inputFocusHandle"
-                @change="e => { selectEdbInfo = searchOptions.find(_ => _.EdbInfoId === e) } "
+                @change="e => { selectEdbInfo = searchOptions.find(_ => _.EdbInfoId === e) || {} } "
               >
                 <i slot="prefix" class="el-input__icon el-icon-search"></i>
                 <el-option
@@ -114,24 +117,25 @@
                 <i class="el-icon-question" style="font-size:18px;"/>
               </el-tooltip>
             </li>
-            <li class="form-item" v-show="selectEdbInfo.Frequency">
+            <li class="form-item" v-if="selectEdbInfo.Frequency">
               <label>更新频度</label>
               {{ selectEdbInfo.Frequency }}
             </li>
-            <li class="form-item" v-show="selectEdbInfo.LatestDate">
+            <li class="form-item" v-if="selectEdbInfo.LatestDate">
               <label>最新日期</label>
               {{ selectEdbInfo.LatestDate }}
             </li>
           </ul>
 			</div>
 			<div class="dia-bot">
-				<el-button type="primary" style="margin-right:20px" @click="saveHandle">保存</el-button>
+				<el-button type="primary" style="margin-right:20px" @click="saveInsertHandle">保存</el-button>
 				<el-button type="primary" plain @click="cancelHandle">取消</el-button>
 			</div>
 	</el-dialog>
 </template>
 <script>
-import { dataBaseInterface  } from '@/api/api.js'
+import * as sheetInterface from "@/api/modules/sheetApi.js";
+import { dataBaseInterface } from '@/api/api.js';
 export default {
   props: {
     isShow: {
@@ -141,10 +145,35 @@ export default {
       type: Object
     }
   },
+  watch: {
+    isShow : { 
+      async handler(nval) {
+        if(nval && this.info.Value) { //处理日期编辑回显
+          const valueObj = JSON.parse(this.info.Value);
+
+          this.formData = {
+            ...this.formData,
+            ...valueObj
+          }
+
+          if(this.info.DataTimeType===2) { //指标日期时获取指标详情
+            const { Data } = await dataBaseInterface.targetDetail({EdbInfoId: valueObj.EdbInfoId})
+
+            const { EdbName,LatestDate,Frequency,EdbInfoId } = Data;
+            this.selectEdbInfo = { EdbName,LatestDate,Frequency,EdbInfoId }
+
+            this.search_edb = valueObj.EdbInfoId;
+            this.searchOptions = [this.selectEdbInfo];
+          }
+        }
+      }
+    }  
+
+  },
   computed: {
     frequencyDaysOptions() {
       let typeMap = {
-        1: [
+        '本周': [
           { name: '周一' },
           { name: '周二' },
           { name: '周三' },
@@ -154,20 +183,19 @@ export default {
           { name: '周日' },
         ]
       }
-      return typeMap[this.formData.frequency] 
-        ? typeMap[this.formData.frequency] 
+      return typeMap[this.formData.Frequency] 
+        ? typeMap[this.formData.Frequency] 
         : [{name:'第一天'},{name:'最后一天'}]
     }
   },
   data() {
     return {
       formData: {
-        way: 1,
-        frequency: 1,
-        frequency_day: '第一天',
-        num: 0,
-        insert_edb:'',
-        insert_date:''
+        Source: 1,
+        Frequency: '本周',
+        Day: '周一',
+        CalculateNum: 0,
+        CalculateFrequency: '日'
       },
 
       wayOptions: [
@@ -176,14 +204,15 @@ export default {
         { name: '指定频率', value: 3 },
       ],
       frequencyOptions: [
-        { name: '本周', value: 1 },
-        { name: '本旬', value: 2 },
-        { name: '本月', value: 3 },
-        { name: '本季', value: 4 },
-        { name: '本半年', value: 5 },
-        { name: '本年', value: 6 },
+        { name: '本周', value: '本周' },
+        { name: '本旬', value: '本旬' },
+        { name: '本月', value: '本月' },
+        { name: '本季', value: '本季' },
+        { name: '本半年', value: '本半年' },
+        { name: '本年', value: '本年' },
       ],
 
+      search_edb: '',
       searchOptions:[],
       search_page: 1,
       current_search: '',
@@ -204,9 +233,6 @@ export default {
       selectEdbInfo: {}
 
     }
-  },
-  mounted(){
-
   },
   methods:{
     searchHandle(query) {
@@ -220,7 +246,7 @@ export default {
             KeyWord: query,
             CurrentIndex: page,
         }
-        const res = await dataBaseInterface.targetSearchByPage(params)
+        const res = await sheetInterface.searchTarget(params)
 
         if (res.Ret !== 200) return
         const { List, Paging } = res.Data;
@@ -240,15 +266,44 @@ export default {
         this.searchApi(this.current_search, ++this.search_page);
     },
 
-    init() {
+    // 保存插入信息
+    async saveInsertHandle() {
+      
+      let backData = {}
+      //插入系统日期
+      if(this.info.key==='insert-sys-date') {
+        let { Data } = await sheetInterface.getSystemDate({
+          DataTimeType: 1,
+          Value: JSON.stringify(this.formData)
+        })
+        
+        backData = {
+          insertValue: Data.Date,
+          dataTimeType: 1,
+          str: JSON.stringify(this.formData)
+        }
+      }else { //指标日期
+        backData = {
+          insertValue: this.selectEdbInfo.LatestDate,
+          dataTimeType: 2,
+          str:  JSON.stringify({EdbInfoId: this.selectEdbInfo.EdbInfoId})
+        }
+      }
+      this.$emit('insert',backData)
+      this.cancelHandle()
+    },
+
+    init(type='') {
+
       this.formData = {
-        way: 1,
-        frequence: 1,
-        frequency_day: '第一天',
-        num: 0,
-        insert_edb:'',
-        insert_date:''
+        Source: this.formData.Source,
+        Frequency: '本周',
+        Day: '周一',
+        CalculateNum: 0,
+        CalculateFrequency: '日'
       }
+      
+      if(!type) this.formData.Source = 1;
       this.selectEdbInfo = {}
     },
     cancelHandle() {

+ 7 - 2
src/views/datasheet_manage/components/selectTargetValueDia.vue

@@ -23,7 +23,7 @@
       </ul>
 
       <div class="dia-bot">
-        <el-button type="primary" style="margin-right: 20px" :disabled="!result.Date" @click="insertData"
+        <el-button type="primary" style="margin-right: 20px" @click="insertData"
           >插入值</el-button
         >
         <el-button type="primary" plain @click="cancelHandle">取消</el-button>
@@ -80,7 +80,7 @@ export default {
       if(res.Ret !== 200) return
 
       this.result = res.Data;
-      if(!this.result.Date) return this.$message.warning('所选指标所选日期无值')
+      if(!this.result.Date && Date) return this.$message.warning('所选指标所选日期无值')
       this.chooseItem = {
         edbId: edb.EdbInfoId,
         value: this.result.Date?this.result.List.find(_ =>_.DataTime===this.result.Date).Value.toString():''
@@ -89,6 +89,11 @@ export default {
     },
 
     insertData() {
+      if(this.$parent.selectCell.DataType !== 1){
+        this.$message.warning('请在表格中选择日期')
+        return
+      }
+
       this.$emit('insert',this.chooseItem)
       this.cancelHandle();
     },