Commit 340fef27 by ‘巴博尔’

题库新增

parent 65ee652e
...@@ -312,7 +312,14 @@ ...@@ -312,7 +312,14 @@
<!-- 添加或修改题库主对话框 --> <!-- 添加或修改题库主对话框 -->
<el-dialog :title="title" :visible.sync="open" width="70%" append-to-body> <el-dialog :title="title" :visible.sync="open" width="70%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px" class="app-container-form"> <el-form
ref="form"
:model="form"
:rules="rules"
label-width="120px"
label-position="top"
class="app-container-form"
>
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="6"> <el-col :span="6">
<el-form-item label="题库类别" prop="categoryId"> <el-form-item label="题库类别" prop="categoryId">
...@@ -323,7 +330,6 @@ ...@@ -323,7 +330,6 @@
> >
<el-option <el-option
v-for="item in [ v-for="item in [
{ label: '全部', value: '' },
{ label: '集合', value: '1' }, { label: '集合', value: '1' },
{ label: '不等式', value: '2' }, { label: '不等式', value: '2' },
{ label: '函数', value: '3' }, { label: '函数', value: '3' },
...@@ -346,7 +352,6 @@ ...@@ -346,7 +352,6 @@
> >
<el-option <el-option
v-for="item in [ v-for="item in [
{ label: '全部', value: '' },
{ label: '高一', value: '1' }, { label: '高一', value: '1' },
{ label: '高二', value: '2' }, { label: '高二', value: '2' },
{ label: '高三', value: '3' }, { label: '高三', value: '3' },
...@@ -367,7 +372,6 @@ ...@@ -367,7 +372,6 @@
> >
<el-option <el-option
v-for="item in [ v-for="item in [
{ label: '全部', value: '' },
{ label: '基础', value: '1' }, { label: '基础', value: '1' },
{ label: '中等', value: '2' }, { label: '中等', value: '2' },
{ label: '提高', value: '3' }, { label: '提高', value: '3' },
...@@ -385,10 +389,10 @@ ...@@ -385,10 +389,10 @@
clearable clearable
v-model="form.species" v-model="form.species"
placeholder="请选择习题种类" placeholder="请选择习题种类"
@change="changeSpecies"
> >
<el-option <el-option
v-for="item in [ v-for="item in [
{ label: '全部', value: '' },
{ label: '填空', value: '1' }, { label: '填空', value: '1' },
{ label: '选择', value: '2' }, { label: '选择', value: '2' },
{ label: '解答', value: '3' }, { label: '解答', value: '3' },
...@@ -403,46 +407,87 @@ ...@@ -403,46 +407,87 @@
</el-col> </el-col>
<el-col :span="18"> <el-col :span="18">
<el-form-item label="题目" prop="topic"> <el-form-item label="题目" prop="topic">
<editor v-model="form.topic" :min-height="192"/> <editor v-model="form.topic" :min-height="192" />
</el-form-item> </el-form-item>
<el-form-item label="选项" prop="checkList"> <template v-if="[1, '1', 3, '3'].includes(form.species)">
<div class="app-container-form-check"> <el-form-item label="答案" prop="answer">
<i class="el-icon-circle-plus-outline app-container-form-check-add"></i> <editor v-model="form.answer" :min-height="192" />
<div v-for="(item,index) in form.checkList" :key="index" class="app-container-form-check-item"> </el-form-item>
<span class="app-container-form-check-item-type">{{item.type}}</span><i class="el-icon-remove-outline app-container-form-check-item-del"></i><i class="el-icon-circle-plus-outline app-container-form-check-item-add"></i> <el-form-item label="答案图片" prop="rightAnswersPic">
<editor v-model="item.html" :min-height="192"/> <imageUpload :limit="9" v-model="form.rightAnswersPic" />
</el-form-item>
</template>
<template v-if="[2, '2'].includes(form.species)">
<el-form-item label="选项" prop="checkList">
<div class="app-container-form-check">
<i
class="el-icon-circle-plus-outline app-container-form-check-add"
v-if="!form.checkList || !form.checkList.length"
@click="clickAddCheckList"
></i>
<div
v-for="(item, index) in form.checkList"
:key="index"
class="app-container-form-check-item"
>
<span class="app-container-form-check-item-type">{{
index | filterType(form.checkList)
}}</span
><i
v-if="index + 1 === form.checkList.length"
class="el-icon-circle-plus-outline app-container-form-check-item-add"
@click="clickCheckItemAdd(index)"
></i>
<i
class="el-icon-remove-outline app-container-form-check-item-del"
v-else
@click="clickCheckItemDel(index)"
></i>
<editor v-model="item.html" :min-height="192" />
</div>
</div> </div>
</div> </el-form-item>
<el-form-item
label="标准答案"
prop="rightAnswers"
v-if="form.checkList && form.checkList.length"
>
<el-radio-group v-model="form.rightAnswers">
<el-radio
:label="index"
v-for="(item, index) in form.checkList"
:key="index"
>{{ index | filterType(form.checkList) }}</el-radio
>
</el-radio-group>
</el-form-item>
</template>
<el-form-item label="典例精讲" prop="explain">
<el-switch
@change="changeExplain"
v-model="form.explain"
active-color="#409eff"
>
</el-switch>
</el-form-item> </el-form-item>
<template v-if="form.explain">
<el-form-item label="解答过程" prop="resolveCourse">
<editor v-model="form.resolveCourse" :min-height="192" />
</el-form-item>
<el-form-item label="解答视频" prop="resolveVideo">
<fileUpload
v-model="form.resolveVideo"
:limit="1"
:fileSize="10000"
:fileType="['mp4', 'mp3']"
/>
</el-form-item>
</template>
</el-col> </el-col>
</el-row> </el-row>
<!-- <el-form-item label="备注" prop="remark">
<el-form-item label="正确答案" prop="rightAnswers">
<el-input
v-model="form.rightAnswers"
type="textarea"
placeholder="请输入内容"
/>
</el-form-item>
<el-form-item label="正确答案图片" prop="rightAnswersPic">
<el-input
v-model="form.rightAnswersPic"
placeholder="请输入正确答案图片"
/>
</el-form-item>
<el-form-item label="解答过程" prop="resolveCourse">
<el-input
v-model="form.resolveCourse"
type="textarea"
placeholder="请输入内容"
/>
</el-form-item>
<el-form-item label="解答视频" prop="resolveVideo">
<el-input v-model="form.resolveVideo" placeholder="请输入解答视频" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" /> <el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item> </el-form-item> -->
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm" <el-button :loading="buttonLoading" type="primary" @click="submitForm"
...@@ -506,63 +551,163 @@ export default { ...@@ -506,63 +551,163 @@ export default {
// 表单参数 // 表单参数
form: {}, form: {},
// 表单校验 // 表单校验
rules: { rules: {},
id: [{ required: true, message: "主键id不能为空", trigger: "blur" }], };
categoryId: [ },
{ required: true, message: "类别id不能为空", trigger: "blur" }, filters: {
], filterType(val, list) {
species: [ if (val >= 0) {
let arr = [
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z",
];
return arr[val];
} else {
return val;
}
},
},
created() {
this.getList();
},
methods: {
changeExplain(e) {
let self = this;
if (e) {
self.$refs.form.clearValidate();
self.initleRules();
self.isExplan(e);
self.isSpec(self.form.species);
}
},
isExplan(val) {
let self = this;
if (val) {
self.$set(self.rules, "resolveCourse", [
{ {
required: true, required: true,
message: "习题种类:1填空,2选择,3解答不能为空", message: "解答过程不能为空",
trigger: "blur", trigger: ["blur", "change"],
}, },
], ]);
phaseId: [ self.$set(self.rules, "resolveVideo", [
{ required: true, message: "阶段id不能为空", trigger: "blur" },
],
type: [
{ {
required: true, required: true,
message: "类型:1典例精讲不能为空", message: "解答视频不能为空",
trigger: "change", trigger: ["blur", "change"],
}, },
]);
}
},
changeSpecies(e) {
let self = this;
self.$refs.form.clearValidate();
self.initleRules();
self.isSpec(e);
self.isExplan(self.form.explain);
},
isSpec(val) {
let self = this;
switch (parseInt(val)) {
case 1:
self.$set(self.rules, "answer", [
{
required: true,
message: "答案不能为空",
trigger: ["blur", "change"],
},
]);
self.$set(self.rules, "rightAnswersPic", [
{
required: true,
message: "答案图片不能为空",
trigger: ["blur", "change"],
},
]);
break;
case 2:
self.$set(self.rules, "checkList", [
{
required: true,
message: "选项不能为空",
trigger: ["blur", "change"],
},
]);
self.$set(self.rules, "rightAnswers", [
{
required: true,
message: "标准答案不能为空",
trigger: ["blur", "change"],
},
]);
break;
case 3:
self.$set(self.rules, "answer", [
{
required: true,
message: "答案不能为空",
trigger: ["blur", "change"],
},
]);
self.$set(self.rules, "rightAnswersPic", [
{
required: true,
message: "答案图片不能为空",
trigger: ["blur", "change"],
},
]);
break;
}
},
initleRules() {
this.rules = {
categoryId: [
{ required: true, message: "题库类别不能为空", trigger: "blur" },
], ],
intensity: [ species: [
{ {
required: true, required: true,
message: "强度:1基础,2中等,3提高不能为空", message: "习题种类不能为空",
trigger: "blur", trigger: "blur",
}, },
], ],
topic: [{ required: true, message: "题目不能为空", trigger: "blur" }], phaseId: [
rightAnswers: [ { required: true, message: "年级阶段不能为空", trigger: "blur" },
{ required: true, message: "正确答案不能为空", trigger: "blur" },
],
rightAnswersPic: [
{ required: true, message: "正确答案图片不能为空", trigger: "blur" },
],
resolveCourse: [
{ required: true, message: "解答过程不能为空", trigger: "blur" },
],
resolveVideo: [
{ required: true, message: "解答视频不能为空", trigger: "blur" },
], ],
remark: [{ required: true, message: "备注不能为空", trigger: "blur" }], intensity: [
status: [
{ {
required: true, required: true,
message: "状态:0正常,1删除不能为空", message: "强度分类不能为空",
trigger: "change", trigger: "blur",
}, },
], ],
}, topic: [{ required: true, message: "题目不能为空", trigger: "blur" }],
}; };
}, },
created() {
this.getList();
},
methods: {
/** 查询题库主列表 */ /** 查询题库主列表 */
getList() { getList() {
this.loading = true; this.loading = true;
...@@ -581,6 +726,7 @@ export default { ...@@ -581,6 +726,7 @@ export default {
reset() { reset() {
this.form = { this.form = {
id: undefined, id: undefined,
answer: undefined,
categoryId: undefined, categoryId: undefined,
species: undefined, species: undefined,
phaseId: undefined, phaseId: undefined,
...@@ -597,15 +743,66 @@ export default { ...@@ -597,15 +743,66 @@ export default {
updateTime: undefined, updateTime: undefined,
createBy: undefined, createBy: undefined,
updateBy: undefined, updateBy: undefined,
checkList: [ checkList: [],
{ explain: false,
type: 0,
html: ''
},
],
}; };
this.resetForm("form"); this.resetForm("form");
}, },
clickAddCheckList() {
if (this.form.checkList && !this.form.checkList.length) {
this.form.checkList.unshift({
html: "",
});
}
},
clickCheckItemAdd(index) {
let self = this,
isKong = false;
if (index < 25) {
self.form.checkList.forEach((item, ik) => {
if (self.IsEmptyStr(self.getWangEditorText(item.html + '') + "")) {
isKong = true;
}
});
if (isKong) {
self.$message.warning("请填写选项内容");
} else {
self.form.checkList.push({
html: "",
});
}
} else {
self.$message.warning("最多26个选项");
}
},
clickCheckItemDel(index) {
let self = this;
self
.$confirm("确定删除此项吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
self.$delete(this.form.checkList, index);
})
.catch(() => {});
},
// 判断字符串是否为空
IsEmptyStr(str) {
str = str.toString();
if (
str == null ||
str == "null" ||
str == undefined ||
str == "undefined" ||
str.match(/^[\s]*$/)
) {
return true;
} else {
return false;
}
},
/** 搜索按钮操作 */ /** 搜索按钮操作 */
handleQuery() { handleQuery() {
this.queryParams.pageNum = 1; this.queryParams.pageNum = 1;
...@@ -627,6 +824,7 @@ export default { ...@@ -627,6 +824,7 @@ export default {
this.reset(); this.reset();
this.open = true; this.open = true;
this.title = "添加题库主"; this.title = "添加题库主";
this.initleRules();
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
...@@ -640,10 +838,47 @@ export default { ...@@ -640,10 +838,47 @@ export default {
this.title = "修改题库主"; this.title = "修改题库主";
}); });
}, },
getWangEditorText(str) {
console.log(str,"========str")
if (str) {
return str
.replace(/<[^<p>]+>/g, "") // 将所有<p>标签 replace ''
.replace(/<[</p>$]+>/g, "") // 将所有</p>标签 replace ''
.replace(/&nbsp;/gi, "") // 将所有 空格 replace ''
.replace(/<[^<br/>]+>/g, ""); // 将所有 换行符 replace ''
} else {
return "";
}
},
isEditor(itemName) {
let self = this;
if (self.IsEmptyStr(self.getWangEditorText(self.form[itemName]) + "")) {
self.$set(self.form, itemName, undefined);
self.$refs.form.validateField(itemName);
}
},
/** 提交按钮 */ /** 提交按钮 */
submitForm() { submitForm() {
let self = this,isKong = false;
self.isEditor("topic");
if(self.form.checkList && self.form.checkList.length) {
self.form.checkList.forEach((item, ik) => {
console.log(item.html)
if (self.IsEmptyStr(self.getWangEditorText(item.html + '') + "")) {
isKong = true;
}
});
if (isKong) {
self.$message.warning("请填写选项内容");
self.$refs.form.validateField('checkList');
}
}
if (self.form.explain) {
self.isEditor("resolveCourse");
}
this.$refs["form"].validate((valid) => { this.$refs["form"].validate((valid) => {
if (valid) { if (valid) {
console.log("规则通过");
this.buttonLoading = true; this.buttonLoading = true;
if (this.form.id != null) { if (this.form.id != null) {
updateQuestionBank(this.form) updateQuestionBank(this.form)
...@@ -746,20 +981,42 @@ export default { ...@@ -746,20 +981,42 @@ export default {
} }
} }
&-form { &-form {
height: 60vh;
overflow-x: hidden;
overflow-y: auto;
&-check { &-check {
&-add { &-add {
font-size: 30px; font-size: 30px;
color: #409EFF; color: #409eff;
cursor: pointer; cursor: pointer;
} }
&-item { &-item {
margin-bottom: 12px;
&-type { &-type {
display: inline-block; display: inline-block;
padding: 4px 10px; padding: 8px 15px;
border: 1px solid #eeecec;
font-size: 16px;
line-height: 16px;
border-radius: 5px;
margin: 0px 12px 15px 0px;
}
&-add,
&-del {
font-size: 25px;
cursor: pointer;
}
&-add {
color: #409eff;
}
&-del {
color: #f56c6c;
} }
} }
&-item:last-child {
margin-bottom: 0rpx;
}
} }
} }
} }
</style> </style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment