Support Record Scroll (#224)
* navigation of record UpArrow and DownArrow in table of Tab Children * Support keyboard shortcutspull/3759/head
							parent
							
								
									a1b5f44098
								
							
						
					
					
						commit
						cd1c2a1b53
					
				|  | @ -75,6 +75,7 @@ | ||||||
|     "vue-i18n": "7.3.2", |     "vue-i18n": "7.3.2", | ||||||
|     "vue-multipane": "^0.9.5", |     "vue-multipane": "^0.9.5", | ||||||
|     "vue-router": "3.0.4", |     "vue-router": "3.0.4", | ||||||
|  |     "vue-shortkey": "^3.1.7", | ||||||
|     "vue-split-panel": "^1.0.4", |     "vue-split-panel": "^1.0.4", | ||||||
|     "vue-splitpane": "1.0.4", |     "vue-splitpane": "1.0.4", | ||||||
|     "vuedraggable": "^2.23.2", |     "vuedraggable": "^2.23.2", | ||||||
|  |  | ||||||
|  | @ -26,6 +26,10 @@ export default { | ||||||
|     }, |     }, | ||||||
|     getWindowHeight(event) { |     getWindowHeight(event) { | ||||||
|       this.$store.dispatch('setHeight', document.documentElement.clientHeight) |       this.$store.dispatch('setHeight', document.documentElement.clientHeight) | ||||||
|  |     }, | ||||||
|  |     theAction(event) { | ||||||
|  |       console.log(event) | ||||||
|  |       alert('ok', event) | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| <template> | <template> | ||||||
|   <div class="container-submenu container-context-menu"> |   <div class="container-submenu container-context-menu"> | ||||||
|     <el-menu :default-active="activeMenu" :router="false" class="el-menu-demo" mode="horizontal" menu-trigger="hover" unique-opened @select="typeFormat"> |     <el-menu v-shortkey="{f2: ['f2'], f3: ['f3'], f5: ['f5'], f3:['ctrl', 'd']}" :default-active="activeMenu" :router="false" class="el-menu-demo" mode="horizontal" menu-trigger="hover" unique-opened @select="typeFormat" @shortkey.native="actionContextMenu"> | ||||||
|       <template> |       <template> | ||||||
|         <el-submenu v-if="relations !== undefined && relations.length" class="el-menu-item" index="1"> |         <el-submenu v-if="relations !== undefined && relations.length" class="el-menu-item" index="1"> | ||||||
|           <template slot="title"> |           <template slot="title"> | ||||||
|  |  | ||||||
|  | @ -192,6 +192,58 @@ export const contextMixin = { | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|     showNotification, |     showNotification, | ||||||
|  |     actionContextMenu(event) { | ||||||
|  |       console.log(event) | ||||||
|  |       switch (event.srcKey) { | ||||||
|  |         case 'f2': | ||||||
|  |           this.$store.dispatch('resetPanelToNew', { | ||||||
|  |             parentUuid: this.parentUuid, | ||||||
|  |             containerUuid: this.containerUuid, | ||||||
|  |             recordUuid: this.recordUuid, | ||||||
|  |             panelType: 'window', | ||||||
|  |             isNewRecord: true | ||||||
|  |           }) | ||||||
|  |           break | ||||||
|  |         case 'f3': | ||||||
|  |           this.$store.dispatch('deleteEntity', { | ||||||
|  |             parentUuid: this.parentUuid, | ||||||
|  |             containerUuid: this.containerUuid, | ||||||
|  |             recordUuid: this.recordUuid, | ||||||
|  |             panelType: 'window', | ||||||
|  |             isNewRecord: false | ||||||
|  |           }) | ||||||
|  |           break | ||||||
|  |         case 'f5': | ||||||
|  |           if (this.panelType === 'window') { | ||||||
|  |             this.$store.dispatch('getDataListTab', { | ||||||
|  |               parentUuid: this.parentUuid, | ||||||
|  |               containerUuid: this.containerUuid, | ||||||
|  |               isRefreshPanel: true, | ||||||
|  |               recordUuid: this.recordUuid | ||||||
|  |             }) | ||||||
|  |           } else if (this.panelType === 'browser') { | ||||||
|  |             this.$store.dispatch('getBrowserSearch', { | ||||||
|  |               containerUuid: this.containerUuid, | ||||||
|  |               isClearSelection: true | ||||||
|  |             }) | ||||||
|  |           } | ||||||
|  |           break | ||||||
|  |       } | ||||||
|  |       // this.$store.dispatch('resetPanelToNew', {
 | ||||||
|  |       //   parentUuid: this.parentUuid,
 | ||||||
|  |       //   containerUuid: this.containerUuid,
 | ||||||
|  |       //   recordUuid: this.recordUuid,
 | ||||||
|  |       //   panelType: 'window',
 | ||||||
|  |       //   isNewRecord: true
 | ||||||
|  |       // })
 | ||||||
|  |       // this.$store.dispatch('deleteEntity', {
 | ||||||
|  |       //   parentUuid: this.parentUuid,
 | ||||||
|  |       //   containerUuid: this.containerUuid,
 | ||||||
|  |       //   recordUuid: this.recordUuid,
 | ||||||
|  |       //   panelType: 'window',
 | ||||||
|  |       //   isNewRecord: false
 | ||||||
|  |       // })
 | ||||||
|  |     }, | ||||||
|     refreshData() { |     refreshData() { | ||||||
|       if (this.panelType === 'window') { |       if (this.panelType === 'window') { | ||||||
|         this.$store.dispatch('getDataListTab', { |         this.$store.dispatch('getDataListTab', { | ||||||
|  | @ -331,6 +383,7 @@ export const contextMixin = { | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     runAction(action) { |     runAction(action) { | ||||||
|  |       console.log(action) | ||||||
|       if (action.type === 'action') { |       if (action.type === 'action') { | ||||||
|         // run process or report
 |         // run process or report
 | ||||||
|         const fieldNotReady = this.$store.getters.isNotReadyForSubmit(this.$route.meta.uuid) |         const fieldNotReady = this.$store.getters.isNotReadyForSubmit(this.$route.meta.uuid) | ||||||
|  | @ -407,6 +460,14 @@ export const contextMixin = { | ||||||
|             } |             } | ||||||
|           }) |           }) | ||||||
|         } else { |         } else { | ||||||
|  |           console.log('actionaction', action.action) | ||||||
|  |           console.log('parentUuid:', this.parentUuid) | ||||||
|  |           console.log('containerUuid:', this.containerUuid,) | ||||||
|  |           console.log('recordUuid:', this.recordUuid) | ||||||
|  |           console.log('panelType:', this.panelType) | ||||||
|  |           console.log('isNewRecord:', action.action === 'resetPanelToNew') | ||||||
|  |           console.log('tableName:', action.tableName) | ||||||
|  |           console.log('recordId:', action.recordId) | ||||||
|           this.$store.dispatch(action.action, { |           this.$store.dispatch(action.action, { | ||||||
|             parentUuid: this.parentUuid, |             parentUuid: this.parentUuid, | ||||||
|             containerUuid: this.containerUuid, |             containerUuid: this.containerUuid, | ||||||
|  | @ -417,6 +478,7 @@ export const contextMixin = { | ||||||
|             recordId: action.recordId |             recordId: action.recordId | ||||||
|           }) |           }) | ||||||
|             .then(response => { |             .then(response => { | ||||||
|  |               console.log(response) | ||||||
|               if (response && response.isPrivateAccess) { |               if (response && response.isPrivateAccess) { | ||||||
|                 this.validatePrivateAccess(response) |                 this.validatePrivateAccess(response) | ||||||
|               } |               } | ||||||
|  |  | ||||||
|  | @ -6,8 +6,9 @@ | ||||||
|           <el-collapse |           <el-collapse | ||||||
|             v-if="isParent && isAdvancedQuery" |             v-if="isParent && isAdvancedQuery" | ||||||
|             v-show="isAdvancedQuery" |             v-show="isAdvancedQuery" | ||||||
|             v-model="activeName" |             v-model="activeNames" | ||||||
|             accordion |             v-shortkey="{f6: ['f6'], ctrlf: ['ctrl', 'f']}" | ||||||
|  |             @shortkey.native="actionAdvancedQuery()" | ||||||
|           > |           > | ||||||
|             <el-collapse-item :title="$t('table.dataTable.advancedQuery')" name="1"> |             <el-collapse-item :title="$t('table.dataTable.advancedQuery')" name="1"> | ||||||
|               <main-panel |               <main-panel | ||||||
|  | @ -151,11 +152,13 @@ | ||||||
|           <el-table |           <el-table | ||||||
|             ref="multipleTable" |             ref="multipleTable" | ||||||
|             v-loading="$route.query.action !== 'create-new' && isLoaded" |             v-loading="$route.query.action !== 'create-new' && isLoaded" | ||||||
|  |             v-shortkey="{up: ['arrowup'], down: ['arrowdown'], left: ['arrowleft'], right: ['arrowright']}" | ||||||
|             :height="getHeigthTable" |             :height="getHeigthTable" | ||||||
|             style="width: 100%" |             style="width: 100%" | ||||||
|             border |             border | ||||||
|             :row-key="getterPanel.keyColumn" |             :row-key="getterPanel.keyColumn" | ||||||
|             reserve-selection |             reserve-selection | ||||||
|  |             highlight-current-row | ||||||
|             :row-style="rowStyle" |             :row-style="rowStyle" | ||||||
|             :data="showTableSearch ? filterResult() : getterDataRecords" |             :data="showTableSearch ? filterResult() : getterDataRecords" | ||||||
|             :element-loading-text="$t('notifications.loading')" |             :element-loading-text="$t('notifications.loading')" | ||||||
|  | @ -164,6 +167,7 @@ | ||||||
|             cell-class-name="datatable-max-cell-height" |             cell-class-name="datatable-max-cell-height" | ||||||
|             :show-summary="getterPanel.isShowedTotals" |             :show-summary="getterPanel.isShowedTotals" | ||||||
|             :summary-method="getSummaries" |             :summary-method="getSummaries" | ||||||
|  |             @shortkey.native="theAction" | ||||||
|             @row-click="handleRowClick" |             @row-click="handleRowClick" | ||||||
|             @row-dblclick="handleRowDblClick" |             @row-dblclick="handleRowDblClick" | ||||||
|             @select="handleSelection" |             @select="handleSelection" | ||||||
|  | @ -320,6 +324,10 @@ export default { | ||||||
|       top: 0, |       top: 0, | ||||||
|       left: 0, |       left: 0, | ||||||
|       isOption: {}, |       isOption: {}, | ||||||
|  |       activeNames: ['0'], | ||||||
|  |       focusTable: false, | ||||||
|  |       currentRow: null, | ||||||
|  |       currentTable: 0, | ||||||
|       visible: this.getShowContextMenuTable, |       visible: this.getShowContextMenuTable, | ||||||
|       searchTable: '', // text from search |       searchTable: '', // text from search | ||||||
|       defaultMaxPagination: 100, |       defaultMaxPagination: 100, | ||||||
|  | @ -577,6 +585,31 @@ export default { | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|  |     actionAdvancedQuery() { | ||||||
|  |       if (this.activeNames < 1) { | ||||||
|  |         this.activeNames = '1' | ||||||
|  |       } else { | ||||||
|  |         this.activeNames = '0' | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     setCurrent(row) { | ||||||
|  |       this.$refs.multipleTable.setCurrentRow(row) | ||||||
|  |     }, | ||||||
|  |     setCurrentParent(row) { | ||||||
|  |       this.$refs.Parent.setCurrentRow(row) | ||||||
|  |     }, | ||||||
|  |     theAction(event) { | ||||||
|  |       switch (event.srcKey) { | ||||||
|  |         case 'up': | ||||||
|  |           this.currentTable = this.currentTable - 1 | ||||||
|  |           break | ||||||
|  |         case 'down': | ||||||
|  |           this.currentTable = this.currentTable + 1 | ||||||
|  |           break | ||||||
|  |       } | ||||||
|  |       this.handleRowClick(this.getterDataRecords[this.currentTable]) | ||||||
|  |       return this.setCurrent(this.getterDataRecords[this.currentTable]) | ||||||
|  |     }, | ||||||
|     sortTab(actionSequence) { |     sortTab(actionSequence) { | ||||||
|       // TODO: Refactor and remove redundant dispatchs |       // TODO: Refactor and remove redundant dispatchs | ||||||
|       this.$store.dispatch('setShowDialog', { |       this.$store.dispatch('setShowDialog', { | ||||||
|  | @ -941,6 +974,7 @@ export default { | ||||||
|       row.isEdit = false |       row.isEdit = false | ||||||
|     }, |     }, | ||||||
|     handleRowClick(row, column, event) { |     handleRowClick(row, column, event) { | ||||||
|  |       this.currentTable = this.getterDataRecords.findIndex(item => item.UUID === row.UUID) | ||||||
|       if (this.isShowedPanelRecord && this.isParent) { |       if (this.isShowedPanelRecord && this.isParent) { | ||||||
|         if (this.uuidCurrentRecordSelected !== row.UUID) { |         if (this.uuidCurrentRecordSelected !== row.UUID) { | ||||||
|           this.uuidCurrentRecordSelected = row.UUID |           this.uuidCurrentRecordSelected = row.UUID | ||||||
|  |  | ||||||
|  | @ -52,6 +52,8 @@ Object.keys(globalMethods).forEach(key => { | ||||||
| 
 | 
 | ||||||
| Vue.config.productionTip = false | Vue.config.productionTip = false | ||||||
| 
 | 
 | ||||||
|  | Vue.use(require('vue-shortkey')) | ||||||
|  | 
 | ||||||
| new Vue({ | new Vue({ | ||||||
|   el: '#app', |   el: '#app', | ||||||
|   router, |   router, | ||||||
|  |  | ||||||
|  | @ -56,7 +56,7 @@ | ||||||
|           </template> |           </template> | ||||||
|           <template slot="paneR"> |           <template slot="paneR"> | ||||||
|             <el-container style="height: 86vh;"> |             <el-container style="height: 86vh;"> | ||||||
|               <Split direction="vertical" @onDrag="onDrag"> |               <Split v-shortkey="['f8']" direction="vertical" @onDrag="onDrag" @shortkey.native="handleChangeShowedRecordNavigation"> | ||||||
|                 <SplitArea :size="sizeAreaStyle" :style="splitAreaStyle"> |                 <SplitArea :size="sizeAreaStyle" :style="splitAreaStyle"> | ||||||
|                   <el-header style="height: 39px;"> |                   <el-header style="height: 39px;"> | ||||||
|                     <context-menu |                     <context-menu | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 elsiosanchez
						elsiosanchez