Browse Source

Доработки маршуртизатора в табах картотеки

Book Pauk 6 years ago
parent
commit
de679adadd
2 changed files with 52 additions and 35 deletions
  1. 39 27
      client/components/CardIndex/CardIndex.vue
  2. 13 8
      client/router.js

+ 39 - 27
client/components/CardIndex/CardIndex.vue

@@ -1,20 +1,13 @@
 <template>
 <template>
     <el-container direction="vertical">
     <el-container direction="vertical">
         <el-tabs type="border-card" style="height: 100%;" v-model="selectedTab">
         <el-tabs type="border-card" style="height: 100%;" v-model="selectedTab">
-            <el-tab-pane label="Поиск">
-                <Search></Search>
-            </el-tab-pane>
-            <el-tab-pane label="Автор">
-                <Card></Card>
-            </el-tab-pane>
-            <el-tab-pane label="Книга">
-                <Book></Book>
-            </el-tab-pane>
-            <el-tab-pane label="История">
-                <History></History>
-            </el-tab-pane>
-            {{ this.$route.path }}
+            <el-tab-pane label="Поиск"></el-tab-pane>
+            <el-tab-pane label="Автор"></el-tab-pane>
+            <el-tab-pane label="Книга"></el-tab-pane>
+            <el-tab-pane label="История"></el-tab-pane>
+            <router-view></router-view>
         </el-tabs>
         </el-tabs>
+        {{ curRoute }}
     </el-container>
     </el-container>
 </template>
 </template>
 
 
@@ -22,30 +15,49 @@
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 import Vue from 'vue';
 import Vue from 'vue';
 import Component from 'vue-class-component';
 import Component from 'vue-class-component';
-import Search from './Search/Search.vue';
-import Card from './Card/Card.vue';
-import Book from './Book/Book.vue';
-import History from './History/History.vue';
+import _ from 'lodash';
+
+const tab2Route = [
+    '/cardindex/search',
+    '/cardindex/card',
+    '/cardindex/book',
+    '/cardindex/history',
+];
+let lastActiveTab = null;
 
 
 export default @Component({
 export default @Component({
-    components: {
-        Search, Card, Book, History
-    },
     watch: {
     watch: {
         selectedTab: function(newValue, oldValue) {
         selectedTab: function(newValue, oldValue) {
-            switch (newValue) {
-                case '0': this.$router.push('/cardindex/search'); break;
-                case '1': this.$router.push('/cardindex/card'); break;
-                case '2': this.$router.push('/cardindex/book'); break;
-                case '3': this.$router.push('/cardindex/history'); break;
+            lastActiveTab = newValue;
+            const t = Number(newValue);
+            if (tab2Route[t] !== this.curRoute) {
+                this.$router.replace(tab2Route[t]);
             }
             }
-        },        
+        },
+        curRoute: function(newValue, oldValue) {
+            this.setTabByRoute(newValue);
+        },
     },
     },
 })
 })
 class CardIndex extends Vue {
 class CardIndex extends Vue {
     selectedTab = null;
     selectedTab = null;
 
 
-    created() {
+    mounted() {
+        this.setTabByRoute(this.curRoute);
+        if (lastActiveTab !== null)
+            this.selectedTab = lastActiveTab;
+    }
+
+    setTabByRoute(route) {
+        const t = _.indexOf(tab2Route, route);
+        if (t >= 0 && t !== this.selectedTab) {
+            this.selectedTab = t.toString();
+        }
+    }
+
+    get curRoute() {
+        const m = this.$route.path.match(/^(\/[^\/]*\/[^\/]*).*$/i);
+        return (m ? m[1] : this.$route.path);
     }
     }
 
 
 }
 }

+ 13 - 8
client/router.js

@@ -3,8 +3,13 @@ import VueRouter from 'vue-router';
 import _ from 'lodash';
 import _ from 'lodash';
 
 
 import App from './components/App.vue';
 import App from './components/App.vue';
+
 import CardIndex from './components/CardIndex/CardIndex.vue';
 import CardIndex from './components/CardIndex/CardIndex.vue';
 import Search from  './components/CardIndex/Search/Search.vue';
 import Search from  './components/CardIndex/Search/Search.vue';
+import Card from  './components/CardIndex/Card/Card.vue';
+import Book from  './components/CardIndex/Book/Book.vue';
+import History from  './components/CardIndex/History/History.vue';
+
 import Reader from './components/Reader/Reader.vue';
 import Reader from './components/Reader/Reader.vue';
 //import Forum from './components/Forum/Forum.vue';
 //import Forum from './components/Forum/Forum.vue';
 import Income from './components/Income/Income.vue';
 import Income from './components/Income/Income.vue';
@@ -15,14 +20,14 @@ import NotFound404 from './components/NotFound404/NotFound404.vue';
 
 
 const myRoutes = [
 const myRoutes = [
     ['/', null, null, '/cardindex'],
     ['/', null, null, '/cardindex'],
-    ['/cardindex', CardIndex ],
-    ['/cardindex/search', CardIndex ],
-    ['/cardindex/card', CardIndex ],
-    ['/cardindex/card/:authorId', CardIndex ],
-    ['/cardindex/book', CardIndex ],
-    ['/cardindex/book/:bookId', CardIndex ],
-    ['/cardindex/history', CardIndex ],
-    
+    ['/cardindex', CardIndex, null, '/cardindex/search' ],
+    ['/cardindex~search', Search ],
+    ['/cardindex~card', Card ],
+    ['/cardindex~card/:authorId', Card ],
+    ['/cardindex~book', Book ],
+    ['/cardindex~book/:bookId', Book ],
+    ['/cardindex~history', History ],
+
     ['/reader', Reader ],
     ['/reader', Reader ],
     ['/income', Income ],
     ['/income', Income ],
     ['/sources', Sources ],
     ['/sources', Sources ],