breadCrumb.vue 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. <template>
  2. <div class="breadCrumbPanel">
  3. <div class="contentClass">
  4. <el-breadcrumb separator="/">
  5. <transition-group name="breadcrumb">
  6. <el-breadcrumb-item v-for="(item, index) in list" :key="item.path + item.name">
  7. <router-link v-if="!disabledRoutes.includes(item.name)" @click="console.log(item)" :to="
  8. item.name !== $route.name
  9. ? item.fullPath
  10. ? item.fullPath
  11. : item.path
  12. ? item.path
  13. : '/'
  14. : $route.fullPath
  15. ">
  16. <i class="el-icon-folder-opened" v-if="index > 0 && index === list.length - 1"></i>
  17. {{ item.meta.tabname }}
  18. </router-link>
  19. <span v-else style="line-height: 20px">{{
  20. item.meta.tabname
  21. }}</span>
  22. </el-breadcrumb-item>
  23. </transition-group>
  24. </el-breadcrumb>
  25. </div>
  26. <div class="nameBox">
  27. <div>{{ $store.state.username }}</div>
  28. <div class="el-icon-switch-button exit" @click="exit"></div>
  29. </div>
  30. </div>
  31. </template>
  32. <script>
  33. import { mapState } from "vuex";
  34. export default {
  35. name: "breadCrumb",
  36. data() {
  37. return {
  38. // 相关页面只为占位,页面是空白,无法展示
  39. disabledRoutes: [
  40. "modelLibrary",
  41. "algorithmsLibrary",
  42. "sceneLibrary",
  43. "systemManagement",
  44. "workManagement",
  45. ],
  46. };
  47. },
  48. methods: {
  49. exit() {
  50. this.$confirm("是否确定退出系统?", "提示", {
  51. confirmButtonText: "确定",
  52. cancelButtonText: "取消",
  53. type: "warning",
  54. })
  55. .then(() => {
  56. localStorage.clear();
  57. // let loginUrl = window.location.origin + "/login";
  58. // window.location.href = loginUrl;
  59. this.$router.push({
  60. path: "/login",
  61. });
  62. })
  63. .catch(() => { });
  64. },
  65. },
  66. computed: {
  67. ...mapState([
  68. "projectInfoTabname", "taskInfoTabname", "vehicleConfigurationDetailTabName",
  69. "exportAlgorithmsTabName", "gitAlgorithmsTabName", "gradingRuleDetailTabName",
  70. "scenePacketListTabName", "parameterDetailTabName", "clusteringDetailTabName",
  71. "scenePacketDetailTabName", "scenePacketDistributionDetailTabName", "editAccountTabName",
  72. "vehicleModelDetailTabName",
  73. ]),
  74. list() {
  75. // console.log(this.$route);
  76. let isMainPage = false;
  77. this.$route.matched.filter((item) => {
  78. // 项目详情和任务详情的tabname需要动态获取
  79. if (item.name === "projectInfo") {
  80. item.meta.tabname =
  81. this.projectInfoTabname ||
  82. localStorage.getItem("projectInfoTabname") ||
  83. "项目详情";
  84. }
  85. if (item.name === "taskInfo") {
  86. item.meta.tabname =
  87. this.taskInfoTabname ||
  88. localStorage.getItem("taskInfoTabname") ||
  89. "任务详情";
  90. }
  91. if (item.name === "vehicleConfigurationDetail") {
  92. item.meta.tabname =
  93. this.vehicleConfigurationDetailTabName ||
  94. localStorage.getItem("vehicleConfigurationDetailTabName") ||
  95. "车辆配置详情";
  96. } else if (item.name === "exportAlgorithms") {
  97. item.meta.tabname =
  98. this.exportAlgorithmsTabName ||
  99. localStorage.getItem("exportAlgorithmsTabName") ||
  100. "导入算法";
  101. } else if (item.name === "gitAlgorithms") {
  102. item.meta.tabname =
  103. this.gitAlgorithmsTabName ||
  104. localStorage.getItem("gitAlgorithmsTabName") ||
  105. "仓库算法";
  106. } else if (item.name === "gradingRuleDetail") {
  107. item.meta.tabname =
  108. this.gradingRuleDetailTabName ||
  109. localStorage.getItem("gradingRuleDetailTabName") ||
  110. "评分规则详情";
  111. } else if (item.name === "scenePacketList") {
  112. item.meta.tabname =
  113. this.scenePacketListTabName ||
  114. localStorage.getItem("scenePacketListTabName") ||
  115. "场景测试包";
  116. } else if (item.name === "parameterDetail") {
  117. item.meta.tabname =
  118. this.parameterDetailTabName ||
  119. localStorage.getItem("parameterDetailTabName") ||
  120. "编辑参数配置";
  121. } else if (item.name === "clusteringDetail") {
  122. item.meta.tabname =
  123. this.clusteringDetailTabName ||
  124. localStorage.getItem("clusteringDetailTabName") ||
  125. "编辑集群配置";
  126. } else if (item.name === "scenePacketDetail") {
  127. item.meta.tabname =
  128. this.scenePacketDetailTabName ||
  129. localStorage.getItem("scenePacketDetailTabName") ||
  130. "场景包详情";
  131. } else if (item.name === "scenePacketDistributionDetail") {
  132. item.meta.tabname =
  133. this.scenePacketDistributionDetailTabName ||
  134. localStorage.getItem("scenePacketDistributionDetailTabName") ||
  135. "场景包分配详情";
  136. } else if (item.name === "editAccount") {
  137. item.meta.tabname =
  138. this.editAccountTabName ||
  139. localStorage.getItem("editAccountTabName") ||
  140. "编辑账户";
  141. } else if (item.name === "vehicleModelDetail") {
  142. item.meta.tabname =
  143. this.vehicleModelDetailTabName ||
  144. localStorage.getItem("vehicleModelDetailTabName") ||
  145. "车辆设置详情";
  146. }
  147. if (item.name === this.$route.name) {
  148. item.fullPath = this.$route.fullPath;
  149. }
  150. if (item.name === "mainPage") {
  151. isMainPage = true;
  152. }
  153. });
  154. if (isMainPage) {
  155. // 如果跳转首页,会有 / 需要去掉
  156. return this.$route.matched.slice(0, 1);
  157. } else {
  158. // 不要第一个显示首页的
  159. return this.$route.matched.slice(1);
  160. }
  161. },
  162. },
  163. };
  164. </script>
  165. <style lang="less" scoped>
  166. .breadCrumbPanel {
  167. position: fixed;
  168. top: 0;
  169. left: 150px;
  170. right: 0;
  171. bottom: 0;
  172. z-index: 666;
  173. height: 50px;
  174. line-height: 48px;
  175. border-bottom: 2px solid #f5f7fa;
  176. background-color: #ffffff;
  177. overflow: hidden;
  178. .contentClass {
  179. // width: 1100px;
  180. // margin: 0 auto;
  181. // flex: 1;
  182. padding-top: 15px;
  183. padding-left: 12px;
  184. // .breadcrumb {
  185. // height: 30px;
  186. // border-radius: 4px;
  187. // margin-bottom: 0px;
  188. // position: relative;
  189. // }
  190. /deep/ .el-breadcrumb {
  191. >span {
  192. display: block;
  193. width: 3000px;
  194. }
  195. }
  196. /deep/ .el-breadcrumb__inner a {
  197. color: #333;
  198. font-weight: normal;
  199. user-select: none;
  200. line-height: 20px;
  201. &:hover {
  202. color: @themeColor;
  203. }
  204. }
  205. /deep/ .el-breadcrumb__item:last-child .el-breadcrumb__inner,
  206. .el-breadcrumb__item:last-child .el-breadcrumb__inner a,
  207. .el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,
  208. .el-breadcrumb__item:last-child .el-breadcrumb__inner:hover {
  209. /*font-weight: 700;*/
  210. color: @themeColor;
  211. user-select: none;
  212. line-height: 20px;
  213. cursor: pointer;
  214. }
  215. /deep/ .el-breadcrumb__separator[class*="el-icon-arrow-right"] {
  216. margin: 0px 3px 0px 1px;
  217. }
  218. }
  219. .nameBox {
  220. position: absolute;
  221. top: 4px;
  222. // right: 20px;
  223. right: 0;
  224. z-index: 669;
  225. display: flex;
  226. height: 40px;
  227. padding: 0 20px;
  228. background-color: #ffffff;
  229. div {
  230. height: 40px;
  231. line-height: 40px;
  232. }
  233. .exit {
  234. margin-left: 10px;
  235. font-size: 20px;
  236. cursor: pointer;
  237. }
  238. .exit:hover {
  239. color: @themeColor;
  240. }
  241. }
  242. /* .avatarBox {
  243. position: absolute;
  244. top: 4px;
  245. right: 20px;
  246. z-index: 669;
  247. width: 40px;
  248. height: 40px;
  249. cursor: pointer;
  250. border-radius: 50%;
  251. overflow: hidden;
  252. } */
  253. }
  254. </style>