MarkTaskSetDialog.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. <template>
  2. <div>
  3. <!-- 阅卷设置 -->
  4. <el-dialog title="阅卷设置" :visible.sync="remarkSetVisibleTmp" width="80%" @close="closeRemarkDialog">
  5. <el-tabs v-model="activeSetName" @tab-click="handleClick">
  6. <el-tab-pane label="客观题设置" name="1">
  7. <el-form :inline="true" v-model="addQueForm">
  8. <el-form-item label="题号">
  9. <el-input size="mini" v-model="addQueForm.fQno"></el-input>
  10. </el-form-item>
  11. <el-form-item label="至">
  12. <el-input size="mini" v-model="addQueForm.tQno"></el-input>
  13. </el-form-item>
  14. <el-form-item label="分数">
  15. <el-input size="mini" v-model="addQueForm.score"></el-input>
  16. </el-form-item>
  17. <el-form-item>
  18. <el-button size="mini" type="warning" @click="addQues">设置</el-button>
  19. </el-form-item>
  20. <el-form-item>
  21. <el-button size="mini" type="primary" @click="saveObjectiveQue">保存</el-button>
  22. </el-form-item>
  23. </el-form>
  24. <el-table :data="objectiveQueList">
  25. <el-table-column label="序号" prop="qno" width="60px">
  26. <template slot-scope="scope">
  27. {{scope.$index+1}}
  28. </template>
  29. </el-table-column>
  30. <el-table-column label="题号" prop="qno" width="60px"></el-table-column>
  31. <el-table-column label="点选答案" prop="score" width="360px">
  32. <template slot-scope="scope">
  33. <el-tag v-for="item in ansOptionList" :key="item.label" type="success"
  34. :effect="scope.row.stdAns.indexOf(item.value)==-1?'plain':'dark'" @click="setStdAns(scope.row,item)"
  35. size="small">
  36. {{ item.label }}
  37. </el-tag>
  38. </template>
  39. </el-table-column>
  40. <el-table-column label="输入答案" prop="score">
  41. <template slot-scope="scope">
  42. <el-input v-model="scope.row.stdAns" size="mini" />
  43. </template>
  44. </el-table-column>
  45. <el-table-column label="满分" prop="qtype">
  46. <template slot-scope="scope">
  47. <el-input type="number" v-model="scope.row.score" size="mini" />
  48. </template>
  49. </el-table-column>
  50. <el-table-column label="部分分" prop="partScore">
  51. <template slot-scope="scope">
  52. <el-input type="number" v-model="scope.row.partScore" size="mini" />
  53. </template>
  54. </el-table-column>
  55. </el-table>
  56. </el-tab-pane>
  57. <el-tab-pane label="主观题设置" name="2">
  58. <el-form :inline="true" v-model="addQueForm">
  59. <el-form-item label="题号">
  60. <el-input size="mini" v-model="addQueForm.fQno"></el-input>
  61. </el-form-item>
  62. <el-form-item label="至">
  63. <el-input size="mini" v-model="addQueForm.tQno"></el-input>
  64. </el-form-item>
  65. <el-form-item label="分数">
  66. <el-input size="mini" v-model="addQueForm.score"></el-input>
  67. </el-form-item>
  68. <el-form-item>
  69. <el-button size="mini" type="warning" @click="addQues">设置</el-button>
  70. </el-form-item>
  71. <el-form-item>
  72. <el-button size="mini" type="primary" @click="saveSubjectiveQue">保存</el-button>
  73. </el-form-item>
  74. </el-form>
  75. <el-table :data="subjectiveQueList">
  76. <el-table-column label="序号" prop="qno" width="60px">
  77. <template slot-scope="scope">
  78. {{scope.$index+1}}
  79. </template>
  80. </el-table-column>
  81. <el-table-column label="题号" prop="qno"></el-table-column>
  82. <el-table-column label="分数" prop="std_score">
  83. <template slot-scope="scope">
  84. <el-input size="mini" v-model="scope.row.std_score" />
  85. </template>
  86. </el-table-column>
  87. <el-table-column label="查看切图" prop="qtype">
  88. <template slot-scope="scope">
  89. <el-button type="text">查看</el-button>
  90. </template>
  91. </el-table-column>
  92. <el-table-column label="单双评" prop="mark_mode">
  93. <template slot-scope="scope">
  94. <el-select v-model="scope.row.mark_mode" size="mini">
  95. <el-option label="单评" value="单评">单评</el-option>
  96. <el-option label="双评" value="双评">双评</el-option>
  97. <el-option label="多评" value="多评">多评</el-option>
  98. </el-select>
  99. </template>
  100. </el-table-column>
  101. <el-table-column label="双评阈值" prop="mark_diffmax">
  102. <template slot-scope="scope">
  103. <el-input v-model="scope.row.mark_diffmax" type="text" size="mini"></el-input>
  104. </template>
  105. </el-table-column>
  106. <el-table-column label="小题设置" prop="score">
  107. <template slot-scope="scope">
  108. <span style="color:#67c23a;" v-if="scope.row.sub_que_list.length>1">已设置</span>
  109. <span v-else>未设置</span>
  110. <i class="el-icon-setting" @click="setSubQue(scope.row,scope.$index)"></i>
  111. </template>
  112. </el-table-column>
  113. <el-table-column label="给分点" prop="score">
  114. <template slot-scope="scope">
  115. <span style="color:#67c23a;" v-if="scope.row.mark_points.mark_points">已设置</span>
  116. <span v-else>未设置</span>
  117. <i class="el-icon-setting" @click="setMarkPoints(scope.row,scope.$index)"></i>
  118. </template>
  119. </el-table-column>
  120. </el-table>
  121. </el-tab-pane>
  122. <el-tab-pane label="分配阅卷员" name="3">
  123. <el-form :inline="true" v-model="addQueForm">
  124. <el-form-item>
  125. <el-button size="mini" type="primary" @click="saveSubjectiveQue">全选</el-button>
  126. </el-form-item>
  127. <el-form-item>
  128. <el-button size="mini" @click="saveSubjectiveQue">全不选</el-button>
  129. </el-form-item>
  130. <el-form-item>
  131. <el-button size="mini" type="primary" @click="saveSubjectiveQue">保存设置</el-button>
  132. </el-form-item>
  133. </el-form>
  134. <el-table :data="subjectiveMarkTeacherList">
  135. <el-table-column label="教工号" prop="phone" width="80px"></el-table-column>
  136. <el-table-column label="姓名" prop="realname" width="80px"></el-table-column>
  137. <el-table-column label="阅卷权限" prop="role_name" width="300px">
  138. <el-checkbox-group v-model="checkList">
  139. <el-checkbox label="科目组长"></el-checkbox>
  140. <el-checkbox label="评卷仲裁"></el-checkbox>
  141. <el-checkbox label="评卷教师"></el-checkbox>
  142. </el-checkbox-group>
  143. </el-table-column>
  144. <el-table-column label="试题分配" prop="qtype">
  145. <el-checkbox-group v-model="checkList">
  146. <el-checkbox v-for="(item,index) in subjectiveQueList" :label="item.qno"></el-checkbox>
  147. </el-checkbox-group>
  148. </el-table-column>
  149. </el-table>
  150. </el-tab-pane>
  151. </el-tabs>
  152. <!--小题设置-->
  153. <el-dialog title="小题设置" :visible.sync="subQueSetVisible" width="50%" @close="closeSubQueDialog" append-to-body>
  154. <el-table :data="curSubQueList">
  155. <el-table-column label="序号" prop="qno" width="60px">
  156. <template slot-scope="scope">
  157. {{scope.$index+1}}
  158. </template>
  159. </el-table-column>
  160. <el-table-column label="题号" prop="qno">
  161. <template slot-scope="scope">
  162. <el-input size="mini" v-model="scope.row.qno" />
  163. </template>
  164. </el-table-column>
  165. <el-table-column label="分数" prop="std_score">
  166. <template slot-scope="scope">
  167. <el-input size="mini" v-model="scope.row.std_score" />
  168. </template>
  169. </el-table-column>
  170. <el-table-column label="阈值" prop="mark_diffmax">
  171. <template slot-scope="scope">
  172. <el-input size="mini" v-model="scope.row.mark_diffmax" />
  173. </template>
  174. </el-table-column>
  175. </el-table>
  176. <div slot="footer" class="dialog-footer">
  177. <el-button type="primary" @click="saveSubQue" size="mini">确定</el-button>
  178. <el-button type="" @click="closeSubQueDialog" size="mini">取消</el-button>
  179. </div>
  180. </el-dialog>
  181. <!--给分点设置-->
  182. <el-dialog title="给分点设置" :visible.sync="markPointsSetVisible" width="50%" @close="closeSubQueDialog" append-to-body>
  183. <el-row :gutter="20">
  184. <el-col :span="6">
  185. <el-select v-model="curMarkPoints.mark_type">
  186. <el-option label="步长值" value="step"></el-option>
  187. <el-option label="给分点" value="points"></el-option>
  188. </el-select>
  189. </el-col>
  190. <el-col :span="18">
  191. <el-input v-model="curMarkPoints.mark_points" />
  192. </el-col>
  193. </el-row>
  194. <div slot="footer" class="dialog-footer">
  195. <el-button type="primary" @click="saveMarkPoints" size="mini">确定</el-button>
  196. <el-button type="" @click="closeMarkPointsDialog" size="mini">取消</el-button>
  197. </div>
  198. </el-dialog>
  199. </el-dialog>
  200. </div>
  201. </template>
  202. <script>
  203. export default {
  204. compnets:{},
  205. props:["remarkSetVisible","taskId","paperId"],
  206. data(){
  207. return {
  208. activeSetName: "1",
  209. addQueForm:{},
  210. objectiveQueList:[],
  211. subjectiveQueList:[],
  212. subjectiveMarkTeacherList:[],
  213. checkList:[],
  214. remarkSetVisibleTmp:this.remarkSetVisible,
  215. curTaskId:this.taskId,
  216. curPaperId:this.paperId,
  217. ansOptionList: [{
  218. label: "A",
  219. value: "A",
  220. flag: 0
  221. },
  222. {
  223. label: "B",
  224. value: "B",
  225. flag: 0
  226. },
  227. {
  228. label: "C",
  229. value: "C",
  230. flag: 0
  231. },
  232. {
  233. label: "D",
  234. value: "D",
  235. flag: 0
  236. },
  237. {
  238. label: "E",
  239. value: "E",
  240. flag: 0
  241. },
  242. {
  243. label: "F",
  244. value: "F",
  245. flag: 0
  246. },
  247. {
  248. label: "G",
  249. value: "G",
  250. flag: 0
  251. }
  252. ],
  253. subQueSetVisible:false,
  254. curSubQueList:[],
  255. curRowIndex:0,
  256. curMarkPoints:{mark_type:"step"},
  257. markPointsSetVisible:false,
  258. }
  259. },
  260. watch:{
  261. remarkSetVisible(){
  262. this.remarkSetVisibleTmp = this.remarkSetVisible
  263. this.curTaskId = this.taskId
  264. this.curPaperId = this.paperId
  265. this.getPaperPieces(this.activeSetName,this.curPaperId,this.curTaskId)
  266. },
  267. },
  268. methods:{
  269. closeRemarkDialog() {
  270. this.remarkSetVisibleTmp = false;
  271. this.$emit("close")
  272. this.fileList = []
  273. },
  274. closeSubQueDialog(){
  275. this.subQueSetVisible = false;
  276. },
  277. closeMarkPointsDialog(){
  278. this.markPointsSetVisible = false;
  279. },
  280. handleClick(){
  281. this.getPaperPieces(this.activeSetName,this.curPaperId,this.curTaskId);
  282. this.getMarkPaperTeachers();
  283. },
  284. addQues(){
  285. },
  286. getPaperPieces(quetype,paper_id,task_id){
  287. this.$api.getStdQueList({"quetype":quetype,"paper_id":paper_id,"task_id":task_id}).then(res=>{
  288. if(quetype==1){
  289. // this.objectiveQueList = [];
  290. // res.data.data.forEach((item,index)=>{
  291. // item.forEach((iitem,iindex)=>{
  292. // this.objectiveQueList.push(iitem)
  293. // })
  294. // })
  295. this.objectiveQueList = res.data.data;
  296. }else{
  297. this.subjectiveQueList = res.data.data;
  298. }
  299. })
  300. },
  301. // 获取阅卷老师列表
  302. getMarkPaperTeachers(){
  303. this.$api.getSchoolUser().then(res=>{
  304. this.subjectiveMarkTeacherList = res.data.data;
  305. })
  306. },
  307. setStdAns(row, item) {
  308. let orgAns = row.stdAns.split(",")
  309. orgAns = orgAns.filter((item) => {
  310. return item.length > 0
  311. })
  312. if (orgAns.indexOf(item.value) == -1) {
  313. orgAns.push(item.value)
  314. } else {
  315. orgAns.splice(orgAns.indexOf(item.value), 1)
  316. }
  317. row.stdAns = orgAns.join(",")
  318. },
  319. setSubQue(row,index){
  320. this.subQueSetVisible = true;
  321. if(row.sub_que_list && row.sub_que_list.length>0){
  322. this.curSubQueList = row.sub_que_list;
  323. }else{
  324. let subQueList = []
  325. row.qno.split("-").forEach((item,index)=>{
  326. subQueList.push({
  327. qno:item,
  328. std_score:0,
  329. mark_diffmax:0
  330. })
  331. })
  332. this.curSubQueList = subQueList;
  333. }
  334. this.curRowIndex = index
  335. },
  336. setMarkPoints(row,index){
  337. this.markPointsSetVisible = true;
  338. if(row.mark_points.mark_points){
  339. this.curMarkPoints = row.mark_points;
  340. }else{
  341. this.curMarkPoints = {"mark_type":"step"}
  342. }
  343. },
  344. saveSubQue(){
  345. this.subjectiveQueList[this.curRowIndex].sub_que_list = this.curSubQueList;
  346. this.subQueSetVisible = false
  347. },
  348. saveMarkPoints(){
  349. this.subjectiveQueList[this.curRowIndex].mark_points = this.curMarkPoints;
  350. this.markPointsSetVisible = false
  351. },
  352. saveObjectiveQue(){
  353. this.$api.saveTaskObjectiveQue({task_id:this.curTaskId,paper_id:this.curPaperId,objectiveQueList:this.objectiveQueList}).then(res=>{
  354. if(!res.data.code){
  355. this.msgSuccess("成功!");
  356. this.getPaperPieces(this.activeSetName,this.curPaperId,this.curTaskId)
  357. }
  358. })
  359. },
  360. saveSubjectiveQue(){
  361. this.$api.saveSubjectiveQue({paper_id:this.curPaperId,subjectiveQueList:this.subjectiveQueList}).then(res=>{
  362. if(!res.data.code){
  363. this.msgSuccess("成功!");
  364. this.getPaperPieces(this.activeSetName,this.curPaperId,this.curTaskId)
  365. }
  366. })
  367. },
  368. },
  369. created(){
  370. console.log(this.curTaskId,333333333333)
  371. }
  372. }
  373. </script>
  374. <style lang="scss">
  375. </style>