This commit is contained in:
caoqianming 2022-11-02 11:18:40 +08:00
commit c8268bbc26
8 changed files with 961 additions and 0 deletions

View File

@ -330,6 +330,60 @@ export const asyncRoutes = [
}, },
] ]
}, },
// {
// path: '/exam',
// component: Layout,
// redirect: '/exam/questions',
// name: 'exam',
// meta: { title: '考试', icon: 'PT', perms: ['pt_view'] },
// alwaysShow: true,
// children: [
// {
// path: 'classify',
// name: '科目分类',
// component: () => import('@/views/exam/classify.vue'),
// meta: { title: '科目分类', perms: ['pt_view'] }
// },
// {
// path: 'questions',
// name: '题目列表',
// component: () => import('@/views/exam/questions.vue'),
// meta: { title: '题目列表', perms: ['pt_view'] }
// },
// {
// path: 'questionCreate',
// name: '新增题目',
// component: () => import('@/views/exam/questioncreate.vue'),
// meta: { title: '新增题目', perms: ['pt_view'] },
// hidden: true
// },
// {
// path: 'questionUpdate/:id',
// name: '编辑题目',
// component: () => import('@/views/exam/questionupdate.vue'),
// meta: { title: '编辑题目', perms: ['pt_view'] },
// hidden: true
// },
// {
// path: 'testPaper',
// name: '模考考试',
// component: () => import('@/views/exam/testPaper.vue'),
// meta: { title: '模考考试', perms: ['pt_view'] }
// },
// {
// path: 'examPaper',
// name: '正式考试',
// component: () => import('@/views/exam/examPaper.vue'),
// meta: { title: '正式考试', perms: ['pt_view'] }
// },
// {
// path: 'examPublish',
// name: '考试发布',
// component: () => import('@/views/exam/examPublish.vue'),
// meta: { title: '考试发布', perms: ['pt_view'] }
// },
// ]
// },
{ {
path: '/system', path: '/system',
component: Layout, component: Layout,

View File

@ -0,0 +1,194 @@
<template>
<div class="app-container">
<div style="margin-top:10px">
<el-select v-model="listQuery.pid" placeholder="所属领域" clearable style="width: 200px" class="filter-item"
@change="handleFilter">
<el-option v-for="item in typeOptions" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
<el-button type="primary" @click="handleAdd" icon="el-icon-plus">新增</el-button>
</div>
<el-table :data="tableData" style="width: 100%;margin-top:10px;" border fit v-loading="listLoading"
highlight-current-row max-height="600">
<el-table-column type="index" width="50"></el-table-column>
<el-table-column align="center" label="名称">
<template slot-scope="scope">{{ scope.row.name }}</template>
</el-table-column>
<el-table-column align="center" label="所属领域">
<template slot-scope="scope">
<el-tag>{{ scope.row.subject_name }}</el-tag>
</template>
</el-table-column>
<el-table-column label="创建日期">
<template slot-scope="scope">
<span>{{ scope.row.create_time }}</span>
</template>
</el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<el-button type="primary" size="small" @click="handleEdit(scope)" icon="el-icon-edit"
:disabled="!checkPermission(['questioncat_update'])"></el-button>
<el-button type="danger" size="small" @click="handleDelete(scope)" icon="el-icon-delete"
:disabled="!checkPermission(['questioncat_delete'])"></el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit"
@pagination="getList" />
<el-dialog :visible.sync="dialogVisible" :title="dialogType === 'edit' ? '编辑分类' : '新增分类'">
<el-form :model="questioncat" label-width="80px" label-position="right" :rules="rule1" ref="commonForm">
<el-form-item label="名称" prop="name">
<el-input v-model="questioncat.name" placeholder="名称" />
</el-form-item>
<el-form-item label="类型" prop="type">
<el-select v-model="questioncat.type" placeholder="请选择" style="width:100%">
<el-option v-for="item in typeData" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="所属领域" prop="field">
<el-select v-model="questioncat.field" placeholder="请选择" style="width:100%">
<el-option v-for="item in typeOptions" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-form>
<div style="text-align:right;">
<el-button type="danger" @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="confirm('commonForm')">确认</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { getDictList } from "@/api/dict";
import checkPermission from "@/utils/permission";
import Pagination from "@/components/Pagination";
const defaultObj = {
id: "",
name: "",
pid: ""
};
const listQuery = {
page: 1,
limit: 20
};
export default {
components: { Pagination },
data() {
return {
questioncat: defaultObj,
search: "",
total: 0,
listQuery: listQuery,
tableData: [],
typeOptions: [],
listLoading: false,
dialogVisible: false,
dialogType: "new",
rule1: {
name: [{ required: true, message: "请输入名称", trigger: "blur" }],
type: [{ required: true, message: "请选择分类", trigger: "change" }]
},
typeData: [{
value: '公共',
label: '公共'
}, {
value: '专业',
label: '专业'
}],
};
},
computed: {},
created() {
// this.getList();
this.getTypeAll();
},
methods: {
checkPermission,
getList(query = this.listQuery) {
this.listLoading = true;
getQuestioncatList(query).then(response => {
this.tableData = response.data.results;
this.total = response.data.count;
this.listLoading = false;
});
},
//领域类型
getTypeAll() {
getDictList({ type__code: "field_type" }).then((res) => {
this.typeOptions = res.data;
});
},
resetFilter() {
this.search = ""
this.listQuery = listQuery
this.getList();
},
handleFilter() {
this.getList();
},
handleAdd() {
this.questioncat = Object.assign({}, defaultObj);
this.dialogType = "new";
this.dialogVisible = true;
this.$nextTick(() => {
this.$refs["commonForm"].clearValidate();
});
},
handleEdit(scope) {
this.questioncat = Object.assign({}, scope.row); // copy obj
this.dialogType = "edit";
this.dialogVisible = true;
this.$nextTick(() => {
this.$refs["commonForm"].clearValidate();
});
},
handleDelete(scope) {
this.$confirm("确认删除该分类吗?将丢失数据!", "警告", {
confirmButtonText: "确认",
cancelButtonText: "取消",
type: "error"
})
.then(async () => {
await deleteQuestioncat(scope.row.id);
this.getList();
this.$message({
type: "success",
message: "成功删除!"
});
})
.catch(err => {
// console.error(err);
});
},
async confirm(form) {
this.$refs[form].validate(valid => {
if (valid) {
const isEdit = this.dialogType === "edit";
if (isEdit) {
updateQuestioncat(this.questioncat.id, this.questioncat).then(
() => {
this.getList();
this.dialogVisible = false;
this.$message.success('成功')
}
);
} else {
createQuestioncat(this.questioncat).then(res => {
this.getList();
this.dialogVisible = false;
this.$message.success('成功')
});
}
} else {
return false;
}
});
}
}
};
</script>

View File

View File

View File

@ -0,0 +1,222 @@
<template>
<div class="app-container">
<el-card style=" min-height: calc(100vh - 65px);">
<el-form :model="Form" :rules="rules" ref="Form" label-width="100px" status-icon>
<el-form-item label="题型" prop="type">
<el-select v-model="Form.type" style="width: 400px">
<el-option v-for="item in typeOptions" :key="item.key" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="分类" prop="type">
<el-cascader v-model="Form.questioncat" :options="catOptions" :show-all-levels="false" clearable
style="width: 400px"></el-cascader>
</el-form-item>
<el-form-item label="题干" prop="name">
<el-input v-model="Form.name" height="100" width="800px" />
</el-form-item>
<el-form-item label="题干图片" prop="img">
<el-upload
class="avatar-uploader"
:headers="upHeaders"
:action="upUrl"
accept="image/jpeg, image/gif, image/png, image/bmp"
:show-file-list="false"
:on-success="handleImgSuccess"
:before-upload="beforeImgUpload">
<img v-if="Form.img" :src="Form.img" style="width: 200px;height: 100px;display: block;" />
<el-button size="small" type="primary" v-else>点击上传</el-button>
</el-upload>
<el-button type="text" @click="delImg()" v-if="Form.img">删除</el-button>
</el-form-item>
<el-form-item label="选项A" prop="optionA">
<el-input v-model="Form.options.A" height="30" width="800px" :disabled="inputDisable" />
</el-form-item>
<el-form-item label="选项B" prop="optionB">
<el-input v-model="Form.options.B" height="30" width="800px" :disabled="inputDisable" />
</el-form-item>
<el-form-item label="选项C" v-show="Form.type != '判断'">
<el-input v-model="Form.options.C" height="30" width="800px" />
</el-form-item>
<el-form-item label="选项D" v-show="Form.type != '判断'">
<el-input v-model="Form.options.D" height="30" width="800px" />
</el-form-item>
<el-form-item label="选项E" v-show="Form.type != '判断'">
<el-input v-model="Form.options.E" height="30" width="800px" />
</el-form-item>
<el-form-item label="选项F" v-show="Form.type != '判断'">
<el-input v-model="Form.options.F" height="30" width="800px" />
</el-form-item>
<el-form-item label="正确答案" v-if="Form.type == '多选'">
<el-checkbox-group v-model="Form.right">
<el-checkbox label="A"></el-checkbox>
<el-checkbox label="B"></el-checkbox>
<el-checkbox label="C"></el-checkbox>
<el-checkbox label="D"></el-checkbox>
<el-checkbox label="E"></el-checkbox>
<el-checkbox label="F"></el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="正确答案" v-else-if="Form.type == '单选'">
<el-radio-group v-model="Form.right">
<el-radio label="A"></el-radio>
<el-radio label="B"></el-radio>
<el-radio label="C"></el-radio>
<el-radio label="D"></el-radio>
<el-radio label="E"></el-radio>
<el-radio label="F"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="正确答案" v-else>
<el-radio-group v-model="Form.right">
<el-radio label="A"></el-radio>
<el-radio label="B"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="解析">
<el-input v-model="Form.resolution" style="width:600px" type="textarea" :rows=3></el-input>
</el-form-item>
<el-form-item label="真题年份" prop="year">
<el-input v-model="Form.year"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('Form')" :loading="submitLoding">立即创建</el-button>
<el-button @click="resetForm('Form')">重置</el-button>
<el-button type="warning" @click="goBack()">返回</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</template>
<script>
// import el-input from '@/components/Tinymce/index2'
// import { createQuestion,getQuestioncatAll } from "@/api/question";
import { genTree } from "@/utils";
import { upUrl } from "@/api/file";
import { getToken } from "@/utils/auth";
export default {
components: {},
data() {
return {
upHeaders: { Authorization: "JWT " + getToken() },
upUrl: upUrl(),
Form: {
name: "",
type: "",
img: null,
questioncat: null,
year: null,
right: '',
options: {
A: '',
B: ''
}
},
catOptions: [],
inputDisable: false,
submitLoding: false,
rules: {
type: [
{ required: true, message: "请选择", trigger: "blur" }
],
name: [
{ required: true, message: "请输入", trigger: "blur" }
],
},
typeOptions: [
{ key: 1, label: "单选", value: "单选" },
{ key: 2, label: "多选", value: "多选" },
{ key: 3, label: "判断", value: "判断" }
],
};
},
watch: {
'Form.type': 'setOptions'
},
created() {
this.getQuestioncatAll()
},
methods: {
handleImgSuccess(res, file) {
this.Form.img = res.data.path
},
beforeImgUpload(file) {
const isLt2M = file.size / 1024 / 1024 < 0.6;
if (!isLt2M) {
this.$message.error("上传图片大小不能超过 600KB!");
}
return isLt2M;
},
submitForm(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
this.submitLoding = true
this.Form.questioncat = this.Form.questioncat.pop()
// this.Form.name = this.Form.name.replace('<p>','').replace('</p>','')
// for(let key in this.Form.options){
// this.Form.options[key] = this.Form.options[key].replace('<p>','').replace('</p>','')
// }
for (let key in this.Form.options) {
if (!this.Form.options[key]) {
delete this.Form.options[key]
}
}
createQuestion(this.Form).then(response => {
this.submitLoding = false
if (response.code >= 200) {
this.$message({
type: "success",
message: "新建成功!"
});
this.goBack()
}
});
} else {
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
},
goBack() {
this.$router.go(-1)
},
getQuestioncatAll() {
getQuestioncatAll().then(response => {
this.catOptions = genTree(response.data);
});
},
delImg() {
this.Form.img = null
},
setOptions() {
if (this.Form.type == '判断') {
this.Form.options = {
A: '',
B: ''
}
this.inputDisable = true
} else {
this.Form.options = {
A: '',
B: ''
}
this.inputDisable = false
}
if (this.Form.type == '多选') {
this.Form.right = []
} else {
this.Form.right = ''
}
}
}
};
</script>
<style scoped>
.app-container {
height: 100%;
}
</style>

View File

@ -0,0 +1,276 @@
<template>
<div class="app-container">
<div style="margin-top:10px">
<el-cascader v-model="questioncatC" :options="questioncatData" clearable style="width: 200px"
:props="{ checkStrictly: true, emitPath: false }" @change="handleFilter"></el-cascader>
<el-select v-model="listQuery.type" placeholder="题型" clearable style="width: 120px" class="filter-item"
@change="handleFilter">
<el-option v-for="item in typeOptions" :key="item.key" :label="item.label" :value="item.value" />
</el-select>
<el-input v-model="listQuery.search" placeholder="输入题干进行搜索" style="width: 200px;" class="filter-item"
@keyup.enter.native="handleSearch" />
<el-button class="filter-item" type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
<el-button class="filter-item" type="primary" icon="el-icon-refresh-left" @click="resetFilter">刷新重置
</el-button>
<div style="margin-top:10px">
<el-button type="primary" slot="reference" @click="handleAdd()">新增</el-button>
<el-button @click="handleEnabled">启用</el-button>
<el-popover placement="top" width="160" v-if="checkPermission(['question_import'])"
v-model="popovervisible">
<p>导入题目前,请下载模板并按格式录入.</p>
<div style="text-align: left; margin: 0;">
<el-link href="/media/muban/question.xlsx" target="_blank" @click="popovervisible = false"
type="primary">下载模板</el-link>
<el-upload :action="upUrl" :on-success="handleUploadSuccess" accept=".xlsx" :headers="upHeaders"
:show-file-list="false">
<el-button size="small" type="primary" @click="popovervisible = false">上传导入</el-button>
</el-upload>
</div>
<el-button slot="reference">Excel导入</el-button>
</el-popover>
<el-button type="primary" icon="el-icon-download" @click="exportQuestion">导出Excel</el-button>
</div>
</div>
<el-table :data="tableData" style="width: 100%;margin-top:10px;" border stripe fit v-loading="listLoading"
highlight-current-row max-height="600" @sort-change="changeSort" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="题干" sortable="custom" prop="name" width="400px">
<template slot-scope="scope">{{ scope.row.name }}</template>
</el-table-column>
<el-table-column label="所属题库">
<template slot-scope="scope">{{ scope.row.questioncat_name }}</template>
</el-table-column>
<el-table-column label="题型">
<template slot-scope="scope">{{ scope.row.type }}</template>
</el-table-column>
<el-table-column label="是否启用">
<template slot-scope="scope">
<el-tag v-if="scope.row.enabled" type="success"></el-tag>
<el-tag v-else type="danger"></el-tag>
</template>
</el-table-column>
<el-table-column label="真题年份">
<template slot-scope="scope">
<span v-if="scope.row.year">{{ scope.row.year }}</span>
</template>
</el-table-column>
<el-table-column label="创建日期" sortable='custom' prop="create_time">
<template slot-scope="scope">
<span>{{ scope.row.create_time }}</span>
</template>
</el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<el-button type="primary" size="small" @click="handleDetail(scope)" icon="el-icon-more"></el-button>
<el-button type="primary" size="small" @click="handleEdit(scope)" icon="el-icon-edit"
:disabled="!checkPermission(['question_edit'])"></el-button>
<el-button type="danger" size="small" @click="handleDelete(scope)" icon="el-icon-delete"
:disabled="!checkPermission(['question_delete'])"></el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit"
@pagination="getList" />
<el-dialog title="题目详情" :visible.sync="dialogVisible" width="30%">
<div>{{ question.type }}</div>
<div>{{ question.name }}</div>
<ul id="repeat">
<li v-for="(value, key) in question.options" v-bind:key="key">
{{ key }}:
<span>{{ value }}</span>
</li>
</ul>
<div>正确答案{{ question.right }}</div>
<div>{{ question.resolution }}</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="dialogVisible = false"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
// import {
// getQuestioncatAll,
// getQuestionList,
// deleteQuestion,
// importQuestion,
// exportQuestion,
// enableQuestions
// } from "@/api/question";
import { genTree, deepClone } from "@/utils";
import checkPermission from "@/utils/permission";
import Pagination from "@/components/Pagination";
import { upUrl, upHeaders } from "@/api/file";
import { getToken } from "@/utils/auth";
const defaultObj = {
id: "",
name: ""
};
const listQuery = {
page: 1,
limit: 20,
search: ''
};
export default {
components: { Pagination },
data() {
return {
popovervisible: false,
upUrl: upUrl(),
upHeaders: upHeaders(),
questioncat: {
id: "",
name: ""
},
total: 0,
listQuery: listQuery,
tableData: [],
questioncatData: [],
listLoading: false,
dialogVisible: false,
dialogType: "new",
rule1: {
name: [{ required: true, message: "请输入名称", trigger: "blur" }]
},
typeOptions: [
{ key: 1, label: "单选", value: "单选" },
{ key: 2, label: "多选", value: "多选" },
{ key: 3, label: "判断", value: "判断" }
],
question: {},
questioncatC: [],
selects: [],
};
},
computed: {},
created() {
// this.getList();
// this.getQuestioncatAll();
},
methods: {
checkPermission,
handleUploadSuccess(res, file) {
if (res.code == 200) {
const loading = this.$loading({ text: "正在导入中..." })
importQuestion(res.data).then(response => {
loading.close()
if (response.code == 200) {
this.$message({
message: '导入成功',
type: 'success'
});
this.getList(listQuery)
} else if (response.code == 206) {
this.$message({
message: '部分未成功' + response.data,
type: 'success'
});
} else {
this.$message.error(response.msg);
}
});
} else {
this.$message.error("Excel上传失败!");
}
},
getList() {
this.listLoading = true;
getQuestionList(this.listQuery).then(response => {
this.tableData = response.data.results;
this.total = response.data.count;
this.listLoading = false;
});
},
getQuestioncatAll() {
getQuestioncatAll().then(response => {
this.questioncatData = genTree(response.data);
});
},
handleFilter() {
if (this.questioncatC.length) {
this.listQuery.questioncat = this.questioncatC[this.questioncatC.length - 1]
} else {
this.listQuery.questioncat = ''
}
this.listQuery.page = 1;
this.getList();
},
resetFilter() {
this.listQuery = listQuery
this.getList();
},
handleSearch() {
this.listQuery.page = 1
this.getList();
},
handleAdd() {
this.$router.push({ path: "/exam/questionCreate" })
},
handleDetail(scope) {
this.dialogVisible = true
this.question = scope.row
},
handleEdit(scope) {
this.$router.push({ path: "/exam/questionUpdate", query: { id: scope.row.id } })
},
handleDelete(scope) {
this.$confirm("确认删除该题目吗?将丢失数据!", "警告", {
confirmButtonText: "确认",
cancelButtonText: "取消",
type: "error"
})
.then(async () => {
await deleteQuestion(scope.row.id);
this.getList();
this.$message({
type: "success",
message: "成功删除!"
});
})
.catch(err => {
// console.error(err);
});
},
exportQuestion() {
const loading = this.$loading({
text: '正在准备..'
});
exportQuestion(this.listQuery).then(response => {
loading.close()
window.open(response.data.path, "_blank");
}).catch(e => { loading.close() });
},
changeSort(val) {
if (val.order == "ascending") {
this.listQuery.ordering = val.prop;
} else {
this.listQuery.ordering = "-" + val.prop;
}
this.getList();
},
handleSelectionChange(val) {
let selects = [];
for (var i = 0; i < val.length; i++) {
selects.push(val[i].id);
}
this.selects = selects;
},
handleEnabled() {
if (this.selects.length) {
enableQuestions({ ids: this.selects }).then(res => {
this.$message.success("成功");
this.getList();
})
} else {
this.$message.warning("请先选择题目");
}
},
}
};
</script>

View File

@ -0,0 +1,215 @@
<template>
<div class="app-container">
<el-form :model="Form" :rules="rules" ref="Form" label-width="100px" status-icon>
<el-form-item label="题型" prop="type">
<el-select v-model="Form.type" style="width: 400px" :disabled="true">
<el-option
v-for="item in typeOptions"
:key="item.key"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="分类" prop="type">
<el-cascader
v-model="Form.questioncat"
:options="catOptions"
:show-all-levels="false"
clearable
style="width: 400px"
></el-cascader>
</el-form-item>
<el-form-item label="题干" prop="name">
<el-input v-model="Form.name" height="100" width="800px" />
<!-- <el-input v-model="Form.name" style="width:600px" type="textarea" :rows=3></el-input> -->
</el-form-item>
<el-form-item label="题干图片" prop="img" >
<el-upload
class="avatar-uploader"
:headers="upHeaders"
:action="upUrl"
accept="image/jpeg, image/gif, image/png, image/bmp"
:show-file-list="false"
:on-success="handleImgSuccess"
:before-upload="beforeImgUpload"
>
<img v-if="Form.img" :src="Form.img" style="width: 200px;height: 100px;display: block;"/>
<el-button size="small" type="primary" v-else>点击上传</el-button>
</el-upload>
<el-button type="text" @click="delImg()" v-if="Form.img">删除</el-button>
</el-form-item>
<el-form-item label="选项A" prop="optionA">
<el-input v-model="Form.options.A" height="30" width="800px" :disabled="inputDisable" />
</el-form-item>
<el-form-item label="选项B" prop="optionB">
<el-input v-model="Form.options.B" height="30" width="800px" :disabled="inputDisable" />
</el-form-item>
<el-form-item label="选项C" v-show="Form.type!='判断'">
<el-input v-model="Form.options.C" height="30" width="800px" />
<!-- <el-input v-model="Form.options.C" style="width:600px"></el-input> -->
</el-form-item>
<el-form-item label="选项D" v-show="Form.type!='判断'">
<el-input v-model="Form.options.D" height="30" width="800px" />
<!-- <el-input v-model="Form.options.D" style="width:600px"></el-input> -->
</el-form-item>
<el-form-item label="选项E" v-show="Form.type!='判断'">
<el-input v-model="Form.options.E" height="30" width="800px" />
<!-- <el-input v-model="Form.options.E" style="width:600px"></el-input> -->
</el-form-item>
<el-form-item label="选项F" v-show="Form.type!='判断'">
<el-input v-model="Form.options.F" height="30" width="800px" />
<!-- <el-input v-model="Form.options.F" style="width:600px"></el-input> -->
</el-form-item>
<el-form-item label="正确答案" v-if="Form.type =='多选'">
<el-checkbox-group v-model="Form.right">
<el-checkbox label="A"></el-checkbox>
<el-checkbox label="B"></el-checkbox>
<el-checkbox label="C"></el-checkbox>
<el-checkbox label="D"></el-checkbox>
<el-checkbox label="E"></el-checkbox>
<el-checkbox label="F"></el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="正确答案" v-else-if="Form.type =='单选'">
<el-radio-group v-model="Form.right">
<el-radio label="A"></el-radio>
<el-radio label="B"></el-radio>
<el-radio label="C"></el-radio>
<el-radio label="D"></el-radio>
<el-radio label="E"></el-radio>
<el-radio label="F"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="正确答案" v-else>
<el-radio-group v-model="Form.right">
<el-radio label="A"></el-radio>
<el-radio label="B"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="解析">
<el-input v-model="Form.resolution" style="width:600px" type="textarea" :rows="3"></el-input>
</el-form-item>
<el-form-item label="真题年份" prop="year">
<el-input v-model="Form.year"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('Form')" :loading="submitLoding">保存</el-button>
<el-button type="warning" @click="goBack()">返回</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
// import el-input from '@/components/Tinymce/index2'
// import { createQuestion,getQuestioncatAll, getQuestion, getQuestioncatList, updateQuestion } from "@/api/question";
import { genTree } from "@/utils";
import { upUrl } from "@/api/file";
import { getToken } from "@/utils/auth";
export default {
components:{ },
data() {
return {
upHeaders: { Authorization: "JWT " + getToken() },
upUrl: upUrl(),
Form: {
id:0,
name: "",
img: null,
type:"",
questioncat:null,
year:null,
right:'',
options:{
A:'',
B:''
}
},
catOptions:[],
inputDisable: false,
submitLoding:false,
rules: {
type: [
{ required: true, message: "请选择", trigger: "blur" }
],
name: [
{ required: true, message: "请输入", trigger: "blur" }
],
},
typeOptions: [
{ key: 1, label: "单选", value: "单选" },
{ key: 2, label: "多选", value: "多选"},
{ key: 3, label: "判断", value: "判断" }
],
};
},
watch:{
},
created() {
this.Form.id = this.$route.query.id //接收参数
this.getQuestion();
this.getQuestioncatAll()
},
methods: {
handleImgSuccess(res, file) {
this.Form.img = res.data.path
},
beforeImgUpload(file) {
const isLt2M = file.size / 1024 / 1024 < 0.6;
if (!isLt2M) {
this.$message.error("上传图片大小不能超过 600KB!");
}
return isLt2M;
},
submitForm(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
this.submitLoding = true
if(this.Form.questioncat instanceof Array){
this.Form.questioncat = this.Form.questioncat.pop()
}
// this.Form.name = this.Form.name.replace('<p>','<span>').replace('</p>','</span>')
// for(let key in this.Form.options){
// this.Form.options[key] = this.Form.options[key].replace('<p>','<span>').replace('</p>','</span>')
// }
for(let key in this.Form.options){
if(!this.Form.options[key]){
delete this.Form.options[key]
}
}
updateQuestion(this.Form.id, this.Form).then(response => {
this.submitLoding = false
if(response.code >= 200){
this.$message({
type: "success",
message: "修改成功!"
});
this.goBack()
}
});
} else {
return false;
}
});
},
getQuestion() {
getQuestion(this.Form.id).then(response => {
this.Form = response.data ;
});
},
goBack() {
this.$router.go(-1)
},
delImg() {
this.Form.img = null
},
getQuestioncatAll() {
getQuestioncatAll().then(response => {
this.catOptions = genTree(response.data);
});
},
}
}
</script>

View File