@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,57 +0,0 @@
|
|
|
1
|
-
import 'crypto-js/enc-utf8'
|
|
2
|
-
import 'crypto-js/tripledes'
|
|
3
|
-
import 'crypto-js/sha1'
|
|
4
|
-
import * as CryptoJS from 'crypto-js/core'
|
|
5
|
-
import CryptoProJS from 'crypto-js'
|
|
6
|
-
import { isJSONStr } from '@/utils/validate'
|
|
7
|
-
import { isArray, isObject } from '@gx-design-vue/pro-utils'
|
|
8
|
-
|
|
9
|
-
const key = '1234123412ABCDEF' // 十六位十六进制数作为密钥
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* 登录密码加密
|
|
13
|
-
* @param password
|
|
14
|
-
* @returns {string}
|
|
15
|
-
*/
|
|
16
|
-
export const encodePassword = (password: string) => {
|
|
17
|
-
const key = CryptoProJS.enc.Utf8.parse('8QONwyJtHesysWpM')
|
|
18
|
-
const passwordENC = CryptoProJS.AES.encrypt(password, key, {
|
|
19
|
-
mode: CryptoProJS.mode.ECB,
|
|
20
|
-
padding: CryptoProJS.pad.Pkcs7
|
|
21
|
-
})
|
|
22
|
-
const encodePW = passwordENC.ciphertext.toString()
|
|
23
|
-
return encodePW
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// 加密方法
|
|
27
|
-
export function Encrypt(word) {
|
|
28
|
-
let str: string | object = word
|
|
29
|
-
if (isObject(word) || isArray(word)) {
|
|
30
|
-
str = JSON.stringify(word)
|
|
31
|
-
}
|
|
32
|
-
const keyHex = CryptoJS.enc.Utf8.parse(key)
|
|
33
|
-
const ivHex = CryptoJS.enc.Utf8.parse(key)
|
|
34
|
-
const encrypted = CryptoJS.DES.encrypt(str, keyHex, {
|
|
35
|
-
iv: ivHex,
|
|
36
|
-
mode: CryptoJS.mode.CBC,
|
|
37
|
-
padding: CryptoJS.pad.Pkcs7
|
|
38
|
-
})
|
|
39
|
-
return CryptoJS.enc.Base64.stringify(encrypted.ciphertext)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// 解密方法
|
|
43
|
-
export function Decrypt(word) {
|
|
44
|
-
const keyHex = CryptoJS.enc.Utf8.parse(key)
|
|
45
|
-
const ivHex = CryptoJS.enc.Utf8.parse(key)
|
|
46
|
-
const decrypted = CryptoJS.DES.decrypt({
|
|
47
|
-
ciphertext: CryptoJS.enc.Base64.parse(word)
|
|
48
|
-
}, keyHex, {
|
|
49
|
-
iv: ivHex,
|
|
50
|
-
mode: CryptoJS.mode.CBC,
|
|
51
|
-
padding: CryptoJS.pad.Pkcs7
|
|
52
|
-
})
|
|
53
|
-
const decryptedStr = decrypted.toString(CryptoJS.enc.Utf8)
|
|
54
|
-
return isJSONStr(decryptedStr.toString())
|
|
55
|
-
? JSON.parse(decryptedStr.toString())
|
|
56
|
-
: decryptedStr.toString()
|
|
57
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @Author gx12358
|
|
3
|
-
* @DateTime 2022/4/1
|
|
4
|
-
* @lastTime 2022/4/1
|
|
5
|
-
* @description 环境:本地开发环境
|
|
6
|
-
*/
|
|
7
|
-
export function isDev(): boolean {
|
|
8
|
-
return typeViteEnv('VITE_APP_ENV') === 'dev'
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* @Author gx12358
|
|
13
|
-
* @DateTime 2022/4/1
|
|
14
|
-
* @lastTime 2022/4/1
|
|
15
|
-
* @description 环境:正式
|
|
16
|
-
*/
|
|
17
|
-
export function isPro(): boolean {
|
|
18
|
-
return typeViteEnv('VITE_USE_MODE') === 'pro'
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* @Author gx12358
|
|
23
|
-
* @DateTime 2022/4/1
|
|
24
|
-
* @lastTime 2022/4/1
|
|
25
|
-
* @description 环境:非本地开发环境
|
|
26
|
-
*/
|
|
27
|
-
export function isBuild(): boolean {
|
|
28
|
-
return typeViteEnv('VITE_NODE_ENV') === 'production'
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* @Author gx12358
|
|
33
|
-
* @DateTime 2022/4/1
|
|
34
|
-
* @lastTime 2022/4/1
|
|
35
|
-
* @description 当前联调环境
|
|
36
|
-
*/
|
|
37
|
-
export function currentMode() {
|
|
38
|
-
return typeViteEnv('VITE_USE_MODE')
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export function typeViteEnv<T extends keyof ViteEnv>(key: T): ViteEnv[T] | undefined {
|
|
42
|
-
let value: any = (import.meta as any).env[key]
|
|
43
|
-
|
|
44
|
-
if (value && typeof value === 'string') {
|
|
45
|
-
value = value.replace(/\\n/g, '\n') as ViteEnv[T]
|
|
46
|
-
value = value === 'true' ? true : value === 'false' ? false : value
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return value
|
|
50
|
-
}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import type { Method } from 'axios'
|
|
2
|
-
import { message } from 'ant-design-vue'
|
|
3
|
-
import { defaultSettings } from '@gx-config'
|
|
4
|
-
import { tansParams } from '@/utils/util'
|
|
5
|
-
import { typeViteEnv } from '@/utils/env'
|
|
6
|
-
|
|
7
|
-
const { tokenName } = defaultSettings
|
|
8
|
-
|
|
9
|
-
export interface DownLoadRequestConfig<D = any> {
|
|
10
|
-
url: string;
|
|
11
|
-
method?: Method | string;
|
|
12
|
-
headers?: HeadersInit;
|
|
13
|
-
data?: D;
|
|
14
|
-
params?: any;
|
|
15
|
-
name?: string; // 下载的名称
|
|
16
|
-
direct?: boolean; // 是否直接使用url进行请求
|
|
17
|
-
read?: boolean; // 返回下载地址,不下载
|
|
18
|
-
showTip?: boolean; // 展示下载中字样
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export default async function fetchFile(options: DownLoadRequestConfig): Promise<boolean | string> {
|
|
22
|
-
const user = useStoreUser()
|
|
23
|
-
if (options.showTip) {
|
|
24
|
-
message.loading({
|
|
25
|
-
content: `下载中,请耐心等待。。。。`,
|
|
26
|
-
key: 'updatable',
|
|
27
|
-
duration: 0
|
|
28
|
-
})
|
|
29
|
-
}
|
|
30
|
-
const opations: RequestInit = {
|
|
31
|
-
method: options.method,
|
|
32
|
-
headers: {
|
|
33
|
-
'Content-Type': 'application/json',
|
|
34
|
-
...options.headers
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
if (!options.direct)
|
|
38
|
-
options.url = `${typeViteEnv('VITE_BASE_URL')}${options.url}`
|
|
39
|
-
if (user.accessToken && !options.direct)
|
|
40
|
-
opations.headers[tokenName] = `${user.accessToken}`
|
|
41
|
-
if (options.params) {
|
|
42
|
-
let url = options.url + '?' + tansParams(options.params)
|
|
43
|
-
url = url.slice(0, -1)
|
|
44
|
-
options.url = url
|
|
45
|
-
}
|
|
46
|
-
if (options.method === 'post' && options.data) {
|
|
47
|
-
opations.body = JSON.stringify(options.data)
|
|
48
|
-
}
|
|
49
|
-
const response = await fetch(options.url, opations)
|
|
50
|
-
const fileName = options.name
|
|
51
|
-
? options.name
|
|
52
|
-
: response.headers.get('content-disposition')
|
|
53
|
-
? response.headers.get('content-disposition').split(';')[1].split('=')[1]
|
|
54
|
-
: ''
|
|
55
|
-
const blobResponse = await response.blob()
|
|
56
|
-
if (blobResponse) {
|
|
57
|
-
const a = window.document.createElement('a')
|
|
58
|
-
const downUrl = window.URL.createObjectURL(blobResponse)
|
|
59
|
-
if (options.read)
|
|
60
|
-
return downUrl
|
|
61
|
-
a.href = downUrl
|
|
62
|
-
a.download = `${decodeURI(fileName)}`
|
|
63
|
-
a.click()
|
|
64
|
-
if (options.showTip) {
|
|
65
|
-
message.success({
|
|
66
|
-
content: `下载成功`,
|
|
67
|
-
key: 'updatable'
|
|
68
|
-
})
|
|
69
|
-
}
|
|
70
|
-
window.URL.revokeObjectURL(downUrl)
|
|
71
|
-
return true
|
|
72
|
-
} else {
|
|
73
|
-
if (options.showTip) {
|
|
74
|
-
message.success({
|
|
75
|
-
content: `下载失败`,
|
|
76
|
-
key: 'updatable'
|
|
77
|
-
})
|
|
78
|
-
}
|
|
79
|
-
return false
|
|
80
|
-
}
|
|
81
|
-
}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import PropTypes from 'ant-design-vue/es/_util/vue-types'
|
|
2
|
-
|
|
3
|
-
export { PropTypes }
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @author gx12358 2539306317@qq.com
|
|
7
|
-
* @description 将url请求参数转为json格式
|
|
8
|
-
* @param url
|
|
9
|
-
* @returns {{}|any}
|
|
10
|
-
*/
|
|
11
|
-
export function paramObj(url) {
|
|
12
|
-
const search = url.split('?')[1]
|
|
13
|
-
if (!search) {
|
|
14
|
-
return {}
|
|
15
|
-
}
|
|
16
|
-
return JSON.parse(`{"${decodeURIComponent(search)
|
|
17
|
-
.replace(/"/g, '\\"')
|
|
18
|
-
.replace(/&/g, '","')
|
|
19
|
-
.replace(/=/g, '":"')
|
|
20
|
-
.replace(/\+/g, ' ')}"}`)
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* @author gx12358 2539306317@qq.com
|
|
25
|
-
* @description 父子关系的数组转换成树形结构数据
|
|
26
|
-
* @param data
|
|
27
|
-
* @returns {*}
|
|
28
|
-
*/
|
|
29
|
-
export function translateDataToTree(data) {
|
|
30
|
-
const parent = data.filter(
|
|
31
|
-
value => value.parentId === 'undefined' || value.parentId == null
|
|
32
|
-
)
|
|
33
|
-
const children = data.filter(
|
|
34
|
-
value => value.parentId !== 'undefined' && value.parentId != null
|
|
35
|
-
)
|
|
36
|
-
const translator = (parent, children) => {
|
|
37
|
-
parent.forEach((parent) => {
|
|
38
|
-
children.forEach((current, index) => {
|
|
39
|
-
if (current.parentId === parent.id) {
|
|
40
|
-
const temp = JSON.parse(JSON.stringify(children))
|
|
41
|
-
temp.splice(index, 1)
|
|
42
|
-
translator([ current ], temp)
|
|
43
|
-
typeof parent.children !== 'undefined'
|
|
44
|
-
? parent.children.push(current)
|
|
45
|
-
: (parent.children = [ current ])
|
|
46
|
-
}
|
|
47
|
-
})
|
|
48
|
-
})
|
|
49
|
-
}
|
|
50
|
-
translator(parent, children)
|
|
51
|
-
return parent
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* @author gx12358 2539306317@qq.com
|
|
56
|
-
* @description 树形结构数据转换成父子关系的数组
|
|
57
|
-
* @param data
|
|
58
|
-
* @returns {[]}
|
|
59
|
-
*/
|
|
60
|
-
export function translateTreeToData(data) {
|
|
61
|
-
const result: any[] = []
|
|
62
|
-
data.forEach((item) => {
|
|
63
|
-
const loop = (data) => {
|
|
64
|
-
result.push({
|
|
65
|
-
id: data.id,
|
|
66
|
-
name: data.name,
|
|
67
|
-
parentId: data.parentId
|
|
68
|
-
})
|
|
69
|
-
const child = data.children
|
|
70
|
-
if (child) {
|
|
71
|
-
for (let i = 0; i < child.length; i++) {
|
|
72
|
-
loop(child[i])
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
loop(item)
|
|
77
|
-
})
|
|
78
|
-
return result
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* @author gx12358 2539306317@qq.com
|
|
83
|
-
* @description 10位时间戳转换
|
|
84
|
-
* @param time
|
|
85
|
-
* @returns {string}
|
|
86
|
-
*/
|
|
87
|
-
export function tenBitTimestamp(time) {
|
|
88
|
-
const date = new Date(time * 1000)
|
|
89
|
-
const y = date.getFullYear()
|
|
90
|
-
let m: any = date.getMonth() + 1
|
|
91
|
-
m = m < 10 ? '' + m : m
|
|
92
|
-
let d: any = date.getDate()
|
|
93
|
-
d = d < 10 ? '' + d : d
|
|
94
|
-
let h: any = date.getHours()
|
|
95
|
-
h = h < 10 ? '0' + h : h
|
|
96
|
-
let minute: any = date.getMinutes()
|
|
97
|
-
let second: any = date.getSeconds()
|
|
98
|
-
minute = minute < 10 ? '0' + minute : minute
|
|
99
|
-
second = second < 10 ? '0' + second : second
|
|
100
|
-
return y + '年' + m + '月' + d + '日 ' + h + ':' + minute + ':' + second // 组合
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* @author gx12358 2539306317@qq.com
|
|
105
|
-
* @description 13位时间戳转换
|
|
106
|
-
* @param time
|
|
107
|
-
* @returns {string}
|
|
108
|
-
*/
|
|
109
|
-
export function thirteenBitTimestamp(time) {
|
|
110
|
-
const date = new Date(time / 1)
|
|
111
|
-
const y = date.getFullYear()
|
|
112
|
-
let m: any = date.getMonth() + 1
|
|
113
|
-
m = m < 10 ? '' + m : m
|
|
114
|
-
let d: any = date.getDate()
|
|
115
|
-
d = d < 10 ? '' + d : d
|
|
116
|
-
let h: any = date.getHours()
|
|
117
|
-
h = h < 10 ? '0' + h : h
|
|
118
|
-
let minute: any = date.getMinutes()
|
|
119
|
-
let second: any = date.getSeconds()
|
|
120
|
-
minute = minute < 10 ? '0' + minute : minute
|
|
121
|
-
second = second < 10 ? '0' + second : second
|
|
122
|
-
return y + '年' + m + '月' + d + '日 ' + h + ':' + minute + ':' + second // 组合
|
|
123
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { defaultSettings } from '@gx-config'
|
|
2
|
-
|
|
3
|
-
const { title, titleReverse, titleSeparator } = defaultSettings
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @author gx12358 2539306317@qq.com
|
|
7
|
-
* @description 设置标题
|
|
8
|
-
* @param pageTitle
|
|
9
|
-
* @returns {string}
|
|
10
|
-
*/
|
|
11
|
-
export default function getPageTitle(pageTitle: string) {
|
|
12
|
-
let newTitles: string[] = []
|
|
13
|
-
if (pageTitle)
|
|
14
|
-
newTitles.push(pageTitle)
|
|
15
|
-
if (title)
|
|
16
|
-
newTitles.push(title)
|
|
17
|
-
if (titleReverse)
|
|
18
|
-
newTitles = newTitles.reverse()
|
|
19
|
-
return newTitles.join(titleSeparator)
|
|
20
|
-
}
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import type { AxiosError } from 'axios'
|
|
2
|
-
import axios from 'axios'
|
|
3
|
-
import { cloneDeep } from 'lodash-es'
|
|
4
|
-
import qs from 'qs'
|
|
5
|
-
import { isFunction } from '@gx-design-vue/pro-utils'
|
|
6
|
-
import type { GAxiosInstance, GAxiosOptions, GAxiosResponse } from './typings'
|
|
7
|
-
import { ContentTypeEnum, RequestEnum } from './typings'
|
|
8
|
-
import { AxiosCanceler } from './axiosCancel'
|
|
9
|
-
|
|
10
|
-
export const getPendingUrl = (config: GAxiosOptions) => config.cancelKey || [ config.method, config.url ].join(
|
|
11
|
-
'&')
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* @Author gx12358
|
|
15
|
-
* @DateTime 2023/1/6
|
|
16
|
-
* @lastTime 2023/1/6
|
|
17
|
-
* @description 重新定义axios
|
|
18
|
-
*/
|
|
19
|
-
export class GAxios {
|
|
20
|
-
private axiosInstance: GAxiosInstance
|
|
21
|
-
private readonly options: GAxiosOptions
|
|
22
|
-
|
|
23
|
-
constructor(options: GAxiosOptions) {
|
|
24
|
-
this.options = options
|
|
25
|
-
this.axiosInstance = axios.create(options) as GAxiosInstance
|
|
26
|
-
this.setupInterceptors()
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* @description: Interceptor configuration 拦截器配置
|
|
31
|
-
*/
|
|
32
|
-
private setupInterceptors() {
|
|
33
|
-
const {
|
|
34
|
-
requestInterceptors,
|
|
35
|
-
requestInterceptorsCatch,
|
|
36
|
-
responseInterceptors,
|
|
37
|
-
responseInterceptorsCatch
|
|
38
|
-
} = this.options
|
|
39
|
-
|
|
40
|
-
const axiosCanceler = new AxiosCanceler(this.options.ignoreCancelToken)
|
|
41
|
-
|
|
42
|
-
this.axiosInstance.interceptors.request.use<GAxiosOptions>((config) => {
|
|
43
|
-
const { cancelCallBackHook } = config
|
|
44
|
-
axiosCanceler.addPending(config)
|
|
45
|
-
if (cancelCallBackHook) {
|
|
46
|
-
cancelCallBackHook({
|
|
47
|
-
reset: axiosCanceler.reset,
|
|
48
|
-
cancel: (key?: string) => axiosCanceler.removePending(config, key),
|
|
49
|
-
cancelAll: axiosCanceler.removeAllPending
|
|
50
|
-
})
|
|
51
|
-
}
|
|
52
|
-
if (requestInterceptors && isFunction(requestInterceptors)) {
|
|
53
|
-
config = requestInterceptors(config)
|
|
54
|
-
}
|
|
55
|
-
return config
|
|
56
|
-
}, undefined)
|
|
57
|
-
|
|
58
|
-
// Request interceptor error capture
|
|
59
|
-
requestInterceptorsCatch && isFunction(requestInterceptorsCatch) && this.axiosInstance.interceptors.request.use(
|
|
60
|
-
undefined,
|
|
61
|
-
requestInterceptorsCatch
|
|
62
|
-
)
|
|
63
|
-
|
|
64
|
-
// Response result interceptor processing
|
|
65
|
-
this.axiosInstance.interceptors.response.use((res: GAxiosResponse) => {
|
|
66
|
-
res && axiosCanceler.removePending(res.config)
|
|
67
|
-
if (responseInterceptors && isFunction(responseInterceptors)) {
|
|
68
|
-
return responseInterceptors(res)
|
|
69
|
-
}
|
|
70
|
-
return res
|
|
71
|
-
}, undefined)
|
|
72
|
-
|
|
73
|
-
// Response result interceptor error capture
|
|
74
|
-
responseInterceptorsCatch && isFunction(responseInterceptorsCatch) && this.axiosInstance.interceptors.response.use(
|
|
75
|
-
undefined,
|
|
76
|
-
(error) => {
|
|
77
|
-
axiosCanceler.removePending(error.config)
|
|
78
|
-
|
|
79
|
-
return responseInterceptorsCatch(this.axiosInstance, error)
|
|
80
|
-
}
|
|
81
|
-
)
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// support form-data
|
|
85
|
-
supportFormData(config: GAxiosOptions) {
|
|
86
|
-
const headers = config.headers || this.options.headers
|
|
87
|
-
const contentType = headers?.['Content-Type'] || headers?.['content-type']
|
|
88
|
-
|
|
89
|
-
if (contentType !== ContentTypeEnum.FORM_URLENCODED || !Reflect.has(
|
|
90
|
-
config,
|
|
91
|
-
'data'
|
|
92
|
-
) || config.method?.toUpperCase() === RequestEnum.GET) {
|
|
93
|
-
return config
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
return {
|
|
97
|
-
...config,
|
|
98
|
-
data: qs.stringify(config.data, { arrayFormat: 'brackets' })
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
request<T = ResponseResult | boolean>(config: GAxiosOptions): Promise<T> {
|
|
103
|
-
let conf: GAxiosOptions = cloneDeep(config)
|
|
104
|
-
|
|
105
|
-
const opt: GAxiosOptions = Object.assign({}, this.options, conf)
|
|
106
|
-
|
|
107
|
-
const { beforeRequestHook, requestCatchHook, transformResponseHook } = opt
|
|
108
|
-
if (beforeRequestHook && isFunction(beforeRequestHook)) {
|
|
109
|
-
conf = beforeRequestHook(opt)
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
conf = this.supportFormData(opt)
|
|
113
|
-
|
|
114
|
-
return new Promise((resolve) => {
|
|
115
|
-
this.axiosInstance
|
|
116
|
-
.request<any, GAxiosResponse>(conf)
|
|
117
|
-
.then((res: GAxiosResponse) => {
|
|
118
|
-
if (transformResponseHook && isFunction(transformResponseHook)) {
|
|
119
|
-
try {
|
|
120
|
-
const ret = transformResponseHook(res, config)
|
|
121
|
-
resolve(ret)
|
|
122
|
-
} catch (err) {
|
|
123
|
-
resolve(false as any)
|
|
124
|
-
return
|
|
125
|
-
}
|
|
126
|
-
return
|
|
127
|
-
}
|
|
128
|
-
resolve(res as unknown as Promise<T>)
|
|
129
|
-
})
|
|
130
|
-
.catch((e: Error | AxiosError) => {
|
|
131
|
-
if (requestCatchHook && isFunction(requestCatchHook)) {
|
|
132
|
-
resolve(requestCatchHook(e) as any)
|
|
133
|
-
return
|
|
134
|
-
}
|
|
135
|
-
resolve(false as any)
|
|
136
|
-
})
|
|
137
|
-
})
|
|
138
|
-
}
|
|
139
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import type { Canceler } from 'axios'
|
|
2
|
-
import axios from 'axios'
|
|
3
|
-
import { isFunction } from '@gx-design-vue/pro-utils'
|
|
4
|
-
import type { GAxiosOptions } from './typings'
|
|
5
|
-
|
|
6
|
-
export const getPendingUrl = (
|
|
7
|
-
config: GAxiosOptions,
|
|
8
|
-
key?: string
|
|
9
|
-
) => key || config.cancelKey || [ config.method, config.url ].join('&')
|
|
10
|
-
|
|
11
|
-
export class AxiosCanceler {
|
|
12
|
-
ignoreCancelToken: boolean
|
|
13
|
-
pendingMap: Map<string, Canceler>
|
|
14
|
-
|
|
15
|
-
constructor(ignoreCancel?: boolean) {
|
|
16
|
-
this.pendingMap = new Map<string, Canceler>()
|
|
17
|
-
|
|
18
|
-
this.ignoreCancelToken = ignoreCancel
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Add request
|
|
23
|
-
* @param {Object} config
|
|
24
|
-
*/
|
|
25
|
-
addPending(config: GAxiosOptions) {
|
|
26
|
-
!this.ignoreCancelToken && this.removePending(config)
|
|
27
|
-
|
|
28
|
-
const url = getPendingUrl(config)
|
|
29
|
-
config.cancelToken = config.cancelToken || new axios.CancelToken((cancel) => {
|
|
30
|
-
if (!this.pendingMap.has(url)) {
|
|
31
|
-
// If there is no current request in pending, add it
|
|
32
|
-
this.pendingMap.set(url, cancel)
|
|
33
|
-
}
|
|
34
|
-
})
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* @description: Clear all pending
|
|
39
|
-
*/
|
|
40
|
-
removeAllPending() {
|
|
41
|
-
this.pendingMap.forEach((cancel) => {
|
|
42
|
-
cancel && isFunction(cancel) && cancel()
|
|
43
|
-
})
|
|
44
|
-
this.pendingMap.clear()
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Removal request
|
|
49
|
-
* @param {Object} config
|
|
50
|
-
*/
|
|
51
|
-
removePending(config: GAxiosOptions, key?: string) {
|
|
52
|
-
const url = getPendingUrl(config, key)
|
|
53
|
-
|
|
54
|
-
if (this.pendingMap.has(url)) {
|
|
55
|
-
// If there is a current request identifier in pending,
|
|
56
|
-
// the current request needs to be cancelled and removed
|
|
57
|
-
const cancel = this.pendingMap.get(url)
|
|
58
|
-
cancel && cancel(url)
|
|
59
|
-
this.pendingMap.delete(url)
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* @description: reset
|
|
65
|
-
*/
|
|
66
|
-
reset(): void {
|
|
67
|
-
this.pendingMap = new Map<string, Canceler>()
|
|
68
|
-
}
|
|
69
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { useStoreUser } from '@/store'
|
|
2
|
-
import { message } from 'ant-design-vue'
|
|
3
|
-
import { router } from '@/router'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @author gx12358 2539306317@qq.com
|
|
7
|
-
* @description 处理code异常
|
|
8
|
-
* @param {*} code
|
|
9
|
-
* @param {*} msg
|
|
10
|
-
*/
|
|
11
|
-
export const handleCode = (code: number, msg: string) => {
|
|
12
|
-
const user = useStoreUser()
|
|
13
|
-
switch (code) {
|
|
14
|
-
case 401:
|
|
15
|
-
user.resetPermissions()
|
|
16
|
-
router.push({ path: '/user/login' })
|
|
17
|
-
break
|
|
18
|
-
case 403:
|
|
19
|
-
router.push({ path: '/exception/403' })
|
|
20
|
-
break
|
|
21
|
-
default:
|
|
22
|
-
message.error(msg || '后端接口异常')
|
|
23
|
-
break
|
|
24
|
-
}
|
|
25
|
-
}
|