@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.
- 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 -231
- 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,42 +0,0 @@
|
|
1
|
-
import request from '@/utils/request'
|
2
|
-
|
3
|
-
export function getUserInfo() {
|
4
|
-
return request({
|
5
|
-
url: '/user/queryUserDetail',
|
6
|
-
method: 'get',
|
7
|
-
isMock: true
|
8
|
-
})
|
9
|
-
}
|
10
|
-
|
11
|
-
export function getUserList() {
|
12
|
-
return request({
|
13
|
-
url: '/user/account/list',
|
14
|
-
method: 'get',
|
15
|
-
isMock: true
|
16
|
-
})
|
17
|
-
}
|
18
|
-
|
19
|
-
export function getAccountGroupList() {
|
20
|
-
return request({
|
21
|
-
url: '/user/account/group',
|
22
|
-
method: 'get',
|
23
|
-
isMock: true
|
24
|
-
})
|
25
|
-
}
|
26
|
-
|
27
|
-
export function getAccountCount() {
|
28
|
-
return request({
|
29
|
-
url: '/user/account/count',
|
30
|
-
method: 'get',
|
31
|
-
isMock: true
|
32
|
-
})
|
33
|
-
}
|
34
|
-
|
35
|
-
export function updateUserDetails(data) {
|
36
|
-
return request({
|
37
|
-
url: '/user/account/update',
|
38
|
-
method: 'post',
|
39
|
-
data,
|
40
|
-
isMock: true
|
41
|
-
})
|
42
|
-
}
|
@@ -1,28 +0,0 @@
|
|
1
|
-
import request from '@/utils/request'
|
2
|
-
|
3
|
-
export * from './account'
|
4
|
-
|
5
|
-
export function login(data) {
|
6
|
-
return request({
|
7
|
-
url: '/user/login',
|
8
|
-
method: 'post',
|
9
|
-
data,
|
10
|
-
isMock: true
|
11
|
-
})
|
12
|
-
}
|
13
|
-
|
14
|
-
export function logout() {
|
15
|
-
return request({
|
16
|
-
url: '/user/logout',
|
17
|
-
method: 'get',
|
18
|
-
isMock: true
|
19
|
-
})
|
20
|
-
}
|
21
|
-
|
22
|
-
export function register() {
|
23
|
-
return request({
|
24
|
-
url: '/user/register',
|
25
|
-
method: 'post',
|
26
|
-
isMock: true
|
27
|
-
})
|
28
|
-
}
|
@@ -1,32 +0,0 @@
|
|
1
|
-
import type { App } from 'vue'
|
2
|
-
import { createPinia } from 'pinia'
|
3
|
-
import { useStoreGlobal } from './modules/global'
|
4
|
-
import { useStoreDict } from './modules/dict'
|
5
|
-
import { useStoreUser } from './modules/user'
|
6
|
-
import { useStoreRoutes } from './modules/routes'
|
7
|
-
import { useStorePermission } from './modules/permission'
|
8
|
-
import { useStoreTabsRouter } from './modules/tabsRouter'
|
9
|
-
|
10
|
-
export {
|
11
|
-
useStoreGlobal,
|
12
|
-
useStoreDict,
|
13
|
-
useStoreUser,
|
14
|
-
useStoreRoutes,
|
15
|
-
useStorePermission,
|
16
|
-
useStoreTabsRouter
|
17
|
-
}
|
18
|
-
|
19
|
-
export function useStore() {
|
20
|
-
return {
|
21
|
-
user: useStoreUser(),
|
22
|
-
dict: useStoreDict(),
|
23
|
-
global: useStoreGlobal(),
|
24
|
-
routes: useStoreRoutes(),
|
25
|
-
permission: useStorePermission(),
|
26
|
-
tabsRouter: useStoreTabsRouter()
|
27
|
-
}
|
28
|
-
}
|
29
|
-
|
30
|
-
export function setupStore(app: App<Element>) {
|
31
|
-
app.use(createPinia())
|
32
|
-
}
|
@@ -1,28 +0,0 @@
|
|
1
|
-
import { reactive, toRefs } from 'vue'
|
2
|
-
import { defineStore } from 'pinia'
|
3
|
-
import type { DictRecord, DictType } from '@gx-mock/config/dict'
|
4
|
-
|
5
|
-
/**
|
6
|
-
* @Author gx12358
|
7
|
-
* @DateTime 2022/1/11
|
8
|
-
* @lastTime 2022/1/11
|
9
|
-
* @description store-dict 数字字典
|
10
|
-
*/
|
11
|
-
export interface DictState {
|
12
|
-
data: Partial<Record<DictType, DictRecord[]>>;
|
13
|
-
}
|
14
|
-
|
15
|
-
export const useStoreDict = defineStore('dict', () => {
|
16
|
-
const state = reactive<DictState>({
|
17
|
-
data: {}
|
18
|
-
})
|
19
|
-
|
20
|
-
const setDictData = (type, value) => {
|
21
|
-
state.data[type] = value
|
22
|
-
}
|
23
|
-
|
24
|
-
return {
|
25
|
-
...toRefs(state),
|
26
|
-
setDictData
|
27
|
-
}
|
28
|
-
})
|
@@ -1,42 +0,0 @@
|
|
1
|
-
import { reactive } from 'vue'
|
2
|
-
import { defineStore } from 'pinia'
|
3
|
-
import type { ThemeConfig } from '@gx-design-vue/pro-provider'
|
4
|
-
import { themeConfig as proThemeConfig } from '@gx-design-vue/pro-provider'
|
5
|
-
import type { BasicLayoutProps } from '@gx-design-vue/pro-layout'
|
6
|
-
import { handleThemeConfig } from '@gx-design-vue/pro-layout'
|
7
|
-
import { defaultSettings, theme } from '@gx-config'
|
8
|
-
import logo from '@/assets/logo.png'
|
9
|
-
|
10
|
-
const layoutThemeConfig = {
|
11
|
-
...proThemeConfig,
|
12
|
-
title: defaultSettings.title
|
13
|
-
} as ThemeConfig
|
14
|
-
|
15
|
-
/**
|
16
|
-
* @Author gx12358
|
17
|
-
* @DateTime 2022/1/11
|
18
|
-
* @lastTime 2022/1/11
|
19
|
-
* @description store-global 全局属性
|
20
|
-
*/
|
21
|
-
export interface GlobalState {
|
22
|
-
globalLayout: BasicLayoutProps;
|
23
|
-
keepAlive: boolean;
|
24
|
-
showProgressBar: boolean;
|
25
|
-
disabledScrollTop: boolean;
|
26
|
-
}
|
27
|
-
|
28
|
-
export const useStoreGlobal = defineStore('global', () => {
|
29
|
-
const state = reactive<GlobalState>({
|
30
|
-
keepAlive: true,
|
31
|
-
showProgressBar: true,
|
32
|
-
disabledScrollTop: false,
|
33
|
-
globalLayout: {
|
34
|
-
logo,
|
35
|
-
...handleThemeConfig({ ...layoutThemeConfig, primaryColor: theme.colorPrimary })
|
36
|
-
}
|
37
|
-
})
|
38
|
-
|
39
|
-
return {
|
40
|
-
...toRefs(state)
|
41
|
-
}
|
42
|
-
})
|
@@ -1,19 +0,0 @@
|
|
1
|
-
import { reactive, toRefs } from 'vue'
|
2
|
-
import { defineStore } from 'pinia'
|
3
|
-
|
4
|
-
export const useStorePermission = defineStore('permission', () => {
|
5
|
-
const state = reactive({
|
6
|
-
admin: false,
|
7
|
-
role: [],
|
8
|
-
ability: []
|
9
|
-
})
|
10
|
-
|
11
|
-
const changeValue = (type: string, value: any) => {
|
12
|
-
state[type] = value
|
13
|
-
}
|
14
|
-
|
15
|
-
return {
|
16
|
-
...toRefs(state),
|
17
|
-
changeValue
|
18
|
-
}
|
19
|
-
})
|
@@ -1,113 +0,0 @@
|
|
1
|
-
import { reactive, toRefs } from 'vue'
|
2
|
-
import { defineStore } from 'pinia'
|
3
|
-
import type { AppRouteModule, MenuDataItem } from '@gx-design-vue/pro-layout'
|
4
|
-
import { asyncRoutes, localRoutes } from '@/router/routes'
|
5
|
-
import { getMenuList } from '@/services/systemCenter'
|
6
|
-
import { generator, getRootMenu } from '@/router/helper/routeHelper'
|
7
|
-
import { getFirstLastChild } from '@/router/helper/utils'
|
8
|
-
import { getLevelData } from '@gx-design-vue/pro-utils'
|
9
|
-
|
10
|
-
/**
|
11
|
-
* @Author gx12358
|
12
|
-
* @DateTime 2022/1/11
|
13
|
-
* @lastTime 2022/1/11
|
14
|
-
* @description store-routes 路由
|
15
|
-
*/
|
16
|
-
export interface RoutesState {
|
17
|
-
routes: AppRouteModule[];
|
18
|
-
routerLoadList: string[];
|
19
|
-
meunLoading: boolean;
|
20
|
-
routerLoading: boolean;
|
21
|
-
}
|
22
|
-
|
23
|
-
type RouteStateKey = keyof RoutesState
|
24
|
-
|
25
|
-
export const useStoreRoutes = defineStore('routes', () => {
|
26
|
-
const state = reactive<RoutesState>({
|
27
|
-
routes: [],
|
28
|
-
routerLoadList: [],
|
29
|
-
meunLoading: false,
|
30
|
-
routerLoading: false
|
31
|
-
})
|
32
|
-
|
33
|
-
/**
|
34
|
-
* @Author gx12358
|
35
|
-
* @DateTime 2022/1/11
|
36
|
-
* @lastTime 2022/1/11
|
37
|
-
* @description intelligence(前端静态路由)模式设置路由
|
38
|
-
*/
|
39
|
-
const setRoutes = () => {
|
40
|
-
state.routes = localRoutes
|
41
|
-
return [ ...localRoutes ]
|
42
|
-
}
|
43
|
-
|
44
|
-
/**
|
45
|
-
* @Author gx12358
|
46
|
-
* @DateTime 2022/1/11
|
47
|
-
* @lastTime 2022/1/11
|
48
|
-
* @description all(后端动态路由)
|
49
|
-
*/
|
50
|
-
const setAllRoutes = async () => {
|
51
|
-
let routes: AppRouteModule[] = []
|
52
|
-
state.meunLoading = true
|
53
|
-
const response: ResponseResult<MenuDataItem[]> = await getMenuList()
|
54
|
-
if (response && (response?.data)?.length) {
|
55
|
-
const notFoundRouter: AppRouteModule = {
|
56
|
-
path: '/:path(.*)*',
|
57
|
-
redirect: '/exception/404',
|
58
|
-
hidden: true
|
59
|
-
}
|
60
|
-
const rootMenu = getRootMenu(response?.data || [])
|
61
|
-
const asyncRouteList = generator(rootMenu)
|
62
|
-
asyncRouteList[0].children = [ ...(asyncRouteList[0]?.children || []), ...asyncRoutes ]
|
63
|
-
const haveHomePage = getLevelData(asyncRouteList[0].children)
|
64
|
-
.find(item => item.meta ? item.meta.homePage === 1 : false)
|
65
|
-
asyncRouteList[0].redirect = haveHomePage ? haveHomePage.path : getFirstLastChild(asyncRouteList[0].children)
|
66
|
-
asyncRouteList.push(notFoundRouter)
|
67
|
-
routes = [ ...asyncRouteList ]
|
68
|
-
}
|
69
|
-
state.routes = routes
|
70
|
-
state.meunLoading = false
|
71
|
-
return routes
|
72
|
-
}
|
73
|
-
|
74
|
-
/**
|
75
|
-
* @Author gx12358
|
76
|
-
* @DateTime 2022/1/11
|
77
|
-
* @lastTime 2022/1/11
|
78
|
-
* @description 重置路由
|
79
|
-
*/
|
80
|
-
const resetRoute = () => {
|
81
|
-
state.routes = []
|
82
|
-
state.routerLoadList = []
|
83
|
-
}
|
84
|
-
|
85
|
-
/**
|
86
|
-
* @Author gx12358
|
87
|
-
* @DateTime 2022/1/11
|
88
|
-
* @lastTime 2022/1/11
|
89
|
-
* @description 添加路由记录
|
90
|
-
*/
|
91
|
-
const addRouterLoadList = (path) => {
|
92
|
-
state.routerLoadList.push(path)
|
93
|
-
}
|
94
|
-
|
95
|
-
/**
|
96
|
-
* @Author gx12358
|
97
|
-
* @DateTime 2022/1/11
|
98
|
-
* @lastTime 2022/1/11
|
99
|
-
* @description 修改state状态
|
100
|
-
*/
|
101
|
-
const setRouteState: (params: Partial<Record<RouteStateKey, RoutesState[RouteStateKey]>>) => void = (params) => {
|
102
|
-
Object.assign(state, params)
|
103
|
-
}
|
104
|
-
|
105
|
-
return {
|
106
|
-
...toRefs(state),
|
107
|
-
setRoutes,
|
108
|
-
setAllRoutes,
|
109
|
-
resetRoute,
|
110
|
-
addRouterLoadList,
|
111
|
-
setRouteState
|
112
|
-
}
|
113
|
-
})
|
@@ -1,76 +0,0 @@
|
|
1
|
-
import { reactive, toRefs } from 'vue'
|
2
|
-
import { defineStore } from 'pinia'
|
3
|
-
|
4
|
-
export interface TabsRouterState {
|
5
|
-
visitedRoutes: Recordable[];
|
6
|
-
}
|
7
|
-
|
8
|
-
export const useStoreTabsRouter = defineStore('tabsRouter', () => {
|
9
|
-
const state = reactive({
|
10
|
-
visitedRoutes: []
|
11
|
-
} as TabsRouterState)
|
12
|
-
|
13
|
-
const addVisitedRoute = (route) => {
|
14
|
-
const target = state.visitedRoutes.find(item => item.path === route.path)
|
15
|
-
if (target) {
|
16
|
-
if (route.fullPath !== target.fullPath)
|
17
|
-
Object.assign(target, route)
|
18
|
-
return
|
19
|
-
}
|
20
|
-
if (route.tagFixed) {
|
21
|
-
state.visitedRoutes.unshift(Object.assign({}, route))
|
22
|
-
} else {
|
23
|
-
state.visitedRoutes.push(Object.assign({}, route))
|
24
|
-
}
|
25
|
-
}
|
26
|
-
|
27
|
-
const delVisitedRoute = (route) => {
|
28
|
-
state.visitedRoutes.forEach((item, index) => {
|
29
|
-
if (item.path === route.path)
|
30
|
-
state.visitedRoutes.splice(index, 1)
|
31
|
-
})
|
32
|
-
}
|
33
|
-
|
34
|
-
const delOthersVisitedRoutes = (route) => {
|
35
|
-
state.visitedRoutes = state.visitedRoutes.filter(
|
36
|
-
item => item.meta.tagFixed || item.path === route.path
|
37
|
-
)
|
38
|
-
}
|
39
|
-
|
40
|
-
const delLeftVisitedRoutes = (route) => {
|
41
|
-
let index = state.visitedRoutes.length
|
42
|
-
state.visitedRoutes = state.visitedRoutes.filter((item) => {
|
43
|
-
if (item.name === route.name)
|
44
|
-
index = state.visitedRoutes.indexOf(item)
|
45
|
-
return item.meta.tagFixed || index <= state.visitedRoutes.indexOf(item)
|
46
|
-
})
|
47
|
-
}
|
48
|
-
|
49
|
-
const delRightVisitedRoutes = (route) => {
|
50
|
-
let index = state.visitedRoutes.length
|
51
|
-
state.visitedRoutes = state.visitedRoutes.filter((item) => {
|
52
|
-
if (item.name === route.name)
|
53
|
-
index = state.visitedRoutes.indexOf(item)
|
54
|
-
return item.meta.tagFixed || index >= state.visitedRoutes.indexOf(item)
|
55
|
-
})
|
56
|
-
}
|
57
|
-
|
58
|
-
const delAllVisitedRoutes = () => {
|
59
|
-
state.visitedRoutes = state.visitedRoutes.filter(item => item.meta.tagFixed)
|
60
|
-
}
|
61
|
-
|
62
|
-
const blankingTabs = () => {
|
63
|
-
state.visitedRoutes = []
|
64
|
-
}
|
65
|
-
|
66
|
-
return {
|
67
|
-
...toRefs(state),
|
68
|
-
blankingTabs,
|
69
|
-
addVisitedRoute,
|
70
|
-
delVisitedRoute,
|
71
|
-
delOthersVisitedRoutes,
|
72
|
-
delLeftVisitedRoutes,
|
73
|
-
delRightVisitedRoutes,
|
74
|
-
delAllVisitedRoutes
|
75
|
-
}
|
76
|
-
})
|
@@ -1,136 +0,0 @@
|
|
1
|
-
import { reactive, toRefs } from 'vue'
|
2
|
-
import { defineStore } from 'pinia'
|
3
|
-
import { notification } from 'ant-design-vue'
|
4
|
-
import { defaultSettings } from '@gx-config'
|
5
|
-
import type { UserDetails, UserInfo } from '@gx-mock/config/user'
|
6
|
-
import { defaultUser } from '@gx-mock/config/user'
|
7
|
-
import { getUserInfo, login, logout } from '@/services/userCenter'
|
8
|
-
import { getAccessToken, removeAccessToken, setAccessToken } from '@/utils/accessToken'
|
9
|
-
import { timeFix } from '@/utils/util'
|
10
|
-
import { useStoreRoutes } from './routes'
|
11
|
-
import { useStorePermission } from './permission'
|
12
|
-
import { useStoreTabsRouter } from './tabsRouter'
|
13
|
-
import { isObject } from '@gx-design-vue/pro-utils'
|
14
|
-
import { cloneDeep } from 'lodash-es'
|
15
|
-
|
16
|
-
const { tokenName, loginInterception } = defaultSettings
|
17
|
-
|
18
|
-
export interface UserState {
|
19
|
-
accessToken: string;
|
20
|
-
userInfo: UserDetails;
|
21
|
-
}
|
22
|
-
|
23
|
-
type UserStateKey = keyof UserState
|
24
|
-
|
25
|
-
export const useStoreUser = defineStore('user', () => {
|
26
|
-
const routes = useStoreRoutes()
|
27
|
-
const auth = useStorePermission()
|
28
|
-
const tabsRouter = useStoreTabsRouter()
|
29
|
-
|
30
|
-
const state = reactive<UserState>({
|
31
|
-
accessToken: getAccessToken(),
|
32
|
-
userInfo: {} as UserDetails
|
33
|
-
})
|
34
|
-
|
35
|
-
const userDetails = computed<UserDetails>(() => state.userInfo)
|
36
|
-
|
37
|
-
const setState: (params: Partial<Record<UserStateKey, UserState[UserStateKey]>>) => void = (params) => {
|
38
|
-
Object.assign(state, params)
|
39
|
-
}
|
40
|
-
|
41
|
-
/**
|
42
|
-
* @Author gx12358
|
43
|
-
* @DateTime 2022/1/11
|
44
|
-
* @lastTime 2022/1/11
|
45
|
-
* @description 登录拦截放行时,设置虚拟角色
|
46
|
-
*/
|
47
|
-
const setVirtualUserInfo = () => {
|
48
|
-
auth.changeValue('admin', true)
|
49
|
-
auth.changeValue('role', defaultUser.roles)
|
50
|
-
auth.changeValue('ability', defaultUser.permissions)
|
51
|
-
setState({
|
52
|
-
userInfo: defaultUser.user as UserDetails
|
53
|
-
})
|
54
|
-
}
|
55
|
-
|
56
|
-
/**
|
57
|
-
* @Author gx12358
|
58
|
-
* @DateTime 2022/1/11
|
59
|
-
* @lastTime 2022/1/11
|
60
|
-
* @description 登录
|
61
|
-
*/
|
62
|
-
const userLogin = async (params): Promise<boolean> => {
|
63
|
-
const response: ResponseResult<{ expiresIn: number; }> = await login(params)
|
64
|
-
const accessToken = response?.data?.[tokenName]
|
65
|
-
if (accessToken) {
|
66
|
-
const expiresIn = response?.data?.expiresIn
|
67
|
-
state.accessToken = accessToken
|
68
|
-
setAccessToken(accessToken, expiresIn ? expiresIn * 60 * 1000 : 0)
|
69
|
-
return true
|
70
|
-
}
|
71
|
-
return false
|
72
|
-
}
|
73
|
-
|
74
|
-
const updateUserInfo = async () => {
|
75
|
-
const response: ResponseResult<UserInfo> = await getUserInfo()
|
76
|
-
const { user, roles, permissions } = response?.data || {} as UserInfo
|
77
|
-
if (response && user && isObject(user)) {
|
78
|
-
if (user.userName && roles && Array.isArray(roles)) {
|
79
|
-
auth.changeValue('role', roles)
|
80
|
-
auth.changeValue('ability', permissions)
|
81
|
-
|
82
|
-
setState({
|
83
|
-
userInfo: cloneDeep(user)
|
84
|
-
})
|
85
|
-
notification.success({
|
86
|
-
message: `欢迎登录${state.userInfo?.userName}`,
|
87
|
-
description: `${timeFix()}!`
|
88
|
-
})
|
89
|
-
}
|
90
|
-
}
|
91
|
-
}
|
92
|
-
|
93
|
-
/**
|
94
|
-
* @Author gx12358
|
95
|
-
* @DateTime 2022/1/11
|
96
|
-
* @lastTime 2022/1/11
|
97
|
-
* @description 获取用户信息
|
98
|
-
*/
|
99
|
-
const checkUserPremission = async () => {
|
100
|
-
if (loginInterception)
|
101
|
-
await updateUserInfo()
|
102
|
-
else setVirtualUserInfo()
|
103
|
-
return Object.keys(state.userInfo).length
|
104
|
-
}
|
105
|
-
|
106
|
-
const resetPermissions = () => {
|
107
|
-
state.accessToken = ''
|
108
|
-
removeAccessToken()
|
109
|
-
auth.changeValue('admin', false)
|
110
|
-
auth.changeValue('role', [])
|
111
|
-
auth.changeValue('ability', [])
|
112
|
-
routes.resetRoute()
|
113
|
-
tabsRouter.blankingTabs()
|
114
|
-
}
|
115
|
-
|
116
|
-
/**
|
117
|
-
* @Author gx12358
|
118
|
-
* @DateTime 2022/5/15
|
119
|
-
* @lastTime 2022/5/15
|
120
|
-
* @description 用户退出登录
|
121
|
-
*/
|
122
|
-
const userLogut = async () => {
|
123
|
-
await logout()
|
124
|
-
resetPermissions()
|
125
|
-
}
|
126
|
-
|
127
|
-
return {
|
128
|
-
...toRefs(state),
|
129
|
-
userDetails,
|
130
|
-
userLogin,
|
131
|
-
userLogut,
|
132
|
-
setState,
|
133
|
-
resetPermissions,
|
134
|
-
checkUserPremission
|
135
|
-
}
|
136
|
-
})
|
@@ -1,80 +0,0 @@
|
|
1
|
-
import { defaultSettings } from '@gx-config'
|
2
|
-
import {
|
3
|
-
delCookie,
|
4
|
-
getStorage,
|
5
|
-
removeStorage,
|
6
|
-
setCookie,
|
7
|
-
setStorage
|
8
|
-
} from '@/utils/storage'
|
9
|
-
|
10
|
-
const { storage, tokenTableName } = defaultSettings
|
11
|
-
|
12
|
-
/**
|
13
|
-
* @Author gx12358
|
14
|
-
* @DateTime 2021/12/27
|
15
|
-
* @lastTime 2021/12/27
|
16
|
-
* @description 获取accessToken
|
17
|
-
*/
|
18
|
-
export function getAccessToken() {
|
19
|
-
return getStorage({ key: tokenTableName, type: storage || 'localStorage' })
|
20
|
-
}
|
21
|
-
|
22
|
-
/**
|
23
|
-
* @author gx12358 2539306317@qq.com
|
24
|
-
* @description 存储accessToken
|
25
|
-
* @param accessToken
|
26
|
-
* @returns {void|*}
|
27
|
-
*/
|
28
|
-
export function setAccessToken(accessToken: string, expired?: number) {
|
29
|
-
if (storage) {
|
30
|
-
if (storage === 'localStorage') {
|
31
|
-
return setStorage({
|
32
|
-
key: tokenTableName,
|
33
|
-
value: accessToken,
|
34
|
-
expired
|
35
|
-
})
|
36
|
-
} else if (storage === 'sessionStorage') {
|
37
|
-
return setStorage({
|
38
|
-
key: tokenTableName,
|
39
|
-
value: accessToken,
|
40
|
-
expired,
|
41
|
-
type: 'session'
|
42
|
-
})
|
43
|
-
} else if (storage === 'cookie') {
|
44
|
-
return setCookie(tokenTableName, accessToken, expired)
|
45
|
-
} else {
|
46
|
-
return setStorage({
|
47
|
-
key: tokenTableName,
|
48
|
-
value: accessToken,
|
49
|
-
expired
|
50
|
-
})
|
51
|
-
}
|
52
|
-
} else {
|
53
|
-
return setStorage({
|
54
|
-
key: tokenTableName,
|
55
|
-
value: accessToken,
|
56
|
-
expired
|
57
|
-
})
|
58
|
-
}
|
59
|
-
}
|
60
|
-
|
61
|
-
/**
|
62
|
-
* @author gx12358 2539306317@qq.com
|
63
|
-
* @description 移除accessToken
|
64
|
-
* @returns {void|Promise<void>}
|
65
|
-
*/
|
66
|
-
export function removeAccessToken() {
|
67
|
-
if (storage) {
|
68
|
-
if (storage === 'localStorage') {
|
69
|
-
return removeStorage(tokenTableName)
|
70
|
-
} else if (storage === 'sessionStorage') {
|
71
|
-
return removeStorage(tokenTableName, 'session')
|
72
|
-
} else if (storage === 'cookie') {
|
73
|
-
return delCookie(tokenTableName)
|
74
|
-
} else {
|
75
|
-
return removeStorage(tokenTableName)
|
76
|
-
}
|
77
|
-
} else {
|
78
|
-
return removeStorage(tokenTableName)
|
79
|
-
}
|
80
|
-
}
|
@@ -1,101 +0,0 @@
|
|
1
|
-
export default class Base64 {
|
2
|
-
_keyStr: string
|
3
|
-
|
4
|
-
constructor() {
|
5
|
-
this._keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
|
6
|
-
}
|
7
|
-
|
8
|
-
_utf8_encode(string: string) {
|
9
|
-
string = string.replace(/\r\n/g, '\n')
|
10
|
-
let utftext = ''
|
11
|
-
for (let n = 0; n < string.length; n++) {
|
12
|
-
const c = string.charCodeAt(n)
|
13
|
-
if (c < 128) {
|
14
|
-
utftext += String.fromCharCode(c)
|
15
|
-
} else if ((c > 127) && (c < 2048)) {
|
16
|
-
utftext += String.fromCharCode((c >> 6) | 192)
|
17
|
-
utftext += String.fromCharCode((c & 63) | 128)
|
18
|
-
} else {
|
19
|
-
utftext += String.fromCharCode((c >> 12) | 224)
|
20
|
-
utftext += String.fromCharCode(((c >> 6) & 63) | 128)
|
21
|
-
utftext += String.fromCharCode((c & 63) | 128)
|
22
|
-
}
|
23
|
-
}
|
24
|
-
return utftext
|
25
|
-
}
|
26
|
-
|
27
|
-
_utf8_decode(utftext: string) {
|
28
|
-
let string = ''
|
29
|
-
let i = 0
|
30
|
-
let c = 0
|
31
|
-
let c1 = 0
|
32
|
-
let c2 = 0
|
33
|
-
while (i < utftext.length) {
|
34
|
-
c = utftext.charCodeAt(i)
|
35
|
-
if (c < 128) {
|
36
|
-
string += String.fromCharCode(c)
|
37
|
-
i++
|
38
|
-
} else if ((c > 191) && (c < 224)) {
|
39
|
-
c1 = utftext.charCodeAt(i + 1)
|
40
|
-
string += String.fromCharCode(((c & 31) << 6) | (c1 & 63))
|
41
|
-
i += 2
|
42
|
-
} else {
|
43
|
-
c1 = utftext.charCodeAt(i + 1)
|
44
|
-
c2 = utftext.charCodeAt(i + 2)
|
45
|
-
string += String.fromCharCode(((c & 15) << 12) | ((c1 & 63) << 6) | (c2 & 63))
|
46
|
-
i += 3
|
47
|
-
}
|
48
|
-
}
|
49
|
-
return string
|
50
|
-
}
|
51
|
-
|
52
|
-
encode(input: string) {
|
53
|
-
let output = ''
|
54
|
-
let chr1, chr2, chr3, enc1, enc2, enc3, enc4
|
55
|
-
let i = 0
|
56
|
-
input = this._utf8_encode(input)
|
57
|
-
while (i < input.length) {
|
58
|
-
chr1 = input.charCodeAt(i++)
|
59
|
-
chr2 = input.charCodeAt(i++)
|
60
|
-
chr3 = input.charCodeAt(i++)
|
61
|
-
enc1 = chr1 >> 2
|
62
|
-
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4)
|
63
|
-
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6)
|
64
|
-
enc4 = chr3 & 63
|
65
|
-
if (Number.isNaN(chr2)) {
|
66
|
-
enc3 = enc4 = 64
|
67
|
-
} else if (Number.isNaN(chr3)) {
|
68
|
-
enc4 = 64
|
69
|
-
}
|
70
|
-
output = output + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + this._keyStr.charAt(
|
71
|
-
enc3) + this._keyStr.charAt(enc4)
|
72
|
-
}
|
73
|
-
return output
|
74
|
-
}
|
75
|
-
|
76
|
-
decode(input: string) {
|
77
|
-
let output = ''
|
78
|
-
let chr1, chr2, chr3
|
79
|
-
let enc1, enc2, enc3, enc4
|
80
|
-
let i = 0
|
81
|
-
input = input.replace(/[^A-Za-z0-9+/=]/g, '')
|
82
|
-
while (i < input.length) {
|
83
|
-
enc1 = this._keyStr.indexOf(input.charAt(i++))
|
84
|
-
enc2 = this._keyStr.indexOf(input.charAt(i++))
|
85
|
-
enc3 = this._keyStr.indexOf(input.charAt(i++))
|
86
|
-
enc4 = this._keyStr.indexOf(input.charAt(i++))
|
87
|
-
chr1 = (enc1 << 2) | (enc2 >> 4)
|
88
|
-
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2)
|
89
|
-
chr3 = ((enc3 & 3) << 6) | enc4
|
90
|
-
output = output + String.fromCharCode(chr1)
|
91
|
-
if (enc3 !== 64) {
|
92
|
-
output = output + String.fromCharCode(chr2)
|
93
|
-
}
|
94
|
-
if (enc4 !== 64) {
|
95
|
-
output = output + String.fromCharCode(chr3)
|
96
|
-
}
|
97
|
-
}
|
98
|
-
output = this._utf8_decode(output)
|
99
|
-
return output
|
100
|
-
}
|
101
|
-
}
|