import { defineStore } from "pinia"; import EnterpriseAPI from "@/api/module_payment/enterprise"; const ENTERPRISE_LIST_KEY = 'enterpriseList'; const CURRENT_ENTERPRISE_KEY = 'currentEnterprise'; export interface EnterpriseItem { enterprise_id: string; account_id: string; name: string; short_name?: string; } export const useEnterpriseStore = defineStore("enterprise", { state: () => ({ enterpriseList: [] as EnterpriseItem[], currentEnterprise: null as EnterpriseItem | null, }), getters: { getEnterpriseList(state) { state.enterpriseList = state.enterpriseList || JSON.parse(sessionStorage.getItem(ENTERPRISE_LIST_KEY) || '[]'); return state.enterpriseList; }, getCurrentEnterprise(state) { state.currentEnterprise = state.currentEnterprise || JSON.parse(sessionStorage.getItem(CURRENT_ENTERPRISE_KEY) || '') return state.currentEnterprise; }, hasEnterprise() { return this.getEnterpriseList.length > 0; }, }, actions: { async fetchEnterpriseList() { try { const res = await EnterpriseAPI.list(1, 100); const list = res.data.data?.items || []; return list.map((item: any) => ({ enterprise_id: item.enterprise_id, account_id: item.account_id, name: item.name, short_name: item.short_name, ...item, })); } catch (error) { console.error("获取企业列表失败:", error); } }, async loadEnterpriseList() { // 先从sessionStorage获取企业列表,避免重复请求 let enterpriseListJson = sessionStorage.getItem(ENTERPRISE_LIST_KEY); if (enterpriseListJson) { this.enterpriseList = JSON.parse(enterpriseListJson); } else { this.enterpriseList = await this.fetchEnterpriseList() || []; if (this.enterpriseList.length > 0) { sessionStorage.setItem(ENTERPRISE_LIST_KEY, JSON.stringify(this.enterpriseList)); } } }, setCurrentEnterprise(enterpriseId: string) { this.currentEnterprise = this.enterpriseList.find((e) => e.enterprise_id === enterpriseId) || null; if (this.currentEnterprise) { sessionStorage.setItem(CURRENT_ENTERPRISE_KEY, JSON.stringify(this.currentEnterprise)); } }, clearEnterprise() { this.currentEnterprise = null; this.enterpriseList = []; sessionStorage.removeItem(ENTERPRISE_LIST_KEY); sessionStorage.removeItem(CURRENT_ENTERPRISE_KEY); }, }, });