Kaynağa Gözat

保存用户登录的详细日志

Michael Wang 3 yıl önce
ebeveyn
işleme
1ef11528dc
4 değiştirilmiş dosya ile 46 ekleme ve 1 silme
  1. 2 0
      src/types/student-client.d.ts
  2. 22 0
      src/utils/deviceInfo.ts
  3. 21 1
      src/utils/logger.ts
  4. 1 0
      tsconfig.json

+ 2 - 0
src/types/student-client.d.ts

@@ -20,6 +20,8 @@ export type Store = {
     photoPath: string;
     /** 机构名称 */
     orgName: string;
+    /** 顶级机构名称 */
+    rootOrgName: string;
     /** 用户的另一个id */
     key: string;
     /** 登录认证信息 */

+ 22 - 0
src/utils/deviceInfo.ts

@@ -0,0 +1,22 @@
+export default function () {
+  if (typeof window.nodeRequire == "undefined") {
+    console.log("nodeRequire failed");
+    return {};
+  }
+
+  const os: typeof import("os") = window.nodeRequire("os");
+  const infos: Record<string, string | number> = {};
+  infos.arch = os.arch();
+  infos.platform = os.platform();
+  infos.release = os.release();
+  infos.type = os.type();
+  infos.hostname = os.hostname();
+  infos.totalmem = os.totalmem() / 1024 / 1024 / 1024;
+  infos.freemem = os.freemem() / 1024 / 1024 / 1024;
+
+  infos.cpus = JSON.stringify(os.cpus());
+  infos.networkInterfaces = JSON.stringify(os.networkInterfaces());
+  infos.userInfo = JSON.stringify(os.userInfo());
+  infos.loadavg = JSON.stringify(os.loadavg());
+  return infos;
+}

+ 21 - 1
src/utils/logger.ts

@@ -4,6 +4,7 @@ import { omit } from "lodash-es";
 import SlsWebLogger from "js-sls-logger";
 import { VITE_SLS_STORE_NAME } from "@/constants/constants";
 import { electronLog } from "./electronLog";
+import getDeviceInfos from "./deviceInfo";
 
 const aliLogger = new SlsWebLogger({
   host: "cn-shenzhen.log.aliyuncs.com",
@@ -50,7 +51,7 @@ type LogDetail = {
  * @param detail.ejn - JSON.stringify({a: 0})
  * @param detail.ext - {UA: 'chrome 99'}
  */
-export default function (detail: LogDetail) {
+export default function createLog(detail: LogDetail) {
   const user = store.user;
   const defaultFileds = {
     level: "log",
@@ -73,3 +74,22 @@ export default function (detail: LogDetail) {
     void electronLog(newDetail);
   }
 }
+
+/** 要在用户登录后调用,仅需调用一次 */
+export function createUserDetailLog() {
+  const ext: Record<string, any> = {};
+  const user = store.user;
+  const deviceInfos = getDeviceInfos();
+
+  const { displayName, identityNumber, rootOrgName, rootOrgId } = store.user;
+
+  Object.assign(
+    ext,
+    { displayName, identityNumber, rootOrgName, rootOrgId },
+    { userStudentCodeList: user.studentCodeList.join(",") },
+    { UA: navigator.userAgent },
+    deviceInfos
+  );
+
+  createLog({ cnl: ["server"], pgn: "登录页面", act: "登录成功日志", ext });
+}

+ 1 - 0
tsconfig.json

@@ -12,6 +12,7 @@
     "esModuleInterop": true,
     "lib": ["esnext", "dom"],
     "types": [
+      "node",
       "./node_modules/vite/client",
       "./node_modules/vue/macros-global",
       "naive-ui/volar"