@@ -168,7 +173,7 @@ export default {
},
computed: {
- ...mapState(['userId', 'cacheDialogs']),
+ ...mapState(['userId', 'cacheDialogs', 'loadDialogs']),
dialogId() {
const {dialogId} = this.$route.params;
diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js
index ca3c0852c..f2430a914 100644
--- a/resources/assets/js/store/actions.js
+++ b/resources/assets/js/store/actions.js
@@ -338,7 +338,7 @@ export default {
* @param data {userid}
*/
getUserBasic({state, dispatch}, data) {
- if (state.cacheLoading["loadUserBasic"] === true) {
+ if (state.loadUserBasic === true) {
data && state.cacheUserWait.push(data);
return;
}
@@ -370,7 +370,7 @@ export default {
array = array.slice(0, 30)
}
//
- state.cacheLoading["loadUserBasic"] = true;
+ state.loadUserBasic = true;
dispatch("call", {
url: 'users/basic',
data: {
@@ -383,11 +383,11 @@ export default {
data._time = time;
dispatch("saveUserBasic", data);
});
- state.cacheLoading["loadUserBasic"] = false;
+ state.loadUserBasic = false;
dispatch("getUserBasic");
}).catch(e => {
console.warn(e);
- state.cacheLoading["loadUserBasic"] = false;
+ state.loadUserBasic = false;
dispatch("getUserBasic");
});
},
@@ -711,6 +711,7 @@ export default {
reject({msg: 'Parameter error'});
return;
}
+ state.loadProjects++;
dispatch("call", {
url: 'project/lists',
data: data || {}
@@ -721,6 +722,8 @@ export default {
}).catch(e => {
console.warn(e);
reject(e)
+ }).finally(_ => {
+ state.loadProjects--;
});
});
},
@@ -1204,12 +1207,22 @@ export default {
* @param state
* @param dispatch
* @param getters
+ * @param timeout
*/
- getTaskForDashboard({state, dispatch, getters}) {
- if (state.cacheLoading["loadDashboardTasks"] === true) {
+ getTaskForDashboard({state, dispatch, getters}, timeout) {
+ if (typeof timeout === "number") {
+ window.__getTaskForDashboard && clearTimeout(window.__getTaskForDashboard)
+ if (timeout > -1) {
+ window.__getTaskForDashboard = setTimeout(() => {
+ dispatch("getTaskForDashboard", null)
+ }, timeout)
+ }
return;
}
- state.cacheLoading["loadDashboardTasks"] = true;
+ if (state.loadDashboardTasks === true) {
+ return;
+ }
+ state.loadDashboardTasks = true;
//
const time = $A.Time()
const {today, overdue,all} = getters.dashboardTask;
@@ -1220,7 +1233,7 @@ export default {
let loadIng = 3;
let call = () => {
if (loadIng <= 0) {
- state.cacheLoading["loadDashboardTasks"] = false;
+ state.loadDashboardTasks = false;
//
const {today, overdue,all} = getters.dashboardTask;
const newIds = today.filter(task => task._time >= time).map(({id}) => id)
@@ -1935,14 +1948,18 @@ export default {
return;
}
let data = {};
- if (atAfter === true && state.cacheDialogs.length > 0) {
- const tmpList = state.cacheDialogs.sort((a, b) => {
- if (a.top_at || b.top_at) {
- return $A.Date(b.top_at) - $A.Date(a.top_at);
- }
- return $A.Date(b.last_at) - $A.Date(a.last_at);
- })
- data.at_after = tmpList[0].last_at;
+ if (atAfter === true) {
+ if (state.cacheDialogs.length > 0) {
+ const tmpList = state.cacheDialogs.sort((a, b) => {
+ if (a.top_at || b.top_at) {
+ return $A.Date(b.top_at) - $A.Date(a.top_at);
+ }
+ return $A.Date(b.last_at) - $A.Date(a.last_at);
+ })
+ data.at_after = tmpList[0].last_at;
+ }
+ } else {
+ state.loadDialogs++;
}
dispatch("call", {
url: 'dialog/lists',
@@ -1953,6 +1970,10 @@ export default {
}).catch(e => {
console.warn(e);
reject(e)
+ }).finally(_ => {
+ if (atAfter !== true) {
+ state.loadDialogs--;
+ }
});
});
},
diff --git a/resources/assets/js/store/state.js b/resources/assets/js/store/state.js
index cc8550c06..2974c6849 100644
--- a/resources/assets/js/store/state.js
+++ b/resources/assets/js/store/state.js
@@ -6,8 +6,11 @@ const stateData = {
// 浏览器宽度≤768返回true
windowMax768: window.innerWidth <= 768,
- // 数据缓存
- cacheLoading: {},
+ // 加载状态
+ loadDashboardTasks: false,
+ loadUserBasic: false,
+ loadProjects: 0,
+ loadDialogs: 0,
// User
cacheUserActive: {},
diff --git a/resources/assets/sass/pages/components/project-list.scss b/resources/assets/sass/pages/components/project-list.scss
index a8afe9985..f110ace09 100644
--- a/resources/assets/sass/pages/components/project-list.scss
+++ b/resources/assets/sass/pages/components/project-list.scss
@@ -23,6 +23,19 @@
border-radius: 12px;
overflow: hidden;
+ .search-pre {
+ width: 32px;
+ height: 32px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ .common-loading {
+ width: 16px;
+ height: 16px;
+ margin: 0;
+ }
+ }
+
.ivu-input {
border-color: transparent;
background-color: transparent;
diff --git a/resources/assets/sass/pages/page-dashboard.scss b/resources/assets/sass/pages/page-dashboard.scss
index 8c5f97cfc..13144d49b 100644
--- a/resources/assets/sass/pages/page-dashboard.scss
+++ b/resources/assets/sass/pages/page-dashboard.scss
@@ -30,10 +30,20 @@
word-wrap: break-word;
}
.dashboard-desc {
+ display: flex;
+ align-items: center;
margin-top: 18px;
padding: 0 12px;
color: #888888;
font-size: 13px;
+ .dashboard-load {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 14px;
+ height: 14px;
+ margin: 0 0 0 4px;
+ }
}
.dashboard-block {
margin-top: 18px;
diff --git a/resources/assets/sass/pages/page-messenger.scss b/resources/assets/sass/pages/page-messenger.scss
index e3477c91a..b2ef91ece 100644
--- a/resources/assets/sass/pages/page-messenger.scss
+++ b/resources/assets/sass/pages/page-messenger.scss
@@ -36,6 +36,18 @@
margin: 0 4px;
border-radius: 12px;
overflow: hidden;
+ .search-pre {
+ width: 32px;
+ height: 32px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ .common-loading {
+ width: 16px;
+ height: 16px;
+ margin: 0;
+ }
+ }
.ivu-input {
border-color: transparent;
background-color: transparent;