collect.ts 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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 collectableCatalogs = ref<number[]>([]);
  9. const authStore = useAuthStore();
  10. function setCollectableModules(modules: Map<string, number>) {
  11. collectableModules.value = modules;
  12. }
  13. function canCollectCatalog(catalogId: number) {
  14. if (authStore.isAdmin)
  15. return true;
  16. return collectableCatalogs.value.includes(catalogId);
  17. }
  18. function canCollect(module: string) {
  19. if (authStore.isAdmin)
  20. return true;
  21. if (collectableModules.value.has(CollectableModulesNameMapping[module]))
  22. return true;
  23. return collectableModules.value.has(module);
  24. }
  25. function getCollectModuleId(module: string) {
  26. if (collectableModules.value.has(CollectableModulesNameMapping[module]))
  27. return collectableModules.value.get(CollectableModulesNameMapping[module]);
  28. return collectableModules.value.get(module);
  29. }
  30. function getCollectModuleInternalNameById(id: number) {
  31. console.log('collectableModules.value', id, collectableModules.value);
  32. for (const [key, value] of collectableModules.value) {
  33. if (value == id) {
  34. for (const k2 in CollectableModulesNameMapping) {
  35. if (CollectableModulesNameMapping[k2] == key) {
  36. return k2;
  37. }
  38. }
  39. }
  40. }
  41. return '';
  42. }
  43. async function loadCollectableModules() {
  44. const res = await VillageApi.getVolunteerInfo();
  45. const collectableModules = res.collectModule || [];
  46. const collectableModulesMap = await VillageApi.getCollectModuleMap();
  47. const needRemoveKeys = new Set<string>();
  48. if (!authStore.isAdmin) {
  49. for (const [key,id] of collectableModulesMap)
  50. if (!collectableModules.includes(id))
  51. needRemoveKeys.add(key);
  52. }
  53. for (const key of needRemoveKeys)
  54. collectableModulesMap.delete(key);
  55. collectableCatalogs.value = res.catalogIds || [];
  56. console.log('collectableModulesMap', collectableModulesMap);
  57. setCollectableModules(collectableModulesMap);
  58. }
  59. const isEmpty = computed(() => collectableModules.value.size === 0 && collectableCatalogs.value.length === 0);
  60. return {
  61. isEmpty,
  62. collectableModules,
  63. setCollectableModules,
  64. getCollectModuleInternalNameById,
  65. getCollectModuleId,
  66. canCollect,
  67. canCollectCatalog,
  68. loadCollectableModules,
  69. }
  70. })