collect.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. /**
  7. * 采集模块状态
  8. */
  9. export const useCollectStore = defineStore('collect', () => {
  10. const collectableModules = ref(new Map<string, number>());
  11. const collectableAllModules = ref(new Map<string, number>());
  12. const collectableCatalogs = ref<number[]>([]);
  13. const authStore = useAuthStore();
  14. /**
  15. * 设置采集模块状态数据
  16. */
  17. function setCollectableModules(modules: Map<string, number>) {
  18. collectableModules.value = modules;
  19. }
  20. /**
  21. * 判断是否可以采集指定目录
  22. */
  23. function canCollectCatalog(catalogId: number) {
  24. if (authStore.isAdmin)
  25. return true;
  26. return collectableCatalogs.value.includes(catalogId);
  27. }
  28. /**
  29. * 判断是否可以采集指定模块
  30. */
  31. function canCollect(module: string) {
  32. if (authStore.isAdmin)
  33. return true;
  34. if (collectableModules.value.has(CollectableModulesNameMapping[module]))
  35. return true;
  36. return collectableModules.value.has(module);
  37. }
  38. /**
  39. * 获取采集模块的内部名称
  40. */
  41. function getCollectModuleId(module: string) {
  42. if (collectableAllModules.value.has(CollectableModulesNameMapping[module]))
  43. return collectableAllModules.value.get(CollectableModulesNameMapping[module]);
  44. return collectableAllModules.value.get(module);
  45. }
  46. /**
  47. * 从ID获取采集模块的内部名称
  48. */
  49. function getCollectModuleInternalNameById(id: number) {
  50. for (const [key, value] of collectableAllModules.value) {
  51. if (value == id) {
  52. for (const k2 in CollectableModulesNameMapping) {
  53. if (CollectableModulesNameMapping[k2] == key) {
  54. return k2;
  55. }
  56. }
  57. }
  58. }
  59. return '';
  60. }
  61. async function loadCollectableModules() {
  62. const res = await VillageApi.getVolunteerInfo();
  63. const collectableModules = res.collectModule || [];
  64. const collectableModulesMap = await VillageApi.getCollectModuleMap();
  65. for (const [k,v] of collectableModulesMap)
  66. collectableAllModules.value.set(k, v);
  67. const needRemoveKeys = new Set<string>();
  68. if (!authStore.isAdmin) {
  69. for (const [key,id] of collectableModulesMap)
  70. if (!collectableModules.includes(id))
  71. needRemoveKeys.add(key);
  72. }
  73. for (const key of needRemoveKeys)
  74. collectableModulesMap.delete(key);
  75. collectableCatalogs.value = res.catalogIds || [];
  76. console.log('collectableModulesMap', collectableModules, collectableModulesMap);
  77. setCollectableModules(collectableModulesMap);
  78. }
  79. /**
  80. * 判断采集模块状态是否为空
  81. */
  82. const isEmpty = computed(() => collectableModules.value.size === 0 && collectableCatalogs.value.length === 0);
  83. return {
  84. isEmpty,
  85. collectableModules,
  86. setCollectableModules,
  87. getCollectModuleInternalNameById,
  88. getCollectModuleId,
  89. canCollect,
  90. canCollectCatalog,
  91. loadCollectableModules,
  92. }
  93. })