mirror of
				https://github.com/YunaiV/ruoyi-vue-pro.git
				synced 2025-10-31 18:49:06 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <script lang="tsx">
 | |
| import { computed, defineComponent, unref } from 'vue'
 | |
| import { useAppStore } from '@/store/modules/app'
 | |
| import { Backtop } from '@/components/Backtop'
 | |
| import { Setting } from '@/layout/components/Setting'
 | |
| import { useRenderLayout } from './components/useRenderLayout'
 | |
| import { useDesign } from '@/hooks/web/useDesign'
 | |
| 
 | |
| const { getPrefixCls } = useDesign()
 | |
| 
 | |
| const prefixCls = getPrefixCls('layout')
 | |
| 
 | |
| const appStore = useAppStore()
 | |
| 
 | |
| // 是否是移动端
 | |
| const mobile = computed(() => appStore.getMobile)
 | |
| 
 | |
| // 菜单折叠
 | |
| const collapse = computed(() => appStore.getCollapse)
 | |
| 
 | |
| const layout = computed(() => appStore.getLayout)
 | |
| 
 | |
| const handleClickOutside = () => {
 | |
|   appStore.setCollapse(true)
 | |
| }
 | |
| 
 | |
| const renderLayout = () => {
 | |
|   switch (unref(layout)) {
 | |
|     case 'classic':
 | |
|       const { renderClassic } = useRenderLayout()
 | |
|       return renderClassic()
 | |
|     case 'topLeft':
 | |
|       const { renderTopLeft } = useRenderLayout()
 | |
|       return renderTopLeft()
 | |
|     case 'top':
 | |
|       const { renderTop } = useRenderLayout()
 | |
|       return renderTop()
 | |
|     case 'cutMenu':
 | |
|       const { renderCutMenu } = useRenderLayout()
 | |
|       return renderCutMenu()
 | |
|     default:
 | |
|       break
 | |
|   }
 | |
| }
 | |
| 
 | |
| export default defineComponent({
 | |
|   name: 'Layout',
 | |
|   setup() {
 | |
|     return () => (
 | |
|       <section class={[prefixCls, `${prefixCls}__${layout.value}`, 'w-[100%] h-[100%] relative']}>
 | |
|         {mobile.value && !collapse.value ? (
 | |
|           <div
 | |
|             class="absolute top-0 left-0 w-full h-full opacity-30 z-99 bg-[var(--el-color-black)]"
 | |
|             onClick={handleClickOutside}
 | |
|           ></div>
 | |
|         ) : undefined}
 | |
| 
 | |
|         {renderLayout()}
 | |
| 
 | |
|         <Backtop></Backtop>
 | |
| 
 | |
|         <Setting></Setting>
 | |
|       </section>
 | |
|     )
 | |
|   }
 | |
| })
 | |
| </script>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
| $prefix-cls: #{$namespace}-layout;
 | |
| 
 | |
| .#{$prefix-cls} {
 | |
|   background-color: var(--app-content-bg-color);
 | |
|   :deep(.#{$elNamespace}-scrollbar__view) {
 | |
|     height: 100% !important;
 | |
|   }
 | |
| }
 | |
| </style>
 | 
