From 05ea3ffeb18b80ddadfb411dd725d05cff1dd2e1 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期三, 05 六月 2024 17:03:38 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/components/PopUp/multiple-choice.vue | 19 ++- src/views/Manage/TestPaper/QuestionBank.vue | 145 +++++++++++++++++----------- src/components/PopUp/gap-filling.vue | 23 ++- src/components/PopUp/single-choice.vue | 18 ++- src/components/PopUp/true-false.vue | 18 ++- src/components/PopUp/question/Show.vue | 5 + src/api/question.js | 1 src/components/PopUp/short-answer.vue | 18 ++- 8 files changed, 155 insertions(+), 92 deletions(-) diff --git a/src/api/question.js b/src/api/question.js index f28d6ce..780e7a5 100644 --- a/src/api/question.js +++ b/src/api/question.js @@ -3,6 +3,7 @@ export default { pageList: query => post('/api/admin/question/page', query), edit: query => post('/api/admin/question/edit', query), + updateStatus: query => post('/api/admin/question/status', query), select: id => post('/api/admin/question/select/' + id), deleteQuestion: id => post('/api/admin/question/delete/' + id) } diff --git a/src/components/PopUp/gap-filling.vue b/src/components/PopUp/gap-filling.vue index 46992d7..24d349d 100644 --- a/src/components/PopUp/gap-filling.vue +++ b/src/components/PopUp/gap-filling.vue @@ -12,18 +12,17 @@ <el-form-item label="濉┖绛旀锛�" required> <el-form-item :label="item.prefix" :key="item.prefix" v-for="item in form.items" label-width="50px" class="question-item-label"> - <el-input v-model="item.content" @focus="inputClick(item, 'content')" class="question-item-content-input" - style="width: 50%" /> - <span class="question-item-span">鍒嗘暟锛�</span><el-input-number v-model="item.score" :precision="1" :step="1" - :max="100"></el-input-number> + <el-input v-model="item.content" @focus="inputClick(item, 'content')" class="question-item-content-input" /> + <!-- <span v-if="false" class="question-item-span">鍒嗘暟锛�</span><el-input-number v-model="item.score" :precision="1" :step="1" + :max="100"></el-input-number> --> </el-form-item> </el-form-item> <el-form-item label="瑙f瀽锛�" prop="analyze" required> <el-input v-model="form.analyze" @focus="inputClick(form, 'analyze')" /> </el-form-item> - <el-form-item label="鍒嗘暟锛�" prop="score" required> + <!-- <el-form-item label="鍒嗘暟锛�" prop="score" required> <el-input-number v-model="form.score" :precision="1" :step="1" :max="100"></el-input-number> - </el-form-item> + </el-form-item> --> <el-form-item label="闅惧害锛�" required> <el-rate v-model="form.difficult" class="question-item-rate"></el-rate> </el-form-item> @@ -105,17 +104,23 @@ }, } }, + props: { + id: { + type: Number, + default: 0 + } + }, created() { - let id = this.$route.query.id + this.getSubjects(); + let id = this.id let _this = this if (id && parseInt(id) !== 0) { _this.formLoading = true questionApi.select(id).then(re => { - _this.form = re.response + _this.form = re.data _this.formLoading = false }) } - this.getSubjects(); }, methods: { // 鑾峰彇绉戠洰 diff --git a/src/components/PopUp/multiple-choice.vue b/src/components/PopUp/multiple-choice.vue index 4ee4d6c..007389c 100644 --- a/src/components/PopUp/multiple-choice.vue +++ b/src/components/PopUp/multiple-choice.vue @@ -19,9 +19,9 @@ <el-form-item label="瑙f瀽锛�" prop="analyze" required> <el-input v-model="form.analyze" @focus="inputClick(form,'analyze')" /> </el-form-item> - <el-form-item label="鍒嗘暟锛�" prop="score" required> + <!-- <el-form-item label="鍒嗘暟锛�" prop="score" required> <el-input-number v-model="form.score" :precision="1" :step="1" :max="100"></el-input-number> - </el-form-item> + </el-form-item> --> <el-form-item label="闅惧害锛�" required> <el-rate v-model="form.difficult" class="question-item-rate"></el-rate> </el-form-item> @@ -53,7 +53,7 @@ <script> import QuestionShow from '@/components/PopUp/question/Show' import Ueditor from '@/components/Ueditor' -import { mapGetters, mapState, mapActions } from 'vuex' +import { mapActions } from 'vuex' import questionApi from '@/api/question' import subjectApi from '@/api/subject' @@ -117,13 +117,20 @@ } } }, - created () { - let id = this.$route.query.id + props: { + id: { + type: Number, + default: 0 + } + }, + created() { + this.getSubjects(); + let id = this.id let _this = this if (id && parseInt(id) !== 0) { _this.formLoading = true questionApi.select(id).then(re => { - _this.form = re.response + _this.form = re.data _this.formLoading = false }) } diff --git a/src/components/PopUp/question/Show.vue b/src/components/PopUp/question/Show.vue index 2b7e9c9..b1f3757 100644 --- a/src/components/PopUp/question/Show.vue +++ b/src/components/PopUp/question/Show.vue @@ -60,3 +60,8 @@ methods: {} } </script> +<style scoped> + /deep/ td { + background-color: #f0f0f0; + } +</style> \ No newline at end of file diff --git a/src/components/PopUp/short-answer.vue b/src/components/PopUp/short-answer.vue index d5fc6ff..dcf5feb 100644 --- a/src/components/PopUp/short-answer.vue +++ b/src/components/PopUp/short-answer.vue @@ -15,9 +15,9 @@ <el-form-item label="瑙f瀽锛�" prop="analyze" required> <el-input v-model="form.analyze" @focus="inputClick(form,'analyze')" /> </el-form-item> - <el-form-item label="鍒嗘暟锛�" prop="score" required> + <!-- <el-form-item label="鍒嗘暟锛�" prop="score" required> <el-input-number v-model="form.score" :precision="1" :step="1" :max="100"></el-input-number> - </el-form-item> + </el-form-item> --> <el-form-item label="闅惧害锛�" required> <el-rate v-model="form.difficult" class="question-item-rate"></el-rate> </el-form-item> @@ -43,7 +43,6 @@ <script> import QuestionShow from '@/components/PopUp/question/Show' import Ueditor from '@/components/Ueditor' -import { mapGetters, mapState, mapActions } from 'vuex' import questionApi from '@/api/question' import subjectApi from '@/api/subject' @@ -102,13 +101,20 @@ } } }, - created () { - let id = this.$route.query.id + props: { + id: { + type: Number, + default: 0 + } + }, + created() { + this.getSubjects(); + let id = this.id let _this = this if (id && parseInt(id) !== 0) { _this.formLoading = true questionApi.select(id).then(re => { - _this.form = re.response + _this.form = re.data _this.formLoading = false }) } diff --git a/src/components/PopUp/single-choice.vue b/src/components/PopUp/single-choice.vue index 80338ba..7c35dd5 100644 --- a/src/components/PopUp/single-choice.vue +++ b/src/components/PopUp/single-choice.vue @@ -19,9 +19,9 @@ <el-form-item label="瑙f瀽锛�" prop="analyze" required> <el-input v-model="form.analyze" @focus="inputClick(form,'analyze')" /> </el-form-item> - <el-form-item label="鍒嗘暟锛�" prop="score" required> + <!-- <el-form-item label="鍒嗘暟锛�" prop="score" required> <el-input-number v-model="form.score" :precision="1" :step="1" :max="100"></el-input-number> - </el-form-item> + </el-form-item> --> <el-form-item label="闅惧害锛�" required> <el-rate v-model="form.difficult" class="question-item-rate"></el-rate> </el-form-item> @@ -53,7 +53,6 @@ <script> import QuestionShow from '@/components/PopUp/question/Show' import Ueditor from '@/components/Ueditor' -import { mapGetters, mapState, mapActions } from 'vuex' import questionApi from '@/api/question' import subjectApi from '@/api/subject' @@ -117,13 +116,20 @@ } } }, - created () { - let id = this.$route.query.id + props: { + id: { + type: Number, + default: 0 + } + }, + created() { + this.getSubjects(); + let id = this.id let _this = this if (id && parseInt(id) !== 0) { _this.formLoading = true questionApi.select(id).then(re => { - _this.form = re.response + _this.form = re.data _this.formLoading = false }) } diff --git a/src/components/PopUp/true-false.vue b/src/components/PopUp/true-false.vue index 45f1865..90f0efa 100644 --- a/src/components/PopUp/true-false.vue +++ b/src/components/PopUp/true-false.vue @@ -18,9 +18,9 @@ <el-form-item label="瑙f瀽锛�" prop="analyze" required> <el-input v-model="form.analyze" @focus="inputClick(form,'analyze')" /> </el-form-item> - <el-form-item label="鍒嗘暟锛�" prop="score" required> + <!-- <el-form-item label="鍒嗘暟锛�" prop="score" required> <el-input-number v-model="form.score" :precision="1" :step="1" :max="100"></el-input-number> - </el-form-item> + </el-form-item> --> <el-form-item label="闅惧害锛�" required> <el-rate v-model="form.difficult" class="question-item-rate"></el-rate> </el-form-item> @@ -51,7 +51,6 @@ <script> import QuestionShow from '@/components/PopUp/question/Show' import Ueditor from '@/components/Ueditor' -import { mapGetters, mapState, mapActions } from 'vuex' import questionApi from '@/api/question' import subjectApi from '@/api/subject' @@ -113,13 +112,20 @@ } } }, - created () { - let id = this.$route.query.id + props: { + id: { + type: Number, + default: 0 + } + }, + created() { + this.getSubjects(); + let id = this.id let _this = this if (id && parseInt(id) !== 0) { _this.formLoading = true questionApi.select(id).then(re => { - _this.form = re.response + _this.form = re.data _this.formLoading = false }) } diff --git a/src/views/Manage/TestPaper/QuestionBank.vue b/src/views/Manage/TestPaper/QuestionBank.vue index aeb052a..473b0c4 100644 --- a/src/views/Manage/TestPaper/QuestionBank.vue +++ b/src/views/Manage/TestPaper/QuestionBank.vue @@ -19,21 +19,23 @@ <div> <el-form :inline="true" :model="queryParam" class="demo-form-inline" label-width="80px"> <el-form-item> - <el-input v-model="queryParam.content" placeholder="棰樼洰鍚�"></el-input> + <el-input v-model="queryParam.content" placeholder="璇疯緭鍏ラ鐩�" clearable></el-input> </el-form-item> <el-form-item> - <el-select v-model="queryParam.subjectId" 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="queryParam.questionType" 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> @@ -43,56 +45,66 @@ </el-form> </div> <!-- 琛ㄦ牸 --> - <el-table v-loading="listLoading" :header-cell-style="getRowClass" :data="tableData" border style="width: 100%;"> - <el-table-column align="center" prop="shortTitle" 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="subjectName" label="绉戠洰"> + <el-table-column align="center" prop="subjectName" label="绉戠洰" width="150px"> </el-table-column> - <el-table-column align="center" prop="questionTypeName" 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> - <el-table-column prop="difficult" label="闅惧害" width="60px"/> - <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" width="160px"/> - <el-table-column label="鎿嶄綔" align="center" width="220px"> + <!-- <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"> <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="danger" @click="deleteQuestion(row)" class="link-left">鍒犻櫎</el-button> + <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="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;"> - <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex" - :limit.sync="queryParam.pageSize" @pagination="search" /> - </div> + <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex" + :limit.sync="queryParam.pageSize" @pagination="search" /> </div> </div> </div> <!-- 濉┖ --> - <el-dialog :visible.sync="gapVisible" :close-on-click-modal="false"> - <gap ref="gap" @children="parentGoods" @callback="callback" /> + <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"> - <multiple ref="multiple" @children="parentGoods" @callback="callback" /> + <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"> - <short ref="short" @children="parentGoods" @callback="callback" /> + <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"> - <single ref="single" @children="parentGoods" @callback="callback" /> + <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"> - <trues ref="trues" @children="parentGoods" @callback="callback" /> + <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"/> + <QuestionShow :qType="questionShow.qType" :question="questionShow.question" :qLoading="questionShow.loading" /> </el-dialog> </div> </template> @@ -106,6 +118,8 @@ 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 { // 娉ㄥ唽 @@ -115,10 +129,12 @@ short, single, trues, - QuestionShow + QuestionShow, + Pagination }, data() { return { + updateId: '', questionShow: { qType: 0, dialog: false, @@ -127,9 +143,10 @@ }, listLoading: true, queryParam: { - questionType: null, - subjectId: null, - content: null, + questionType: [], + subjectId: [], + content: '', + status: '', pageIndex: 1, pageSize: 10 }, @@ -140,12 +157,20 @@ singleVisible: false, truesVisible: false, tableData: [], + subjects: [] }; }, created() { this.search() + this.getSubjects(); }, methods: { + // 鑾峰彇绉戠洰 + getSubjects() { + subjectApi.list().then(re => { + this.subjects = re.data + }) + }, callback() { this.gapVisible = false; this.multipleVisible = false; @@ -165,21 +190,9 @@ this.listLoading = false }) }, - // 杩斿洖涓婁竴涓〉闈� - goBack() { - this.$router.back(); - }, // 淇敼琛ㄥ崟澶撮儴鐨勯鑹� getRowClass() { return "background:#d2d3d6"; - }, - // 鐢熸垚璇曞嵎 - getCreate() { - // 璺宠浆鍒扮敓鎴愰〉闈� - //璺宠浆鍒板搴旂殑绠$悊椤甸潰 - this.$router.push({ - path: "/manage/test-paper-generation", - }); }, // 鐐瑰嚮鍚庤皟鐢ㄥ脊绐楃粍浠剁殑鏂规硶,寮�鍚脊绐� getDialogFormVisible(value) { @@ -200,13 +213,14 @@ this.truesVisible = true; break; } + this.updateId = ''; }, // 寮圭獥 // 鎺ユ敹寮圭獥缁勪欢杩斿洖鐨勮〃鍗曞�� parentGoods(obj) { console.log(obj, "寮圭獥缁勪欢鐨勮〃鍗曞��"); }, - showQuestion (row) { + showQuestion(row) { let _this = this this.questionShow.dialog = true this.questionShow.loading = true @@ -216,11 +230,25 @@ _this.questionShow.loading = false }) }, - editQuestion (row) { - let url = this.enumFormat(this.editUrlEnum, row.questionType) - this.$router.push({ path: url, query: { id: row.id } }) + editQuestion(row) { + this.getDialogFormVisible(row.questionTypeName); + this.updateId = row.id; }, - deleteQuestion (row) { + 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) { @@ -239,7 +267,6 @@ editUrlEnum: state => state.exam.question.editUrlEnum }), ...mapGetters('exam', ['subjectEnumFormat']), - ...mapState('exam', { subjects: state => state.subjects }) } }; </script> -- Gitblit v1.8.0