1
0
mirror of https://github.com/PanJiaChen/vue-element-admin.git synced 2025-08-10 12:01:57 +08:00
2021-06-28 19:57:30 -04:00

159 lines
3.9 KiB
Vue

<!--
ADempiere-Vue (Frontend) for ADempiere ERP & CRM Smart Business Solution
Copyright (C) 2017-Present E.R.P. Consultores y Asociados, C.A.
Contributor(s): Edwin Betancourt EdwinBetanc0urt@outlook.com www.erpya.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https:www.gnu.org/licenses/>.
-->
<template>
<el-tabs
v-model="currentTab"
type="border-card"
@tab-click="handleClick"
>
<template v-for="(tabAttributes, key) in tabsList">
<el-tab-pane
:key="key"
:label="tabAttributes.name"
:windowuuid="windowUuid"
:tabuuid="tabAttributes.uuid"
:name="String(key)"
lazy
:disabled="isDisabledTab(key)"
:style="tabStyle"
>
<lock-record
slot="label"
:tab-position="key"
:tab-uuid="tabAttributes.uuid"
:table-name="tabAttributes.tableName"
:tab-name="tabAttributes.name"
/>
<panel-definition
:parent-uuid="windowUuid"
:container-uuid="tabAttributes.uuid"
:panel-metadata="tabAttributes"
:group-tab="tabAttributes.tabGroup"
/>
</el-tab-pane>
</template>
</el-tabs>
</template>
<script>
import { defineComponent, computed, ref, watch } from '@vue/composition-api'
import PanelDefinition from '@/components/ADempiere/PanelDefinition'
import LockRecord from '@/components/ADempiere/ContainerOptions/LockRecord'
export default defineComponent({
name: 'TabManager',
components: {
PanelDefinition,
LockRecord
},
props: {
windowUuid: {
type: String,
default: ''
},
windowMetadata: {
type: Object,
default: () => {}
},
tabsList: {
type: Array,
default: () => []
}
},
setup(props, { root }) {
const currentTab = ref(root.$route.query.tab)
const tabUuid = ref(props.tabsList[0].uuid)
const tabStyle = computed(() => {
return {
height: '75vh',
overflow: 'auto'
}
})
const isCreateNew = computed(() => {
return Boolean(root.$route.query.action === 'create-new')
})
const isDisabledTab = (key) => {
return key > 0 && isCreateNew.value
}
const setCurrentTab = () => {
root.$store.dispatch('setCurrentTab', {
parentUuid: props.windowUuid,
containerUuid: tabUuid.value,
window: props.windowMetadata
})
}
/**
* @param {object} tabHTML DOM HTML the tab clicked
*/
const handleClick = (tabHTML) => {
tabUuid.value = tabHTML.$attrs.tabuuid
setCurrentTab()
setTabNumber(tabHTML.index)
}
// watch router query tab parent value
watch(() => root.$route.query.tab, (newValue) => {
if (root.isEmptyValue(newValue)) {
setTabNumber('0')
return
}
setTabNumber(newValue)
})
const setTabNumber = (tabNumber) => {
currentTab.value = tabNumber
root.$router.push({
query: {
...root.$route.query,
tab: currentTab.value
},
params: {
...root.$route.params
}
}, () => {})
// TODO: Delete this to production
console.log('Click tab number ', tabNumber)
}
return {
currentTab,
tabUuid,
// computed
tabStyle,
// meyhods
handleClick,
isDisabledTab
}
}
})
</script>