import { computed, defineComponent, ref } from 'vue'; import { IndexViewModel } from '@ibiz-template/model'; import { useNamespace } from '@ibiz-template/vue-util'; import { Namespace } from '@ibiz-template/core'; import '@ibiz-template/theme/style/components/layout/app-layout/app-layout.scss'; function renderLogo(ns: Namespace, model: IndexViewModel) { return (
{model.appIconPath ? ( ) : null}
{model.caption}
); } export const AppLayout = defineComponent({ name: 'AppLayout', props: { model: { type: IndexViewModel, required: true, }, // 视图是否完成加载 isComplete: { type: Boolean, default: false, }, }, setup(props, { emit }) { const ns = useNamespace('layout'); // 菜单收缩变化 const collapseChange = ref(false); const collapseMenus = () => { collapseChange.value = !collapseChange.value; emit('onCollapseChange', collapseChange.value); }; const isBlank = computed(() => props.model.source.blankMode === true); return { ns, collapseChange, isBlank, collapseMenus }; }, render() { return this.isComplete ? ( {renderLogo(this.ns, this.model)} {this.$slots.menu}
{renderLogo(this.ns, this.model)}
{!this.collapseChange ? ( this.collapseMenus()} /> ) : ( this.collapseMenus()} /> )}
{this.model.source.mainMenuAlign === 'TOP' ? ( ) : null}
{this.$slots.default} {/* Footer */}
) : null; }, });