| 
					
				 | 
			
			
				@@ -0,0 +1,574 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 弹窗拖动
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { ref, Ref, watch, nextTick, computed, reactive } from 'vue';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+type posType = {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  top: number;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  left: number;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+};
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+type directionType =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  | 'TOP'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  | 'RIGHT'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  | 'BOTTOM'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  | 'LEFT'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  | 'TOP_RIGHT'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  | 'BOTTOM_RIGHT'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  | 'BOTTOM_LEFT'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  | 'TOP_LEFT';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+type baseSizeType = {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /**
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * 允许拖动方向 上/上右/右/下右/下/下左/左/上左
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  resizeDirection: boolean[];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  layoutTopHeight: number;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  windowHeight: number;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  windowWidth: number;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // 窗口模式的尺寸
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  winWidth: number;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  winHeight: number;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  minWidth: number;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  minHeight: number;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  maxHeight: number;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  maxWidth: number;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  borderRadius: number;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  transformX: number;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  transformY: number;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  width: number;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  height: number;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+};
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/***
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 初始化默认弹窗位置
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const initPos = {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  right: 14,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  top: 60
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+};
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const getSizeToUnit = (num: number, unit = 'px') => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return num > 0 ? num + unit : num + '';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+};
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/**
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @params classList  可拖动地方的class值,也为唯一值
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @params boxClass  容器class值必须为唯一值,这个class和useid拼接 作为缓存主键
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @params dragShow  弹窗是否显示
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @params userId    当前用户id
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export default function useDrag(
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  classList: string[],
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  boxClass: string,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  dragShow: Ref<boolean>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const windowInfo = reactive({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 小窗口 侧边大窗口
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    currentType: 'SMALL' as 'SMALL' | 'LARGE',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 弹窗,还是还原
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    windowType: 'SMALL' as 'SMALL' | 'LARGE',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // showScreen: false, // 是否全屏显示
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    showType: 'MENU' as 'MENU' | 'CONTENT' // 当前显示哪一部分 - 如果是全屏显示则无效
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const pos = ref<posType>({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    top: -1, // -1 为初始值 代表没有缓存 默认居中
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    left: -1
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  watch(
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    () => windowInfo.windowType,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    () => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (windowInfo.windowType === 'LARGE') {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        baseSize.resizeDirection = [
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          true
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (windowInfo.windowType === 'SMALL') {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        baseSize.resizeDirection = [
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          false,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          false,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          false,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          false,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          false,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          false
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const dragDirectionPoints = document.querySelectorAll(
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        `.${boxClass} .dragDirectionPoint`
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      );
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dragDirectionPoints.forEach((element: any, index) => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (baseSize.resizeDirection[index]) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          element.style.pointerEvents = 'all';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          element.style.pointerEvents = 'none';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  );
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const styleDrag = computed(() => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ...dragStyles,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width: getSizeToUnit(baseSize.width),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height: getSizeToUnit(baseSize.height),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      transform: `translate(${baseSize.transformX}px, ${baseSize.transformY}px)`
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    };
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const baseSize = reactive<baseSizeType>({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    resizeDirection: [true, false, false, false, true, false, false, false],
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    layoutTopHeight: 0,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    windowHeight: window.innerHeight,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    windowWidth: window.innerWidth,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 窗口模式的尺寸
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    winWidth: 1010,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    winHeight: 650,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    minWidth: 400,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    minHeight: 640,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    maxHeight: window.innerHeight,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    maxWidth: window.innerWidth > 1024 ? 1024 : window.innerWidth,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    borderRadius: 12,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    transformX: window.innerWidth - 400 - initPos.right,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    transformY: (window.innerHeight - 640) / 2,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    height: 640,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    width: 400
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const dragStyles = reactive({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // width: getSizeToUnit(baseSize.minWidth),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // height: getSizeToUnit(baseSize.minHeight),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    maxHeight: getSizeToUnit(baseSize.maxHeight),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    minWidth: getSizeToUnit(baseSize.minWidth),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    minHeight: getSizeToUnit(baseSize.minHeight),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    borderRadius: '0px'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  nextTick(() => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const layoutTopHeight =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      document.querySelector('.layoutTop')?.clientHeight || 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    baseSize.layoutTopHeight = Math.ceil(layoutTopHeight);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    baseSize.windowHeight = window.innerHeight - layoutTopHeight;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    baseSize.maxHeight = window.innerHeight - layoutTopHeight;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const translateY = (baseSize.windowHeight - baseSize.minHeight) / 2;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    baseSize.transformX =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      baseSize.windowWidth - baseSize.minWidth - initPos.right;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    baseSize.transformY = translateY;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    dragStyles.maxHeight = getSizeToUnit(baseSize.maxHeight);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // watch(dragShow, () => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //   if (dragShow.value) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //     // 初始化pos值
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //     // initPos();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //     // window.addEventListener('resize', refreshPos);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //     nextTick(() => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //       const boxClassDom = document.querySelector(
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //         `.${boxClass}`
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //       ) as HTMLElement;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //       if (!boxClassDom) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //         return;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //       }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //       console.log(boxClassDom, 'boxClassDom');
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //       classList.map((className: string) => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //         const classDom = document.querySelector(
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //           `.${className}`
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //         ) as HTMLElement;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //         if (classDom) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //           classDom.style.cursor = 'move';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //           drag(classDom, boxClassDom, baseSize);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //         }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //       });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //     });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //   } else {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //     // window.removeEventListener('resize', refreshPos);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //   }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  nextTick(() => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const boxClassDom = document.querySelector(`.${boxClass}`) as HTMLElement;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!boxClassDom) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    addReSizeDom(boxClassDom, baseSize.resizeDirection);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    classList.map((className: string) => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const classDom = document.querySelector(`.${className}`) as HTMLElement;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (classDom) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        classDom.style.cursor = 'move';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        drag(classDom, boxClassDom, baseSize);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /**
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * 添加功能放大缩小操作DOM
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @param parentElement {添加拖动父级元素}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @param direction {允许拖动的位置 上/上右/右/下右/下/下左/左/上左}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  function addReSizeDom(
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    parentElement: HTMLElement,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    direction: boolean[] = [
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      false,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      false,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      false,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      true,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      false,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      false,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      false
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ]
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function addResizeDirection(params: {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width: string;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height: string;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      direction: directionType;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      top?: string | any;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      right?: string | any;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      bottom?: string | any;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      left?: string | any;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      cursor: string;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      zIndex?: string;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      pointerEvents: string;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const dom = document.createElement('div');
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dom.className = 'dragDirectionPoint';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dom.style.position = 'absolute';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dom.style.userSelect = 'none';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dom.style.width = params.width;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dom.style.height = params.height;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dom.style.left = params.left;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dom.style.top = params.top;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dom.style.bottom = params.bottom;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dom.style.right = params.right;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dom.style.zIndex = params.zIndex || '0';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dom.style.cursor = params.cursor;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dom.style.pointerEvents = params.pointerEvents;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      parentElement.appendChild(dom);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      drag(dom, parentElement, baseSize, 'RESIZE', params.direction);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 上
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    addResizeDirection({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width: '100%',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height: '10px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      left: '0',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      top: '-5px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      cursor: 'row-resize',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      direction: 'TOP',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      pointerEvents: direction[0] ? 'all' : 'none'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 上右
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    addResizeDirection({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width: '20px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height: '20px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      right: '-10px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      top: '-10px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      zIndex: '1',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      cursor: 'ne-resize',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      direction: 'TOP_RIGHT',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      pointerEvents: direction[1] ? 'all' : 'none'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 右
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    addResizeDirection({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width: '10px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height: '100%',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      top: '0',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      right: '-5px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      cursor: 'col-resize',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      direction: 'RIGHT',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      pointerEvents: direction[2] ? 'all' : 'none'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 下右
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    addResizeDirection({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width: '20px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height: '20px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      right: '-10px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      bottom: '-10px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      cursor: 'se-resize',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      zIndex: '1',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      direction: 'BOTTOM_RIGHT',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      pointerEvents: direction[3] ? 'all' : 'none'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 下
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    addResizeDirection({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width: '100%',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height: '10px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      left: '0',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      bottom: '-5px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      cursor: 'row-resize',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      direction: 'BOTTOM',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      pointerEvents: direction[4] ? 'all' : 'none'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 下左
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    addResizeDirection({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width: '20px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height: '20px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      left: '-10px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      bottom: '-10px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      cursor: 'sw-resize',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      zIndex: '1',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      direction: 'BOTTOM_LEFT',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      pointerEvents: direction[5] ? 'all' : 'none'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 左
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    addResizeDirection({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width: '10px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height: '100%',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      top: '0',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      left: '-5px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      cursor: 'col-resize',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      direction: 'LEFT',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      pointerEvents: direction[6] ? 'all' : 'none'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 上左
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    addResizeDirection({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width: '20px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height: '20px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      left: '-10px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      top: '-10px',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      cursor: 'nw-resize',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      zIndex: '1',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      direction: 'TOP_LEFT',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      pointerEvents: direction[7] ? 'all' : 'none'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  function refreshPos() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (pos.value.left === -1 && pos.value.top === -1) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const boxClassDom = document.querySelector(`.${boxClass}`) as HTMLElement;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!boxClassDom) return;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const parentElementRect = boxClassDom.getBoundingClientRect();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const clientWidth = document.documentElement.clientWidth;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const clientHeight = document.documentElement.clientHeight;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const { top, left } = pos.value;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const maxLeft = clientWidth - parentElementRect.width;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const maxTop = clientHeight - parentElementRect.height;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let moveX = left;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let moveY = top;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const minLeft = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const minTop = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    moveX = moveX < minLeft ? minLeft : moveX > maxLeft ? maxLeft : moveX;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    moveY = moveY < minTop ? minTop : moveY > maxTop ? maxTop : moveY;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    pos.value = {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      top: moveY,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      left: moveX
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    };
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /** 切换窗口 */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  function onScreen() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (windowInfo.windowType === 'SMALL') {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      windowInfo.windowType = 'LARGE';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      baseSize.transformX = (baseSize.windowWidth - baseSize.winWidth) / 2;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      baseSize.transformY =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        (baseSize.windowHeight - baseSize.winHeight) / 2 -
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        baseSize.layoutTopHeight / 2;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      baseSize.width = baseSize.winWidth;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      baseSize.height = baseSize.winHeight;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dragStyles.borderRadius = getSizeToUnit(baseSize.borderRadius);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else if (windowInfo.windowType === 'LARGE') {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      windowInfo.windowType = 'SMALL';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const translateY = (baseSize.windowHeight - baseSize.minHeight) / 2;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      baseSize.transformX =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        baseSize.windowWidth - baseSize.minWidth - initPos.right;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      baseSize.transformY =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        translateY > initPos.top
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ? translateY + (translateY - initPos.top)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          : translateY;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      baseSize.width = baseSize.minWidth;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      baseSize.height = baseSize.minHeight;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dragStyles.borderRadius = '0';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /** 格式化尺寸 */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  function onResize() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (windowInfo.currentType === 'SMALL') {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      windowInfo.currentType = 'LARGE';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      windowInfo.windowType = 'SMALL';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      baseSize.transformX = baseSize.windowWidth - baseSize.minWidth;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      baseSize.transformY = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      baseSize.width = baseSize.minWidth;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      baseSize.height = baseSize.maxHeight;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dragStyles.borderRadius = '0';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else if (windowInfo.currentType === 'LARGE') {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      windowInfo.currentType = 'SMALL';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      windowInfo.windowType = 'SMALL';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      baseSize.transformX =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        baseSize.windowWidth - baseSize.minWidth - initPos.right;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      baseSize.transformY =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        baseSize.windowHeight - baseSize.minHeight - initPos.top;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      baseSize.width = baseSize.minWidth;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      baseSize.height = baseSize.minHeight;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dragStyles.borderRadius = '0';
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    pos,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    baseSize,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    windowInfo,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    styleDrag,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    onScreen,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    onResize
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  };
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 拖动
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function drag(
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  el: HTMLElement,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  parentElement: HTMLElement,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  baseSize: baseSizeType,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  type = 'MOVE' as 'MOVE' | 'RESIZE',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  direction?: directionType
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  function onDown(e: MouseEvent | TouchEvent) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const isTouchEv = isTouchEvent(e);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const event = isTouchEv ? e.touches[0] : e;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const parentElementRect = parentElement.getBoundingClientRect();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const downX = event.clientX;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const downY = event.clientY;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const clientWidth = document.documentElement.clientWidth;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const clientHeight = document.documentElement.clientHeight;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const maxLeft = clientWidth - parentElementRect.width;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const maxTop =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      clientHeight - parentElementRect.height - baseSize.layoutTopHeight;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const maxResizeLeft =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      clientWidth - baseSize.minWidth - (clientWidth - parentElementRect.right);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const maxResizeTop =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      clientHeight - baseSize.minHeight - baseSize.layoutTopHeight;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const minLeft = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const minTop = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const baseHeight = JSON.parse(JSON.stringify(baseSize.height));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const baseWidth = JSON.parse(JSON.stringify(baseSize.width));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function onTop(moveY: number) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const maxSuffix =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        parentElementRect.bottom -
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        baseSize.minHeight -
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        baseSize.layoutTopHeight;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      moveY = moveY > maxSuffix ? maxSuffix : moveY;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const suffix = baseSize.transformY - moveY;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (suffix > 0 || baseSize.height > baseSize.minHeight) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        baseSize.transformY = moveY;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        baseSize.height = baseSize.height + suffix;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function onRight(moveX: number) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      moveX = moveX < minLeft ? minLeft : moveX > maxLeft ? maxLeft : moveX;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const suffix = Math.ceil(
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        baseWidth + moveX - (baseSize.width + baseSize.transformX)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      );
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (baseSize.maxWidth > baseSize.width) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        baseSize.width =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          baseSize.width + suffix > baseSize.maxWidth
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ? baseSize.maxWidth
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            : baseSize.width + suffix;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        baseSize.width =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          baseSize.width + suffix <= baseSize.minWidth
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ? baseSize.minWidth
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            : baseSize.width + suffix;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function onBottom(moveY: number) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (baseSize.maxHeight > baseSize.height) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const suffix = Math.ceil(
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          baseHeight + moveY - (baseSize.height + baseSize.transformY)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        );
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        baseSize.height = baseSize.height + suffix;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function onLeft(moveX: number) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      moveX =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        moveX < minLeft
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ? minLeft
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          : moveX > maxResizeLeft
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ? maxResizeLeft
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          : moveX;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const suffix = baseSize.transformX - moveX;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (suffix > 0 || baseSize.width > baseSize.minWidth) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (baseSize.width + suffix <= baseSize.maxWidth) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          baseSize.transformX = moveX;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          baseSize.width = baseSize.width + suffix;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function onMove(e: MouseEvent | TouchEvent) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const event = isTouchEvent(e) ? e.touches[0] : e;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (type === 'MOVE') {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let moveX = parentElementRect.left + (event.clientX - downX);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let moveY =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          parentElementRect.top -
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          baseSize.layoutTopHeight +
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          (event.clientY - downY);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        moveX = moveX < minLeft ? minLeft : moveX > maxLeft ? maxLeft : moveX;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        moveY = moveY < minTop ? minTop : moveY > maxTop ? maxTop : moveY;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 移动
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        baseSize.transformY = moveY;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        baseSize.transformX = moveX;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (type === 'RESIZE') {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let moveY =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          parentElementRect.top -
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          baseSize.layoutTopHeight +
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          (event.clientY - downY);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        moveY =
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          moveY < minTop ? minTop : moveY > maxResizeTop ? maxResizeTop : moveY;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const moveX = parentElementRect.left + (event.clientX - downX);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 拖动
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (direction === 'TOP') {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          onTop(moveY);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (direction === 'RIGHT') {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          onRight(moveX);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (direction === 'BOTTOM') {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          onBottom(moveY);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (direction === 'LEFT') {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          onLeft(moveX);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (direction === 'TOP_RIGHT') {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          onTop(moveY);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          onRight(moveX);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (direction === 'BOTTOM_RIGHT') {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          onBottom(moveY);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          onRight(moveX);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (direction === 'BOTTOM_LEFT') {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          onBottom(moveY);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          onLeft(moveX);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (direction === 'TOP_LEFT') {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          onTop(moveY);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          onLeft(moveX);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function onUp() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      document.removeEventListener(
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        isTouchEv ? 'touchmove' : 'mousemove',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        onMove
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      );
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      document.removeEventListener(isTouchEv ? 'touchend' : 'mouseup', onUp);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    document.addEventListener(isTouchEv ? 'touchmove' : 'mousemove', onMove);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    document.addEventListener(isTouchEv ? 'touchend' : 'mouseup', onUp);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  el.addEventListener('mousedown', onDown);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  el.addEventListener('touchstart', onDown);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function isTouchEvent(e: MouseEvent | TouchEvent): e is TouchEvent {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return window.TouchEvent && e instanceof window.TouchEvent;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}
 
			 |