layout.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <template>
  2. <div class="d2-layout-header-aside-group"
  3. :style="styleLayoutMainGroup"
  4. :class="{grayMode: grayActive}">
  5. <!-- 半透明遮罩 -->
  6. <div class="d2-layout-header-aside-mask"></div>
  7. <!-- 主体内容 -->
  8. <div class="d2-layout-header-aside-content"
  9. flex="dir:top">
  10. <!-- 顶栏 -->
  11. <div class="d2-theme-header"
  12. :style="{
  13. opacity: this.searchActive ? 0.5 : 1
  14. }"
  15. flex-box="0"
  16. flex>
  17. <div class="logo-group"
  18. :style="{width: asideCollapse ? asideWidthCollapse : asideWidth}"
  19. flex-box="0">
  20. <img v-if="asideCollapse"
  21. :src="`${$baseUrl}image/theme/${themeActiveSetting.name}/logo/icon-only.png`">
  22. <img v-else
  23. :src="`${$baseUrl}image/theme/${themeActiveSetting.name}/logo/all.png`"
  24. style="height:45px; margin-top:5px">
  25. <!-- <img v-if="asideCollapse" :src="`${$baseUrl}image/theme/${themeActiveSetting.name}/logo/icon_labsop.png`">
  26. <img v-else :src="`${$baseUrl}image/theme/${themeActiveSetting.name}/logo/labsop.png`"> -->
  27. </div>
  28. <div class="toggle-aside-btn"
  29. @click="handleToggleAside"
  30. flex-box="0">
  31. <d2-icon name="bars" />
  32. </div>
  33. <img :src="`${$baseUrl}image/theme/${themeActiveSetting.name}/logo/title_word.png`"
  34. style="height:30px;margin-top:15px">
  35. <!-- 细胞制品研发中心管理系统 -->
  36. <d2-menu-header flex-box="1" />
  37. <!-- 顶栏右侧 -->
  38. <div class="d2-header-right"
  39. flex-box="0">
  40. <!-- 如果你只想在开发环境显示这个按钮请添加 v-if="$env === 'development'" -->
  41. <d2-header-search @click="handleSearchClick" />
  42. <!--<d2-header-log/>-->
  43. <d2-header-fullscreen />
  44. <d2-header-theme />
  45. <d2-header-size />
  46. <d2-header-user />
  47. </div>
  48. </div>
  49. <!-- 下面 主体 -->
  50. <div class="d2-theme-container"
  51. flex-box="1"
  52. flex>
  53. <!-- 主体 侧边栏 -->
  54. <!-- style="background:#444;" -->
  55. <div flex-box="0"
  56. ref="aside"
  57. class="d2-theme-container-aside"
  58. :style="{
  59. width: asideCollapse ? asideWidthCollapse : asideWidth,
  60. opacity: this.searchActive ? 0.5 : 1
  61. }">
  62. <d2-menu-side />
  63. </div>
  64. <!-- 主体 -->
  65. <div class="d2-theme-container-main"
  66. flex-box="1"
  67. flex>
  68. <!-- 搜索 -->
  69. <transition name="fade-scale">
  70. <div v-if="searchActive"
  71. class="d2-theme-container-main-layer"
  72. flex>
  73. <d2-panel-search ref="panelSearch"
  74. @close="searchPanelClose" />
  75. </div>
  76. </transition>
  77. <!-- 内容 -->
  78. <transition name="fade-scale">
  79. <div v-if="!searchActive"
  80. class="d2-theme-container-main-layer"
  81. flex="dir:top">
  82. <!-- tab -->
  83. <div class="d2-theme-container-main-header"
  84. flex-box="0">
  85. <d2-tabs />
  86. </div>
  87. <!-- 页面 -->
  88. <div class="d2-theme-container-main-body"
  89. flex-box="1">
  90. <transition :name="transitionActive ? 'fade-transverse' : ''">
  91. <keep-alive :include="keepAlive">
  92. <router-view />
  93. </keep-alive>
  94. </transition>
  95. </div>
  96. </div>
  97. </transition>
  98. </div>
  99. </div>
  100. </div>
  101. </div>
  102. </template>
  103. <script>
  104. import d2MenuSide from './components/menu-side'
  105. import d2MenuHeader from './components/menu-header'
  106. import d2Tabs from './components/tabs'
  107. import d2HeaderFullscreen from './components/header-fullscreen'
  108. import d2HeaderSearch from './components/header-search'
  109. import d2HeaderSize from './components/header-size'
  110. import d2HeaderTheme from './components/header-theme'
  111. import d2HeaderUser from './components/header-user'
  112. // import d2HeaderLog from './components/header-log'
  113. import { mapState, mapGetters, mapActions } from 'vuex'
  114. import mixinSearch from './mixins/search'
  115. export default {
  116. name: 'd2-layout-header-aside',
  117. mixins: [
  118. mixinSearch
  119. ],
  120. components: {
  121. d2MenuSide,
  122. d2MenuHeader,
  123. d2Tabs,
  124. d2HeaderFullscreen,
  125. d2HeaderSearch,
  126. d2HeaderSize,
  127. d2HeaderTheme,
  128. d2HeaderUser
  129. // d2HeaderLog
  130. },
  131. data () {
  132. return {
  133. // [侧边栏宽度] 正常状态
  134. asideWidth: '200px',
  135. // [侧边栏宽度] 折叠状态
  136. asideWidthCollapse: '65px'
  137. }
  138. },
  139. computed: {
  140. ...mapState('d2admin', {
  141. keepAlive: state => state.page.keepAlive,
  142. // keepAlive: state => state.keepAlive,
  143. grayActive: state => state.gray.active,
  144. transitionActive: state => state.transition.active,
  145. asideCollapse: state => state.menu.asideCollapse
  146. }),
  147. ...mapGetters('d2admin', {
  148. themeActiveSetting: 'theme/activeSetting'
  149. }),
  150. /**
  151. * @description 最外层容器的背景图片样式
  152. */
  153. styleLayoutMainGroup () {
  154. return {
  155. ...this.themeActiveSetting.backgroundImage ? {
  156. backgroundImage: `url('${this.$baseUrl}${this.themeActiveSetting.backgroundImage}')`
  157. } : {}
  158. }
  159. }
  160. },
  161. methods: {
  162. ...mapActions('d2admin/menu', [
  163. 'asideCollapseToggle'
  164. ]),
  165. /**
  166. * 接收点击切换侧边栏的按钮
  167. */
  168. handleToggleAside () {
  169. this.asideCollapseToggle()
  170. }
  171. }
  172. }
  173. </script>
  174. <style lang="scss">
  175. // 注册主题
  176. @import "~@/assets/style/theme/register.scss";
  177. .theme-d2blue .d2-theme-header {
  178. border-bottom-color: #fa9139 !important;
  179. border-bottom-style: solid;
  180. border-bottom-width: 5px;
  181. }
  182. </style>