1
0
mirror of https://github.com/PanJiaChen/vue-element-admin.git synced 2025-08-10 20:39:48 +08:00

fix: Error window loading record undefined. (#585)

Co-authored-by: EdwinBetanc0urt <EdwinBetanco0urt@outlook.com>
This commit is contained in:
Edwin Betancourt 2021-02-16 14:07:37 -04:00 committed by GitHub
parent 0b314fc8c2
commit d8ee1b8f7b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 715 additions and 695 deletions

View File

@ -297,702 +297,15 @@
/>
</template>
<script>
import TabParent from '@/components/ADempiere/Tab'
import TabChildren from '@/components/ADempiere/Tab/tabChildren'
// When supporting the processes, smart browser and reports,
// the submenu and sticky must be placed in the layout
import ContextMenu from '@/components/ADempiere/ContextMenu'
import ModalDialog from '@/components/ADempiere/Dialog'
import DataTable from '@/components/ADempiere/DataTable'
import splitPane from 'vue-splitpane'
// Container Info
import ChatEntries from '@/components/ADempiere/ChatEntries'
import RecordLogs from '@/components/ADempiere/ContainerInfo/recordLogs'
import WorkflowLogs from '@/components/ADempiere/ContainerInfo/workflowLogs'
// Workflow
import WorkflowStatusBar from '@/components/ADempiere/WorkflowStatusBar'
export default {
name: 'WindowView',
components: {
TabParent,
TabChildren,
ContextMenu,
DataTable,
splitPane,
ModalDialog,
ChatEntries,
RecordLogs,
WorkflowLogs,
WorkflowStatusBar
},
beforeRouteUpdate(to, from, next) {
this.$store.dispatch('setWindowOldRoute', {
path: from.path,
fullPath: from.fullPath,
params: {
...from.params
},
query: {
...from.query
}
})
next()
},
props: {
styleSteps: {
type: Object,
default: () => {}
}
},
data() {
return {
windowMetadata: {},
windowUuid: this.$route.meta.uuid,
panelType: 'window',
isLoaded: false,
// TODO: Manage attribute with store
activeInfo: 'listChatEntries',
showContainerInfo: false,
// TODO: Manage attribute with store
isShowedRecordPanel: false
}
},
computed: {
showContextMenu() {
return this.$store.state.settings.showContextMenu
},
defaultPorcentSplitPane() {
if (this.isShowedRecordPanel) {
if (this.isShowedRecordNavigation) {
return 100
}
return 50
}
if (this.isShowedRecordNavigation) {
if (this.isMobile) {
return 100
}
return 50
}
return -1
},
isMobile() {
return this.$store.state.app.device === 'mobile'
},
// convert ternary operator into computed property
classIsMobile() {
if (this.isMobile) {
return 'open-table-detail-mobile'
}
return 'open-table-detail'
},
isSize() {
if (this.isMobile && this.showContainerInfo) {
return 98
}
return 50
},
sizePanel() {
if (this.showContainerInfo) {
if (this.isMobile) {
return 2
}
return 50
}
return 100
},
isCloseInfo() {
if (this.isMobile) {
return 'close-info-mobile'
}
return 'close-info'
},
iconShowedRecordNavigation() {
if (this.isShowedRecordNavigation) {
return 'el-icon-caret-left'
}
return 'el-icon-caret-right'
},
iconIsShowedAside() {
if (this.isShowedRecordPanel) {
return 'el-icon-caret-left'
}
return 'el-icon-caret-right'
},
styleMainTab() {
if (this.isShowedTabsChildren) {
return {
height: 'initial',
overflow: 'auto'
}
}
return {
height: 'initial',
overflow: 'hidden'
}
},
styleTableNavigation() {
if (this.isShowedRecordNavigation && this.isMobile) {
return 'open-datatable-aside-mobile'
}
return 'open-datatable-aside'
},
splitAreaStyle() {
if (this.isShowedTabsChildren || this.isMobile) {
return {
overflowX: 'hidden',
overflowY: 'auto'
}
}
return {
overflow: 'hidden'
}
},
styleStepsSimple() {
const baseStyle = {
paddingTop: '0px',
paddingBottom: '0px',
paddingLeft: '0px',
paddingRight: '0px',
borderRadius: '4px',
background: '#F5F7FA',
overflowX: 'auto',
overflowY: 'hidden'
}
if (this.isShowedRecordNavigation) {
return {
...baseStyle,
width: this.$store.getters.getPanelRight + 'px'
}
}
return {
...baseStyle,
width: 'auto'
}
},
sizeAreaStyle() {
if (this.isShowedTabsChildren) {
return 50
}
return 110
},
getterWindow() {
return this.$store.getters.getWindow(this.windowUuid)
},
isShowedTabsChildren() {
if (this.windowMetadata && this.windowMetadata.isShowedTabsChildren) {
return this.windowMetadata.isShowedTabsChildren
}
return false
},
isShowedRecordNavigation() {
if (this.windowMetadata && this.windowMetadata.isShowedRecordNavigation) {
return this.windowMetadata.isShowedRecordNavigation
}
return false
},
getHeightPanelBottom() {
return this.$store.getters.getSplitHeight - 11
},
getterRecordList() {
return this.$store.getters.getDataRecordsList(this.windowMetadata.currentTabUuid).length
},
gettersListRecordLogs() {
const changeLog = this.$store.getters.getRecordLogs.entityLogs
if (this.isEmptyValue(changeLog)) {
return changeLog
}
// TODO: Verify it, parse date value
changeLog.sort((a, b) => {
const c = new Date(a.logDate)
const d = new Date(b.logDate)
return d - c
})
return changeLog
},
getIsChangeLog() {
if (this.isEmptyValue(this.gettersListRecordLogs)) {
return false
}
return true
},
getIsWorkflowLog() {
if (this.isEmptyValue(this.$store.getters.getNodeWorkflow)) {
return false
}
return true
},
getterShowContainerInfo() {
return this.$store.getters.getShowContainerInfo
},
getterDataRecordsAndSelection() {
return this.$store.getters.getDataRecordAndSelection(this.windowMetadata.firstTabUuid)
},
getterDataRecords() {
return this.getterDataRecordsAndSelection.record
},
getTableName() {
if (this.windowMetadata && this.windowMetadata.firstTab.tableName) {
return this.windowMetadata.firstTab.tableName
}
return undefined
},
// current record
getRecord() {
const { action } = this.$route.query
if (!this.isEmptyValue(action) && action !== 'create-new') {
return this.getterDataRecords.find(record => {
return record.UUID === action
})
}
return undefined
},
recordId() {
const currentRecord = this.getRecord
if (this.isEmptyValue(currentRecord)) {
return undefined
}
return currentRecord[`${this.getTableName}_ID`]
},
currentRecord() {
const currentRecord = this.$store.getters.getCurrentRecord
if (this.isEmptyValue(currentRecord)) {
return this.getterDataRecords[0]
}
return currentRecord
},
isDocument() {
const panel = this.$store.getters.getPanel(this.windowMetadata.currentTabUuid)
return panel.isDocument
},
isWorkflowBarStatus() {
const panel = this.$store.getters.getPanel(this.windowMetadata.currentTabUuid)
if (!this.isEmptyValue(panel) && this.isDocument && this.$route.query.action !== 'create-new') {
return true
}
return false
}
},
watch: {
$route(value) {
if (this.showContainerInfo) {
this.$store.dispatch(this.activeInfo, {
tableName: this.$route.params.tableName,
recordId: this.$route.params.recordId
})
.then(response => {
if (value.query.action === 'create-new') {
this.$store.commit('isNote', false)
}
})
}
}
},
created() {
this.getWindow()
if (this.isShowedRecordNavigation) {
this.handleResize()
}
this.$store.dispatch('settings/changeSetting', {
key: 'showContextMenu',
value: true
})
},
methods: {
handleResize() {
const panelRight = document.getElementById('PanelRight')
if (!this.isEmptyValue(panelRight)) {
const widthPanel = panelRight.clientWidth - 350
this.$store.commit('setPanelRight', widthPanel)
}
},
contentInfo() {
this.showContainerInfo = !this.showContainerInfo
if (this.showContainerInfo) {
let tableName = this.$route.params.tableName
if (this.isEmptyValue(tableName)) {
tableName = this.getTableName
}
const record = this.currentRecord
let recordId
if (!this.isEmptyValue(record)) {
recordId = record[tableName + '_ID']
}
this.$router.push({
params: {
recordId,
tableName
},
query: {
...this.$route.query
}
}, () => {})
const action = this.$route.query.action
let recordUuid
if (!this.isEmptyValue(action) && action !== 'create-new') {
recordUuid = action
}
// TODO: Verify if first tab is document
this.$store.dispatch('listWorkflowLogs', {
tableName,
recordUuid,
recordId
})
this.$store.dispatch(this.activeInfo, {
tableName,
recordId,
recordUuid
})
}
this.$store.dispatch('showContainerInfo', !this.getterShowContainerInfo)
},
handleClick(tab, event) {
let tableName = this.$route.params.tableName
if (this.isEmptyValue(tableName)) {
tableName = this.getTableName
}
const action = this.$route.query.action
let recordUuid
if (!this.isEmptyValue(action) && action !== 'create-new') {
recordUuid = action
}
const record = this.currentRecord
let recordId
if (!this.isEmptyValue(record)) {
recordId = record[tableName + '_ID']
}
this.$store.dispatch(tab.name, {
tableName,
recordId,
recordUuid
})
},
// callback new size
onDrag(size) {
this.$store.dispatch('setSplitHeightTop', {
splitHeightTop: size[0]
})
this.$store.dispatch('setSplitHeight', {
splitHeight: size[1]
})
},
// get window from vuex store or server
getWindow() {
const window = this.getterWindow
if (window) {
this.generateWindow(window)
return
}
this.$store.dispatch('getWindowFromServer', {
windowUuid: this.windowUuid,
routeToDelete: this.$route
})
.then(response => {
this.generateWindow(response)
})
},
generateWindow(window) {
this.windowMetadata = window
let isShowRecords = this.isShowedRecordNavigation
if (isShowRecords === undefined) {
if ((['M', 'Q'].includes(this.windowMetadata.windowType) && this.getterRecordList >= 10 && this.$route.query.action !== 'create-new') ||
this.$route.query.action === 'advancedQuery') {
isShowRecords = true
} else if (this.windowMetadata.windowType === 'T' || this.$route.query.action === 'create-new') {
isShowRecords = false
} else if (this.$route.query.action === 'listRecords') {
isShowRecords = true
this.handleChangeShowedPanel(true)
}
this.handleChangeShowedRecordNavigation(isShowRecords)
}
this.isLoaded = true
const record = this.currentRecord
this.$store.dispatch('listDocumentStatus', {
tableName: this.getTableName,
recordUuid: this.$route.query.action,
recordId: record[this.getTableName + '_ID']
})
},
handleChangeShowedRecordNavigation(valueToChange) {
const panelRight = document.getElementById('PanelRight')
const heightPanel = panelRight.clientHeight + 50
this.$store.dispatch('setHeight', heightPanel)
this.$store.dispatch('changeWindowAttribute', {
parentUuid: this.windowUuid, // act as parentUuid
window: this.windowMetadata,
attributeName: 'isShowedRecordNavigation',
attributeValue: valueToChange
})
},
handleChangeShowedPanel(value) {
this.isShowedRecordPanel = !this.isShowedRecordPanel
},
handleChangeShowedTabChildren(isShowedChilds) {
this.$store.dispatch('changeWindowAttribute', {
parentUuid: this.windowUuid, // act as parentUuid
window: this.windowMetadata,
attributeName: 'isShowedTabsChildren',
attributeValue: isShowedChilds
})
}
}
}
<script src="./windowLogicComponent.js" >
// if you use separate component files like this, the script.js should not
// be named 'index.js' as you would have to specify the '/index.vue' suffix
// on your import for every import where this component is used, otherwise
// you might have problems with the template compiler similar to:
// [Vue warn]: Failed to mount component: template or render function not defined.
</script>
<style scoped>
.scroll {
max-height: 60vh;
}
/* Enter and leave animations can use different */
/* durations and timing functions. */
.slide-fade-enter-active {
transition: all .2s ease;
}
.slide-fade-leave-active {
transition: all .3s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
.slide-fade-enter, .slide-fade-leave-to
/* .slide-fade-leave-active below version 2.1.8 */ {
transform: translateX(10px);
opacity: 0;
}
.el-tabs__content {
overflow: hidden;
position: relative;
padding-top: 0px !important;
padding-right: 15px !important;
padding-bottom: 0px !important;
padding-left: 15px !important;
}
.el-header {
background-color: #fff;
color: #333;
line-height: 21px;
}
.el-aside {
height: 100%;
color: #333;
overflow-y: hidden;
overflow-x: hidden;
}
aside {
background: #fff;
padding: 0px;
margin-bottom: 0px;
border-radius: 2px;
display: block;
line-height: 32px;
font-size: 16px;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
color: #2c3e50;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.el-main {
display: block;
-webkit-box-flex: 1;
flex: 1;
flex-basis: auto;
overflow: hidden;
height: 90vh;
box-sizing: border-box;
padding-top: 0px !important;
padding-right: 0px !important;
padding-bottom: 0px !important;
padding-left: 0px !important;
}
.center{
text-align: center;
}
.close{
text-align: right;
}
.w-33 {
width: 100%;
background-color: transparent;
}
.w {
height: 100%;
}
.open-table-detail-mobile {
position: absolute;
right: 50%;
bottom: 4%;
}
.open-table-detail {
position: absolute;
right: 50%;
bottom: 4%;
display: none;
}
.open-navegation {
position: fixed;
top: 50%;
display: none;
z-index: 5;
}
.open-datatable-aside {
position: absolute;
top: 41%;
display: none;
z-index: 5;
right: 1%!important;
}
.open-datatable-aside-mobile {
position: absolute;
top: 41%;
display: grid;
z-index: 5;
right: 1%!important;
}
.button {
display: none;
}
.wrapper:hover .open-table-detail {
display: inline-block;
}
.w:hover .open-navegation {
display: inline-block;
}
.w:hover .open-datatable-aside {
display: grid;
}
.open-detail {
width: 100%;
height: 20px;
position: absolute;
bottom: 5%;
}
.open-left {
width: 2%;
height: 97%;
position: absolute;
top: 2%;
left: 1%;
}
.el-button-window {
cursor: pointer;
background: #FFFFFF;
border: 1px solid #DCDFE6;
border-color: #DCDFE6;
color: white;
background: #008fd3;
}
.close-info {
top: 40%;
position: absolute;
}
.close-info-mobile {
top: 29%;
position: absolute;
}
.vertical-panes {
width: 100%;
height: 85vh;
border: 1px solid #ccc;
}
.vertical-panes > .pane {
text-align: left;
padding: 15px;
overflow: hidden;
background: #fff;
}
.vertical-panes > .pane ~ .pane {
border-left: 1px solid #ccc;
}
.loading-window {
padding: 100px 100px;
height: 100%;
}
<style lang="scss" src="./windowStyleGlobal.scss">
</style>
<style>
.el-step.is-simple .el-step__icon-inner {
font-size: 18px;
padding-top: 30px;
}
.el-steps--simple {
/* padding: 13px 8%; */
padding-top: 0px;
padding-bottom: 0px;
padding-left: 0%;
padding-right: 0px;
border-radius: 4px;
background: #F5F7FA;
overflow-x: auto;
overflow-y: hidden;
width: auto;
}
.scroll-window-log-change {
max-height: 74vh !important;
}
.scroll-window-log-workflow {
max-height: 68vh !important;
}
.scroll-window-log-chat {
max-height: 28vh !important;
}
.el-card__header {
background: rgba(245, 247, 250, 0.75);
padding: 18px 20px;
border-bottom: 1px solid #f5f7fa;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.split {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
overflow-y: hidden;
overflow-x: hidden;
height: 102%;
width: 100%;
}
.components-container {
position: relative;
height: 100vh;
}
.left-container {
background-color: #ffffff;
height: 100%;
}
.right-container {
background-color: #ffffff;
height: 200px;
}
.top-container {
background-color: #ffffff;
width: 100%;
height: 100%;
}
.bottom-container {
width: 100%;
background-color: #95E1D3;
height: 100%;
}
.splitter-pane-resizer.vertical {
width: 11px !important;
/* width: 9px; */
height: 100%;
background: gray !important;
margin-left: -10px;
/* margin-left: -5px; */
border-left: 5px solid hsla(0,0%,100%,0);
border-right: 5px solid hsla(0,0%,100%,0);
cursor: col-resize;
}
.splitter-pane.vertical.splitter-paneR {
position: absolute;
right: 0;
height: 100%;
padding-left: 10px;
}
<style lang="scss" scoped src="./windowStyleScoped.scss">
</style>

View File

@ -0,0 +1,462 @@
import TabParent from '@/components/ADempiere/Tab'
import TabChildren from '@/components/ADempiere/Tab/tabChildren'
// When supporting the processes, smart browser and reports,
// the submenu and sticky must be placed in the layout
import ContextMenu from '@/components/ADempiere/ContextMenu'
import ModalDialog from '@/components/ADempiere/Dialog'
import DataTable from '@/components/ADempiere/DataTable'
import splitPane from 'vue-splitpane'
// Container Info
import ChatEntries from '@/components/ADempiere/ChatEntries'
import RecordLogs from '@/components/ADempiere/ContainerInfo/recordLogs'
import WorkflowLogs from '@/components/ADempiere/ContainerInfo/workflowLogs'
// Workflow
import WorkflowStatusBar from '@/components/ADempiere/WorkflowStatusBar'
/**
* Window Logic Component View
* Build and show window, tab and records view, generates with
* metadata from adempiere dictionary aplication.
* @author Edwin Betancourt <EdwinBetanc0urt@outlook.com>
* TODO: Add manage record change and set with common method
*/
export default {
name: 'WindowView',
components: {
TabParent,
TabChildren,
ContextMenu,
DataTable,
splitPane,
ModalDialog,
ChatEntries,
RecordLogs,
WorkflowLogs,
WorkflowStatusBar
},
beforeRouteUpdate(to, from, next) {
this.$store.dispatch('setWindowOldRoute', {
path: from.path,
fullPath: from.fullPath,
params: {
...from.params
},
query: {
...from.query
}
})
next()
},
props: {
styleSteps: {
type: Object,
default: () => {}
}
},
data() {
return {
windowMetadata: {},
windowUuid: this.$route.meta.uuid,
panelType: 'window',
isLoaded: false,
// TODO: Manage attribute with store
activeInfo: 'listChatEntries',
showContainerInfo: false,
// TODO: Manage attribute with store
isShowedRecordPanel: false
}
},
computed: {
showContextMenu() {
return this.$store.state.settings.showContextMenu
},
defaultPorcentSplitPane() {
if (this.isShowedRecordPanel) {
if (this.isShowedRecordNavigation) {
return 100
}
return 50
}
if (this.isShowedRecordNavigation) {
if (this.isMobile) {
return 100
}
return 50
}
return -1
},
isMobile() {
return this.$store.state.app.device === 'mobile'
},
// convert ternary operator into computed property
classIsMobile() {
if (this.isMobile) {
return 'open-table-detail-mobile'
}
return 'open-table-detail'
},
isSize() {
if (this.isMobile && this.showContainerInfo) {
return 98
}
return 50
},
sizePanel() {
if (this.showContainerInfo) {
if (this.isMobile) {
return 2
}
return 50
}
return 100
},
isCloseInfo() {
if (this.isMobile) {
return 'close-info-mobile'
}
return 'close-info'
},
iconShowedRecordNavigation() {
if (this.isShowedRecordNavigation) {
return 'el-icon-caret-left'
}
return 'el-icon-caret-right'
},
iconIsShowedAside() {
if (this.isShowedRecordPanel) {
return 'el-icon-caret-left'
}
return 'el-icon-caret-right'
},
styleMainTab() {
if (this.isShowedTabsChildren) {
return {
height: 'initial',
overflow: 'auto'
}
}
return {
height: 'initial',
overflow: 'hidden'
}
},
styleTableNavigation() {
if (this.isShowedRecordNavigation && this.isMobile) {
return 'open-datatable-aside-mobile'
}
return 'open-datatable-aside'
},
splitAreaStyle() {
if (this.isShowedTabsChildren || this.isMobile) {
return {
overflowX: 'hidden',
overflowY: 'auto'
}
}
return {
overflow: 'hidden'
}
},
styleStepsSimple() {
const baseStyle = {
paddingTop: '0px',
paddingBottom: '0px',
paddingLeft: '0px',
paddingRight: '0px',
borderRadius: '4px',
background: '#F5F7FA',
overflowX: 'auto',
overflowY: 'hidden'
}
if (this.isShowedRecordNavigation) {
return {
...baseStyle,
width: this.$store.getters.getPanelRight + 'px'
}
}
return {
...baseStyle,
width: 'auto'
}
},
sizeAreaStyle() {
if (this.isShowedTabsChildren) {
return 50
}
return 110
},
getterWindow() {
return this.$store.getters.getWindow(this.windowUuid)
},
isShowedTabsChildren() {
if (this.windowMetadata && this.windowMetadata.isShowedTabsChildren) {
return this.windowMetadata.isShowedTabsChildren
}
return false
},
isShowedRecordNavigation() {
if (this.windowMetadata && this.windowMetadata.isShowedRecordNavigation) {
return this.windowMetadata.isShowedRecordNavigation
}
return false
},
getHeightPanelBottom() {
return this.$store.getters.getSplitHeight - 11
},
getterRecordList() {
return this.$store.getters.getDataRecordsList(this.windowMetadata.currentTabUuid).length
},
gettersListRecordLogs() {
const changeLog = this.$store.getters.getRecordLogs.entityLogs
if (this.isEmptyValue(changeLog)) {
return changeLog
}
// TODO: Verify it, parse date value
changeLog.sort((a, b) => {
const c = new Date(a.logDate)
const d = new Date(b.logDate)
return d - c
})
return changeLog
},
getIsChangeLog() {
if (this.isEmptyValue(this.gettersListRecordLogs)) {
return false
}
return true
},
getIsWorkflowLog() {
if (this.isEmptyValue(this.$store.getters.getNodeWorkflow)) {
return false
}
return true
},
getterShowContainerInfo() {
return this.$store.getters.getShowContainerInfo
},
getterDataRecordsAndSelection() {
return this.$store.getters.getDataRecordAndSelection(this.windowMetadata.firstTabUuid)
},
getterDataRecords() {
return this.getterDataRecordsAndSelection.record
},
getTableName() {
if (this.windowMetadata && this.windowMetadata.firstTab.tableName) {
return this.windowMetadata.firstTab.tableName
}
return undefined
},
// current record
getRecord() {
const { action } = this.$route.query
if (!this.isEmptyValue(action) && action !== 'create-new') {
return this.getterDataRecords.find(record => {
return record.UUID === action
})
}
return undefined
},
recordId() {
const currentRecord = this.getRecord
if (this.isEmptyValue(currentRecord)) {
return undefined
}
return currentRecord[`${this.getTableName}_ID`]
},
currentRecord() {
const currentRecord = this.$store.getters.getCurrentRecord
if (this.isEmptyValue(currentRecord)) {
return this.getterDataRecords[0]
}
return currentRecord
},
isDocument() {
const panel = this.$store.getters.getPanel(this.windowMetadata.currentTabUuid)
return panel.isDocument
},
isWorkflowBarStatus() {
const panel = this.$store.getters.getPanel(this.windowMetadata.currentTabUuid)
if (!this.isEmptyValue(panel) && this.isDocument && this.$route.query.action !== 'create-new') {
return true
}
return false
}
},
watch: {
$route(value) {
if (this.showContainerInfo) {
this.$store.dispatch(this.activeInfo, {
tableName: this.$route.params.tableName,
recordId: this.$route.params.recordId
})
.then(response => {
if (value.query.action === 'create-new') {
this.$store.commit('isNote', false)
}
})
}
}
},
created() {
this.getWindow()
if (this.isShowedRecordNavigation) {
this.handleResize()
}
this.$store.dispatch('settings/changeSetting', {
key: 'showContextMenu',
value: true
})
},
methods: {
handleResize() {
const panelRight = document.getElementById('PanelRight')
if (!this.isEmptyValue(panelRight)) {
const widthPanel = panelRight.clientWidth - 350
this.$store.commit('setPanelRight', widthPanel)
}
},
contentInfo() {
this.showContainerInfo = !this.showContainerInfo
if (this.showContainerInfo) {
let tableName = this.$route.params.tableName
if (this.isEmptyValue(tableName)) {
tableName = this.getTableName
}
const record = this.currentRecord
let recordId
if (!this.isEmptyValue(record)) {
recordId = record[tableName + '_ID']
}
this.$router.push({
params: {
recordId,
tableName
},
query: {
...this.$route.query
}
}, () => {})
const action = this.$route.query.action
let recordUuid
if (!this.isEmptyValue(action) && action !== 'create-new') {
recordUuid = action
}
// TODO: Verify if first tab is document
this.$store.dispatch('listWorkflowLogs', {
tableName,
recordUuid,
recordId
})
this.$store.dispatch(this.activeInfo, {
tableName,
recordId,
recordUuid
})
}
this.$store.dispatch('showContainerInfo', !this.getterShowContainerInfo)
},
handleClick(tab, event) {
let tableName = this.$route.params.tableName
if (this.isEmptyValue(tableName)) {
tableName = this.getTableName
}
const action = this.$route.query.action
let recordUuid
if (!this.isEmptyValue(action) && action !== 'create-new') {
recordUuid = action
}
const record = this.currentRecord
let recordId
if (!this.isEmptyValue(record)) {
recordId = record[tableName + '_ID']
}
this.$store.dispatch(tab.name, {
tableName,
recordId,
recordUuid
})
},
// callback new size
onDrag(size) {
this.$store.dispatch('setSplitHeightTop', {
splitHeightTop: size[0]
})
this.$store.dispatch('setSplitHeight', {
splitHeight: size[1]
})
},
// get window from vuex store or server
getWindow() {
const window = this.getterWindow
if (window) {
this.generateWindow(window)
return
}
this.$store.dispatch('getWindowFromServer', {
windowUuid: this.windowUuid,
routeToDelete: this.$route
})
.then(response => {
this.generateWindow(response)
})
},
generateWindow(window) {
this.windowMetadata = window
let isShowRecords = this.isShowedRecordNavigation
if (isShowRecords === undefined) {
if ((['M', 'Q'].includes(this.windowMetadata.windowType) && this.getterRecordList >= 10 && this.$route.query.action !== 'create-new') ||
this.$route.query.action === 'advancedQuery') {
isShowRecords = true
} else if (this.windowMetadata.windowType === 'T' || this.$route.query.action === 'create-new') {
isShowRecords = false
} else if (this.$route.query.action === 'listRecords') {
isShowRecords = true
this.handleChangeShowedPanel(true)
}
this.handleChangeShowedRecordNavigation(isShowRecords)
}
this.isLoaded = true
const record = this.currentRecord
const tableName = this.getTableName
let recordId
if (!this.isEmptyValue(record)) {
recordId = record[tableName + '_ID']
}
this.$store.dispatch('listDocumentStatus', {
tableName,
recordUuid: this.$route.query.action,
recordId
})
},
handleChangeShowedRecordNavigation(valueToChange) {
const panelRight = document.getElementById('PanelRight')
const heightPanel = panelRight.clientHeight + 50
this.$store.dispatch('setHeight', heightPanel)
this.$store.dispatch('changeWindowAttribute', {
parentUuid: this.windowUuid, // act as parentUuid
window: this.windowMetadata,
attributeName: 'isShowedRecordNavigation',
attributeValue: valueToChange
})
},
handleChangeShowedPanel(value) {
this.isShowedRecordPanel = !this.isShowedRecordPanel
},
handleChangeShowedTabChildren(isShowedChilds) {
this.$store.dispatch('changeWindowAttribute', {
parentUuid: this.windowUuid, // act as parentUuid
window: this.windowMetadata,
attributeName: 'isShowedTabsChildren',
attributeValue: isShowedChilds
})
}
}
}

View File

@ -0,0 +1,81 @@
.el-step.is-simple .el-step__icon-inner {
font-size: 18px;
padding-top: 30px;
}
.el-steps--simple {
/* padding: 13px 8%; */
padding-top: 0px;
padding-bottom: 0px;
padding-left: 0%;
padding-right: 0px;
border-radius: 4px;
background: #F5F7FA;
overflow-x: auto;
overflow-y: hidden;
width: auto;
}
.scroll-window-log-change {
max-height: 74vh !important;
}
.scroll-window-log-workflow {
max-height: 68vh !important;
}
.scroll-window-log-chat {
max-height: 28vh !important;
}
.el-card__header {
background: rgba(245, 247, 250, 0.75);
padding: 18px 20px;
border-bottom: 1px solid #f5f7fa;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.split {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
overflow-y: hidden;
overflow-x: hidden;
height: 102%;
width: 100%;
}
.components-container {
position: relative;
height: 100vh;
}
.left-container {
background-color: #ffffff;
height: 100%;
}
.right-container {
background-color: #ffffff;
height: 200px;
}
.top-container {
background-color: #ffffff;
width: 100%;
height: 100%;
}
.bottom-container {
width: 100%;
background-color: #95E1D3;
height: 100%;
}
.splitter-pane-resizer.vertical {
width: 11px !important;
/* width: 9px; */
height: 100%;
background: gray !important;
margin-left: -10px;
/* margin-left: -5px; */
border-left: 5px solid hsla(0,0%,100%,0);
border-right: 5px solid hsla(0,0%,100%,0);
cursor: col-resize;
}
.splitter-pane.vertical.splitter-paneR {
position: absolute;
right: 0;
height: 100%;
padding-left: 10px;
}

View File

@ -0,0 +1,164 @@
.scroll {
max-height: 60vh;
}
/* Enter and leave animations can use different */
/* durations and timing functions. */
.slide-fade-enter-active {
transition: all .2s ease;
}
.slide-fade-leave-active {
transition: all .3s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
.slide-fade-enter, .slide-fade-leave-to
/* .slide-fade-leave-active below version 2.1.8 */ {
transform: translateX(10px);
opacity: 0;
}
.el-tabs__content {
overflow: hidden;
position: relative;
padding-top: 0px !important;
padding-right: 15px !important;
padding-bottom: 0px !important;
padding-left: 15px !important;
}
.el-header {
background-color: #fff;
color: #333;
line-height: 21px;
}
.el-aside {
height: 100%;
color: #333;
overflow-y: hidden;
overflow-x: hidden;
}
aside {
background: #fff;
padding: 0px;
margin-bottom: 0px;
border-radius: 2px;
display: block;
line-height: 32px;
font-size: 16px;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
color: #2c3e50;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.el-main {
display: block;
-webkit-box-flex: 1;
flex: 1;
flex-basis: auto;
overflow: hidden;
height: 90vh;
box-sizing: border-box;
padding-top: 0px !important;
padding-right: 0px !important;
padding-bottom: 0px !important;
padding-left: 0px !important;
}
.center{
text-align: center;
}
.close{
text-align: right;
}
.w-33 {
width: 100%;
background-color: transparent;
}
.w {
height: 100%;
}
.open-table-detail-mobile {
position: absolute;
right: 50%;
bottom: 4%;
}
.open-table-detail {
position: absolute;
right: 50%;
bottom: 4%;
display: none;
}
.open-navegation {
position: fixed;
top: 50%;
display: none;
z-index: 5;
}
.open-datatable-aside {
position: absolute;
top: 41%;
display: none;
z-index: 5;
right: 1%!important;
}
.open-datatable-aside-mobile {
position: absolute;
top: 41%;
display: grid;
z-index: 5;
right: 1%!important;
}
.button {
display: none;
}
.wrapper:hover .open-table-detail {
display: inline-block;
}
.w:hover .open-navegation {
display: inline-block;
}
.w:hover .open-datatable-aside {
display: grid;
}
.open-detail {
width: 100%;
height: 20px;
position: absolute;
bottom: 5%;
}
.open-left {
width: 2%;
height: 97%;
position: absolute;
top: 2%;
left: 1%;
}
.el-button-window {
cursor: pointer;
background: #FFFFFF;
border: 1px solid #DCDFE6;
border-color: #DCDFE6;
color: white;
background: #008fd3;
}
.close-info {
top: 40%;
position: absolute;
}
.close-info-mobile {
top: 29%;
position: absolute;
}
.vertical-panes {
width: 100%;
height: 85vh;
border: 1px solid #ccc;
}
.vertical-panes > .pane {
text-align: left;
padding: 15px;
overflow: hidden;
background: #fff;
}
.vertical-panes > .pane ~ .pane {
border-left: 1px solid #ccc;
}
.loading-window {
padding: 100px 100px;
height: 100%;
}