浏览代码

支持复制

Karsa 1 年之前
父节点
当前提交
926f59f2e3

+ 39 - 3
src/views/datasheet_manage/components/CustomTable.vue

@@ -77,6 +77,8 @@
                 :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))"
+                @copy="copyCellHandle($event,edb.Data.find(_ =>_.DataTime === date))"
+                @paste="pasteCellHandle($event,edb.Data.find(_ =>_.DataTime === date))"
               >
                 <!-- 实际值/插值 -->
                 <span 
@@ -118,6 +120,8 @@
                 :class="([2,3,5].includes(cell.DataType)&&cell.ShowValue)?'insert': ''"
                 @click="clickCell($event,cell)"
                 @dblclick="dblClickCell($event,cell)"
+                @copy="copyCellHandle($event,cell)"
+                @paste="pasteCellHandle($event,cell)"
               >
               
                   <span 
@@ -193,7 +197,9 @@
                 :data-rindex="rowHeader[index+dateArr.length]"
                 :class="([2,3,5].includes(column[0].DataType)&&column[0].ShowValue)?'insert': ''"
                 @click="clickCell($event,column[0])"
-                 @dblclick="dblClickCell($event,column[0])"
+                @dblclick="dblClickCell($event,column[0])"
+                @copy="copyCellHandle($event,column[0])"
+                @paste="pasteCellHandle($event,column[0])"
               >
                 <span 
                   :data-cindex="-1"
@@ -250,6 +256,8 @@
                 :class="([2,3,5].includes(data.DataType)&&data.ShowValue)?'insert': ''"
                 @click="clickCell($event,data)"
                 @dblclick="dblClickCell($event,data)"
+                @copy="copyCellHandle($event,data)"
+                @paste="pasteCellHandle($event,data)"
               >
                 <!-- 实际值/插值 -->
                 <span
@@ -281,6 +289,8 @@
                 :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])"
+                @copy="copyCellHandle($event,column[edb_index+1])"
+                @paste="pasteCellHandle($event,column[edb_index+1])"
               >
                 <span 
                   :data-rindex="rowHeader[column_index+dateArr.length]"
@@ -467,7 +477,9 @@ export default {
 
       //指标别名弹窗
       isEditEdbAliasDialog: false,
-      editEdb: {}
+      editEdb: {},
+
+      copyCellItem: {}
     };
   },
   methods: {
@@ -780,7 +792,31 @@ export default {
     dragEnd(e) {
       let dom = document.querySelector('.add-fixed');
       dom.style.top = e.clientY-10 + 'px';
-    }
+    },
+
+    /* 要支持复制粘贴把公式也带过去 公式单元格类型为6 其余就正常复制文本 */
+    copyCellHandle(e,cell) {
+      this.copyCellItem = cell;
+      // 阻止默认的复制操作
+      e.preventDefault();
+    },
+
+    /* 要支持复制粘贴把公式也带过去 公式单元格类型为4 其余就正常复制文本 */
+    pasteCellHandle(e,cell) {
+      if(this.copyCellItem.DataType === 4) {
+        cell.DataType = this.copyCellItem.DataType;
+        cell.ShowValue = this.copyCellItem.ShowValue;
+        cell.Value = this.copyCellItem.Value;
+      }else {
+        cell.DataType = 3;
+        cell.ShowValue = this.copyCellItem.ShowValue;
+        cell.Value = this.copyCellItem.Value;
+      }
+      
+      // 阻止默认的粘贴操作
+      e.preventDefault();
+    }  
+    
   },
 };
 </script>

+ 35 - 10
src/views/datasheet_manage/components/MixedTable.vue

@@ -58,8 +58,8 @@
               @click="clickCell($event, cell)"
               @contextmenu.prevent="rightClickHandle($event,cell)"
               @mouseenter="getRelationEdbInfo(cell)"
-              @copy="copyHandle"
-              @paste="pasteHandle"
+              @copy="copyCellHandle($event,cell)"
+              @paste="pasteCellHandle($event,cell)"
             >
 
             <!-- 插入单元格禁止编辑 -->
@@ -145,6 +145,7 @@
 
     <insertDateDia
       :isShow.sync="isInsertDateDialog"
+      :info="insertDateInfo"
     />
   </div>
 </template>
@@ -212,7 +213,7 @@ export default {
 
       rightClickCell: {},//右键单元格 key c r
 
-      insertTargetCell: {},//选择右键插入指标的单元格 可和右键单元格不一样 key c r
+      insertTargetCell: {},//选择右键插入的单元格 可和右键单元格不一样 key c r
 
       insertRelationArr: [],
 
@@ -220,7 +221,12 @@ export default {
 
       cellrelationEdbInfo: {},
 
+      copyCellItem: {},//复制的单元格信息
+
       isInsertDateDialog: false,//导入日期弹窗
+      insertDateInfo: {
+        key: '',
+      }
     };
   },
   mounted() {
@@ -565,7 +571,6 @@ export default {
       if(this.disabled) return
 
       const { rindex,cindex,key } = e.target.dataset;
-      console.log(rindex,cindex,key)
       this.rightClickCell = {
         rindex,
         cindex,
@@ -582,7 +587,6 @@ export default {
       }else {//单元格
         pos = 'cell'
       }
-      console.log(pos)
       this.config.contextMenuOption = getRightClickMenu(pos)
 
 
@@ -770,9 +774,12 @@ export default {
     },
 
     /* 导入系统/指标日期弹窗 */
-    insertDateOpen() {
+    insertDateOpen(key) {
       this.insertTargetCell = this.selectCell;
       resetDialogCellStyle();
+      this.insertDateInfo = {
+        key
+      }
       this.isInsertDateDialog = true;
     },
 
@@ -797,12 +804,30 @@ export default {
       }
     },
 
-    copyHandle(e) {
-      console.log(e)
+
+    /* 要支持复制粘贴把公式也带过去 公式单元格类型为6 其余就正常复制文本 */
+    copyCellHandle(e,cell) {
+      this.copyCellItem = cell;
+      // 阻止默认的复制操作
+      e.preventDefault();
     },
 
-    pasteHandle(e) {
-      console.log(e)
+    /* 要支持复制粘贴把公式也带过去 公式单元格类型为6 其余就正常复制文本 */
+    pasteCellHandle(e,cell) {
+      if(this.copyCellItem.DataType === 6) {
+        cell.DataType = this.copyCellItem.DataType;
+        cell.ShowValue = this.copyCellItem.ShowValue;
+        cell.Value = this.copyCellItem.Value;
+        cell.DataTime = this.copyCellItem.DataTime;
+        cell.EdbInfoId = this.copyCellItem.EdbInfoId;
+      }else {
+        cell.DataType = 3;
+        cell.ShowValue = this.copyCellItem.ShowValue;
+        cell.Value = this.copyCellItem.Value;
+      }
+
+      // 阻止默认的粘贴操作
+      e.preventDefault();
     }
   },
 };

+ 181 - 42
src/views/datasheet_manage/components/insertDateDia.vue

@@ -3,7 +3,7 @@
 		:visible.sync="isShow"
 		:close-on-click-modal="false"
 		:modal-append-to-body='false'
-    :title="title"
+    :title="titleMap[info.key]"
 		@close="cancelHandle"
 		custom-class="dialog"
 		center
@@ -11,12 +11,10 @@
 		v-dialogDrag>
 			<div class="dialog-main">
           <!-- 导入系统日期 -->
-          <template>
-            <ul>
+            <ul v-if="info.key==='insert-sys-date'">
               <li class="form-item">
                 <label>导入方式</label>
                 <el-select
-                    style="max-width: 120px;"
                     v-model="formData.way"
                     placeholder="请选择导入方式"
                 >
@@ -27,53 +25,101 @@
                       :value="item.value"
                   />
                 </el-select>
-  
-                <el-select
-                    style="max-width: 120px;margin:0 10px"
-                    v-model="formData.frequency"
-                    placeholder="请选择频度"
-                >
-                  <el-option
-                      v-for="item in wayOptions"
-                      :key="item.value"
-                      :label="item.name"
-                      :value="item.value"
-                  />
-                </el-select>
 
-                <el-select
-                    style="max-width: 120px;"
-                    v-model="formData.frequency_day"
-                    placeholder="请选择"
-                >
-                  <el-option
-                      v-for="item in wayOptions"
-                      :key="item.value"
-                      :label="item.name"
-                      :value="item.value"
-                  />
-                </el-select>
+                <template v-if="formData.way===3">
+                  <el-select
+                      style="max-width: 120px;margin:0 10px"
+                      v-model="formData.frequency"
+                      placeholder="请选择频度"
+                  >
+                    <el-option
+                        v-for="item in frequencyOptions"
+                        :key="item.value"
+                        :label="item.name"
+                        :value="item.value"
+                    />
+                  </el-select>
+
+                  <el-select
+                      style="max-width: 120px;"
+                      v-model="formData.frequency_day"
+                      placeholder="请选择"
+                  >
+                    <el-option
+                        v-for="item in frequencyDaysOptions"
+                        :key="item.name"
+                        :label="item.name"
+                        :value="item.name"
+                    />
+                  </el-select>
+                </template>
 
-                <el-tooltip effect="dark" :content="tips">
-                  <i class="el-icon-question"/>
+                <el-tooltip effect="dark" style="margin-left:10px">
+                  <div
+                    slot="content"
+                    v-html="tips[info.key]"
+                    style="line-height: 20px;"
+                  ></div>
+                  <i class="el-icon-question" style="font-size:18px;"/>
                 </el-tooltip>
               </li>
-              <li class="form-item">
+              <li class="form-item" v-if="formData.way===2">
                 <label>天数</label>
                 <el-input
                   v-model="formData.num"
                   type="number"
+                  style="margin-right:10px;width:200px"
                 />
               </li>
             </ul>
-          </template>
 
           <!-- 导入指标日期 -->
-          <template>
-            <div>
-            </div>
-          </template>
+          <ul v-else> 
+            <li class="form-item">
+              <el-select
+                v-model="formData.insert_edb"
+                v-loadMore="searchLoad"
+                :filterable="!formData.insert_edb"
+                remote
+                clearable
+                placeholder="请选择指标名称"
+                style="flex: 1"
+                :remote-method="searchHandle"
+                @click.native="inputFocusHandle"
+                @change="e => { selectEdbInfo = searchOptions.find(_ => _.EdbInfoId === e) } "
+              >
+                <i slot="prefix" class="el-input__icon el-icon-search"></i>
+                <el-option
+                  v-for="item in searchOptions"
+                  :key="item.EdbInfoId"
+                  :label="item.EdbName"
+                  :value="item.EdbInfoId"
+                >
+                  <edbDetailPopover :info="item">
+                    <div slot="reference">{{item.EdbName}}</div>
+                  </edbDetailPopover>
+                </el-option>
+              </el-select>
+
+              <el-tooltip effect="dark" style="margin-left:10px">
+                <div
+                  slot="content"
+                  v-html="tips[info.key]"
+                  style="line-height: 20px;"
+                ></div>
+                <i class="el-icon-question" style="font-size:18px;"/>
+              </el-tooltip>
+            </li>
+            <li class="form-item" v-show="selectEdbInfo.Frequency">
+              <label>更新频度</label>
+              {{ selectEdbInfo.Frequency }}
+            </li>
+            <li class="form-item" v-show="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>
@@ -82,19 +128,43 @@
 	</el-dialog>
 </template>
 <script>
+import { dataBaseInterface  } from '@/api/api.js'
 export default {
   props: {
     isShow: {
       type: Boolean
+    },
+    info: {
+      type: Object
+    }
+  },
+  computed: {
+    frequencyDaysOptions() {
+      let typeMap = {
+        1: [
+          { name: '周一' },
+          { name: '周二' },
+          { name: '周三' },
+          { name: '周四' },
+          { name: '周五' },
+          { name: '周六' },
+          { name: '周日' },
+        ]
+      }
+      return typeMap[this.formData.frequency] 
+        ? typeMap[this.formData.frequency] 
+        : [{name:'第一天'},{name:'最后一天'}]
     }
   },
   data() {
     return {
       formData: {
         way: 1,
-        frequence: '',
-        frequency_day: '',
-        num: 0
+        frequency: 1,
+        frequency_day: '第一天',
+        num: 0,
+        insert_edb:'',
+        insert_date:''
       },
 
       wayOptions: [
@@ -102,6 +172,33 @@ export default {
         { name: '日期计算', value: 2 },
         { name: '指定频率', value: 3 },
       ],
+      frequencyOptions: [
+        { name: '本周', value: 1 },
+        { name: '本旬', value: 2 },
+        { name: '本月', value: 3 },
+        { name: '本季', value: 4 },
+        { name: '本半年', value: 5 },
+        { name: '本年', value: 6 },
+      ],
+
+      searchOptions:[],
+      search_page: 1,
+      current_search: '',
+      search_have_more: true,
+
+      titleMap: {
+        'insert-sys-date': '导入系统日期',
+        'insert-edb-date': '导入指标日期'
+      },
+
+      tips: {
+        'insert-sys-date': `1、直接导入:直接取系统日期,跟随系统日期更新<br>
+        2、日期计算:取系统日期进行公式计算,跟随系统日期更新 <br>
+        3、指定频率:取系统日期相关的指定日期,跟随系统日期更新`,
+        'insert-edb-date': '取指标的最新日期,跟随指标最新日期更新'
+      },
+
+      selectEdbInfo: {}
 
     }
   },
@@ -109,6 +206,48 @@ export default {
 
   },
   methods:{
+    searchHandle(query) {
+        this.search_page = 1;
+        this.current_search = query;
+        this.searchApi(this.current_search)
+    },
+
+    async searchApi(query, page = 1) {
+        let params = {
+            KeyWord: query,
+            CurrentIndex: page,
+        }
+        const res = await dataBaseInterface.targetSearchByPage(params)
+
+        if (res.Ret !== 200) return
+        const { List, Paging } = res.Data;
+        this.search_have_more = page < Paging.Pages;
+        this.searchOptions = page === 1 ? List : this.searchOptions.concat(List);
+    },
+
+    /* 聚焦获取当前检索 */
+    inputFocusHandle(e) {
+        this.search_page = 1;
+        this.current_search = e.target.value;
+        this.searchApi(this.current_search);
+    },
+
+    searchLoad() {
+        if (!this.search_have_more) return;
+        this.searchApi(this.current_search, ++this.search_page);
+    },
+
+    init() {
+      this.formData = {
+        way: 1,
+        frequence: 1,
+        frequency_day: '第一天',
+        num: 0,
+        insert_edb:'',
+        insert_date:''
+      }
+      this.selectEdbInfo = {}
+    },
     cancelHandle() {
       this.$emit('update:isShow',false)
     }
@@ -119,10 +258,10 @@ export default {
 .dialog-main {
   padding: 20px;
   .form-item { 
-    margin: 10px 0; 
+    margin: 15px 0; 
     display: flex;
     align-items: center;
-    label { width: 80px; }
+    label { width: 80px;flex-shrink: 0; }
   }
 }
 .dia-bot {