WindSite.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <template>
  2. <div class="wind-site">
  3. <div class="page-common-body">
  4. <div class="page-common-body-router">
  5. <router-view />
  6. </div>
  7. <div class="page-common-body-menu">
  8. <div class="page-common-body-menu-box">
  9. <div class="page-common-body-menu-border left top"></div>
  10. <div class="page-common-body-menu-border left bottom"></div>
  11. <div class="page-common-body-menu-border right top"></div>
  12. <div class="page-common-body-menu-border right bottom"></div>
  13. <div class="page-common-body-menu-item" v-for="(menuData, index) of menuDatas" :key="index" @click="clickMenu(index)"
  14. :class="{ active: activeIndex == index }">
  15. <router-link :to="menuData.path">
  16. <span class="svg-icon" :class="activeIndex == index ? 'svg-icon-yellow' : 'svg-icon-green'">
  17. <SvgIcon :svgid="menuData.icon"></SvgIcon>
  18. </span>
  19. </router-link>
  20. </div>
  21. </div>
  22. </div>
  23. </div>
  24. </div>
  25. </template>
  26. <script>
  27. import SvgIcon from "@com/coms/icon/svg-icon.vue";
  28. export default {
  29. // 名称
  30. name: "WindSite",
  31. // 使用组件
  32. components: {
  33. SvgIcon,
  34. },
  35. // 数据
  36. data () {
  37. return {
  38. activeIndex: 0,
  39. menuDatas: [
  40. {
  41. icon: "svg-agc",
  42. path: "/windsite/home",
  43. },
  44. {
  45. icon: "svg-matrix",
  46. path: "/windsite/draughtfanlist",
  47. } /*
  48. {
  49. icon: "svg-agc",
  50. path: "/windsite/matrix",
  51. },
  52. {
  53. icon: "svg-agc",
  54. path: "/windsite/lightmatrix",
  55. },
  56. {
  57. icon: "svg-intranet-involvement",
  58. path: "/windsite/box",
  59. },*/,
  60. {
  61. icon: "svg-matrix",
  62. path: "/windsite/info",
  63. },
  64. {
  65. icon: "svg-easy-compass",
  66. path: "/windsite/tower",
  67. } /*
  68. {
  69. icon: "svg-easy-compass",
  70. path: "/windsite/Inverter-Info",
  71. },
  72. {
  73. icon: "svg-easy-compass",
  74. path: "/windsite/map",
  75. },
  76. {
  77. icon: "svg-easy-compass",
  78. path: "/windsite/map1",
  79. },*/,
  80. ],
  81. };
  82. },
  83. // 函数
  84. methods: {
  85. clickMenu: function (index) {
  86. this.activeIndex = index;
  87. },
  88. },
  89. created () {
  90. this.menuDatas.forEach(ele => {
  91. ele.path += ("/" + this.$route.params.wpId);
  92. });
  93. },
  94. mounted () { },
  95. };
  96. </script>
  97. <style lang="less" scoped>
  98. .wind-site {
  99. .page-common-body {
  100. display: flex;
  101. flex-direction: row;
  102. margin-top: 0.741vh;
  103. .page-common-body-router {
  104. overflow: auto;
  105. overflow-x: hidden;
  106. height: calc(100vh - 7.037vh);
  107. flex: 1 1 auto;
  108. }
  109. .page-common-body-menu {
  110. width: 7.407vh;
  111. padding: 0 1.481vh 1.481vh 1.481vh;
  112. .page-common-body-menu-box {
  113. border: 0.093vh solid @darkgray;
  114. background-color: fade(@darkgray, 30%);
  115. padding: 2.222vh 0.185vh;
  116. position: relative;
  117. .page-common-body-menu-border {
  118. position: absolute;
  119. width: 0.37vh;
  120. height: 0.37vh;
  121. background-color: @write;
  122. border-radius: 50%;
  123. &.left {
  124. left: -0.185vh;
  125. }
  126. &.right {
  127. right: -0.185vh;
  128. }
  129. &.top {
  130. top: -0.185vh;
  131. }
  132. &.bottom {
  133. bottom: -0.185vh;
  134. }
  135. }
  136. .page-common-body-menu-item {
  137. border: 0.093vh solid fade(@green, 40%);
  138. width: 3.889vh;
  139. height: 3.889vh;
  140. border-radius: 0.278vh;
  141. margin-top: 0.741vh;
  142. display: flex;
  143. align-items: center;
  144. justify-content: center;
  145. cursor: pointer;
  146. a {
  147. line-height: 0;
  148. }
  149. &:first-child {
  150. margin-top: 0;
  151. }
  152. &.active {
  153. border-color: fade(@yellow, 40%);
  154. position: relative;
  155. &::after {
  156. content: '';
  157. width: calc(100% - 0.37vh);
  158. height: calc(100% - 0.37vh);
  159. position: absolute;
  160. border: 0.093vh solid @yellow;
  161. box-shadow: 0 0 0.37vh @yellow;
  162. top: 0.093vh;
  163. left: 0.093vh;
  164. }
  165. }
  166. }
  167. }
  168. }
  169. }
  170. }
  171. </style>