import { ViewController } from '@ibiz-template/controller'; import { useNamespace } from '@ibiz-template/vue-util'; import { defineComponent, PropType } from 'vue'; import '@ibiz-template/theme/style/components/layout/view-base/view-base.scss'; export const ViewBase = defineComponent({ props: { controller: { type: Object as PropType, required: true, }, }, setup(props) { const ns = useNamespace('view'); const renderViewMessage = () => { const messageSlots: IData = {}; if (props.controller.complete) { ['TOP', 'BOTTOM', 'BODY'].forEach(position => { const viewMessages = props.controller.viewMessages[position]; if (viewMessages?.length) { messageSlots[`${position.toLowerCase()}Message`] = () => { return ; }; } }); } return messageSlots; }; return { ns, renderViewMessage }; }, render() { const c = this.controller; // 外面的插槽同样传给view-layout const inheritSlots: IData = {}; Object.keys(this.$scopedSlots).forEach(key => { inheritSlots[key] = (arg: IData) => this.$scopedSlots[key]!(arg); }); return ( { return (
{c.complete && c.model.source.getPSSysImage() ? ( [ , {c.caption} , ] ) : ( {c.caption} )}
); }, toolbar: () => { if (c.complete && c.model.toolbar) { return [ , ]; } return null; }, ...this.renderViewMessage(), ...inheritSlots, }} /> ); }, });