diff --git a/devui/panel/index.ts b/devui/panel/index.ts index fee0e61cfaf6b95d4b915dd253473bc1dd9e74b8..a2e8ecc59f360e9e0c35690375a34f0a7d16715e 100644 --- a/devui/panel/index.ts +++ b/devui/panel/index.ts @@ -1,8 +1,14 @@ import type { App } from 'vue' import Panel from './src/panel' +import PanelHeader from './src/header/panel-header'; +import PanelBody from './src/body/panel-body'; +import PanelFooter from './src/foot/panel-footer'; Panel.install = function(app: App) { app.component(Panel.name, Panel) + app.component(PanelHeader.name, PanelHeader); + app.component(PanelBody.name, PanelBody); + app.component(PanelFooter.name, PanelFooter); } export { Panel } @@ -14,3 +20,4 @@ export default { app.use(Panel as any) } } + diff --git a/devui/panel/src/body/panel-body.tsx b/devui/panel/src/body/panel-body.tsx new file mode 100644 index 0000000000000000000000000000000000000000..84a64108e97c252dd8c011a9e6e187a7b8f4ac02 --- /dev/null +++ b/devui/panel/src/body/panel-body.tsx @@ -0,0 +1,53 @@ +import { defineComponent,ref,onMounted,Transition,inject } from 'vue'; +import { PanelProps } from '../panel.type'; +import Store from '../store/store'; + +export default defineComponent({ + name: 'DPanelBody', + props:PanelProps, + setup(props,ctx){ + const animationName = inject('showAnimation') ? 'devui-panel' : ''; + const hasLeftPadding = !inject('hasLeftPadding') ? 'no-left-padding' : ''; + + const keys = Object.keys(Store.state()); + const key = keys.pop(); + const isCollapsed = Store.state(); + const bodyEl = ref(); + onMounted(() => { + if(bodyEl.value) { + const dom = bodyEl.value; + if(isCollapsed[key]) + dom.style.height = `${dom.offsetHeight}px`; + } + }) + + const enter = (element: Element ) => { + const el = (element as HTMLElement); + el.style.height = ''; + const height = el.offsetHeight; + el.style.height = '0px'; + // 需要执行一次才会生效 + el.offsetHeight; + el.style.height = `${height}px`; + } + const leave = (element: Element) => { + const el = (element as HTMLElement); + el.style.height = '0px'; + } + + return () => { + return ( +