collect.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { computed, ref } from 'vue'
  2. import { defineStore } from 'pinia'
  3. import { useAuthStore } from './auth';
  4. import { CollectableModulesNameMapping } from '@/pages/dig/forms/forms';
  5. import VillageApi from '@/api/inhert/VillageApi';
  6. export const useCollectStore = defineStore('collect', () => {
  7. const collectableModules = ref(new Map<string, number>());
  8. const authStore = useAuthStore();
  9. function setCollectableModules(modules: Map<string, number>) {
  10. collectableModules.value = modules;
  11. }
  12. function canCollect(module: string) {
  13. if (authStore.isAdmin)
  14. return true;
  15. if (collectableModules.value.has(CollectableModulesNameMapping[module]))
  16. return true;
  17. return collectableModules.value.has(module);
  18. }
  19. function getCollectModuleId(module: string) {
  20. if (collectableModules.value.has(CollectableModulesNameMapping[module]))
  21. return collectableModules.value.get(CollectableModulesNameMapping[module]);
  22. return collectableModules.value.get(module);
  23. }
  24. function getCollectModuleInternalNameById(id: number) {
  25. for (const [key, value] of collectableModules.value) {
  26. if (value == id) {
  27. for (const k2 in CollectableModulesNameMapping) {
  28. if (CollectableModulesNameMapping[k2] == key) {
  29. return k2;
  30. }
  31. }
  32. }
  33. }
  34. return '';
  35. }
  36. async function loadCollectableModules() {
  37. const res = await VillageApi.getVolunteerInfo();
  38. const collectableModules = res.collectModule || [];
  39. const collectableModulesMap = await VillageApi.getCollectModuleMap();
  40. const needRemoveKeys = new Set<string>();
  41. if (!authStore.isAdmin) {
  42. for (const [key,id] of collectableModulesMap)
  43. if (!collectableModules.includes(key))
  44. needRemoveKeys.add(key);
  45. }
  46. for (const key of needRemoveKeys)
  47. collectableModulesMap.delete(key);
  48. setCollectableModules(collectableModulesMap);
  49. }
  50. const isEmpty = computed(() => collectableModules.value.size === 0);
  51. return {
  52. isEmpty,
  53. collectableModules,
  54. setCollectableModules,
  55. getCollectModuleInternalNameById,
  56. getCollectModuleId,
  57. canCollect,
  58. loadCollectableModules,
  59. }
  60. })