From 35e2e16f92ca4932407ed16783d17e06e2bdae0b Mon Sep 17 00:00:00 2001
From: luohairen <3399054449@qq.com>
Date: 星期一, 28 十月 2024 17:13:08 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
src/views/exam/question/list.vue | 168 +++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 117 insertions(+), 51 deletions(-)
diff --git a/src/views/exam/question/list.vue b/src/views/exam/question/list.vue
index 36bb9c4..0f44ddc 100644
--- a/src/views/exam/question/list.vue
+++ b/src/views/exam/question/list.vue
@@ -1,59 +1,81 @@
<template>
<div class="app-container">
<el-form :model="queryParam" ref="queryForm" :inline="true">
- <el-form-item label="棰樼洰ID锛�">
- <el-input v-model="queryParam.id" clearable></el-input>
+ <el-form-item>
+ <el-input v-model="queryParam.content" placeholder="璇疯緭鍏ラ鐩�" clearable @input="search"></el-input>
</el-form-item>
- <el-form-item label="棰樼洰鍐呭锛�">
- <el-input v-model="queryParam.content" clearable></el-input>
- </el-form-item>
-
- <el-form-item label="骞寸骇锛�">
- <el-select v-model="queryParam.level" placeholder="骞寸骇" @change="levelChange" clearable>
- <el-option v-for="item in levelEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="瀛︾锛�">
- <el-select v-model="queryParam.subjectId" clearable>
- <el-option v-for="item in subjectFilter" :key="item.id" :value="item.id"
- :label="item.name+' ( '+item.levelName+' )'"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="棰樺瀷锛�">
- <el-select v-model="queryParam.questionType" clearable>
- <el-option v-for="item in questionType" :key="item.key" :value="item.key" :label="item.value"></el-option>
+ <el-form-item>
+ <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-button type="primary" @click="submitForm">鏌ヨ</el-button>
+ <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>
+ <el-button type="primary" @click="search" size="small">鏌ヨ</el-button>
<el-popover placement="bottom" trigger="click">
<el-button type="warning" size="mini" v-for="item in editUrlEnum" :key="item.key"
- @click="$router.push({path:item.value})">{{item.name}}
+ @click="$router.push({ path: item.value })">{{ item.name }}
</el-button>
- <el-button slot="reference" type="primary" class="link-left">娣诲姞</el-button>
+ <el-button slot="reference" type="primary" class="link-left" size="small">娣诲姞</el-button>
</el-popover>
+ <el-button class="link-left" type="danger" @click="downloadImportTemplate" size="small">涓嬭浇妯℃澘</el-button>
+ <el-upload
+ style="display: inline;"
+ class="op-item link-left"
+ action="/api/admin/question/import"
+ :with-credentials="true"
+ :on-success="handlePreview"
+ accept=".xls,.xlsx"
+ :show-file-list="false"
+ :before-upload="beforeAvatarUpload">
+ <el-button v-loading="importLoading" type="primary" size="small">瀵煎叆</el-button>
+ </el-upload>
</el-form-item>
</el-form>
<el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row style="width: 100%">
- <el-table-column prop="id" label="Id" width="90px"/>
- <el-table-column prop="subjectId" label="瀛︾" :formatter="subjectFormatter" width="120px"/>
- <el-table-column prop="questionType" label="棰樺瀷" :formatter="questionTypeFormatter" width="70px"/>
- <el-table-column prop="shortTitle" label="棰樺共" show-overflow-tooltip/>
- <el-table-column prop="score" label="鍒嗘暟" width="60px"/>
- <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="id" label="缂栧彿" width="80px" />
+ <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="difficult" label="闅惧害" width="100px" />
+ <el-table-column align="center" prop="createTime" label="鍒涘缓鏃堕棿" width="160px" />
+ <el-table-column align="center" prop="status" label="鐘舵��" width="100px">
<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>
- <pagination v-show="total>0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize"
- @pagination="search"/>
+ <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize"
+ @pagination="search" />
<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>
@@ -63,11 +85,13 @@
import Pagination from '@/components/Pagination'
import QuestionShow from './components/Show'
import questionApi from '@/api/question'
+import { downloadExcel } from '@/utils/download'
export default {
components: { Pagination, QuestionShow },
- data () {
+ data() {
return {
+ importLoading: '',
queryParam: {
id: null,
questionType: null,
@@ -88,47 +112,88 @@
}
}
},
- created () {
+ created() {
this.initSubject()
this.search()
},
methods: {
- submitForm () {
+ handlePreview (e) {
+ this.importLoading = false
+ if (e.code === 1) {
+ this.search()
+ this.$message.success(e.message)
+ } else {
+ this.$message.error(e.message)
+ }
+ },
+ beforeAvatarUpload (file) {
+ this.importLoading = true
+ let legalName = ['xlsx', 'xls']
+ // 鎷垮埌鍚庣紑鍚�
+ let name = file.name.substring(file.name.lastIndexOf('.') + 1, file.name.length)
+ if (legalName.includes(name)) {
+ // console.log(legalName.includes(name));
+ } else {
+ this.$message.warning('璇蜂笂浼爔ls銆亁lsx鏂囦欢')
+ return false
+ }
+ },
+ // 涓嬭浇瀵煎叆妯℃澘
+ downloadImportTemplate() {
+ questionApi.downloadImportTemplate().then(res => {
+ downloadExcel(res, '棰樼洰瀵煎叆妯℃澘')
+ })
+ },
+ 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)
+ }
+ })
+ },
+ submitForm() {
this.queryParam.pageIndex = 1
this.search()
},
- search () {
+ search() {
this.listLoading = true
questionApi.pageList(this.queryParam).then(data => {
- const re = data.response
+ const re = data.data
this.tableData = re.list
this.total = re.total
this.queryParam.pageIndex = re.pageNum
this.listLoading = false
})
},
- levelChange () {
+ levelChange() {
this.queryParam.subjectId = null
this.subjectFilter = this.subjects.filter(data => data.level === this.queryParam.level)
},
- addQuestion () {
+ addQuestion() {
this.$router.push('/exam/question/edit/singleChoice')
},
- showQuestion (row) {
+ showQuestion(row) {
let _this = this
this.questionShow.dialog = true
this.questionShow.loading = true
questionApi.select(row.id).then(re => {
- _this.questionShow.qType = re.response.questionType
- _this.questionShow.question = re.response
+ _this.questionShow.qType = re.data.questionType
+ _this.questionShow.question = re.data
_this.questionShow.loading = false
})
},
- editQuestion (row) {
+ editQuestion(row) {
let url = this.enumFormat(this.editUrlEnum, row.questionType)
this.$router.push({ path: url, query: { id: row.id } })
},
- deleteQuestion (row) {
+ deleteQuestion(row) {
let _this = this
questionApi.deleteQuestion(row.id).then(re => {
if (re.code === 1) {
@@ -139,10 +204,10 @@
}
})
},
- questionTypeFormatter (row, column, cellValue, index) {
+ questionTypeFormatter(row, column, cellValue, index) {
return this.enumFormat(this.questionType, cellValue)
},
- subjectFormatter (row, column, cellValue, index) {
+ subjectFormatter(row, column, cellValue, index) {
return this.subjectEnumFormat(cellValue)
},
...mapActions('exam', { initSubject: 'initSubject' })
@@ -150,6 +215,7 @@
computed: {
...mapGetters('enumItem', ['enumFormat']),
...mapState('enumItem', {
+ questionTypeEnum: state => state.exam.question.typeEnum,
questionType: state => state.exam.question.typeEnum,
editUrlEnum: state => state.exam.question.editUrlEnum,
levelEnum: state => state.user.levelEnum
--
Gitblit v1.8.0