CardIndex.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <template>
  2. <el-container direction="vertical">
  3. <el-tabs type="border-card" style="height: 100%;" v-model="selectedTab">
  4. <el-tab-pane label="Поиск"></el-tab-pane>
  5. <el-tab-pane label="Автор"></el-tab-pane>
  6. <el-tab-pane label="Книга"></el-tab-pane>
  7. <el-tab-pane label="История"></el-tab-pane>
  8. <keep-alive>
  9. <router-view></router-view>
  10. </keep-alive>
  11. </el-tabs>
  12. </el-container>
  13. </template>
  14. <script>
  15. //-----------------------------------------------------------------------------
  16. import Vue from 'vue';
  17. import Component from 'vue-class-component';
  18. import _ from 'lodash';
  19. const tab2Route = [
  20. '/cardindex/search',
  21. '/cardindex/card',
  22. '/cardindex/book',
  23. '/cardindex/history',
  24. ];
  25. let lastActiveTab = null;
  26. export default @Component({
  27. watch: {
  28. selectedTab: function(newValue, oldValue) {
  29. lastActiveTab = newValue;
  30. const t = Number(newValue);
  31. if (tab2Route[t] !== this.curRoute) {
  32. this.$router.replace(tab2Route[t]);
  33. }
  34. },
  35. curRoute: function(newValue, oldValue) {
  36. this.setTabByRoute(newValue);
  37. },
  38. },
  39. })
  40. class CardIndex extends Vue {
  41. selectedTab = null;
  42. mounted() {
  43. this.setTabByRoute(this.curRoute);
  44. if (lastActiveTab !== null)
  45. this.selectedTab = lastActiveTab;
  46. }
  47. setTabByRoute(route) {
  48. const t = _.indexOf(tab2Route, route);
  49. if (t >= 0 && t !== this.selectedTab) {
  50. this.selectedTab = t.toString();
  51. }
  52. }
  53. get curRoute() {
  54. const m = this.$route.path.match(/^(\/[^\/]*\/[^\/]*).*$/i);
  55. return (m ? m[1] : this.$route.path);
  56. }
  57. }
  58. //-----------------------------------------------------------------------------
  59. </script>
  60. <style scoped>
  61. </style>