enterprise.store.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import { defineStore } from "pinia";
  2. import EnterpriseAPI from "@/api/module_payment/enterprise";
  3. const ENTERPRISE_LIST_KEY = "enterpriseList";
  4. const CURRENT_ENTERPRISE_KEY = "currentEnterprise";
  5. export interface EnterpriseItem {
  6. enterprise_id: string;
  7. account_id: string;
  8. name: string;
  9. short_name?: string;
  10. status?: string;
  11. [key: string]: any;
  12. }
  13. export const useEnterpriseStore = defineStore("enterprise", {
  14. state: () => ({
  15. enterpriseList: [] as EnterpriseItem[],
  16. currentEnterprise: null as EnterpriseItem | null,
  17. }),
  18. getters: {
  19. findEnterpriseById(state) {
  20. return (enterpriseId: string) => {
  21. return state.enterpriseList.find((item) => item.enterprise_id === enterpriseId);
  22. };
  23. },
  24. getEnterpriseList(state) {
  25. // if (state.enterpriseList.length > 0) {
  26. // return state.enterpriseList;
  27. // }
  28. // return JSON.parse(sessionStorage.getItem(ENTERPRISE_LIST_KEY) || "[]");
  29. return state.enterpriseList || [];
  30. },
  31. getCurrentEnterprise(state) {
  32. // if (state.currentEnterprise) {
  33. // return state.currentEnterprise;
  34. // }
  35. // const currentEnterpriseJson = sessionStorage.getItem(CURRENT_ENTERPRISE_KEY);
  36. // if (currentEnterpriseJson) {
  37. // return JSON.parse(currentEnterpriseJson);
  38. // }
  39. // return null;
  40. // 如果当前有选中的企业,直接返回
  41. if (state.currentEnterprise) {
  42. return state.currentEnterprise;
  43. }
  44. // 从sessionStorage获取当前选中的企业
  45. const currentEnterpriseJson = sessionStorage.getItem(CURRENT_ENTERPRISE_KEY);
  46. if (currentEnterpriseJson) {
  47. return JSON.parse(currentEnterpriseJson);
  48. }
  49. // 只有一个企业时自动选中,多个企业时不自动取(admin 需手动选择)
  50. if (state.enterpriseList && state.enterpriseList.length === 1) {
  51. return state.enterpriseList[0];
  52. }
  53. return null;
  54. },
  55. hasEnterprise(state) {
  56. return state.enterpriseList && state.enterpriseList.length > 0;
  57. },
  58. },
  59. actions: {
  60. async fetchEnterpriseList(tenantId?: number) {
  61. try {
  62. const res = await EnterpriseAPI.all(tenantId);
  63. const list = res.data.data || [];
  64. return list.map((item: any) => ({
  65. enterprise_id: item.enterprise_id,
  66. account_id: item.account_id,
  67. name: item.name,
  68. short_name: item.short_name,
  69. status: item.status,
  70. transfer_enabled: item.transfer_enabled,
  71. }));
  72. } catch (error) {
  73. console.error("获取企业列表失败:", error);
  74. }
  75. },
  76. async loadEnterpriseList(tenantId?: number) {
  77. // 传了 tenantId 则强制重载(跳过缓存)
  78. if (tenantId != null) {
  79. this.enterpriseList = (await this.fetchEnterpriseList(tenantId)) || [];
  80. return;
  81. }
  82. if (!this.enterpriseList || this.enterpriseList.length == 0) {
  83. this.enterpriseList = (await this.fetchEnterpriseList()) || [];
  84. console.log("this.enterpriseList:", this.enterpriseList);
  85. }
  86. },
  87. setCurrentEnterprise(enterpriseId: string) {
  88. // this.currentEnterprise =
  89. // this.getEnterpriseList.find((e: EnterpriseItem) => e.enterprise_id === enterpriseId) ||
  90. // null;
  91. // if (this.currentEnterprise) {
  92. // sessionStorage.setItem(CURRENT_ENTERPRISE_KEY, JSON.stringify(this.currentEnterprise));
  93. // }
  94. this.currentEnterprise =
  95. this.enterpriseList.find((e: EnterpriseItem) => e.enterprise_id === enterpriseId) || null;
  96. if (this.currentEnterprise) {
  97. sessionStorage.setItem(CURRENT_ENTERPRISE_KEY, JSON.stringify(this.currentEnterprise));
  98. }
  99. },
  100. clearEnterprise() {
  101. this.currentEnterprise = null;
  102. this.enterpriseList = [];
  103. sessionStorage.removeItem(ENTERPRISE_LIST_KEY);
  104. sessionStorage.removeItem(CURRENT_ENTERPRISE_KEY);
  105. },
  106. },
  107. });