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