enterprise.store.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. }
  11. export const useEnterpriseStore = defineStore("enterprise", {
  12. state: () => ({
  13. enterpriseList: [] as EnterpriseItem[],
  14. currentEnterprise: null as EnterpriseItem | null,
  15. }),
  16. getters: {
  17. getEnterpriseList(state) {
  18. state.enterpriseList = state.enterpriseList || JSON.parse(sessionStorage.getItem(ENTERPRISE_LIST_KEY) || '[]');
  19. return state.enterpriseList;
  20. },
  21. getCurrentEnterprise(state) {
  22. state.currentEnterprise = state.currentEnterprise || JSON.parse(sessionStorage.getItem(CURRENT_ENTERPRISE_KEY) || '')
  23. return state.currentEnterprise;
  24. },
  25. hasEnterprise() {
  26. return this.getEnterpriseList.length > 0;
  27. },
  28. },
  29. actions: {
  30. async fetchEnterpriseList() {
  31. try {
  32. const res = await EnterpriseAPI.list(1, 100);
  33. const list = res.data.data?.items || [];
  34. return list.map((item: any) => ({
  35. enterprise_id: item.enterprise_id,
  36. account_id: item.account_id,
  37. name: item.name,
  38. short_name: item.short_name,
  39. ...item,
  40. }));
  41. } catch (error) {
  42. console.error("获取企业列表失败:", error);
  43. }
  44. },
  45. async loadEnterpriseList() {
  46. // 先从sessionStorage获取企业列表,避免重复请求
  47. let enterpriseListJson = sessionStorage.getItem(ENTERPRISE_LIST_KEY);
  48. if (enterpriseListJson) {
  49. this.enterpriseList = JSON.parse(enterpriseListJson);
  50. } else {
  51. this.enterpriseList = await this.fetchEnterpriseList() || [];
  52. if (this.enterpriseList.length > 0) {
  53. sessionStorage.setItem(ENTERPRISE_LIST_KEY, JSON.stringify(this.enterpriseList));
  54. }
  55. }
  56. },
  57. setCurrentEnterprise(enterpriseId: string) {
  58. this.currentEnterprise = this.enterpriseList.find((e) => e.enterprise_id === enterpriseId) || null;
  59. if (this.currentEnterprise) {
  60. sessionStorage.setItem(CURRENT_ENTERPRISE_KEY, JSON.stringify(this.currentEnterprise));
  61. }
  62. },
  63. clearEnterprise() {
  64. this.currentEnterprise = null;
  65. this.enterpriseList = [];
  66. sessionStorage.removeItem(ENTERPRISE_LIST_KEY);
  67. sessionStorage.removeItem(CURRENT_ENTERPRISE_KEY);
  68. },
  69. },
  70. });