@gx-design-vue/create-gx-cli 0.1.11 → 0.1.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. package/bin/create-gx-cli +3 -2
  2. package/package.json +4 -4
  3. package/src/cli.js +10 -7
  4. package/src/git.js +8 -5
  5. package/src/main.js +29 -16
  6. package/template-mobile-vant-cli/package.json +5 -5
  7. package/template-gx-design-thin/.editorconfig +0 -19
  8. package/template-gx-design-thin/.env +0 -4
  9. package/template-gx-design-thin/.env.development +0 -15
  10. package/template-gx-design-thin/.env.production +0 -28
  11. package/template-gx-design-thin/.eslintignore +0 -16
  12. package/template-gx-design-thin/.prettierignore +0 -9
  13. package/template-gx-design-thin/LICENSE +0 -21
  14. package/template-gx-design-thin/README.md +0 -112
  15. package/template-gx-design-thin/build/constant.ts +0 -1
  16. package/template-gx-design-thin/build/generate/generateModifyVars.ts +0 -14
  17. package/template-gx-design-thin/build/rollupOptions/index.ts +0 -22
  18. package/template-gx-design-thin/build/util/hash.ts +0 -17
  19. package/template-gx-design-thin/build/util/index.ts +0 -131
  20. package/template-gx-design-thin/build/vite/cdn.ts +0 -63
  21. package/template-gx-design-thin/build/vite/optimizer.ts +0 -26
  22. package/template-gx-design-thin/build/vite/plugin/appConfig.ts +0 -91
  23. package/template-gx-design-thin/build/vite/plugin/autoImport.ts +0 -26
  24. package/template-gx-design-thin/build/vite/plugin/compress.ts +0 -31
  25. package/template-gx-design-thin/build/vite/plugin/html.ts +0 -39
  26. package/template-gx-design-thin/build/vite/plugin/index.ts +0 -75
  27. package/template-gx-design-thin/build/vite/plugin/mock.ts +0 -14
  28. package/template-gx-design-thin/build/vite/plugin/pwa.ts +0 -31
  29. package/template-gx-design-thin/build/vite/plugin/visualizer.ts +0 -14
  30. package/template-gx-design-thin/build/vite/plugin/viteMock/client.ts +0 -88
  31. package/template-gx-design-thin/build/vite/plugin/viteMock/createMockServer.ts +0 -271
  32. package/template-gx-design-thin/build/vite/plugin/viteMock/index.ts +0 -69
  33. package/template-gx-design-thin/build/vite/plugin/viteMock/types.ts +0 -48
  34. package/template-gx-design-thin/build/vite/plugin/viteMock/utils.ts +0 -48
  35. package/template-gx-design-thin/build/vite/plugin/viteNotice.ts +0 -40
  36. package/template-gx-design-thin/commitlint.config.cjs +0 -32
  37. package/template-gx-design-thin/config/default/defaultSettings.ts +0 -78
  38. package/template-gx-design-thin/config/default/network.ts +0 -10
  39. package/template-gx-design-thin/config/default/proxy.ts +0 -47
  40. package/template-gx-design-thin/config/default/theme.ts +0 -3
  41. package/template-gx-design-thin/config/index.ts +0 -11
  42. package/template-gx-design-thin/eslint.config.js +0 -51
  43. package/template-gx-design-thin/index.html +0 -42
  44. package/template-gx-design-thin/mock/_createProductionServer.ts +0 -19
  45. package/template-gx-design-thin/mock/_util.ts +0 -33
  46. package/template-gx-design-thin/mock/config/menu.ts +0 -21
  47. package/template-gx-design-thin/mock/config/user.ts +0 -123
  48. package/template-gx-design-thin/mock/datasSource/system/menu.ts +0 -10
  49. package/template-gx-design-thin/mock/datasSource/user/account.ts +0 -30
  50. package/template-gx-design-thin/mock/datasSource/user/index.ts +0 -47
  51. package/template-gx-design-thin/mock/util/crypto.ts +0 -23
  52. package/template-gx-design-thin/mock/util/table.ts +0 -92
  53. package/template-gx-design-thin/mock/util/utils.ts +0 -73
  54. package/template-gx-design-thin/package.json +0 -129
  55. package/template-gx-design-thin/pnpm-lock.yaml +0 -12575
  56. package/template-gx-design-thin/prettier.config.cjs +0 -18
  57. package/template-gx-design-thin/public/resource/css/index.css +0 -119
  58. package/template-gx-design-thin/public/resource/css/normalize.css +0 -396
  59. package/template-gx-design-thin/public/resource/img/favicon.ico +0 -0
  60. package/template-gx-design-thin/public/resource/img/logo.png +0 -0
  61. package/template-gx-design-thin/public/resource/img/pro_icon.svg +0 -1
  62. package/template-gx-design-thin/public/resource/img/pwa-192x192.png +0 -0
  63. package/template-gx-design-thin/public/resource/img/pwa-512x512.png +0 -0
  64. package/template-gx-design-thin/src/App.vue +0 -42
  65. package/template-gx-design-thin/src/assets/error_images/403.png +0 -0
  66. package/template-gx-design-thin/src/assets/error_images/404.png +0 -0
  67. package/template-gx-design-thin/src/assets/error_images/cloud.png +0 -0
  68. package/template-gx-design-thin/src/assets/login_images/login_background.svg +0 -1
  69. package/template-gx-design-thin/src/assets/logo.png +0 -0
  70. package/template-gx-design-thin/src/assets/menu_font/iconfont.css +0 -94
  71. package/template-gx-design-thin/src/assets/menu_font/iconfont.eot +0 -0
  72. package/template-gx-design-thin/src/assets/menu_font/iconfont.js +0 -1
  73. package/template-gx-design-thin/src/assets/menu_font/iconfont.json +0 -142
  74. package/template-gx-design-thin/src/assets/menu_font/iconfont.svg +0 -1
  75. package/template-gx-design-thin/src/assets/menu_font/iconfont.ttf +0 -0
  76. package/template-gx-design-thin/src/assets/menu_font/iconfont.woff +0 -0
  77. package/template-gx-design-thin/src/assets/menu_font/iconfont.woff2 +0 -0
  78. package/template-gx-design-thin/src/assets/menu_font/index.less +0 -94
  79. package/template-gx-design-thin/src/assets/public_icon/iconfont.css +0 -42
  80. package/template-gx-design-thin/src/assets/public_icon/iconfont.eot +0 -0
  81. package/template-gx-design-thin/src/assets/public_icon/iconfont.js +0 -1
  82. package/template-gx-design-thin/src/assets/public_icon/iconfont.json +0 -51
  83. package/template-gx-design-thin/src/assets/public_icon/iconfont.svg +0 -1
  84. package/template-gx-design-thin/src/assets/public_icon/iconfont.ttf +0 -0
  85. package/template-gx-design-thin/src/assets/public_icon/iconfont.woff +0 -0
  86. package/template-gx-design-thin/src/assets/public_icon/iconfont.woff2 +0 -0
  87. package/template-gx-design-thin/src/assets/public_icon/index.less +0 -42
  88. package/template-gx-design-thin/src/assets/public_images/nodata.svg +0 -1
  89. package/template-gx-design-thin/src/common/global.ts +0 -4
  90. package/template-gx-design-thin/src/components/GDesign/Result/index.tsx +0 -144
  91. package/template-gx-design-thin/src/components/GDesign/Result/style.less +0 -140
  92. package/template-gx-design-thin/src/components/GDesign/utils/index.ts +0 -7
  93. package/template-gx-design-thin/src/components/GlobalLayout/Confirm/index.ts +0 -21
  94. package/template-gx-design-thin/src/components/GlobalLayout/Empty/index.vue +0 -18
  95. package/template-gx-design-thin/src/components/GlobalLayout/RightContent/index.tsx +0 -126
  96. package/template-gx-design-thin/src/components/GlobalLayout/RightContent/style.ts +0 -77
  97. package/template-gx-design-thin/src/components/GlobalLayout/Spin/index.tsx +0 -30
  98. package/template-gx-design-thin/src/components/PageLoading/index.tsx +0 -51
  99. package/template-gx-design-thin/src/components/index.ts +0 -6
  100. package/template-gx-design-thin/src/core/ant-design/index.ts +0 -10
  101. package/template-gx-design-thin/src/core/gx-admin-design/index.ts +0 -6
  102. package/template-gx-design-thin/src/core/gx-design/index.ts +0 -6
  103. package/template-gx-design-thin/src/core/gx-pro-design/index.ts +0 -8
  104. package/template-gx-design-thin/src/core/index.ts +0 -84
  105. package/template-gx-design-thin/src/design/ant-design/index.less +0 -4
  106. package/template-gx-design-thin/src/design/ant-design/layout.less +0 -22
  107. package/template-gx-design-thin/src/design/ant-design/menu.less +0 -48
  108. package/template-gx-design-thin/src/design/ant-design/spin.less +0 -23
  109. package/template-gx-design-thin/src/design/ant-design/tooltip.less +0 -7
  110. package/template-gx-design-thin/src/design/color.less +0 -1
  111. package/template-gx-design-thin/src/design/config.less +0 -5
  112. package/template-gx-design-thin/src/design/imageEditor.less +0 -180
  113. package/template-gx-design-thin/src/design/index.less +0 -95
  114. package/template-gx-design-thin/src/design/mixin.less +0 -65
  115. package/template-gx-design-thin/src/design/normalize.less +0 -391
  116. package/template-gx-design-thin/src/design/root.less +0 -3
  117. package/template-gx-design-thin/src/hooks/core/index.ts +0 -3
  118. package/template-gx-design-thin/src/hooks/core/useRequest/index.ts +0 -118
  119. package/template-gx-design-thin/src/hooks/event/index.ts +0 -3
  120. package/template-gx-design-thin/src/hooks/event/useClipboard.ts +0 -15
  121. package/template-gx-design-thin/src/hooks/web/index.ts +0 -5
  122. package/template-gx-design-thin/src/hooks/web/useThemeStyle.ts +0 -16
  123. package/template-gx-design-thin/src/layout/BasicLayout.vue +0 -123
  124. package/template-gx-design-thin/src/layout/BlankLayout.vue +0 -5
  125. package/template-gx-design-thin/src/layout/ContentView.vue +0 -50
  126. package/template-gx-design-thin/src/layout/IframeView.vue +0 -1
  127. package/template-gx-design-thin/src/layout/UserLayout.vue +0 -7
  128. package/template-gx-design-thin/src/main.ts +0 -34
  129. package/template-gx-design-thin/src/plugins/index.ts +0 -2
  130. package/template-gx-design-thin/src/router/guard/index.ts +0 -83
  131. package/template-gx-design-thin/src/router/guard/permissions.ts +0 -70
  132. package/template-gx-design-thin/src/router/guard/stateGuard.ts +0 -10
  133. package/template-gx-design-thin/src/router/helper/routeHelper.ts +0 -231
  134. package/template-gx-design-thin/src/router/helper/utils.ts +0 -19
  135. package/template-gx-design-thin/src/router/index.ts +0 -31
  136. package/template-gx-design-thin/src/router/routes/index.ts +0 -86
  137. package/template-gx-design-thin/src/router/routes/modules/dataSource.ts +0 -12
  138. package/template-gx-design-thin/src/services/common/index.ts +0 -11
  139. package/template-gx-design-thin/src/services/systemCenter/index.ts +0 -1
  140. package/template-gx-design-thin/src/services/systemCenter/menu.ts +0 -9
  141. package/template-gx-design-thin/src/services/userCenter/account.ts +0 -42
  142. package/template-gx-design-thin/src/services/userCenter/index.ts +0 -28
  143. package/template-gx-design-thin/src/store/index.ts +0 -32
  144. package/template-gx-design-thin/src/store/modules/dict.ts +0 -28
  145. package/template-gx-design-thin/src/store/modules/global.ts +0 -42
  146. package/template-gx-design-thin/src/store/modules/permission.ts +0 -19
  147. package/template-gx-design-thin/src/store/modules/routes.ts +0 -113
  148. package/template-gx-design-thin/src/store/modules/tabsRouter.ts +0 -76
  149. package/template-gx-design-thin/src/store/modules/user.ts +0 -136
  150. package/template-gx-design-thin/src/utils/accessToken.ts +0 -80
  151. package/template-gx-design-thin/src/utils/crypto/base64.ts +0 -101
  152. package/template-gx-design-thin/src/utils/crypto/index.ts +0 -57
  153. package/template-gx-design-thin/src/utils/env.ts +0 -50
  154. package/template-gx-design-thin/src/utils/fetchFile.ts +0 -81
  155. package/template-gx-design-thin/src/utils/index.ts +0 -123
  156. package/template-gx-design-thin/src/utils/pageTitle.ts +0 -20
  157. package/template-gx-design-thin/src/utils/request/XHR.ts +0 -139
  158. package/template-gx-design-thin/src/utils/request/axiosCancel.ts +0 -69
  159. package/template-gx-design-thin/src/utils/request/checkStatus.ts +0 -25
  160. package/template-gx-design-thin/src/utils/request/index.ts +0 -144
  161. package/template-gx-design-thin/src/utils/request/typings.ts +0 -171
  162. package/template-gx-design-thin/src/utils/storage.ts +0 -199
  163. package/template-gx-design-thin/src/utils/uploadFile.ts +0 -27
  164. package/template-gx-design-thin/src/utils/util.ts +0 -198
  165. package/template-gx-design-thin/src/utils/validate.ts +0 -216
  166. package/template-gx-design-thin/src/views/Iframe/index.vue +0 -76
  167. package/template-gx-design-thin/src/views/Page/one.vue +0 -13
  168. package/template-gx-design-thin/src/views/Page/two.vue +0 -13
  169. package/template-gx-design-thin/src/views/exception/403/index.vue +0 -7
  170. package/template-gx-design-thin/src/views/exception/404/index.vue +0 -9
  171. package/template-gx-design-thin/src/views/user/login/index.vue +0 -109
  172. package/template-gx-design-thin/src/views/user/login/style.less +0 -38
  173. package/template-gx-design-thin/tsconfig.json +0 -46
  174. package/template-gx-design-thin/types/ant-design-import.d.ts +0 -99
  175. package/template-gx-design-thin/types/auto-imports.d.ts +0 -81
  176. package/template-gx-design-thin/types/components.d.ts +0 -24
  177. package/template-gx-design-thin/types/config.d.ts +0 -44
  178. package/template-gx-design-thin/types/global.d.ts +0 -97
  179. package/template-gx-design-thin/types/mock.d.ts +0 -16
  180. package/template-gx-design-thin/types/module.d.ts +0 -20
  181. package/template-gx-design-thin/types/response.d.ts +0 -15
  182. package/template-gx-design-thin/unocss.config.ts +0 -101
  183. package/template-gx-design-thin/vite.config.ts +0 -120
  184. 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,13 +0,0 @@
1
- <script setup lang="ts">
2
-
3
- </script>
4
-
5
- <template>
6
- <g-pro-page-container>
7
- 页面一
8
- </g-pro-page-container>
9
- </template>
10
-
11
- <style scoped lang="less">
12
-
13
- </style>
@@ -1,13 +0,0 @@
1
- <script setup lang="ts">
2
-
3
- </script>
4
-
5
- <template>
6
- <g-pro-page-container>
7
- 页面二
8
- </g-pro-page-container>
9
- </template>
10
-
11
- <style scoped lang="less">
12
-
13
- </style>
@@ -1,7 +0,0 @@
1
- <script setup lang="ts">
2
- import GResult from '@gx-design/Result'
3
- </script>
4
-
5
- <template>
6
- <GResult status="403" />
7
- </template>
@@ -1,9 +0,0 @@
1
- <script setup lang="ts">
2
- import GResult from '@gx-design/Result'
3
- </script>
4
-
5
- <template>
6
- <GResult status="404" />
7
- </template>
8
-
9
- <style lang="less" scoped></style>
@@ -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
- }