From 94b93ea7e7f83c678b1413fc9fc8642e69213647 Mon Sep 17 00:00:00 2001
From: Ben Lin <maobin001@msn.com>
Date: 星期二, 18 六月 2024 14:49:57 +0800
Subject: [PATCH] 版本更新

---
 src/layouts/default/menu/index.vue |  378 ++++++++++++++++++++++++++++-------------------------
 1 files changed, 201 insertions(+), 177 deletions(-)

diff --git a/src/layouts/default/menu/index.vue b/src/layouts/default/menu/index.vue
index cd1e773..bd9982c 100644
--- a/src/layouts/default/menu/index.vue
+++ b/src/layouts/default/menu/index.vue
@@ -1,202 +1,226 @@
 <script lang="tsx">
-  import type { PropType, CSSProperties } from 'vue';
+import type { PropType, CSSProperties } from 'vue';
 
-  import { computed, defineComponent, unref, toRef } from 'vue';
-  import { BasicMenu } from '/@/components/Menu';
-  import { SimpleMenu } from '/@/components/SimpleMenu';
-  import { AppLogo } from '/@/components/Application';
+import { computed, defineComponent, unref, toRef } from 'vue';
+import { BasicMenu } from '/@/components/Menu';
+import { SimpleMenu } from '/@/components/SimpleMenu';
+import { AppLogo } from '/@/components/Application';
 
-  import { MenuModeEnum, MenuSplitTyeEnum } from '/@/enums/menuEnum';
+import { MenuModeEnum, MenuSplitTyeEnum } from '/@/enums/menuEnum';
 
-  import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-  import { ScrollContainer } from '/@/components/Container';
+import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
+import { ScrollContainer } from '/@/components/Container';
 
-  import { useGo } from '/@/hooks/web/usePage';
-  import { useSplitMenu } from './useLayoutMenu';
-  import { openWindow } from '/@/utils';
-  import { propTypes } from '/@/utils/propTypes';
-  import { isUrl } from '/@/utils/is';
-  import { useRootSetting } from '/@/hooks/setting/useRootSetting';
-  import { useAppInject } from '/@/hooks/web/useAppInject';
-  import { useDesign } from '/@/hooks/web/useDesign';
+import { useGo } from '/@/hooks/web/usePage';
+import { useSplitMenu } from './useLayoutMenu';
+import { openWindow } from '/@/utils';
+import { propTypes } from '/@/utils/propTypes';
+import { isNullOrUnDef, isUrl } from '/@/utils/is';
+import { useRootSetting } from '/@/hooks/setting/useRootSetting';
+import { useAppInject } from '/@/hooks/web/useAppInject';
+import { useDesign } from '/@/hooks/web/useDesign';
+import { getEntity } from '/@/api/tigerapi/system';
 
-  export default defineComponent({
-    name: 'LayoutMenu',
-    props: {
-      theme: propTypes.oneOf(['light', 'dark']),
+export default defineComponent({
+  name: 'LayoutMenu',
+  props: {
+    theme: propTypes.oneOf(['light', 'dark']),
 
-      splitType: {
-        type: Number as PropType<MenuSplitTyeEnum>,
-        default: MenuSplitTyeEnum.NONE,
-      },
-
-      isHorizontal: propTypes.bool,
-      // menu Mode
-      menuMode: {
-        type: [String] as PropType<MenuModeEnum | null>,
-        default: '',
-      },
+    splitType: {
+      type: Number as PropType<MenuSplitTyeEnum>,
+      default: MenuSplitTyeEnum.NONE,
     },
-    setup(props) {
-      const go = useGo();
 
-      const {
-        getMenuMode,
-        getMenuType,
-        getMenuTheme,
-        getCollapsed,
-        getCollapsedShowTitle,
-        getAccordion,
-        getIsHorizontal,
-        getIsSidebarType,
-        getSplit,
-      } = useMenuSetting();
-      const { getShowLogo } = useRootSetting();
+    isHorizontal: propTypes.bool,
+    // menu Mode
+    menuMode: {
+      type: [String] as PropType<MenuModeEnum | null>,
+      default: '',
+    },
+  },
+  setup(props) {
+    const go = useGo();
 
-      const { prefixCls } = useDesign('layout-menu');
+    const {
+      getMenuMode,
+      getMenuType,
+      getMenuTheme,
+      getCollapsed,
+      getCollapsedShowTitle,
+      getAccordion,
+      getIsHorizontal,
+      getIsSidebarType,
+      getSplit,
+    } = useMenuSetting();
+    const { getShowLogo } = useRootSetting();
 
-      const { menusRef } = useSplitMenu(toRef(props, 'splitType'));
+    const { prefixCls } = useDesign('layout-menu');
 
-      const { getIsMobile } = useAppInject();
+    const { menusRef } = useSplitMenu(toRef(props, 'splitType'));
 
-      const getComputedMenuMode = computed(() =>
-        unref(getIsMobile) ? MenuModeEnum.INLINE : props.menuMode || unref(getMenuMode),
+    const { getIsMobile } = useAppInject();
+
+    const getComputedMenuMode = computed(() =>
+      unref(getIsMobile) ? MenuModeEnum.INLINE : props.menuMode || unref(getMenuMode),
+    );
+
+    const getComputedMenuTheme = computed(() => props.theme || unref(getMenuTheme));
+
+    const getIsShowLogo = computed(() => unref(getShowLogo) && unref(getIsSidebarType));
+
+    const getUseScroll = computed(() => {
+      return (
+        !unref(getIsHorizontal) &&
+        (unref(getIsSidebarType) ||
+          props.splitType === MenuSplitTyeEnum.LEFT ||
+          props.splitType === MenuSplitTyeEnum.NONE)
       );
+    });
 
-      const getComputedMenuTheme = computed(() => props.theme || unref(getMenuTheme));
-
-      const getIsShowLogo = computed(() => unref(getShowLogo) && unref(getIsSidebarType));
-
-      const getUseScroll = computed(() => {
-        return (
-          !unref(getIsHorizontal) &&
-          (unref(getIsSidebarType) ||
-            props.splitType === MenuSplitTyeEnum.LEFT ||
-            props.splitType === MenuSplitTyeEnum.NONE)
-        );
-      });
-
-      const getWrapperStyle = computed((): CSSProperties => {
-        return {
-          height: `calc(100% - ${unref(getIsShowLogo) ? '48px' : '0px'})`,
-        };
-      });
-
-      const getLogoClass = computed(() => {
-        return [
-          `${prefixCls}-logo`,
-          unref(getComputedMenuTheme),
-          {
-            [`${prefixCls}--mobile`]: unref(getIsMobile),
-          },
-        ];
-      });
-
-      const getCommonProps = computed(() => {
-        const menus = unref(menusRef);
-        return {
-          menus,
-          beforeClickFn: beforeMenuClickFn,
-          items: menus,
-          theme: unref(getComputedMenuTheme),
-          accordion: unref(getAccordion),
-          collapse: unref(getCollapsed),
-          collapsedShowTitle: unref(getCollapsedShowTitle),
-          onMenuClick: handleMenuClick,
-        };
-      });
-      /**
-       * click menu
-       * @param menu
-       */
-
-      function handleMenuClick(path: string) {
-        if (path.split('/').length > 1 && path.split('/')[2] == 'LC') {
-          const id = { ID: path.split('/')[1] };
-          go(`/${path.split('/')[1]}/${path.split('/')[2]}/${encodeURI(JSON.stringify(id))}`);
-        } else {
-          go(path);
-        }
-      }
-
-      /**
-       * before click menu
-       * @param menu
-       */
-      async function beforeMenuClickFn(path: string) {
-        if (!isUrl(path)) {
-          return true;
-        }
-        openWindow(path);
-        return false;
-      }
-
-      function renderHeader() {
-        if (!unref(getIsShowLogo) && !unref(getIsMobile)) return null;
-
-        return (
-          <AppLogo
-            showTitle={!unref(getCollapsed)}
-            class={unref(getLogoClass)}
-            theme={unref(getComputedMenuTheme)}
-          />
-        );
-      }
-
-      function renderMenu() {
-        const { menus, ...menuProps } = unref(getCommonProps);
-        // console.log(menus);
-        if (!menus || !menus.length) return null;
-        return !props.isHorizontal ? (
-          <SimpleMenu {...menuProps} isSplitMenu={unref(getSplit)} items={menus} />
-        ) : (
-          <BasicMenu
-            {...(menuProps as any)}
-            isHorizontal={props.isHorizontal}
-            type={unref(getMenuType)}
-            showLogo={unref(getIsShowLogo)}
-            mode={unref(getComputedMenuMode as any)}
-            items={menus}
-          />
-        );
-      }
-
-      return () => {
-        return (
-          <>
-            {renderHeader()}
-            {unref(getUseScroll) ? (
-              <ScrollContainer style={unref(getWrapperStyle)}>{() => renderMenu()}</ScrollContainer>
-            ) : (
-              renderMenu()
-            )}
-          </>
-        );
+    const getWrapperStyle = computed((): CSSProperties => {
+      return {
+        height: `calc(100% - ${unref(getIsShowLogo) ? '48px' : '0px'})`,
       };
-    },
-  });
-</script>
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-layout-menu';
-  @logo-prefix-cls: ~'@{namespace}-app-logo';
+    });
 
-  .@{prefix-cls} {
-    &-logo {
-      height: @header-height;
-      padding: 10px 4px 10px 10px;
+    const getLogoClass = computed(() => {
+      return [
+        `${prefixCls}-logo`,
+        unref(getComputedMenuTheme),
+        {
+          [`${prefixCls}--mobile`]: unref(getIsMobile),
+        },
+      ];
+    });
 
-      img {
-        width: 150px; //@logo-width;
-        height: @logo-width;
+    const getCommonProps = computed(() => {
+      const menus = unref(menusRef);
+      return {
+        menus,
+        beforeClickFn: beforeMenuClickFn,
+        items: menus,
+        theme: unref(getComputedMenuTheme),
+        accordion: unref(getAccordion),
+        collapse: unref(getCollapsed),
+        collapsedShowTitle: unref(getCollapsedShowTitle),
+        onMenuClick: handleMenuClick,
+      };
+    });
+    /**
+     * click menu
+     * @param menu
+     */
+
+    function handleMenuClick(path: string) {
+      if (path.split('/').length > 2 && path.split('/')[2] == 'LC') {
+        getEntity({
+          sqlcmd: `ASSEMBLY_NAME ='${path.split('/')[1]}'`,
+          entityName: 'SYS_LOW_CODE',
+        }).then((data) => {
+          var searchForms = JSON.parse(data.Data.Items[0].SEARCH_FORM_JSON);
+          let colSlots = [] as string[];
+          for (const i in searchForms) {
+            if (!isNullOrUnDef(searchForms[i]['colSlot'])) {
+              colSlots.push('form-' + searchForms[i]['colSlot']);
+            }
+          }
+
+          var _cruds = JSON.parse(data.Data.Items[0].FORM_JSON);
+          let crudColSlots = [] as string[];
+          for (const i in _cruds) {
+            if (!isNullOrUnDef(_cruds[i]['colSlot'])) {
+              crudColSlots.push(_cruds[i]['colSlot']);
+            }
+          }
+          const id = { ID: path.split('/')[1], colSlots: colSlots, crudColSlots: crudColSlots };
+          go(`/${path.split('/')[1]}/${path.split('/')[2]}/${encodeURI(JSON.stringify(id))}`);
+        });
+      } else if (path.split('/').length > 2 && path.split('/')[2] == 'High') {
+        const id = { Name: path.split('/')[1] };
+        go(`/${path.split('/')[1]}/${path.split('/')[2]}/${encodeURI(JSON.stringify(id))}`);
+      } else {
+        go(path);
       }
     }
 
-    &--mobile {
-      .@{logo-prefix-cls} {
-        &__title {
-          opacity: 1;
-        }
+    /**
+     * before click menu
+     * @param menu
+     */
+    async function beforeMenuClickFn(path: string) {
+      if (!isUrl(path)) {
+        return true;
+      }
+      openWindow(path);
+      return false;
+    }
+
+    function renderHeader() {
+      if (!unref(getIsShowLogo) && !unref(getIsMobile)) return null;
+
+      return (
+        <AppLogo
+          showTitle={!unref(getCollapsed)}
+          class={unref(getLogoClass)}
+          theme={unref(getComputedMenuTheme)}
+        />
+      );
+    }
+
+    function renderMenu() {
+      const { menus, ...menuProps } = unref(getCommonProps);
+      // console.log(menus);
+      if (!menus || !menus.length) return null;
+      return !props.isHorizontal ? (
+        <SimpleMenu {...menuProps} isSplitMenu={unref(getSplit)} items={menus} />
+      ) : (
+        <BasicMenu
+          {...(menuProps as any)}
+          isHorizontal={props.isHorizontal}
+          type={unref(getMenuType)}
+          showLogo={unref(getIsShowLogo)}
+          mode={unref(getComputedMenuMode as any)}
+          items={menus}
+        />
+      );
+    }
+
+    return () => {
+      return (
+        <>
+          {renderHeader()}
+          {unref(getUseScroll) ? (
+            <ScrollContainer style={unref(getWrapperStyle)}>{() => renderMenu()}</ScrollContainer>
+          ) : (
+            renderMenu()
+          )}
+        </>
+      );
+    };
+  },
+});
+</script>
+<style lang="less">
+@prefix-cls: ~'@{namespace}-layout-menu';
+@logo-prefix-cls: ~'@{namespace}-app-logo';
+
+.@{prefix-cls} {
+  &-logo {
+    height: @header-height;
+    padding: 10px 4px 10px 10px;
+
+    img {
+      width: 150px; //@logo-width;
+      height: @logo-width;
+    }
+  }
+
+  &--mobile {
+    .@{logo-prefix-cls} {
+      &__title {
+        opacity: 1;
       }
     }
   }
+}
 </style>

--
Gitblit v1.9.3