You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.9 KiB
73 lines
1.9 KiB
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<ErrorLogInfo[]> |
|
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<ErrorLogInfo> = { |
|
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) |
|
}
|
|
|