|
@@ -0,0 +1,67 @@
|
|
|
+import {ref} from 'vue'
|
|
|
+import {useCyNamespace} from "@/utils/xiaochan-element-plus";
|
|
|
+import {Props} from './CyDialog.vue'
|
|
|
+import {useResizeObserver} from "@vueuse/core";
|
|
|
+import {useDraggable} from "element-plus";
|
|
|
+
|
|
|
+export function UseCyDialog(props: Props) {
|
|
|
+ const ns = useCyNamespace('combo-grid')
|
|
|
+ const headerRef = ref()
|
|
|
+ const footerRef = ref()
|
|
|
+ const containerRef = ref()
|
|
|
+ const boxRef = ref()
|
|
|
+ const bodyRef = ref()
|
|
|
+
|
|
|
+ const observerHeight = ref({
|
|
|
+ headerHeight: 0,
|
|
|
+ footerHeight: 0,
|
|
|
+ boxHeight: 0,
|
|
|
+ bodySize: {
|
|
|
+ height: 0,
|
|
|
+ width: 0
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ const bodyHeightStyle = computed(() => {
|
|
|
+ return {
|
|
|
+ height: observerHeight.value.boxHeight - observerHeight.value.headerHeight - observerHeight.value.footerHeight + 'px'
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ useResizeObserver(headerRef, (entries) => {
|
|
|
+ observerHeight.value.headerHeight = entries[0].target.offsetHeight
|
|
|
+ })
|
|
|
+
|
|
|
+ useResizeObserver(boxRef, (entries) => {
|
|
|
+ observerHeight.value.boxHeight = entries[0].target.offsetHeight
|
|
|
+ })
|
|
|
+
|
|
|
+ useResizeObserver(footerRef, (entries) => {
|
|
|
+ observerHeight.value.footerHeight = entries[0].target.offsetHeight
|
|
|
+ })
|
|
|
+
|
|
|
+ useResizeObserver(bodyRef, (entries) => {
|
|
|
+ observerHeight.value.bodySize = {
|
|
|
+ height: entries[0].target.offsetHeight,
|
|
|
+ width: entries[0].target.offsetWidth,
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ const draggable = computed(() => {
|
|
|
+ return true;
|
|
|
+ })
|
|
|
+
|
|
|
+ useDraggable(boxRef, headerRef, draggable)
|
|
|
+
|
|
|
+
|
|
|
+ return {
|
|
|
+ ns,
|
|
|
+ headerRef,
|
|
|
+ footerRef,
|
|
|
+ bodyHeightStyle,
|
|
|
+ containerRef,
|
|
|
+ boxRef,
|
|
|
+ bodyRef,
|
|
|
+ observerHeight
|
|
|
+ }
|
|
|
+}
|