import { defineStore } from "pinia"; import { getSTSInfo } from "@/api/path/system.api"; import { setLocalStorage, getLocalStorage } from "@/utils"; const INITIALIZE = { local_loading: false, routeSate: "", user_login_information: "", stsClientInfo: {}, wallet: { address: "", privateKey: "", }, ISCREATE: true }; try { const SYSTEM_STORE = getLocalStorage("SYSTEM_STORE"); for (const key in SYSTEM_STORE) { const value = getLocalStorage(key); if (value) INITIALIZE[key] = value; } } catch (err) { window.console.log("无存储数据", err); } export const useSystemStore = defineStore("useSystemStore", { state: () => ({ ...INITIALIZE, }), getters: { getLocalLoading() { return this.local_loading; }, getToken() { if (this.token) return this.token; this.token = window.localStorage?.token || ""; return this.token; }, getWallet() { if (this.wallet.address) return this.wallet; this.wallet = window.localStorage?.wallet || ""; return this.wallet; }, getRouteSate() { return this.routeSate || getLocalStorage("routeSate"); }, getSTSClient() { const stsFn = async () => { const windowVar = window; let longTime = 0; if ( windowVar.stsOSSClient && windowVar.stsOSSClient.stsTokenFreshTime ) { const oldTime = windowVar.stsOSSClient.stsTokenFreshTime.getTime(); const newTime = new Date().getTime(); longTime = newTime - oldTime; } // STS信息 if (!windowVar.stsOSSClient || longTime > 10 * 60 * 1000) { const res = await getSTSInfo({}); const info = res.data; const systemStore = useSystemStore(); const getInfoData = (info) => { const infoData = { endpoint: "https://flexi.oss-cn-hongkong.aliyuncs.com", region: "oss-cn-hongkong", accessKeyId: info.AccessKeyId, accessKeySecret: info.AccessKeySecret, stsToken: info.SecurityToken, bucket: "flexi", cname: true, }; this.stsClientInfo = infoData; systemStore.setStateValue("stsClientInfo", infoData); return infoData; }; getInfoData(info); const client = new windowVar.OSS({ ...this.stsClientInfo, refreshSTSToken: async () => { const res = await getSTSInfo({}); getInfoData(res.data); return { accessKeyId: info.AccessKeyId, accessKeySecret: info.AccessKeySecret, stsToken: info.SecurityToken, }; }, refreshSTSTokenInterval: 30 * 60 * 1000, }); client.putObject = async (data) => { const putRes = await client.put(data.key, data.body); putRes.statusCode = 200; return putRes; }; windowVar.stsOSSClient = client; return client; } return windowVar.stsOSSClient; }; return stsFn; }, getISCREATE(){ return this.ISCREATE || getLocalStorage("ISCREATE"); } }, actions: { localLoading(value = false) { this.local_loading = value; }, // 储存 setStateValue(res) { this[res.key] = res.value; const value = typeof res.value === "string" ? res.value : JSON.stringify(res.value); if (res.localStorage) { // 此方法只处理了简单数据类型 如字符串(token)、布尔之类的 window.localStorage.setItem(res.key, value); } }, }, });