From 0b836882c59a9e979dc3da3be6fd3dff772d76df Mon Sep 17 00:00:00 2001
From: chenghx <chenghx@nfex.com>
Date: 星期四, 13 九月 2018 14:26:22 +0800
Subject: [PATCH] feat: add multipage mode

---
 src/layouts/MenuView.vue |   71 ++++++++++++++++++++++++++++++++++-
 1 files changed, 69 insertions(+), 2 deletions(-)

diff --git a/src/layouts/MenuView.vue b/src/layouts/MenuView.vue
index 4dcbf91..8ed8431 100644
--- a/src/layouts/MenuView.vue
+++ b/src/layouts/MenuView.vue
@@ -1,16 +1,83 @@
 <template>
   <global-layout>
+    <a-tabs v-if="multipage" :active-key="activePage" style="margin-bottom: 8px" :hide-add="true" type="editable-card" @change="changePage" @edit="editPage">
+      <a-tab-pane v-on="$listeners" :key="page.fullPath" v-for="page in pageList" :tab="page.name"/>
+    </a-tabs>
     <transition name="page-toggle">
-    <router-view />
+      <keep-alive v-if="multipage">
+        <router-view />
+      </keep-alive>
+      <router-view v-else />
     </transition>
   </global-layout>
 </template>
 
 <script>
 import GlobalLayout from './GlobalLayout'
+import ATabs from 'ant-design-vue/es/tabs'
+const ATabPane = ATabs.TabPane
 export default {
   name: 'MenuView',
-  components: {GlobalLayout}
+  components: {ATabPane, ATabs, GlobalLayout},
+  data () {
+    return {
+      pageList: [],
+      linkList: [],
+      activePage: ''
+    }
+  },
+  computed: {
+    multipage () {
+      return this.$store.state.setting.multipage
+    }
+  },
+  created () {
+    this.pageList.push(this.$route)
+    this.linkList.push(this.$route.fullPath)
+    this.activePage = this.$route.fullPath
+  },
+  watch: {
+    '$route': function (newRoute, oldRoute) {
+      this.activePage = newRoute.fullPath
+      if (!this.multipage) {
+        this.linkList = [newRoute.fullPath]
+        this.pageList = [newRoute]
+      } else if (this.linkList.indexOf(newRoute.fullPath) < 0) {
+        this.linkList.push(newRoute.fullPath)
+        this.pageList.push(newRoute)
+      }
+    },
+    'activePage': function (key) {
+      this.$router.push(key)
+    },
+    'multipage': function (newVal, oldVal) {
+      if (!newVal) {
+        this.linkList = [this.$route.fullPath]
+        this.pageList = [this.$route]
+      }
+    }
+  },
+  methods: {
+    changePage (key) {
+      this.activePage = key
+    },
+    editPage (key, action) {
+      this[action](key)
+    },
+    add () {
+    },
+    remove (key) {
+      if (this.pageList.length === 1) {
+        this.$message.warning('杩欐槸鏈�鍚庝竴椤碉紝涓嶈兘鍐嶅叧闂簡鍟�')
+        return
+      }
+      this.pageList = this.pageList.filter(item => item.fullPath !== key)
+      let index = this.linkList.indexOf(key)
+      this.linkList = this.linkList.filter(item => item !== key)
+      index = index >= this.linkList.length ? this.linkList.length - 1 : index
+      this.activePage = this.linkList[index]
+    }
+  }
 }
 </script>
 

--
Gitblit v1.9.1