CardIndex.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. <router-view></router-view>
  9. </el-tabs>
  10. {{ curRoute }}
  11. </el-container>
  12. </template>
  13. <script>
  14. //-----------------------------------------------------------------------------
  15. import Vue from 'vue';
  16. import Component from 'vue-class-component';
  17. import _ from 'lodash';
  18. const tab2Route = [
  19. '/cardindex/search',
  20. '/cardindex/card',
  21. '/cardindex/book',
  22. '/cardindex/history',
  23. ];
  24. let lastActiveTab = null;
  25. export default @Component({
  26. watch: {
  27. selectedTab: function(newValue, oldValue) {
  28. lastActiveTab = newValue;
  29. const t = Number(newValue);
  30. if (tab2Route[t] !== this.curRoute) {
  31. this.$router.replace(tab2Route[t]);
  32. }
  33. },
  34. curRoute: function(newValue, oldValue) {
  35. this.setTabByRoute(newValue);
  36. },
  37. },
  38. })
  39. class CardIndex extends Vue {
  40. selectedTab = null;
  41. mounted() {
  42. this.setTabByRoute(this.curRoute);
  43. if (lastActiveTab !== null)
  44. this.selectedTab = lastActiveTab;
  45. }
  46. setTabByRoute(route) {
  47. const t = _.indexOf(tab2Route, route);
  48. if (t >= 0 && t !== this.selectedTab) {
  49. this.selectedTab = t.toString();
  50. }
  51. }
  52. get curRoute() {
  53. const m = this.$route.path.match(/^(\/[^\/]*\/[^\/]*).*$/i);
  54. return (m ? m[1] : this.$route.path);
  55. }
  56. }
  57. //-----------------------------------------------------------------------------
  58. </script>
  59. <style scoped>
  60. </style>