4848 <template #default =" { data } " >
4949 <router-link class =" el-tree-node__label" :to =" menu_url(data)" >
5050 <span class =" u-name" v-text =" data.name" ></span >
51- <em v-if =" data.achievements_count " class =" u-count" >
51+ <em v-if =" getMenuAchievementCount( data) " class =" u-count" >
5252 (<span v-if =" currentRole" >{{
5353 `${
5454 uncompleted
55- ? data.achievements_count +
56- ~~data.own_achievements_count -
57- getMenuCompleted(data)
55+ ? Math.max(0, getMenuAchievementCount(data) - getMenuCompleted(data))
5856 : getMenuCompleted(data)
5957 }/`
6058 }}</span >
61- <span >{{ `${data.achievements_count + ~~data.own_achievements_count}` }}</span
62- >)
59+ <span >{{ getMenuAchievementCount(data) }}</span >)
6360 </em >
6461 </router-link >
6562 </template >
@@ -74,7 +71,8 @@ import RoleSelect from "@/components/common/role-select.vue";
7471import bus from " @/store/bus" ;
7572import User from " @jx3box/jx3box-common/js/user" ;
7673import { showSchoolIcon } from " @jx3box/jx3box-common/js/utils" ;
77- import { flattenDeep , cloneDeep , omit } from " lodash" ;
74+ import { omit } from " lodash" ;
75+ import { collectMenuAchievementIds } from " @/utils/achievement-statistics" ;
7876export default {
7977 name: " Sidebar" ,
8078 props: [" sidebar" ],
@@ -127,6 +125,9 @@ export default {
127125 achievementsVirtual () {
128126 return this .$store .state .achievementsVirtual ;
129127 },
128+ achievementMetadata () {
129+ return this .$store .state .achievementMetadata ;
130+ },
130131 selectedGeneral: {
131132 get () {
132133 return this .sidebar .general ;
@@ -152,7 +153,7 @@ export default {
152153 },
153154 total ({ menus }) {
154155 const numList = menus .map ((data ) => {
155- return data . achievements_count + data . own_achievements_count ;
156+ return this . getMenuAchievementCount ( data) ;
156157 });
157158 return numList .reduce ((acc , cur ) => {
158159 return acc + cur;
@@ -224,44 +225,21 @@ export default {
224225 },
225226 },
226227 methods: {
227- getLastAchievement (achievements = []) {
228- // 娓告垙瑙掕壊
229- // 姣斿浼犲姛锛屽彧鍙栨渶鍚庝竴涓紶鍔?00娆$殑ID浣滀负鏄惁瀹屾垚鐨勪緷鎹?
230- if (! Array .isArray (achievements)) return [];
231- return achievements .map ((achievement ) => {
232- if (Array .isArray (achievement)) {
233- // 姣斿浼犲姛锛屽彧鍙栨渶鍚庝竴涓紶鍔?00娆$殑ID浣滀负鏄惁瀹屾垚鐨勪緷鎹?
234- const lastOne = achievement? .[achievement .length - 1 ];
235- return lastOne;
236- } else {
237- return achievement;
238- }
228+ getMenuAchievementIds (data ) {
229+ return collectMenuAchievementIds (data).filter ((id ) => {
230+ const item = this .achievementMetadata [id];
231+ return item? .visible && item .general === this .sidebar .general ;
239232 });
240233 },
234+ getMenuAchievementCount (data ) {
235+ return this .getMenuAchievementIds (data).length ;
236+ },
241237 getMenuCompleted (data , achievementsVirtual , achievements ) {
242- const newData = cloneDeep (data);
243- const newDataAchievements = this .isVirtual
244- ? flattenDeep (newData .achievements )
245- : this .getLastAchievement (newData .achievements );
246- newData .all_achievements = newData .children
247- ? Array .from (
248- new Set (
249- newDataAchievements .concat (
250- flattenDeep (
251- newData .children .map ((item ) => {
252- return this .isVirtual
253- ? item .achievements
254- : this .getLastAchievement (item .achievements );
255- })
256- )
257- )
258- )
259- )
260- : newDataAchievements;
261238 const list = this .isVirtual
262239 ? achievementsVirtual || this .achievementsVirtual
263240 : achievements || this .achievements ;
264- return newData .all_achievements .filter ((item ) => list .includes (item + " " ))? .length ;
241+ const completedIds = new Set ((list || []).map (String ));
242+ return this .getMenuAchievementIds (data).filter ((id ) => completedIds .has (id)).length ;
265243 },
266244 filterNode (value , data ) {
267245 if (! value) return true ;
@@ -338,7 +316,7 @@ export default {
338316 // return;
339317 // }
340318
341- getMenus ({ general }).then (
319+ getMenus ({ general, client : this . $store . state . client }).then (
342320 (data ) => {
343321 data = data .data ;
344322 if (data .code === 200 ) {
0 commit comments