vue2-client 1.2.0 → 1.2.1
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/README.md +65 -65
- package/babel.config.js +1 -0
- package/docs/notice.md +24 -0
- package/index.js +28 -28
- package/package.json +1 -1
- package/src/App.vue +93 -93
- package/src/base-client/all.js +57 -57
- package/src/base-client/components/common/CreateQuery/CreateQuery.vue +1159 -1159
- package/src/base-client/components/common/CreateQuery/index.md +42 -42
- package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +540 -540
- package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
- package/src/base-client/components/common/CustomColumnsDrawer/index.md +46 -46
- package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +150 -150
- package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
- package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
- package/src/base-client/components/common/XAddForm/XAddForm.vue +323 -323
- package/src/base-client/components/common/XAddForm/index.md +60 -60
- package/src/base-client/components/common/XBadge/index.md +39 -39
- package/src/base-client/components/common/XCard/index.md +43 -43
- package/src/base-client/components/common/XForm/XForm.vue +275 -275
- package/src/base-client/components/common/XForm/XFormItem.vue +217 -217
- package/src/base-client/components/common/XForm/index.md +196 -196
- package/src/base-client/components/common/XFormCol/index.md +35 -35
- package/src/base-client/components/common/XFormTable/XFormTable.vue +405 -405
- package/src/base-client/components/common/XFormTable/index.md +89 -89
- package/src/base-client/components/common/XTable/XTable.vue +262 -262
- package/src/base-client/components/common/XTable/index.md +255 -255
- package/src/base-client/components/common/XTreeOne/XTreeOne.vue +105 -105
- package/src/base-client/components/iot/CustomerDetailsView/CustomerDetailsView.vue +226 -226
- package/src/base-client/components/iot/CustomerDetailsView/index.md +41 -41
- package/src/base-client/components/iot/DataAnalysisUser/DataAnalysisUser.vue +127 -127
- package/src/base-client/components/iot/DataAnalysisViewGD/DataAnalysisViewGD.vue +548 -548
- package/src/base-client/components/iot/DeviceBrandDetailsView/DeviceBrandDetailsView.vue +453 -453
- package/src/base-client/components/iot/DeviceDetailsView/DeviceDetailsView.vue +231 -231
- package/src/base-client/components/iot/DeviceDetailsView/index.md +43 -43
- package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsCount.vue +330 -330
- package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsException.vue +57 -57
- package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsInstruct.vue +122 -122
- package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsInstructOperate.vue +122 -122
- package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsMain.vue +225 -225
- package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsRead.vue +135 -135
- package/src/base-client/components/iot/DeviceTypeDetailsView/DeviceTypeDetailsView.vue +277 -277
- package/src/base-client/components/iot/InstructDetailsView/InstructDetailsView.vue +472 -472
- package/src/base-client/components/iot/InstructDetailsView/index.md +45 -45
- package/src/base-client/components/iot/LogDetailsView/LogDetailsView.vue +380 -380
- package/src/base-client/components/iot/LogDetailsView/index.md +43 -43
- package/src/base-client/components/iot/MeterDetailsView/MeterDetailsView.vue +360 -360
- package/src/base-client/components/iot/MeterDetailsView/index.md +43 -43
- package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsCount.vue +335 -335
- package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsException.vue +185 -185
- package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsHandPlan.vue +292 -292
- package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsInstruct.vue +237 -237
- package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsMain.vue +257 -257
- package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsSellGas.vue +190 -190
- package/src/base-client/components/iot/WebmeterAnalysisView/WebmeterAnalysisView.vue +723 -723
- package/src/base-client/components/iot/WebmeterAnalysisView/index.md +48 -48
- package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
- package/src/base-client/components/system/DictionaryDetailsView/index.md +41 -41
- package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +248 -248
- package/src/base-client/components/ticket/EmployeeDetailsView/EmployeeDetailsView.vue +406 -406
- package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +486 -486
- package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +184 -184
- package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +303 -303
- package/src/base-client/plugins/AppData.js +69 -69
- package/src/base-client/plugins/GetLoginInfoService.js +221 -221
- package/src/base-client/plugins/index.js +21 -21
- package/src/bootstrap.js +27 -27
- package/src/components/Ellipsis/Ellipsis.vue +64 -64
- package/src/components/Ellipsis/index.md +38 -38
- package/src/components/NumberInfo/index.md +43 -43
- package/src/components/STable/README.md +341 -341
- package/src/components/Trend/index.md +45 -45
- package/src/components/cache/AKeepAlive.js +172 -172
- package/src/components/checkbox/index.js +7 -7
- package/src/components/index.js +36 -36
- package/src/components/menu/menu.js +273 -273
- package/src/components/setting/Setting.vue +237 -237
- package/src/components/table/advance/AdvanceTable.vue +275 -275
- package/src/components/transition/PageToggleTransition.vue +97 -97
- package/src/layouts/CommonLayout.vue +42 -42
- package/src/layouts/PageLayout.vue +151 -151
- package/src/layouts/SinglePageView.vue +74 -74
- package/src/layouts/header/AdminHeader.vue +109 -109
- package/src/layouts/header/HeaderAvatar.vue +60 -60
- package/src/layouts/header/HeaderNotice.vue +97 -97
- package/src/layouts/tabs/TabsHead.vue +190 -190
- package/src/layouts/tabs/TabsView.vue +355 -355
- package/src/main.js +20 -20
- package/src/mock/goods/index.js +108 -108
- package/src/mock/index.js +12 -12
- package/src/mock/project/index.js +17 -17
- package/src/mock/user/current.js +13 -13
- package/src/mock/user/login.js +39 -39
- package/src/mock/workplace/index.js +15 -15
- package/src/pages/exception/403.vue +25 -25
- package/src/pages/exception/404.vue +25 -25
- package/src/pages/exception/500.vue +25 -25
- package/src/pages/login/Login.vue +194 -194
- package/src/pages/report/ReportTableHome.vue +28 -28
- package/src/pages/resourceManage/resourceManageMain.vue +55 -55
- package/src/pages/system/applyInstallView/Core.vue +570 -570
- package/src/pages/system/applyInstallView/index.vue +34 -34
- package/src/pages/system/dictionary/index.vue +41 -41
- package/src/pages/system/queryParams/index.vue +41 -41
- package/src/router/async/config.async.js +25 -25
- package/src/router/async/router.map.js +59 -59
- package/src/router/guards.js +104 -104
- package/src/router/index.js +27 -27
- package/src/services/api/common.js +39 -39
- package/src/services/api/restTools.js +23 -23
- package/src/services/dataSource.js +12 -12
- package/src/services/user.js +34 -34
- package/src/store/modules/setting.js +114 -114
- package/src/utils/i18n.js +80 -80
- package/src/utils/indexedDB.js +146 -146
- package/src/utils/request.js +197 -197
- package/src/utils/routerUtil.js +15 -2
- package/tests/unit/ReportTable.spec.js +15 -15
- package/vue.config.js +153 -153
- package/webpack.config.js +12 -12
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
import { METHOD, request } from '@vue2-client/utils/request'
|
|
2
|
-
|
|
3
|
-
const commonApi = {
|
|
4
|
-
// 获取表格列配置
|
|
5
|
-
getColumnsJson: '/webmeterapi/getColumns',
|
|
6
|
-
// 通用查询
|
|
7
|
-
query: '/webmeterapi/commonQuery',
|
|
8
|
-
// 通用新增/修改
|
|
9
|
-
addOrModify: '/webmeterapi/commonAddOrModify',
|
|
10
|
-
// 通用删除
|
|
11
|
-
delete: '/webmeterapi/commonDelete',
|
|
12
|
-
// 获取字典键列表
|
|
13
|
-
getDictionaryParam: '/webmeterapi/getDictionaryParam',
|
|
14
|
-
// 根据字典键获取值
|
|
15
|
-
getDictionaryValue: '/webmeterapi/getDictionaryValue'
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* 通用表单查询
|
|
20
|
-
*/
|
|
21
|
-
export function query (parameter) {
|
|
22
|
-
return request(commonApi.query, METHOD.POST, parameter)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* 通用新增/修改
|
|
27
|
-
*/
|
|
28
|
-
export function addOrModify (parameter) {
|
|
29
|
-
return request(commonApi.addOrModify, METHOD.POST, parameter)
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* 通用删除
|
|
34
|
-
*/
|
|
35
|
-
export function remove (parameter) {
|
|
36
|
-
return request(commonApi.delete, METHOD.POST, parameter)
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export { commonApi }
|
|
1
|
+
import { METHOD, request } from '@vue2-client/utils/request'
|
|
2
|
+
|
|
3
|
+
const commonApi = {
|
|
4
|
+
// 获取表格列配置
|
|
5
|
+
getColumnsJson: '/webmeterapi/getColumns',
|
|
6
|
+
// 通用查询
|
|
7
|
+
query: '/webmeterapi/commonQuery',
|
|
8
|
+
// 通用新增/修改
|
|
9
|
+
addOrModify: '/webmeterapi/commonAddOrModify',
|
|
10
|
+
// 通用删除
|
|
11
|
+
delete: '/webmeterapi/commonDelete',
|
|
12
|
+
// 获取字典键列表
|
|
13
|
+
getDictionaryParam: '/webmeterapi/getDictionaryParam',
|
|
14
|
+
// 根据字典键获取值
|
|
15
|
+
getDictionaryValue: '/webmeterapi/getDictionaryValue'
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* 通用表单查询
|
|
20
|
+
*/
|
|
21
|
+
export function query (parameter) {
|
|
22
|
+
return request(commonApi.query, METHOD.POST, parameter)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* 通用新增/修改
|
|
27
|
+
*/
|
|
28
|
+
export function addOrModify (parameter) {
|
|
29
|
+
return request(commonApi.addOrModify, METHOD.POST, parameter)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* 通用删除
|
|
34
|
+
*/
|
|
35
|
+
export function remove (parameter) {
|
|
36
|
+
return request(commonApi.delete, METHOD.POST, parameter)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export { commonApi }
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { METHOD, request } from '@vue2-client/utils/request'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* GET请求
|
|
5
|
-
* @param url 请求地址
|
|
6
|
-
* @param parameter 路径参数
|
|
7
|
-
* @returns {Promise<AxiosResponse<T>>}
|
|
8
|
-
*/
|
|
9
|
-
function get (url, parameter) {
|
|
10
|
-
return request(url, METHOD.GET, parameter)
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* POST请求
|
|
15
|
-
* @param url 请求地址
|
|
16
|
-
* @param parameter 请求参数
|
|
17
|
-
* @returns {Promise<AxiosResponse<T>>}
|
|
18
|
-
*/
|
|
19
|
-
function post (url, parameter) {
|
|
20
|
-
return request(url, METHOD.POST, parameter)
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export { get, post }
|
|
1
|
+
import { METHOD, request } from '@vue2-client/utils/request'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* GET请求
|
|
5
|
+
* @param url 请求地址
|
|
6
|
+
* @param parameter 路径参数
|
|
7
|
+
* @returns {Promise<AxiosResponse<T>>}
|
|
8
|
+
*/
|
|
9
|
+
function get (url, parameter) {
|
|
10
|
+
return request(url, METHOD.GET, parameter)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* POST请求
|
|
15
|
+
* @param url 请求地址
|
|
16
|
+
* @param parameter 请求参数
|
|
17
|
+
* @returns {Promise<AxiosResponse<T>>}
|
|
18
|
+
*/
|
|
19
|
+
function post (url, parameter) {
|
|
20
|
+
return request(url, METHOD.POST, parameter)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { get, post }
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { GOODS, GOODS_COLUMNS } from './api'
|
|
2
|
-
import { METHOD, request } from '@vue2-client/utils/request'
|
|
3
|
-
|
|
4
|
-
export async function goodsList (params) {
|
|
5
|
-
return request(GOODS, METHOD.GET, params)
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export async function goodsColumns () {
|
|
9
|
-
return request(GOODS_COLUMNS, METHOD.GET)
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export default { goodsList, goodsColumns }
|
|
1
|
+
import { GOODS, GOODS_COLUMNS } from './api'
|
|
2
|
+
import { METHOD, request } from '@vue2-client/utils/request'
|
|
3
|
+
|
|
4
|
+
export async function goodsList (params) {
|
|
5
|
+
return request(GOODS, METHOD.GET, params)
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export async function goodsColumns () {
|
|
9
|
+
return request(GOODS_COLUMNS, METHOD.GET)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export default { goodsList, goodsColumns }
|
package/src/services/user.js
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import { LOGIN, ROUTES } from '@vue2-client/services/api'
|
|
2
|
-
import { request, METHOD, removeAuthorization } from '@vue2-client/utils/request'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* 登录服务
|
|
6
|
-
* @param name 账户名
|
|
7
|
-
* @param password 账户密码
|
|
8
|
-
* @returns {Promise<AxiosResponse<T>>}
|
|
9
|
-
*/
|
|
10
|
-
export async function login (name, password) {
|
|
11
|
-
return request(LOGIN, METHOD.POST, {
|
|
12
|
-
name: name,
|
|
13
|
-
password: password
|
|
14
|
-
})
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export async function getRoutesConfig (value) {
|
|
18
|
-
return request(ROUTES, METHOD.POST, value)
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* 退出登录
|
|
23
|
-
*/
|
|
24
|
-
export function logout () {
|
|
25
|
-
localStorage.removeItem(process.env.VUE_APP_ROUTES_KEY)
|
|
26
|
-
localStorage.removeItem(process.env.VUE_APP_PERMISSIONS_KEY)
|
|
27
|
-
localStorage.removeItem(process.env.VUE_APP_ROLES_KEY)
|
|
28
|
-
removeAuthorization()
|
|
29
|
-
}
|
|
30
|
-
export default {
|
|
31
|
-
login,
|
|
32
|
-
logout,
|
|
33
|
-
getRoutesConfig
|
|
34
|
-
}
|
|
1
|
+
import { LOGIN, ROUTES } from '@vue2-client/services/api'
|
|
2
|
+
import { request, METHOD, removeAuthorization } from '@vue2-client/utils/request'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 登录服务
|
|
6
|
+
* @param name 账户名
|
|
7
|
+
* @param password 账户密码
|
|
8
|
+
* @returns {Promise<AxiosResponse<T>>}
|
|
9
|
+
*/
|
|
10
|
+
export async function login (name, password) {
|
|
11
|
+
return request(LOGIN, METHOD.POST, {
|
|
12
|
+
name: name,
|
|
13
|
+
password: password
|
|
14
|
+
})
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export async function getRoutesConfig (value) {
|
|
18
|
+
return request(ROUTES, METHOD.POST, value)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 退出登录
|
|
23
|
+
*/
|
|
24
|
+
export function logout () {
|
|
25
|
+
localStorage.removeItem(process.env.VUE_APP_ROUTES_KEY)
|
|
26
|
+
localStorage.removeItem(process.env.VUE_APP_PERMISSIONS_KEY)
|
|
27
|
+
localStorage.removeItem(process.env.VUE_APP_ROLES_KEY)
|
|
28
|
+
removeAuthorization()
|
|
29
|
+
}
|
|
30
|
+
export default {
|
|
31
|
+
login,
|
|
32
|
+
logout,
|
|
33
|
+
getRoutesConfig
|
|
34
|
+
}
|
|
@@ -1,114 +1,114 @@
|
|
|
1
|
-
import config from '@vue2-client/config'
|
|
2
|
-
import { ADMIN } from '@vue2-client/config/default'
|
|
3
|
-
import { formatFullPath } from '@vue2-client/utils/i18n'
|
|
4
|
-
import { filterMenu } from '@vue2-client/utils/authority-utils'
|
|
5
|
-
import { getLocalSetting } from '@vue2-client/utils/themeUtil'
|
|
6
|
-
import deepClone from 'lodash.clonedeep'
|
|
7
|
-
|
|
8
|
-
const localSetting = getLocalSetting(true)
|
|
9
|
-
const customTitlesStr = sessionStorage.getItem(process.env.VUE_APP_TBAS_TITLES_KEY)
|
|
10
|
-
const customTitles = (customTitlesStr && JSON.parse(customTitlesStr)) || []
|
|
11
|
-
|
|
12
|
-
export default {
|
|
13
|
-
namespaced: true,
|
|
14
|
-
state: {
|
|
15
|
-
isMobile: false,
|
|
16
|
-
animates: ADMIN.animates,
|
|
17
|
-
palettes: ADMIN.palettes,
|
|
18
|
-
pageMinHeight: 0,
|
|
19
|
-
menuData: [],
|
|
20
|
-
activatedFirst: undefined,
|
|
21
|
-
customTitles,
|
|
22
|
-
...config,
|
|
23
|
-
...localSetting
|
|
24
|
-
},
|
|
25
|
-
getters: {
|
|
26
|
-
menuData (state, getters, rootState) {
|
|
27
|
-
if (state.filterMenu) {
|
|
28
|
-
const { permissions, roles } = rootState.account
|
|
29
|
-
return filterMenu(deepClone(state.menuData), permissions, roles)
|
|
30
|
-
}
|
|
31
|
-
return state.menuData
|
|
32
|
-
},
|
|
33
|
-
firstMenu (state, getters) {
|
|
34
|
-
const { menuData } = getters
|
|
35
|
-
if (menuData.length > 0 && !menuData[0].fullPath) {
|
|
36
|
-
formatFullPath(menuData)
|
|
37
|
-
}
|
|
38
|
-
return menuData.map(item => {
|
|
39
|
-
const menuItem = { ...item }
|
|
40
|
-
delete menuItem.children
|
|
41
|
-
return menuItem
|
|
42
|
-
})
|
|
43
|
-
},
|
|
44
|
-
subMenu (state) {
|
|
45
|
-
const { menuData, activatedFirst } = state
|
|
46
|
-
if (menuData.length > 0 && !menuData[0].fullPath) {
|
|
47
|
-
formatFullPath(menuData)
|
|
48
|
-
}
|
|
49
|
-
const current = menuData.find(menu => menu.fullPath === activatedFirst)
|
|
50
|
-
return current && current.children || []
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
mutations: {
|
|
54
|
-
setDevice (state, isMobile) {
|
|
55
|
-
state.isMobile = isMobile
|
|
56
|
-
},
|
|
57
|
-
setTheme (state, theme) {
|
|
58
|
-
state.theme = theme
|
|
59
|
-
},
|
|
60
|
-
setLayout (state, layout) {
|
|
61
|
-
state.layout = layout
|
|
62
|
-
},
|
|
63
|
-
setMultiPage (state, multiPage) {
|
|
64
|
-
state.multiPage = multiPage
|
|
65
|
-
},
|
|
66
|
-
setAnimate (state, animate) {
|
|
67
|
-
state.animate = animate
|
|
68
|
-
},
|
|
69
|
-
setWeekMode (state, weekMode) {
|
|
70
|
-
state.weekMode = weekMode
|
|
71
|
-
},
|
|
72
|
-
setFixedHeader (state, fixedHeader) {
|
|
73
|
-
state.fixedHeader = fixedHeader
|
|
74
|
-
},
|
|
75
|
-
setFixedSideBar (state, fixedSideBar) {
|
|
76
|
-
state.fixedSideBar = fixedSideBar
|
|
77
|
-
},
|
|
78
|
-
setLang (state, lang) {
|
|
79
|
-
state.lang = lang
|
|
80
|
-
},
|
|
81
|
-
setHideSetting (state, hideSetting) {
|
|
82
|
-
state.hideSetting = hideSetting
|
|
83
|
-
},
|
|
84
|
-
correctPageMinHeight (state, minHeight) {
|
|
85
|
-
state.pageMinHeight += minHeight
|
|
86
|
-
},
|
|
87
|
-
setMenuData (state, menuData) {
|
|
88
|
-
state.menuData = menuData
|
|
89
|
-
},
|
|
90
|
-
setAsyncRoutes (state, asyncRoutes) {
|
|
91
|
-
state.asyncRoutes = asyncRoutes
|
|
92
|
-
},
|
|
93
|
-
setPageWidth (state, pageWidth) {
|
|
94
|
-
state.pageWidth = pageWidth
|
|
95
|
-
},
|
|
96
|
-
setActivatedFirst (state, activatedFirst) {
|
|
97
|
-
state.activatedFirst = activatedFirst
|
|
98
|
-
},
|
|
99
|
-
setFixedTabs (state, fixedTabs) {
|
|
100
|
-
state.fixedTabs = fixedTabs
|
|
101
|
-
},
|
|
102
|
-
setCustomTitle (state, { path, title }) {
|
|
103
|
-
if (title) {
|
|
104
|
-
const obj = state.customTitles.find(item => item.path === path)
|
|
105
|
-
if (obj) {
|
|
106
|
-
obj.title = title
|
|
107
|
-
} else {
|
|
108
|
-
state.customTitles.push({ path, title })
|
|
109
|
-
}
|
|
110
|
-
sessionStorage.setItem(process.env.VUE_APP_TBAS_TITLES_KEY, JSON.stringify(state.customTitles))
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
1
|
+
import config from '@vue2-client/config'
|
|
2
|
+
import { ADMIN } from '@vue2-client/config/default'
|
|
3
|
+
import { formatFullPath } from '@vue2-client/utils/i18n'
|
|
4
|
+
import { filterMenu } from '@vue2-client/utils/authority-utils'
|
|
5
|
+
import { getLocalSetting } from '@vue2-client/utils/themeUtil'
|
|
6
|
+
import deepClone from 'lodash.clonedeep'
|
|
7
|
+
|
|
8
|
+
const localSetting = getLocalSetting(true)
|
|
9
|
+
const customTitlesStr = sessionStorage.getItem(process.env.VUE_APP_TBAS_TITLES_KEY)
|
|
10
|
+
const customTitles = (customTitlesStr && JSON.parse(customTitlesStr)) || []
|
|
11
|
+
|
|
12
|
+
export default {
|
|
13
|
+
namespaced: true,
|
|
14
|
+
state: {
|
|
15
|
+
isMobile: false,
|
|
16
|
+
animates: ADMIN.animates,
|
|
17
|
+
palettes: ADMIN.palettes,
|
|
18
|
+
pageMinHeight: 0,
|
|
19
|
+
menuData: [],
|
|
20
|
+
activatedFirst: undefined,
|
|
21
|
+
customTitles,
|
|
22
|
+
...config,
|
|
23
|
+
...localSetting
|
|
24
|
+
},
|
|
25
|
+
getters: {
|
|
26
|
+
menuData (state, getters, rootState) {
|
|
27
|
+
if (state.filterMenu) {
|
|
28
|
+
const { permissions, roles } = rootState.account
|
|
29
|
+
return filterMenu(deepClone(state.menuData), permissions, roles)
|
|
30
|
+
}
|
|
31
|
+
return state.menuData
|
|
32
|
+
},
|
|
33
|
+
firstMenu (state, getters) {
|
|
34
|
+
const { menuData } = getters
|
|
35
|
+
if (menuData.length > 0 && !menuData[0].fullPath) {
|
|
36
|
+
formatFullPath(menuData)
|
|
37
|
+
}
|
|
38
|
+
return menuData.map(item => {
|
|
39
|
+
const menuItem = { ...item }
|
|
40
|
+
delete menuItem.children
|
|
41
|
+
return menuItem
|
|
42
|
+
})
|
|
43
|
+
},
|
|
44
|
+
subMenu (state) {
|
|
45
|
+
const { menuData, activatedFirst } = state
|
|
46
|
+
if (menuData.length > 0 && !menuData[0].fullPath) {
|
|
47
|
+
formatFullPath(menuData)
|
|
48
|
+
}
|
|
49
|
+
const current = menuData.find(menu => menu.fullPath === activatedFirst)
|
|
50
|
+
return current && current.children || []
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
mutations: {
|
|
54
|
+
setDevice (state, isMobile) {
|
|
55
|
+
state.isMobile = isMobile
|
|
56
|
+
},
|
|
57
|
+
setTheme (state, theme) {
|
|
58
|
+
state.theme = theme
|
|
59
|
+
},
|
|
60
|
+
setLayout (state, layout) {
|
|
61
|
+
state.layout = layout
|
|
62
|
+
},
|
|
63
|
+
setMultiPage (state, multiPage) {
|
|
64
|
+
state.multiPage = multiPage
|
|
65
|
+
},
|
|
66
|
+
setAnimate (state, animate) {
|
|
67
|
+
state.animate = animate
|
|
68
|
+
},
|
|
69
|
+
setWeekMode (state, weekMode) {
|
|
70
|
+
state.weekMode = weekMode
|
|
71
|
+
},
|
|
72
|
+
setFixedHeader (state, fixedHeader) {
|
|
73
|
+
state.fixedHeader = fixedHeader
|
|
74
|
+
},
|
|
75
|
+
setFixedSideBar (state, fixedSideBar) {
|
|
76
|
+
state.fixedSideBar = fixedSideBar
|
|
77
|
+
},
|
|
78
|
+
setLang (state, lang) {
|
|
79
|
+
state.lang = lang
|
|
80
|
+
},
|
|
81
|
+
setHideSetting (state, hideSetting) {
|
|
82
|
+
state.hideSetting = hideSetting
|
|
83
|
+
},
|
|
84
|
+
correctPageMinHeight (state, minHeight) {
|
|
85
|
+
state.pageMinHeight += minHeight
|
|
86
|
+
},
|
|
87
|
+
setMenuData (state, menuData) {
|
|
88
|
+
state.menuData = menuData
|
|
89
|
+
},
|
|
90
|
+
setAsyncRoutes (state, asyncRoutes) {
|
|
91
|
+
state.asyncRoutes = asyncRoutes
|
|
92
|
+
},
|
|
93
|
+
setPageWidth (state, pageWidth) {
|
|
94
|
+
state.pageWidth = pageWidth
|
|
95
|
+
},
|
|
96
|
+
setActivatedFirst (state, activatedFirst) {
|
|
97
|
+
state.activatedFirst = activatedFirst
|
|
98
|
+
},
|
|
99
|
+
setFixedTabs (state, fixedTabs) {
|
|
100
|
+
state.fixedTabs = fixedTabs
|
|
101
|
+
},
|
|
102
|
+
setCustomTitle (state, { path, title }) {
|
|
103
|
+
if (title) {
|
|
104
|
+
const obj = state.customTitles.find(item => item.path === path)
|
|
105
|
+
if (obj) {
|
|
106
|
+
obj.title = title
|
|
107
|
+
} else {
|
|
108
|
+
state.customTitles.push({ path, title })
|
|
109
|
+
}
|
|
110
|
+
sessionStorage.setItem(process.env.VUE_APP_TBAS_TITLES_KEY, JSON.stringify(state.customTitles))
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
package/src/utils/i18n.js
CHANGED
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
import Vue from 'vue'
|
|
2
|
-
import VueI18n from 'vue-i18n'
|
|
3
|
-
import routesI18n from '@vue2-client/router/i18n'
|
|
4
|
-
import './Objects'
|
|
5
|
-
import { getI18nKey } from '@vue2-client/utils/routerUtil'
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* 创建 i18n 配置
|
|
9
|
-
* @param locale 本地化语言
|
|
10
|
-
* @param fallback 回退语言
|
|
11
|
-
* @returns {VueI18n}
|
|
12
|
-
*/
|
|
13
|
-
function initI18n (locale, fallback) {
|
|
14
|
-
Vue.use(VueI18n)
|
|
15
|
-
const i18nOptions = {
|
|
16
|
-
locale,
|
|
17
|
-
fallbackLocale: fallback,
|
|
18
|
-
silentFallbackWarn: true
|
|
19
|
-
}
|
|
20
|
-
return new VueI18n(i18nOptions)
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* 根据 router options 配置生成 国际化语言
|
|
25
|
-
* @param lang
|
|
26
|
-
* @param routes
|
|
27
|
-
* @param valueKey
|
|
28
|
-
* @returns {*}
|
|
29
|
-
*/
|
|
30
|
-
function generateI18n (lang, routes, valueKey) {
|
|
31
|
-
routes.forEach(route => {
|
|
32
|
-
const keys = getI18nKey(route.fullPath).split('.')
|
|
33
|
-
const value = valueKey === 'path' ? route[valueKey].split('/').filter(item => !item.startsWith(':') && item != '').join('.') : route[valueKey]
|
|
34
|
-
lang.assignProps(keys, value)
|
|
35
|
-
if (route.children) {
|
|
36
|
-
generateI18n(lang, route.children, valueKey)
|
|
37
|
-
}
|
|
38
|
-
})
|
|
39
|
-
return lang
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* 格式化 router.options.routes,生成 fullPath
|
|
44
|
-
* @param routes
|
|
45
|
-
* @param parentPath
|
|
46
|
-
*/
|
|
47
|
-
function formatFullPath (routes, parentPath = '') {
|
|
48
|
-
routes.forEach(route => {
|
|
49
|
-
const isFullPath = route.path.substring(0, 1) === '/'
|
|
50
|
-
route.fullPath = isFullPath ? route.path : (parentPath === '/' ? parentPath + route.path : parentPath + '/' + route.path)
|
|
51
|
-
if (route.children) {
|
|
52
|
-
formatFullPath(route.children, route.fullPath)
|
|
53
|
-
}
|
|
54
|
-
})
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* 从路由提取国际化数据
|
|
59
|
-
* @param i18n
|
|
60
|
-
* @param routes
|
|
61
|
-
*/
|
|
62
|
-
function mergeI18nFromRoutes (i18n, routes) {
|
|
63
|
-
formatFullPath(routes)
|
|
64
|
-
// eslint-disable-next-line no-new-object
|
|
65
|
-
const CN = generateI18n(new Object(), routes, 'name')
|
|
66
|
-
// eslint-disable-next-line no-new-object
|
|
67
|
-
const US = generateI18n(new Object(), routes, 'path')
|
|
68
|
-
i18n.mergeLocaleMessage('CN', CN)
|
|
69
|
-
i18n.mergeLocaleMessage('US', US)
|
|
70
|
-
const messages = routesI18n.messages
|
|
71
|
-
Object.keys(messages).forEach(lang => {
|
|
72
|
-
i18n.mergeLocaleMessage(lang, messages[lang])
|
|
73
|
-
})
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
export {
|
|
77
|
-
initI18n,
|
|
78
|
-
mergeI18nFromRoutes,
|
|
79
|
-
formatFullPath
|
|
80
|
-
}
|
|
1
|
+
import Vue from 'vue'
|
|
2
|
+
import VueI18n from 'vue-i18n'
|
|
3
|
+
import routesI18n from '@vue2-client/router/i18n'
|
|
4
|
+
import './Objects'
|
|
5
|
+
import { getI18nKey } from '@vue2-client/utils/routerUtil'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 创建 i18n 配置
|
|
9
|
+
* @param locale 本地化语言
|
|
10
|
+
* @param fallback 回退语言
|
|
11
|
+
* @returns {VueI18n}
|
|
12
|
+
*/
|
|
13
|
+
function initI18n (locale, fallback) {
|
|
14
|
+
Vue.use(VueI18n)
|
|
15
|
+
const i18nOptions = {
|
|
16
|
+
locale,
|
|
17
|
+
fallbackLocale: fallback,
|
|
18
|
+
silentFallbackWarn: true
|
|
19
|
+
}
|
|
20
|
+
return new VueI18n(i18nOptions)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* 根据 router options 配置生成 国际化语言
|
|
25
|
+
* @param lang
|
|
26
|
+
* @param routes
|
|
27
|
+
* @param valueKey
|
|
28
|
+
* @returns {*}
|
|
29
|
+
*/
|
|
30
|
+
function generateI18n (lang, routes, valueKey) {
|
|
31
|
+
routes.forEach(route => {
|
|
32
|
+
const keys = getI18nKey(route.fullPath).split('.')
|
|
33
|
+
const value = valueKey === 'path' ? route[valueKey].split('/').filter(item => !item.startsWith(':') && item != '').join('.') : route[valueKey]
|
|
34
|
+
lang.assignProps(keys, value)
|
|
35
|
+
if (route.children) {
|
|
36
|
+
generateI18n(lang, route.children, valueKey)
|
|
37
|
+
}
|
|
38
|
+
})
|
|
39
|
+
return lang
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* 格式化 router.options.routes,生成 fullPath
|
|
44
|
+
* @param routes
|
|
45
|
+
* @param parentPath
|
|
46
|
+
*/
|
|
47
|
+
function formatFullPath (routes, parentPath = '') {
|
|
48
|
+
routes.forEach(route => {
|
|
49
|
+
const isFullPath = route.path.substring(0, 1) === '/'
|
|
50
|
+
route.fullPath = isFullPath ? route.path : (parentPath === '/' ? parentPath + route.path : parentPath + '/' + route.path)
|
|
51
|
+
if (route.children) {
|
|
52
|
+
formatFullPath(route.children, route.fullPath)
|
|
53
|
+
}
|
|
54
|
+
})
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* 从路由提取国际化数据
|
|
59
|
+
* @param i18n
|
|
60
|
+
* @param routes
|
|
61
|
+
*/
|
|
62
|
+
function mergeI18nFromRoutes (i18n, routes) {
|
|
63
|
+
formatFullPath(routes)
|
|
64
|
+
// eslint-disable-next-line no-new-object
|
|
65
|
+
const CN = generateI18n(new Object(), routes, 'name')
|
|
66
|
+
// eslint-disable-next-line no-new-object
|
|
67
|
+
const US = generateI18n(new Object(), routes, 'path')
|
|
68
|
+
i18n.mergeLocaleMessage('CN', CN)
|
|
69
|
+
i18n.mergeLocaleMessage('US', US)
|
|
70
|
+
const messages = routesI18n.messages
|
|
71
|
+
Object.keys(messages).forEach(lang => {
|
|
72
|
+
i18n.mergeLocaleMessage(lang, messages[lang])
|
|
73
|
+
})
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export {
|
|
77
|
+
initI18n,
|
|
78
|
+
mergeI18nFromRoutes,
|
|
79
|
+
formatFullPath
|
|
80
|
+
}
|