From 41add03082382e18a3207cf08156f9416744b58a Mon Sep 17 00:00:00 2001
From: 龚焕茏 <2842157468@qq.com>
Date: 星期三, 05 六月 2024 18:02:54 +0800
Subject: [PATCH] feat:新增科目界面

---
 src/views/Manage/TestPaper/QuestionBank.vue |   10 -
 src/views/Manage/Manage.vue                 |   40 ++++++++
 src/api/subject.js                          |    1 
 src/router.js                               |    7 +
 src/views/Manage/TestPaper/subject.vue      |  215 +++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 267 insertions(+), 6 deletions(-)

diff --git a/src/api/subject.js b/src/api/subject.js
index 99d3491..b4e9fec 100644
--- a/src/api/subject.js
+++ b/src/api/subject.js
@@ -4,6 +4,7 @@
   list: query => post('/api/admin/subject/list'),
   pageList: query => post('/api/admin/subject/page', query),
   edit: query => post('/api/admin/subject/edit', query),
+  updateStatus: query => post('/api/admin/question/status', query),
   select: id => post('/api/admin/subject/select/' + id),
   deleteSubject: id => post('/api/admin/subject/delete/' + id)
 }
diff --git a/src/router.js b/src/router.js
index adcce54..1038fe3 100644
--- a/src/router.js
+++ b/src/router.js
@@ -129,6 +129,13 @@
         component: () => import('@/views/Manage/TestPaper/QuestionBank.vue'),
         meta: { title: '棰樺簱绠$悊' }
       },
+      // 绉戠洰绠$悊
+      {
+        path: 'subject',
+        name: 'subject',
+        component: () => import('@/views/Manage/TestPaper/subject.vue'),
+        meta: { title: '绉戠洰绠$悊' }
+      },
       // 璇曞嵎鐢熸垚
       {
         path: 'test-paper-generation',
diff --git a/src/views/Manage/Manage.vue b/src/views/Manage/Manage.vue
index ba4d18f..eb813a0 100644
--- a/src/views/Manage/Manage.vue
+++ b/src/views/Manage/Manage.vue
@@ -503,6 +503,46 @@
               </div>
               <p>鏁欏笀绠$悊</p>
             </div>
+            <!-- 绉戠洰绠$悊 -->
+            <div
+              class="main-1-con"
+              @click="routersTo('/manage/subject')"
+            >
+              <div class="icon-bg1">
+                <svg
+                  t="1651737345718"
+                  class="icon"
+                  viewBox="0 0 1024 1024"
+                  version="1.1"
+                  xmlns="http://www.w3.org/2000/svg"
+                  p-id="4056"
+                  width="32"
+                  height="32"
+                >
+                  <path
+                    d="M897.28 85.333333h-750.933333c-28.16 0-51.2 23.04-51.2 51.2v750.933334c0 28.16 23.04 51.2 51.2 51.2h276.906666c18.773333 0 34.133333-15.36 34.133334-34.133334s-15.36-34.133333-34.133334-34.133333H163.413333V153.6h716.8v275.626667c0 18.773333 15.36 34.133333 34.133334 34.133333s34.133333-15.36 34.133333-34.133333V136.533333c0-28.16-22.613333-51.2-51.2-51.2z"
+                    fill="#515151"
+                    p-id="4057"
+                  ></path>
+                  <path
+                    d="M649.813333 315.733333h-324.266666c-18.773333 0-34.133333-15.36-34.133334-34.133333s15.36-34.133333 34.133334-34.133333h324.266666c18.773333 0 34.133333 15.36 34.133334 34.133333s-14.933333 34.133333-34.133334 34.133333zM564.48 452.266667h-238.933333c-18.773333 0-34.133333-15.36-34.133334-34.133334s15.36-34.133333 34.133334-34.133333h238.933333c18.773333 0 34.133333 15.36 34.133333 34.133333s-14.933333 34.133333-34.133333 34.133334zM479.146667 588.8h-153.6c-18.773333 0-34.133333-15.36-34.133334-34.133333s15.36-34.133333 34.133334-34.133334h153.6c18.773333 0 34.133333 15.36 34.133333 34.133334s-14.933333 34.133333-34.133333 34.133333zM743.68 529.066667c-113.066667 0-204.8 91.733333-204.8 204.8s91.733333 204.8 204.8 204.8 204.8-91.733333 204.8-204.8c0-112.64-91.306667-204.8-204.8-204.8z m0 341.333333c-75.093333 0-136.533333-61.44-136.533333-136.533333s61.013333-136.533333 136.533333-136.533334 136.533333 61.44 136.533333 136.533334c0 75.52-61.013333 136.533333-136.533333 136.533333z"
+                    fill="#515151"
+                    p-id="4058"
+                  ></path>
+                  <path
+                    d="M709.546667 810.666667c-18.773333 0-34.133333-15.36-34.133334-34.133334v-85.333333c0-18.773333 15.36-34.133333 34.133334-34.133333s34.133333 15.36 34.133333 34.133333v85.333333c0 18.773333-14.933333 34.133333-34.133333 34.133334z"
+                    fill="#515151"
+                    p-id="4059"
+                  ></path>
+                  <path
+                    d="M675.413333 776.533333c0-18.773333 15.36-34.133333 34.133334-34.133333h85.333333c18.773333 0 34.133333 15.36 34.133333 34.133333s-15.36 34.133333-34.133333 34.133334h-85.333333c-18.773333 0-34.133333-15.36-34.133334-34.133334z"
+                    fill="#515151"
+                    p-id="4060"
+                  ></path>
+                </svg>
+              </div>
+              <p>绉戠洰绠$悊</p>
+            </div>
             <!-- 棰樺簱绠$悊 -->
             <div
               class="main-1-con"
diff --git a/src/views/Manage/TestPaper/QuestionBank.vue b/src/views/Manage/TestPaper/QuestionBank.vue
index 473b0c4..a8d238d 100644
--- a/src/views/Manage/TestPaper/QuestionBank.vue
+++ b/src/views/Manage/TestPaper/QuestionBank.vue
@@ -12,7 +12,7 @@
               <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-button slot="reference" type="primary" class="link-left">鏂板</el-button>
             </el-popover>
           </div>
           <!-- 鎼滅储 -->
@@ -39,7 +39,7 @@
                 </el-select>
               </el-form-item>
 
-              <el-form-item label="">
+              <el-form-item>
                 <el-button style="width:100px;" type="primary" size="small" @click="search()">鏌ヨ</el-button>
               </el-form-item>
             </el-form>
@@ -47,14 +47,12 @@
           <!-- 琛ㄦ牸 -->
           <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 align="center" prop="shortTitle" label="棰樼洰" show-overflow-tooltip>
             </el-table-column>
             <el-table-column align="center" prop="subjectName" label="绉戠洰" width="150px">
             </el-table-column>
             <el-table-column align="center" prop="questionTypeName" label="棰樺瀷" width="100px">
             </el-table-column>
-            <!-- <el-table-column align="center" prop="score" label="鍒嗘暟">
-            </el-table-column> -->
             <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">
@@ -80,8 +78,8 @@
             :limit.sync="queryParam.pageSize" @pagination="search" />
         </div>
       </div>
-
     </div>
+
     <!-- 濉┖ -->
     <el-dialog :visible.sync="gapVisible" :close-on-click-modal="false" v-if="gapVisible">
       <gap ref="gap" @children="parentGoods" @callback="callback" :id="updateId" />
diff --git a/src/views/Manage/TestPaper/subject.vue b/src/views/Manage/TestPaper/subject.vue
new file mode 100644
index 0000000..a313b0a
--- /dev/null
+++ b/src/views/Manage/TestPaper/subject.vue
@@ -0,0 +1,215 @@
+<!-- 绉戠洰绠$悊 -->
+<template>
+  <div class="c">
+    <div class="bg">
+      <div class="main">
+        <!-- 寰呰繑鍥炵殑鏍囬 -->
+        <TitleIndex title="绉戠洰绠$悊" />
+        <div class="content">
+          <!-- 鏂板鎸夐挳 -->
+          <div style="padding-bottom:20px; border-bottom: 3px solid #409EFF;margin-bottom: 20px;">
+            <el-button type="primary" class="link-left" @click="edit()">鏂板</el-button>
+          </div>
+          <!-- 鎼滅储 -->
+          <div>
+            <el-form :inline="true" :model="queryParam" class="demo-form-inline" label-width="80px">
+              <el-form-item>
+                <el-input v-model="queryParam.name" placeholder="璇疯緭鍏ュ悕绉�" clearable></el-input>
+              </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>
+                <el-button style="width:100px;" type="primary" size="small" @click="search()">鏌ヨ</el-button>
+              </el-form-item>
+            </el-form>
+          </div>
+          <!-- 琛ㄦ牸 -->
+          <el-table v-loading="listLoading" :header-cell-style="getRowClass" :data="tableData" border
+            style="width: 100%;">
+            <el-table-column align="center" prop="name" label="鍚嶇О" show-overflow-tooltip />
+            <el-table-column align="center" prop="itemOrder" label="鎺掑簭" width="150px" />
+            <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" width="300px">
+              <template slot-scope="{row}">
+                <el-button size="mini" @click="edit(row)">缂栬緫</el-button>
+                <el-button size="mini" type="primary" @click="status(row)">{{ row.status === "绂佺敤" ? "鍚敤" : "绂佺敤"
+                  }}</el-button>
+                <el-popconfirm title="纭鍒犻櫎鍚�" @confirm="deleteSubject(row)">
+                  <el-button slot="reference" size="mini" type="danger" class="link-left">鍒犻櫎</el-button>
+                </el-popconfirm>
+              </template>
+            </el-table-column>
+          </el-table>
+          <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex"
+            :limit.sync="queryParam.pageSize" @pagination="search" />
+        </div>
+      </div>
+    </div>
+
+    <el-dialog :visible.sync="form.visible" style="width: 100%;height: 100%">
+      <el-form :model="form" ref="form" label-width="100px" v-loading="formLoading" :rules="rules">
+        <el-form-item label="鍚嶇О锛�" prop="name" required>
+          <el-input v-model="form.name" />
+        </el-form-item>
+        <el-form-item label="鎺掑簭锛�" prop="itemOrder" required>
+          <el-input v-model="form.itemOrder" type="number" />
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="submitForm">鎻愪氦</el-button>
+          <el-button @click="resetForm">閲嶇疆</el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+  </div>
+</template>
+<script>
+// 寮曞叆褰堝嚭绐楀彛绲勪欢
+import subjectApi from '@/api/subject'
+import Pagination from '@/components/Pagination'
+
+export default {
+  // 娉ㄥ唽
+  components: {
+    Pagination
+  },
+  data() {
+    return {
+      listLoading: true,
+      queryParam: {
+        name: '',
+        pageIndex: 1,
+        pageSize: 10
+      },
+      formLoading: false,
+      total: 0,
+      tableData: [],
+      form: {
+        id: '',
+        name: '',
+        itemOrder: '',
+        visible: false
+      },
+      rules: {
+        name: [
+          { required: true, message: '璇疯緭鍏ュ悕绉�', trigger: 'blur' }
+        ],
+        itemOrder: [
+          { required: true, message: '璇疯緭鍏ユ帓搴�', trigger: 'blur', type: 'number' }
+        ]
+      },
+    };
+  },
+  created() {
+    this.search()
+  },
+  methods: {
+    // 鑾峰彇鎺掑簭
+    getItemOrder() {
+      subjectApi.getItemOrder.then(re => {
+        this.form.itemOrder = re.data
+      })
+    },
+    // 鑾峰彇鍒楄〃
+    search() {
+      this.listLoading = true
+      subjectApi.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";
+    },
+    edit(row) {
+      if (row) {
+        subjectApi.select(row.id).then(re => {
+          if (re.code === 1) {
+            this.form.visible = true;
+            this.form = re.data;
+          } else {
+            this.$message.error(re.message)
+          }
+        })
+      } else {
+        this.form.visible = true;
+      }
+    },
+    status(row) {
+      let question = {
+        id: row.id,
+        status: row.status === '绂佺敤' ? '鍚敤' : '绂佺敤'
+      }
+      subjectApi.updateStatus(question).then(re => {
+        if (re.code === 1) {
+          this.$message.success(re.message)
+          this.search()
+        } else {
+          this.$message.error(re.message)
+        }
+      })
+    },
+    deleteSubject(row) {
+      let _this = this
+      subjectApi.deleteSubject(row.id).then(re => {
+        if (re.code === 1) {
+          _this.search()
+          _this.$message.success(re.message)
+        } else {
+          _this.$message.error(re.message)
+        }
+      })
+    },
+    submitForm() {
+      let _this = this
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          this.formLoading = true
+          subjectApi.edit(this.form).then(re => {
+            if (re.code === 1) {
+              _this.$message.success(re.message)
+              _this.search()
+            } else {
+              _this.$message.error(re.message)
+              this.formLoading = false
+            }
+          })
+        }
+      })
+    },
+    resetForm() {
+      let lastId = this.form.id
+      this.$refs['form'].resetFields()
+      this.form.id = lastId
+    },
+  }
+};
+</script>
+<style scoped lang="scss">
+.flex {
+  display: flex;
+}
+
+// 鍐呭
+.content {
+  width: 1262px;
+  margin-bottom: 80px;
+  background-color: #fff;
+  padding: 20px 40px;
+  border-radius: 10px;
+}
+</style>

--
Gitblit v1.8.0