SideBar.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <template>
  2. <el-menu :default-active="active" class="side-bar" :collapse="true" :router="true">
  3. <el-menu-item v-for="tab in sidebar" :index="tab.name" :key="tab.name">
  4. <el-tooltip placement="right" :content="tab.description" v-show="!tab.hide">
  5. <i class="icon" :target="tab.name"></i>
  6. </el-tooltip>
  7. </el-menu-item>
  8. </el-menu>
  9. </template>
  10. <script>
  11. const sidebar = [
  12. { name: 'schedule', description: '项目规划', hide: false },
  13. { name: 'taskList', description: '任务列表', hide: false },
  14. { name: 'bugList', description: '缺陷列表', hide: false },
  15. { name: 'pipeline', description: '流水线与产物', hide: false },
  16. { name: 'database', description: '数据库', hide: false },
  17. { name: 'apitest', description: '测试', hide: false },
  18. { name: 'statistics', description: '详细数据', hide: true },
  19. { name: 'invite', description: '项目关联', hide: false },
  20. ];
  21. export default {
  22. name: 'SideBar',
  23. data() {
  24. return {
  25. sidebar,
  26. };
  27. },
  28. computed: {
  29. active() {
  30. const li = this.$route.path.split('/');
  31. return li[li.length - 1];
  32. },
  33. },
  34. };
  35. </script>
  36. <style lang="scss" scoped>
  37. .side-bar {
  38. height: 100%;
  39. }
  40. .icon {
  41. width: 28px;
  42. height: 28px;
  43. float: right;
  44. background-position: center;
  45. background-repeat: no-repeat;
  46. background-size: 100% 100%;
  47. margin-top: 14px;
  48. transition: all .2s linear;
  49. .el-menu-item:hover & {
  50. cursor: pointer;
  51. transition-duration:0.2s;
  52. transform:scale(1.1);
  53. transition-timing-function:ease-in-out;
  54. }
  55. }
  56. .icon[target=schedule]{
  57. background-image: url("../assets/icon/navigation.svg");
  58. .el-menu-item:hover & {
  59. background-image: url("../assets/icon/navigation-hover.svg");
  60. }
  61. .el-menu-item.is-active & {
  62. background-image: url("../assets/icon/navigation-using.svg");
  63. }
  64. }
  65. .icon[target=taskList]{
  66. background-image: url("../assets/icon/task.svg");
  67. .el-menu-item:hover & {
  68. background-image: url("../assets/icon/task-hover.svg");
  69. }
  70. .el-menu-item.is-active & {
  71. background-image: url("../assets/icon/task-using.svg");
  72. }
  73. }
  74. .icon[target=bugList]{
  75. background-image: url("../assets/icon/bug.svg");
  76. .el-menu-item:hover & {
  77. background-image: url("../assets/icon/bug-hover.svg");
  78. }
  79. .el-menu-item.is-active & {
  80. background-image: url("../assets/icon/bug-using.svg");
  81. }
  82. }
  83. .icon[target=statistics]{
  84. background-image: url("../assets/icon/training.svg");
  85. .el-menu-item:hover & {
  86. background-image: url("../assets/icon/training-hover.svg");
  87. }
  88. .el-menu-item.is-active & {
  89. background-image: url("../assets/icon/training-using.svg");
  90. }
  91. }
  92. .icon[target=pipeline]{
  93. background-image: url("../assets/icon/training.svg");
  94. .el-menu-item:hover & {
  95. background-image: url("../assets/icon/training-hover.svg");
  96. }
  97. .el-menu-item.is-active & {
  98. background-image: url("../assets/icon/training-using.svg");
  99. }
  100. }
  101. .icon[target=database]{
  102. background-image: url("../assets/icon/database.svg");
  103. .el-menu-item:hover & {
  104. background-image: url("../assets/icon/database-hover.svg");
  105. }
  106. .el-menu-item.is-active & {
  107. background-image: url("../assets/icon/database-using.svg");
  108. }
  109. }
  110. .icon[target=apitest]{
  111. background-image: url("../assets/icon/test.svg");
  112. .el-menu-item:hover & {
  113. background-image: url("../assets/icon/test-hover.svg");
  114. }
  115. .el-menu-item.is-active & {
  116. background-image: url("../assets/icon/test-using.svg");
  117. }
  118. }
  119. .icon[target=invite]{
  120. background-image: url("../assets/icon/link.svg");
  121. .el-menu-item:hover & {
  122. background-image: url("../assets/icon/link-hover.svg");
  123. }
  124. .el-menu-item.is-active & {
  125. background-image: url("../assets/icon/link-using.svg");
  126. }
  127. }
  128. </style>