@gx-design-vue/create-gx-cli 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +1 -1
- package/src/cli.js +1 -1
- package/src/main.js +4 -0
- package/template-design-pro/.editorconfig +0 -19
- package/template-design-pro/.env +0 -2
- package/template-design-pro/.env.development +0 -18
- package/template-design-pro/.env.pro +0 -32
- package/template-design-pro/.env.production +0 -32
- package/template-design-pro/.env.test +0 -20
- package/template-design-pro/.eslintignore +0 -16
- package/template-design-pro/.eslintrc.js +0 -64
- package/template-design-pro/.gitpod.yml +0 -6
- package/template-design-pro/.husky/pre-commit +0 -4
- package/template-design-pro/.prettierignore +0 -9
- package/template-design-pro/.stylelintignore +0 -3
- package/template-design-pro/.yarnclean +0 -48
- package/template-design-pro/LICENSE +0 -21
- package/template-design-pro/README.md +0 -111
- package/template-design-pro/build/constant.ts +0 -6
- package/template-design-pro/build/generate/generateModifyVars.ts +0 -18
- package/template-design-pro/build/getConfigFileName.ts +0 -13
- package/template-design-pro/build/script/buildConf.ts +0 -44
- package/template-design-pro/build/script/postBuild.ts +0 -25
- package/template-design-pro/build/script/reSetRootHtml.ts +0 -20
- package/template-design-pro/build/utils.ts +0 -85
- package/template-design-pro/build/vite/cdn.ts +0 -7
- package/template-design-pro/build/vite/optimizer.ts +0 -22
- package/template-design-pro/build/vite/plugin/autoImport.ts +0 -18
- package/template-design-pro/build/vite/plugin/compress.ts +0 -35
- package/template-design-pro/build/vite/plugin/hmr.ts +0 -25
- package/template-design-pro/build/vite/plugin/html.ts +0 -47
- package/template-design-pro/build/vite/plugin/index.ts +0 -89
- package/template-design-pro/build/vite/plugin/mock.ts +0 -20
- package/template-design-pro/build/vite/plugin/pwa.ts +0 -37
- package/template-design-pro/build/vite/plugin/styleImport.ts +0 -129
- package/template-design-pro/build/vite/plugin/visualizer.ts +0 -17
- package/template-design-pro/build/vite/plugin/vite-plugin-antd-theme/index.ts +0 -24
- package/template-design-pro/build/vite/plugin/vite-plugin-mock/createMockServer.ts +0 -303
- package/template-design-pro/build/vite/plugin/vite-plugin-mock/createProdMockServer.ts +0 -93
- package/template-design-pro/build/vite/plugin/vite-plugin-mock/index.ts +0 -68
- package/template-design-pro/build/vite/plugin/vite-plugin-mock/types.ts +0 -30
- package/template-design-pro/build/vite/plugin/vite-plugin-mock/utils.ts +0 -26
- package/template-design-pro/commitlint.config.js +0 -32
- package/template-design-pro/config/config.ts +0 -14
- package/template-design-pro/config/default/animate.ts +0 -30
- package/template-design-pro/config/default/defaultSettings.ts +0 -75
- package/template-design-pro/config/default/network.ts +0 -16
- package/template-design-pro/config/default/proxy.ts +0 -26
- package/template-design-pro/config/default/theme.ts +0 -43
- package/template-design-pro/config/default/themeColor.ts +0 -62
- package/template-design-pro/index.html +0 -45
- package/template-design-pro/jest.config.mjs +0 -36
- package/template-design-pro/mock/_createProductionServer.ts +0 -19
- package/template-design-pro/mock/_util.ts +0 -55
- package/template-design-pro/mock/controller/menu.ts +0 -85
- package/template-design-pro/mock/controller/notices.ts +0 -114
- package/template-design-pro/mock/system/dict.ts +0 -60
- package/template-design-pro/mock/system/user.ts +0 -218
- package/template-design-pro/package.json +0 -151
- package/template-design-pro/pnpm-lock.yaml +0 -9913
- package/template-design-pro/postcss.config.js +0 -5
- package/template-design-pro/prettier.config.js +0 -18
- package/template-design-pro/public/resource/css/index.css +0 -171
- package/template-design-pro/public/resource/img/favicon.ico +0 -0
- package/template-design-pro/public/resource/img/logo.png +0 -0
- package/template-design-pro/public/resource/img/pro_icon.svg +0 -5
- package/template-design-pro/public/resource/img/pwa-192x192.png +0 -0
- package/template-design-pro/public/resource/img/pwa-512x512.png +0 -0
- package/template-design-pro/src/App.vue +0 -47
- package/template-design-pro/src/assets/error_images/403.png +0 -0
- package/template-design-pro/src/assets/error_images/404.png +0 -0
- package/template-design-pro/src/assets/error_images/cloud.png +0 -0
- package/template-design-pro/src/assets/login_images/login_background.svg +0 -69
- package/template-design-pro/src/assets/logo.png +0 -0
- package/template-design-pro/src/assets/menu_font/iconfont.css +0 -94
- package/template-design-pro/src/assets/menu_font/iconfont.eot +0 -0
- package/template-design-pro/src/assets/menu_font/iconfont.js +0 -1
- package/template-design-pro/src/assets/menu_font/iconfont.json +0 -142
- package/template-design-pro/src/assets/menu_font/iconfont.svg +0 -57
- package/template-design-pro/src/assets/menu_font/iconfont.ttf +0 -0
- package/template-design-pro/src/assets/menu_font/iconfont.woff +0 -0
- package/template-design-pro/src/assets/menu_font/iconfont.woff2 +0 -0
- package/template-design-pro/src/assets/menu_font/index.less +0 -94
- package/template-design-pro/src/common/global.ts +0 -1
- package/template-design-pro/src/components/GDesign/ProLayout/BasicLayout.less +0 -80
- package/template-design-pro/src/components/GDesign/ProLayout/BasicLayout.tsx +0 -342
- package/template-design-pro/src/components/GDesign/ProLayout/PageLoading.tsx +0 -20
- package/template-design-pro/src/components/GDesign/ProLayout/RenderTypings.ts +0 -31
- package/template-design-pro/src/components/GDesign/ProLayout/RouteContext.tsx +0 -82
- package/template-design-pro/src/components/GDesign/ProLayout/WrapContent.tsx +0 -69
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalFooter/index.tsx +0 -88
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalHeader/DefaultHeader.tsx +0 -189
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalHeader/Header.less +0 -8
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalHeader/index.tsx +0 -105
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalHeader/props.ts +0 -69
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalHeader/style.less +0 -144
- package/template-design-pro/src/components/GDesign/ProLayout/components/LogoContent/index.tsx +0 -81
- package/template-design-pro/src/components/GDesign/ProLayout/components/LogoContent/props.ts +0 -29
- package/template-design-pro/src/components/GDesign/ProLayout/components/MultiTab/index.tsx +0 -384
- package/template-design-pro/src/components/GDesign/ProLayout/components/MultiTab/props.ts +0 -15
- package/template-design-pro/src/components/GDesign/ProLayout/components/MultiTab/style.less +0 -79
- package/template-design-pro/src/components/GDesign/ProLayout/components/NoticeIcon/NoticeIcon.tsx +0 -148
- package/template-design-pro/src/components/GDesign/ProLayout/components/NoticeIcon/NoticeList.module.less +0 -115
- package/template-design-pro/src/components/GDesign/ProLayout/components/NoticeIcon/NoticeList.tsx +0 -154
- package/template-design-pro/src/components/GDesign/ProLayout/components/NoticeIcon/index.less +0 -39
- package/template-design-pro/src/components/GDesign/ProLayout/components/NoticeIcon/index.tsx +0 -133
- package/template-design-pro/src/components/GDesign/ProLayout/components/PageContainer/index.tsx +0 -190
- package/template-design-pro/src/components/GDesign/ProLayout/components/PageContainer/props.ts +0 -48
- package/template-design-pro/src/components/GDesign/ProLayout/components/PageContainer/style.less +0 -128
- package/template-design-pro/src/components/GDesign/ProLayout/components/PageContainer/typings.ts +0 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/RightContent/AvatarDropdown.tsx +0 -63
- package/template-design-pro/src/components/GDesign/ProLayout/components/RightContent/HeaderSearch.tsx +0 -122
- package/template-design-pro/src/components/GDesign/ProLayout/components/RightContent/headerSearch.less +0 -30
- package/template-design-pro/src/components/GDesign/ProLayout/components/RightContent/index.tsx +0 -95
- package/template-design-pro/src/components/GDesign/ProLayout/components/RightContent/style.less +0 -90
- package/template-design-pro/src/components/GDesign/ProLayout/components/SettingDrawer/BlockCheckbox.tsx +0 -70
- package/template-design-pro/src/components/GDesign/ProLayout/components/SettingDrawer/LayoutSetting.tsx +0 -107
- package/template-design-pro/src/components/GDesign/ProLayout/components/SettingDrawer/ThemeColor.tsx +0 -68
- package/template-design-pro/src/components/GDesign/ProLayout/components/SettingDrawer/index.tsx +0 -346
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/BaseMenu.tsx +0 -224
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/SiderMenu.tsx +0 -224
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/index.tsx +0 -43
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/props.ts +0 -112
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/style.less +0 -262
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/typings.ts +0 -44
- package/template-design-pro/src/components/GDesign/ProLayout/default.less +0 -2
- package/template-design-pro/src/components/GDesign/ProLayout/defaultSettings.ts +0 -121
- package/template-design-pro/src/components/GDesign/ProLayout/hooks/context/index.ts +0 -45
- package/template-design-pro/src/components/GDesign/ProLayout/index.ts +0 -43
- package/template-design-pro/src/components/GDesign/ProLayout/props.ts +0 -57
- package/template-design-pro/src/components/GDesign/ProLayout/style.less +0 -272
- package/template-design-pro/src/components/GDesign/ProLayout/typings.ts +0 -1
- package/template-design-pro/src/components/GDesign/ProLayout/utils/getMenuData.ts +0 -31
- package/template-design-pro/src/components/GDesign/ProLayout/utils/index.ts +0 -94
- package/template-design-pro/src/components/GDesign/ProLayout/utils/isImg/index.ts +0 -6
- package/template-design-pro/src/components/GDesign/ProLayout/utils/isUrl/index.ts +0 -5
- package/template-design-pro/src/components/GDesign/Result/index.tsx +0 -142
- package/template-design-pro/src/components/GDesign/Result/style.less +0 -140
- package/template-design-pro/src/components/GDesign/Scrollbars/components/Bar/index.tsx +0 -56
- package/template-design-pro/src/components/GDesign/Scrollbars/components/Bar/props.ts +0 -23
- package/template-design-pro/src/components/GDesign/Scrollbars/components/Thumb/index.tsx +0 -164
- package/template-design-pro/src/components/GDesign/Scrollbars/components/Thumb/props.ts +0 -11
- package/template-design-pro/src/components/GDesign/Scrollbars/context.ts +0 -10
- package/template-design-pro/src/components/GDesign/Scrollbars/index.tsx +0 -200
- package/template-design-pro/src/components/GDesign/Scrollbars/props.ts +0 -65
- package/template-design-pro/src/components/GDesign/Scrollbars/style.less +0 -85
- package/template-design-pro/src/components/GDesign/Scrollbars/util.ts +0 -40
- package/template-design-pro/src/components/GDesign/utils/index.ts +0 -7
- package/template-design-pro/src/components/PageLoading/index.tsx +0 -44
- package/template-design-pro/src/components/PageTransition/index.vue +0 -98
- package/template-design-pro/src/components/index.ts +0 -6
- package/template-design-pro/src/core/ant-design/index.ts +0 -14
- package/template-design-pro/src/core/gx-admin-design/index.ts +0 -7
- package/template-design-pro/src/core/gx-admin-directives/index.ts +0 -8
- package/template-design-pro/src/core/gx-admin-directives/permission.ts +0 -28
- package/template-design-pro/src/core/gx-design/index.ts +0 -7
- package/template-design-pro/src/core/gx-pro-design/index.ts +0 -10
- package/template-design-pro/src/core/index.ts +0 -27
- package/template-design-pro/src/design/ant-design/index.less +0 -4
- package/template-design-pro/src/design/ant-design/layout.less +0 -29
- package/template-design-pro/src/design/ant-design/menu.less +0 -55
- package/template-design-pro/src/design/ant-design/table.less +0 -67
- package/template-design-pro/src/design/ant-design/tooltip.less +0 -13
- package/template-design-pro/src/design/color.less +0 -1
- package/template-design-pro/src/design/config.less +0 -5
- package/template-design-pro/src/design/index.less +0 -41
- package/template-design-pro/src/design/mixin.less +0 -66
- package/template-design-pro/src/design/normalize.less +0 -390
- package/template-design-pro/src/global.less +0 -15
- package/template-design-pro/src/hooks/core/index.ts +0 -3
- package/template-design-pro/src/hooks/core/useRequest/index.ts +0 -70
- package/template-design-pro/src/hooks/core/useRequest/typings.ts +0 -0
- package/template-design-pro/src/hooks/event/index.ts +0 -3
- package/template-design-pro/src/hooks/event/useClipboard.ts +0 -14
- package/template-design-pro/src/hooks/system/index.ts +0 -5
- package/template-design-pro/src/hooks/system/useDict.ts +0 -62
- package/template-design-pro/src/hooks/system/usePermissions.ts +0 -39
- package/template-design-pro/src/hooks/typings.ts +0 -17
- package/template-design-pro/src/layout/BasicLayout.vue +0 -104
- package/template-design-pro/src/layout/BlankLayout.vue +0 -5
- package/template-design-pro/src/layout/ContentView.vue +0 -76
- package/template-design-pro/src/layout/IframeView.vue +0 -1
- package/template-design-pro/src/layout/UserLayout.vue +0 -7
- package/template-design-pro/src/main.ts +0 -34
- package/template-design-pro/src/plugins/index.ts +0 -3
- package/template-design-pro/src/router/guard/index.ts +0 -84
- package/template-design-pro/src/router/guard/permissions.ts +0 -73
- package/template-design-pro/src/router/guard/stateGuard.ts +0 -11
- package/template-design-pro/src/router/helper/routeHelper.ts +0 -244
- package/template-design-pro/src/router/helper/utils.ts +0 -19
- package/template-design-pro/src/router/index.ts +0 -30
- package/template-design-pro/src/router/routes/index.ts +0 -85
- package/template-design-pro/src/router/routes/modules/workplace.ts +0 -19
- package/template-design-pro/src/services/common/index.ts +0 -11
- package/template-design-pro/src/services/controller/router.ts +0 -10
- package/template-design-pro/src/services/controller/user.ts +0 -35
- package/template-design-pro/src/services/system/dictData.ts +0 -10
- package/template-design-pro/src/services/system/notices.ts +0 -9
- package/template-design-pro/src/store/index.ts +0 -32
- package/template-design-pro/src/store/modules/dict.ts +0 -27
- package/template-design-pro/src/store/modules/permission.ts +0 -19
- package/template-design-pro/src/store/modules/routes.ts +0 -110
- package/template-design-pro/src/store/modules/settings.ts +0 -102
- package/template-design-pro/src/store/modules/tabsRouter.ts +0 -73
- package/template-design-pro/src/store/modules/user.ts +0 -153
- package/template-design-pro/src/utils/accessToken.ts +0 -93
- package/template-design-pro/src/utils/crypto.ts +0 -39
- package/template-design-pro/src/utils/env.ts +0 -52
- package/template-design-pro/src/utils/fetchFile.ts +0 -79
- package/template-design-pro/src/utils/index.ts +0 -127
- package/template-design-pro/src/utils/pageTitle.ts +0 -17
- package/template-design-pro/src/utils/request/XHR.ts +0 -131
- package/template-design-pro/src/utils/request/axiosCancel.ts +0 -60
- package/template-design-pro/src/utils/request/checkStatus.ts +0 -26
- package/template-design-pro/src/utils/request/index.ts +0 -145
- package/template-design-pro/src/utils/request/typings.ts +0 -114
- package/template-design-pro/src/utils/storage.ts +0 -194
- package/template-design-pro/src/utils/uploadFile.ts +0 -26
- package/template-design-pro/src/utils/util.ts +0 -278
- package/template-design-pro/src/utils/validate.ts +0 -221
- package/template-design-pro/src/views/Iframe/index.vue +0 -76
- package/template-design-pro/src/views/MenuOne/index.vue +0 -15
- package/template-design-pro/src/views/MenuTwo/index.vue +0 -13
- package/template-design-pro/src/views/exception/403/index.vue +0 -9
- package/template-design-pro/src/views/exception/404/index.vue +0 -9
- package/template-design-pro/src/views/user/login/index.vue +0 -110
- package/template-design-pro/src/views/user/login/style.less +0 -38
- package/template-design-pro/stylelint.config.js +0 -106
- package/template-design-pro/tests/__mocks__/fileMock.ts +0 -1
- package/template-design-pro/tests/__mocks__/styleMock.ts +0 -1
- package/template-design-pro/tests/__mocks__/workerMock.ts +0 -5
- package/template-design-pro/tests/server/README.md +0 -15
- package/template-design-pro/tests/server/controller/FileController.ts +0 -18
- package/template-design-pro/tests/server/controller/UserController.ts +0 -15
- package/template-design-pro/tests/server/ecosystem.config.js +0 -18
- package/template-design-pro/tests/server/index.ts +0 -63
- package/template-design-pro/tests/server/nodemon.json +0 -8
- package/template-design-pro/tests/server/package.json +0 -36
- package/template-design-pro/tests/server/routes.ts +0 -23
- package/template-design-pro/tests/server/service/FileService.ts +0 -54
- package/template-design-pro/tests/server/service/UserService.ts +0 -25
- package/template-design-pro/tests/server/tsconfig.json +0 -15
- package/template-design-pro/tests/server/utils.ts +0 -9
- package/template-design-pro/tests/server/yarn.lock +0 -2955
- package/template-design-pro/tests/test.spec.ts +0 -16
- package/template-design-pro/tsconfig.json +0 -47
- package/template-design-pro/types/auto-imports.d.ts +0 -61
- package/template-design-pro/types/config.d.ts +0 -100
- package/template-design-pro/types/global.d.ts +0 -103
- package/template-design-pro/types/gx-components.d.ts +0 -24
- package/template-design-pro/types/index.d.ts +0 -13
- package/template-design-pro/types/mock.d.ts +0 -23
- package/template-design-pro/types/module.d.ts +0 -16
- package/template-design-pro/types/response.d.ts +0 -15
- package/template-design-pro/types/route.d.ts +0 -89
- package/template-design-pro/vite.config.ts +0 -136
- package/template-design-pro/yarn.lock +0 -9697
@@ -1,56 +0,0 @@
|
|
1
|
-
import type { ExtractPropTypes } from 'vue'
|
2
|
-
import { defineComponent, ref } from 'vue'
|
3
|
-
import { barProps } from './props'
|
4
|
-
import Thumb from '../Thumb'
|
5
|
-
|
6
|
-
export type BarProps = ExtractPropTypes<typeof barProps>
|
7
|
-
|
8
|
-
const Bar = defineComponent({
|
9
|
-
props: barProps,
|
10
|
-
setup(props) {
|
11
|
-
const moveX = ref(0)
|
12
|
-
const moveY = ref(0)
|
13
|
-
const GAP = 4
|
14
|
-
|
15
|
-
const handleScroll = (wrap: HTMLDivElement) => {
|
16
|
-
if (wrap) {
|
17
|
-
const offsetHeight = wrap.offsetHeight - GAP
|
18
|
-
const offsetWidth = wrap.offsetWidth - GAP
|
19
|
-
|
20
|
-
moveY.value = ((wrap.scrollTop * 100) / offsetHeight) * props.ratioY
|
21
|
-
moveX.value = ((wrap.scrollLeft * 100) / offsetWidth) * props.ratioX
|
22
|
-
}
|
23
|
-
}
|
24
|
-
|
25
|
-
return {
|
26
|
-
moveX,
|
27
|
-
moveY,
|
28
|
-
handleScroll
|
29
|
-
}
|
30
|
-
},
|
31
|
-
render() {
|
32
|
-
return (
|
33
|
-
<>
|
34
|
-
<Thumb
|
35
|
-
className={this.className}
|
36
|
-
move={this.moveX}
|
37
|
-
ratio={this.ratioX}
|
38
|
-
size={this.width}
|
39
|
-
always={this.always}
|
40
|
-
/>
|
41
|
-
<Thumb
|
42
|
-
className={this.className}
|
43
|
-
move={this.moveY}
|
44
|
-
ratio={this.ratioY}
|
45
|
-
size={this.height}
|
46
|
-
vertical
|
47
|
-
always={this.always}
|
48
|
-
/>
|
49
|
-
</>
|
50
|
-
)
|
51
|
-
}
|
52
|
-
})
|
53
|
-
|
54
|
-
Bar.inheritAttrs = false
|
55
|
-
|
56
|
-
export default Bar
|
@@ -1,23 +0,0 @@
|
|
1
|
-
export const barProps = {
|
2
|
-
className: String,
|
3
|
-
always: {
|
4
|
-
type: Boolean,
|
5
|
-
default: true,
|
6
|
-
},
|
7
|
-
width: {
|
8
|
-
type: String,
|
9
|
-
default: '',
|
10
|
-
},
|
11
|
-
height: {
|
12
|
-
type: String,
|
13
|
-
default: '',
|
14
|
-
},
|
15
|
-
ratioX: {
|
16
|
-
type: Number,
|
17
|
-
default: 1,
|
18
|
-
},
|
19
|
-
ratioY: {
|
20
|
-
type: Number,
|
21
|
-
default: 1,
|
22
|
-
},
|
23
|
-
}
|
@@ -1,164 +0,0 @@
|
|
1
|
-
import type { ExtractPropTypes } from 'vue'
|
2
|
-
import { computed, defineComponent, inject, onBeforeUnmount, ref, toRef, Transition } from 'vue'
|
3
|
-
import { isClient, useEventListener } from '@vueuse/core'
|
4
|
-
import { thumbProps } from './props'
|
5
|
-
import { scrollbarContextKey } from '../../context'
|
6
|
-
import { BAR_MAP, renderThumbStyle } from '../../util'
|
7
|
-
|
8
|
-
export type ThumbProps = ExtractPropTypes<typeof thumbProps>
|
9
|
-
|
10
|
-
const COMPONENT_NAME = 'Thumb'
|
11
|
-
const Thumb = defineComponent({
|
12
|
-
props: thumbProps,
|
13
|
-
setup(props) {
|
14
|
-
const scrollbar = inject(scrollbarContextKey)
|
15
|
-
|
16
|
-
if (!scrollbar) console.error(COMPONENT_NAME, 'can not inject scrollbar context')
|
17
|
-
|
18
|
-
const instance = ref()
|
19
|
-
const thumb = ref()
|
20
|
-
|
21
|
-
const thumbState = ref({})
|
22
|
-
const visible = ref(false)
|
23
|
-
|
24
|
-
let cursorDown = false
|
25
|
-
let cursorLeave = false
|
26
|
-
let originalOnSelectStart: ((this: GlobalEventHandlers, ev: Event) => any) | null = isClient
|
27
|
-
? document.onselectstart
|
28
|
-
: null
|
29
|
-
|
30
|
-
const bar = computed(() => BAR_MAP[props.vertical ? 'vertical' : 'horizontal'])
|
31
|
-
|
32
|
-
const thumbStyle = computed(() =>
|
33
|
-
renderThumbStyle({
|
34
|
-
size: props.size,
|
35
|
-
move: props.move,
|
36
|
-
bar: bar.value
|
37
|
-
})
|
38
|
-
)
|
39
|
-
|
40
|
-
const offsetRatio = computed(
|
41
|
-
() =>
|
42
|
-
// offsetRatioX = original width of thumb / current width of thumb / ratioX
|
43
|
-
// offsetRatioY = original height of thumb / current height of thumb / ratioY
|
44
|
-
// instance height = wrap height - GAP
|
45
|
-
instance.value![bar.value.offset] ** 2 /
|
46
|
-
scrollbar.wrapElement![bar.value.scrollSize] /
|
47
|
-
props.ratio /
|
48
|
-
thumb.value![bar.value.offset]
|
49
|
-
)
|
50
|
-
|
51
|
-
const clickThumbHandler = (e: MouseEvent) => {
|
52
|
-
// prevent click event of middle and right button
|
53
|
-
e.stopPropagation()
|
54
|
-
if (e.ctrlKey || [1, 2].includes(e.button)) return
|
55
|
-
|
56
|
-
window.getSelection()?.removeAllRanges()
|
57
|
-
startDrag(e)
|
58
|
-
|
59
|
-
const el = e.currentTarget as HTMLDivElement
|
60
|
-
if (!el) return
|
61
|
-
thumbState.value[bar.value.axis] =
|
62
|
-
el[bar.value.offset] -
|
63
|
-
(e[bar.value.client] - el.getBoundingClientRect()[bar.value.direction])
|
64
|
-
}
|
65
|
-
|
66
|
-
const clickTrackHandler = (e: MouseEvent) => {
|
67
|
-
if (!thumb.value || !instance.value || !scrollbar.wrapElement) return
|
68
|
-
|
69
|
-
const offset = Math.abs(
|
70
|
-
(e.target as HTMLElement).getBoundingClientRect()[bar.value.direction] - e[bar.value.client]
|
71
|
-
)
|
72
|
-
const thumbHalf = thumb.value[bar.value.offset] / 2
|
73
|
-
const thumbPositionPercentage =
|
74
|
-
((offset - thumbHalf) * 100 * offsetRatio.value) / instance.value[bar.value.offset]
|
75
|
-
|
76
|
-
scrollbar.wrapElement[bar.value.scroll] =
|
77
|
-
(thumbPositionPercentage * scrollbar.wrapElement[bar.value.scrollSize]) / 100
|
78
|
-
}
|
79
|
-
|
80
|
-
const startDrag = (e: MouseEvent) => {
|
81
|
-
e.stopImmediatePropagation()
|
82
|
-
cursorDown = true
|
83
|
-
document.addEventListener('mousemove', mouseMoveDocumentHandler)
|
84
|
-
document.addEventListener('mouseup', mouseUpDocumentHandler)
|
85
|
-
originalOnSelectStart = document.onselectstart
|
86
|
-
document.onselectstart = () => false
|
87
|
-
}
|
88
|
-
|
89
|
-
const mouseMoveDocumentHandler = (e: MouseEvent) => {
|
90
|
-
if (!instance.value || !thumb.value) return
|
91
|
-
if (cursorDown === false) return
|
92
|
-
|
93
|
-
const prevPage = thumbState.value[bar.value.axis]
|
94
|
-
if (!prevPage) return
|
95
|
-
|
96
|
-
const offset =
|
97
|
-
(instance.value.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) * -1
|
98
|
-
const thumbClickPosition = thumb.value[bar.value.offset] - prevPage
|
99
|
-
const thumbPositionPercentage =
|
100
|
-
((offset - thumbClickPosition) * 100 * offsetRatio.value) / instance.value[bar.value.offset]
|
101
|
-
scrollbar.wrapElement[bar.value.scroll] =
|
102
|
-
(thumbPositionPercentage * scrollbar.wrapElement[bar.value.scrollSize]) / 100
|
103
|
-
}
|
104
|
-
|
105
|
-
const mouseUpDocumentHandler = () => {
|
106
|
-
cursorDown = false
|
107
|
-
thumbState.value[bar.value.axis] = 0
|
108
|
-
document.removeEventListener('mousemove', mouseMoveDocumentHandler)
|
109
|
-
document.removeEventListener('mouseup', mouseUpDocumentHandler)
|
110
|
-
restoreOnselectstart()
|
111
|
-
if (cursorLeave) visible.value = false
|
112
|
-
}
|
113
|
-
|
114
|
-
const mouseMoveScrollbarHandler = () => {
|
115
|
-
cursorLeave = false
|
116
|
-
visible.value = !!props.size
|
117
|
-
}
|
118
|
-
|
119
|
-
const mouseLeaveScrollbarHandler = () => {
|
120
|
-
cursorLeave = true
|
121
|
-
visible.value = cursorDown
|
122
|
-
}
|
123
|
-
|
124
|
-
onBeforeUnmount(() => {
|
125
|
-
restoreOnselectstart()
|
126
|
-
document.removeEventListener('mouseup', mouseUpDocumentHandler)
|
127
|
-
})
|
128
|
-
|
129
|
-
const restoreOnselectstart = () => {
|
130
|
-
if (document.onselectstart !== originalOnSelectStart)
|
131
|
-
document.onselectstart = originalOnSelectStart
|
132
|
-
}
|
133
|
-
|
134
|
-
useEventListener(toRef(scrollbar, 'scrollbarElement'), 'mousemove', mouseMoveScrollbarHandler)
|
135
|
-
useEventListener(toRef(scrollbar, 'scrollbarElement'), 'mouseleave', mouseLeaveScrollbarHandler)
|
136
|
-
|
137
|
-
return () => {
|
138
|
-
return (
|
139
|
-
<Transition name={`${props.className}-fade`}>
|
140
|
-
<div
|
141
|
-
ref={(e) => (instance.value = e)}
|
142
|
-
class={
|
143
|
-
props.always || visible.value
|
144
|
-
? [`${props.className}-bar`, 'is-' + bar.value.key]
|
145
|
-
: [`${props.className}-bar`, 'is-' + bar.value.key, 'hidden']
|
146
|
-
}
|
147
|
-
onMousedown={clickTrackHandler}
|
148
|
-
>
|
149
|
-
<div
|
150
|
-
ref={(e) => (thumb.value = e)}
|
151
|
-
class={`${props.className}-thumb`}
|
152
|
-
style={thumbStyle.value}
|
153
|
-
onMousedown={clickThumbHandler}
|
154
|
-
/>
|
155
|
-
</div>
|
156
|
-
</Transition>
|
157
|
-
)
|
158
|
-
}
|
159
|
-
}
|
160
|
-
})
|
161
|
-
|
162
|
-
Thumb.inheritAttrs = false
|
163
|
-
|
164
|
-
export default Thumb
|
@@ -1,200 +0,0 @@
|
|
1
|
-
import { ExtractPropTypes, StyleValue } from 'vue'
|
2
|
-
import { defineComponent, watch, provide, onMounted, ref, computed } from 'vue'
|
3
|
-
import { useEventListener, useResizeObserver } from '@vueuse/core'
|
4
|
-
import { isNumber, isObject, getPrefixCls } from '@gx-design-vue/pro-utils'
|
5
|
-
import { scrollbarEmits, scrollbarProps } from './props'
|
6
|
-
import { scrollbarContextKey } from './context'
|
7
|
-
import Bar from './components/Bar'
|
8
|
-
import { addUnit } from './util'
|
9
|
-
|
10
|
-
import './style.less'
|
11
|
-
|
12
|
-
export type ScrollbarProps = ExtractPropTypes<typeof scrollbarProps>
|
13
|
-
|
14
|
-
const GBars = defineComponent({
|
15
|
-
name: 'GBars',
|
16
|
-
props: scrollbarProps,
|
17
|
-
emits: scrollbarEmits,
|
18
|
-
setup(props, { emit }) {
|
19
|
-
const prefixCls = getPrefixCls({
|
20
|
-
suffixCls: 'scrollbar'
|
21
|
-
})
|
22
|
-
|
23
|
-
let stopResizeObserver: (() => void) | undefined = undefined
|
24
|
-
let stopResizeListener: (() => void) | undefined = undefined
|
25
|
-
|
26
|
-
const scrollbar$ = ref()
|
27
|
-
const wrap$ = ref()
|
28
|
-
const resize$ = ref()
|
29
|
-
|
30
|
-
const sizeWidth = ref('0')
|
31
|
-
const sizeHeight = ref('0')
|
32
|
-
const barRef = ref()
|
33
|
-
const moveX = ref(0)
|
34
|
-
const moveY = ref(0)
|
35
|
-
const ratioY = ref(1)
|
36
|
-
const ratioX = ref(1)
|
37
|
-
const SCOPE = 'GBars'
|
38
|
-
const GAP = 4 // top 2 + bottom 2 of bar instance
|
39
|
-
|
40
|
-
const style = computed<StyleValue>(() => {
|
41
|
-
const style: any = {}
|
42
|
-
if (props.height) style.height = addUnit(props.height)
|
43
|
-
if (props.maxHeight) style.maxHeight = addUnit(props.maxHeight)
|
44
|
-
return [props.wrapStyle, style]
|
45
|
-
})
|
46
|
-
|
47
|
-
const handleScroll = () => {
|
48
|
-
if (wrap$.value) {
|
49
|
-
barRef.value?.handleScroll(wrap$.value)
|
50
|
-
|
51
|
-
emit('scroll', {
|
52
|
-
scrollTop: wrap$.value.scrollTop,
|
53
|
-
scrollLeft: wrap$.value.scrollLeft
|
54
|
-
})
|
55
|
-
}
|
56
|
-
}
|
57
|
-
|
58
|
-
function scrollTo(xCord: number, yCord?: number): void
|
59
|
-
function scrollTo(options: ScrollToOptions): void
|
60
|
-
function scrollTo(arg1: unknown, arg2?: number) {
|
61
|
-
if (isObject(arg1)) {
|
62
|
-
wrap$.value!.scrollTo(arg1)
|
63
|
-
} else if (isNumber(arg1) && isNumber(arg2)) {
|
64
|
-
wrap$.value!.scrollTo(arg1, arg2)
|
65
|
-
}
|
66
|
-
}
|
67
|
-
|
68
|
-
const setScrollTop = (value: number) => {
|
69
|
-
if (!isNumber(value)) {
|
70
|
-
console.warn(SCOPE, 'value 必须为数字')
|
71
|
-
return
|
72
|
-
}
|
73
|
-
wrap$.value!.scrollTop = value
|
74
|
-
}
|
75
|
-
|
76
|
-
const setScrollLeft = (value: number) => {
|
77
|
-
if (!isNumber(value)) {
|
78
|
-
console.warn(SCOPE, 'value 必须为数字')
|
79
|
-
return
|
80
|
-
}
|
81
|
-
wrap$.value!.scrollLeft = value
|
82
|
-
}
|
83
|
-
|
84
|
-
const update = () => {
|
85
|
-
if (!wrap$.value) return
|
86
|
-
const offsetHeight = wrap$.value.offsetHeight - GAP
|
87
|
-
const offsetWidth = wrap$.value.offsetWidth - GAP
|
88
|
-
|
89
|
-
const originalHeight = offsetHeight ** 2 / wrap$.value.scrollHeight
|
90
|
-
const originalWidth = offsetWidth ** 2 / wrap$.value.scrollWidth
|
91
|
-
const height = Math.max(originalHeight, props.minSize)
|
92
|
-
const width = Math.max(originalWidth, props.minSize)
|
93
|
-
|
94
|
-
ratioY.value =
|
95
|
-
originalHeight / (offsetHeight - originalHeight) / (height / (offsetHeight - height))
|
96
|
-
ratioX.value = originalWidth / (offsetWidth - originalWidth) / (width / (offsetWidth - width))
|
97
|
-
|
98
|
-
sizeHeight.value = height + GAP < offsetHeight ? `${height}px` : ''
|
99
|
-
sizeWidth.value = width + GAP < offsetWidth ? `${width}px` : ''
|
100
|
-
}
|
101
|
-
|
102
|
-
watch(
|
103
|
-
() => props.noresize,
|
104
|
-
(noresize) => {
|
105
|
-
if (noresize) {
|
106
|
-
stopResizeObserver?.()
|
107
|
-
stopResizeListener?.()
|
108
|
-
} else {
|
109
|
-
;({ stop: stopResizeObserver } = useResizeObserver(resize$, update))
|
110
|
-
stopResizeListener = useEventListener('resize', update)
|
111
|
-
}
|
112
|
-
},
|
113
|
-
{ immediate: true }
|
114
|
-
)
|
115
|
-
|
116
|
-
watch(
|
117
|
-
() => [props.maxHeight, props.height],
|
118
|
-
() => {
|
119
|
-
if (!props.native)
|
120
|
-
nextTick(() => {
|
121
|
-
update()
|
122
|
-
if (wrap$.value) {
|
123
|
-
barRef.value?.handleScroll(wrap$.value)
|
124
|
-
}
|
125
|
-
})
|
126
|
-
}
|
127
|
-
)
|
128
|
-
|
129
|
-
provide(
|
130
|
-
scrollbarContextKey,
|
131
|
-
reactive({
|
132
|
-
scrollbarElement: scrollbar$,
|
133
|
-
wrapElement: wrap$
|
134
|
-
})
|
135
|
-
)
|
136
|
-
|
137
|
-
onMounted(() => {
|
138
|
-
if (!props.native) nextTick(() => update())
|
139
|
-
})
|
140
|
-
|
141
|
-
return {
|
142
|
-
barRef,
|
143
|
-
wrap$,
|
144
|
-
scrollbar$,
|
145
|
-
resize$,
|
146
|
-
style,
|
147
|
-
moveX,
|
148
|
-
moveY,
|
149
|
-
prefixCls,
|
150
|
-
sizeHeight,
|
151
|
-
sizeWidth,
|
152
|
-
ratioX,
|
153
|
-
ratioY,
|
154
|
-
handleScroll,
|
155
|
-
scrollTo,
|
156
|
-
setScrollTop,
|
157
|
-
setScrollLeft
|
158
|
-
}
|
159
|
-
},
|
160
|
-
render() {
|
161
|
-
const CustomTag: any = this.tag
|
162
|
-
return (
|
163
|
-
<div ref={(e) => (this.scrollbar$ = e)} class={this.prefixCls}>
|
164
|
-
<div
|
165
|
-
ref={(e) => (this.wrap$ = e)}
|
166
|
-
class={[
|
167
|
-
this.wrapClass,
|
168
|
-
`${this.prefixCls}-wrap`,
|
169
|
-
this.native ? '' : `${this.prefixCls}-wrap-hidden-default`
|
170
|
-
]}
|
171
|
-
style={this.style}
|
172
|
-
onScroll={this.handleScroll}
|
173
|
-
>
|
174
|
-
<CustomTag
|
175
|
-
ref={(e) => (this.resize$ = e)}
|
176
|
-
class={[`${this.prefixCls}-view`, this.viewClass]}
|
177
|
-
style={this.viewStyle}
|
178
|
-
>
|
179
|
-
{this.$slots.default?.()}
|
180
|
-
</CustomTag>
|
181
|
-
</div>
|
182
|
-
{!this.native && (
|
183
|
-
<Bar
|
184
|
-
ref={(e) => (this.barRef = e)}
|
185
|
-
className={this.prefixCls}
|
186
|
-
height={this.sizeHeight}
|
187
|
-
width={this.sizeWidth}
|
188
|
-
always={this.always}
|
189
|
-
ratioX={this.ratioX}
|
190
|
-
ratioY={this.ratioY}
|
191
|
-
/>
|
192
|
-
)}
|
193
|
-
</div>
|
194
|
-
)
|
195
|
-
}
|
196
|
-
})
|
197
|
-
|
198
|
-
GBars.inheritAttrs = false
|
199
|
-
|
200
|
-
export default GBars
|
@@ -1,65 +0,0 @@
|
|
1
|
-
import type { CSSProperties } from 'vue'
|
2
|
-
import { isNumber } from '@gx-design-vue/pro-utils'
|
3
|
-
|
4
|
-
const wrapperKey = Symbol()
|
5
|
-
|
6
|
-
export type PropWrapper<T> = { [wrapperKey]: T }
|
7
|
-
|
8
|
-
export const definePropType = <T>(val: any) =>
|
9
|
-
({ [wrapperKey]: val } as PropWrapper<T>)
|
10
|
-
|
11
|
-
export const scrollbarProps = {
|
12
|
-
height: {
|
13
|
-
type: [ String, Number ],
|
14
|
-
default: ''
|
15
|
-
},
|
16
|
-
maxHeight: {
|
17
|
-
type: [ String, Number ],
|
18
|
-
default: ''
|
19
|
-
},
|
20
|
-
native: {
|
21
|
-
type: Boolean,
|
22
|
-
default: false
|
23
|
-
},
|
24
|
-
wrapStyle: {
|
25
|
-
type: [String, Array] as PropType<string | CSSProperties[]>,
|
26
|
-
default: ''
|
27
|
-
},
|
28
|
-
wrapClass: {
|
29
|
-
type: [ String, Array ],
|
30
|
-
default: ''
|
31
|
-
},
|
32
|
-
viewClass: {
|
33
|
-
type: [ String, Array ],
|
34
|
-
default: ''
|
35
|
-
},
|
36
|
-
viewStyle: {
|
37
|
-
type: [ String, Array, Object ],
|
38
|
-
default: ''
|
39
|
-
},
|
40
|
-
noresize: Boolean, // 如果 container 尺寸不会发生变化,最好设置它可以优化性能
|
41
|
-
tag: {
|
42
|
-
type: String,
|
43
|
-
default: 'div'
|
44
|
-
},
|
45
|
-
always: {
|
46
|
-
type: Boolean,
|
47
|
-
default: false
|
48
|
-
},
|
49
|
-
minSize: {
|
50
|
-
type: Number,
|
51
|
-
default: 20
|
52
|
-
}
|
53
|
-
}
|
54
|
-
|
55
|
-
|
56
|
-
export const scrollbarEmits = {
|
57
|
-
scroll: ({
|
58
|
-
scrollTop,
|
59
|
-
scrollLeft
|
60
|
-
}: {
|
61
|
-
scrollTop: number
|
62
|
-
scrollLeft: number
|
63
|
-
}) => isNumber(scrollTop) && isNumber(scrollLeft)
|
64
|
-
}
|
65
|
-
export type ScrollbarEmits = typeof scrollbarEmits
|
@@ -1,85 +0,0 @@
|
|
1
|
-
:root {
|
2
|
-
--wd-scrollbar-opacity: 0.3;
|
3
|
-
--wd-text-color-secondary: #909399;
|
4
|
-
--wd-scrollbar-background-color: var(--wd-text-color-secondary);
|
5
|
-
--wd-scrollbar-hover-opacity: 0.5;
|
6
|
-
--wd-scrollbar-hover-background-color: var(--wd-text-color-secondary);
|
7
|
-
}
|
8
|
-
|
9
|
-
.@{gx-prefix}-scrollbar {
|
10
|
-
position: relative;
|
11
|
-
height: 100%;
|
12
|
-
overflow: hidden;
|
13
|
-
|
14
|
-
&-wrap {
|
15
|
-
height: 100%;
|
16
|
-
overflow: auto;
|
17
|
-
|
18
|
-
&-hidden-default {
|
19
|
-
scrollbar-width: none;
|
20
|
-
|
21
|
-
&::-webkit-scrollbar {
|
22
|
-
display: none;
|
23
|
-
}
|
24
|
-
}
|
25
|
-
}
|
26
|
-
|
27
|
-
&-bar {
|
28
|
-
position: absolute;
|
29
|
-
right: 2px;
|
30
|
-
bottom: 2px;
|
31
|
-
z-index: 999;
|
32
|
-
border-radius: 4px;
|
33
|
-
|
34
|
-
&.is-vertical {
|
35
|
-
top: 2px;
|
36
|
-
width: 6px;
|
37
|
-
|
38
|
-
& > div {
|
39
|
-
width: 100%;
|
40
|
-
}
|
41
|
-
}
|
42
|
-
|
43
|
-
&.is-horizontal {
|
44
|
-
left: 2px;
|
45
|
-
height: 6px;
|
46
|
-
|
47
|
-
& > div {
|
48
|
-
height: 100%;
|
49
|
-
}
|
50
|
-
}
|
51
|
-
}
|
52
|
-
|
53
|
-
&-thumb {
|
54
|
-
position: relative;
|
55
|
-
display: block;
|
56
|
-
width: 0;
|
57
|
-
height: 0;
|
58
|
-
cursor: pointer;
|
59
|
-
background-color: var(--wd-scrollbar-background-color);
|
60
|
-
border-radius: inherit;
|
61
|
-
opacity: var(--wd-scrollbar-opacity);
|
62
|
-
-webkit-transition: var(--wd-transition-duration) background-color;
|
63
|
-
transition: var(--wd-transition-duration) background-color;
|
64
|
-
|
65
|
-
&:hover {
|
66
|
-
background-color: var(--wd-scrollbar-hover-background-color);
|
67
|
-
opacity: var(--wd-scrollbar-hover-opacity);
|
68
|
-
}
|
69
|
-
}
|
70
|
-
|
71
|
-
&-fade-enter-active {
|
72
|
-
-webkit-transition: opacity 340ms ease-out;
|
73
|
-
transition: opacity 340ms ease-out;
|
74
|
-
}
|
75
|
-
|
76
|
-
&-fade-leave-active {
|
77
|
-
-webkit-transition: opacity 120ms ease-out;
|
78
|
-
transition: opacity 120ms ease-out;
|
79
|
-
}
|
80
|
-
}
|
81
|
-
|
82
|
-
.@{gx-prefix}-scrollbar-fade-enter-from,
|
83
|
-
.@{gx-prefix}-scrollbar-fade-leave-active {
|
84
|
-
opacity: 0;
|
85
|
-
}
|
@@ -1,40 +0,0 @@
|
|
1
|
-
import type { CSSProperties } from 'vue'
|
2
|
-
import { isNumber, isString } from '@gx-design-vue/pro-utils'
|
3
|
-
|
4
|
-
export const BAR_MAP = {
|
5
|
-
vertical: {
|
6
|
-
offset: 'offsetHeight',
|
7
|
-
scroll: 'scrollTop',
|
8
|
-
scrollSize: 'scrollHeight',
|
9
|
-
size: 'height',
|
10
|
-
key: 'vertical',
|
11
|
-
axis: 'Y',
|
12
|
-
client: 'clientY',
|
13
|
-
direction: 'top',
|
14
|
-
},
|
15
|
-
horizontal: {
|
16
|
-
offset: 'offsetWidth',
|
17
|
-
scroll: 'scrollLeft',
|
18
|
-
scrollSize: 'scrollWidth',
|
19
|
-
size: 'width',
|
20
|
-
key: 'horizontal',
|
21
|
-
axis: 'X',
|
22
|
-
client: 'clientX',
|
23
|
-
direction: 'left',
|
24
|
-
},
|
25
|
-
}
|
26
|
-
|
27
|
-
export const renderThumbStyle = ({ move, size, bar }): CSSProperties => ({
|
28
|
-
[bar.size]: size,
|
29
|
-
transform: `translate${bar.axis}(${move}%)`,
|
30
|
-
})
|
31
|
-
|
32
|
-
export function addUnit(value: string | number, defaultUnit = 'px') {
|
33
|
-
if (!value) return ''
|
34
|
-
if (isString(value)) {
|
35
|
-
return value
|
36
|
-
} else if (isNumber(value)) {
|
37
|
-
return `${value}${defaultUnit}`
|
38
|
-
}
|
39
|
-
return false
|
40
|
-
}
|