@dt-frames/ui 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/package.json +1 -10
  2. package/src/assets/data/icons/actions.ts +0 -427
  3. package/src/assets/data/icons/code.ts +0 -10
  4. package/src/assets/data/icons/commuticate.ts +0 -190
  5. package/src/assets/data/icons/currency.ts +0 -46
  6. package/src/assets/data/icons/devices.ts +0 -128
  7. package/src/assets/data/icons/edit.ts +0 -165
  8. package/src/assets/data/icons/file.ts +0 -104
  9. package/src/assets/data/icons/math.ts +0 -53
  10. package/src/assets/data/icons/message.ts +0 -75
  11. package/src/assets/data/icons/navigate.ts +0 -181
  12. package/src/assets/data/icons/other.ts +0 -333
  13. package/src/assets/data/icons.ts +0 -58
  14. package/src/assets/imgs/logo/logo.png +0 -0
  15. package/src/assets/locales/en_US.json +0 -3
  16. package/src/assets/locales/zh_CN.json +0 -3
  17. package/src/assets/style/index.less +0 -10
  18. package/src/assets/style/reset.less +0 -20
  19. package/src/components/container/index.less +0 -85
  20. package/src/components/container/index.ts +0 -8
  21. package/src/components/container/src/bar.ts +0 -107
  22. package/src/components/container/src/lazy-container.vue +0 -9
  23. package/src/components/container/src/scroll-bar.vue +0 -117
  24. package/src/components/container/src/scroll-container.vue +0 -61
  25. package/src/components/curd/index.ts +0 -5
  26. package/src/components/curd/src/components/dialog.vue +0 -65
  27. package/src/components/curd/src/components/props.ts +0 -32
  28. package/src/components/curd/src/hooks/useCurd.tsx +0 -72
  29. package/src/components/curd/src/types/curd.type.ts +0 -29
  30. package/src/components/excel/index.ts +0 -6
  31. package/src/components/excel/src/export2Excel.ts +0 -44
  32. package/src/components/forms/index.ts +0 -12
  33. package/src/components/forms/src/componentMap.ts +0 -44
  34. package/src/components/forms/src/components/formButton.vue +0 -150
  35. package/src/components/forms/src/components/formIcon.vue +0 -50
  36. package/src/components/forms/src/components/formItem.vue +0 -407
  37. package/src/components/forms/src/components/radioButton.vue +0 -58
  38. package/src/components/forms/src/const/form.const.ts +0 -7
  39. package/src/components/forms/src/hooks/helper.ts +0 -70
  40. package/src/components/forms/src/hooks/useForm.ts +0 -130
  41. package/src/components/forms/src/hooks/useFormActions.ts +0 -63
  42. package/src/components/forms/src/hooks/useFormEvents.ts +0 -247
  43. package/src/components/forms/src/hooks/useFormValue.ts +0 -49
  44. package/src/components/forms/src/hooks/useFormValues.ts +0 -131
  45. package/src/components/forms/src/hooks/useLabelWidth.ts +0 -57
  46. package/src/components/forms/src/index.less +0 -82
  47. package/src/components/forms/src/index.vue +0 -306
  48. package/src/components/forms/src/prop.ts +0 -80
  49. package/src/components/forms/src/types/form.type.ts +0 -269
  50. package/src/components/icons/index.ts +0 -7
  51. package/src/components/icons/src/index.less +0 -96
  52. package/src/components/icons/src/pick-icon.vue +0 -117
  53. package/src/components/icons/src/svg-icon.vue +0 -117
  54. package/src/components/iframe/index.ts +0 -5
  55. package/src/components/iframe/src/index.less +0 -3
  56. package/src/components/iframe/src/index.vue +0 -38
  57. package/src/components/index.ts +0 -46
  58. package/src/components/modal/index.ts +0 -8
  59. package/src/components/modal/src/components/close-icon.vue +0 -47
  60. package/src/components/modal/src/components/modal-wrap.vue +0 -118
  61. package/src/components/modal/src/components/modal.tsx +0 -30
  62. package/src/components/modal/src/components/modalFooter.vue +0 -38
  63. package/src/components/modal/src/hooks/useDrag.ts +0 -107
  64. package/src/components/modal/src/hooks/useFullScreen.ts +0 -27
  65. package/src/components/modal/src/hooks/useModal.ts +0 -177
  66. package/src/components/modal/src/index.less +0 -60
  67. package/src/components/modal/src/index.vue +0 -173
  68. package/src/components/modal/src/props.ts +0 -43
  69. package/src/components/modal/src/types/modal.type.ts +0 -27
  70. package/src/components/router/base-router.vue +0 -11
  71. package/src/components/router/index.ts +0 -3
  72. package/src/components/source/index.ts +0 -1
  73. package/src/components/source/src/hooks/useFetch.ts +0 -70
  74. package/src/components/source/src/hooks/usePage.ts +0 -3
  75. package/src/components/source/src/hooks/useSource.ts +0 -178
  76. package/src/components/source/src/index.ts +0 -5
  77. package/src/components/source/src/types/source.type.ts +0 -68
  78. package/src/components/source/src/types/table.type.ts +0 -8
  79. package/src/components/table/index.ts +0 -7
  80. package/src/components/table/src/components/TableActions.vue +0 -108
  81. package/src/components/table/src/components/TableHeader.vue +0 -77
  82. package/src/components/table/src/components/TableRender.vue +0 -76
  83. package/src/components/table/src/components/setting/Column.vue +0 -355
  84. package/src/components/table/src/components/setting/Download.vue +0 -55
  85. package/src/components/table/src/components/setting/Fullscreen.vue +0 -43
  86. package/src/components/table/src/components/setting/Size.vue +0 -42
  87. package/src/components/table/src/components/setting/index.vue +0 -64
  88. package/src/components/table/src/const.ts +0 -13
  89. package/src/components/table/src/hooks/useColumns.ts +0 -319
  90. package/src/components/table/src/hooks/useCustomRow.ts +0 -0
  91. package/src/components/table/src/hooks/useDataSource.ts +0 -99
  92. package/src/components/table/src/hooks/useLoading.ts +0 -29
  93. package/src/components/table/src/hooks/usePagination.ts +0 -76
  94. package/src/components/table/src/hooks/useRowSelection.ts +0 -146
  95. package/src/components/table/src/hooks/useRows.ts +0 -30
  96. package/src/components/table/src/hooks/useTable.ts +0 -77
  97. package/src/components/table/src/hooks/useTableHeader.ts +0 -48
  98. package/src/components/table/src/hooks/useTableInstance.ts +0 -29
  99. package/src/components/table/src/hooks/useTableScroll.ts +0 -227
  100. package/src/components/table/src/index.less +0 -162
  101. package/src/components/table/src/index.vue +0 -198
  102. package/src/components/table/src/props.ts +0 -152
  103. package/src/components/table/src/types/table.type.ts +0 -133
  104. package/src/components/table/src/types/tableHeader.type.ts +0 -27
  105. package/src/components/type.ts +0 -0
  106. package/src/directives/icon.ts +0 -36
  107. package/src/directives/index.ts +0 -26
  108. package/src/directives/permission.ts +0 -21
  109. package/src/global.d.ts +0 -8
  110. package/src/index.ts +0 -4
  111. package/src/theme/content/index.vue +0 -37
  112. package/src/theme/feature/back-top.vue +0 -11
  113. package/src/theme/feature/index.vue +0 -7
  114. package/src/theme/footer/index.less +0 -16
  115. package/src/theme/footer/index.vue +0 -24
  116. package/src/theme/header/components/bread-crumb.vue +0 -26
  117. package/src/theme/header/components/fullscreen.vue +0 -14
  118. package/src/theme/header/components/handler.ts +0 -81
  119. package/src/theme/header/components/index.ts +0 -21
  120. package/src/theme/header/components/lang-picker.vue +0 -36
  121. package/src/theme/header/components/logo.vue +0 -33
  122. package/src/theme/header/components/menu-search.vue +0 -62
  123. package/src/theme/header/components/notify.vue +0 -23
  124. package/src/theme/header/components/setting-theme.vue +0 -123
  125. package/src/theme/header/components/theme-drawer/enum.ts +0 -12
  126. package/src/theme/header/components/theme-drawer/feature.vue +0 -75
  127. package/src/theme/header/components/theme-drawer/index.ts +0 -7
  128. package/src/theme/header/components/theme-drawer/menu-type.vue +0 -40
  129. package/src/theme/header/components/theme-drawer/select-item.vue +0 -46
  130. package/src/theme/header/components/theme-drawer/switch-item.vue +0 -39
  131. package/src/theme/header/components/theme-drawer/theme-color.vue +0 -26
  132. package/src/theme/header/components/trigger.vue +0 -14
  133. package/src/theme/header/components/user-info.vue +0 -43
  134. package/src/theme/header/const/index.ts +0 -40
  135. package/src/theme/header/helper/menu-tree.ts +0 -67
  136. package/src/theme/header/index.less +0 -438
  137. package/src/theme/header/index.ts +0 -0
  138. package/src/theme/header/index.vue +0 -96
  139. package/src/theme/header/multiple-header.vue +0 -67
  140. package/src/theme/header/set-theme.less +0 -68
  141. package/src/theme/index.ts +0 -3
  142. package/src/theme/sider/components/basic-menu/basic-menu-item.vue +0 -14
  143. package/src/theme/sider/components/basic-menu/basic-menu.vue +0 -122
  144. package/src/theme/sider/components/basic-menu/basic-sub-menu-item.vue +0 -46
  145. package/src/theme/sider/components/basic-menu/menu-item-content.vue +0 -13
  146. package/src/theme/sider/components/drag-bar.vue +0 -26
  147. package/src/theme/sider/components/layout-menu.vue +0 -132
  148. package/src/theme/sider/components/props.ts +0 -97
  149. package/src/theme/sider/components/sider-trigger.vue +0 -24
  150. package/src/theme/sider/helper/sider.ts +0 -52
  151. package/src/theme/sider/helper/split-menu.ts +0 -147
  152. package/src/theme/sider/hooks/useDragLine.ts +0 -86
  153. package/src/theme/sider/hooks/useOpenKeys.ts +0 -57
  154. package/src/theme/sider/index.less +0 -203
  155. package/src/theme/sider/index.vue +0 -88
  156. package/src/theme/tabs/components/TabContent.vue +0 -37
  157. package/src/theme/tabs/components/TabRedo.vue +0 -18
  158. package/src/theme/tabs/hooks/useMultifyTabs.ts +0 -96
  159. package/src/theme/tabs/hooks/useTabDropdown.ts +0 -89
  160. package/src/theme/tabs/index.less +0 -165
  161. package/src/theme/tabs/index.vue +0 -98
  162. package/src/theme/tabs/types/tabs.type.ts +0 -8
  163. package/src/theme/theme.less +0 -66
  164. package/src/theme/theme.vue +0 -89
  165. package/src/theme/transition.less +0 -99
@@ -1,122 +0,0 @@
1
- <template>
2
- <Menu
3
- :theme="theme"
4
- :selectedKeys="menuState.selectedKeys"
5
- :defaultSelectedKeys="menuState.defaultSelectedKeys"
6
- :openKeys="menuState.openKeys"
7
- :inlineIndent="inlineIndent"
8
- :subMenuOpenDelay="0.2"
9
- :mode="mode"
10
- collapsible
11
- @click="handleMenuClick"
12
- @open-change="handleOpenChange"
13
- :collapsed="getInlineCollapsed"
14
- >
15
- <template v-for="item in items" :key="item.id">
16
- <BasicSubMenuItem :item="item" :theme="theme" :isHorizontal="isHorizontal" />
17
- </template>
18
- </Menu>
19
- </template>
20
-
21
- <script setup lang="ts">
22
- import { isFunction, MenuMode, useMenu } from '@dt-frames/core';
23
- import { Menu } from 'ant-design-vue';
24
- import { computed, ref, unref, VNodeChild, watch, reactive, toRefs } from 'vue';
25
- import { useRouter } from 'vue-router';
26
- import { getBreadCrumb } from '../../../header/helper/menu-tree';
27
- import { BasicMenu } from '../props';
28
- import BasicSubMenuItem from './basic-sub-menu-item.vue'
29
- import { MenuState, useOpenKeys } from '../../hooks/useOpenKeys'
30
-
31
- type MenuInfo = {
32
- key: string;
33
- keyPath: string[]
34
- item: VNodeChild
35
- }
36
-
37
- const {
38
- theme,
39
- items,
40
- mode,
41
- type,
42
- isHorizontal,
43
- inlineIndent,
44
- mixSider,
45
- beforeClickFn
46
- } = defineProps( BasicMenu );
47
-
48
- const { getSplit } = useMenu()
49
-
50
- const { currentRoute } = useRouter();
51
-
52
- const menuState = reactive<MenuState>({
53
- defaultSelectedKeys: [],
54
- openKeys: [],
55
- selectedKeys: [],
56
- collapsedOpenKeys: []
57
- })
58
-
59
- const { handleOpenChange, setOpenKeys, getOpenKeys } = useOpenKeys(
60
- menuState,
61
- items,
62
- type
63
- )
64
-
65
- watch(
66
- () => currentRoute.value.path,
67
- (val) => {
68
- if( val === '/' ) return;
69
- handleMenuChange(val)
70
- },
71
- {
72
- immediate: true
73
- }
74
- )
75
-
76
- async function handleMenuChange(path) {
77
- // 设置展开的节点
78
- setOpenKeys(path)
79
-
80
- // 定义选中的节点
81
- if (isHorizontal && unref(getSplit)) {
82
- console.log(items, path)
83
- const parentPath = await getBreadCrumb(path, items);
84
- // console.log(parentPath, '-------------', route)
85
- // menuState.selectedKeys = [parentPath];
86
- } else {
87
- const parentPaths = await getBreadCrumb(path);
88
-
89
- menuState.selectedKeys = parentPaths.reduce( (keys, it) => {
90
- it.url && keys.push( it.url )
91
- return keys
92
- }, [] )
93
- }
94
-
95
- }
96
-
97
-
98
- const emits = defineEmits(['menuClick'])
99
-
100
- const { getCollapsed } = useMenu();
101
- const getInlineCollapsed = computed( () => {
102
- const isInline = unref(mode) === MenuMode.INLINE;
103
-
104
- if (isInline) {
105
- return mixSider ? false : unref(getCollapsed);
106
- }
107
-
108
- return false;
109
-
110
- } )
111
-
112
- async function handleMenuClick(item: MenuInfo) {
113
- if (beforeClickFn && isFunction(beforeClickFn)) {
114
- const flag = await beforeClickFn(item.key);
115
- if (!flag) return;
116
- }
117
-
118
- emits('menuClick', item.key);
119
-
120
- menuState.selectedKeys = [item.key];
121
- }
122
- </script>
@@ -1,46 +0,0 @@
1
- <template>
2
- <!-- 没有子节点 -->
3
- <BasicMenuItem v-if="!menuHasChildren(item) && getShowMenu" v-bind="props"/>
4
-
5
- <!-- 有子节点 -->
6
- <SubMenu
7
- v-if="menuHasChildren(item) && getShowMenu"
8
- :class="[ theme ]"
9
- :key="item.id"
10
- popupClassName="app-top-menu-popup"
11
- >
12
- <template #title>
13
- <MenuItemContent
14
- v-bind="props"
15
- :item="item" />
16
- </template>
17
-
18
- <template v-for="childrenItem in item.children" :key="childrenItem.id">
19
- <BasicSubMenuItem v-bind="props" :item="childrenItem" />
20
- </template>
21
- </SubMenu>
22
- </template>
23
-
24
- <script setup lang="ts">
25
- import { SubMenu } from 'ant-design-vue';
26
- import { useMenu } from '@dt-frames/core';
27
- import BasicMenuItem from './basic-menu-item.vue';
28
- import MenuItemContent from './menu-item-content.vue';
29
- import { ItemProp } from '../props';
30
-
31
-
32
- const { getShowMenu } = useMenu();
33
-
34
- const props = defineProps(ItemProp);
35
- const {
36
- theme,
37
- item,
38
- showTitle,
39
- isHorizontal
40
- } = props;
41
-
42
-
43
- const menuHasChildren = ( menu: any ) => {
44
- return !!menu.children && menu.children.length > 0;
45
- }
46
- </script>
@@ -1,13 +0,0 @@
1
- <template>
2
- <span class="dt-basic-menu-item-content-flex items-center dt-menu-item">
3
- <span class="menu-icon" v-icon="item.icon" :fontSize="16"></span>
4
- {{ item.label }}
5
- </span>
6
- </template>
7
-
8
- <script setup lang="ts">
9
- import { contentProps } from "../props";
10
-
11
- const props = defineProps( contentProps );
12
-
13
- </script>
@@ -1,26 +0,0 @@
1
- <template>
2
- <div :class="getClass" :style="getDragBarStyle"></div>
3
- </template>
4
-
5
- <script lang="ts" setup>
6
- import { computed, unref } from 'vue'
7
- import { useMenu } from '@dt-frames/core';
8
-
9
- const { getMiniWidthNumber, getCollapsed, getCanDrag } = useMenu()
10
-
11
- const getDragBarStyle = computed(() => {
12
- if( unref(getCollapsed) ) {
13
- return { left: `${unref(getMiniWidthNumber)}px` }
14
- }
15
- return {}
16
- })
17
-
18
- const getClass = computed(() => {
19
- return [
20
- 'dt-darg-bar',
21
- {
22
- 'dt-darg-bar--hide': !unref(getCanDrag)
23
- }
24
- ]
25
- })
26
- </script>
@@ -1,132 +0,0 @@
1
-
2
-
3
- <script lang="tsx">
4
- import { computed, defineComponent, toRef, unref } from "vue"
5
- import { isUrl, MenuSplitTye, useMenu, useTheme, openWindow, useGo } from "@dt-frames/core"
6
- import { useSplitMenu } from "../helper/split-menu"
7
- import { DtLogo } from "../../header/components";
8
- import BasicMenu from './basic-menu/basic-menu.vue'
9
- import { ScrollContainer } from "../../../components/container";
10
-
11
-
12
- export default defineComponent({
13
- name: 'LayoutMenu',
14
-
15
- props: {
16
- theme: String,
17
- splitType: {
18
- type: Number,
19
- default: MenuSplitTye.NONE,
20
- },
21
- isHorizontal: Boolean,
22
- menuMode: String
23
- },
24
-
25
- setup(props) {
26
- const {
27
- getMenuType,
28
- getMenuMode,
29
- getMenuTheme,
30
- getCollapsed,
31
- getCollapsedShowTitle,
32
- getIsHorizontal,
33
- getIsSidebarType,
34
- getSplit
35
- } = useMenu();
36
-
37
- const { getShowLogo } = useTheme();
38
-
39
- const { menusRef } = useSplitMenu( toRef(props, 'splitType') );
40
-
41
- // 菜单的相关属性
42
- const getComputedTheme = computed( () => props.theme || unref( getMenuTheme ) );
43
- const getComputedMenuMode = computed(() => props.menuMode || unref(getMenuMode) );
44
- const getIsShowLogo = computed(() => unref(getShowLogo) && unref(getIsSidebarType));
45
-
46
- const getUseScroll = computed(() => {
47
- return (
48
- !unref(getIsHorizontal) &&
49
- (unref(getIsSidebarType) ||
50
- props.splitType === MenuSplitTye.LEFT ||
51
- props.splitType === MenuSplitTye.NONE)
52
- );
53
- });
54
-
55
- const getLogoClass = computed(() => [ `dt-menu-logo`, unref(getComputedTheme) ]);
56
-
57
- const getMenuProps = computed( () => {
58
- const menus = unref( menusRef );
59
-
60
- return {
61
- menus,
62
- beforeClickFn: beforeMenuClickFn,
63
- items: menus,
64
- theme: unref( getComputedTheme ),
65
- collapse: unref( getCollapsed ),
66
- collapsedShowTitle: unref( getCollapsedShowTitle ),
67
- onMenuClick: handleMenuClick,
68
- }
69
- } );
70
-
71
- // 跳转到指定页面
72
- const go = useGo();
73
-
74
- // 跳转之前需要做检测,部分系统需要跳转到第三方系统
75
- function beforeMenuClickFn( path: string ) {
76
- if (!isUrl(path)) {
77
- return true;
78
- }
79
-
80
- openWindow(path);
81
- return false;
82
- }
83
-
84
- // 按钮点击事件
85
- function handleMenuClick( path: string ) {
86
- go(path);
87
- }
88
-
89
-
90
- function renderHeader() {
91
- if( !unref(getIsShowLogo) ) return null;
92
-
93
- return (
94
- <DtLogo
95
- showTitle={!unref(getCollapsed)}
96
- class={unref(getLogoClass)}
97
- theme={unref(getComputedTheme) as string}
98
- />
99
- )
100
- }
101
-
102
- function renderMenu( ) {
103
- const { menus, ...menuProps } = unref( getMenuProps );
104
-
105
- if (!menus || !menus.length) return null;
106
-
107
- return <BasicMenu
108
- {...(menuProps as any)}
109
- isHorizontal={props.isHorizontal}
110
- type={unref(getMenuType)}
111
- showLogo={unref(getIsShowLogo)}
112
- mode={unref(getComputedMenuMode as any)}
113
- items={menus}
114
- ></BasicMenu>
115
- }
116
-
117
- return () => {
118
- return (
119
- <>
120
- { (renderHeader()) }
121
- {unref(getUseScroll) ? (
122
- <ScrollContainer>{() => renderMenu()}</ScrollContainer>
123
- ) : (
124
- renderMenu()
125
- )}
126
- </>
127
- )
128
- }
129
-
130
- }
131
- })
132
- </script>
@@ -1,97 +0,0 @@
1
-
2
- import { MenuTheme } from "ant-design-vue";
3
- import { PropType } from "vue";
4
- import { MenuMode, Menus, MenuType, Theme } from "@dt-frames/core";
5
-
6
- export const BasicMenu = {
7
- // 菜单
8
- items: {
9
- type: Array as PropType<Menus[]>
10
- },
11
-
12
- // 折叠是否显示标题
13
- collapsedShowTitle: Boolean,
14
-
15
- inlineIndent: {
16
- default: 20
17
- },
18
-
19
- // 菜单组件的mode属性
20
- mode: {
21
- type: String as PropType<MenuMode>,
22
- default: MenuMode.INLINE
23
- },
24
-
25
- // 菜单类型
26
- type: {
27
- type: String,
28
- default: MenuType.SIDE
29
- },
30
-
31
- // 主题
32
- theme: {
33
- default: Theme.DARK,
34
- },
35
-
36
- inlineCollapsed: Boolean,
37
-
38
- isHorizontal: Boolean,
39
-
40
- beforeClickFn: {
41
- type: Function
42
- },
43
-
44
- mixSider: Boolean
45
- }
46
-
47
- export const ItemProp = {
48
- item: {
49
- type: Object,
50
- default: {}
51
- },
52
-
53
- theme: {
54
- type: String as PropType<MenuTheme>,
55
- default: Theme.DARK
56
- },
57
-
58
- isHorizontal: Boolean,
59
-
60
- showTitle: Boolean,
61
-
62
- beforeClickFn: {
63
- type: Function
64
- }
65
- }
66
-
67
- export const contentProps = {
68
- item: {
69
- type: Object,
70
- default: {},
71
- },
72
-
73
- showTitle: Boolean,
74
-
75
- level: Number,
76
-
77
- isHorizontal: Boolean
78
- };
79
-
80
- export const SimpleMenu = {
81
- // 菜单
82
- items: {
83
- type: Array as PropType<MenuType[]>,
84
- default: (): any[] => []
85
- },
86
-
87
- collapse: Boolean,
88
- mixSider: Boolean,
89
- theme: {
90
- default: Theme.DARK
91
- },
92
- collapsedShowTitle: Boolean,
93
- beforeClickFn: {
94
- type: Function
95
- },
96
- isSplitMenu: Boolean
97
- }
@@ -1,24 +0,0 @@
1
- <template>
2
- <div @click.stop="toggleCollapsed">
3
- <DtIcon icon-class="ant-design:double-right-outlined" v-if="getCollapsed" />
4
- <DtIcon icon-class="ant-design:double-left-outlined" v-else />
5
- </div>
6
- </template>
7
-
8
- <script setup lang="ts">
9
- import { useMenu } from '@dt-frames/core';
10
- import { DtIcon } from '../../../components';
11
-
12
-
13
- const { getCollapsed, toggleCollapsed } = useMenu();
14
-
15
- const props = defineProps({
16
- type: {
17
- type: String,
18
- default: null
19
- }
20
- })
21
-
22
-
23
-
24
- </script>
@@ -1,52 +0,0 @@
1
- /**
2
- * 这是layout-sider相关的业务处理
3
- * 函数命名已use开头
4
- */
5
-
6
- import { MenuTriggerPos, useMenu } from "@dt-frames/core";
7
- import { computed, h, ref, unref } from "vue";
8
- import Trigger from '../components/sider-trigger.vue'
9
-
10
-
11
- // 菜单展开折叠切换
12
- export function useMenuSwitch() {
13
- const brokenRef = ref( false );
14
-
15
- const { getMiniWidthNumber } = useMenu();
16
-
17
- const getCollapsedWidth = computed( () => {
18
- return unref( brokenRef ) ? 0 : unref( getMiniWidthNumber );
19
- } );
20
-
21
- function onBreakPointChange( broken: boolean ) {
22
- brokenRef.value = broken;
23
- }
24
-
25
- return { getCollapsedWidth, onBreakPointChange };
26
- }
27
-
28
-
29
- // 处理菜单展开折叠按钮
30
- export function useTrigger() {
31
- const { getTrigger, getSplit } = useMenu();
32
-
33
- const getShowTrigger = computed(() => {
34
- const trigger = unref(getTrigger) as unknown as String;
35
-
36
- return trigger && unref( getSplit )
37
- });
38
-
39
- const getTriggerAttr = computed(() => {
40
- if( unref(getShowTrigger) ) {
41
- return { }
42
- }
43
-
44
- return {
45
- trigger: null
46
- }
47
- });
48
-
49
- return { getTriggerAttr, getShowTrigger };
50
- }
51
-
52
-
@@ -1,147 +0,0 @@
1
- /** ======================================================
2
- * 菜单分割管理
3
- * ======================================================*/
4
-
5
- import { ref, computed, unref, watch, Ref } from "vue";
6
- import { useRouter } from "vue-router";
7
- import { useThrottleFn } from '@vueuse/core';
8
- import { CacheKey, DtCache, Menus, MenuSplitTye, useAuthStore, useMenu } from "@dt-frames/core";
9
-
10
- type MenusMap = {
11
- parentPath?: string,
12
- children?: MenusMap[] | undefined,
13
- includesPath?: string[]
14
- }
15
-
16
- export function useSplitMenu( splitType: Ref<MenuSplitTye> ) {
17
- const menusRef = ref<MenusMap[]>([]);
18
- const { currentRoute } = useRouter();
19
-
20
-
21
- const { getIsHorizontal, getSplit } = useMenu();
22
-
23
- const throttleHandleSplitLeftMenu = useThrottleFn(handleSplitLeftMenu, 50);
24
-
25
- const splitNotLeft = computed(
26
- () => unref(splitType) !== MenuSplitTye.LEFT && !unref(getIsHorizontal),
27
- );
28
-
29
- const getSplitLeft = computed(
30
- () => !unref( getSplit ) || unref(splitType) !== MenuSplitTye.LEFT
31
- );
32
-
33
- const getSplitTop = computed(
34
- () => unref( splitType ) === MenuSplitTye.TOP
35
- );
36
-
37
- const normalType = computed(
38
- () => !unref( getSplit ) || unref(splitType) === MenuSplitTye.NONE
39
- );
40
-
41
- watch(
42
- [() => (unref(currentRoute) as any).path, () => unref(splitType)],
43
- async ([path]) => {
44
- if (unref(splitNotLeft)) return;
45
-
46
- throttleHandleSplitLeftMenu(path);
47
- },
48
- {
49
- immediate: true,
50
- },
51
- )
52
-
53
- watch(
54
- () => getSplit.value,
55
- () => {
56
- if (unref(splitNotLeft)) return;
57
- getMenus();
58
- },
59
- );
60
-
61
- async function handleSplitLeftMenu(path: string) {
62
- if (unref(getSplitLeft)) return;
63
- const { menusMap } = await getMenusMap();
64
-
65
- menusRef.value = menusMap.filter( it => it.includesPath.includes(path) )[0]?.children
66
- }
67
-
68
- async function getMenus() {
69
- if (unref(normalType)) {
70
- const { getMenus } = useAuthStore()
71
- menusRef.value = getMenus
72
- return;
73
- }
74
-
75
- if (unref(getSplitTop)) {
76
- const shallowMenus = await getShallowMenus();
77
-
78
- menusRef.value = shallowMenus;
79
- return;
80
- }
81
- }
82
-
83
- getMenus();
84
-
85
- return { menusRef };
86
- }
87
-
88
-
89
- async function getMenus() { return DtCache.getLocal(CacheKey.MENUS) }
90
-
91
- function getFirstMenuPath(item: Menus) {
92
- let isFind = false, path = ''
93
-
94
- const getPath = (menu: Menus) => {
95
- if( isFind ) return
96
-
97
- if( menu.children && menu.children.length ) {
98
- menu.children.forEach( node => getPath( node ) )
99
- } else {
100
- path = menu.url
101
- isFind = true
102
- }
103
- }
104
-
105
- getPath(item)
106
-
107
- return path
108
- }
109
-
110
- // 获取菜单地图
111
- async function getMenusMap() {
112
- const menus = await getMenus();
113
- const menusMap: MenusMap[] = [];
114
-
115
- const getPaths = ( menu: Menus, path: string[] ) => {
116
- if( menu.children && menu.children.length ) {
117
- menu.children.forEach( node => getPaths( node, path ) )
118
- } else {
119
- path.push( menu.url )
120
- }
121
-
122
- return path;
123
- }
124
-
125
- menus.map((item: Menus) => {
126
- item.url = getFirstMenuPath(item);
127
-
128
- menusMap.push({
129
- parentPath: item.url,
130
- children: item.children || [],
131
- includesPath: getPaths( item, [] )
132
- })
133
- });
134
-
135
- return { menusMap };
136
- }
137
-
138
-
139
- export async function getShallowMenus() {
140
- const menus = await getMenus();
141
-
142
- const shallowMenuList = menus.map((item: Menus) => {
143
- item.url = getFirstMenuPath(item);
144
- return { ...item, children: undefined } as any
145
- });
146
- return shallowMenuList;
147
- }