| 
					
				 | 
			
			
				@@ -32,16 +32,17 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     </PageFooter> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-<script lang="ts"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<script lang="ts" setup> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   import { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     CSSProperties, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     PropType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     provide, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    defineComponent, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     computed, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     watch, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ref, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     unref, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    useAttrs, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    useSlots, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } from 'vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   import PageFooter from './PageFooter.vue'; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -53,122 +54,109 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   import { useContentHeight } from '/@/hooks/web/useContentHeight'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   import { PageWrapperFixedHeightKey } from '/@/enums/pageEnum'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  defineOptions({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     name: 'PageWrapper', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    components: { PageFooter, PageHeader }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     inheritAttrs: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    props: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      title: propTypes.string, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      dense: propTypes.bool, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ghost: propTypes.bool, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      content: propTypes.string, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      contentStyle: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        type: Object as PropType<CSSProperties>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const props = defineProps({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    title: propTypes.string, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    dense: propTypes.bool, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ghost: propTypes.bool, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    content: propTypes.string, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    contentStyle: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      type: Object as PropType<CSSProperties>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    contentBackground: propTypes.bool, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    contentFullHeight: propTypes.bool.def(false), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    contentClass: propTypes.string, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fixedHeight: propTypes.bool, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    upwardSpace: propTypes.oneOfType([propTypes.number, propTypes.string]).def(0), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const attrs = useAttrs(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const slots = useSlots(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const wrapperRef = ref(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const headerRef = ref(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const contentRef = ref(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const footerRef = ref(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const { prefixCls } = useDesign('page-wrapper'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  provide( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    PageWrapperFixedHeightKey, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    computed(() => props.fixedHeight), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const getIsContentFullHeight = computed(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return props.contentFullHeight; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const getUpwardSpace = computed(() => props.upwardSpace); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const { redoHeight, setCompensation, contentHeight } = useContentHeight( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getIsContentFullHeight, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    wrapperRef, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    [headerRef, footerRef], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    [contentRef], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getUpwardSpace, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  setCompensation({ useLayoutFooter: true, elements: [footerRef] }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const getClass = computed(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      prefixCls, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        [`${prefixCls}--dense`]: props.dense, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      attrs.class ?? {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const getShowHeader = computed( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    () => props.content || slots?.headerContent || props.title || getHeaderSlots.value.length, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const getShowFooter = computed(() => slots?.leftFooter || slots?.rightFooter); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const getHeaderSlots = computed(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return Object.keys(omit(slots, 'default', 'leftFooter', 'rightFooter', 'headerContent')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const getContentStyle = computed((): CSSProperties => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const { contentFullHeight, contentStyle, fixedHeight } = props; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!contentFullHeight) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return { ...contentStyle }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const height = `${unref(contentHeight)}px`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ...contentStyle, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      minHeight: height, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ...(fixedHeight ? { height } : {}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const getContentClass = computed(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const { contentBackground, contentClass } = props; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      `${prefixCls}-content`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      contentClass, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        [`${prefixCls}-content-bg`]: contentBackground, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      contentBackground: propTypes.bool, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      contentFullHeight: propTypes.bool, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      contentClass: propTypes.string, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      fixedHeight: propTypes.bool, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      upwardSpace: propTypes.oneOfType([propTypes.number, propTypes.string]).def(0), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  watch( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    () => [getShowFooter.value], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      redoHeight(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    setup(props, { slots, attrs }) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const wrapperRef = ref(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const headerRef = ref(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const contentRef = ref(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const footerRef = ref(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const { prefixCls } = useDesign('page-wrapper'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      provide( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        PageWrapperFixedHeightKey, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        computed(() => props.fixedHeight), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const getIsContentFullHeight = computed(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return props.contentFullHeight; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const getUpwardSpace = computed(() => props.upwardSpace); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const { redoHeight, setCompensation, contentHeight } = useContentHeight( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        getIsContentFullHeight, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        wrapperRef, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        [headerRef, footerRef], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        [contentRef], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        getUpwardSpace, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      setCompensation({ useLayoutFooter: true, elements: [footerRef] }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const getClass = computed(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          prefixCls, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            [`${prefixCls}--dense`]: props.dense, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          attrs.class ?? {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const getShowHeader = computed( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        () => props.content || slots?.headerContent || props.title || getHeaderSlots.value.length, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const getShowFooter = computed(() => slots?.leftFooter || slots?.rightFooter); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const getHeaderSlots = computed(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return Object.keys(omit(slots, 'default', 'leftFooter', 'rightFooter', 'headerContent')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const getContentStyle = computed((): CSSProperties => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const { contentFullHeight, contentStyle, fixedHeight } = props; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (!contentFullHeight) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          return { ...contentStyle }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const height = `${unref(contentHeight)}px`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          ...contentStyle, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          minHeight: height, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          ...(fixedHeight ? { height } : {}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const getContentClass = computed(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const { contentBackground, contentClass } = props; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          `${prefixCls}-content`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          contentClass, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            [`${prefixCls}-content-bg`]: contentBackground, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      watch( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        () => [getShowFooter.value], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          redoHeight(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          flush: 'post', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          immediate: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        getContentStyle, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        wrapperRef, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        headerRef, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        contentRef, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        footerRef, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        getClass, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        getHeaderSlots, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        prefixCls, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        getShowHeader, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        getShowFooter, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        omit, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        getContentClass, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      flush: 'post', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      immediate: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <style lang="less"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   @prefix-cls: ~'@{namespace}-page-wrapper'; 
			 |