Parcourir la source

Merge branch 'iteration-20240511-errorlog' into online

lex il y a 11 mois
Parent
commit
3a7901634c

+ 4 - 5
index.html

@@ -47,11 +47,10 @@
     window._AMapSecurityConfig = {
       serviceHost: 'https://online.dayaedu.com/_AMapService'
     }
-
-      // window._AMapSecurityConfig = {
-      //     serviceHost: 'http://192.168.3.120:8001/_AMapService',
-      //     // 例如 :serviceHost:'http://1.1.1.1:80/_AMapService',
-      //   }
+    // window._AMapSecurityConfig = {
+    //     serviceHost: 'http://192.168.3.120:8001/_AMapService',
+    //     // 例如 :serviceHost:'http://1.1.1.1:80/_AMapService',
+    //   }
   </script>
 </body>
 

+ 3 - 1
src/components/m-empty/index.tsx

@@ -15,7 +15,9 @@ export default defineComponent({
       default: ''
     },
     image: {
-      type: String as PropType<'empty' | 'network' | '404' | 'icon_empty' | 'list'>,
+      type: String as PropType<
+        'empty' | 'network' | '404' | 'icon_empty' | 'list'
+      >,
       default: 'icon_empty'
     },
     showButton: {

+ 133 - 0
src/hooks/useErrorLog/index.ts

@@ -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('/edu-app/sysExceptionLog/save', {
+    data: params
+  });
+};
+
+type uploadType = {
+  clientType?: 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',
+    '/register-new',
+    '/school-register',
+    '/teaher-register',
+    '/instrumentDetail',
+    '/famousMusicDetail',
+    '/musicianDetail',
+    '/tempo-practice',
+    '/order-detail',
+    '/member-center',
+    '/unit-detail',
+    '/practice-mode',
+    '/error-question-mode',
+    '/examination-mode',
+    '/courseware-list',
+    '/co-ai',
+    '/co-ai-detail',
+    '/courseware-play',
+    '/creation'
+  ];
+
+  let _defaultParams = {
+    clientType: 'STUDENT',
+    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 = ['kt.colexiu.com', 'test.kt.colexiu.com', 'dev.kt.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);
+  };
+
+  return {
+    startListenErrorLog,
+    stopListenErrorLog
+  };
+}

+ 6 - 0
src/main.ts

@@ -13,6 +13,7 @@ import { storage } from '@/helpers/storage';
 import { ACCESS_TOKEN } from '@/store/mutation-types';
 import { setupStore } from './store';
 import { Lazyload, setToastDefaultOptions } from 'vant';
+import useErrorLog from './hooks/useErrorLog';
 setToastDefaultOptions({ duration: 3000 });
 
 // 获取token
@@ -47,4 +48,9 @@ setupStore(app);
 dayjs.locale('zh-ch');
 
 app.use(router);
+
+// 监听错误信息
+const errorLog = useErrorLog();
+errorLog.startListenErrorLog();
+
 app.mount('#app');

+ 3 - 0
src/views/courseware-list/index.tsx

@@ -257,6 +257,9 @@ export default defineComponent({
       } catch {}
     };
     onMounted(async () => {
+      window.addEventListener('error', (e: any) => {
+        console.log(e, 'error');
+      });
       // console.log(browser().isTablet, 'browser().isTablet');
       await getTanentList();
       await getSubjectList();

+ 1 - 0
src/views/knowledge-library/wroing-book/index.tsx

@@ -46,6 +46,7 @@ export default defineComponent({
         //
       }
     };
+
     return () => (
       <div
         class={[