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.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
 
 
 
 

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)
}