From 93271cd2498d73e9dc35e572d8c31ae9645b7d8b Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期五, 12 七月 2024 11:29:57 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/views/home/components/user-panel/index.vue       |  215 ++++++++++++-------
 src/api/modules/user.js                              |    7 
 src/views/train/data-list/index.vue                  |   59 ++--
 components.d.ts                                      |    4 
 vite.config.js                                       |    2 
 src/views/grade-list/data-list/index.vue             |    7 
 src/mock/_exam.bundled_1720748378963_643yxkdyz9t.cjs |  334 ++++++++++++++++++++++++++++++
 7 files changed, 519 insertions(+), 109 deletions(-)

diff --git a/components.d.ts b/components.d.ts
index b2d1c50..a89ff70 100644
--- a/components.d.ts
+++ b/components.d.ts
@@ -14,11 +14,15 @@
     ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
     ElCountdown: typeof import('element-plus/es')['ElCountdown']
     ElDialog: typeof import('element-plus/es')['ElDialog']
+    ElDropdown: typeof import('element-plus/es')['ElDropdown']
+    ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
+    ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
     ElForm: typeof import('element-plus/es')['ElForm']
     ElFormItem: typeof import('element-plus/es')['ElFormItem']
     ElIcon: typeof import('element-plus/es')['ElIcon']
     ElImageViewer: typeof import('element-plus/es')['ElImageViewer']
     ElInput: typeof import('element-plus/es')['ElInput']
+    ElLink: typeof import('element-plus/es')['ElLink']
     ElOption: typeof import('element-plus/es')['ElOption']
     ElPagination: typeof import('element-plus/es')['ElPagination']
     ElProgress: typeof import('element-plus/es')['ElProgress']
diff --git a/src/api/modules/user.js b/src/api/modules/user.js
index 4d8fcb3..b2dd01a 100644
--- a/src/api/modules/user.js
+++ b/src/api/modules/user.js
@@ -1,6 +1,11 @@
 import service from "@/api";
 
-
+// 鐧诲綍璇锋眰
 export const login = (postData = {}) => {
   return service.post('/api/user/login', postData);
 }
+
+// 閫�鍑虹櫥褰�
+export const logout = () => {
+    return service.post('/api/user/logout');
+}
\ No newline at end of file
diff --git a/src/mock/_exam.bundled_1720748378963_643yxkdyz9t.cjs b/src/mock/_exam.bundled_1720748378963_643yxkdyz9t.cjs
new file mode 100644
index 0000000..3398553
--- /dev/null
+++ b/src/mock/_exam.bundled_1720748378963_643yxkdyz9t.cjs
@@ -0,0 +1,334 @@
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/mock/exam.js
+var exam_exports = {};
+__export(exam_exports, {
+  default: () => exam_default
+});
+module.exports = __toCommonJS(exam_exports);
+var exam_default = [
+  // 鑾峰彇鑰冭瘯璇曞嵎
+  {
+    url: "/api/v1/getExamInfo",
+    method: "GET",
+    response: () => {
+      return {
+        code: 200,
+        msg: "Success",
+        data: {
+          examInfo: {
+            examId: 1,
+            examName: "\u6D4B\u8BD5\u540D\u79F0",
+            examType: "\u8003\u8BD5\u7C7B\u578B",
+            examStatus: "\u8003\u8BD5\u72B6\u6001",
+            examStartTime: "2021-01-01",
+            examEndTime: "2021-01-01",
+            "examTime|30-60": 50,
+            examGrade: 60
+          },
+          examQuestionList: [
+            {
+              questionType: 1,
+              questionList: [
+                {
+                  "id": null,
+                  "questionType": 1,
+                  "gradeLevel": null,
+                  "subjectId": 2,
+                  "title": "1+1=\uFF1F123",
+                  "img": "/test_question.png",
+                  "items": [
+                    {
+                      "prefix": "A",
+                      "content": "1"
+                    },
+                    {
+                      "prefix": "B",
+                      "content": "2"
+                    },
+                    {
+                      "prefix": "C",
+                      "content": "3"
+                    },
+                    {
+                      "prefix": "D",
+                      "content": "4"
+                    }
+                  ],
+                  "analyze": "\u95EE\u5C0F\u670B\u53CB",
+                  "correct": "",
+                  "score": "3",
+                  "difficult": 5
+                },
+                {
+                  "id": null,
+                  "questionType": 1,
+                  "gradeLevel": null,
+                  "subjectId": 2,
+                  "title": "1+1=\uFF1F",
+                  "items": [
+                    {
+                      "prefix": "A",
+                      "content": "1"
+                    },
+                    {
+                      "prefix": "B",
+                      "content": "2"
+                    },
+                    {
+                      "prefix": "C",
+                      "content": "3"
+                    },
+                    {
+                      "prefix": "D",
+                      "content": "4"
+                    }
+                  ],
+                  "analyze": "\u95EE\u5C0F\u670B\u53CB",
+                  "correct": "",
+                  "score": "3",
+                  "difficult": 5
+                }
+              ]
+            },
+            {
+              questionType: 2,
+              questionList: [
+                {
+                  "id": null,
+                  "questionType": 1,
+                  "gradeLevel": null,
+                  "subjectId": 2,
+                  "title": "1+1=\uFF1F",
+                  "img": "/test_question.png",
+                  "items": [
+                    {
+                      "prefix": "A",
+                      "content": "1"
+                    },
+                    {
+                      "prefix": "B",
+                      "content": "2"
+                    },
+                    {
+                      "prefix": "C",
+                      "content": "3"
+                    },
+                    {
+                      "prefix": "D",
+                      "content": "4"
+                    }
+                  ],
+                  "analyze": "\u95EE\u5C0F\u670B\u53CB",
+                  "correct": "",
+                  "score": "5",
+                  "difficult": 5
+                },
+                {
+                  "id": null,
+                  "questionType": 1,
+                  "gradeLevel": null,
+                  "subjectId": 2,
+                  "title": "1+1=\uFF1F",
+                  "items": [
+                    {
+                      "prefix": "A",
+                      "content": "1"
+                    },
+                    {
+                      "prefix": "B",
+                      "content": "2"
+                    },
+                    {
+                      "prefix": "C",
+                      "content": "3"
+                    },
+                    {
+                      "prefix": "D",
+                      "content": "4"
+                    }
+                  ],
+                  "analyze": "\u95EE\u5C0F\u670B\u53CB",
+                  "correct": "",
+                  "score": "5",
+                  "difficult": 5
+                },
+                {
+                  "id": null,
+                  "questionType": 1,
+                  "gradeLevel": null,
+                  "subjectId": 2,
+                  "title": "1+1=\uFF1F",
+                  "items": [
+                    {
+                      "prefix": "A",
+                      "content": "1"
+                    },
+                    {
+                      "prefix": "B",
+                      "content": "2"
+                    },
+                    {
+                      "prefix": "C",
+                      "content": "3"
+                    },
+                    {
+                      "prefix": "D",
+                      "content": "4"
+                    }
+                  ],
+                  "analyze": "\u95EE\u5C0F\u670B\u53CB",
+                  "correct": "",
+                  "score": "5",
+                  "difficult": 5
+                },
+                {
+                  "id": null,
+                  "questionType": 1,
+                  "gradeLevel": null,
+                  "subjectId": 2,
+                  "title": "1+1=\uFF1F",
+                  "items": [
+                    {
+                      "prefix": "A",
+                      "content": "1"
+                    },
+                    {
+                      "prefix": "B",
+                      "content": "2"
+                    },
+                    {
+                      "prefix": "C",
+                      "content": "3"
+                    },
+                    {
+                      "prefix": "D",
+                      "content": "4"
+                    }
+                  ],
+                  "analyze": "\u95EE\u5C0F\u670B\u53CB",
+                  "correct": "",
+                  "score": "5",
+                  "difficult": 5
+                }
+              ]
+            },
+            {
+              questionType: 3,
+              questionList: [
+                {
+                  "id": null,
+                  "questionType": 1,
+                  "gradeLevel": null,
+                  "subjectId": 2,
+                  "title": "\u6D4B\u8BD5\u97F3\u98911",
+                  "audioFile": "/test.mp3",
+                  "img": "/test_question.png",
+                  "items": [
+                    {
+                      "prefix": "A",
+                      "content": "1"
+                    },
+                    {
+                      "prefix": "B",
+                      "content": "2"
+                    },
+                    {
+                      "prefix": "C",
+                      "content": "3"
+                    },
+                    {
+                      "prefix": "D",
+                      "content": "4"
+                    }
+                  ],
+                  "analyze": "\u95EE\u5C0F\u670B\u53CB",
+                  "correct": "",
+                  "score": "3",
+                  "difficult": 5
+                },
+                {
+                  "id": null,
+                  "questionType": 1,
+                  "gradeLevel": null,
+                  "subjectId": 2,
+                  "title": "\u6D4B\u8BD5\u97F3\u98912",
+                  "audioFile": "/test.mp3",
+                  "items": [
+                    {
+                      "prefix": "A",
+                      "content": "1"
+                    },
+                    {
+                      "prefix": "B",
+                      "content": "2"
+                    },
+                    {
+                      "prefix": "C",
+                      "content": "3"
+                    },
+                    {
+                      "prefix": "D",
+                      "content": "4"
+                    }
+                  ],
+                  "analyze": "\u95EE\u5C0F\u670B\u53CB",
+                  "correct": "",
+                  "score": "3",
+                  "difficult": 5
+                }
+              ]
+            }
+          ]
+        }
+      };
+    }
+  },
+  // 鑾峰彇鑰冭瘯鍒楄〃
+  {
+    url: "/api/v1/getExamList",
+    method: "GET",
+    response: () => {
+      return {
+        code: 200,
+        msg: "Success",
+        "data|2-8": [
+          {
+            "id|+1": 1,
+            name: "\u6D4B\u8BD5\u6D4B\u8BD5\u6D4B\u8BD5\u6D4B\u8BD5\u6D4B\u8BD5\u6D4B\u8BD5",
+            startTime: "2024-01-01 09:00:00",
+            endTime: "2024-01-01 11:00:00",
+            // 1:鏈紑濮�
+            // 2:杩涜涓�
+            // 3:宸茬粨鏉�
+            "status|1": [
+              1,
+              2,
+              3
+            ],
+            "examTotal|20-60": 20,
+            "examTime|30-120": 120,
+            "examScore|60-100": 100
+          }
+        ]
+      };
+    }
+  }
+];
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21vY2svZXhhbS5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiY29uc3QgX19pbmplY3RlZF9maWxlbmFtZV9fID0gXCJDOlxcXFxVc2Vyc1xcXFxoaHlcXFxcRGVza3RvcFxcXFx5Y2xcXFxcanhrZy1uZXctdWktc3R1ZGVudFxcXFxzcmNcXFxcbW9ja1xcXFxleGFtLmpzXCI7Y29uc3QgX19pbmplY3RlZF9kaXJuYW1lX18gPSBcIkM6XFxcXFVzZXJzXFxcXGhoeVxcXFxEZXNrdG9wXFxcXHljbFxcXFxqeGtnLW5ldy11aS1zdHVkZW50XFxcXHNyY1xcXFxtb2NrXCI7Y29uc3QgX19pbmplY3RlZF9pbXBvcnRfbWV0YV91cmxfXyA9IFwiZmlsZTovLy9DOi9Vc2Vycy9oaHkvRGVza3RvcC95Y2wvanhrZy1uZXctdWktc3R1ZGVudC9zcmMvbW9jay9leGFtLmpzXCI7ZXhwb3J0IGRlZmF1bHQgW1xyXG4gIC8vIFx1ODNCN1x1NTNENlx1ODAwM1x1OEJENVx1OEJENVx1NTM3N1xyXG4gIHtcclxuICAgIHVybDogJy9hcGkvdjEvZ2V0RXhhbUluZm8nLFxyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIHJlc3BvbnNlOiAoKSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgY29kZTogMjAwLFxyXG4gICAgICAgIG1zZzogJ1N1Y2Nlc3MnLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGV4YW1JbmZvOiB7XHJcbiAgICAgICAgICAgIGV4YW1JZDogMSxcclxuICAgICAgICAgICAgZXhhbU5hbWU6ICdcdTZENEJcdThCRDVcdTU0MERcdTc5RjAnLFxyXG4gICAgICAgICAgICBleGFtVHlwZTogJ1x1ODAwM1x1OEJENVx1N0M3Qlx1NTc4QicsXHJcbiAgICAgICAgICAgIGV4YW1TdGF0dXM6ICdcdTgwMDNcdThCRDVcdTcyQjZcdTYwMDEnLFxyXG4gICAgICAgICAgICBleGFtU3RhcnRUaW1lOiAnMjAyMS0wMS0wMScsXHJcbiAgICAgICAgICAgIGV4YW1FbmRUaW1lOiAnMjAyMS0wMS0wMScsXHJcbiAgICAgICAgICAgICdleGFtVGltZXwzMC02MCc6IDUwLFxyXG4gICAgICAgICAgICBleGFtR3JhZGU6IDYwLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGV4YW1RdWVzdGlvbkxpc3Q6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogMSxcclxuICAgICAgICAgICAgICBxdWVzdGlvbkxpc3Q6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgXCJpZFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcInF1ZXN0aW9uVHlwZVwiOiAxLFxyXG4gICAgICAgICAgICAgICAgICBcImdyYWRlTGV2ZWxcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJzdWJqZWN0SWRcIjogMixcclxuICAgICAgICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIjErMT1cdUZGMUYxMjNcIixcclxuICAgICAgICAgICAgICAgICAgXCJpbWdcIjogJy90ZXN0X3F1ZXN0aW9uLnBuZycsXHJcbiAgICAgICAgICAgICAgICAgIFwiaXRlbXNcIjogW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIFwicHJlZml4XCI6IFwiQVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50XCI6IFwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcInByZWZpeFwiOiBcIkJcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiOiBcIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCJwcmVmaXhcIjogXCJDXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnRcIjogXCIzXCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIFwicHJlZml4XCI6IFwiRFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50XCI6IFwiNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICBcImFuYWx5emVcIjogXCJcdTk1RUVcdTVDMEZcdTY3MEJcdTUzQ0JcIixcclxuICAgICAgICAgICAgICAgICAgXCJjb3JyZWN0XCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwic2NvcmVcIjogXCIzXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZGlmZmljdWx0XCI6IDVcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwiaWRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJxdWVzdGlvblR5cGVcIjogMSxcclxuICAgICAgICAgICAgICAgICAgXCJncmFkZUxldmVsXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwic3ViamVjdElkXCI6IDIsXHJcbiAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCIxKzE9XHVGRjFGXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiaXRlbXNcIjogW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIFwicHJlZml4XCI6IFwiQVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50XCI6IFwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcInByZWZpeFwiOiBcIkJcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiOiBcIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCJwcmVmaXhcIjogXCJDXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnRcIjogXCIzXCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIFwicHJlZml4XCI6IFwiRFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50XCI6IFwiNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICBcImFuYWx5emVcIjogXCJcdTk1RUVcdTVDMEZcdTY3MEJcdTUzQ0JcIixcclxuICAgICAgICAgICAgICAgICAgXCJjb3JyZWN0XCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwic2NvcmVcIjogXCIzXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZGlmZmljdWx0XCI6IDVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6IDIsXHJcbiAgICAgICAgICAgICAgcXVlc3Rpb25MaXN0OiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwiaWRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJxdWVzdGlvblR5cGVcIjogMSxcclxuICAgICAgICAgICAgICAgICAgXCJncmFkZUxldmVsXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwic3ViamVjdElkXCI6IDIsXHJcbiAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCIxKzE9XHVGRjFGXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiaW1nXCI6ICcvdGVzdF9xdWVzdGlvbi5wbmcnLFxyXG4gICAgICAgICAgICAgICAgICBcIml0ZW1zXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcInByZWZpeFwiOiBcIkFcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiOiBcIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCJwcmVmaXhcIjogXCJCXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnRcIjogXCIyXCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIFwicHJlZml4XCI6IFwiQ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50XCI6IFwiM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcInByZWZpeFwiOiBcIkRcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiOiBcIjRcIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgXCJhbmFseXplXCI6IFwiXHU5NUVFXHU1QzBGXHU2NzBCXHU1M0NCXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiY29ycmVjdFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcInNjb3JlXCI6IFwiNVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImRpZmZpY3VsdFwiOiA1XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBcImlkXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwicXVlc3Rpb25UeXBlXCI6IDEsXHJcbiAgICAgICAgICAgICAgICAgIFwiZ3JhZGVMZXZlbFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcInN1YmplY3RJZFwiOiAyLFxyXG4gICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiMSsxPVx1RkYxRlwiLFxyXG4gICAgICAgICAgICAgICAgICBcIml0ZW1zXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcInByZWZpeFwiOiBcIkFcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiOiBcIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCJwcmVmaXhcIjogXCJCXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnRcIjogXCIyXCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIFwicHJlZml4XCI6IFwiQ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50XCI6IFwiM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcInByZWZpeFwiOiBcIkRcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiOiBcIjRcIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgXCJhbmFseXplXCI6IFwiXHU5NUVFXHU1QzBGXHU2NzBCXHU1M0NCXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiY29ycmVjdFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcInNjb3JlXCI6IFwiNVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImRpZmZpY3VsdFwiOiA1XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBcImlkXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwicXVlc3Rpb25UeXBlXCI6IDEsXHJcbiAgICAgICAgICAgICAgICAgIFwiZ3JhZGVMZXZlbFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcInN1YmplY3RJZFwiOiAyLFxyXG4gICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiMSsxPVx1RkYxRlwiLFxyXG4gICAgICAgICAgICAgICAgICBcIml0ZW1zXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcInByZWZpeFwiOiBcIkFcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiOiBcIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCJwcmVmaXhcIjogXCJCXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnRcIjogXCIyXCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIFwicHJlZml4XCI6IFwiQ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50XCI6IFwiM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcInByZWZpeFwiOiBcIkRcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiOiBcIjRcIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgXCJhbmFseXplXCI6IFwiXHU5NUVFXHU1QzBGXHU2NzBCXHU1M0NCXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiY29ycmVjdFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcInNjb3JlXCI6IFwiNVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImRpZmZpY3VsdFwiOiA1XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBcImlkXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwicXVlc3Rpb25UeXBlXCI6IDEsXHJcbiAgICAgICAgICAgICAgICAgIFwiZ3JhZGVMZXZlbFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcInN1YmplY3RJZFwiOiAyLFxyXG4gICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiMSsxPVx1RkYxRlwiLFxyXG4gICAgICAgICAgICAgICAgICBcIml0ZW1zXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcInByZWZpeFwiOiBcIkFcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiOiBcIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCJwcmVmaXhcIjogXCJCXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnRcIjogXCIyXCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIFwicHJlZml4XCI6IFwiQ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50XCI6IFwiM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcInByZWZpeFwiOiBcIkRcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiOiBcIjRcIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgXCJhbmFseXplXCI6IFwiXHU5NUVFXHU1QzBGXHU2NzBCXHU1M0NCXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiY29ycmVjdFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcInNjb3JlXCI6IFwiNVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImRpZmZpY3VsdFwiOiA1XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAzLFxyXG4gICAgICAgICAgICAgIHF1ZXN0aW9uTGlzdDogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBcImlkXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwicXVlc3Rpb25UeXBlXCI6IDEsXHJcbiAgICAgICAgICAgICAgICAgIFwiZ3JhZGVMZXZlbFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcInN1YmplY3RJZFwiOiAyLFxyXG4gICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiXHU2RDRCXHU4QkQ1XHU5N0YzXHU5ODkxMVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImF1ZGlvRmlsZVwiOiAnL3Rlc3QubXAzJyxcclxuICAgICAgICAgICAgICAgICAgXCJpbWdcIjogJy90ZXN0X3F1ZXN0aW9uLnBuZycsXHJcbiAgICAgICAgICAgICAgICAgIFwiaXRlbXNcIjogW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIFwicHJlZml4XCI6IFwiQVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50XCI6IFwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcInByZWZpeFwiOiBcIkJcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiOiBcIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCJwcmVmaXhcIjogXCJDXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnRcIjogXCIzXCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIFwicHJlZml4XCI6IFwiRFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50XCI6IFwiNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICBcImFuYWx5emVcIjogXCJcdTk1RUVcdTVDMEZcdTY3MEJcdTUzQ0JcIixcclxuICAgICAgICAgICAgICAgICAgXCJjb3JyZWN0XCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwic2NvcmVcIjogXCIzXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZGlmZmljdWx0XCI6IDVcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwiaWRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJxdWVzdGlvblR5cGVcIjogMSxcclxuICAgICAgICAgICAgICAgICAgXCJncmFkZUxldmVsXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwic3ViamVjdElkXCI6IDIsXHJcbiAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJcdTZENEJcdThCRDVcdTk3RjNcdTk4OTEyXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiYXVkaW9GaWxlXCI6ICcvdGVzdC5tcDMnLFxyXG4gICAgICAgICAgICAgICAgICBcIml0ZW1zXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcInByZWZpeFwiOiBcIkFcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiOiBcIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCJwcmVmaXhcIjogXCJCXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnRcIjogXCIyXCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIFwicHJlZml4XCI6IFwiQ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50XCI6IFwiM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcInByZWZpeFwiOiBcIkRcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiOiBcIjRcIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgXCJhbmFseXplXCI6IFwiXHU5NUVFXHU1QzBGXHU2NzBCXHU1M0NCXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiY29ycmVjdFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcInNjb3JlXCI6IFwiM1wiLFxyXG4gICAgICAgICAgICAgICAgICBcImRpZmZpY3VsdFwiOiA1XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuICB9LFxyXG4gIC8vIFx1ODNCN1x1NTNENlx1ODAwM1x1OEJENVx1NTIxN1x1ODg2OFxyXG4gIHtcclxuICAgIHVybDogJy9hcGkvdjEvZ2V0RXhhbUxpc3QnLFxyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIHJlc3BvbnNlOiAoKSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgY29kZTogMjAwLFxyXG4gICAgICAgIG1zZzogJ1N1Y2Nlc3MnLFxyXG4gICAgICAgICdkYXRhfDItOCc6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgJ2lkfCsxJzogMSxcclxuICAgICAgICAgICAgbmFtZTogJ1x1NkQ0Qlx1OEJENVx1NkQ0Qlx1OEJENVx1NkQ0Qlx1OEJENVx1NkQ0Qlx1OEJENVx1NkQ0Qlx1OEJENVx1NkQ0Qlx1OEJENScsXHJcbiAgICAgICAgICAgIHN0YXJ0VGltZTogJzIwMjQtMDEtMDEgMDk6MDA6MDAnLFxyXG4gICAgICAgICAgICBlbmRUaW1lOiAnMjAyNC0wMS0wMSAxMTowMDowMCcsXHJcbiAgICAgICAgICAgIC8vIDE6XHU2NzJBXHU1RjAwXHU1OUNCXHJcbiAgICAgICAgICAgIC8vIDI6XHU4RkRCXHU4ODRDXHU0RTJEXHJcbiAgICAgICAgICAgIC8vIDM6XHU1REYyXHU3RUQzXHU2NzVGXHJcbiAgICAgICAgICAgICdzdGF0dXN8MSc6IFtcclxuICAgICAgICAgICAgICAxLFxyXG4gICAgICAgICAgICAgIDIsXHJcbiAgICAgICAgICAgICAgM1xyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAnZXhhbVRvdGFsfDIwLTYwJzogMjAsXHJcbiAgICAgICAgICAgICdleGFtVGltZXwzMC0xMjAnOiAxMjAsXHJcbiAgICAgICAgICAgICdleGFtU2NvcmV8NjAtMTAwJzogMTAwXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXTsiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUErUyxJQUFPLGVBQVE7QUFBQTtBQUFBLEVBRTVUO0FBQUEsSUFDRSxLQUFLO0FBQUEsSUFDTCxRQUFRO0FBQUEsSUFDUixVQUFVLE1BQU07QUFDZCxhQUFPO0FBQUEsUUFDTCxNQUFNO0FBQUEsUUFDTixLQUFLO0FBQUEsUUFDTCxNQUFNO0FBQUEsVUFDSixVQUFVO0FBQUEsWUFDUixRQUFRO0FBQUEsWUFDUixVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixZQUFZO0FBQUEsWUFDWixlQUFlO0FBQUEsWUFDZixhQUFhO0FBQUEsWUFDYixrQkFBa0I7QUFBQSxZQUNsQixXQUFXO0FBQUEsVUFDYjtBQUFBLFVBQ0Esa0JBQWtCO0FBQUEsWUFDaEI7QUFBQSxjQUNFLGNBQWM7QUFBQSxjQUNkLGNBQWM7QUFBQSxnQkFDWjtBQUFBLGtCQUNFLE1BQU07QUFBQSxrQkFDTixnQkFBZ0I7QUFBQSxrQkFDaEIsY0FBYztBQUFBLGtCQUNkLGFBQWE7QUFBQSxrQkFDYixTQUFTO0FBQUEsa0JBQ1QsT0FBTztBQUFBLGtCQUNQLFNBQVM7QUFBQSxvQkFDUDtBQUFBLHNCQUNFLFVBQVU7QUFBQSxzQkFDVixXQUFXO0FBQUEsb0JBQ2I7QUFBQSxvQkFDQTtBQUFBLHNCQUNFLFVBQVU7QUFBQSxzQkFDVixXQUFXO0FBQUEsb0JBQ2I7QUFBQSxvQkFDQTtBQUFBLHNCQUNFLFVBQVU7QUFBQSxzQkFDVixXQUFXO0FBQUEsb0JBQ2I7QUFBQSxvQkFDQTtBQUFBLHNCQUNFLFVB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
diff --git a/src/views/grade-list/data-list/index.vue b/src/views/grade-list/data-list/index.vue
index fc82f87..221d3a2 100644
--- a/src/views/grade-list/data-list/index.vue
+++ b/src/views/grade-list/data-list/index.vue
@@ -1,15 +1,18 @@
 <template>
   <div class="list-container w-full h-full">
     <el-scrollbar>
-      <el-card shadow="hover" class="mb-3" v-for="item in props.dataList">
+      <el-card shadow="hover" class="mb-3" v-for="item in props.dataList" :key="item.id">
         <div class="item flex justify-between items-center">
           <div class="left-container flex flex-col justify-between">
             <div class="top-container flex items-center">
               <div class="title mr-5 text-xl font-bold">{{ item.examName }}</div>
               <div class="tag">
-                <el-tag type="primary" effect="light" round>
+                <el-tag type="primary" effect="light" round v-if="item.status === 0">
                   宸叉壒鏀�
                 </el-tag>
+                <el-tag type="danger" effect="light" round v-if="item.status === 1">
+                  缂鸿��
+                </el-tag>
               </div>
             </div>
             <div class="mid-container flex items-center my-4 text-gray-700">
diff --git a/src/views/home/components/user-panel/index.vue b/src/views/home/components/user-panel/index.vue
index 0880ffc..f6b415c 100644
--- a/src/views/home/components/user-panel/index.vue
+++ b/src/views/home/components/user-panel/index.vue
@@ -1,110 +1,169 @@
 <template>
-  <div class="user-panel max-w-sm min-w-96 h-fit">
-    <el-card class="card">
-      <div class="panel-content flex flex-col items-center">
-        <div class="avatar-container w-40 h-40 rounded-full overflow-hidden">
-          <div class="avatar-content" v-if="userInfo.imagePath">
-            <img :src="userInfo.imagePath" class="avatar-img" alt="">
-          </div>
-          <div class="avatar-content" :style="{backgroundColor: getColor}" v-else>
-            <div class="name text-5xl font-bold text-white">{{ getFirstName }}</div>
-          </div>
-        </div>
+    <div class="user-panel max-w-sm min-w-96 h-fit">
+        <el-card class="card">
+            <div class="panel-content flex flex-col items-center">
+                <!-- 瀛︾敓淇℃伅 -->
+                <el-dropdown>
+                    <div
+                        class="avatar-container w-40 h-40 rounded-full overflow-hidden el-dropdown-link"
+                        @click="stateClick()"
+                    >
+                        <div
+                            class="avatar-content"
+                            v-if="userInfo.imagePath"
+                        >
+                            <img
+                                :src="userInfo.imagePath"
+                                class="avatar-img"
+                                alt=""
+                            />
+                        </div>
+                        <div
+                            class="avatar-content"
+                            :style="{ backgroundColor: getColor }"
+                            v-else
+                        >
+                            <div class="name text-5xl font-bold text-white">
+                                {{ getFirstName }}
+                            </div>
+                        </div>
+                    </div>
+                    <template #dropdown>
+                        <el-dropdown-menu>
+                            <el-dropdown-item>淇敼瀵嗙爜</el-dropdown-item>
+                            <el-dropdown-item>涓汉涓績</el-dropdown-item>
+                            <el-dropdown-item @click="quit()"
+                                >閫�鍑虹櫥褰�</el-dropdown-item
+                            >
+                        </el-dropdown-menu>
+                    </template>
+                </el-dropdown>
 
-        <div class="name-container text-lg font-bold mt-5 mb-2">
-          {{ userInfo.realName }}
-        </div>
+                <div class="name-container text-lg font-bold mt-5 mb-2">
+                    {{ userInfo.realName }}
+                </div>
 
-        <div class="department-container text-base mb-10">
-          {{ userInfo.userName }}
-        </div>
-
-        <div class="tool-container grid grid-cols-3 gap-10">
-          <div class="tool-item text-center cursor-pointer" v-for="item in toolList" @click="toolClick(item)">
-            <div class="tool-icon mb-1">
-              <img :src="item.iconPath" class="width-img" alt="">
+                <div class="department-container text-base mb-10">
+                    {{ userInfo.userName }}
+                </div>
+                <!-- 瀛︾敓閫夐」 -->
+                <div class="tool-container grid grid-cols-3 gap-10">
+                    <div
+                        class="tool-item text-center cursor-pointer"
+                        v-for="item in toolList"
+                        @click="toolClick(item)"
+                    >
+                        <div class="tool-icon mb-1">
+                            <img
+                                :src="item.iconPath"
+                                class="width-img"
+                                alt=""
+                            />
+                        </div>
+                        <div class="tool-title">
+                            {{ item.title }}
+                        </div>
+                    </div>
+                </div>
             </div>
-            <div class="tool-title">
-              {{ item.title }}
-            </div>
-          </div>
-        </div>
-
-      </div>
-    </el-card>
-  </div>
+        </el-card>
+    </div>
 </template>
 
 <script setup>
-import { ref, computed } from 'vue';
-import randomColor from '@/utils/randomColor.js';
-import { useRouter } from 'vue-router';
-import { storeToRefs } from 'pinia';
-import { useUserStore } from '@/store/index.js';
+import { ref, computed } from "vue";
+import randomColor from "@/utils/randomColor.js";
+import { useRouter } from "vue-router";
+import { storeToRefs } from "pinia";
+import { useUserStore } from "@/store/index.js";
+import { logout } from "@/api/modules/user.js";
 
 const userStore = useUserStore();
 const { userInfo } = storeToRefs(userStore);
 
-
-
 const router = useRouter();
-
+// 鑾峰彇鍒楄〃
 const toolList = ref([
-  {
-    id: 1,
-    title: '鍦ㄧ嚎鍩硅',
-    iconPath: new URL('@/assets/icons/icon1.png', import.meta.url).href,
-    path: '/train'
-  },
-  {
-    id: 2,
-    title: '鎴戠殑鑰冭瘯',
-    iconPath: new URL('@/assets/icons/icon2.png', import.meta.url).href,
-    path: '/exam-list'
-  },
-  {
-    id: 3,
-    title: '鎴戠殑鎴愮哗',
-    iconPath: new URL('@/assets/icons/icon2.png', import.meta.url).href,
-    path: '/grade-list'
-  },
+    {
+        id: 1,
+        title: "鍦ㄧ嚎鍩硅",
+        iconPath: new URL("@/assets/icons/icon1.png", import.meta.url).href,
+        path: "/train",
+    },
+    {
+        id: 2,
+        title: "鎴戠殑鑰冭瘯",
+        iconPath: new URL("@/assets/icons/icon2.png", import.meta.url).href,
+        path: "/exam-list",
+    },
+    {
+        id: 3,
+        title: "鎴戠殑鎴愮哗",
+        iconPath: new URL("@/assets/icons/icon2.png", import.meta.url).href,
+        path: "/grade-list",
+    },
 ]);
 
-
+// 鑾峰彇棰滆壊
 const getColor = computed(() => {
-  return randomColor();
+    return randomColor();
 });
-
+// 鑾峰彇鐢ㄦ埛淇℃伅
 const getFirstName = computed(() => {
-  return userInfo.value.realName && userInfo.value.realName[0];
+    return userInfo.value.realName && userInfo.value.realName[0];
 });
-
+// 鐐瑰嚮浜嬩欢
 const toolClick = (item) => {
-  if (item.path) {
-    router.push(item.path);
-  }
-}
+    if (item.path) {
+        router.push(item.path);
+    }
+};
 
+// 鐢ㄦ埛閫夐」
+const dropdownRef = ref();
+// 閫�鍑虹櫥褰�
+const quit = () => {
+    logout()
+        .then(() => {
+            router.push("/login").then(() => {
+                userStore.setUserInfo(null);
+                localStorage.clear("user");
+            });
+        })
+        .catch((err) => {
+            console.log("閫�鍑虹櫥褰曞け璐�,澶辫触鍘熷洜;", err);
+        });
+};
 </script>
 
 <style lang="scss" scoped>
-
-
 .card {
-  border-radius: 30px;
+    border-radius: 30px;
 }
 
 .avatar-content {
-  width: 100%;
-  height: 100%;
-  display: flex;
-  justify-content: center;
-  align-items: center;
+    width: 100%;
+    height: 100%;
+    display: flex;
+    justify-content: center;
+    align-items: center;
 }
 
 .avatar-img {
-  width: 100%;
-  height: 100%;
-  object-fit: cover;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
 }
-</style>
\ No newline at end of file
+.avatar-container {
+    cursor: pointer;
+    color: var(--el-color-primary);
+    display: flex;
+    align-items: center;
+}
+.example-showcase .el-dropdown-link {
+    cursor: pointer;
+    color: var(--el-color-primary);
+    display: flex;
+    align-items: center;
+}
+</style>
diff --git a/src/views/train/data-list/index.vue b/src/views/train/data-list/index.vue
index 369cad7..0c53999 100644
--- a/src/views/train/data-list/index.vue
+++ b/src/views/train/data-list/index.vue
@@ -4,10 +4,14 @@
       <div class="list-content w-full overflow-x-hidden">
         <el-row :gutter="20">
           <el-col :span="6" v-for="item in props.dataList" class="mb-5">
-            <el-card shadow="hover" class="list-card cursor-pointer" :body-style="{ padding: 0 }"
-              @click="itemClick(item)">
+            <el-card
+              shadow="hover"
+              class="list-card cursor-pointer"
+              :body-style="{ padding: 0 }"
+              @click="itemClick(item)"
+            >
               <div class="img-container w-full">
-                <img src="@/assets/image/list-card-bg.jpg" class="w-full">
+                <img src="@/assets/image/list-card-bg.jpg" class="w-full" />
               </div>
               <div class="item-info p-3">
                 <div class="info-title font-bold">{{ item.meetName }}</div>
@@ -28,16 +32,15 @@
           </el-col>
         </el-row>
       </div>
-
     </el-scrollbar>
   </div>
 </template>
 
 <script setup>
-import {storeToRefs} from 'pinia';
-import {useRouter} from 'vue-router';
-import {useUserStore} from '@/store/index.js';
-import {classMeet} from '@/api/modules/meet.js';
+import { storeToRefs } from "pinia";
+import { useRouter } from "vue-router";
+import { useUserStore } from "@/store/index.js";
+import { classMeet } from "@/api/modules/meet.js";
 
 const userStore = useUserStore();
 const { userInfo } = storeToRefs(userStore);
@@ -45,28 +48,30 @@
 const props = defineProps({
   dataList: {
     type: Array,
-    default: () => []
-  }
+    default: () => [],
+  },
 });
 
-
 const itemClick = (item) => {
-  classMeet(item.id).then(res => {
-    if (window.webBridge) {
-      window.webBridge.openNewWindow(JSON.stringify(item));
-    } else {
-      let path = router.resolve({
-        path: "/meet",
-        query: { meetName: item.meetName, id: item.id, userName: userInfo.value?.realName || '', userCode: userInfo.value?.phone || '' }
-      });
-      window.open(path.href, '_blank');
-    }
-  }).catch(err => {
-
-  });
-
-}
-
+  classMeet(item.id)
+    .then((res) => {
+      if (window.webBridge) {
+        window.webBridge.openNewWindow(JSON.stringify(item));
+      } else {
+        let path = router.resolve({
+          path: "/meet",
+          query: {
+            meetName: item.meetName,
+            id: item.id,
+            userName: userInfo.value?.realName + "_" + item.id || "",
+            userCode: userInfo.value?.phone + "_" + item.id || "",
+          },
+        });
+        window.open(path.href, "_blank");
+      }
+    })
+    .catch((err) => {});
+};
 </script>
 
 <style lang="scss" scoped>
diff --git a/vite.config.js b/vite.config.js
index 8d10ea8..91c5690 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -30,7 +30,7 @@
         proxy: {
             '/api': {
                 // target: 'http://192.168.3.88:8000',
-                target: 'http://localhost:8000',
+                target: 'http://42.193.1.25:8000',
                 changeOrigin: true,
             }
         }

--
Gitblit v1.8.0