From 0f823d771d6a876c8990ad5b7dd80c835c38c53f Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期四, 06 六月 2024 15:52:46 +0800
Subject: [PATCH] 班级学员新增、修改

---
 src/views/Manage/TestPaper/QuestionBank.vue |  392 +++++++++++++++++++++++++++++--------------------------
 1 files changed, 207 insertions(+), 185 deletions(-)

diff --git a/src/views/Manage/TestPaper/QuestionBank.vue b/src/views/Manage/TestPaper/QuestionBank.vue
index b4f6d6b..a8d238d 100644
--- a/src/views/Manage/TestPaper/QuestionBank.vue
+++ b/src/views/Manage/TestPaper/QuestionBank.vue
@@ -8,247 +8,271 @@
         <div class="content">
           <!-- 璇曞嵎鐢熸垚鎸夐挳 -->
           <div style="padding-bottom:20px; border-bottom: 3px solid #409EFF;margin-bottom: 20px;">
-            <el-button
-              type="primary"
-              @click="getDialogFormVisible"
-            >褰曞叆棰樼洰</el-button>
+            <el-popover placement="bottom" trigger="click">
+              <el-button type="warning" size="mini" v-for="item in editUrlEnum" :key="item.key"
+                @click="getDialogFormVisible(item.name)">{{ item.name }}
+              </el-button>
+              <el-button slot="reference" type="primary" class="link-left">鏂板</el-button>
+            </el-popover>
           </div>
           <!-- 鎼滅储 -->
           <div>
-            <el-form
-              :inline="true"
-              :model="formLabelAlign"
-              class="demo-form-inline"
-              label-width="80px"
-            >
+            <el-form :inline="true" :model="queryParam" class="demo-form-inline" label-width="80px">
               <el-form-item>
-                <el-input
-                  v-model="formLabelAlign.type"
-                  placeholder="棰樼洰鍚�"
-                ></el-input>
+                <el-input v-model="queryParam.content" placeholder="璇疯緭鍏ラ鐩�" clearable></el-input>
               </el-form-item>
               <el-form-item>
-                <el-select
-                  v-model="formLabelAlign.region"
-                  placeholder="鍏ㄩ儴绉戠洰"
-                >
-                  <el-option
-                    label="鍏ㄩ儴绉戠洰"
-                    value="shanghai"
-                  ></el-option>
-                  <el-option
-                    label="璇枃"
-                    value="beijing"
-                  ></el-option>
-                  <el-option
-                    label="鏁板"
-                    value="beijing"
-                  ></el-option>
-                  <el-option
-                    label="鑻辫"
-                    value="beijing"
-                  ></el-option>
+                <el-select v-model="queryParam.subjectId" placeholder="璇烽�夋嫨绉戠洰" clearable multiple @change="search">
+                  <el-option v-for="item in subjects" :key="item.id" :value="item.id" :label="item.name"></el-option>
                 </el-select>
               </el-form-item>
               <el-form-item>
-                <el-select
-                  v-model="formLabelAlign.region"
-                  placeholder="閫夋嫨棰�"
-                >
-                  <el-option
-                    label="閫夋嫨棰�"
-                    value="shanghai"
-                  ></el-option>
-                  <el-option
-                    label="闂瓟棰�"
-                    value="beijing"
-                  ></el-option>
-                  <el-option
-                    label="鍒ゆ柇棰�"
-                    value="beijing"
-                  ></el-option>
+                <el-select v-model="queryParam.questionType" placeholder="璇烽�夋嫨棰樺瀷" clearable multiple @change="search">
+                  <el-option v-for="item in questionTypeEnum" :key="item.key" :value="item.key"
+                    :label="item.value"></el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item>
+                <el-select v-model="queryParam.status" placeholder="璇烽�夋嫨鐘舵��" clearable @change="search">
+                  <el-option value="1" label="鍚敤"></el-option>
+                  <el-option value="2" label="绂佺敤"></el-option>
                 </el-select>
               </el-form-item>
 
-              <el-form-item label="">
-                <el-button
-                  style="width:100px;"
-                  type="primary"
-                  size="small"
-                >鏌ヨ</el-button>
+              <el-form-item>
+                <el-button style="width:100px;" type="primary" size="small" @click="search()">鏌ヨ</el-button>
               </el-form-item>
             </el-form>
           </div>
           <!-- 琛ㄦ牸 -->
-          <el-table
-            :header-cell-style="getRowClass"
-            :data="tableData"
-            border
-            style="width: 100%;"
-          >
-            <el-table-column
-              align="center"
-              prop="title"
-              label="棰樼洰鍚�"
-            >
+          <el-table v-loading="listLoading" :header-cell-style="getRowClass" :data="tableData" border
+            style="width: 100%;">
+            <el-table-column align="center" prop="shortTitle" label="棰樼洰" show-overflow-tooltip>
             </el-table-column>
-            <el-table-column
-              align="center"
-              prop="subject"
-              label="绉戠洰"
-            >
+            <el-table-column align="center" prop="subjectName" label="绉戠洰" width="150px">
             </el-table-column>
-            <el-table-column
-              align="center"
-              prop="type"
-              label="棰樼洰绫诲瀷"
-            >
+            <el-table-column align="center" prop="questionTypeName" label="棰樺瀷" width="100px">
             </el-table-column>
-            <el-table-column
-              align="center"
-              prop="score"
-              label="鍙傝�冪瓟妗�"
-            >
+            <el-table-column align="center" prop="difficult" label="闅惧害" width="60px" />
+            <el-table-column align="center" prop="createTime" label="鍒涘缓鏃堕棿" width="160px" />
+            <el-table-column label="鐘舵��" prop="status" width="70px">
+              <template slot-scope="{row}">
+                <el-tag :type="row.status === '绂佺敤' ? 'danger' : 'success'">
+                  {{ row.status ? row.status : '鍚敤' }}
+                </el-tag>
+              </template>
             </el-table-column>
-            <el-table-column
-              label="鎿嶄綔"
-              align="center"
-            >
-              <el-button type="text">缂栬緫</el-button>
-              <el-button type="text">鍒犻櫎</el-button>
+            <el-table-column label="鎿嶄綔" align="center" width="300px">
+              <template slot-scope="{row}">
+                <el-button size="mini" @click="showQuestion(row)">棰勮</el-button>
+                <el-button size="mini" @click="editQuestion(row)">缂栬緫</el-button>
+                <el-button size="mini" type="primary" @click="statusQuestion(row)">{{ row.status === "绂佺敤" ? "鍚敤" : "绂佺敤"
+                  }}</el-button>
+                <el-popconfirm title="纭鍒犻櫎鍚�" @confirm="deleteQuestion(row)">
+                  <el-button slot="reference" size="mini" type="danger" class="link-left">鍒犻櫎</el-button>
+                </el-popconfirm>
+              </template>
             </el-table-column>
           </el-table>
-          <div
-            class="block"
-            style="display: flex; margin-top: 40px;"
-          >
-            <el-pagination
-              style="margin:auto"
-              background
-              :page-size="10"
-              layout="prev, pager, next, jumper"
-              :total="100"
-            >
-            </el-pagination>
-          </div>
+          <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex"
+            :limit.sync="queryParam.pageSize" @pagination="search" />
         </div>
       </div>
-
     </div>
-    <PopUp
-      ref="popUp"
-      @children="parentGoods"
-    />
+
+    <!-- 濉┖ -->
+    <el-dialog :visible.sync="gapVisible" :close-on-click-modal="false" v-if="gapVisible">
+      <gap ref="gap" @children="parentGoods" @callback="callback" :id="updateId" />
+    </el-dialog>
+    <!-- 澶氶�� -->
+    <el-dialog :visible.sync="multipleVisible" :close-on-click-modal="false" v-if="multipleVisible">
+      <multiple ref="multiple" @children="parentGoods" @callback="callback" :id="updateId" />
+    </el-dialog>
+    <!-- 绠�绛� -->
+    <el-dialog :visible.sync="shortVisible" :close-on-click-modal="false" v-if="shortVisible">
+      <short ref="short" @children="parentGoods" @callback="callback" :id="updateId" />
+    </el-dialog>
+    <!-- 鍗曢�� -->
+    <el-dialog :visible.sync="singleVisible" :close-on-click-modal="false" v-if="singleVisible">
+      <single ref="single" @children="parentGoods" @callback="callback" :id="updateId" />
+    </el-dialog>
+    <!-- 鍒ゆ柇 -->
+    <el-dialog :visible.sync="truesVisible" :close-on-click-modal="false" v-if="truesVisible">
+      <trues ref="trues" @children="parentGoods" @callback="callback" :id="updateId" />
+    </el-dialog>
+
+    <el-dialog :visible.sync="questionShow.dialog" style="width: 100%;height: 100%">
+      <QuestionShow :qType="questionShow.qType" :question="questionShow.question" :qLoading="questionShow.loading" />
+    </el-dialog>
   </div>
 </template>
 <script>
 // 寮曞叆褰堝嚭绐楀彛绲勪欢
-import PopUp from "../../../components/PopUp/Question.vue";
+import gap from "@/components/PopUp/gap-filling.vue";
+import multiple from "@/components/PopUp/multiple-choice.vue";
+import short from "@/components/PopUp/short-answer.vue";
+import single from "@/components/PopUp/single-choice.vue";
+import trues from "@/components/PopUp/true-false.vue";
+import { mapGetters, mapState } from 'vuex'
+import questionApi from '@/api/question'
+import QuestionShow from '@/components/PopUp/question/Show'
+import subjectApi from '@/api/subject'
+import Pagination from '@/components/Pagination'
+
 export default {
   // 娉ㄥ唽
   components: {
-    PopUp,
+    gap,
+    multiple,
+    short,
+    single,
+    trues,
+    QuestionShow,
+    Pagination
   },
   data() {
     return {
-      formLabelAlign: {
-        type: "",
-        user: "",
-        region: "",
+      updateId: '',
+      questionShow: {
+        qType: 0,
+        dialog: false,
+        question: null,
+        loading: false
       },
-      tableData: [
-        {
-          title: "褰揂涓嶣涓�璧蜂慨璺�",
-          type: "閫夋嫨棰�",
-          subject: "璇枃",
-          score: ["A"],
-        },
-        {
-          title: "褰揂涓嶣涓�璧蜂慨璺�",
-          type: "閫夋嫨棰�",
-          subject: "璇枃",
-          score: ["A"],
-        },
-        {
-          title: "褰揂涓嶣涓�璧蜂慨璺�",
-          type: "閫夋嫨棰�",
-          subject: "璇枃",
-          score: ["A"],
-        },
-        {
-          title: "褰揂涓嶣涓�璧蜂慨璺�",
-          type: "閫夋嫨棰�",
-          subject: "璇枃",
-          score: ["A", "B"],
-        },
-        {
-          title: "褰揂涓嶣涓�璧蜂慨璺�",
-          type: "閫夋嫨棰�",
-          subject: "璇枃",
-          score: ["A"],
-        },
-        {
-          title: "褰揂涓嶣涓�璧蜂慨璺�",
-          type: "閫夋嫨棰�",
-          subject: "璇枃",
-          score: ["A"],
-        },
-        {
-          title: "褰揂涓嶣涓�璧蜂慨璺�",
-          type: "閫夋嫨棰�",
-          subject: "璇枃",
-          score: ["A"],
-        },
-        {
-          title: "褰揂涓嶣涓�璧蜂慨璺�",
-          type: "閫夋嫨棰�",
-          subject: "璇枃",
-          score: ["A"],
-        },
-        {
-          title: "褰揂涓嶣涓�璧蜂慨璺�",
-          type: "閫夋嫨棰�",
-          subject: "璇枃",
-          score: ["A"],
-        },
-      ],
+      listLoading: true,
+      queryParam: {
+        questionType: [],
+        subjectId: [],
+        content: '',
+        status: '',
+        pageIndex: 1,
+        pageSize: 10
+      },
+      total: 0,
+      gapVisible: false,
+      multipleVisible: false,
+      shortVisible: false,
+      singleVisible: false,
+      truesVisible: false,
+      tableData: [],
+      subjects: []
     };
   },
+  created() {
+    this.search()
+    this.getSubjects();
+  },
   methods: {
-    // 杩斿洖涓婁竴涓〉闈�
-    goBack() {
-      this.$router.back();
+    // 鑾峰彇绉戠洰
+    getSubjects() {
+      subjectApi.list().then(re => {
+        this.subjects = re.data
+      })
+    },
+    callback() {
+      this.gapVisible = false;
+      this.multipleVisible = false;
+      this.shortVisible = false;
+      this.singleVisible = false;
+      this.truesVisible = false;
+      this.search()
+    },
+    // 鑾峰彇鍒楄〃
+    search() {
+      this.listLoading = true
+      questionApi.pageList(this.queryParam).then(re => {
+        this.tableData = re.data.list
+        this.total = re.data.total
+        this.queryParam.pageSize = re.data.pageSize
+        this.queryParam.pageIndex = re.data.pageNum
+        this.listLoading = false
+      })
     },
     // 淇敼琛ㄥ崟澶撮儴鐨勯鑹�
     getRowClass() {
       return "background:#d2d3d6";
     },
-
-    // 鐢熸垚璇曞嵎
-    getCreate() {
-      // 璺宠浆鍒扮敓鎴愰〉闈�
-      //璺宠浆鍒板搴旂殑绠$悊椤甸潰
-      this.$router.push({
-        path: "/manage/test-paper-generation",
-      });
-    },
-
     // 鐐瑰嚮鍚庤皟鐢ㄥ脊绐楃粍浠剁殑鏂规硶,寮�鍚脊绐�
-    getDialogFormVisible() {
-      this.$refs.popUp.showDialog();
+    getDialogFormVisible(value) {
+      switch (value) {
+        case "濉┖棰�":
+          this.gapVisible = true;
+          break;
+        case "澶氶�夐":
+          this.multipleVisible = true;
+          break;
+        case "绠�绛旈":
+          this.shortVisible = true;
+          break;
+        case "鍗曢�夐":
+          this.singleVisible = true;
+          break;
+        case "鍒ゆ柇棰�":
+          this.truesVisible = true;
+          break;
+      }
+      this.updateId = '';
     },
     // 寮圭獥
     // 鎺ユ敹寮圭獥缁勪欢杩斿洖鐨勮〃鍗曞��
     parentGoods(obj) {
       console.log(obj, "寮圭獥缁勪欢鐨勮〃鍗曞��");
     },
+    showQuestion(row) {
+      let _this = this
+      this.questionShow.dialog = true
+      this.questionShow.loading = true
+      questionApi.select(row.id).then(re => {
+        _this.questionShow.qType = re.data.questionType
+        _this.questionShow.question = re.data
+        _this.questionShow.loading = false
+      })
+    },
+    editQuestion(row) {
+      this.getDialogFormVisible(row.questionTypeName);
+      this.updateId = row.id;
+    },
+    statusQuestion(row) {
+      let question = {
+        id: row.id,
+        status: row.status === '绂佺敤' ? '鍚敤' : '绂佺敤'
+      }
+      questionApi.updateStatus(question).then(re => {
+        if (re.code === 1) {
+          this.$message.success(re.message)
+          this.search()
+        } else {
+          this.$message.error(re.message)
+        }
+      })
+    },
+    deleteQuestion(row) {
+      let _this = this
+      questionApi.deleteQuestion(row.id).then(re => {
+        if (re.code === 1) {
+          _this.search()
+          _this.$message.success(re.message)
+        } else {
+          _this.$message.error(re.message)
+        }
+      })
+    },
   },
+  computed: {
+    ...mapGetters('enumItem', ['enumFormat']),
+    ...mapState('enumItem', {
+      questionTypeEnum: state => state.exam.question.typeEnum,
+      editUrlEnum: state => state.exam.question.editUrlEnum
+    }),
+    ...mapGetters('exam', ['subjectEnumFormat']),
+  }
 };
 </script>
 <style scoped lang="scss">
 .flex {
   display: flex;
 }
+
 // 鍐呭
 .content {
   width: 1262px;
@@ -258,5 +282,3 @@
   border-radius: 10px;
 }
 </style>
-
-

--
Gitblit v1.8.0