import type { ErrorLogInfo } from '@/types/store' import { defineStore } from 'pinia' import { store } from '@/store' import { formatToDateTime } from '@/utils/dateUtil' import projectSetting from '@/settings/projectSetting' import { ErrorTypeEnum } from '@/enums/exceptionEnum' export interface ErrorLogState { errorLogInfoList: Nullable errorLogListCount: number } export const useErrorLogStore = defineStore('app-error-log', { state: (): ErrorLogState => ({ errorLogInfoList: null, errorLogListCount: 0 }), getters: { getErrorLogInfoList(state): ErrorLogInfo[] { return state.errorLogInfoList || [] }, getErrorLogListCount(state): number { return state.errorLogListCount } }, actions: { addErrorLogInfo(info: ErrorLogInfo) { const item = { ...info, time: formatToDateTime(new Date()) } this.errorLogInfoList = [item, ...(this.errorLogInfoList || [])] this.errorLogListCount += 1 }, setErrorLogListCount(count: number): void { this.errorLogListCount = count }, /** * Triggered after ajax request error * @param error * @returns */ addAjaxErrorInfo(error) { const { useErrorHandle } = projectSetting if (!useErrorHandle) { return } const errInfo: Partial = { message: error.message, type: ErrorTypeEnum.AJAX } if (error.response) { const { config: { url = '', data: params = '', method = 'get', headers = {} } = {}, data = {} } = error.response errInfo.url = url errInfo.name = 'Ajax Error!' errInfo.file = '-' errInfo.stack = JSON.stringify(data) errInfo.detail = JSON.stringify({ params, method, headers }) } this.addErrorLogInfo(errInfo as ErrorLogInfo) } } }) // Need to be used outside the setup export function useErrorLogStoreWithOut() { return useErrorLogStore(store) }