Skip to content

Commit 13c3d74

Browse files
committed
fix #198
1 parent bfc0738 commit 13c3d74

File tree

3 files changed

+43
-31
lines changed

3 files changed

+43
-31
lines changed

src/layout/header-aside/components/header-size/index.vue

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -28,27 +28,6 @@ export default {
2828
]
2929
}
3030
},
31-
watch: {
32-
// 注意 这里是关键
33-
// 因为需要访问 this.$ELEMENT 所以只能在这里使用这种方式
34-
value: {
35-
handler (val, oldVal) {
36-
// https://github.com/d2-projects/d2-admin/pull/129
37-
if (oldVal) {
38-
// 这个情况在已经加载完页面 用户改变了尺寸时触发
39-
this.$ELEMENT.size = val
40-
// 由于已经加载过设置 需要清空缓存设置
41-
this.pageKeepAliveClean()
42-
// 由于已经加载过设置 需要刷新此页面
43-
this.$router.replace('/refresh')
44-
} else {
45-
// 这个情况在刷新页面时触发
46-
this.$ELEMENT.size = val
47-
}
48-
},
49-
immediate: true
50-
}
51-
},
5231
methods: {
5332
...mapMutations({
5433
pageKeepAliveClean: 'd2admin/page/keepAliveClean'

src/router/index.js

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,17 @@ const router = new VueRouter({
2323
* 路由拦截
2424
* 权限验证
2525
*/
26-
router.beforeEach((to, from, next) => {
26+
router.beforeEach(async (to, from, next) => {
27+
// 等待数据加载 https://github.com/d2-projects/d2-admin/issues/201
28+
await new Promise (resolve => {
29+
const timer = setInterval(() => {
30+
if (store.state.d2admin.page.openedLoaded) {
31+
resolve(clearInterval(timer))
32+
}
33+
}, 10)
34+
})
35+
// 等待加载组件尺寸 https://github.com/d2-projects/d2-admin/issues/198
36+
await store.dispatch('d2admin/size/isLoaded')
2737
// 进度条
2838
NProgress.start()
2939
// 关闭搜索面板
@@ -55,17 +65,9 @@ router.beforeEach((to, from, next) => {
5565

5666

5767

58-
router.afterEach(async to => {
68+
router.afterEach(to => {
5969
// 进度条
6070
NProgress.done()
61-
// 等待数据加载 https://github.com/d2-projects/d2-admin/issues/201
62-
await new Promise (resolve => {
63-
const timer = setInterval(() => {
64-
if (store.state.d2admin.page.openedLoaded) {
65-
resolve(clearInterval(timer))
66-
}
67-
}, 10)
68-
})
6971
// 多页控制 打开新的页面
7072
store.dispatch('d2admin/page/open', to)
7173
// 更改标题

src/store/modules/d2admin/modules/size.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,37 @@
1+
import Vue from 'vue'
2+
import router from '@/router'
3+
14
export default {
25
namespaced: true,
36
state: {
47
// 尺寸
58
value: '' // medium small mini
69
},
710
actions: {
11+
/**
12+
* @description 将当前的设置应用到 element
13+
* @param {Boolean} refresh 是否在设置之后刷新页面
14+
*/
15+
apply ({ state, commit }, refresh) {
16+
Vue.prototype.$ELEMENT.size = state.value
17+
if (refresh) {
18+
commit('d2admin/page/keepAliveClean', null, { root: true })
19+
router.replace('/refresh')
20+
}
21+
},
22+
/**
23+
* @description 确认组件尺寸已经加载 https://github.com/d2-projects/d2-admin/issues/198
24+
*/
25+
isLoaded ({ state }) {
26+
if (state.value) return Promise.resolve()
27+
return new Promise(resolve => {
28+
const timer = setInterval(() => {
29+
if (state.value) {
30+
resolve(clearInterval(timer))
31+
}
32+
}, 10)
33+
})
34+
},
835
/**
936
* @description 设置尺寸
1037
* @param {Object} state vuex state
@@ -14,6 +41,8 @@ export default {
1441
return new Promise(async resolve => {
1542
// store 赋值
1643
state.value = size
44+
// 应用
45+
dispatch('apply', true)
1746
// 持久化
1847
await dispatch('d2admin/db/set', {
1948
dbName: 'sys',
@@ -38,6 +67,8 @@ export default {
3867
defaultValue: 'default',
3968
user: true
4069
}, { root: true })
70+
// 应用
71+
dispatch('apply')
4172
// end
4273
resolve()
4374
})

0 commit comments

Comments
 (0)