+
{ctx.slots.default?.()}
)
diff --git a/devui/panel/src/panel.scss b/devui/panel/src/panel.scss
index 2cb1bb83b846d0ab25d96329a09c6ecc42c6d217..76ab896446dded584c1060a274f615b42c96e670 100644
--- a/devui/panel/src/panel.scss
+++ b/devui/panel/src/panel.scss
@@ -1,5 +1,17 @@
@import '../../style/theme/color';
+.no-left-padding {
+ &.devui-panel-body-collapse {
+ &::before {
+ content: none !important;
+ }
+
+ .devui-panel-content {
+ border-left: none !important;
+ }
+ }
+}
+
.devui-panel {
line-height: 1.5;
background-color: $devui-base-bg;
@@ -13,17 +25,6 @@
}
}
- .no-left-padding {
- &.devui-panel-body-collapse {
- &::before {
- display: none;
- }
-
- .devui-panel-content {
- border-left: none !important;
- }
- }
- }
.devui-panel-body {
display: flex;
diff --git a/devui/panel/src/panel.tsx b/devui/panel/src/panel.tsx
index 741ebcf5505daf1891589d19f5a3e2fb699edf77..5c601aee231c63e8cf41b4c4d3e4494c55eba6cc 100644
--- a/devui/panel/src/panel.tsx
+++ b/devui/panel/src/panel.tsx
@@ -1,4 +1,4 @@
-import { defineComponent, ref, Transition, onMounted, provide } from 'vue';
+import { defineComponent, ref, provide, computed} from 'vue';
import './panel.scss';
import { PanelProps } from './panel.type';
import Store from './store/store';
@@ -8,31 +8,22 @@ export default defineComponent({
props: PanelProps,
setup(props, ctx) {
provide('beforeToggle', props.beforeToggle);
- provide('showAnimation', props.showAnimation);
- provide('hasLeftPadding', props.hasLeftPadding);
+ provide('showAnimation', computed(()=>props.showAnimation));
+ provide('hasLeftPadding', computed(()=>props.hasLeftPadding));
const isCollapsed = ref(props.isCollapsed);
- const bodyEl = ref();
+ const type = computed(()=>props.type);
+ const cssClass = computed(()=>props.cssClass);
const onToggle = ()=> {
props.toggle?.(Store.getByKey(`isCollapsed[${timeStamp}]`))
};
-
- onMounted(() => {
- if(bodyEl.value) {
- const dom = bodyEl.value;
- if(isCollapsed.value)
- dom.style.height = `${dom.offsetHeight}px`;
- }
- })
-
const timeStamp = new Date().getTime().toString();
Store.setData(`isCollapsed[${timeStamp}]`, isCollapsed.value);
-
return () => {
return (
-
- {ctx.slots.default()}
+
+ {ctx.slots.default?.()}
)
}
- },
+ }
})
\ No newline at end of file
diff --git a/devui/panel/src/panel.type.ts b/devui/panel/src/panel.type.ts
index 58a80760ef8040f5b3246f0b264bb6b304f9fd2a..ed23606652499788f8776bc3d70316e5c9c95e15 100644
--- a/devui/panel/src/panel.type.ts
+++ b/devui/panel/src/panel.type.ts
@@ -3,34 +3,34 @@ import {ExtractPropTypes} from 'vue';
export type PanelType = 'default' | 'primary' | 'success' | 'danger' | 'warning' | 'info';
export const PanelProps = {
- type: {
- type: String as () => PanelType,
- default: 'default'
- },
- cssClass: {
- type: String,
- default: ''
- },
- isCollapsed: {
- type: Boolean,
- default: undefined
- },
- beforeToggle: {
- type: Function as unknown as () => (value: boolean) => boolean | Promise
,
- default: null
- },
- toggle: {
- type: Function as unknown as ()=> ((value: boolean) => void),
- default: null
- },
- showAnimation: {
- type: Boolean,
- default: true,
- },
- hasLeftPadding:{
- type: Boolean,
- default: true,
- }
+ type: {
+ type: String as () => PanelType,
+ default: 'default'
+ },
+ cssClass: {
+ type: String,
+ default: ''
+ },
+ isCollapsed: {
+ type: Boolean,
+ default: false
+ },
+ beforeToggle: {
+ type: Function as unknown as () => (value: boolean) => boolean | Promise,
+ default: null
+ },
+ toggle: {
+ type: Function as unknown as ()=> ((value: boolean) => void),
+ default: null
+ },
+ showAnimation: {
+ type: Boolean,
+ default: true,
+ },
+ hasLeftPadding:{
+ type: Boolean,
+ default: true,
+ }
}
export type PanelPropsType = ExtractPropTypes;
\ No newline at end of file
diff --git a/docs/components/panel/index.md b/docs/components/panel/index.md
index aeae65aa903bc4c77ce54acea91ece39eb5b3da9..0c1b61985915e59c490180ac4c7164d1135ca178 100644
--- a/docs/components/panel/index.md
+++ b/docs/components/panel/index.md
@@ -11,14 +11,14 @@
```vue
-
+
Panel with foldable
This is body
-
+
Panel has no left padding
@@ -26,7 +26,7 @@
This is body
-
+
Panel with header and footer
This is body
This is footer
@@ -38,9 +38,11 @@ export default defineComponent({
setup(){
const toggleState = ref(true);
const toggle = (e) => toggleState.value = e;
+ const beforeToggle = () => false;
return {
toggle,
toggleState,
+ beforeToggle
}
}
})
@@ -87,9 +89,9 @@ export default defineComponent({
:::demo
```vue
-
+
- Panel with foldable
+ Panel with foldable
This is body
@@ -106,18 +108,22 @@ import { defineComponent, ref } from 'vue'
export default defineComponent({
setup(){
let isCollapsed = ref(true);
- let panelToggle = ref(false);
+ let panelToggle = ref(true);
let toggle = ref(true);
+ let showAnimation = ref(true);
let state;
- const handleToggle = (e) => toggle.value = e;
- const beforeToggle = () => panelToggle.value;
+ let padding = ref(false);
+ const handleToggle = (e) => {toggle.value = e;}
+ const beforeToggle = (e) => {console.log(e); return panelToggle.value;}
return {
state,
toggle,
panelToggle,
beforeToggle,
isCollapsed,
- handleToggle
+ handleToggle,
+ showAnimation,
+ padding
}
}
})
@@ -125,6 +131,43 @@ export default defineComponent({
```
:::
+### 动态切换
+
+我们已hasLeftPadding为例
+
+:::demo
+```vue
+
+
+
+ Panel with foldable
+
+
+ This is body
+
+
+
+
+ {{ padding ? '有左填充' : '没有左填充' }}
+
+
+
+```
+:::
+
+
+
### API
|参数| 类型| 默认| 说明|