@gx-design-vue/create-gx-cli 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +1 -1
- package/src/main.js +1 -0
- package/template-design-pro/.editorconfig +19 -0
- package/template-design-pro/.env +2 -0
- package/template-design-pro/.env.development +18 -0
- package/template-design-pro/.env.pro +32 -0
- package/template-design-pro/.env.production +32 -0
- package/template-design-pro/.env.test +20 -0
- package/template-design-pro/.eslintignore +16 -0
- package/template-design-pro/.eslintrc.js +64 -0
- package/template-design-pro/.gitpod.yml +6 -0
- package/template-design-pro/.husky/pre-commit +4 -0
- package/template-design-pro/.prettierignore +9 -0
- package/template-design-pro/.stylelintignore +3 -0
- package/template-design-pro/.yarnclean +48 -0
- package/template-design-pro/LICENSE +21 -0
- package/template-design-pro/README.md +111 -0
- package/template-design-pro/build/constant.ts +6 -0
- package/template-design-pro/build/generate/generateModifyVars.ts +18 -0
- package/template-design-pro/build/getConfigFileName.ts +13 -0
- package/template-design-pro/build/script/buildConf.ts +44 -0
- package/template-design-pro/build/script/postBuild.ts +25 -0
- package/template-design-pro/build/script/reSetRootHtml.ts +20 -0
- package/template-design-pro/build/utils.ts +85 -0
- package/template-design-pro/build/vite/cdn.ts +7 -0
- package/template-design-pro/build/vite/optimizer.ts +22 -0
- package/template-design-pro/build/vite/plugin/autoImport.ts +18 -0
- package/template-design-pro/build/vite/plugin/compress.ts +35 -0
- package/template-design-pro/build/vite/plugin/hmr.ts +25 -0
- package/template-design-pro/build/vite/plugin/html.ts +47 -0
- package/template-design-pro/build/vite/plugin/index.ts +89 -0
- package/template-design-pro/build/vite/plugin/mock.ts +20 -0
- package/template-design-pro/build/vite/plugin/pwa.ts +37 -0
- package/template-design-pro/build/vite/plugin/styleImport.ts +129 -0
- package/template-design-pro/build/vite/plugin/visualizer.ts +17 -0
- package/template-design-pro/build/vite/plugin/vite-plugin-antd-theme/index.ts +24 -0
- package/template-design-pro/build/vite/plugin/vite-plugin-mock/createMockServer.ts +303 -0
- package/template-design-pro/build/vite/plugin/vite-plugin-mock/createProdMockServer.ts +93 -0
- package/template-design-pro/build/vite/plugin/vite-plugin-mock/index.ts +68 -0
- package/template-design-pro/build/vite/plugin/vite-plugin-mock/types.ts +30 -0
- package/template-design-pro/build/vite/plugin/vite-plugin-mock/utils.ts +26 -0
- package/template-design-pro/commitlint.config.js +32 -0
- package/template-design-pro/config/config.ts +14 -0
- package/template-design-pro/config/default/animate.ts +30 -0
- package/template-design-pro/config/default/defaultSettings.ts +75 -0
- package/template-design-pro/config/default/network.ts +16 -0
- package/template-design-pro/config/default/proxy.ts +26 -0
- package/template-design-pro/config/default/theme.ts +43 -0
- package/template-design-pro/config/default/themeColor.ts +62 -0
- package/template-design-pro/index.html +45 -0
- package/template-design-pro/jest.config.mjs +36 -0
- package/template-design-pro/mock/_createProductionServer.ts +19 -0
- package/template-design-pro/mock/_util.ts +55 -0
- package/template-design-pro/mock/controller/menu.ts +85 -0
- package/template-design-pro/mock/controller/notices.ts +114 -0
- package/template-design-pro/mock/system/dict.ts +60 -0
- package/template-design-pro/mock/system/user.ts +218 -0
- package/template-design-pro/package.json +151 -0
- package/template-design-pro/pnpm-lock.yaml +9913 -0
- package/template-design-pro/postcss.config.js +5 -0
- package/template-design-pro/prettier.config.js +18 -0
- package/template-design-pro/public/resource/css/index.css +171 -0
- package/template-design-pro/public/resource/img/favicon.ico +0 -0
- package/template-design-pro/public/resource/img/logo.png +0 -0
- package/template-design-pro/public/resource/img/pro_icon.svg +5 -0
- package/template-design-pro/public/resource/img/pwa-192x192.png +0 -0
- package/template-design-pro/public/resource/img/pwa-512x512.png +0 -0
- package/template-design-pro/src/App.vue +47 -0
- package/template-design-pro/src/assets/error_images/403.png +0 -0
- package/template-design-pro/src/assets/error_images/404.png +0 -0
- package/template-design-pro/src/assets/error_images/cloud.png +0 -0
- package/template-design-pro/src/assets/login_images/login_background.svg +69 -0
- package/template-design-pro/src/assets/logo.png +0 -0
- package/template-design-pro/src/assets/menu_font/iconfont.css +94 -0
- package/template-design-pro/src/assets/menu_font/iconfont.eot +0 -0
- package/template-design-pro/src/assets/menu_font/iconfont.js +1 -0
- package/template-design-pro/src/assets/menu_font/iconfont.json +142 -0
- package/template-design-pro/src/assets/menu_font/iconfont.svg +57 -0
- package/template-design-pro/src/assets/menu_font/iconfont.ttf +0 -0
- package/template-design-pro/src/assets/menu_font/iconfont.woff +0 -0
- package/template-design-pro/src/assets/menu_font/iconfont.woff2 +0 -0
- package/template-design-pro/src/assets/menu_font/index.less +94 -0
- package/template-design-pro/src/common/global.ts +1 -0
- package/template-design-pro/src/components/GDesign/ProLayout/BasicLayout.less +80 -0
- package/template-design-pro/src/components/GDesign/ProLayout/BasicLayout.tsx +342 -0
- package/template-design-pro/src/components/GDesign/ProLayout/PageLoading.tsx +20 -0
- package/template-design-pro/src/components/GDesign/ProLayout/RenderTypings.ts +31 -0
- package/template-design-pro/src/components/GDesign/ProLayout/RouteContext.tsx +82 -0
- package/template-design-pro/src/components/GDesign/ProLayout/WrapContent.tsx +69 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalFooter/index.tsx +88 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalHeader/DefaultHeader.tsx +189 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalHeader/Header.less +8 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalHeader/index.tsx +105 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalHeader/props.ts +69 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/GlobalHeader/style.less +144 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/LogoContent/index.tsx +81 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/LogoContent/props.ts +29 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/MultiTab/index.tsx +384 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/MultiTab/props.ts +15 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/MultiTab/style.less +79 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/NoticeIcon/NoticeIcon.tsx +148 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/NoticeIcon/NoticeList.module.less +115 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/NoticeIcon/NoticeList.tsx +154 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/NoticeIcon/index.less +39 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/NoticeIcon/index.tsx +133 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/PageContainer/index.tsx +190 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/PageContainer/props.ts +48 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/PageContainer/style.less +128 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/PageContainer/typings.ts +0 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/RightContent/AvatarDropdown.tsx +63 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/RightContent/HeaderSearch.tsx +122 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/RightContent/headerSearch.less +30 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/RightContent/index.tsx +95 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/RightContent/style.less +90 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SettingDrawer/BlockCheckbox.tsx +70 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SettingDrawer/LayoutSetting.tsx +107 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SettingDrawer/ThemeColor.tsx +68 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SettingDrawer/index.tsx +346 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/BaseMenu.tsx +224 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/SiderMenu.tsx +224 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/index.tsx +43 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/props.ts +112 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/style.less +262 -0
- package/template-design-pro/src/components/GDesign/ProLayout/components/SiderMenu/typings.ts +44 -0
- package/template-design-pro/src/components/GDesign/ProLayout/default.less +2 -0
- package/template-design-pro/src/components/GDesign/ProLayout/defaultSettings.ts +121 -0
- package/template-design-pro/src/components/GDesign/ProLayout/hooks/context/index.ts +45 -0
- package/template-design-pro/src/components/GDesign/ProLayout/index.ts +43 -0
- package/template-design-pro/src/components/GDesign/ProLayout/props.ts +57 -0
- package/template-design-pro/src/components/GDesign/ProLayout/style.less +272 -0
- package/template-design-pro/src/components/GDesign/ProLayout/typings.ts +1 -0
- package/template-design-pro/src/components/GDesign/ProLayout/utils/getMenuData.ts +31 -0
- package/template-design-pro/src/components/GDesign/ProLayout/utils/index.ts +94 -0
- package/template-design-pro/src/components/GDesign/ProLayout/utils/isImg/index.ts +6 -0
- package/template-design-pro/src/components/GDesign/ProLayout/utils/isUrl/index.ts +5 -0
- package/template-design-pro/src/components/GDesign/Result/index.tsx +142 -0
- package/template-design-pro/src/components/GDesign/Result/style.less +140 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/components/Bar/index.tsx +56 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/components/Bar/props.ts +23 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/components/Thumb/index.tsx +164 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/components/Thumb/props.ts +11 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/context.ts +10 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/index.tsx +200 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/props.ts +65 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/style.less +85 -0
- package/template-design-pro/src/components/GDesign/Scrollbars/util.ts +40 -0
- package/template-design-pro/src/components/GDesign/utils/index.ts +7 -0
- package/template-design-pro/src/components/PageLoading/index.tsx +44 -0
- package/template-design-pro/src/components/PageTransition/index.vue +98 -0
- package/template-design-pro/src/components/index.ts +6 -0
- package/template-design-pro/src/core/ant-design/index.ts +14 -0
- package/template-design-pro/src/core/gx-admin-design/index.ts +7 -0
- package/template-design-pro/src/core/gx-admin-directives/index.ts +8 -0
- package/template-design-pro/src/core/gx-admin-directives/permission.ts +28 -0
- package/template-design-pro/src/core/gx-design/index.ts +7 -0
- package/template-design-pro/src/core/gx-pro-design/index.ts +10 -0
- package/template-design-pro/src/core/index.ts +27 -0
- package/template-design-pro/src/design/ant-design/index.less +4 -0
- package/template-design-pro/src/design/ant-design/layout.less +29 -0
- package/template-design-pro/src/design/ant-design/menu.less +55 -0
- package/template-design-pro/src/design/ant-design/table.less +67 -0
- package/template-design-pro/src/design/ant-design/tooltip.less +13 -0
- package/template-design-pro/src/design/color.less +1 -0
- package/template-design-pro/src/design/config.less +5 -0
- package/template-design-pro/src/design/index.less +41 -0
- package/template-design-pro/src/design/mixin.less +66 -0
- package/template-design-pro/src/design/normalize.less +390 -0
- package/template-design-pro/src/global.less +15 -0
- package/template-design-pro/src/hooks/core/index.ts +3 -0
- package/template-design-pro/src/hooks/core/useRequest/index.ts +70 -0
- package/template-design-pro/src/hooks/core/useRequest/typings.ts +0 -0
- package/template-design-pro/src/hooks/event/index.ts +3 -0
- package/template-design-pro/src/hooks/event/useClipboard.ts +14 -0
- package/template-design-pro/src/hooks/system/index.ts +5 -0
- package/template-design-pro/src/hooks/system/useDict.ts +62 -0
- package/template-design-pro/src/hooks/system/usePermissions.ts +39 -0
- package/template-design-pro/src/hooks/typings.ts +17 -0
- package/template-design-pro/src/layout/BasicLayout.vue +104 -0
- package/template-design-pro/src/layout/BlankLayout.vue +5 -0
- package/template-design-pro/src/layout/ContentView.vue +76 -0
- package/template-design-pro/src/layout/IframeView.vue +1 -0
- package/template-design-pro/src/layout/UserLayout.vue +7 -0
- package/template-design-pro/src/main.ts +34 -0
- package/template-design-pro/src/plugins/index.ts +3 -0
- package/template-design-pro/src/router/guard/index.ts +84 -0
- package/template-design-pro/src/router/guard/permissions.ts +73 -0
- package/template-design-pro/src/router/guard/stateGuard.ts +11 -0
- package/template-design-pro/src/router/helper/routeHelper.ts +244 -0
- package/template-design-pro/src/router/helper/utils.ts +19 -0
- package/template-design-pro/src/router/index.ts +30 -0
- package/template-design-pro/src/router/routes/index.ts +85 -0
- package/template-design-pro/src/router/routes/modules/workplace.ts +19 -0
- package/template-design-pro/src/services/common/index.ts +11 -0
- package/template-design-pro/src/services/controller/router.ts +10 -0
- package/template-design-pro/src/services/controller/user.ts +35 -0
- package/template-design-pro/src/services/system/dictData.ts +10 -0
- package/template-design-pro/src/services/system/notices.ts +9 -0
- package/template-design-pro/src/store/index.ts +32 -0
- package/template-design-pro/src/store/modules/dict.ts +27 -0
- package/template-design-pro/src/store/modules/permission.ts +19 -0
- package/template-design-pro/src/store/modules/routes.ts +110 -0
- package/template-design-pro/src/store/modules/settings.ts +102 -0
- package/template-design-pro/src/store/modules/tabsRouter.ts +73 -0
- package/template-design-pro/src/store/modules/user.ts +153 -0
- package/template-design-pro/src/utils/accessToken.ts +93 -0
- package/template-design-pro/src/utils/crypto.ts +39 -0
- package/template-design-pro/src/utils/env.ts +52 -0
- package/template-design-pro/src/utils/fetchFile.ts +79 -0
- package/template-design-pro/src/utils/index.ts +127 -0
- package/template-design-pro/src/utils/pageTitle.ts +17 -0
- package/template-design-pro/src/utils/request/XHR.ts +131 -0
- package/template-design-pro/src/utils/request/axiosCancel.ts +60 -0
- package/template-design-pro/src/utils/request/checkStatus.ts +26 -0
- package/template-design-pro/src/utils/request/index.ts +145 -0
- package/template-design-pro/src/utils/request/typings.ts +114 -0
- package/template-design-pro/src/utils/storage.ts +194 -0
- package/template-design-pro/src/utils/uploadFile.ts +26 -0
- package/template-design-pro/src/utils/util.ts +278 -0
- package/template-design-pro/src/utils/validate.ts +221 -0
- package/template-design-pro/src/views/Iframe/index.vue +76 -0
- package/template-design-pro/src/views/MenuOne/index.vue +15 -0
- package/template-design-pro/src/views/MenuTwo/index.vue +13 -0
- package/template-design-pro/src/views/exception/403/index.vue +9 -0
- package/template-design-pro/src/views/exception/404/index.vue +9 -0
- package/template-design-pro/src/views/user/login/index.vue +110 -0
- package/template-design-pro/src/views/user/login/style.less +38 -0
- package/template-design-pro/stylelint.config.js +106 -0
- package/template-design-pro/tests/__mocks__/fileMock.ts +1 -0
- package/template-design-pro/tests/__mocks__/styleMock.ts +1 -0
- package/template-design-pro/tests/__mocks__/workerMock.ts +5 -0
- package/template-design-pro/tests/server/README.md +15 -0
- package/template-design-pro/tests/server/controller/FileController.ts +18 -0
- package/template-design-pro/tests/server/controller/UserController.ts +15 -0
- package/template-design-pro/tests/server/ecosystem.config.js +18 -0
- package/template-design-pro/tests/server/index.ts +63 -0
- package/template-design-pro/tests/server/nodemon.json +8 -0
- package/template-design-pro/tests/server/package.json +36 -0
- package/template-design-pro/tests/server/routes.ts +23 -0
- package/template-design-pro/tests/server/service/FileService.ts +54 -0
- package/template-design-pro/tests/server/service/UserService.ts +25 -0
- package/template-design-pro/tests/server/tsconfig.json +15 -0
- package/template-design-pro/tests/server/utils.ts +9 -0
- package/template-design-pro/tests/server/yarn.lock +2955 -0
- package/template-design-pro/tests/test.spec.ts +16 -0
- package/template-design-pro/tsconfig.json +47 -0
- package/template-design-pro/types/auto-imports.d.ts +61 -0
- package/template-design-pro/types/config.d.ts +100 -0
- package/template-design-pro/types/global.d.ts +103 -0
- package/template-design-pro/types/gx-components.d.ts +24 -0
- package/template-design-pro/types/index.d.ts +13 -0
- package/template-design-pro/types/mock.d.ts +23 -0
- package/template-design-pro/types/module.d.ts +16 -0
- package/template-design-pro/types/response.d.ts +15 -0
- package/template-design-pro/types/route.d.ts +89 -0
- package/template-design-pro/vite.config.ts +136 -0
- package/template-design-pro/yarn.lock +9697 -0
@@ -0,0 +1,153 @@
|
|
1
|
+
import { reactive, toRefs } from 'vue'
|
2
|
+
import { defineStore } from 'pinia'
|
3
|
+
import { message, notification } from 'ant-design-vue'
|
4
|
+
import config from '/config/config'
|
5
|
+
import { getUserInfo, login, logout } from '@/services/controller/user'
|
6
|
+
import { getAccessToken, removeAccessToken, setAccessToken } from '@/utils/accessToken'
|
7
|
+
import { timeFix } from '@/utils/util'
|
8
|
+
import { useStoreRoutes } from './routes'
|
9
|
+
import { useStorePermission } from './permission'
|
10
|
+
import { useStoreTabsRouter } from './tabsRouter'
|
11
|
+
|
12
|
+
const { tokenName } = config.defaultSettings
|
13
|
+
|
14
|
+
interface RolesInfo {
|
15
|
+
roleId: number;
|
16
|
+
roleKey: string;
|
17
|
+
roleName: string;
|
18
|
+
status: string;
|
19
|
+
}
|
20
|
+
|
21
|
+
export interface UserInfo {
|
22
|
+
admin?: boolean;
|
23
|
+
userId?: number;
|
24
|
+
roles?: RolesInfo[];
|
25
|
+
roleIds?: number[];
|
26
|
+
userName?: string;
|
27
|
+
nickName?: string;
|
28
|
+
avatar?: string;
|
29
|
+
loginDate?: string;
|
30
|
+
}
|
31
|
+
|
32
|
+
export interface UserState {
|
33
|
+
accessToken: string;
|
34
|
+
userInfo: UserInfo;
|
35
|
+
userName: string;
|
36
|
+
loginName: string;
|
37
|
+
avatar: string;
|
38
|
+
}
|
39
|
+
|
40
|
+
export const useStoreUser = defineStore('user', () => {
|
41
|
+
const routes = useStoreRoutes()
|
42
|
+
const auth = useStorePermission()
|
43
|
+
const tabsRouter = useStoreTabsRouter()
|
44
|
+
|
45
|
+
const state = reactive({
|
46
|
+
accessToken: getAccessToken(),
|
47
|
+
userInfo: {},
|
48
|
+
userName: '',
|
49
|
+
loginName: '',
|
50
|
+
avatar: ''
|
51
|
+
} as UserState)
|
52
|
+
|
53
|
+
/**
|
54
|
+
* @Author gx12358
|
55
|
+
* @DateTime 2022/1/11
|
56
|
+
* @lastTime 2022/1/11
|
57
|
+
* @description 登录拦截放行时,设置虚拟角色
|
58
|
+
*/
|
59
|
+
const setVirtualRoles = () => {
|
60
|
+
auth.changeValue('admin', true)
|
61
|
+
state.avatar = 'https://i.gtimg.cn/club/item/face/img/2/15922_100.gif'
|
62
|
+
state.userName = 'admin(未开启登录拦截)'
|
63
|
+
return true
|
64
|
+
}
|
65
|
+
|
66
|
+
/**
|
67
|
+
* @Author gx12358
|
68
|
+
* @DateTime 2022/1/11
|
69
|
+
* @lastTime 2022/1/11
|
70
|
+
* @description 登录
|
71
|
+
*/
|
72
|
+
const userLogin = async (params) => {
|
73
|
+
const response: any = await login(params)
|
74
|
+
const accessToken = response?.data?.[tokenName]
|
75
|
+
if (accessToken) {
|
76
|
+
const expires_in = response?.data?.expires_in
|
77
|
+
state.accessToken = accessToken
|
78
|
+
setAccessToken(accessToken, expires_in ? expires_in * 60 * 1000 : 0)
|
79
|
+
return true
|
80
|
+
}
|
81
|
+
return false
|
82
|
+
}
|
83
|
+
|
84
|
+
/**
|
85
|
+
* @Author gx12358
|
86
|
+
* @DateTime 2022/1/11
|
87
|
+
* @lastTime 2022/1/11
|
88
|
+
* @description 获取用户信息
|
89
|
+
*/
|
90
|
+
const queryUserInfo = async () => {
|
91
|
+
const response: any = await getUserInfo()
|
92
|
+
const { roles, user, permissions } = response
|
93
|
+
if (!user || Object.keys(user).length === 0) {
|
94
|
+
message.error(`验证失败,请重新登录...`)
|
95
|
+
return false
|
96
|
+
}
|
97
|
+
const { userName, avatar, nickName } = user as UserInfo
|
98
|
+
if (userName && roles && Array.isArray(roles)) {
|
99
|
+
auth.changeValue('role', roles)
|
100
|
+
auth.changeValue('ability', permissions)
|
101
|
+
state.userName = userName
|
102
|
+
state.loginName = nickName
|
103
|
+
state.avatar = avatar
|
104
|
+
state.userInfo = user
|
105
|
+
notification.success({
|
106
|
+
message: `欢迎登录${userName}`,
|
107
|
+
description: `${timeFix()}!`
|
108
|
+
})
|
109
|
+
} else {
|
110
|
+
message.error('用户信息接口异常')
|
111
|
+
return false
|
112
|
+
}
|
113
|
+
return true
|
114
|
+
}
|
115
|
+
|
116
|
+
const updateUserInfo = (params: UserInfo) => {
|
117
|
+
Object.assign(state.userInfo, { ...params })
|
118
|
+
}
|
119
|
+
|
120
|
+
/**
|
121
|
+
* @Author gx12358
|
122
|
+
* @DateTime 2022/5/15
|
123
|
+
* @lastTime 2022/5/15
|
124
|
+
* @description 用户退出登录
|
125
|
+
*/
|
126
|
+
const userLogut = async () => {
|
127
|
+
await logout({
|
128
|
+
userName: state.userName
|
129
|
+
})
|
130
|
+
resetPermissions()
|
131
|
+
}
|
132
|
+
|
133
|
+
const resetPermissions = () => {
|
134
|
+
state.accessToken = ''
|
135
|
+
setAccessToken('')
|
136
|
+
auth.changeValue('admin', false)
|
137
|
+
auth.changeValue('role', [])
|
138
|
+
auth.changeValue('ability', [])
|
139
|
+
routes.resetRoute()
|
140
|
+
tabsRouter.blankingTabs()
|
141
|
+
removeAccessToken()
|
142
|
+
}
|
143
|
+
|
144
|
+
return {
|
145
|
+
...toRefs(state),
|
146
|
+
userLogin,
|
147
|
+
userLogut,
|
148
|
+
queryUserInfo,
|
149
|
+
updateUserInfo,
|
150
|
+
setVirtualRoles,
|
151
|
+
resetPermissions
|
152
|
+
}
|
153
|
+
})
|
@@ -0,0 +1,93 @@
|
|
1
|
+
import config from '/config/config'
|
2
|
+
import {
|
3
|
+
setStorage,
|
4
|
+
getStorage,
|
5
|
+
removeStorage,
|
6
|
+
getCookie,
|
7
|
+
setCookie,
|
8
|
+
delCookie
|
9
|
+
} from '@/utils/storage'
|
10
|
+
|
11
|
+
const { storage, tokenTableName } = config.defaultSettings
|
12
|
+
|
13
|
+
/**
|
14
|
+
* @Author gx12358
|
15
|
+
* @DateTime 2021/12/27
|
16
|
+
* @lastTime 2021/12/27
|
17
|
+
* @description 获取accessToken
|
18
|
+
*/
|
19
|
+
export function getAccessToken() {
|
20
|
+
if (storage) {
|
21
|
+
if ('localStorage' === storage) {
|
22
|
+
return getStorage({ key: tokenTableName })
|
23
|
+
} else if ('sessionStorage' === storage) {
|
24
|
+
return getStorage({ key: tokenTableName, type: 'session' })
|
25
|
+
} else if ('cookie' === storage) {
|
26
|
+
return getCookie(tokenTableName)
|
27
|
+
} else {
|
28
|
+
return getStorage({ key: tokenTableName })
|
29
|
+
}
|
30
|
+
} else {
|
31
|
+
return getStorage({ key: tokenTableName })
|
32
|
+
}
|
33
|
+
}
|
34
|
+
|
35
|
+
/**
|
36
|
+
* @author gx12358 2539306317@qq.com
|
37
|
+
* @description 存储accessToken
|
38
|
+
* @param accessToken
|
39
|
+
* @returns {void|*}
|
40
|
+
*/
|
41
|
+
export function setAccessToken(accessToken: string, expired?: number) {
|
42
|
+
if (storage) {
|
43
|
+
if ('localStorage' === storage) {
|
44
|
+
return setStorage({
|
45
|
+
key: tokenTableName,
|
46
|
+
value: accessToken,
|
47
|
+
expired
|
48
|
+
})
|
49
|
+
} else if ('sessionStorage' === storage) {
|
50
|
+
return setStorage({
|
51
|
+
key: tokenTableName,
|
52
|
+
value: accessToken,
|
53
|
+
expired,
|
54
|
+
type: 'session'
|
55
|
+
})
|
56
|
+
} else if ('cookie' === storage) {
|
57
|
+
return setCookie(tokenTableName, accessToken, expired)
|
58
|
+
} else {
|
59
|
+
return setStorage({
|
60
|
+
key: tokenTableName,
|
61
|
+
value: accessToken,
|
62
|
+
expired
|
63
|
+
})
|
64
|
+
}
|
65
|
+
} else {
|
66
|
+
return setStorage({
|
67
|
+
key: tokenTableName,
|
68
|
+
value: accessToken,
|
69
|
+
expired
|
70
|
+
})
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
/**
|
75
|
+
* @author gx12358 2539306317@qq.com
|
76
|
+
* @description 移除accessToken
|
77
|
+
* @returns {void|Promise<void>}
|
78
|
+
*/
|
79
|
+
export function removeAccessToken() {
|
80
|
+
if (storage) {
|
81
|
+
if ('localStorage' === storage) {
|
82
|
+
return removeStorage(tokenTableName)
|
83
|
+
} else if ('sessionStorage' === storage) {
|
84
|
+
return removeStorage(tokenTableName, 'session')
|
85
|
+
} else if ('cookie' === storage) {
|
86
|
+
return delCookie(tokenTableName)
|
87
|
+
} else {
|
88
|
+
return removeStorage(tokenTableName)
|
89
|
+
}
|
90
|
+
} else {
|
91
|
+
return removeStorage(tokenTableName)
|
92
|
+
}
|
93
|
+
}
|
@@ -0,0 +1,39 @@
|
|
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 { isJSONStr } from '@/utils/validate'
|
6
|
+
import { isObject, isArray } from '@gx-design-vue/pro-utils'
|
7
|
+
|
8
|
+
const key = '1234123412ABCDEF' //十六位十六进制数作为密钥
|
9
|
+
|
10
|
+
//加密方法
|
11
|
+
export function Encrypt(word) {
|
12
|
+
let str: string | object = word
|
13
|
+
if (isObject(word) || isArray(word)) {
|
14
|
+
str = JSON.stringify(word)
|
15
|
+
}
|
16
|
+
const keyHex = CryptoJS.enc.Utf8.parse(key)
|
17
|
+
const ivHex = CryptoJS.enc.Utf8.parse(key)
|
18
|
+
const encrypted = CryptoJS.DES.encrypt(str, keyHex, {
|
19
|
+
iv: ivHex,
|
20
|
+
mode: CryptoJS.mode.CBC,
|
21
|
+
padding: CryptoJS.pad.Pkcs7
|
22
|
+
})
|
23
|
+
return CryptoJS.enc.Base64.stringify(encrypted.ciphertext)
|
24
|
+
}
|
25
|
+
|
26
|
+
//解密方法
|
27
|
+
export function Decrypt(word) {
|
28
|
+
const keyHex = CryptoJS.enc.Utf8.parse(key)
|
29
|
+
const ivHex = CryptoJS.enc.Utf8.parse(key)
|
30
|
+
const decrypted = CryptoJS.DES.decrypt({
|
31
|
+
ciphertext: CryptoJS.enc.Base64.parse(word)
|
32
|
+
}, keyHex, {
|
33
|
+
iv: ivHex,
|
34
|
+
mode: CryptoJS.mode.CBC,
|
35
|
+
padding: CryptoJS.pad.Pkcs7
|
36
|
+
})
|
37
|
+
const decryptedStr = decrypted.toString(CryptoJS.enc.Utf8)
|
38
|
+
return isJSONStr(decryptedStr.toString()) ? JSON.parse(decryptedStr.toString()) : decryptedStr.toString()
|
39
|
+
}
|
@@ -0,0 +1,52 @@
|
|
1
|
+
/**
|
2
|
+
* @Author gx12358
|
3
|
+
* @DateTime 2022/4/1
|
4
|
+
* @lastTime 2022/4/1
|
5
|
+
* @description 环境:开发
|
6
|
+
*/
|
7
|
+
export function isDev(): boolean {
|
8
|
+
const DEV = typeViteEnv('VITE_USE_MODE') === 'development'
|
9
|
+
return DEV
|
10
|
+
}
|
11
|
+
|
12
|
+
/**
|
13
|
+
* @Author gx12358
|
14
|
+
* @DateTime 2022/4/1
|
15
|
+
* @lastTime 2022/4/1
|
16
|
+
* @description 环境:测试
|
17
|
+
*/
|
18
|
+
export function isTest(): boolean {
|
19
|
+
const PRO = typeViteEnv('VITE_USE_MODE') === 'test'
|
20
|
+
return PRO
|
21
|
+
}
|
22
|
+
|
23
|
+
/**
|
24
|
+
* @Author gx12358
|
25
|
+
* @DateTime 2022/4/1
|
26
|
+
* @lastTime 2022/4/1
|
27
|
+
* @description 环境:正式
|
28
|
+
*/
|
29
|
+
export function isPro(): boolean {
|
30
|
+
return typeViteEnv('VITE_USE_MODE') === 'production'
|
31
|
+
}
|
32
|
+
|
33
|
+
/**
|
34
|
+
* @Author gx12358
|
35
|
+
* @DateTime 2022/4/1
|
36
|
+
* @lastTime 2022/4/1
|
37
|
+
* @description 环境:测试、正式
|
38
|
+
*/
|
39
|
+
export function isBuild(): boolean {
|
40
|
+
return typeViteEnv('VITE_USE_MODE') !== 'development'
|
41
|
+
}
|
42
|
+
|
43
|
+
export function typeViteEnv(key: ViteEnvKey) {
|
44
|
+
let value = import.meta.env[key]
|
45
|
+
if (value) {
|
46
|
+
value = (value as string).replace(/\\n/g, '\n')
|
47
|
+
|
48
|
+
value = value === 'true' ? true : value === 'false' ? false : value
|
49
|
+
}
|
50
|
+
|
51
|
+
return value
|
52
|
+
}
|
@@ -0,0 +1,79 @@
|
|
1
|
+
import type { Method } from 'axios'
|
2
|
+
import { message } from 'ant-design-vue'
|
3
|
+
import config from '/config/config'
|
4
|
+
import { useStoreUser } from '@gx-vuex'
|
5
|
+
import { tansParams } from '@/utils/util'
|
6
|
+
|
7
|
+
const { tokenName } = config.defaultSettings
|
8
|
+
|
9
|
+
export type 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) options.url = `${import.meta.env.VITE_BASE_URL}${options.url}`
|
38
|
+
if (user.accessToken && !options.direct)
|
39
|
+
opations.headers[tokenName] = `${user.accessToken}`
|
40
|
+
if (options.params) {
|
41
|
+
let url = options.url + '?' + tansParams(options.params)
|
42
|
+
url = url.slice(0, -1)
|
43
|
+
options.url = url
|
44
|
+
}
|
45
|
+
if (options.method === 'post' && options.data) {
|
46
|
+
opations.body = JSON.stringify(options.data)
|
47
|
+
}
|
48
|
+
const response = await fetch(options.url, opations)
|
49
|
+
const fileName = options.name
|
50
|
+
? options.name
|
51
|
+
: response.headers.get('content-disposition')
|
52
|
+
? response.headers.get('content-disposition').split(';')[1].split('=')[1]
|
53
|
+
: ''
|
54
|
+
const blobResponse = await response.blob()
|
55
|
+
if (blobResponse) {
|
56
|
+
const a = window.document.createElement('a')
|
57
|
+
const downUrl = window.URL.createObjectURL(blobResponse)
|
58
|
+
if (options.read) return downUrl
|
59
|
+
a.href = downUrl
|
60
|
+
a.download = `${decodeURI(fileName)}`
|
61
|
+
a.click()
|
62
|
+
if (options.showTip) {
|
63
|
+
message.success({
|
64
|
+
content: `下载成功`,
|
65
|
+
key: 'updatable'
|
66
|
+
})
|
67
|
+
}
|
68
|
+
window.URL.revokeObjectURL(downUrl)
|
69
|
+
return true
|
70
|
+
} else {
|
71
|
+
if (options.showTip) {
|
72
|
+
message.success({
|
73
|
+
content: `下载失败`,
|
74
|
+
key: 'updatable'
|
75
|
+
})
|
76
|
+
}
|
77
|
+
return false
|
78
|
+
}
|
79
|
+
}
|
@@ -0,0 +1,127 @@
|
|
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(
|
17
|
+
'{"' +
|
18
|
+
decodeURIComponent(search)
|
19
|
+
.replace(/"/g, '\\"')
|
20
|
+
.replace(/&/g, '","')
|
21
|
+
.replace(/=/g, '":"')
|
22
|
+
.replace(/\+/g, ' ') +
|
23
|
+
'"}'
|
24
|
+
)
|
25
|
+
}
|
26
|
+
|
27
|
+
/**
|
28
|
+
* @author gx12358 2539306317@qq.com
|
29
|
+
* @description 父子关系的数组转换成树形结构数据
|
30
|
+
* @param data
|
31
|
+
* @returns {*}
|
32
|
+
*/
|
33
|
+
export function translateDataToTree(data) {
|
34
|
+
const parent = data.filter(
|
35
|
+
(value) => value.parentId === 'undefined' || value.parentId == null
|
36
|
+
)
|
37
|
+
const children = data.filter(
|
38
|
+
(value) => value.parentId !== 'undefined' && value.parentId != null
|
39
|
+
)
|
40
|
+
const translator = (parent, children) => {
|
41
|
+
parent.forEach((parent) => {
|
42
|
+
children.forEach((current, index) => {
|
43
|
+
if (current.parentId === parent.id) {
|
44
|
+
const temp = JSON.parse(JSON.stringify(children))
|
45
|
+
temp.splice(index, 1)
|
46
|
+
translator([ current ], temp)
|
47
|
+
typeof parent.children !== 'undefined'
|
48
|
+
? parent.children.push(current)
|
49
|
+
: (parent.children = [ current ])
|
50
|
+
}
|
51
|
+
})
|
52
|
+
})
|
53
|
+
}
|
54
|
+
translator(parent, children)
|
55
|
+
return parent
|
56
|
+
}
|
57
|
+
|
58
|
+
/**
|
59
|
+
* @author gx12358 2539306317@qq.com
|
60
|
+
* @description 树形结构数据转换成父子关系的数组
|
61
|
+
* @param data
|
62
|
+
* @returns {[]}
|
63
|
+
*/
|
64
|
+
export function translateTreeToData(data) {
|
65
|
+
const result: any[] = []
|
66
|
+
data.forEach((item) => {
|
67
|
+
const loop = (data) => {
|
68
|
+
result.push({
|
69
|
+
id: data.id,
|
70
|
+
name: data.name,
|
71
|
+
parentId: data.parentId
|
72
|
+
})
|
73
|
+
const child = data.children
|
74
|
+
if (child) {
|
75
|
+
for (let i = 0; i < child.length; i++) {
|
76
|
+
loop(child[i])
|
77
|
+
}
|
78
|
+
}
|
79
|
+
}
|
80
|
+
loop(item)
|
81
|
+
})
|
82
|
+
return result
|
83
|
+
}
|
84
|
+
|
85
|
+
/**
|
86
|
+
* @author gx12358 2539306317@qq.com
|
87
|
+
* @description 10位时间戳转换
|
88
|
+
* @param time
|
89
|
+
* @returns {string}
|
90
|
+
*/
|
91
|
+
export function tenBitTimestamp(time) {
|
92
|
+
const date = new Date(time * 1000)
|
93
|
+
const y = date.getFullYear()
|
94
|
+
let m: any = date.getMonth() + 1
|
95
|
+
m = m < 10 ? '' + m : m
|
96
|
+
let d: any = date.getDate()
|
97
|
+
d = d < 10 ? '' + d : d
|
98
|
+
let h: any = date.getHours()
|
99
|
+
h = h < 10 ? '0' + h : h
|
100
|
+
let minute: any = date.getMinutes()
|
101
|
+
let second: any = date.getSeconds()
|
102
|
+
minute = minute < 10 ? '0' + minute : minute
|
103
|
+
second = second < 10 ? '0' + second : second
|
104
|
+
return y + '年' + m + '月' + d + '日 ' + h + ':' + minute + ':' + second //组合
|
105
|
+
}
|
106
|
+
|
107
|
+
/**
|
108
|
+
* @author gx12358 2539306317@qq.com
|
109
|
+
* @description 13位时间戳转换
|
110
|
+
* @param time
|
111
|
+
* @returns {string}
|
112
|
+
*/
|
113
|
+
export function thirteenBitTimestamp(time) {
|
114
|
+
const date = new Date(time / 1)
|
115
|
+
const y = date.getFullYear()
|
116
|
+
let m: any = date.getMonth() + 1
|
117
|
+
m = m < 10 ? '' + m : m
|
118
|
+
let d: any = date.getDate()
|
119
|
+
d = d < 10 ? '' + d : d
|
120
|
+
let h: any = date.getHours()
|
121
|
+
h = h < 10 ? '0' + h : h
|
122
|
+
let minute: any = date.getMinutes()
|
123
|
+
let second: any = date.getSeconds()
|
124
|
+
minute = minute < 10 ? '0' + minute : minute
|
125
|
+
second = second < 10 ? '0' + second : second
|
126
|
+
return y + '年' + m + '月' + d + '日 ' + h + ':' + minute + ':' + second //组合
|
127
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import config from '/config/config'
|
2
|
+
|
3
|
+
const { title, titleReverse, titleSeparator } = config.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: any = []
|
13
|
+
if (pageTitle) newTitles.push(pageTitle)
|
14
|
+
if (title) newTitles.push(title)
|
15
|
+
if (titleReverse) newTitles = newTitles.reverse()
|
16
|
+
return newTitles.join(titleSeparator)
|
17
|
+
}
|
@@ -0,0 +1,131 @@
|
|
1
|
+
import type { AxiosResponse, AxiosError } from 'axios'
|
2
|
+
import axios from 'axios'
|
3
|
+
import { cloneDeep } from 'lodash-unified'
|
4
|
+
import qs from 'qs'
|
5
|
+
import { isFunction } from '@gx-design-vue/pro-utils'
|
6
|
+
import type { GAxiosInstance, GAxiosOptions } from './typings'
|
7
|
+
import { ContentTypeEnum, RequestEnum } from './typings'
|
8
|
+
import { AxiosCanceler } from './axiosCancel'
|
9
|
+
|
10
|
+
/**
|
11
|
+
* @Author gx12358
|
12
|
+
* @DateTime 2023/1/6
|
13
|
+
* @lastTime 2023/1/6
|
14
|
+
* @description 重新定义axios
|
15
|
+
*/
|
16
|
+
export class GAxios {
|
17
|
+
private axiosInstance: GAxiosInstance
|
18
|
+
private readonly options: GAxiosOptions
|
19
|
+
|
20
|
+
constructor(options: GAxiosOptions) {
|
21
|
+
this.options = options
|
22
|
+
this.axiosInstance = axios.create(options)
|
23
|
+
this.setupInterceptors()
|
24
|
+
}
|
25
|
+
|
26
|
+
/**
|
27
|
+
* @description: Interceptor configuration 拦截器配置
|
28
|
+
*/
|
29
|
+
private setupInterceptors() {
|
30
|
+
const {
|
31
|
+
requestInterceptors,
|
32
|
+
requestInterceptorsCatch,
|
33
|
+
responseInterceptors,
|
34
|
+
responseInterceptorsCatch
|
35
|
+
} = this.options
|
36
|
+
|
37
|
+
const axiosCanceler = new AxiosCanceler()
|
38
|
+
|
39
|
+
this.axiosInstance.interceptors.request.use((config: GAxiosOptions) => {
|
40
|
+
const { ignoreCancelToken } = config
|
41
|
+
const ignoreCancel =
|
42
|
+
ignoreCancelToken !== undefined
|
43
|
+
? ignoreCancelToken
|
44
|
+
: this.options?.ignoreCancelToken
|
45
|
+
|
46
|
+
!ignoreCancel && axiosCanceler.addPending(config)
|
47
|
+
if (requestInterceptors && isFunction(requestInterceptors)) {
|
48
|
+
config = requestInterceptors(config)
|
49
|
+
}
|
50
|
+
return config
|
51
|
+
}, undefined)
|
52
|
+
|
53
|
+
// Request interceptor error capture
|
54
|
+
requestInterceptorsCatch &&
|
55
|
+
isFunction(requestInterceptorsCatch) &&
|
56
|
+
this.axiosInstance.interceptors.request.use(undefined, requestInterceptorsCatch)
|
57
|
+
|
58
|
+
// Response result interceptor processing
|
59
|
+
this.axiosInstance.interceptors.response.use((res: AxiosResponse) => {
|
60
|
+
res && axiosCanceler.removePending(res.config)
|
61
|
+
if (responseInterceptors && isFunction(responseInterceptors)) {
|
62
|
+
return responseInterceptors(res)
|
63
|
+
}
|
64
|
+
return res
|
65
|
+
}, undefined)
|
66
|
+
|
67
|
+
// Response result interceptor error capture
|
68
|
+
responseInterceptorsCatch &&
|
69
|
+
isFunction(responseInterceptorsCatch) &&
|
70
|
+
this.axiosInstance.interceptors.response.use(undefined, (error) => {
|
71
|
+
return responseInterceptorsCatch(this.axiosInstance, error)
|
72
|
+
})
|
73
|
+
}
|
74
|
+
|
75
|
+
// support form-data
|
76
|
+
supportFormData(config: GAxiosOptions) {
|
77
|
+
const headers = config.headers || this.options.headers
|
78
|
+
const contentType = headers?.['Content-Type'] || headers?.['content-type']
|
79
|
+
|
80
|
+
if (
|
81
|
+
contentType !== ContentTypeEnum.FORM_URLENCODED ||
|
82
|
+
!Reflect.has(config, 'data') ||
|
83
|
+
config.method?.toUpperCase() === RequestEnum.GET
|
84
|
+
) {
|
85
|
+
return config
|
86
|
+
}
|
87
|
+
|
88
|
+
return {
|
89
|
+
...config,
|
90
|
+
data: qs.stringify(config.data, { arrayFormat: 'brackets' })
|
91
|
+
}
|
92
|
+
}
|
93
|
+
|
94
|
+
request<T = ResponseResult | boolean>(config: GAxiosOptions): Promise<T> {
|
95
|
+
let conf: GAxiosOptions = cloneDeep(config)
|
96
|
+
|
97
|
+
const opt: GAxiosOptions = Object.assign({}, this.options, conf)
|
98
|
+
|
99
|
+
const { beforeRequestHook, requestCatchHook, transformResponseHook } = opt
|
100
|
+
if (beforeRequestHook && isFunction(beforeRequestHook)) {
|
101
|
+
conf = beforeRequestHook(opt)
|
102
|
+
}
|
103
|
+
|
104
|
+
conf = this.supportFormData(opt)
|
105
|
+
|
106
|
+
return new Promise((resolve) => {
|
107
|
+
this.axiosInstance
|
108
|
+
.request<any, AxiosResponse>(conf)
|
109
|
+
.then((res: AxiosResponse) => {
|
110
|
+
if (transformResponseHook && isFunction(transformResponseHook)) {
|
111
|
+
try {
|
112
|
+
const ret = transformResponseHook(res, config)
|
113
|
+
resolve(ret)
|
114
|
+
} catch (err) {
|
115
|
+
resolve(false as any)
|
116
|
+
return
|
117
|
+
}
|
118
|
+
return
|
119
|
+
}
|
120
|
+
resolve(res as unknown as Promise<T>)
|
121
|
+
})
|
122
|
+
.catch((e: Error | AxiosError) => {
|
123
|
+
if (requestCatchHook && isFunction(requestCatchHook)) {
|
124
|
+
resolve(requestCatchHook(e) as any)
|
125
|
+
return
|
126
|
+
}
|
127
|
+
resolve(false as any)
|
128
|
+
})
|
129
|
+
})
|
130
|
+
}
|
131
|
+
}
|