@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,86 +0,0 @@
1
- import { Ref, onMounted, nextTick, unref } from "vue"
2
- import { useMenu } from '@dt-frames/core'
3
- import { useDebounceFn } from '@vueuse/core'
4
-
5
- // 菜单宽度拖拽
6
- export function useDragLine(siderRef: Ref<any>, dragBarRef: Ref<any>) {
7
- const { getMiniWidthNumber, getCollapsed, setThemeStore } = useMenu()
8
-
9
- onMounted(() => {
10
- nextTick(() => {
11
- const exec = useDebounceFn(changeWrapWidth, 80)
12
- exec()
13
- })
14
- })
15
-
16
- function getEl(elRef: Ref<any>) {
17
- const el = unref(elRef)
18
- if (!el) return null
19
-
20
- if (Reflect.has(el, '$el')) {
21
- return unref(elRef)?.$el
22
- }
23
-
24
- return unref(elRef)
25
- }
26
-
27
- function handleMouseMove(ele: HTMLElement, wrap: HTMLElement, clientX: number) {
28
- document.onmousemove = function (innerE: any) {
29
- innerE = innerE || window.event
30
- let iT = (ele as any).left + (innerE.clientX - clientX)
31
-
32
- const maxT = 800
33
- const minT = unref(getMiniWidthNumber)
34
-
35
- iT < 0 && (iT = 0)
36
- iT > maxT && (iT = maxT)
37
- iT < minT && (iT = minT)
38
-
39
- ele.style.left = wrap.style.width = iT + 'px'
40
- return false
41
- }
42
- }
43
-
44
- function removeMouseup(ele: any) {
45
- const wrap = getEl(siderRef)
46
-
47
- document.onmouseup = function () {
48
- document.onmousemove = null
49
- document.onmouseup = null
50
-
51
- wrap.style.transition = 'width 0.2s'
52
- const width = parseInt(wrap.style.width)
53
-
54
- setThemeStore({
55
- menuOptions: {
56
- menuWidth: width
57
- }
58
- })
59
-
60
- ele.releaseCapture?.()
61
- }
62
- }
63
-
64
- function changeWrapWidth() {
65
- const ele = getEl(dragBarRef)
66
- if (!ele) return
67
-
68
- const wrap = getEl(siderRef)
69
- if (!wrap) return
70
-
71
- ele.onmousedown = (e: any) => {
72
- wrap.style.transition = 'unset'
73
- const clientX = e?.clientX
74
-
75
- ele.left = ele.offsetLeft
76
-
77
- handleMouseMove(ele, wrap, clientX)
78
- removeMouseup(ele)
79
-
80
- ele.setCapture?.()
81
-
82
- return false
83
- }
84
-
85
- }
86
- }
@@ -1,57 +0,0 @@
1
- import { Menus, MenuType, useTimeoutFn } from "@dt-frames/core"
2
- import { getBreadCrumb } from '../../header/helper/menu-tree'
3
- import { computed } from "vue"
4
-
5
- export type MenuState = {
6
- // 默认选中的列表
7
- defaultSelectedKeys: string[]
8
- // 展开数组
9
- openKeys: string[]
10
- // 当前选中的菜单项 key 数组
11
- selectedKeys: string[]
12
- // 收缩状态下展开的数组
13
- collapsedOpenKeys: string[]
14
- }
15
-
16
-
17
- export function useOpenKeys(
18
- menuState: MenuState,
19
- menus: Menus[],
20
- type: string
21
- ) {
22
- async function setOpenKeys(path: string) {
23
- if( type === MenuType.TOP_MENU ) return
24
-
25
- useTimeoutFn(
26
- () => {
27
- if (menus?.length === 0) {
28
- menuState.openKeys = [];
29
- return;
30
- }
31
-
32
- const parentNodes = getBreadCrumb(path, menus)
33
- menuState.openKeys = parentNodes.map( it => it.id )
34
- },
35
- 20,
36
- true
37
- )
38
- }
39
-
40
- const getOpenKeys = computed(() => menuState.openKeys)
41
-
42
- function resetKeys() {
43
- menuState.selectedKeys = []
44
- menuState.openKeys = []
45
- }
46
-
47
- function handleOpenChange(openKeys: string[]) {
48
- menuState.openKeys = openKeys
49
- }
50
-
51
- return {
52
- getOpenKeys,
53
- setOpenKeys,
54
- resetKeys,
55
- handleOpenChange
56
- }
57
- }
@@ -1,203 +0,0 @@
1
- @content-bg: #f4f7f9;
2
- @header-height: 48px;
3
- @logo-width: 32px;
4
- @border-color-base: #d9d9d9;
5
- @side-drag-z-index: 2000;
6
- @menu-bg-color: #001529;
7
- @menu-sub-bg-color: #00061a;
8
- @menu-mix-bg-color: #fff;
9
- @menu-mix-sub-bg-color: #fff;
10
- @menu-mix-select-bg-color: #269ac112;
11
-
12
-
13
- .dt-theme-main {
14
- display: flex;
15
- width: 100%;
16
- height: 100%;
17
- background-color: @content-bg;
18
- flex-direction: column;
19
-
20
- > .ant-layout {
21
- min-height: 100%;
22
- }
23
-
24
- &-main {
25
- width: 100%;
26
- }
27
-
28
- }
29
-
30
- .dt-logo{
31
- height: @header-height;
32
- min-width: 240px;
33
- padding: 0 10px;
34
- font-size: 14px;
35
- display: flex;
36
- align-items: center;
37
-
38
- img {
39
- width: @logo-width;
40
- height: @logo-width;
41
- margin-right: 10px;
42
- }
43
-
44
- display: flex;
45
- align-items: center;
46
- padding-left: 10px;
47
- cursor: pointer;
48
- transition: all 0.2s ease;
49
- text-align: center;
50
-
51
- &.light {
52
- border-bottom: 1px solid @border-color-base;
53
- }
54
-
55
- &.light &__title {
56
- color: @primary-color;
57
- }
58
-
59
- &.dark &__title {
60
- color: @white;
61
- }
62
-
63
- &__title {
64
- font-size: 16px;
65
- font-weight: 700;
66
- transition: all 0.5s;
67
- line-height: normal;
68
- padding-left: 12px;
69
- }
70
- }
71
-
72
- .dt-sideBar{
73
- z-index: 2;
74
- overflow: hidden;
75
- background: @menu-bg-color;
76
-
77
- .ant-menu{
78
- background: @menu-bg-color;
79
-
80
- .ant-menu-sub{
81
- background: @menu-sub-bg-color;
82
- }
83
- }
84
-
85
- &--side{
86
- &>div{
87
- display: flex;
88
- flex-direction: column;
89
- .scrollbar{
90
- flex: 1;
91
- }
92
- }
93
- }
94
-
95
- &--fixed {
96
- position: fixed;
97
- top: 0;
98
- left: 0;
99
- height: 100%;
100
- }
101
-
102
- &--mix {
103
- height: calc(100% - 48px);
104
- top: @header-height;
105
- background: @menu-mix-bg-color;
106
- border-right: 1px solid #f0f0f0;
107
-
108
- .ant-menu{
109
- background: @menu-mix-bg-color;
110
- border-right: none;
111
- .ant-menu-sub{
112
- background: @menu-mix-sub-bg-color;
113
- }
114
- .ant-menu-item-selected{
115
- background: @menu-mix-select-bg-color;
116
- }
117
- }
118
-
119
- .ant-layout-sider-trigger{
120
- background: @menu-mix-bg-color;
121
- border-right: 1px solid #f0f0f0;
122
- border-top: 1px solid #f0f0f0;
123
- }
124
- }
125
- }
126
-
127
- .ant-layout-sider-dark, .ant-menu-dark {
128
- .menu-icon{
129
- color: rgba(255,255,255,0.65) !important;
130
- padding: 12px 0;
131
- margin-right: 12px;
132
- height: 40px !important;
133
- width: 28px;
134
- text-align: center;
135
- }
136
-
137
- .dt-icon{
138
- color: rgba(255,255,255,0.65) !important;
139
- line-height: 16px;
140
- height: 16px;
141
- }
142
-
143
- .ant-menu-item-selected > span > span > span, .ant-menu-submenu-selected > div > span > span > span {
144
- &>.dt-icon {
145
- color: #fff !important;
146
- }
147
- }
148
- .ant-menu-item-active > span > span > span, .ant-menu-submenu-active > div > span > span > span{
149
- &>.dt-icon {
150
- color: #fff !important;
151
- }
152
- }
153
-
154
- .ant-menu-item {
155
- height: 48px !important;
156
- line-height: 48px !important;
157
- margin: 0 !important;
158
-
159
- .menu-icon{
160
- height: 48px !important;
161
- padding: 16px 0;
162
- text-align: center;
163
- }
164
-
165
- }
166
-
167
- .ant-menu-submenu-selected{
168
- &>div .svg-icon use{
169
- fill: #fff !important;
170
- }
171
- }
172
- }
173
-
174
- .ant-menu-inline-collapsed{
175
- .dt-menu-item{
176
- overflow: hidden;
177
- }
178
- }
179
-
180
- .dt-basic-menu-item-content-flex {
181
- display: flex;
182
- }
183
-
184
- .dt-darg-bar{
185
- position: absolute;
186
- top: 0;
187
- right: 0;
188
- z-index: @side-drag-z-index;
189
- width: 2px;
190
- height: 100%;
191
- cursor: col-resize;
192
- border-top: none;
193
- border-bottom: none;
194
-
195
- &--hide {
196
- display: none;
197
- }
198
-
199
- &:hover {
200
- background-color: @primary-color;
201
- box-shadow: 0 0 4px 0 rgb(28 36 56 / 15%);
202
- }
203
- }
@@ -1,88 +0,0 @@
1
- <template>
2
- <!-- 创建一个空的div在左侧占位 -->
3
- <div
4
- v-if="getMenuFixed"
5
- :style="hiddenDomStyle"
6
- v-show="showClassSideBarRef"
7
- ></div>
8
-
9
- <LayoutSider
10
- v-show="showClassSideBarRef"
11
- ref="sideRef"
12
- collapsible
13
- breakpoint="lg"
14
- :class="getSiderClass"
15
- :width="getMenuWidth"
16
- :collapsed="getCollapsed"
17
- :collapsedWidth="getCollapsedWidth"
18
- @breakpoint="onBreakPointChange"
19
- :theme="getMenuTheme"
20
- :trigger="renderTrigger"
21
- v-bind="getTriggerAttr"
22
- >
23
- <LayoutMenu :theme="getMenuTheme" :menuMode="getMode" :splitType="getSplitType"></LayoutMenu>
24
- <DragBar ref="dragBarRef" />
25
- </LayoutSider>
26
- </template>
27
-
28
- <script lang="ts" setup>
29
- import { computed, unref, ref, h } from "vue"
30
- import { useMenu, MenuSplitTye, MenuMode, useHeader, Theme } from '@dt-frames/core'
31
-
32
- import { LayoutSider } from 'ant-design-vue'
33
- import { useMenuSwitch, useTrigger } from "./helper/sider"
34
- import LayoutMenu from './components/layout-menu.vue'
35
- import LayoutTrigger from './components/sider-trigger.vue'
36
- import DragBar from './components/drag-bar.vue'
37
- import { useDragLine } from "./hooks/useDragLine"
38
-
39
-
40
- const { getMenuFixed, getSplit, getMenuHidden, getMenuWidth, getCollapsed, getMenuTheme,getIsSidebarType, getIsTopMenu, getRealWidth, getIsMixMode } = useMenu()
41
- const { getHeaderTheme } = useHeader()
42
- const { getCollapsedWidth, onBreakPointChange } = useMenuSwitch()
43
- const { getTriggerAttr, getShowTrigger } = useTrigger();
44
- const dragBarRef = ref(null)
45
- const sideRef = ref(null)
46
-
47
- const hiddenDomStyle = computed(() => {
48
- const width = `${ unref(getRealWidth) }px`;
49
- return {
50
- width: width,
51
- overflow: 'hidden',
52
- flex: `0 0 ${ width }`,
53
- maxWidth: width,
54
- minWidth: width,
55
- transition: 'all 0.2s'
56
- }
57
- });
58
-
59
- const showClassSideBarRef = computed( () => {
60
- return unref(getSplit) ? !unref( getMenuHidden ) : true;
61
- } );
62
-
63
- useDragLine(sideRef, dragBarRef)
64
-
65
- const getSiderClass = computed( () => {
66
- return [
67
- 'dt-sideBar',
68
- {
69
- 'dt-sideBar--side': unref(getIsSidebarType),
70
- 'dt-sideBar--top': unref(getIsTopMenu),
71
- 'dt-sideBar--fixed': unref(getMenuFixed),
72
- 'dt-sideBar--mix': unref(getIsMixMode),
73
- },
74
- ]
75
- } );
76
-
77
- const getSplitType = computed(() => {
78
- return unref(getSplit) ? MenuSplitTye.LEFT : MenuSplitTye.NONE;
79
- });
80
-
81
- const getMode = computed(() => {
82
- return unref(getSplit) ? MenuMode.INLINE : null;
83
- });
84
-
85
- const renderTrigger = h(LayoutTrigger)
86
-
87
- </script>
88
-
@@ -1,37 +0,0 @@
1
- <template>
2
-
3
- <Dropdown
4
- placement="bottomRight"
5
- :trigger="['click']"
6
- overlayClassName="reuse-tabs__dropdown"
7
- >
8
- <span @click="handleContext" class="reuse-tab-quick">
9
- <span v-icon="'ic:baseline-keyboard-arrow-down'" :fontSize="16"></span>
10
- </span>
11
-
12
- <template #overlay>
13
- <Menu>
14
- <template v-for="(item, index) in getDropMenuList" :key="index">
15
- <MenuItem
16
- @click="handleMenuEvent(item)"
17
- :disabled="item.disabled"
18
- >
19
- <span v-icon="item.icon" :fontSize="16"></span>
20
- <span>{{ item.text }}</span>
21
- </MenuItem>
22
-
23
- <MenuDivider v-if="item.divider" :key="`d-${index}`"></MenuDivider>
24
- </template>
25
- </Menu>
26
- </template>
27
- </Dropdown>
28
- </template>
29
-
30
- <script lang="ts" setup>
31
- import { Dropdown, Menu, MenuDivider, MenuItem } from 'ant-design-vue'
32
- import { DtIcon } from '../../../components/icons';
33
- import { useTabDropdown } from '../hooks/useTabDropdown';
34
-
35
- const { getDropMenuList, handleContext, handleMenuEvent } = useTabDropdown()
36
-
37
- </script>
@@ -1,18 +0,0 @@
1
- <template>
2
- <span class="dt-tab-redo" @click="handleRedo">
3
- <DtIcon :icon-class="'ic:baseline-autorenew'" :size="16" ></DtIcon>
4
- </span>
5
- </template>
6
-
7
- <script lang="ts" setup>
8
- import { RouteReuseStore } from '@dt-frames/core'
9
- import { useRouter } from 'vue-router';
10
- import { DtIcon } from '../../../components/icons'
11
-
12
- const tabStore = RouteReuseStore()
13
- const router: any = useRouter();
14
-
15
- function handleRedo() {
16
- tabStore.refreshPage(router)
17
- }
18
- </script>
@@ -1,96 +0,0 @@
1
- import { ref, toRaw, nextTick, unref, Ref } from 'vue'
2
- import { isNullAndUnDef, RouteReuseStore, useMultipleTab } from '@dt-frames/core'
3
- import { RouteLocationNormalized, useRouter } from 'vue-router'
4
- import type { Options } from 'sortablejs'
5
-
6
-
7
- // 获取固定的tabs
8
- export function initAffixTabs() {
9
- const affixList = ref([])
10
-
11
- const tabStore = RouteReuseStore()
12
- const router = useRouter()
13
-
14
- // 过滤固定的路由
15
- const filterAffixTabs = ( routes: RouteLocationNormalized[] = [] ) => {
16
- return routes && routes.reduce((tabs, route) => {
17
- if (route.meta && route.meta.affix) {
18
- tabs.push(toRaw(route))
19
- }
20
-
21
- return tabs
22
- }, [])
23
- }
24
-
25
- // 重新设置tabs信息
26
- const addAffixTabs = () => {
27
- const affixTabs = filterAffixTabs(router.getRoutes() as unknown as RouteLocationNormalized[])
28
- affixList.value = affixTabs
29
-
30
- for (const tab of affixTabs) {
31
- tabStore.addTab({
32
- meta: tab.meta,
33
- name: tab.name,
34
- path: tab.path,
35
- } as unknown as RouteLocationNormalized);
36
- }
37
- }
38
-
39
- let isAddAffix = false
40
-
41
- if (!isAddAffix) {
42
- addAffixTabs();
43
- isAddAffix = true;
44
- }
45
-
46
- return affixList.value.map((item) => item.meta?.title).filter(Boolean) as string[]
47
- }
48
-
49
-
50
- // 排序函数
51
- export function useSortable(el: HTMLElement | Ref<HTMLElement>, options?: Options) {
52
- function initSortable() {
53
- nextTick(async () => {
54
- if (!el) return
55
-
56
- const Sortable = (await import('sortablejs')).default;
57
- Sortable.create(unref(el), {
58
- animation: 500,
59
- delay: 400,
60
- delayOnTouchOnly: true,
61
- ...options,
62
- })
63
- })
64
- }
65
-
66
- return { initSortable }
67
- }
68
-
69
-
70
- // 设置tabs拖拽
71
- export function useTabsDrag(affixList: string[]) {
72
- const tabStore = RouteReuseStore()
73
- const { getCanDrag } = useMultipleTab()
74
-
75
- nextTick(() => {
76
- if (!unref(getCanDrag)) return;
77
-
78
- const el = document.querySelectorAll(`.dt-reuse-tabs .ant-tabs-nav-list`)?.[0] as HTMLElement
79
-
80
- const { initSortable } = useSortable(el, {
81
- filter: (e) => {
82
- const text = e?.target?.innerText;
83
- if (!text) return false;
84
- return affixList.includes(text)
85
- },
86
- onEnd: (evt) => {
87
- const { oldIndex, newIndex } = evt
88
-
89
- if (isNullAndUnDef(oldIndex) || isNullAndUnDef(newIndex) || oldIndex === newIndex) return
90
-
91
- tabStore.sortTabs(oldIndex, newIndex)
92
- },
93
- });
94
- initSortable()
95
- })
96
- }
@@ -1,89 +0,0 @@
1
- import { RouteLocationNormalized, useRouter, Router } from "vue-router"
2
- import { computed, unref, reactive } from 'vue'
3
- import { Nullable, RouteReuseStore } from "@dt-frames/core"
4
- import { DropMenu } from "../types/tabs.type"
5
-
6
- export function useTabDropdown() {
7
- const router: any = useRouter()
8
- const { currentRoute } = router
9
- const tabStore = RouteReuseStore()
10
-
11
- const state = reactive({
12
- current: null as Nullable<RouteLocationNormalized>,
13
- currentIndex: 0,
14
- });
15
-
16
- const getDropMenuList = computed(() => {
17
- const { path, meta } = unref(currentRoute)
18
- const curItem = state.current
19
- const isCurItem = curItem ? curItem.path === path : false
20
-
21
- const index = state.currentIndex
22
-
23
- // 是否可以关闭左侧按钮
24
- const closeLeftDisabled = index === 0 || !isCurItem
25
-
26
- // 是否禁用
27
- const disabled = tabStore.getTabList.length === 1
28
-
29
- // 是否可以关闭右侧按钮
30
- const closeRightDisabled = !isCurItem || (index === tabStore.getTabList.length - 1 && tabStore.getLastDragEndIndex >= 0)
31
-
32
- const dropMenuList: DropMenu[] = [
33
- {
34
- icon: 'ic:baseline-close',
35
- text: '关闭当前标签页',
36
- onClick: () => tabStore.closeTab(path, router),
37
- disabled: !!meta?.affix || disabled,
38
- divider: true,
39
- },
40
- {
41
- icon: 'mdi:arrow-collapse-left',
42
- text: '关闭左侧标签页',
43
- onClick: () => tabStore.closeLeftTabs(path),
44
- disabled: closeLeftDisabled,
45
- divider: false,
46
- },
47
- {
48
- icon: 'mdi:arrow-collapse-right',
49
- text: '关闭右侧标签页',
50
- onClick: () => tabStore.closeRightTabs(path),
51
- disabled: closeRightDisabled,
52
- divider: true,
53
- },
54
- {
55
- icon: 'ic:baseline-sync-alt',
56
- text: '关闭其他标签页',
57
- onClick: () => tabStore.closeOtherTabs(path),
58
- disabled: disabled || !isCurItem,
59
- },
60
- {
61
- icon: 'ic:baseline-horizontal-rule',
62
- text: '关闭全部标签页',
63
- onClick: () => tabStore.closeAllTab(currentRoute, router),
64
- disabled: disabled,
65
- }
66
- ]
67
-
68
- return dropMenuList
69
- })
70
-
71
- function handleContext(e) {
72
- e?.preventDefault()
73
-
74
- const { path } = unref(currentRoute)
75
- const index = tabStore.getTabList.findIndex((tab) => tab.path === path)
76
- state.current = unref(currentRoute)
77
- state.currentIndex = index
78
- }
79
-
80
- function handleMenuEvent(item: DropMenu) {
81
- item.onClick?.()
82
- }
83
-
84
- return {
85
- getDropMenuList,
86
- handleContext,
87
- handleMenuEvent
88
- }
89
- }