From dfd2d0218bbcea93b4bfb0e7ca7ac9b1cc1cc7da Mon Sep 17 00:00:00 2001
From: Ben Lin <maobin001@msn.com>
Date: 星期四, 27 六月 2024 16:08:28 +0800
Subject: [PATCH] 工艺路线树形增加客户编码

---
 src/components/Scrollbar/src/Scrollbar.vue |  196 +++++++++++++++++++++++-------------------------
 1 files changed, 94 insertions(+), 102 deletions(-)

diff --git a/src/components/Scrollbar/src/Scrollbar.vue b/src/components/Scrollbar/src/Scrollbar.vue
index daeb230..db8d7a1 100644
--- a/src/components/Scrollbar/src/Scrollbar.vue
+++ b/src/components/Scrollbar/src/Scrollbar.vue
@@ -3,7 +3,7 @@
     <div
       ref="wrap"
       :class="[wrapClass, 'scrollbar__wrap', native ? '' : 'scrollbar__wrap--hidden-default']"
-      :style="style"
+      :style="wrapStyle"
       @scroll="handleScroll"
     >
       <component :is="tag" ref="resize" :class="['scrollbar__view', viewClass]" :style="viewStyle">
@@ -16,120 +16,112 @@
     </template>
   </div>
 </template>
-<script lang="ts">
-  import { addResizeListener, removeResizeListener } from '/@/utils/event';
-  import componentSetting from '/@/settings/componentSetting';
-  import { toObject } from './util';
+<script lang="ts" setup>
   import {
-    defineComponent,
     ref,
     onMounted,
     onBeforeUnmount,
     nextTick,
     provide,
-    computed,
     unref,
+    watch,
+    type PropType,
   } from 'vue';
+  import type { StyleValue } from '@/utils/types';
+  import { addResizeListener, removeResizeListener } from '@/utils/event';
+  import componentSetting from '@/settings/componentSetting';
   import Bar from './bar';
 
-  const { scrollbar } = componentSetting;
+  defineOptions({ name: 'Scrollbar' });
 
-  export default defineComponent({
-    name: 'Scrollbar',
-    // inheritAttrs: false,
-    components: { Bar },
-    props: {
-      native: {
-        type: Boolean,
-        default: scrollbar?.native ?? false,
-      },
-      wrapStyle: {
-        type: [String, Array],
-        default: '',
-      },
-      wrapClass: {
-        type: [String, Array],
-        default: '',
-      },
-      viewClass: {
-        type: [String, Array],
-        default: '',
-      },
-      viewStyle: {
-        type: [String, Array],
-        default: '',
-      },
-      noresize: Boolean, // 濡傛灉 container 灏哄涓嶄細鍙戠敓鍙樺寲锛屾渶濂借缃畠鍙互浼樺寲鎬ц兘
-      tag: {
-        type: String,
-        default: 'div',
-      },
+  const props = defineProps({
+    native: {
+      type: Boolean,
+      default: componentSetting.scrollbar?.native ?? false,
     },
-    setup(props) {
-      const sizeWidth = ref('0');
-      const sizeHeight = ref('0');
-      const moveX = ref(0);
-      const moveY = ref(0);
-      const wrap = ref();
-      const resize = ref();
-
-      provide('scroll-bar-wrap', wrap);
-
-      const style = computed(() => {
-        if (Array.isArray(props.wrapStyle)) {
-          return toObject(props.wrapStyle);
-        }
-        return props.wrapStyle;
-      });
-
-      const handleScroll = () => {
-        if (!props.native) {
-          moveY.value = (unref(wrap).scrollTop * 100) / unref(wrap).clientHeight;
-          moveX.value = (unref(wrap).scrollLeft * 100) / unref(wrap).clientWidth;
-        }
-      };
-
-      const update = () => {
-        if (!unref(wrap)) return;
-
-        const heightPercentage = (unref(wrap).clientHeight * 100) / unref(wrap).scrollHeight;
-        const widthPercentage = (unref(wrap).clientWidth * 100) / unref(wrap).scrollWidth;
-
-        sizeHeight.value = heightPercentage < 100 ? heightPercentage + '%' : '';
-        sizeWidth.value = widthPercentage < 100 ? widthPercentage + '%' : '';
-      };
-
-      onMounted(() => {
-        if (props.native) return;
-        nextTick(update);
-        if (!props.noresize) {
-          addResizeListener(unref(resize), update);
-          addResizeListener(unref(wrap), update);
-          addEventListener('resize', update);
-        }
-      });
-
-      onBeforeUnmount(() => {
-        if (props.native) return;
-        if (!props.noresize) {
-          removeResizeListener(unref(resize), update);
-          removeResizeListener(unref(wrap), update);
-          removeEventListener('resize', update);
-        }
-      });
-
-      return {
-        moveX,
-        moveY,
-        sizeWidth,
-        sizeHeight,
-        style,
-        wrap,
-        resize,
-        update,
-        handleScroll,
-      };
+    wrapStyle: {
+      type: [String, Array, Object] as PropType<StyleValue>,
+      default: '',
     },
+    wrapClass: {
+      type: [String, Array],
+      default: '',
+    },
+    viewClass: {
+      type: [String, Array],
+      default: '',
+    },
+    viewStyle: {
+      type: [String, Array],
+      default: '',
+    },
+    noresize: Boolean, // 濡傛灉 container 灏哄涓嶄細鍙戠敓鍙樺寲锛屾渶濂借缃畠鍙互浼樺寲鎬ц兘
+    tag: {
+      type: String,
+      default: 'div',
+    },
+    scrollHeight: {
+      // 鐢ㄤ簬鐩戞帶鍐呴儴scrollHeight鐨勫彉鍖�
+      type: Number,
+      default: 0,
+    },
+  });
+
+  const sizeWidth = ref('0');
+  const sizeHeight = ref('0');
+  const moveX = ref(0);
+  const moveY = ref(0);
+  const wrap = ref();
+  const resize = ref();
+
+  provide('scroll-bar-wrap', wrap);
+
+  const handleScroll = () => {
+    if (!props.native) {
+      moveY.value = (unref(wrap).scrollTop * 100) / unref(wrap).clientHeight;
+      moveX.value = (unref(wrap).scrollLeft * 100) / unref(wrap).clientWidth;
+    }
+  };
+
+  const update = () => {
+    if (!unref(wrap)) return;
+
+    const heightPercentage = (unref(wrap).clientHeight * 100) / unref(wrap).scrollHeight;
+    const widthPercentage = (unref(wrap).clientWidth * 100) / unref(wrap).scrollWidth;
+
+    sizeHeight.value = heightPercentage < 100 ? heightPercentage + '%' : '';
+    sizeWidth.value = widthPercentage < 100 ? widthPercentage + '%' : '';
+  };
+
+  watch(
+    () => props.scrollHeight,
+    () => {
+      if (props.native) return;
+      update();
+    },
+  );
+
+  defineExpose({
+    wrap,
+  });
+
+  onMounted(() => {
+    if (props.native) return;
+    nextTick(update);
+    if (!props.noresize) {
+      addResizeListener(unref(resize), update);
+      addResizeListener(unref(wrap), update);
+      addEventListener('resize', update);
+    }
+  });
+
+  onBeforeUnmount(() => {
+    if (props.native) return;
+    if (!props.noresize) {
+      removeResizeListener(unref(resize), update);
+      removeResizeListener(unref(wrap), update);
+      removeEventListener('resize', update);
+    }
   });
 </script>
 <style lang="less">

--
Gitblit v1.9.3