From 06419b10e17c72e07f1c740836e5abb79df619d0 Mon Sep 17 00:00:00 2001
From: luohairen <3399054449@qq.com>
Date: 星期一, 04 十一月 2024 17:55:38 +0800
Subject: [PATCH] 搭建错题本页面

---
 src/assets/icons/icon3.png               |    0 
 src/views/wrong-list/index.vue           |   81 ++++++++++++++++++++
 src/api/modules/wrong.js                 |    5 +
 src/router/index.js                      |    7 +
 src/views/menu/index.vue                 |    5 +
 src/views/wrong-list/data-list/index.vue |  104 ++++++++++++++++++++++++++
 6 files changed, 201 insertions(+), 1 deletions(-)

diff --git a/src/api/modules/wrong.js b/src/api/modules/wrong.js
new file mode 100644
index 0000000..a6f9243
--- /dev/null
+++ b/src/api/modules/wrong.js
@@ -0,0 +1,5 @@
+import service from "@/api";
+
+export const getWrongList = (postData = {examName: '', pageIndex: 1, pageSize: 10}) => {
+    return service.post('/api/student/wrong/pageList',postData);
+}
\ No newline at end of file
diff --git a/src/assets/icons/icon3.png b/src/assets/icons/icon3.png
new file mode 100644
index 0000000..c887b95
--- /dev/null
+++ b/src/assets/icons/icon3.png
Binary files differ
diff --git a/src/router/index.js b/src/router/index.js
index a327d8e..29bbfbf 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -70,7 +70,12 @@
   {
     path: '/personal-center',
     component: () => import('@/views/personal-center/index.vue'),
-  }
+  },
+  //閿欓鏈�
+  {
+    path: '/wrong-list',
+    component: () => import('@/views/wrong-list/index.vue'),
+  },
 ];
 
 const router = createRouter({
diff --git a/src/views/menu/index.vue b/src/views/menu/index.vue
index 31b6be8..b6987e4 100644
--- a/src/views/menu/index.vue
+++ b/src/views/menu/index.vue
@@ -58,6 +58,11 @@
         iconPath: new URL('@/assets/icons/icon1.png', import.meta.url).href,
         path: '/grade-list'
       },
+      {
+        title: '鎴戠殑閿欓',
+        iconPath: new URL('@/assets/icons/icon3.png', import.meta.url).href,
+        path: '/wrong-list'
+      },
     ]
   },
 ]);
diff --git a/src/views/wrong-list/data-list/index.vue b/src/views/wrong-list/data-list/index.vue
new file mode 100644
index 0000000..92856ce
--- /dev/null
+++ b/src/views/wrong-list/data-list/index.vue
@@ -0,0 +1,104 @@
+<template>
+  <div class="list-container w-full h-full">
+    <el-scrollbar>
+      <el-table
+          v-loading="loading"
+          :data="tableData"
+          border
+          :row-style="{height:'42px'}"
+          :cell-style="{padding: '0'}"
+      >
+        <el-table-column
+            align="center"
+            label="棰樼洰"
+            prop="title"
+            width="500px"
+        ></el-table-column>
+        <el-table-column
+            label="棰樺瀷"
+            align="center"
+            width="100px"
+            prop="questionTypeName"
+        ></el-table-column>
+        <el-table-column
+            align="center"
+            width="100px"
+            label="鍒嗘暟"
+            prop="score"
+        ></el-table-column>
+        <el-table-column
+            align="center"
+            width="100px"
+            label="闅惧害"
+            prop="difficult"
+        ></el-table-column>
+        <el-table-column
+            align="center"
+            width="150px"
+            label="璇曞嵎鍚嶇О"
+            prop="examName"
+        ></el-table-column>
+        <el-table-column
+            label="鎿嶄綔"
+            align="center"
+            fixed="right"
+        >
+          <template slot-scope="scope">
+            <el-button type="primary" size="large" @click="checkWrong(scope.row.id)">鏌ョ湅閿欓</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <pagination v-show="total>0" :total="total" :page.sync="searchForm.currentPage"
+                  :limit.sync="searchForm.pageSize"
+                  @pagination="dataList"/>
+    </el-scrollbar>
+  </div>
+</template>
+
+<script setup>
+import { ref } from 'vue';
+import { Timer } from '@element-plus/icons-vue';
+import { useRouter } from 'vue-router';
+import { useExamStore } from '@/store/index.js';
+import { getExamInfo } from '@/api/modules/exam.js';
+
+const loading = ref(false);
+const tableData = ref([]);
+const total = ref(0);
+const searchForm = ref({
+  currentPage: 1,
+  pageSize: 10
+});
+
+// const router = useRouter();
+
+const props = defineProps({
+  dataList: {
+    type: Array,
+    default: () => []
+  }
+});
+
+
+const checkWrong = (id) => {
+  router.push({
+    name: 'wrong-list',
+    params: {
+      examId: id
+    }
+  });
+};
+
+</script>
+
+<style lang="scss" scoped>
+.item {
+  width: 100%;
+  min-height: 120px;
+}
+
+.bottom-item {
+  margin-right: 30px;
+}
+</style>
diff --git a/src/views/wrong-list/index.vue b/src/views/wrong-list/index.vue
new file mode 100644
index 0000000..e0c48d3
--- /dev/null
+++ b/src/views/wrong-list/index.vue
@@ -0,0 +1,81 @@
+<template>
+  <div class="exam-list-container w-screen h-screen bg-slate-50 flex flex-col items-center">
+    <NormalHeader class="shrink-0"></NormalHeader>
+
+    <div class="list-container container grow relative">
+      <div class="list-content absolute top-0 bottom-0 left-0 right-0 py-4">
+        <div class="list-wrapper w-full h-full">
+          <el-card class="h-full" :body-style="{ height: '100%' }">
+            <div class="card-wrapper w-full h-full flex flex-col px-8 box-border">
+              <div class="card-header flex justify-between items-center shrink-0">
+                <div class="header-search flex items-center">
+                  <el-input v-model="searchText" placeholder="璇疯緭鍏ヨ�冭瘯鍚嶇О" :prefix-icon="Search" maxlength="20" @input="searchData"/>
+                  <el-button type="primary" class="ml-4" @click="searchData">鎼滅储</el-button>
+                </div>
+              </div>
+
+              <div class="card-main flex-1 my-5 relative">
+                <div class="main-content absolute top-0 bottom-0 left-0 right-0" v-loading="loading">
+                  <DataList :dataList="dataList"></DataList>
+                </div>
+              </div>
+
+              <div class="card-footer flex justify-center mb-7 shrink-0">
+                <el-pagination background layout="prev, pager, next" :total="dataList.length"
+                               :default-page-size="20"
+                               :currentPage="currentIndex"
+                               :hide-on-single-page="true"
+                               @current-change="handleCurrentChange"/>
+              </div>
+            </div>
+          </el-card>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import { ref } from 'vue';
+
+import NormalHeader from '@/components/NormalHeader/index.vue';
+import DataList from './data-list/index.vue';
+import { getWrongList } from '@/api/modules/wrong.js';
+
+
+const searchText = ref('');
+const currentIndex = ref(1);
+
+const dataList = ref([]);
+
+const loading = ref(false);
+
+const getData = () => {
+  loading.value = true;
+  getWrongList({ examName: searchText.value }).then(res => {
+    dataList.value = res.data;
+    loading.value = false;
+  }).catch(err => {
+    loading.value = false;
+  });
+};
+
+getData();
+
+const searchData = () => {
+  getData();
+};
+
+const handleClick = (tab, event) => {
+};
+
+const handleCurrentChange = (val) => {
+  getData();
+}
+</script>
+
+<style lang="scss" scoped>
+:deep(.el-tabs__nav-wrap:after) {
+  display: none;
+}
+</style>
\ No newline at end of file

--
Gitblit v1.8.0