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