|
@@ -0,0 +1,133 @@
|
|
|
+import { state } from '@/state'
|
|
|
+import dayjs from 'dayjs'
|
|
|
+import request from '@/helpers/request'
|
|
|
+
|
|
|
+/** 错误信息列表 */
|
|
|
+export const api_sysExceptionLogSave = (params: any): Promise<any> => {
|
|
|
+ return request.post('/sysExceptionLog/save', {
|
|
|
+ prefix: '/api-auth',
|
|
|
+ data: params
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+type uploadType = {
|
|
|
+ clientType?: string
|
|
|
+ appKey: string
|
|
|
+ phone?: string | undefined | null
|
|
|
+ userAgent?: string
|
|
|
+ appType?: string
|
|
|
+ content?: string
|
|
|
+ exceptionType?: string
|
|
|
+ exceptionTime?: string
|
|
|
+ deviceType?: string | null
|
|
|
+ deviceVersion?: string | null
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 页面有报错时上传错误日志
|
|
|
+ * @params
|
|
|
+ */
|
|
|
+export default function useErrorLog() {
|
|
|
+ const _whiteBlanks = ['/student-register']
|
|
|
+
|
|
|
+ let _defaultParams = {
|
|
|
+ clientType: 'STUDENT',
|
|
|
+ appKey: 'KLX',
|
|
|
+ phone: '',
|
|
|
+ userAgent: '',
|
|
|
+ appType: 'WEB',
|
|
|
+ content: '',
|
|
|
+ exceptionType: 'ERROR',
|
|
|
+ exceptionTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
|
|
|
+ deviceType: null,
|
|
|
+ deviceVersion: null
|
|
|
+ }
|
|
|
+
|
|
|
+ const _uploadErrorLog = async (event: any) => {
|
|
|
+ try {
|
|
|
+ state.user.data.phone
|
|
|
+
|
|
|
+ /*
|
|
|
+ 日志上报:1.手机号、应用端 iOS|安卓 App类型(老师端|学生端|web)、App版本、系统信息(系统版本|web userAgent)、错误信息(什么位置出现,错误内容) 错误时间 上报类型(错误、埋点)
|
|
|
+ Phone、 type 、content
|
|
|
+ 手机号|上报类型 (error、record)|content 内容jsonString (应用端 iOS|安卓 App类型(老师端|学生端|web)、App版本、系统信息(系统版本|web userAgent)、错误信息(什么位置出现,错误内容) 错误时间)
|
|
|
+
|
|
|
+ 手机号 |上报类型 |业务平台|应用端(iOS|安卓)|
|
|
|
+ */
|
|
|
+ const href = window.location.href
|
|
|
+ const index = _whiteBlanks.findIndex(
|
|
|
+ (item: string) => href.indexOf(item) !== -1
|
|
|
+ )
|
|
|
+
|
|
|
+ const whiteIp = [
|
|
|
+ 'online.colexiu.com',
|
|
|
+ 'test.colexiu.com',
|
|
|
+ 'dev.colexiu.com'
|
|
|
+ ]
|
|
|
+ console.log(window.location.hash, index, 'errorLog')
|
|
|
+ if (!whiteIp.includes(window.location.host)) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (!(window.location.hash === '#/' || index !== -1)) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 错误信息
|
|
|
+ // 资源加载失败,可以在这里处理错误
|
|
|
+ const contentError = `Error message: ${event.target.tagName || ''};${
|
|
|
+ event.target.src || event.target.href || ''
|
|
|
+ };lineno: ${event.lineno || ''};message: ${
|
|
|
+ event.message || ''
|
|
|
+ };filename: ${event.filename || ''};fileUrl: ${window.location.href}`
|
|
|
+ // }
|
|
|
+
|
|
|
+ const params = [
|
|
|
+ {
|
|
|
+ ..._defaultParams,
|
|
|
+ phone: state.user.data?.phone,
|
|
|
+ userAgent: window.navigator.userAgent,
|
|
|
+ content: contentError,
|
|
|
+ exceptionTime: dayjs().format('YYYY-MM-DD HH:mm:ss')
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ // console.log(params)
|
|
|
+ await api_sysExceptionLogSave(params)
|
|
|
+ } catch {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 开始监听错误日志并上传
|
|
|
+ */
|
|
|
+ const startListenErrorLog = (params?: uploadType) => {
|
|
|
+ _defaultParams = Object.assign(_defaultParams, params)
|
|
|
+ console.log('mount useErrorLog')
|
|
|
+ window.addEventListener('error', _uploadErrorLog)
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 停止监听
|
|
|
+ */
|
|
|
+ const stopListenErrorLog = () => {
|
|
|
+ window.removeEventListener('error', _uploadErrorLog)
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上传错误日志
|
|
|
+ * @param params
|
|
|
+ */
|
|
|
+ const uploadSingleErrorLog = async (params: uploadType) => {
|
|
|
+ const paramsList = [
|
|
|
+ {
|
|
|
+ ..._defaultParams,
|
|
|
+ ...params
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ await api_sysExceptionLogSave(paramsList)
|
|
|
+ }
|
|
|
+
|
|
|
+ return {
|
|
|
+ startListenErrorLog,
|
|
|
+ stopListenErrorLog,
|
|
|
+ uploadSingleErrorLog
|
|
|
+ }
|
|
|
+}
|