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.
74 lines
1.9 KiB
74 lines
1.9 KiB
2 years ago
|
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(): ErrorLogInfo[] {
|
||
|
return this.errorLogInfoList || []
|
||
|
},
|
||
|
getErrorLogListCount(): number {
|
||
|
return this.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)
|
||
|
}
|