@gx-design-vue/create-gx-cli 0.1.12 → 0.1.13
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/bin/create-gx-cli +3 -2
- package/package.json +4 -4
- package/src/cli.js +10 -7
- package/src/git.js +8 -5
- package/src/main.js +29 -16
- package/template-mobile-vant-cli/package.json +5 -5
- package/template-gx-design-thin/.editorconfig +0 -19
- package/template-gx-design-thin/.env +0 -4
- package/template-gx-design-thin/.env.development +0 -15
- package/template-gx-design-thin/.env.production +0 -28
- package/template-gx-design-thin/.eslintignore +0 -16
- package/template-gx-design-thin/.prettierignore +0 -9
- package/template-gx-design-thin/LICENSE +0 -21
- package/template-gx-design-thin/README.md +0 -112
- package/template-gx-design-thin/build/constant.ts +0 -1
- package/template-gx-design-thin/build/generate/generateModifyVars.ts +0 -14
- package/template-gx-design-thin/build/rollupOptions/index.ts +0 -22
- package/template-gx-design-thin/build/util/hash.ts +0 -17
- package/template-gx-design-thin/build/util/index.ts +0 -131
- package/template-gx-design-thin/build/vite/cdn.ts +0 -63
- package/template-gx-design-thin/build/vite/optimizer.ts +0 -26
- package/template-gx-design-thin/build/vite/plugin/appConfig.ts +0 -91
- package/template-gx-design-thin/build/vite/plugin/autoImport.ts +0 -26
- package/template-gx-design-thin/build/vite/plugin/compress.ts +0 -31
- package/template-gx-design-thin/build/vite/plugin/html.ts +0 -39
- package/template-gx-design-thin/build/vite/plugin/index.ts +0 -75
- package/template-gx-design-thin/build/vite/plugin/mock.ts +0 -14
- package/template-gx-design-thin/build/vite/plugin/pwa.ts +0 -31
- package/template-gx-design-thin/build/vite/plugin/visualizer.ts +0 -14
- package/template-gx-design-thin/build/vite/plugin/viteMock/client.ts +0 -88
- package/template-gx-design-thin/build/vite/plugin/viteMock/createMockServer.ts +0 -271
- package/template-gx-design-thin/build/vite/plugin/viteMock/index.ts +0 -69
- package/template-gx-design-thin/build/vite/plugin/viteMock/types.ts +0 -48
- package/template-gx-design-thin/build/vite/plugin/viteMock/utils.ts +0 -48
- package/template-gx-design-thin/build/vite/plugin/viteNotice.ts +0 -40
- package/template-gx-design-thin/commitlint.config.cjs +0 -32
- package/template-gx-design-thin/config/default/defaultSettings.ts +0 -78
- package/template-gx-design-thin/config/default/network.ts +0 -10
- package/template-gx-design-thin/config/default/proxy.ts +0 -47
- package/template-gx-design-thin/config/default/theme.ts +0 -3
- package/template-gx-design-thin/config/index.ts +0 -11
- package/template-gx-design-thin/eslint.config.js +0 -51
- package/template-gx-design-thin/index.html +0 -42
- package/template-gx-design-thin/mock/_createProductionServer.ts +0 -19
- package/template-gx-design-thin/mock/_util.ts +0 -33
- package/template-gx-design-thin/mock/config/menu.ts +0 -21
- package/template-gx-design-thin/mock/config/user.ts +0 -123
- package/template-gx-design-thin/mock/datasSource/system/menu.ts +0 -10
- package/template-gx-design-thin/mock/datasSource/user/account.ts +0 -30
- package/template-gx-design-thin/mock/datasSource/user/index.ts +0 -47
- package/template-gx-design-thin/mock/util/crypto.ts +0 -23
- package/template-gx-design-thin/mock/util/table.ts +0 -92
- package/template-gx-design-thin/mock/util/utils.ts +0 -73
- package/template-gx-design-thin/package.json +0 -129
- package/template-gx-design-thin/pnpm-lock.yaml +0 -12575
- package/template-gx-design-thin/prettier.config.cjs +0 -18
- package/template-gx-design-thin/public/resource/css/index.css +0 -119
- package/template-gx-design-thin/public/resource/css/normalize.css +0 -396
- package/template-gx-design-thin/public/resource/img/favicon.ico +0 -0
- package/template-gx-design-thin/public/resource/img/logo.png +0 -0
- package/template-gx-design-thin/public/resource/img/pro_icon.svg +0 -1
- package/template-gx-design-thin/public/resource/img/pwa-192x192.png +0 -0
- package/template-gx-design-thin/public/resource/img/pwa-512x512.png +0 -0
- package/template-gx-design-thin/src/App.vue +0 -42
- package/template-gx-design-thin/src/assets/error_images/403.png +0 -0
- package/template-gx-design-thin/src/assets/error_images/404.png +0 -0
- package/template-gx-design-thin/src/assets/error_images/cloud.png +0 -0
- package/template-gx-design-thin/src/assets/login_images/login_background.svg +0 -1
- package/template-gx-design-thin/src/assets/logo.png +0 -0
- package/template-gx-design-thin/src/assets/menu_font/iconfont.css +0 -94
- package/template-gx-design-thin/src/assets/menu_font/iconfont.eot +0 -0
- package/template-gx-design-thin/src/assets/menu_font/iconfont.js +0 -1
- package/template-gx-design-thin/src/assets/menu_font/iconfont.json +0 -142
- package/template-gx-design-thin/src/assets/menu_font/iconfont.svg +0 -1
- package/template-gx-design-thin/src/assets/menu_font/iconfont.ttf +0 -0
- package/template-gx-design-thin/src/assets/menu_font/iconfont.woff +0 -0
- package/template-gx-design-thin/src/assets/menu_font/iconfont.woff2 +0 -0
- package/template-gx-design-thin/src/assets/menu_font/index.less +0 -94
- package/template-gx-design-thin/src/assets/public_icon/iconfont.css +0 -42
- package/template-gx-design-thin/src/assets/public_icon/iconfont.eot +0 -0
- package/template-gx-design-thin/src/assets/public_icon/iconfont.js +0 -1
- package/template-gx-design-thin/src/assets/public_icon/iconfont.json +0 -51
- package/template-gx-design-thin/src/assets/public_icon/iconfont.svg +0 -1
- package/template-gx-design-thin/src/assets/public_icon/iconfont.ttf +0 -0
- package/template-gx-design-thin/src/assets/public_icon/iconfont.woff +0 -0
- package/template-gx-design-thin/src/assets/public_icon/iconfont.woff2 +0 -0
- package/template-gx-design-thin/src/assets/public_icon/index.less +0 -42
- package/template-gx-design-thin/src/assets/public_images/nodata.svg +0 -1
- package/template-gx-design-thin/src/common/global.ts +0 -4
- package/template-gx-design-thin/src/components/GDesign/Result/index.tsx +0 -144
- package/template-gx-design-thin/src/components/GDesign/Result/style.less +0 -140
- package/template-gx-design-thin/src/components/GDesign/utils/index.ts +0 -7
- package/template-gx-design-thin/src/components/GlobalLayout/Confirm/index.ts +0 -21
- package/template-gx-design-thin/src/components/GlobalLayout/Empty/index.vue +0 -18
- package/template-gx-design-thin/src/components/GlobalLayout/RightContent/index.tsx +0 -126
- package/template-gx-design-thin/src/components/GlobalLayout/RightContent/style.ts +0 -77
- package/template-gx-design-thin/src/components/GlobalLayout/Spin/index.tsx +0 -30
- package/template-gx-design-thin/src/components/PageLoading/index.tsx +0 -51
- package/template-gx-design-thin/src/components/index.ts +0 -6
- package/template-gx-design-thin/src/core/ant-design/index.ts +0 -10
- package/template-gx-design-thin/src/core/gx-admin-design/index.ts +0 -6
- package/template-gx-design-thin/src/core/gx-design/index.ts +0 -6
- package/template-gx-design-thin/src/core/gx-pro-design/index.ts +0 -8
- package/template-gx-design-thin/src/core/index.ts +0 -84
- package/template-gx-design-thin/src/design/ant-design/index.less +0 -4
- package/template-gx-design-thin/src/design/ant-design/layout.less +0 -22
- package/template-gx-design-thin/src/design/ant-design/menu.less +0 -48
- package/template-gx-design-thin/src/design/ant-design/spin.less +0 -23
- package/template-gx-design-thin/src/design/ant-design/tooltip.less +0 -7
- package/template-gx-design-thin/src/design/color.less +0 -1
- package/template-gx-design-thin/src/design/config.less +0 -5
- package/template-gx-design-thin/src/design/imageEditor.less +0 -180
- package/template-gx-design-thin/src/design/index.less +0 -95
- package/template-gx-design-thin/src/design/mixin.less +0 -65
- package/template-gx-design-thin/src/design/normalize.less +0 -391
- package/template-gx-design-thin/src/design/root.less +0 -3
- package/template-gx-design-thin/src/hooks/core/index.ts +0 -3
- package/template-gx-design-thin/src/hooks/core/useRequest/index.ts +0 -118
- package/template-gx-design-thin/src/hooks/event/index.ts +0 -3
- package/template-gx-design-thin/src/hooks/event/useClipboard.ts +0 -15
- package/template-gx-design-thin/src/hooks/web/index.ts +0 -5
- package/template-gx-design-thin/src/hooks/web/useThemeStyle.ts +0 -16
- package/template-gx-design-thin/src/layout/BasicLayout.vue +0 -123
- package/template-gx-design-thin/src/layout/BlankLayout.vue +0 -5
- package/template-gx-design-thin/src/layout/ContentView.vue +0 -50
- package/template-gx-design-thin/src/layout/IframeView.vue +0 -1
- package/template-gx-design-thin/src/layout/UserLayout.vue +0 -7
- package/template-gx-design-thin/src/main.ts +0 -34
- package/template-gx-design-thin/src/plugins/index.ts +0 -2
- package/template-gx-design-thin/src/router/guard/index.ts +0 -83
- package/template-gx-design-thin/src/router/guard/permissions.ts +0 -70
- package/template-gx-design-thin/src/router/guard/stateGuard.ts +0 -10
- package/template-gx-design-thin/src/router/helper/routeHelper.ts +0 -223
- package/template-gx-design-thin/src/router/helper/utils.ts +0 -19
- package/template-gx-design-thin/src/router/index.ts +0 -31
- package/template-gx-design-thin/src/router/routes/index.ts +0 -86
- package/template-gx-design-thin/src/router/routes/modules/dataSource.ts +0 -12
- package/template-gx-design-thin/src/services/common/index.ts +0 -11
- package/template-gx-design-thin/src/services/systemCenter/index.ts +0 -1
- package/template-gx-design-thin/src/services/systemCenter/menu.ts +0 -9
- package/template-gx-design-thin/src/services/userCenter/account.ts +0 -42
- package/template-gx-design-thin/src/services/userCenter/index.ts +0 -28
- package/template-gx-design-thin/src/store/index.ts +0 -32
- package/template-gx-design-thin/src/store/modules/dict.ts +0 -28
- package/template-gx-design-thin/src/store/modules/global.ts +0 -42
- package/template-gx-design-thin/src/store/modules/permission.ts +0 -19
- package/template-gx-design-thin/src/store/modules/routes.ts +0 -113
- package/template-gx-design-thin/src/store/modules/tabsRouter.ts +0 -76
- package/template-gx-design-thin/src/store/modules/user.ts +0 -136
- package/template-gx-design-thin/src/utils/accessToken.ts +0 -80
- package/template-gx-design-thin/src/utils/crypto/base64.ts +0 -101
- package/template-gx-design-thin/src/utils/crypto/index.ts +0 -57
- package/template-gx-design-thin/src/utils/env.ts +0 -50
- package/template-gx-design-thin/src/utils/fetchFile.ts +0 -81
- package/template-gx-design-thin/src/utils/index.ts +0 -123
- package/template-gx-design-thin/src/utils/pageTitle.ts +0 -20
- package/template-gx-design-thin/src/utils/request/XHR.ts +0 -139
- package/template-gx-design-thin/src/utils/request/axiosCancel.ts +0 -69
- package/template-gx-design-thin/src/utils/request/checkStatus.ts +0 -25
- package/template-gx-design-thin/src/utils/request/index.ts +0 -144
- package/template-gx-design-thin/src/utils/request/typings.ts +0 -171
- package/template-gx-design-thin/src/utils/storage.ts +0 -199
- package/template-gx-design-thin/src/utils/uploadFile.ts +0 -27
- package/template-gx-design-thin/src/utils/util.ts +0 -198
- package/template-gx-design-thin/src/utils/validate.ts +0 -216
- package/template-gx-design-thin/src/views/Iframe/index.vue +0 -76
- package/template-gx-design-thin/src/views/Page/one.vue +0 -13
- package/template-gx-design-thin/src/views/Page/two.vue +0 -13
- package/template-gx-design-thin/src/views/exception/403/index.vue +0 -7
- package/template-gx-design-thin/src/views/exception/404/index.vue +0 -9
- package/template-gx-design-thin/src/views/user/login/index.vue +0 -109
- package/template-gx-design-thin/src/views/user/login/style.less +0 -38
- package/template-gx-design-thin/tsconfig.json +0 -46
- package/template-gx-design-thin/types/ant-design-import.d.ts +0 -99
- package/template-gx-design-thin/types/auto-imports.d.ts +0 -81
- package/template-gx-design-thin/types/components.d.ts +0 -24
- package/template-gx-design-thin/types/config.d.ts +0 -44
- package/template-gx-design-thin/types/global.d.ts +0 -97
- package/template-gx-design-thin/types/mock.d.ts +0 -16
- package/template-gx-design-thin/types/module.d.ts +0 -20
- package/template-gx-design-thin/types/response.d.ts +0 -15
- package/template-gx-design-thin/unocss.config.ts +0 -101
- package/template-gx-design-thin/vite.config.ts +0 -120
- package/template-gx-design-thin/yarn.lock +0 -9492
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
import { h } from 'vue'
|
|
2
|
-
import { defaultSettings } from '@gx-config'
|
|
3
|
-
import { isFunction, isNumber, isObject, scrollTo } from '@gx-design-vue/pro-utils'
|
|
4
|
-
|
|
5
|
-
export interface NumberToShow {
|
|
6
|
-
numberValue: string;
|
|
7
|
-
countStr: string;
|
|
8
|
-
joinStr: string;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const { viewScrollRoot } = defaultSettings
|
|
12
|
-
|
|
13
|
-
export const TransformVNode = (props: { node: any; class?: string }) => {
|
|
14
|
-
return h(isFunction(props.node) ? props.node?.(props.class) : props.node)
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function timeFix() {
|
|
18
|
-
const time = new Date()
|
|
19
|
-
const hour = time.getHours()
|
|
20
|
-
return hour < 9 ? '早上好' : hour <= 11 ? '上午好' : hour <= 13 ? '中午好' : hour < 20
|
|
21
|
-
? '下午好'
|
|
22
|
-
: '晚上好'
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* @Author gaoxiang
|
|
27
|
-
* @DateTime 2020/7/23
|
|
28
|
-
* @lastTime 2020/7/23
|
|
29
|
-
* @description 去除空格
|
|
30
|
-
*/
|
|
31
|
-
export function trim(str: string, isGlobal?: boolean) {
|
|
32
|
-
if (typeof str === 'undefined' || str.length === 0)
|
|
33
|
-
return ''
|
|
34
|
-
let result
|
|
35
|
-
result = str.replace(/(^\s+)|(\s+$)/g, '')
|
|
36
|
-
if (isGlobal) {
|
|
37
|
-
result = result.replace(/\s/g, '')
|
|
38
|
-
}
|
|
39
|
-
return result
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* @Author gx12358
|
|
44
|
-
* @DateTime 2021/11/3
|
|
45
|
-
* @lastTime 2021/11/3
|
|
46
|
-
* @description get参数处理
|
|
47
|
-
*/
|
|
48
|
-
export function tansParams(params) {
|
|
49
|
-
let result = ''
|
|
50
|
-
for (const propName of Object.keys(params)) {
|
|
51
|
-
const value = params[propName]
|
|
52
|
-
const part = encodeURIComponent(propName) + '='
|
|
53
|
-
if (value !== null && typeof (value) !== 'undefined' && value !== '') {
|
|
54
|
-
if (typeof value === 'object') {
|
|
55
|
-
for (const key of Object.keys(value)) {
|
|
56
|
-
if (value[key] !== null && typeof (value[key]) !== 'undefined') {
|
|
57
|
-
const params = propName + '[' + key + ']'
|
|
58
|
-
const subPart = encodeURIComponent(params) + '='
|
|
59
|
-
result += subPart + encodeURIComponent(value[key]) + '&'
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
} else {
|
|
63
|
-
result += part + encodeURIComponent(value) + '&'
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return result
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* @Author gx12358
|
|
72
|
-
* @DateTime 2022/10/11
|
|
73
|
-
* @lastTime 2022/10/11
|
|
74
|
-
* @description 判断元素到上一个元素的距离
|
|
75
|
-
*/
|
|
76
|
-
export function handleOffsetTop(targetNode: HTMLInputElement) {
|
|
77
|
-
let totalLeft = 0
|
|
78
|
-
let totalTop = 0
|
|
79
|
-
if (!targetNode)
|
|
80
|
-
return { left: totalLeft, top: totalTop }
|
|
81
|
-
let parentNode = <HTMLElement>targetNode.offsetParent
|
|
82
|
-
// 首先把自己本身的相加
|
|
83
|
-
totalLeft += targetNode.offsetLeft
|
|
84
|
-
totalTop += targetNode.offsetTop
|
|
85
|
-
// 现在开始一级一级往上查找,只要没有遇到body,我们就把父级参照物的边框和偏移相加
|
|
86
|
-
while (parentNode) {
|
|
87
|
-
if (navigator.userAgent.includes('MSIE 8.0')) {
|
|
88
|
-
// 不是IE8我们才进行累加父级参照物的边框
|
|
89
|
-
totalTop += parentNode.clientTop
|
|
90
|
-
totalLeft += parentNode.clientLeft
|
|
91
|
-
}
|
|
92
|
-
// 把父级参照物的偏移相加
|
|
93
|
-
totalTop += parentNode.offsetTop
|
|
94
|
-
totalLeft += parentNode.offsetLeft
|
|
95
|
-
parentNode = <HTMLElement>parentNode.offsetParent
|
|
96
|
-
}
|
|
97
|
-
return { left: totalLeft, top: totalTop }
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* @Author gx12358
|
|
102
|
-
* @DateTime 2022/10/11
|
|
103
|
-
* @lastTime 2022/10/11
|
|
104
|
-
* @description 滚动到固定位置
|
|
105
|
-
*/
|
|
106
|
-
export function scrollToContainer(options: { count: number; root?: string; duration?: number }) {
|
|
107
|
-
if (!isObject(options))
|
|
108
|
-
return
|
|
109
|
-
scrollTo(options.count || 0, {
|
|
110
|
-
getContainer: () => document.querySelector(options?.root || viewScrollRoot) as HTMLInputElement,
|
|
111
|
-
duration: options?.duration || 200
|
|
112
|
-
})
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* @Author gx12358
|
|
117
|
-
* @DateTime 2022/6/20
|
|
118
|
-
* @lastTime 2022/6/20
|
|
119
|
-
* @description 转换数字
|
|
120
|
-
*/
|
|
121
|
-
export function toConvertNumberShow(
|
|
122
|
-
number: number,
|
|
123
|
-
options?: { toChinese?: boolean; fixed?: number; showStr?: boolean; unit?: string; }
|
|
124
|
-
): NumberToShow {
|
|
125
|
-
const fixedNum = options?.fixed || 2
|
|
126
|
-
const countStr = options?.unit || (
|
|
127
|
-
options?.showStr === undefined || options?.showStr
|
|
128
|
-
? options?.toChinese === undefined || options?.toChinese
|
|
129
|
-
? number < 100000000 ? '万' : '亿'
|
|
130
|
-
: number < 100000000 ? 'w' : 'e'
|
|
131
|
-
: ''
|
|
132
|
-
)
|
|
133
|
-
if (!isNumber(number) || options?.unit)
|
|
134
|
-
return {
|
|
135
|
-
numberValue: `${number}`,
|
|
136
|
-
countStr,
|
|
137
|
-
joinStr: `${number}${countStr}`
|
|
138
|
-
}
|
|
139
|
-
if (number < 10000)
|
|
140
|
-
return {
|
|
141
|
-
numberValue: `${number}`,
|
|
142
|
-
countStr,
|
|
143
|
-
joinStr: `${number}${countStr}`
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
if (options?.fixed) {
|
|
147
|
-
const numStr = (number / (number < 100000000 ? 10000 : 100000000)).toFixed(1).split('.')[0]
|
|
148
|
-
const numFixed = (number / (number < 100000000 ? 10000 : 100000000)).toFixed(1).split('.')[1]
|
|
149
|
-
|
|
150
|
-
if (numFixed === '0')
|
|
151
|
-
return {
|
|
152
|
-
numberValue: `${numStr}`,
|
|
153
|
-
countStr,
|
|
154
|
-
joinStr: `${numStr}${countStr}`
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
const match = fixedNum === 1 ? /^\d+(?:\.\d{0,1})?/ : /^\d+(?:\.\d{0,2})?/
|
|
158
|
-
const numberValue = number < 100000000 ? number / 10000 : number / 100000000
|
|
159
|
-
|
|
160
|
-
return {
|
|
161
|
-
numberValue: `${(numberValue).toString().match(match)}`,
|
|
162
|
-
countStr,
|
|
163
|
-
joinStr: `${(numberValue).toString().match(match)}${countStr}`
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* @Author gx12358
|
|
169
|
-
* @DateTime 2022/8/4
|
|
170
|
-
* @lastTime 2022/8/4
|
|
171
|
-
* @description 数字转中文
|
|
172
|
-
*/
|
|
173
|
-
export function toChinesNum(num: number) {
|
|
174
|
-
num = num || 0
|
|
175
|
-
const changeNum = [ '零', '一', '二', '三', '四', '五', '六', '七', '八', '九' ]
|
|
176
|
-
const unit = [ '', '十', '百', '千', '万' ]
|
|
177
|
-
num = Number.parseInt(`${num}`)
|
|
178
|
-
const getWan = (temp) => {
|
|
179
|
-
const strArr = temp.toString().split('').reverse()
|
|
180
|
-
let newNum = ''
|
|
181
|
-
for (let i = 0; i < strArr.length; i++) {
|
|
182
|
-
newNum = (i === 0 && strArr[i] === '0'
|
|
183
|
-
? ''
|
|
184
|
-
: i > 0 && strArr[i] === '0' && strArr[i - 1] === '0'
|
|
185
|
-
? ''
|
|
186
|
-
: (num < 20 && i > 0 ? '' : changeNum[strArr[i]]) + (strArr[i] === '0'
|
|
187
|
-
? unit[0]
|
|
188
|
-
: unit[i])) + newNum
|
|
189
|
-
}
|
|
190
|
-
return newNum
|
|
191
|
-
}
|
|
192
|
-
const overWan = Math.floor(num / 10000)
|
|
193
|
-
let noWan: any = num % 10000
|
|
194
|
-
if (noWan.toString().length < 4) {
|
|
195
|
-
noWan = '0' + noWan
|
|
196
|
-
}
|
|
197
|
-
return overWan ? getWan(overWan) + '万' + getWan(noWan) : getWan(num)
|
|
198
|
-
}
|
|
@@ -1,216 +0,0 @@
|
|
|
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 = '', backReg?: boolean) {
|
|
95
|
-
const reg = /^1\d{10}$/
|
|
96
|
-
return backReg ? reg : 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 = '', backReg?: boolean) {
|
|
117
|
-
const reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
|
|
118
|
-
return backReg ? reg : 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 (value == null || false || value === '' || value.trim() === '' || value.toLocaleLowerCase()
|
|
140
|
-
.trim() === 'null')
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* @author gx12358 2539306317@qq.com
|
|
145
|
-
* @description 判断是否为固话
|
|
146
|
-
* @param value
|
|
147
|
-
* @returns {boolean}
|
|
148
|
-
*/
|
|
149
|
-
export function isTel(value) {
|
|
150
|
-
const reg = /^(400|800)([0-9\\-]{7,10})|(([0-9]{4}|[0-9]{3})([- ])?)?([0-9]{7,8})(([- 转])*([0-9]{1,4}))?$/
|
|
151
|
-
return reg.test(value)
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* @author gx12358 2539306317@qq.com
|
|
156
|
-
* @description 判断经度 -180.0~+180.0(整数部分为0~180,必须输入1到5位小数)
|
|
157
|
-
* @param value
|
|
158
|
-
* @returns {boolean}
|
|
159
|
-
*/
|
|
160
|
-
export function isLongitude(value) {
|
|
161
|
-
const reg = /^[-|+]?(0?\d{1,2}\.\d{1,5}|1[0-7]?\d{1}\.\d{1,5}|180\.0{1,5})$/
|
|
162
|
-
return reg.test(value)
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* @author gx12358 2539306317@qq.com
|
|
167
|
-
* @description 判断纬度 -90.0~+90.0(整数部分为0~90,必须输入1到5位小数)
|
|
168
|
-
* @param value
|
|
169
|
-
* @returns {boolean}
|
|
170
|
-
*/
|
|
171
|
-
export function isLatitude(value) {
|
|
172
|
-
const reg = /^[-|+]?([0-8]?\d{1}\.\d{1,5}|90\.0{1,5})$/
|
|
173
|
-
return reg.test(value)
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* @author gx12358 2539306317@qq.com
|
|
178
|
-
* @description rtsp校验,只要有rtsp://
|
|
179
|
-
* @param value
|
|
180
|
-
* @returns {boolean}
|
|
181
|
-
*/
|
|
182
|
-
export function isRTSP(value) {
|
|
183
|
-
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])$/
|
|
184
|
-
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}/
|
|
185
|
-
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])\//
|
|
186
|
-
return reg.test(value) || reg1.test(value) || reg2.test(value)
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* @Author gaoxiang
|
|
191
|
-
* @DateTime 2020/11/4
|
|
192
|
-
* @lastTime 2020/11/4
|
|
193
|
-
* @description 判断是否是JSON字符串
|
|
194
|
-
*/
|
|
195
|
-
export function isJSONStr(str: any) {
|
|
196
|
-
if (typeof str === 'string') {
|
|
197
|
-
try {
|
|
198
|
-
const obj = JSON.parse(str)
|
|
199
|
-
if (typeof obj === 'object' && obj) {
|
|
200
|
-
return true
|
|
201
|
-
} else {
|
|
202
|
-
return false
|
|
203
|
-
}
|
|
204
|
-
} catch (e) {
|
|
205
|
-
return false
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
return false
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
export function checkURL(URL) {
|
|
212
|
-
const str = URL
|
|
213
|
-
const Expression = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/
|
|
214
|
-
const objExp = new RegExp(Expression)
|
|
215
|
-
return objExp.test(str)
|
|
216
|
-
}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import type { CSSProperties } from 'vue'
|
|
3
|
-
import { ref, watch } from 'vue'
|
|
4
|
-
import { getPrefixCls } from '@gx-design-vue/pro-utils'
|
|
5
|
-
import { useProConfigContext } from '@gx-design-vue/pro-provider'
|
|
6
|
-
|
|
7
|
-
const props = withDefaults(defineProps<{
|
|
8
|
-
frameSrc: string;
|
|
9
|
-
}>(), {
|
|
10
|
-
frameSrc: ''
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
const { global } = useStore()
|
|
14
|
-
const { token } = useProConfigContext()
|
|
15
|
-
|
|
16
|
-
const prefixCls = getPrefixCls({
|
|
17
|
-
suffixCls: 'iframe-page',
|
|
18
|
-
isPor: true
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
const frameRef = ref<HTMLIFrameElement>()
|
|
22
|
-
const loading = ref(true)
|
|
23
|
-
|
|
24
|
-
const publicHeight = computed(
|
|
25
|
-
() =>
|
|
26
|
-
token.value.layout?.header.heightLayoutHeader + 24 * 2 + (
|
|
27
|
-
global.globalLayout.showTabsBar ? global.globalLayout.fixedMultiTab ? 62 : 46 : 0
|
|
28
|
-
)
|
|
29
|
-
)
|
|
30
|
-
|
|
31
|
-
const frameStyle = reactive({
|
|
32
|
-
height: `${window.innerHeight - publicHeight.value}px`,
|
|
33
|
-
borderRadius: '8px'
|
|
34
|
-
} as CSSProperties)
|
|
35
|
-
|
|
36
|
-
watch(
|
|
37
|
-
() => props.frameSrc,
|
|
38
|
-
(_) => {
|
|
39
|
-
loading.value = true
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
deep: true,
|
|
43
|
-
immediate: true
|
|
44
|
-
}
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
const calcHeight = () => (frameStyle.height = `${window.innerHeight - publicHeight.value}px`)
|
|
48
|
-
|
|
49
|
-
onMounted(() => {
|
|
50
|
-
window.addEventListener('resize', calcHeight)
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
onUnmounted(() => {
|
|
54
|
-
window.removeEventListener('resize', calcHeight)
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
const hideLoading = () => {
|
|
58
|
-
loading.value = false
|
|
59
|
-
}
|
|
60
|
-
</script>
|
|
61
|
-
|
|
62
|
-
<template>
|
|
63
|
-
<g-pro-page-container :use-page-card="false">
|
|
64
|
-
<div :class="prefixCls" :style="frameStyle">
|
|
65
|
-
<a-spin :spinning="loading" size="large" :style="frameStyle">
|
|
66
|
-
<iframe
|
|
67
|
-
:src="frameSrc"
|
|
68
|
-
:class="[`${prefixCls}-main`]"
|
|
69
|
-
:style="frameStyle"
|
|
70
|
-
ref="frameRef"
|
|
71
|
-
@load="hideLoading"
|
|
72
|
-
/>
|
|
73
|
-
</a-spin>
|
|
74
|
-
</div>
|
|
75
|
-
</g-pro-page-container>
|
|
76
|
-
</template>
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { h, reactive } from 'vue'
|
|
3
|
-
import { useRoute, useRouter } from 'vue-router'
|
|
4
|
-
import { LockOutlined, UserOutlined } from '@ant-design/icons-vue'
|
|
5
|
-
import { GProFormCheckbox, GProFormLogin, GProFormPassword, GProFormText } from '@gx-design-vue/pro-form'
|
|
6
|
-
import { GlobalFooter } from '@gx-design-vue/pro-layout'
|
|
7
|
-
import Logo from '@/assets/logo.png'
|
|
8
|
-
|
|
9
|
-
interface UserState {
|
|
10
|
-
userName: string
|
|
11
|
-
password: string
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
interface loginState {
|
|
15
|
-
redirect: string
|
|
16
|
-
dependencies: Record<string, any>
|
|
17
|
-
devDependencies: Record<string, any>
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const { pkg } = __APP_INFO__
|
|
21
|
-
|
|
22
|
-
const userOutlined = h(UserOutlined)
|
|
23
|
-
const lockOutlined = h(LockOutlined)
|
|
24
|
-
|
|
25
|
-
const store = useStore()
|
|
26
|
-
const route = useRoute()
|
|
27
|
-
const router = useRouter()
|
|
28
|
-
|
|
29
|
-
const userForm = reactive({
|
|
30
|
-
userName: 'admin',
|
|
31
|
-
password: 'gx.design',
|
|
32
|
-
autoLogin: true
|
|
33
|
-
} as UserState)
|
|
34
|
-
|
|
35
|
-
const userRules = reactive({
|
|
36
|
-
userName: [{ required: true, message: '用户名是必填项!' }],
|
|
37
|
-
password: [{ required: true, message: '密码是必填项!' }]
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
const state: loginState = reactive({
|
|
41
|
-
redirect: '/',
|
|
42
|
-
dependencies: pkg.dependencies,
|
|
43
|
-
devDependencies: pkg.devDependencies
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
watch(
|
|
47
|
-
() => route.fullPath,
|
|
48
|
-
() => {
|
|
49
|
-
state.redirect = (route.query?.redirect as string) || '/'
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
deep: true,
|
|
53
|
-
immediate: true
|
|
54
|
-
}
|
|
55
|
-
)
|
|
56
|
-
const handleRoute = () => {
|
|
57
|
-
return state.redirect === '/exception/404' || state.redirect === '/exception/403'
|
|
58
|
-
? '/'
|
|
59
|
-
: state.redirect
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const handleSubmit = async (value) => {
|
|
63
|
-
const response: any = await store.user.userLogin({ ...value })
|
|
64
|
-
if (response) {
|
|
65
|
-
router.push({ path: handleRoute() })
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
</script>
|
|
69
|
-
|
|
70
|
-
<template>
|
|
71
|
-
<div :class="$style['login-container']">
|
|
72
|
-
<div :class="$style.content">
|
|
73
|
-
<GProFormLogin
|
|
74
|
-
style="margin-top: 40px"
|
|
75
|
-
:model="userForm"
|
|
76
|
-
:rules="userRules"
|
|
77
|
-
:logo="Logo"
|
|
78
|
-
title="GX Pro Admin"
|
|
79
|
-
@submit="handleSubmit"
|
|
80
|
-
>
|
|
81
|
-
<template #subTitle>
|
|
82
|
-
<p>GX Pro Admin 是一套基于</p>
|
|
83
|
-
vue({{ state.dependencies.vue }}) + ant-design-vue({{
|
|
84
|
-
state.dependencies['ant-design-vue']
|
|
85
|
-
}}) 开发的一套后台系统1111
|
|
86
|
-
</template>
|
|
87
|
-
<GProFormText
|
|
88
|
-
name="userName"
|
|
89
|
-
:fieldProps="{ size: 'large', prefix: userOutlined }"
|
|
90
|
-
placeholder="用户名: admin"
|
|
91
|
-
/>
|
|
92
|
-
<GProFormPassword
|
|
93
|
-
name="password"
|
|
94
|
-
:fieldProps="{ size: 'large', prefix: lockOutlined }"
|
|
95
|
-
placeholder="密码: gx.design"
|
|
96
|
-
/>
|
|
97
|
-
<div class="mb-[24px]">
|
|
98
|
-
<GProFormCheckbox noStyle name="autoLogin">自动登录</GProFormCheckbox>
|
|
99
|
-
<a class="float-right">忘记密码</a>
|
|
100
|
-
</div>
|
|
101
|
-
</GProFormLogin>
|
|
102
|
-
</div>
|
|
103
|
-
<GlobalFooter />
|
|
104
|
-
</div>
|
|
105
|
-
</template>
|
|
106
|
-
|
|
107
|
-
<style lang="less" module>
|
|
108
|
-
@import './style';
|
|
109
|
-
</style>
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
.login-container {
|
|
2
|
-
display: flex;
|
|
3
|
-
flex-direction: column;
|
|
4
|
-
height: 100vh;
|
|
5
|
-
overflow: auto;
|
|
6
|
-
background: #f0f2f5;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
.content {
|
|
10
|
-
flex: 1;
|
|
11
|
-
padding: 32px 0;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
.icon {
|
|
15
|
-
margin-left: 8px;
|
|
16
|
-
font-size: 24px;
|
|
17
|
-
color: rgba(0, 0, 0, 0.2);
|
|
18
|
-
vertical-align: middle;
|
|
19
|
-
cursor: pointer;
|
|
20
|
-
transition: color 0.3s;
|
|
21
|
-
|
|
22
|
-
&:hover {
|
|
23
|
-
color: #1677ff;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
@media (min-width: 768px) {
|
|
28
|
-
.login-container {
|
|
29
|
-
background-image: url(/src/assets/login_images/login_background.svg);
|
|
30
|
-
background-repeat: no-repeat;
|
|
31
|
-
background-position: center 110px;
|
|
32
|
-
background-size: 100%;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.content {
|
|
36
|
-
padding: 32px 0 24px;
|
|
37
|
-
}
|
|
38
|
-
}
|