@gx-design-vue/create-gx-cli 0.0.4 → 0.0.5
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.
- package/package.json +1 -1
- package/src/main.js +1 -0
- package/template-design-pro/.editorconfig +19 -0
- package/template-design-pro/.env +2 -0
- package/template-design-pro/.env.development +18 -0
- package/template-design-pro/.env.pro +32 -0
- package/template-design-pro/.env.production +32 -0
- package/template-design-pro/.env.test +20 -0
- package/template-design-pro/.eslintignore +16 -0
- package/template-design-pro/.eslintrc.js +64 -0
- package/template-design-pro/.gitpod.yml +6 -0
- package/template-design-pro/.husky/pre-commit +4 -0
- package/template-design-pro/.prettierignore +9 -0
- package/template-design-pro/.stylelintignore +3 -0
- package/template-design-pro/.yarnclean +48 -0
- package/template-design-pro/LICENSE +21 -0
- package/template-design-pro/README.md +111 -0
- package/template-design-pro/build/constant.ts +6 -0
- package/template-design-pro/build/generate/generateModifyVars.ts +18 -0
- package/template-design-pro/build/getConfigFileName.ts +13 -0
- package/template-design-pro/build/script/buildConf.ts +44 -0
- package/template-design-pro/build/script/postBuild.ts +25 -0
- package/template-design-pro/build/script/reSetRootHtml.ts +20 -0
- package/template-design-pro/build/utils.ts +85 -0
- package/template-design-pro/build/vite/cdn.ts +7 -0
- package/template-design-pro/build/vite/optimizer.ts +22 -0
- package/template-design-pro/build/vite/plugin/autoImport.ts +18 -0
- package/template-design-pro/build/vite/plugin/compress.ts +35 -0
- package/template-design-pro/build/vite/plugin/hmr.ts +25 -0
- package/template-design-pro/build/vite/plugin/html.ts +47 -0
- package/template-design-pro/build/vite/plugin/index.ts +89 -0
- package/template-design-pro/build/vite/plugin/mock.ts +20 -0
- package/template-design-pro/build/vite/plugin/pwa.ts +37 -0
- package/template-design-pro/build/vite/plugin/styleImport.ts +129 -0
- package/template-design-pro/build/vite/plugin/visualizer.ts +17 -0
- package/template-design-pro/build/vite/plugin/vite-plugin-antd-theme/index.ts +24 -0
- package/template-design-pro/build/vite/plugin/vite-plugin-mock/createMockServer.ts +303 -0
- package/template-design-pro/build/vite/plugin/vite-plugin-mock/createProdMockServer.ts +93 -0
- package/template-design-pro/build/vite/plugin/vite-plugin-mock/index.ts +68 -0
- package/template-design-pro/build/vite/plugin/vite-plugin-mock/types.ts +30 -0
- package/template-design-pro/build/vite/plugin/vite-plugin-mock/utils.ts +26 -0
- package/template-design-pro/commitlint.config.js +32 -0
- package/template-design-pro/config/config.ts +14 -0
- package/template-design-pro/config/default/animate.ts +30 -0
- package/template-design-pro/config/default/defaultSettings.ts +75 -0
- package/template-design-pro/config/default/network.ts +16 -0
- package/template-design-pro/config/default/proxy.ts +26 -0
- package/template-design-pro/config/default/theme.ts +43 -0
- package/template-design-pro/config/default/themeColor.ts +62 -0
- package/template-design-pro/index.html +45 -0
- package/template-design-pro/jest.config.mjs +36 -0
- package/template-design-pro/mock/_createProductionServer.ts +19 -0
- package/template-design-pro/mock/_util.ts +55 -0
- package/template-design-pro/mock/controller/menu.ts +85 -0
- package/template-design-pro/mock/controller/notices.ts +114 -0
- package/template-design-pro/mock/system/dict.ts +60 -0
- package/template-design-pro/mock/system/user.ts +218 -0
- package/template-design-pro/package.json +151 -0
- package/template-design-pro/pnpm-lock.yaml +9913 -0
- package/template-design-pro/postcss.config.js +5 -0
- package/template-design-pro/prettier.config.js +18 -0
- package/template-design-pro/public/resource/css/index.css +171 -0
- 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 +5 -0
- 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 +47 -0
- 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 +69 -0
- package/template-design-pro/src/assets/logo.png +0 -0
- package/template-design-pro/src/assets/menu_font/iconfont.css +94 -0
- package/template-design-pro/src/assets/menu_font/iconfont.eot +0 -0
- package/template-design-pro/src/assets/menu_font/iconfont.js +1 -0
- package/template-design-pro/src/assets/menu_font/iconfont.json +142 -0
- package/template-design-pro/src/assets/menu_font/iconfont.svg +57 -0
- 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 +94 -0
- package/template-design-pro/src/common/global.ts +1 -0
- package/template-design-pro/src/components/GDesign/ProLayout/BasicLayout.less +80 -0
- package/template-design-pro/src/components/GDesign/ProLayout/BasicLayout.tsx +342 -0
- package/template-design-pro/src/components/GDesign/ProLayout/PageLoading.tsx +20 -0
- package/template-design-pro/src/components/GDesign/ProLayout/RenderTypings.ts +31 -0
- package/template-design-pro/src/components/GDesign/ProLayout/RouteContext.tsx +82 -0
- package/template-design-pro/src/components/GDesign/ProLayout/WrapContent.tsx +69 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalFooter/index.tsx +88 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalHeader/DefaultHeader.tsx +189 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalHeader/Header.less +8 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalHeader/index.tsx +105 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalHeader/props.ts +69 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalHeader/style.less +144 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/LogoContent/index.tsx +81 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/LogoContent/props.ts +29 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/MultiTab/index.tsx +384 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/MultiTab/props.ts +15 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/MultiTab/style.less +79 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/NoticeIcon/NoticeIcon.tsx +148 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/NoticeIcon/NoticeList.module.less +115 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/NoticeIcon/NoticeList.tsx +154 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/NoticeIcon/index.less +39 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/NoticeIcon/index.tsx +133 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/PageContainer/index.tsx +190 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/PageContainer/props.ts +48 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/PageContainer/style.less +128 -0
- 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 +63 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/RightContent/HeaderSearch.tsx +122 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/RightContent/headerSearch.less +30 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/RightContent/index.tsx +95 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/RightContent/style.less +90 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SettingDrawer/BlockCheckbox.tsx +70 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SettingDrawer/LayoutSetting.tsx +107 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SettingDrawer/ThemeColor.tsx +68 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SettingDrawer/index.tsx +346 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/BaseMenu.tsx +224 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/SiderMenu.tsx +224 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/index.tsx +43 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/props.ts +112 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/style.less +262 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/typings.ts +44 -0
- package/template-design-pro/src/components/GDesign/ProLayout/default.less +2 -0
- package/template-design-pro/src/components/GDesign/ProLayout/defaultSettings.ts +121 -0
- package/template-design-pro/src/components/GDesign/ProLayout/hooks/context/index.ts +45 -0
- package/template-design-pro/src/components/GDesign/ProLayout/index.ts +43 -0
- package/template-design-pro/src/components/GDesign/ProLayout/props.ts +57 -0
- package/template-design-pro/src/components/GDesign/ProLayout/style.less +272 -0
- package/template-design-pro/src/components/GDesign/ProLayout/typings.ts +1 -0
- package/template-design-pro/src/components/GDesign/ProLayout/utils/getMenuData.ts +31 -0
- package/template-design-pro/src/components/GDesign/ProLayout/utils/index.ts +94 -0
- package/template-design-pro/src/components/GDesign/ProLayout/utils/isImg/index.ts +6 -0
- package/template-design-pro/src/components/GDesign/ProLayout/utils/isUrl/index.ts +5 -0
- package/template-design-pro/src/components/GDesign/Result/index.tsx +142 -0
- package/template-design-pro/src/components/GDesign/Result/style.less +140 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/components/Bar/index.tsx +56 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/components/Bar/props.ts +23 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/components/Thumb/index.tsx +164 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/components/Thumb/props.ts +11 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/context.ts +10 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/index.tsx +200 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/props.ts +65 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/style.less +85 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/util.ts +40 -0
- package/template-design-pro/src/components/GDesign/utils/index.ts +7 -0
- package/template-design-pro/src/components/PageLoading/index.tsx +44 -0
- package/template-design-pro/src/components/PageTransition/index.vue +98 -0
- package/template-design-pro/src/components/index.ts +6 -0
- package/template-design-pro/src/core/ant-design/index.ts +14 -0
- package/template-design-pro/src/core/gx-admin-design/index.ts +7 -0
- package/template-design-pro/src/core/gx-admin-directives/index.ts +8 -0
- package/template-design-pro/src/core/gx-admin-directives/permission.ts +28 -0
- package/template-design-pro/src/core/gx-design/index.ts +7 -0
- package/template-design-pro/src/core/gx-pro-design/index.ts +10 -0
- package/template-design-pro/src/core/index.ts +27 -0
- package/template-design-pro/src/design/ant-design/index.less +4 -0
- package/template-design-pro/src/design/ant-design/layout.less +29 -0
- package/template-design-pro/src/design/ant-design/menu.less +55 -0
- package/template-design-pro/src/design/ant-design/table.less +67 -0
- package/template-design-pro/src/design/ant-design/tooltip.less +13 -0
- package/template-design-pro/src/design/color.less +1 -0
- package/template-design-pro/src/design/config.less +5 -0
- package/template-design-pro/src/design/index.less +41 -0
- package/template-design-pro/src/design/mixin.less +66 -0
- package/template-design-pro/src/design/normalize.less +390 -0
- package/template-design-pro/src/global.less +15 -0
- package/template-design-pro/src/hooks/core/index.ts +3 -0
- package/template-design-pro/src/hooks/core/useRequest/index.ts +70 -0
- package/template-design-pro/src/hooks/core/useRequest/typings.ts +0 -0
- package/template-design-pro/src/hooks/event/index.ts +3 -0
- package/template-design-pro/src/hooks/event/useClipboard.ts +14 -0
- package/template-design-pro/src/hooks/system/index.ts +5 -0
- package/template-design-pro/src/hooks/system/useDict.ts +62 -0
- package/template-design-pro/src/hooks/system/usePermissions.ts +39 -0
- package/template-design-pro/src/hooks/typings.ts +17 -0
- package/template-design-pro/src/layout/BasicLayout.vue +104 -0
- package/template-design-pro/src/layout/BlankLayout.vue +5 -0
- package/template-design-pro/src/layout/ContentView.vue +76 -0
- package/template-design-pro/src/layout/IframeView.vue +1 -0
- package/template-design-pro/src/layout/UserLayout.vue +7 -0
- package/template-design-pro/src/main.ts +34 -0
- package/template-design-pro/src/plugins/index.ts +3 -0
- package/template-design-pro/src/router/guard/index.ts +84 -0
- package/template-design-pro/src/router/guard/permissions.ts +73 -0
- package/template-design-pro/src/router/guard/stateGuard.ts +11 -0
- package/template-design-pro/src/router/helper/routeHelper.ts +244 -0
- package/template-design-pro/src/router/helper/utils.ts +19 -0
- package/template-design-pro/src/router/index.ts +30 -0
- package/template-design-pro/src/router/routes/index.ts +85 -0
- package/template-design-pro/src/router/routes/modules/workplace.ts +19 -0
- package/template-design-pro/src/services/common/index.ts +11 -0
- package/template-design-pro/src/services/controller/router.ts +10 -0
- package/template-design-pro/src/services/controller/user.ts +35 -0
- package/template-design-pro/src/services/system/dictData.ts +10 -0
- package/template-design-pro/src/services/system/notices.ts +9 -0
- package/template-design-pro/src/store/index.ts +32 -0
- package/template-design-pro/src/store/modules/dict.ts +27 -0
- package/template-design-pro/src/store/modules/permission.ts +19 -0
- package/template-design-pro/src/store/modules/routes.ts +110 -0
- package/template-design-pro/src/store/modules/settings.ts +102 -0
- package/template-design-pro/src/store/modules/tabsRouter.ts +73 -0
- package/template-design-pro/src/store/modules/user.ts +153 -0
- package/template-design-pro/src/utils/accessToken.ts +93 -0
- package/template-design-pro/src/utils/crypto.ts +39 -0
- package/template-design-pro/src/utils/env.ts +52 -0
- package/template-design-pro/src/utils/fetchFile.ts +79 -0
- package/template-design-pro/src/utils/index.ts +127 -0
- package/template-design-pro/src/utils/pageTitle.ts +17 -0
- package/template-design-pro/src/utils/request/XHR.ts +131 -0
- package/template-design-pro/src/utils/request/axiosCancel.ts +60 -0
- package/template-design-pro/src/utils/request/checkStatus.ts +26 -0
- package/template-design-pro/src/utils/request/index.ts +145 -0
- package/template-design-pro/src/utils/request/typings.ts +114 -0
- package/template-design-pro/src/utils/storage.ts +194 -0
- package/template-design-pro/src/utils/uploadFile.ts +26 -0
- package/template-design-pro/src/utils/util.ts +278 -0
- package/template-design-pro/src/utils/validate.ts +221 -0
- package/template-design-pro/src/views/Iframe/index.vue +76 -0
- package/template-design-pro/src/views/MenuOne/index.vue +15 -0
- package/template-design-pro/src/views/MenuTwo/index.vue +13 -0
- package/template-design-pro/src/views/exception/403/index.vue +9 -0
- package/template-design-pro/src/views/exception/404/index.vue +9 -0
- package/template-design-pro/src/views/user/login/index.vue +110 -0
- package/template-design-pro/src/views/user/login/style.less +38 -0
- package/template-design-pro/stylelint.config.js +106 -0
- package/template-design-pro/tests/__mocks__/fileMock.ts +1 -0
- package/template-design-pro/tests/__mocks__/styleMock.ts +1 -0
- package/template-design-pro/tests/__mocks__/workerMock.ts +5 -0
- package/template-design-pro/tests/server/README.md +15 -0
- package/template-design-pro/tests/server/controller/FileController.ts +18 -0
- package/template-design-pro/tests/server/controller/UserController.ts +15 -0
- package/template-design-pro/tests/server/ecosystem.config.js +18 -0
- package/template-design-pro/tests/server/index.ts +63 -0
- package/template-design-pro/tests/server/nodemon.json +8 -0
- package/template-design-pro/tests/server/package.json +36 -0
- package/template-design-pro/tests/server/routes.ts +23 -0
- package/template-design-pro/tests/server/service/FileService.ts +54 -0
- package/template-design-pro/tests/server/service/UserService.ts +25 -0
- package/template-design-pro/tests/server/tsconfig.json +15 -0
- package/template-design-pro/tests/server/utils.ts +9 -0
- package/template-design-pro/tests/server/yarn.lock +2955 -0
- package/template-design-pro/tests/test.spec.ts +16 -0
- package/template-design-pro/tsconfig.json +47 -0
- package/template-design-pro/types/auto-imports.d.ts +61 -0
- package/template-design-pro/types/config.d.ts +100 -0
- package/template-design-pro/types/global.d.ts +103 -0
- package/template-design-pro/types/gx-components.d.ts +24 -0
- package/template-design-pro/types/index.d.ts +13 -0
- package/template-design-pro/types/mock.d.ts +23 -0
- package/template-design-pro/types/module.d.ts +16 -0
- package/template-design-pro/types/response.d.ts +15 -0
- package/template-design-pro/types/route.d.ts +89 -0
- package/template-design-pro/vite.config.ts +136 -0
- package/template-design-pro/yarn.lock +9697 -0
@@ -0,0 +1,278 @@
|
|
1
|
+
import dayjs from 'dayjs'
|
2
|
+
import config from '/config/config'
|
3
|
+
import { deepCopy, scrollTo, getBlobUrl } from '@gx-design-vue/pro-utils'
|
4
|
+
|
5
|
+
const { viewScrollRoot } = config.defaultSettings
|
6
|
+
|
7
|
+
export function timeFix() {
|
8
|
+
const time = new Date()
|
9
|
+
const hour = time.getHours()
|
10
|
+
return hour < 9 ? '早上好' : hour <= 11 ? '上午好' : hour <= 13 ? '中午好' : hour < 20 ? '下午好' : '晚上好'
|
11
|
+
}
|
12
|
+
|
13
|
+
/**
|
14
|
+
* @Author gaoxiang
|
15
|
+
* @DateTime 2020/7/23
|
16
|
+
* @lastTime 2020/7/23
|
17
|
+
* @description 去除空格
|
18
|
+
*/
|
19
|
+
export function trim(str: string, isGlobal?: boolean) {
|
20
|
+
if (typeof str === 'undefined' || str.length === 0) return ''
|
21
|
+
let result
|
22
|
+
result = str.replace(/(^\s+)|(\s+$)/g, '')
|
23
|
+
if (isGlobal) {
|
24
|
+
result = result.replace(/\s/g, '')
|
25
|
+
}
|
26
|
+
return result
|
27
|
+
}
|
28
|
+
|
29
|
+
/**
|
30
|
+
* @Author gx12358
|
31
|
+
* @DateTime 2021/11/3
|
32
|
+
* @lastTime 2021/11/3
|
33
|
+
* @description get参数处理
|
34
|
+
*/
|
35
|
+
export function tansParams(params) {
|
36
|
+
let result = ''
|
37
|
+
for (const propName of Object.keys(params)) {
|
38
|
+
const value = params[propName]
|
39
|
+
const part = encodeURIComponent(propName) + '='
|
40
|
+
if (value !== null && typeof (value) !== 'undefined' && value !== '') {
|
41
|
+
if (typeof value === 'object') {
|
42
|
+
for (const key of Object.keys(value)) {
|
43
|
+
if (value[key] !== null && typeof (value[key]) !== 'undefined') {
|
44
|
+
const params = propName + '[' + key + ']'
|
45
|
+
const subPart = encodeURIComponent(params) + '='
|
46
|
+
result += subPart + encodeURIComponent(value[key]) + '&'
|
47
|
+
}
|
48
|
+
}
|
49
|
+
} else {
|
50
|
+
result += part + encodeURIComponent(value) + '&'
|
51
|
+
}
|
52
|
+
}
|
53
|
+
}
|
54
|
+
return result
|
55
|
+
}
|
56
|
+
|
57
|
+
/**
|
58
|
+
* @Author gaoxiang
|
59
|
+
* @DateTime 2020/11/1
|
60
|
+
* @lastTime 2020/11/1
|
61
|
+
* @description 处理table多选翻页 selectItems 丢失问题
|
62
|
+
*/
|
63
|
+
export function handleSelectPage(config: {
|
64
|
+
rowKey?: string;
|
65
|
+
tableData: any[];
|
66
|
+
selectItems: any[];
|
67
|
+
oldSelectItems: any[];
|
68
|
+
}) {
|
69
|
+
const {
|
70
|
+
tableData,
|
71
|
+
oldSelectItems,
|
72
|
+
selectItems,
|
73
|
+
rowKey = 'id'
|
74
|
+
} = config
|
75
|
+
const currentSelectItems = oldSelectItems.filter((item: any) => tableData.some(el =>
|
76
|
+
el[rowKey] === item[rowKey])
|
77
|
+
)
|
78
|
+
let newSelectItems = deepCopy(oldSelectItems)
|
79
|
+
if (currentSelectItems.length < selectItems.length) {
|
80
|
+
const pushItems = selectItems.filter((item: any) => !currentSelectItems.find(el =>
|
81
|
+
el[rowKey] === item[rowKey])
|
82
|
+
)
|
83
|
+
pushItems.map((item: any) => {
|
84
|
+
newSelectItems.push(item)
|
85
|
+
return item
|
86
|
+
})
|
87
|
+
} else {
|
88
|
+
const filterItems = currentSelectItems.filter((item: any) =>
|
89
|
+
!selectItems.find((el: any) => el[rowKey] === item[rowKey])
|
90
|
+
)
|
91
|
+
newSelectItems = newSelectItems.filter((item: any) =>
|
92
|
+
!filterItems.find((el: any) => el[rowKey] === item[rowKey])
|
93
|
+
)
|
94
|
+
}
|
95
|
+
return newSelectItems
|
96
|
+
}
|
97
|
+
|
98
|
+
/**
|
99
|
+
* @Author gaoxiang
|
100
|
+
* @DateTime 2019/11/29
|
101
|
+
* @lastTime 2019/11/29
|
102
|
+
* @description 排序(从大到小)
|
103
|
+
*/
|
104
|
+
export function compareToMin(obj1: any, obj2: any, key: string) {
|
105
|
+
const val1 = obj1[key]
|
106
|
+
const val2 = obj2[key]
|
107
|
+
let result = 0
|
108
|
+
if (val1 < val2) {
|
109
|
+
result = 0
|
110
|
+
} else if (val1 > val2) {
|
111
|
+
result = -1
|
112
|
+
}
|
113
|
+
return result
|
114
|
+
}
|
115
|
+
|
116
|
+
/**
|
117
|
+
* @Author gaoxiang
|
118
|
+
* @DateTime 2019/11/29
|
119
|
+
* @lastTime 2019/11/29
|
120
|
+
* @description 排序(从小到大)
|
121
|
+
*/
|
122
|
+
export function compareToMax(obj1: any, obj2: any, key: string) {
|
123
|
+
const val1 = obj1[key]
|
124
|
+
const val2 = obj2[key]
|
125
|
+
let result = 0
|
126
|
+
if (val1 < val2) {
|
127
|
+
result = -1
|
128
|
+
} else if (val1 > val2) {
|
129
|
+
result = 0
|
130
|
+
}
|
131
|
+
return result
|
132
|
+
}
|
133
|
+
|
134
|
+
function mGetDate() {
|
135
|
+
const date = new Date()
|
136
|
+
const year = date.getFullYear()
|
137
|
+
const month = date.getMonth() + 1
|
138
|
+
const d = new Date(year, month, 0)
|
139
|
+
return d.getDate()
|
140
|
+
}
|
141
|
+
|
142
|
+
/**
|
143
|
+
* @Author gx12358
|
144
|
+
* @DateTime 2022/8/4
|
145
|
+
* @lastTime 2022/8/4
|
146
|
+
* @description 处理时间展示(dayjs)
|
147
|
+
*/
|
148
|
+
export function momentFromNow(time) {
|
149
|
+
return dayjs(time).fromNow()
|
150
|
+
}
|
151
|
+
|
152
|
+
/**
|
153
|
+
* @Author gx12358
|
154
|
+
* @DateTime 2022/8/4
|
155
|
+
* @lastTime 2022/8/4
|
156
|
+
* @description 处理时间展示
|
157
|
+
*/
|
158
|
+
export function handleTimeShow(date: string) {
|
159
|
+
const date3 = new Date().getTime() - new Date(date.replace(/\-/g, '/')).getTime() // 时间差的毫秒数
|
160
|
+
const days = Math.floor(date3 / (24 * 3600 * 1000))
|
161
|
+
// 计算出小时数
|
162
|
+
const leave1 = date3 % (24 * 3600 * 1000) // 计算天数后剩余的毫秒数
|
163
|
+
const hours = Math.floor(leave1 / (3600 * 1000))
|
164
|
+
// 计算相差分钟数
|
165
|
+
const leave2 = leave1 % (3600 * 1000) // 计算小时数后剩余的毫秒数
|
166
|
+
const minutes = Math.floor(leave2 / (60 * 1000))
|
167
|
+
// 计算相差秒数
|
168
|
+
const leave3 = leave2 % (60 * 1000) // 计算分钟数后剩余的毫秒数
|
169
|
+
const seconds = Math.round(leave3 / 1000)
|
170
|
+
if (
|
171
|
+
days === 0 &&
|
172
|
+
hours === 0 &&
|
173
|
+
minutes === 0 &&
|
174
|
+
seconds < 60
|
175
|
+
) {
|
176
|
+
return '刚刚'
|
177
|
+
} else if (
|
178
|
+
days === 0 &&
|
179
|
+
hours === 0 &&
|
180
|
+
minutes < 60
|
181
|
+
) {
|
182
|
+
return `${minutes}分钟前`
|
183
|
+
} else if (
|
184
|
+
days === 0 &&
|
185
|
+
hours < 24
|
186
|
+
) {
|
187
|
+
return `${hours}小时前`
|
188
|
+
} else if (
|
189
|
+
days < mGetDate()
|
190
|
+
) {
|
191
|
+
return dayjs(date.replace(/\-/g, '/')).format('MM-dd hh:mm')
|
192
|
+
} else {
|
193
|
+
return dayjs(date.replace(/\-/g, '/')).format('yyyy-MM-dd')
|
194
|
+
}
|
195
|
+
}
|
196
|
+
|
197
|
+
/**
|
198
|
+
* @Author gx12358
|
199
|
+
* @DateTime 2021/1/11
|
200
|
+
* @lastTime 2021/1/11
|
201
|
+
* @description 图片ur地址转file对象
|
202
|
+
*/
|
203
|
+
export function getImageFileFromUrl(url = '', imageName: string) {
|
204
|
+
return new Promise((resolve) => {
|
205
|
+
let blob: any = null
|
206
|
+
const xhr = new XMLHttpRequest()
|
207
|
+
xhr.open('GET', url, true)
|
208
|
+
xhr.responseType = 'blob'
|
209
|
+
xhr.onload = () => {
|
210
|
+
blob = xhr.response
|
211
|
+
const imgFile = new File([ blob ], imageName, { type: 'image/png' })
|
212
|
+
resolve(imgFile)
|
213
|
+
}
|
214
|
+
xhr.send()
|
215
|
+
})
|
216
|
+
}
|
217
|
+
|
218
|
+
/**
|
219
|
+
* @Author gx12358
|
220
|
+
* @DateTime 2021/1/11
|
221
|
+
* @lastTime 2021/1/11
|
222
|
+
* @description 本地资源获取blob地址
|
223
|
+
*/
|
224
|
+
export function getLocalBlob(url = '') {
|
225
|
+
return new Promise((resolve) => {
|
226
|
+
let blob: any = null
|
227
|
+
const xhr = new XMLHttpRequest()
|
228
|
+
xhr.open('GET', url, true)
|
229
|
+
xhr.responseType = 'blob'
|
230
|
+
xhr.onload = () => {
|
231
|
+
blob = xhr.response
|
232
|
+
resolve(getBlobUrl(blob))
|
233
|
+
}
|
234
|
+
xhr.send()
|
235
|
+
})
|
236
|
+
}
|
237
|
+
|
238
|
+
/**
|
239
|
+
* @Author gx12358
|
240
|
+
* @DateTime 2022/10/11
|
241
|
+
* @lastTime 2022/10/11
|
242
|
+
* @description 判断元素到上一个元素的距离
|
243
|
+
*/
|
244
|
+
export function handleOffsetTop(targetNode: HTMLInputElement) {
|
245
|
+
let totalLeft = 0
|
246
|
+
let totalTop = 0
|
247
|
+
if (!targetNode) return { left: totalLeft, top: totalTop }
|
248
|
+
let parentNode = <HTMLElement>targetNode.offsetParent
|
249
|
+
//首先把自己本身的相加
|
250
|
+
totalLeft += targetNode.offsetLeft
|
251
|
+
totalTop += targetNode.offsetTop
|
252
|
+
//现在开始一级一级往上查找,只要没有遇到body,我们就把父级参照物的边框和偏移相加
|
253
|
+
while (parentNode) {
|
254
|
+
if (navigator.userAgent.indexOf('MSIE 8.0') === -1) {
|
255
|
+
//不是IE8我们才进行累加父级参照物的边框
|
256
|
+
totalTop += parentNode.clientTop
|
257
|
+
totalLeft += parentNode.clientLeft
|
258
|
+
}
|
259
|
+
//把父级参照物的偏移相加
|
260
|
+
totalTop += parentNode.offsetTop
|
261
|
+
totalLeft += parentNode.offsetLeft
|
262
|
+
parentNode = <HTMLElement>parentNode.offsetParent
|
263
|
+
}
|
264
|
+
return { left: totalLeft, top: totalTop }
|
265
|
+
}
|
266
|
+
|
267
|
+
/**
|
268
|
+
* @Author gx12358
|
269
|
+
* @DateTime 2022/10/11
|
270
|
+
* @lastTime 2022/10/11
|
271
|
+
* @description 滚动到固定位置
|
272
|
+
*/
|
273
|
+
export function scrollToContainer(count: number, root?: string) {
|
274
|
+
scrollTo(count || 0, {
|
275
|
+
getContainer: () => document.querySelector(viewScrollRoot || root) as HTMLInputElement,
|
276
|
+
duration: 200
|
277
|
+
})
|
278
|
+
}
|
@@ -0,0 +1,221 @@
|
|
1
|
+
/**
|
2
|
+
* @author gx12358 2539306317@qq.com
|
3
|
+
* @description 判读是否为外链
|
4
|
+
* @param path
|
5
|
+
* @returns {boolean}
|
6
|
+
*/
|
7
|
+
export function isExternal(path) {
|
8
|
+
return /^(https?:|mailto:|tel:)/.test(path)
|
9
|
+
}
|
10
|
+
|
11
|
+
/**
|
12
|
+
* @author gx12358 2539306317@qq.com
|
13
|
+
* @description 判断是否是名称
|
14
|
+
* @param value
|
15
|
+
* @returns {boolean}
|
16
|
+
*/
|
17
|
+
export function isName(value) {
|
18
|
+
const reg = /^[\u4e00-\u9fa5a-zA-Z0-9]+$/
|
19
|
+
return reg.test(value)
|
20
|
+
}
|
21
|
+
|
22
|
+
/**
|
23
|
+
* @author gx12358 2539306317@qq.com
|
24
|
+
* @description 判断是否为IP
|
25
|
+
* @param ip
|
26
|
+
* @returns {boolean}
|
27
|
+
*/
|
28
|
+
export function isIP(ip) {
|
29
|
+
const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
|
30
|
+
return reg.test(ip)
|
31
|
+
}
|
32
|
+
|
33
|
+
/**
|
34
|
+
* @author gx12358 2539306317@qq.com
|
35
|
+
* @description 判断是否是传统网站
|
36
|
+
* @param url
|
37
|
+
* @returns {boolean}
|
38
|
+
*/
|
39
|
+
export function isUrl(url) {
|
40
|
+
const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
|
41
|
+
return reg.test(url)
|
42
|
+
}
|
43
|
+
|
44
|
+
/**
|
45
|
+
* @author gx12358 2539306317@qq.com
|
46
|
+
* @description 判断是否是小写字母
|
47
|
+
* @param value
|
48
|
+
* @returns {boolean}
|
49
|
+
*/
|
50
|
+
export function isLowerCase(value) {
|
51
|
+
const reg = /^[a-z]+$/
|
52
|
+
return reg.test(value)
|
53
|
+
}
|
54
|
+
|
55
|
+
/**
|
56
|
+
* @author gx12358 2539306317@qq.com
|
57
|
+
* @description 判断是否是大写字母
|
58
|
+
* @param value
|
59
|
+
* @returns {boolean}
|
60
|
+
*/
|
61
|
+
export function isUpperCase(value) {
|
62
|
+
const reg = /^[A-Z]+$/
|
63
|
+
return reg.test(value)
|
64
|
+
}
|
65
|
+
|
66
|
+
/**
|
67
|
+
* @author gx12358 2539306317@qq.com
|
68
|
+
* @description 判断是否是大写字母开头
|
69
|
+
* @param value
|
70
|
+
* @returns {boolean}
|
71
|
+
*/
|
72
|
+
export function isAlphabets(value) {
|
73
|
+
const reg = /^[A-Za-z]+$/
|
74
|
+
return reg.test(value)
|
75
|
+
}
|
76
|
+
|
77
|
+
/**
|
78
|
+
* @author gx12358 2539306317@qq.com
|
79
|
+
* @description 判断是否是端口号
|
80
|
+
* @param value
|
81
|
+
* @returns {boolean}
|
82
|
+
*/
|
83
|
+
export function isPort(value) {
|
84
|
+
const reg = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/
|
85
|
+
return reg.test(value)
|
86
|
+
}
|
87
|
+
|
88
|
+
/**
|
89
|
+
* @author gx12358 2539306317@qq.com
|
90
|
+
* @description 判断是否是手机号
|
91
|
+
* @param value
|
92
|
+
* @returns {boolean}
|
93
|
+
*/
|
94
|
+
export function isPhone(value) {
|
95
|
+
const reg = /^1\d{10}$/
|
96
|
+
return reg.test(value)
|
97
|
+
}
|
98
|
+
|
99
|
+
/**
|
100
|
+
* @author gx12358 2539306317@qq.com
|
101
|
+
* @description 判断是否是身份证号(第二代)
|
102
|
+
* @param value
|
103
|
+
* @returns {boolean}
|
104
|
+
*/
|
105
|
+
export function isIdCard(value) {
|
106
|
+
const reg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
|
107
|
+
return reg.test(value)
|
108
|
+
}
|
109
|
+
|
110
|
+
/**
|
111
|
+
* @author gx12358 2539306317@qq.com
|
112
|
+
* @description 判断是否是邮箱
|
113
|
+
* @param value
|
114
|
+
* @returns {boolean}
|
115
|
+
*/
|
116
|
+
export function isEmail(value) {
|
117
|
+
const reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
|
118
|
+
return reg.test(value)
|
119
|
+
}
|
120
|
+
|
121
|
+
/**
|
122
|
+
* @author gx12358 2539306317@qq.com
|
123
|
+
* @description 判断是否中文
|
124
|
+
* @param value
|
125
|
+
* @returns {boolean}
|
126
|
+
*/
|
127
|
+
export function isChina(value) {
|
128
|
+
const reg = /^[\u4E00-\u9FA5]{2,4}$/
|
129
|
+
return reg.test(value)
|
130
|
+
}
|
131
|
+
|
132
|
+
/**
|
133
|
+
* @author gx12358 2539306317@qq.com
|
134
|
+
* @description 判断是否为空
|
135
|
+
* @param value
|
136
|
+
* @returns {boolean}
|
137
|
+
*/
|
138
|
+
export function isBlank(value) {
|
139
|
+
return (
|
140
|
+
value == null ||
|
141
|
+
false ||
|
142
|
+
value === '' ||
|
143
|
+
value.trim() === '' ||
|
144
|
+
value.toLocaleLowerCase().trim() === 'null'
|
145
|
+
)
|
146
|
+
}
|
147
|
+
|
148
|
+
/**
|
149
|
+
* @author gx12358 2539306317@qq.com
|
150
|
+
* @description 判断是否为固话
|
151
|
+
* @param value
|
152
|
+
* @returns {boolean}
|
153
|
+
*/
|
154
|
+
export function isTel(value) {
|
155
|
+
const reg = /^(400|800)([0-9\\-]{7,10})|(([0-9]{4}|[0-9]{3})([- ])?)?([0-9]{7,8})(([- 转])*([0-9]{1,4}))?$/
|
156
|
+
return reg.test(value)
|
157
|
+
}
|
158
|
+
|
159
|
+
/**
|
160
|
+
* @author gx12358 2539306317@qq.com
|
161
|
+
* @description 判断经度 -180.0~+180.0(整数部分为0~180,必须输入1到5位小数)
|
162
|
+
* @param value
|
163
|
+
* @returns {boolean}
|
164
|
+
*/
|
165
|
+
export function isLongitude(value) {
|
166
|
+
const reg = /^[-|+]?(0?\d{1,2}\.\d{1,5}|1[0-7]?\d{1}\.\d{1,5}|180\.0{1,5})$/
|
167
|
+
return reg.test(value)
|
168
|
+
}
|
169
|
+
|
170
|
+
/**
|
171
|
+
* @author gx12358 2539306317@qq.com
|
172
|
+
* @description 判断纬度 -90.0~+90.0(整数部分为0~90,必须输入1到5位小数)
|
173
|
+
* @param value
|
174
|
+
* @returns {boolean}
|
175
|
+
*/
|
176
|
+
export function isLatitude(value) {
|
177
|
+
const reg = /^[-|+]?([0-8]?\d{1}\.\d{1,5}|90\.0{1,5})$/
|
178
|
+
return reg.test(value)
|
179
|
+
}
|
180
|
+
|
181
|
+
/**
|
182
|
+
* @author gx12358 2539306317@qq.com
|
183
|
+
* @description rtsp校验,只要有rtsp://
|
184
|
+
* @param value
|
185
|
+
* @returns {boolean}
|
186
|
+
*/
|
187
|
+
export function isRTSP(value) {
|
188
|
+
const reg = /^rtsp:\/\/([a-z]{0,10}:.{0,10}@)?(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
|
189
|
+
const reg1 = /^rtsp:\/\/([a-z]{0,10}:.{0,10}@)?(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5]):[0-9]{1,5}/
|
190
|
+
const reg2 = /^rtsp:\/\/([a-z]{0,10}:.{0,10}@)?(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\//
|
191
|
+
return reg.test(value) || reg1.test(value) || reg2.test(value)
|
192
|
+
}
|
193
|
+
|
194
|
+
/**
|
195
|
+
* @Author gaoxiang
|
196
|
+
* @DateTime 2020/11/4
|
197
|
+
* @lastTime 2020/11/4
|
198
|
+
* @description 判断是否是JSON字符串
|
199
|
+
*/
|
200
|
+
export function isJSONStr(str: any) {
|
201
|
+
if (typeof str === 'string') {
|
202
|
+
try {
|
203
|
+
const obj = JSON.parse(str)
|
204
|
+
if (typeof obj === 'object' && obj) {
|
205
|
+
return true
|
206
|
+
} else {
|
207
|
+
return false
|
208
|
+
}
|
209
|
+
} catch (e) {
|
210
|
+
return false
|
211
|
+
}
|
212
|
+
}
|
213
|
+
return false
|
214
|
+
}
|
215
|
+
|
216
|
+
export function checkURL(URL) {
|
217
|
+
const str = URL,
|
218
|
+
Expression = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/,
|
219
|
+
objExp = new RegExp(Expression)
|
220
|
+
return objExp.test(str)
|
221
|
+
}
|
@@ -0,0 +1,76 @@
|
|
1
|
+
<template>
|
2
|
+
<g-pro-page-container>
|
3
|
+
<div :class="prefixCls" :style="frameStyle">
|
4
|
+
<a-spin :spinning="loading" size="large" :style="frameStyle">
|
5
|
+
<iframe
|
6
|
+
:src="frameSrc"
|
7
|
+
:class="[`${prefixCls}-main`]"
|
8
|
+
:style="frameStyle"
|
9
|
+
ref="frameRef"
|
10
|
+
allowfullscreen
|
11
|
+
frameBorder="0"
|
12
|
+
@load="hideLoading"
|
13
|
+
/>
|
14
|
+
</a-spin>
|
15
|
+
</div>
|
16
|
+
</g-pro-page-container>
|
17
|
+
</template>
|
18
|
+
|
19
|
+
<script setup lang="ts">
|
20
|
+
import { ref, computed, onMounted, onUnmounted, watch } from 'vue'
|
21
|
+
import { useStore } from '@gx-vuex'
|
22
|
+
import { getPrefixCls } from '@gx-design-vue/pro-utils'
|
23
|
+
import { PropTypes } from '@/utils'
|
24
|
+
|
25
|
+
const props = defineProps({
|
26
|
+
frameSrc: PropTypes.string.def('')
|
27
|
+
})
|
28
|
+
|
29
|
+
const store = useStore()
|
30
|
+
|
31
|
+
const prefixCls = getPrefixCls({
|
32
|
+
suffixCls: 'iframe-page',
|
33
|
+
isPor: true
|
34
|
+
})
|
35
|
+
|
36
|
+
const frameRef = ref<HTMLIFrameElement>()
|
37
|
+
const loading = ref(true)
|
38
|
+
|
39
|
+
const publicHeight = computed(
|
40
|
+
() =>
|
41
|
+
store.settings.headerHeight +
|
42
|
+
24 * 2 +
|
43
|
+
(store.settings.showTabsBar ? (store.settings.fixedMultiTab ? 62 : 40) : 0)
|
44
|
+
)
|
45
|
+
|
46
|
+
const frameStyle = reactive({
|
47
|
+
width: '100%',
|
48
|
+
height: `${window.innerHeight - publicHeight.value}px`
|
49
|
+
})
|
50
|
+
|
51
|
+
watch(
|
52
|
+
() => props.frameSrc,
|
53
|
+
(_) => {
|
54
|
+
console.log(_)
|
55
|
+
loading.value = true
|
56
|
+
},
|
57
|
+
{
|
58
|
+
deep: true,
|
59
|
+
immediate: true
|
60
|
+
}
|
61
|
+
)
|
62
|
+
|
63
|
+
onMounted(() => {
|
64
|
+
window.addEventListener('resize', calcHeight)
|
65
|
+
})
|
66
|
+
|
67
|
+
onUnmounted(() => {
|
68
|
+
window.removeEventListener('resize', calcHeight)
|
69
|
+
})
|
70
|
+
|
71
|
+
const calcHeight = () => (frameStyle.height = `${window.innerHeight - publicHeight.value}px`)
|
72
|
+
|
73
|
+
const hideLoading = () => {
|
74
|
+
loading.value = false
|
75
|
+
}
|
76
|
+
</script>
|