labs.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <template>
  2. <div class="labs">
  3. <div class="el-dropdown-link" title="实验室" @click="dialogVisible = true">
  4. <img :src="imgIcon" alt="" class="header_right_icon left">
  5. <span class="header_right_title_span">实验室</span>
  6. </div>
  7. <el-dialog v-model="dialogVisible" title="" width="820px" :show-close="false">
  8. <template #header="{ close }">
  9. <div class="my-header">
  10. <span class="labs_title">CocoBlockly Pi 实验室</span>
  11. <i class="material-icons right" style="margin-top: 5px;cursor: pointer;margin-right:-15px"
  12. @click="close">close</i>
  13. </div>
  14. </template>
  15. <el-row class="labs_body">
  16. <el-col class="labs_class_content" :span="6">
  17. <p class="all_class">所有分类:</p>
  18. <ul class="labs_class_left">
  19. <li :class="calssActive == 1 ? 'active' : ''" @click="getClassData(1, '人工智能')">人工智能</li>
  20. <li :class="calssActive == 2 ? 'active' : ''" @click="getClassData(2, '物联网')">物联网</li>
  21. <li :class="calssActive == 3 ? 'active' : ''" @click="getClassData(3, '机器人控制')">机器人控制</li>
  22. <li :class="calssActive == 4 ? 'active' : ''" @click="getClassData(4, '科学实验')">科学实验</li>
  23. <li :class="calssActive == 5 ? 'active' : ''" @click="getClassData(5, '互动游戏')">互动游戏</li>
  24. <li :class="calssActive == 6 ? 'active' : ''" @click="getClassData(6, 'AR/VR')">AR/VR</li>
  25. </ul>
  26. </el-col>
  27. <el-col :span="18" style="padding:0 0.75rem;">
  28. <h5>{{ titleNmae }}</h5>
  29. <ul class="labs_class_right">
  30. <li v-if="calssActive == 1">
  31. <AI></AI>
  32. </li>
  33. <li v-else-if="calssActive == 2">
  34. <Iot></Iot>
  35. </li>
  36. <li v-else-if="calssActive == 3">
  37. <RobotContro></RobotContro>
  38. </li>
  39. <li v-else-if="calssActive == 4">
  40. <Science></Science>
  41. </li>
  42. <li v-else-if="calssActive == 5">
  43. <interactiveGames></interactiveGames>
  44. </li>
  45. <li v-else>
  46. <ARVR></ARVR>
  47. </li>
  48. </ul>
  49. </el-col>
  50. </el-row>
  51. </el-dialog>
  52. </div>
  53. </template>
  54. <script setup>
  55. import { ref } from 'vue';
  56. import imgIcon from '../../assets/img/cocoblockly-navbar_labs-icon.png'
  57. import AI from '../labs/ai.vue'
  58. import Iot from '../labs/iot.vue'
  59. import RobotContro from '../labs/robotContro.vue';
  60. import Science from '../labs/science.vue'
  61. import interactiveGames from '../labs/interactiveGames.vue'
  62. import ARVR from '../labs/ARVR.vue'
  63. const dialogVisible = ref(false)
  64. const calssActive = ref(1)
  65. const titleNmae = ref("人工智能")
  66. const getClassData = (val, name) => {
  67. calssActive.value = val
  68. titleNmae.value = name
  69. }
  70. </script>
  71. <style lang="scss">
  72. .labs {
  73. color: #000;
  74. cursor: default;
  75. .el-dropdown-link {
  76. cursor: pointer;
  77. }
  78. .my-header {
  79. padding: 20px;
  80. }
  81. .labs_title {
  82. color: #000;
  83. font-size: 2.28rem;
  84. }
  85. .labs_body {
  86. border-top: 1px solid #ddd;
  87. margin: 0px 20px;
  88. padding-bottom: 20px;
  89. h5 {
  90. font-size: 1.64rem;
  91. line-height: 110%;
  92. margin: 1.0933333333rem 0 0.656rem 0;
  93. }
  94. .labs_class_content {
  95. .all_class {
  96. font-weight: bold;
  97. margin: 1rem 0;
  98. }
  99. ul.labs_class_left {
  100. border: 1px solid #dddddd;
  101. border-bottom: none;
  102. border-radius: 2px;
  103. li {
  104. background-color: #fff;
  105. line-height: 1.5rem;
  106. padding: 10px 20px;
  107. margin: 0;
  108. border-bottom: 1px solid #e0e0e0;
  109. font-weight: bold;
  110. cursor: pointer;
  111. }
  112. .active {
  113. background-color: #2196F3;
  114. color: white;
  115. border-radius: 2px;
  116. }
  117. }
  118. ul.labs_class_right {}
  119. }
  120. }
  121. }
  122. </style>