Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
school-paper-admin-front
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
school-paper
school-paper-admin-front
Commits
340fef27
Commit
340fef27
authored
Jul 21, 2023
by
‘巴博尔’
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
题库新增
parent
65ee652e
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
336 additions
and
79 deletions
+336
-79
src/views/school-paper/questionBank/index.vue
+336
-79
No files found.
src/views/school-paper/questionBank/index.vue
View file @
340fef27
...
...
@@ -312,7 +312,14 @@
<!-- 添加或修改题库主对话框 -->
<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-col
:span=
"6"
>
<el-form-item
label=
"题库类别"
prop=
"categoryId"
>
...
...
@@ -323,7 +330,6 @@
>
<el-option
v-for=
"item in [
{ label: '全部', value: '' },
{ label: '集合', value: '1' },
{ label: '不等式', value: '2' },
{ label: '函数', value: '3' },
...
...
@@ -346,7 +352,6 @@
>
<el-option
v-for=
"item in [
{ label: '全部', value: '' },
{ label: '高一', value: '1' },
{ label: '高二', value: '2' },
{ label: '高三', value: '3' },
...
...
@@ -367,7 +372,6 @@
>
<el-option
v-for=
"item in [
{ label: '全部', value: '' },
{ label: '基础', value: '1' },
{ label: '中等', value: '2' },
{ label: '提高', value: '3' },
...
...
@@ -385,10 +389,10 @@
clearable
v-model=
"form.species"
placeholder=
"请选择习题种类"
@
change=
"changeSpecies"
>
<el-option
v-for=
"item in [
{ label: '全部', value: '' },
{ label: '填空', value: '1' },
{ label: '选择', value: '2' },
{ label: '解答', value: '3' },
...
...
@@ -403,46 +407,87 @@
</el-col>
<el-col
:span=
"18"
>
<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>
<
template
v-if=
"[1, '1', 3, '3'].includes(form.species)"
>
<el-form-item
label=
"答案"
prop=
"answer"
>
<editor
v-model=
"form.answer"
:min-height=
"192"
/>
</el-form-item>
<el-form-item
label=
"答案图片"
prop=
"rightAnswersPic"
>
<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"
></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"
>
{{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>
<editor
v-model=
"item.html"
:min-height=
"192"
/>
<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>
</el-form-item>
</el-col>
</el-row>
<el-form-item
label=
"正确答案"
prop=
"rightAnswers"
>
<el-input
v-model=
"form.rightAnswers"
type=
"textarea"
placeholder=
"请输入内容"
/>
<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>
<el-form-item
label=
"正确答案图片"
prop=
"rightAnswersPic"
>
<el-input
v-model=
"form.rightAnswersPic"
placeholder=
"请输入正确答案图片"
/>
</
template
>
<el-form-item
label=
"典例精讲"
prop=
"explain"
>
<el-switch
@
change=
"changeExplain"
v-model=
"form.explain"
active-color=
"#409eff"
>
</el-switch>
</el-form-item>
<
template
v-if=
"form.explain"
>
<el-form-item
label=
"解答过程"
prop=
"resolveCourse"
>
<el-input
v-model=
"form.resolveCourse"
type=
"textarea"
placeholder=
"请输入内容"
/>
<editor
v-model=
"form.resolveCourse"
:min-height=
"192"
/>
</el-form-item>
<el-form-item
label=
"解答视频"
prop=
"resolveVideo"
>
<el-input
v-model=
"form.resolveVideo"
placeholder=
"请输入解答视频"
/>
<fileUpload
v-model=
"form.resolveVideo"
:limit=
"1"
:fileSize=
"10000"
:fileType=
"['mp4', 'mp3']"
/>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
</
template
>
</el-col>
</el-row>
<!-- <el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-form-item>
-->
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
:loading=
"buttonLoading"
type=
"primary"
@
click=
"submitForm"
...
...
@@ -506,63 +551,163 @@ export default {
// 表单参数
form
:
{},
// 表单校验
rules
:
{
id
:
[{
required
:
true
,
message
:
"主键id不能为空"
,
trigger
:
"blur"
}],
categoryId
:
[
{
required
:
true
,
message
:
"类别id不能为空"
,
trigger
:
"blur"
},
],
species
:
[
rules
:
{},
};
},
filters
:
{
filterType
(
val
,
list
)
{
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
,
message
:
"
习题种类:1填空,2选择,3解答
不能为空"
,
trigger
:
"blur"
,
message
:
"
解答过程
不能为空"
,
trigger
:
[
"blur"
,
"change"
]
,
},
],
phaseId
:
[
{
required
:
true
,
message
:
"阶段id不能为空"
,
trigger
:
"blur"
},
],
type
:
[
]);
self
.
$set
(
self
.
rules
,
"resolveVideo"
,
[
{
required
:
true
,
message
:
"解答视频不能为空"
,
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
:
"类型:1典例精讲不能为空"
,
trigger
:
"change"
,
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
,
message
:
"
强度:1基础,2中等,3提高
不能为空"
,
message
:
"
习题种类
不能为空"
,
trigger
:
"blur"
,
},
],
topic
:
[{
required
:
true
,
message
:
"题目不能为空"
,
trigger
:
"blur"
}],
rightAnswers
:
[
{
required
:
true
,
message
:
"正确答案不能为空"
,
trigger
:
"blur"
},
],
rightAnswersPic
:
[
{
required
:
true
,
message
:
"正确答案图片不能为空"
,
trigger
:
"blur"
},
],
resolveCourse
:
[
{
required
:
true
,
message
:
"解答过程不能为空"
,
trigger
:
"blur"
},
],
resolveVideo
:
[
{
required
:
true
,
message
:
"解答视频不能为空"
,
trigger
:
"blur"
},
phaseId
:
[
{
required
:
true
,
message
:
"年级阶段不能为空"
,
trigger
:
"blur"
},
],
remark
:
[{
required
:
true
,
message
:
"备注不能为空"
,
trigger
:
"blur"
}],
status
:
[
intensity
:
[
{
required
:
true
,
message
:
"
状态:0正常,1删除
不能为空"
,
trigger
:
"
change
"
,
message
:
"
强度分类
不能为空"
,
trigger
:
"
blur
"
,
},
],
}
,
topic
:
[{
required
:
true
,
message
:
"题目不能为空"
,
trigger
:
"blur"
}]
,
};
},
created
()
{
this
.
getList
();
},
methods
:
{
/** 查询题库主列表 */
getList
()
{
this
.
loading
=
true
;
...
...
@@ -581,6 +726,7 @@ export default {
reset
()
{
this
.
form
=
{
id
:
undefined
,
answer
:
undefined
,
categoryId
:
undefined
,
species
:
undefined
,
phaseId
:
undefined
,
...
...
@@ -597,15 +743,66 @@ export default {
updateTime
:
undefined
,
createBy
:
undefined
,
updateBy
:
undefined
,
checkList
:
[
{
type
:
0
,
html
:
''
},
],
checkList
:
[],
explain
:
false
,
};
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
()
{
this
.
queryParams
.
pageNum
=
1
;
...
...
@@ -627,6 +824,7 @@ export default {
this
.
reset
();
this
.
open
=
true
;
this
.
title
=
"添加题库主"
;
this
.
initleRules
();
},
/** 修改按钮操作 */
handleUpdate
(
row
)
{
...
...
@@ -640,10 +838,47 @@ export default {
this
.
title
=
"修改题库主"
;
});
},
getWangEditorText
(
str
)
{
console
.
log
(
str
,
"========str"
)
if
(
str
)
{
return
str
.
replace
(
/<
[^
<p>
]
+>/g
,
""
)
// 将所有
<
p
>
标签
replace
''
.
replace
(
/<
[
<
/
p>$
]
+>/g
,
""
)
// 将所有
<
/p>标签 replace '
'
.
replace
(
/ /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
()
{
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
)
=>
{
if
(
valid
)
{
console
.
log
(
"规则通过"
);
this
.
buttonLoading
=
true
;
if
(
this
.
form
.
id
!=
null
)
{
updateQuestionBank
(
this
.
form
)
...
...
@@ -746,20 +981,42 @@ export default {
}
}
&
-form
{
height
:
60vh
;
overflow-x
:
hidden
;
overflow-y
:
auto
;
&-check
{
&-add
{
font-size
:
30px
;
color
:
#409
EFF
;
color
:
#409
eff
;
cursor
:
pointer
;
}
&
-item
{
margin-bottom
:
12px
;
&-type
{
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
:
0
rpx
;
}
}
}
}
</
style
>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment