Add Export Window Record (#168)
* Add Export Window Record * Remove console.log * unnecessary message * add javascript class for exporter * rename function * rename file * Add contexMenu to table * import changes * correcting translations * add translation when exporting file... * add a computed property to the Json array * Add Traslation to Option Format Export * remove validation * Restore File * restore file Export * restore file Export * Update Export2Excel.jspull/3759/head
parent
f82d0a49b3
commit
929301579c
|
@ -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>
|
<el-menu :default-active="activeMenu" :router="false" class="el-menu-demo" mode="horizontal" menu-trigger="hover" unique-opened @select="typeFormat">
|
||||||
<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">
|
||||||
|
@ -35,15 +35,34 @@
|
||||||
{{ $t('components.contextMenuDownload') }}
|
{{ $t('components.contextMenuDownload') }}
|
||||||
</a>
|
</a>
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
|
<el-submenu
|
||||||
|
v-if="getDataSelection.length > 0 && panelType === 'browser'"
|
||||||
|
:disabled="Boolean(getDataSelection.length < 1)"
|
||||||
|
index="xlsx"
|
||||||
|
@click.native="exporBrowser('xlsx')"
|
||||||
|
>
|
||||||
|
<template slot="title">{{ $t('components.contextMennuWindowReport') }}</template>
|
||||||
|
<template v-for="(format, index) in option">
|
||||||
|
<el-menu-item :key="index" :index="index">
|
||||||
|
{{ format }}
|
||||||
|
</el-menu-item>
|
||||||
|
</template>
|
||||||
|
</el-submenu>
|
||||||
|
<el-submenu
|
||||||
|
v-if="panelType === 'window'"
|
||||||
|
index="xlsx"
|
||||||
|
@click.native="exporWindow('xlsx')"
|
||||||
|
>
|
||||||
|
<template slot="title">{{ $t('components.contextMennuWindowReport') }}</template>
|
||||||
|
<template v-for="(format, index) in option">
|
||||||
|
<el-menu-item :key="index" :index="index">
|
||||||
|
{{ format }}
|
||||||
|
</el-menu-item>
|
||||||
|
</template>
|
||||||
|
</el-submenu>
|
||||||
<el-menu-item v-show="$route.name === 'Report Viewer'" index="9" @click="$router.push({ name: ROUTES.PRINT_FORMAT_SETUP_WINDOW.uuid })">
|
<el-menu-item v-show="$route.name === 'Report Viewer'" index="9" @click="$router.push({ name: ROUTES.PRINT_FORMAT_SETUP_WINDOW.uuid })">
|
||||||
{{ $t('components.contextMenuPrintFormatSetup') }}
|
{{ $t('components.contextMenuPrintFormatSetup') }}
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
<el-menu-item v-if="getDataSelection.length > 0 && panelType === 'browser'" index="6" @click="exporBrowser">
|
|
||||||
{{ $t('components.contextMennuExport') }}
|
|
||||||
</el-menu-item>
|
|
||||||
<el-menu-item v-if="panelType === 'window'" index="7" @click="exporBrowser">
|
|
||||||
{{ $t('components.contextMennuWindowReport') }}
|
|
||||||
</el-menu-item>
|
|
||||||
<el-menu-item v-if="panelType !== 'process'" index="8" @click="refreshData">
|
<el-menu-item v-if="panelType !== 'process'" index="8" @click="refreshData">
|
||||||
{{ $t('components.contextMenuRefresh') }}
|
{{ $t('components.contextMenuRefresh') }}
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { showNotification } from '@/utils/ADempiere/notification'
|
import { showNotification } from '@/utils/ADempiere/notification'
|
||||||
import Item from './items'
|
import Item from './items'
|
||||||
import { convertFieldListToShareLink } from '@/utils/ADempiere/valueUtil'
|
import { convertFieldListToShareLink } from '@/utils/ADempiere/valueUtil'
|
||||||
|
import { supportedTypes, exportFileFromJson } from '@/utils/ADempiere/exportUtil'
|
||||||
import ROUTES from '@/utils/ADempiere/zoomWindow'
|
import ROUTES from '@/utils/ADempiere/zoomWindow'
|
||||||
|
|
||||||
export const contextMixin = {
|
export const contextMixin = {
|
||||||
|
@ -51,6 +52,7 @@ export const contextMixin = {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
actions: [],
|
actions: [],
|
||||||
|
option: supportedTypes,
|
||||||
references: [],
|
references: [],
|
||||||
file: this.$store.getters.getProcessResult.download,
|
file: this.$store.getters.getProcessResult.download,
|
||||||
downloads: this.$store.getters.getProcessResult.url,
|
downloads: this.$store.getters.getProcessResult.url,
|
||||||
|
@ -133,6 +135,17 @@ export const contextMixin = {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
getterDataRecordsAll() {
|
||||||
|
return this.$store.getters.getDataRecordAndSelection(this.containerUuid).record
|
||||||
|
},
|
||||||
|
getDataRecord() {
|
||||||
|
var record = this.getterDataRecordsAll.filter(fieldItem => {
|
||||||
|
if (this.recordUuid === fieldItem.UUID) {
|
||||||
|
return fieldItem
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return record
|
||||||
|
},
|
||||||
getterDataLog() {
|
getterDataLog() {
|
||||||
if (this.panelType === 'window') {
|
if (this.panelType === 'window') {
|
||||||
return this.$store.getters.getDataLog(this.containerUuid, this.recordUuid)
|
return this.$store.getters.getDataLog(this.containerUuid, this.recordUuid)
|
||||||
|
@ -224,18 +237,38 @@ export const contextMixin = {
|
||||||
this.isReferencesLoaded = false
|
this.isReferencesLoaded = false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
exporBrowser() {
|
typeFormat(key) {
|
||||||
import('@/vendor/Export2Excel').then(excel => {
|
Object.keys(supportedTypes).forEach(type => {
|
||||||
const tHeader = this.getterFieldListHeader
|
if (type === key && (this.panelType === 'window')) {
|
||||||
const filterVal = this.getterFieldListValue
|
this.exporWindow(key)
|
||||||
const list = this.getDataSelection
|
} else if (type === key && (this.panelType === 'browser')) {
|
||||||
const data = this.formatJson(filterVal, list)
|
this.exporBrowser(key)
|
||||||
excel.export_json_to_excel({
|
}
|
||||||
header: tHeader,
|
})
|
||||||
data,
|
},
|
||||||
filename: ''
|
exporBrowser(key) {
|
||||||
})
|
const tHeader = this.getterFieldListHeader
|
||||||
})
|
const filterVal = this.getterFieldListValue
|
||||||
|
const list = this.getDataSelection
|
||||||
|
const data = this.formatJson(filterVal, list)
|
||||||
|
exportFileFromJson({
|
||||||
|
header: tHeader,
|
||||||
|
data,
|
||||||
|
filename: '',
|
||||||
|
exportType: key
|
||||||
|
})
|
||||||
|
},
|
||||||
|
exporWindow(key) {
|
||||||
|
const tHeader = this.getterFieldListHeader
|
||||||
|
const filterVal = this.getterFieldListValue
|
||||||
|
const list = this.getDataRecord
|
||||||
|
const data = this.formatJson(filterVal, list)
|
||||||
|
exportFileFromJson({
|
||||||
|
header: tHeader,
|
||||||
|
data,
|
||||||
|
filename: '',
|
||||||
|
exportType: key
|
||||||
|
})
|
||||||
},
|
},
|
||||||
formatJson(filterVal, jsonData) {
|
formatJson(filterVal, jsonData) {
|
||||||
return jsonData.map(v => filterVal.map(j => v[j]))
|
return jsonData.map(v => filterVal.map(j => v[j]))
|
||||||
|
|
|
@ -0,0 +1,163 @@
|
||||||
|
<template>
|
||||||
|
<el-menu :collapse="isCollapse" class="el-menu-demo" @select="typeFormat">
|
||||||
|
<el-submenu
|
||||||
|
index="xlsx"
|
||||||
|
>
|
||||||
|
<template slot="title">{{ $t('components.contextMennuWindowReport') }}</template>
|
||||||
|
<template v-for="(format, index) in option">
|
||||||
|
<el-menu-item :key="index" :index="index">
|
||||||
|
{{ format }}
|
||||||
|
</el-menu-item>
|
||||||
|
</template>
|
||||||
|
</el-submenu>
|
||||||
|
<el-menu-item index="eliminar" style="padding-left: 36px;">
|
||||||
|
{{ $t('window.deleteRecord') }}
|
||||||
|
</el-menu-item>
|
||||||
|
</el-menu>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { supportedTypes, exportFileFromJson } from '@/utils/ADempiere/exportUtil'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'ContextMenu',
|
||||||
|
props: {
|
||||||
|
parentUuid: {
|
||||||
|
type: String,
|
||||||
|
default: undefined
|
||||||
|
},
|
||||||
|
containerUuid: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
panelType: {
|
||||||
|
type: String,
|
||||||
|
default: 'window'
|
||||||
|
},
|
||||||
|
isOption: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
option: supportedTypes,
|
||||||
|
isCollapse: true,
|
||||||
|
visible: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
getterFieldList() {
|
||||||
|
return this.$store.getters.getFieldsListFromPanel(this.containerUuid)
|
||||||
|
},
|
||||||
|
getterFieldListHeader() {
|
||||||
|
var header = this.getterFieldList.filter(fieldItem => {
|
||||||
|
const isDisplayed = fieldItem.isDisplayed || fieldItem.isDisplayedFromLogic
|
||||||
|
if (fieldItem.isActive && isDisplayed && !fieldItem.isKey) {
|
||||||
|
return fieldItem.name
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return header.map(fieldItem => {
|
||||||
|
return fieldItem.name
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getterFieldListValue() {
|
||||||
|
var value = this.getterFieldList.filter(fieldItem => {
|
||||||
|
const isDisplayed = fieldItem.isDisplayed || fieldItem.isDisplayedFromLogic
|
||||||
|
if (fieldItem.isActive && isDisplayed && !fieldItem.isKey) {
|
||||||
|
return fieldItem
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return value.map(fieldItem => {
|
||||||
|
if (fieldItem.componentPath === 'FieldSelect') {
|
||||||
|
return 'DisplayColumn_' + fieldItem.columnName
|
||||||
|
} else {
|
||||||
|
return fieldItem.columnName
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
gettersRecordContextMenu() {
|
||||||
|
var record = []
|
||||||
|
var recordTable = this.isOption
|
||||||
|
record.push(recordTable)
|
||||||
|
return record
|
||||||
|
},
|
||||||
|
getDataSelection() {
|
||||||
|
return this.$store.getters.getDataRecordSelection(this.containerUuid)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
classTableMenu() {
|
||||||
|
if (this.isMobile) {
|
||||||
|
return 'menu-table-mobile'
|
||||||
|
} else if (this.$store.state.app.sidebar.opened) {
|
||||||
|
return 'menu-table'
|
||||||
|
}
|
||||||
|
return 'menu-table'
|
||||||
|
},
|
||||||
|
typeFormat(key, keyPath) {
|
||||||
|
if (key === 'eliminar') {
|
||||||
|
this.rowMenu()
|
||||||
|
} else {
|
||||||
|
this.exporRecordTable(key)
|
||||||
|
}
|
||||||
|
this.$store.dispatch('showMenuTable', {
|
||||||
|
isShowedTable: false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
exporRecordTable(key) {
|
||||||
|
const Header = this.getterFieldListHeader
|
||||||
|
const filterVal = this.getterFieldListValue
|
||||||
|
const list = this.gettersRecordContextMenu
|
||||||
|
const data = this.formatJson(filterVal, list)
|
||||||
|
exportFileFromJson({
|
||||||
|
header: Header,
|
||||||
|
data,
|
||||||
|
filename: '',
|
||||||
|
exportType: key
|
||||||
|
})
|
||||||
|
},
|
||||||
|
formatJson(filterVal, jsonData) {
|
||||||
|
return jsonData.map(v => filterVal.map(j => v[j]))
|
||||||
|
},
|
||||||
|
rowMenu() {
|
||||||
|
this.$store.dispatch('deleteEntity', {
|
||||||
|
parentUuid: this.parentUuid,
|
||||||
|
containerUuid: this.containerUuid,
|
||||||
|
recordUuid: this.isOption.UUID,
|
||||||
|
panelType: this.panelType,
|
||||||
|
isNewRecord: 'deleteEntity' === 'resetPanelToNew'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
.el-menu--vertical .nest-menu .el-submenu>.el-submenu__title:hover, .el-menu--vertical .el-menu-item:hover {
|
||||||
|
background-color: #ffffff !important;
|
||||||
|
background: #ffffff !important;
|
||||||
|
}
|
||||||
|
.el-menu--collapse {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
.el-menu-item:hover {
|
||||||
|
background-color: #ffffff !important
|
||||||
|
}
|
||||||
|
.hover {
|
||||||
|
background-color: initial !important;
|
||||||
|
}
|
||||||
|
.el-menu-item {
|
||||||
|
height: 56px;
|
||||||
|
line-height: 56px;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #303133;
|
||||||
|
padding: 0 20px;
|
||||||
|
list-style: none;
|
||||||
|
cursor: pointer;
|
||||||
|
position: relative;
|
||||||
|
-webkit-transition: border-color .3s, background-color .3s, color .3s;
|
||||||
|
transition: border-color .3s, background-color .3s, color .3s;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -22,7 +22,7 @@
|
||||||
</el-collapse>
|
</el-collapse>
|
||||||
<div>
|
<div>
|
||||||
<div v-if="!isMobile">
|
<div v-if="!isMobile">
|
||||||
<el-menu :default-active="menuTable" :class="classTableMenu + ' menu-table-container'" mode="horizontal">
|
<el-menu :default-active="menuTable" :class="classTableMenu + ' menu-table-container'" mode="horizontal" @select="typeFormat">
|
||||||
<el-submenu index="2">
|
<el-submenu index="2">
|
||||||
<template slot="title">
|
<template slot="title">
|
||||||
<i class="el-icon-more" />
|
<i class="el-icon-more" />
|
||||||
|
@ -43,6 +43,17 @@
|
||||||
>
|
>
|
||||||
{{ $t('table.dataTable.deleteSelection') }}
|
{{ $t('table.dataTable.deleteSelection') }}
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
|
<el-submenu
|
||||||
|
:disabled="Boolean(getDataSelection.length < 1)"
|
||||||
|
index="xlsx"
|
||||||
|
>
|
||||||
|
<template slot="title">{{ $t('table.dataTable.exportRecordTable') }}</template>
|
||||||
|
<template v-for="(format, index) in option">
|
||||||
|
<el-menu-item :key="index" :index="index">
|
||||||
|
{{ format }}
|
||||||
|
</el-menu-item>
|
||||||
|
</template>
|
||||||
|
</el-submenu>
|
||||||
<el-menu-item index="optional" @click="optionalPanel()">
|
<el-menu-item index="optional" @click="optionalPanel()">
|
||||||
{{ $t('components.filterableItems') }}
|
{{ $t('components.filterableItems') }}
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
|
@ -109,6 +120,18 @@
|
||||||
>
|
>
|
||||||
{{ $t('table.dataTable.deleteSelection') }}
|
{{ $t('table.dataTable.deleteSelection') }}
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
|
<el-submenu
|
||||||
|
v-if="isPanelWindow"
|
||||||
|
:disabled="Boolean(getDataSelection.length < 1)"
|
||||||
|
index="xlsx"
|
||||||
|
>
|
||||||
|
<template slot="title">{{ $t('table.dataTable.exportRecordTable') }}</template>
|
||||||
|
<template v-for="(format, index) in option">
|
||||||
|
<el-menu-item :key="index" :index="index">
|
||||||
|
{{ format }}
|
||||||
|
</el-menu-item>
|
||||||
|
</template>
|
||||||
|
</el-submenu>
|
||||||
<el-menu-item index="optional" @click="optionalPanel()">
|
<el-menu-item index="optional" @click="optionalPanel()">
|
||||||
{{ $t('components.filterableItems') }}
|
{{ $t('components.filterableItems') }}
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
|
@ -185,6 +208,16 @@
|
||||||
</div>
|
</div>
|
||||||
</el-header>
|
</el-header>
|
||||||
<el-main style="padding: 0px !important; overflow: hidden;">
|
<el-main style="padding: 0px !important; overflow: hidden;">
|
||||||
|
<context-menu
|
||||||
|
v-if="isParent"
|
||||||
|
v-show="getShowContextMenuTable"
|
||||||
|
:style="{left:left+'px',top:top+'px'}"
|
||||||
|
class="contextmenu"
|
||||||
|
:container-uuid="containerUuid"
|
||||||
|
:parent-uuid="parentUuid"
|
||||||
|
:panel-type="panelType"
|
||||||
|
:is-option="isOption"
|
||||||
|
/>
|
||||||
<el-table
|
<el-table
|
||||||
ref="multipleTable"
|
ref="multipleTable"
|
||||||
v-loading="$route.query.action !== 'create-new' && isLoaded"
|
v-loading="$route.query.action !== 'create-new' && isLoaded"
|
||||||
|
@ -205,6 +238,8 @@
|
||||||
@row-dblclick="handleRowDblClick"
|
@row-dblclick="handleRowDblClick"
|
||||||
@select="handleSelection"
|
@select="handleSelection"
|
||||||
@select-all="handleSelectionAll"
|
@select-all="handleSelectionAll"
|
||||||
|
@row-contextmenu="rowMenu"
|
||||||
|
@contextmenu.prevent.native="block"
|
||||||
>
|
>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
v-if="isTableSelection"
|
v-if="isTableSelection"
|
||||||
|
@ -282,12 +317,14 @@ import FieldDefinition from '@/components/ADempiere/Field'
|
||||||
import Sortable from 'sortablejs'
|
import Sortable from 'sortablejs'
|
||||||
import FilterColumns from '@/components/ADempiere/DataTable/filterColumns'
|
import FilterColumns from '@/components/ADempiere/DataTable/filterColumns'
|
||||||
import FixedColumns from '@/components/ADempiere/DataTable/fixedColumns'
|
import FixedColumns from '@/components/ADempiere/DataTable/fixedColumns'
|
||||||
|
import ContextMenu from '@/components/ADempiere/DataTable/contextMenu'
|
||||||
import IconElement from '@/components/ADempiere/IconElement'
|
import IconElement from '@/components/ADempiere/IconElement'
|
||||||
import { formatDate } from '@/filters/ADempiere'
|
import { formatDate } from '@/filters/ADempiere'
|
||||||
import MainPanel from '@/components/ADempiere/Panel'
|
import MainPanel from '@/components/ADempiere/Panel'
|
||||||
import { sortFields } from '@/utils/ADempiere'
|
import { sortFields } from '@/utils/ADempiere'
|
||||||
import { FIELD_READ_ONLY_FORM } from '@/components/ADempiere/Field/references'
|
import { FIELD_READ_ONLY_FORM } from '@/components/ADempiere/Field/references'
|
||||||
import { fieldIsDisplayed } from '@/utils/ADempiere'
|
import { fieldIsDisplayed } from '@/utils/ADempiere'
|
||||||
|
import { supportedTypes, exportFileFromJson } from '@/utils/ADempiere/exportUtil'
|
||||||
import evaluator from '@/utils/ADempiere/evaluator'
|
import evaluator from '@/utils/ADempiere/evaluator'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
@ -296,6 +333,7 @@ export default {
|
||||||
FieldDefinition,
|
FieldDefinition,
|
||||||
FilterColumns,
|
FilterColumns,
|
||||||
FixedColumns,
|
FixedColumns,
|
||||||
|
ContextMenu,
|
||||||
IconElement,
|
IconElement,
|
||||||
MainPanel
|
MainPanel
|
||||||
},
|
},
|
||||||
|
@ -335,8 +373,13 @@ export default {
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
isOption: {},
|
||||||
|
visible: this.getShowContextMenuTable,
|
||||||
searchTable: '', // text from search
|
searchTable: '', // text from search
|
||||||
defaultMaxPagination: 100,
|
defaultMaxPagination: 100,
|
||||||
|
option: supportedTypes,
|
||||||
menuTable: '1',
|
menuTable: '1',
|
||||||
activeName: '',
|
activeName: '',
|
||||||
isOptional: false,
|
isOptional: false,
|
||||||
|
@ -352,6 +395,38 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
getShowContextMenuTable() {
|
||||||
|
return this.$store.getters.getShowContextMenuTable
|
||||||
|
},
|
||||||
|
getterFieldList() {
|
||||||
|
return this.$store.getters.getFieldsListFromPanel(this.containerUuid)
|
||||||
|
},
|
||||||
|
getterFieldListHeader() {
|
||||||
|
var header = this.getterFieldList.filter(fieldItem => {
|
||||||
|
const isDisplayed = fieldItem.isDisplayed || fieldItem.isDisplayedFromLogic
|
||||||
|
if (fieldItem.isActive && isDisplayed && !fieldItem.isKey) {
|
||||||
|
return fieldItem.name
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return header.map(fieldItem => {
|
||||||
|
return fieldItem.name
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getterFieldListValue() {
|
||||||
|
var value = this.getterFieldList.filter(fieldItem => {
|
||||||
|
const isDisplayed = fieldItem.isDisplayed || fieldItem.isDisplayedFromLogic
|
||||||
|
if (fieldItem.isActive && isDisplayed && !fieldItem.isKey) {
|
||||||
|
return fieldItem
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return value.map(fieldItem => {
|
||||||
|
if (fieldItem.componentPath === 'FieldSelect') {
|
||||||
|
return 'DisplayColumn_' + fieldItem.columnName
|
||||||
|
} else {
|
||||||
|
return fieldItem.columnName
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
isMobile() {
|
isMobile() {
|
||||||
return this.$store.state.app.device === 'mobile'
|
return this.$store.state.app.device === 'mobile'
|
||||||
},
|
},
|
||||||
|
@ -504,6 +579,15 @@ export default {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
watch: {
|
||||||
|
visible(value) {
|
||||||
|
if (value) {
|
||||||
|
document.body.addEventListener('click', this.closeMenu)
|
||||||
|
} else {
|
||||||
|
document.body.removeEventListener('click', this.closeMenu)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
created() {
|
created() {
|
||||||
this.getPanel()
|
this.getPanel()
|
||||||
},
|
},
|
||||||
|
@ -516,6 +600,56 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
closeMenu() {
|
||||||
|
this.$store.dispatch('showMenuTable', {
|
||||||
|
isShowedTable: false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
block() {
|
||||||
|
return false
|
||||||
|
},
|
||||||
|
rowMenu(row, column, event) {
|
||||||
|
const menuMinWidth = 105
|
||||||
|
const offsetLeft = this.$el.getBoundingClientRect().left // container margin left
|
||||||
|
const offsetWidth = this.$el.offsetWidth // container width
|
||||||
|
const maxLeft = offsetWidth - menuMinWidth // left boundary
|
||||||
|
const left = event.clientX - offsetLeft + 15 // 15: margin right
|
||||||
|
|
||||||
|
if (left > maxLeft) {
|
||||||
|
this.left = maxLeft
|
||||||
|
} else {
|
||||||
|
this.left = left
|
||||||
|
}
|
||||||
|
|
||||||
|
this.top = event.clientY - 100
|
||||||
|
this.isOption = row
|
||||||
|
this.visible = true
|
||||||
|
this.$store.dispatch('showMenuTable', {
|
||||||
|
isShowedTable: true
|
||||||
|
})
|
||||||
|
},
|
||||||
|
typeFormat(key, keyPath) {
|
||||||
|
Object.keys(supportedTypes).forEach(type => {
|
||||||
|
if (type === key) {
|
||||||
|
this.exporRecordTable(key)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
exporRecordTable(key) {
|
||||||
|
const Header = this.getterFieldListHeader
|
||||||
|
const filterVal = this.getterFieldListValue
|
||||||
|
const list = this.getDataSelection
|
||||||
|
const data = this.formatJson(filterVal, list)
|
||||||
|
exportFileFromJson({
|
||||||
|
header: Header,
|
||||||
|
data,
|
||||||
|
filename: '',
|
||||||
|
exportType: key
|
||||||
|
})
|
||||||
|
},
|
||||||
|
formatJson(filterVal, jsonData) {
|
||||||
|
return jsonData.map(v => filterVal.map(j => v[j]))
|
||||||
|
},
|
||||||
sortFields,
|
sortFields,
|
||||||
handleChange(val) {
|
handleChange(val) {
|
||||||
val = !val
|
val = !val
|
||||||
|
@ -964,6 +1098,27 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
|
.contextmenu {
|
||||||
|
margin: 0;
|
||||||
|
background: #fff;
|
||||||
|
z-index: 3000;
|
||||||
|
position: absolute;
|
||||||
|
list-style-type: none;
|
||||||
|
padding: 5px 0;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #333;
|
||||||
|
box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, .3);
|
||||||
|
li {
|
||||||
|
margin: 0;
|
||||||
|
padding: 7px 16px;
|
||||||
|
cursor: pointer;
|
||||||
|
&:hover {
|
||||||
|
background: #eee;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
.el-table-row {
|
.el-table-row {
|
||||||
.hover-row {
|
.hover-row {
|
||||||
background-color: black;
|
background-color: black;
|
||||||
|
|
|
@ -123,7 +123,7 @@ export default {
|
||||||
contextMenuShareLink: 'Share Link',
|
contextMenuShareLink: 'Share Link',
|
||||||
contextMenuRefresh: 'Refresh',
|
contextMenuRefresh: 'Refresh',
|
||||||
contextMennuExport: 'Export Smart Browser',
|
contextMennuExport: 'Export Smart Browser',
|
||||||
contextMennuWindowReport: 'Window Report ',
|
contextMennuWindowReport: 'Export Records',
|
||||||
contextMenuPrintFormatSetup: 'Print Format Setup',
|
contextMenuPrintFormatSetup: 'Print Format Setup',
|
||||||
dateStartPlaceholder: 'Start date',
|
dateStartPlaceholder: 'Start date',
|
||||||
dateEndPlaceholder: 'End date',
|
dateEndPlaceholder: 'End date',
|
||||||
|
@ -159,6 +159,14 @@ export default {
|
||||||
reportView: 'Report Views',
|
reportView: 'Report Views',
|
||||||
printFormat: 'Print Formats'
|
printFormat: 'Print Formats'
|
||||||
},
|
},
|
||||||
|
report: {
|
||||||
|
ExportXlsx: '(xlsx) Excel File Extension',
|
||||||
|
ExportXls: '(xls) Excel File',
|
||||||
|
ExporXml: '(xml) Extensible Markup Language File',
|
||||||
|
ExporCsv: '(csv) Archivo separado por coma',
|
||||||
|
ExportTxt: '(txt) Tab Delimited Text File',
|
||||||
|
ExportHtml: '(html) Hypertext Markup Language'
|
||||||
|
},
|
||||||
table: {
|
table: {
|
||||||
ProcessActivity: {
|
ProcessActivity: {
|
||||||
name: 'Name',
|
name: 'Name',
|
||||||
|
@ -180,6 +188,7 @@ export default {
|
||||||
advancedQuery: 'Advanced Query',
|
advancedQuery: 'Advanced Query',
|
||||||
showOnlyMandatoryColumns: 'Show Only Mandatory Columns',
|
showOnlyMandatoryColumns: 'Show Only Mandatory Columns',
|
||||||
showAllAvailableColumns: 'Show All Available Columns',
|
showAllAvailableColumns: 'Show All Available Columns',
|
||||||
|
exportRecordTable: 'Export Selected Records',
|
||||||
showTotal: 'Show Totals',
|
showTotal: 'Show Totals',
|
||||||
hiddenTotal: 'Hidden Totals'
|
hiddenTotal: 'Hidden Totals'
|
||||||
},
|
},
|
||||||
|
|
|
@ -119,7 +119,7 @@ export default {
|
||||||
contextMenuShareLink: 'Compartir Link',
|
contextMenuShareLink: 'Compartir Link',
|
||||||
contextMenuRefresh: 'Actualizar',
|
contextMenuRefresh: 'Actualizar',
|
||||||
contextMennuExport: 'Exportar Smart Browser',
|
contextMennuExport: 'Exportar Smart Browser',
|
||||||
contextMennuWindowReport: 'Informe de Ventana',
|
contextMennuWindowReport: 'Exportar Registro',
|
||||||
contextMenuPrintFormatSetup: 'Configurar Formato de Impresión',
|
contextMenuPrintFormatSetup: 'Configurar Formato de Impresión',
|
||||||
RunProcess: 'Ejecutar',
|
RunProcess: 'Ejecutar',
|
||||||
ChangeParameters: 'Cambiar Parametros',
|
ChangeParameters: 'Cambiar Parametros',
|
||||||
|
@ -159,6 +159,14 @@ export default {
|
||||||
reportView: 'Vistas de Reporte',
|
reportView: 'Vistas de Reporte',
|
||||||
printFormat: 'Formatos de Impresión'
|
printFormat: 'Formatos de Impresión'
|
||||||
},
|
},
|
||||||
|
report: {
|
||||||
|
ExportXlsx: '(xlsx) Extencion de Archivo Excel',
|
||||||
|
ExportXls: '(xls) Archivo Excel ',
|
||||||
|
ExporXml: '(xml) Archivo Lenguaje de marcas Extensible',
|
||||||
|
ExporCsv: '(csv) Archivo Separado por Coma',
|
||||||
|
ExportTxt: '(txt) Archivo de Texto Delimitado por Tabuladores',
|
||||||
|
ExportHtml: '(html) Lenguaje de Marcas de Hipertexto'
|
||||||
|
},
|
||||||
table: {
|
table: {
|
||||||
ProcessActivity: {
|
ProcessActivity: {
|
||||||
Name: 'Nombre',
|
Name: 'Nombre',
|
||||||
|
@ -179,6 +187,8 @@ export default {
|
||||||
deleteSelection: 'Eliminar Registros Seleccionados',
|
deleteSelection: 'Eliminar Registros Seleccionados',
|
||||||
advancedQuery: 'Consulta Avanzada',
|
advancedQuery: 'Consulta Avanzada',
|
||||||
showOnlyMandatoryColumns: 'Mostrar Solo Columnas Obligatorias',
|
showOnlyMandatoryColumns: 'Mostrar Solo Columnas Obligatorias',
|
||||||
|
showAllAvailableColumns: 'Mostrar Todas Columnas Disponibles',
|
||||||
|
exportRecordTable: 'Exportar Registros Seleccionados',
|
||||||
showTotal: 'Mostrar Totales',
|
showTotal: 'Mostrar Totales',
|
||||||
hiddenTotal: 'Ocultar Totales'
|
hiddenTotal: 'Ocultar Totales'
|
||||||
},
|
},
|
||||||
|
|
|
@ -243,7 +243,6 @@ const processControl = {
|
||||||
if (reportType !== 'pdf' && reportType !== 'html') {
|
if (reportType !== 'pdf' && reportType !== 'html') {
|
||||||
link.click()
|
link.click()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Report views List to context menu
|
// Report views List to context menu
|
||||||
var reportViewList = {
|
var reportViewList = {
|
||||||
name: language.t('views.reportView'),
|
name: language.t('views.reportView'),
|
||||||
|
|
|
@ -8,7 +8,9 @@ const utils = {
|
||||||
widthLayout: 0,
|
widthLayout: 0,
|
||||||
tempShareLink: '',
|
tempShareLink: '',
|
||||||
oldAction: undefined,
|
oldAction: undefined,
|
||||||
reportType: ''
|
reportType: '',
|
||||||
|
isShowedTable: false,
|
||||||
|
recordUuidTable: 0
|
||||||
},
|
},
|
||||||
mutations: {
|
mutations: {
|
||||||
setWidth(state, width) {
|
setWidth(state, width) {
|
||||||
|
@ -23,9 +25,15 @@ const utils = {
|
||||||
setSplitHeight(state, splitHeight) {
|
setSplitHeight(state, splitHeight) {
|
||||||
state.splitHeight = splitHeight
|
state.splitHeight = splitHeight
|
||||||
},
|
},
|
||||||
|
showMenuTable(state, isShowedTable) {
|
||||||
|
state.isShowedTable = isShowedTable
|
||||||
|
},
|
||||||
setSplitHeightTop(state, splitHeightTop) {
|
setSplitHeightTop(state, splitHeightTop) {
|
||||||
state.splitHeightTop = splitHeightTop
|
state.splitHeightTop = splitHeightTop
|
||||||
},
|
},
|
||||||
|
setRecordUuidMenu(state, recordUuidTable) {
|
||||||
|
state.recordUuidTable = recordUuidTable
|
||||||
|
},
|
||||||
setTempShareLink(state, payload) {
|
setTempShareLink(state, payload) {
|
||||||
state.tempShareLink = payload
|
state.tempShareLink = payload
|
||||||
},
|
},
|
||||||
|
@ -46,12 +54,18 @@ const utils = {
|
||||||
setHeight({ commit }, height) {
|
setHeight({ commit }, height) {
|
||||||
commit('setHeigth', height)
|
commit('setHeigth', height)
|
||||||
},
|
},
|
||||||
|
showMenuTable({ commit }, isShowedTable) {
|
||||||
|
commit('showMenuTable', isShowedTable)
|
||||||
|
},
|
||||||
setSplitHeight({ commit }, splitHeight) {
|
setSplitHeight({ commit }, splitHeight) {
|
||||||
commit('setSplitHeight', splitHeight)
|
commit('setSplitHeight', splitHeight)
|
||||||
},
|
},
|
||||||
setSplitHeightTop({ commit }, splitHeightTop) {
|
setSplitHeightTop({ commit }, splitHeightTop) {
|
||||||
commit('setSplitHeightTop', splitHeightTop)
|
commit('setSplitHeightTop', splitHeightTop)
|
||||||
},
|
},
|
||||||
|
setRecordUuidMenu({ commit }, recordUuidTable) {
|
||||||
|
commit('setRecordUuidMenu', recordUuidTable)
|
||||||
|
},
|
||||||
changeShowedDetail({ dispatch }, params) {
|
changeShowedDetail({ dispatch }, params) {
|
||||||
if (params.panelType === 'window') {
|
if (params.panelType === 'window') {
|
||||||
dispatch('changeShowedDetailWindow', params)
|
dispatch('changeShowedDetailWindow', params)
|
||||||
|
@ -87,6 +101,13 @@ const utils = {
|
||||||
getSplitHeightTop: (state) => {
|
getSplitHeightTop: (state) => {
|
||||||
return state.getSplitHeightTop
|
return state.getSplitHeightTop
|
||||||
},
|
},
|
||||||
|
getRecordUuidMenu: (state) => {
|
||||||
|
return state.recordUuidTable
|
||||||
|
},
|
||||||
|
getShowContextMenuTable: (state) => {
|
||||||
|
const menu = state.isShowedTable.isShowedTable
|
||||||
|
return menu
|
||||||
|
},
|
||||||
getSplitHeight: (state) => {
|
getSplitHeight: (state) => {
|
||||||
const split = state.splitHeight
|
const split = state.splitHeight
|
||||||
var panelHeight = 0
|
var panelHeight = 0
|
||||||
|
|
|
@ -369,11 +369,10 @@ const windowControl = {
|
||||||
deleteEntity({ dispatch, rootGetters }, parameters) {
|
deleteEntity({ dispatch, rootGetters }, parameters) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const panel = rootGetters.getPanel(parameters.containerUuid)
|
const panel = rootGetters.getPanel(parameters.containerUuid)
|
||||||
const recordUuid = rootGetters.getUuid(parameters.containerUuid)
|
|
||||||
|
|
||||||
deleteEntity({
|
deleteEntity({
|
||||||
tableName: panel.tableName,
|
tableName: panel.tableName,
|
||||||
recordUuid: recordUuid
|
recordUuid: parameters.recordUuid
|
||||||
})
|
})
|
||||||
.then(response => {
|
.then(response => {
|
||||||
const oldRoute = router.app._route
|
const oldRoute = router.app._route
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
import { export_json_to_excel } from '@/vendor/Export2Excel'
|
||||||
|
import language from '@/lang'
|
||||||
|
|
||||||
|
export const supportedTypes = {
|
||||||
|
xlsx: language.t('report.ExportXlsx'),
|
||||||
|
xls: language.t('report.ExportXls'),
|
||||||
|
xml: language.t('report.ExporXml'),
|
||||||
|
csv: language.t('report.ExporCsv'),
|
||||||
|
txt: language.t('report.ExportTxt'),
|
||||||
|
html: language.t('report.ExportHtml')
|
||||||
|
}
|
||||||
|
export function exportFileFromJson({
|
||||||
|
header,
|
||||||
|
data,
|
||||||
|
exportType
|
||||||
|
}) {
|
||||||
|
var Json = data.map(dataJson => {
|
||||||
|
Object.keys(dataJson).forEach(key => {
|
||||||
|
if (typeof dataJson[key] === 'boolean') {
|
||||||
|
dataJson[key] = dataJson[key] ? language.t('components.switchActiveText') : language.t('components.switchInactiveText')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return dataJson
|
||||||
|
})
|
||||||
|
export_json_to_excel({
|
||||||
|
header: header,
|
||||||
|
data: Json,
|
||||||
|
filename: '',
|
||||||
|
bookType: exportType
|
||||||
|
})
|
||||||
|
}
|
Loading…
Reference in New Issue