123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- <template>
- <zj-page-container>
- <el-tabs v-model="activeKey" type="card" @tab-click="tabClick" closable @tab-remove="removeTab">
- <el-tab-pane v-for="(item, index) in activeList" :key="item.key" :label="item.label || item.key"
- :name="item.key"></el-tab-pane>
- </el-tabs>
- <zj-page-fill>
- <slot :activeKey="showActiveKey" />
- </zj-page-fill>
- </zj-page-container>
- </template>
- <script>
- export default {
- name: "TabPage",
- props: {
- defaultActives: {
- type: Array,
- default: () => []
- }
- },
- data() {
- return {
- activeKey: this?.defaultActives?.length ? this?.defaultActives?.[0]?.key : "",
- oldActiveKey: this?.defaultActives?.length ? this?.defaultActives?.[0]?.key : "",
- activeList: [...this.defaultActives]
- };
- },
- computed: {
- showActiveKey() {
- var data = this.activeList.find(item => item.key == this.oldActiveKey)
- return data?.activeKey || data?.key || ""
- }
- },
- methods: {
- // 点击
- tabClick(tab) {
- if (this.oldActiveKey != (tab.name || tab)) {
- this.activeList.find(item => item.key == this.oldActiveKey)?.closeEvent?.()
- this.$nextTick(() => {
- this.activeList.find(item => item.key == (tab.name || tab))?.triggerEvent?.()
- this.$nextTick(() => {
- this.activeKey = (tab.name || tab)
- this.oldActiveKey = this.activeKey
- })
- })
- }
- },
- // 添加
- addTab(tabObj) {
- if (tabObj.key === undefined) {
- console.error("缺少")
- return
- }
- for (var i = 0; i < this.activeList.length; i++) {
- if (this.activeList[i].key === tabObj.key) {
- this.activeList.splice(i, 1, tabObj);
- this.$nextTick(() => {
- this.tabClick(tabObj.key)
- })
- return
- }
- }
- this.activeList.push(tabObj)
- this.$nextTick(() => {
- this.tabClick(tabObj.key)
- })
- },
- // 删除
- removeTab(tab) {
- var i;
- for (i = 0; i < this.activeList.length; i++) {
- if (this.activeList[i].key === tab) {
- if (this.activeList[i].essential) {
- this.$message.warning(`${this.activeList[i].label || this.activeList[i].key}是必须页面不能删除!`)
- return
- }
- this.activeList[i]?.closeEvent?.()
- this.activeList.splice(i, 1);
- break
- }
- }
- if (this.activeList[i]) {
- this.tabClick(this.activeList[i].key)
- return
- }
- if (this.activeList[i - 1]) {
- this.tabClick(this.activeList[i - 1].key)
- return
- }
- this.tabClick("")
- },
- },
- };
- </script>
- <style lang="scss" scoped>
- ::v-deep .el-tabs__header{
- margin: 0 0 0 0 !important;
- }
- </style>
|