InsertPaperTitle.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. <template>
  2. <section class="content">
  3. <!-- 正文信息 -->
  4. <div class="box-body">
  5. <el-form :inline="true" :model="paperTitleForm" label-width="150px">
  6. <el-row>
  7. <el-form-item label="课程名称(代码)" class="pull-left">
  8. <el-select
  9. v-model="paperTitleForm.courseNo"
  10. class="dialog_input_width"
  11. filterable
  12. clearable
  13. remote
  14. placeholder="请输入课程名称(代码)"
  15. :remote-method="queryCoursesByKeyword"
  16. @change="searchGenPaper"
  17. @focus="(e) => queryCoursesByKeyword(e.target.value)"
  18. >
  19. <el-option
  20. v-for="item in courseInfoSelect"
  21. :key="item.courseNo"
  22. :label="item.courseInfo"
  23. :value="item.courseNo"
  24. >
  25. </el-option>
  26. </el-select>
  27. </el-form-item>
  28. </el-row>
  29. <el-row v-if="paperTitelDisable">
  30. <el-form-item label="试卷名称" class="pull-left">
  31. <el-select
  32. v-model="paperTitleForm.paperId"
  33. class="dialog_input_width"
  34. filterable
  35. placeholder="请选择"
  36. sytle="width:220px;"
  37. @change="searchPaperDetail"
  38. >
  39. <el-option
  40. v-for="item in paperInfoSelect"
  41. :key="item.id"
  42. :label="item.name"
  43. :value="item.id"
  44. >
  45. </el-option>
  46. </el-select>
  47. <span style="padding-left: 5px">
  48. <el-button type="primary" @click="insertPaper"
  49. ><i class="el-icon-plus"></i> 新增试卷</el-button
  50. >
  51. </span>
  52. </el-form-item>
  53. </el-row>
  54. <el-row v-if="paperDetailDisable">
  55. <el-form-item label="试卷大题" class="pull-left">
  56. <el-select
  57. v-model="paperTitleForm.paperDetailId"
  58. class="dialog_input_width"
  59. filterable
  60. placeholder="请选择"
  61. >
  62. <el-option
  63. v-for="item in paperDetailInfoSelect"
  64. :key="item.id"
  65. :label="item.name"
  66. :value="item.id"
  67. >
  68. </el-option>
  69. </el-select>
  70. </el-form-item>
  71. </el-row>
  72. <el-row>
  73. <el-form-item label="题型" class="pull-left">
  74. <el-select
  75. v-model="paperTitleForm.value"
  76. class="dialog_input_width"
  77. filterable
  78. placeholder="请选择"
  79. >
  80. <el-option
  81. v-for="item in quesTypes"
  82. :key="item.id"
  83. :label="item.label"
  84. :value="item.value"
  85. >
  86. </el-option>
  87. </el-select>
  88. </el-form-item>
  89. </el-row>
  90. <el-row>
  91. <el-form-item label=" " class="pull-left">
  92. <el-button
  93. type="primary"
  94. :disabled="nextDisabled"
  95. @click="submitForm"
  96. >下一步
  97. </el-button>
  98. </el-form-item>
  99. </el-row>
  100. </el-form>
  101. <!-- 添加试卷弹出框 -->
  102. <el-dialog title="新增试卷" :visible.sync="paperDialog" width="500px">
  103. <el-form
  104. ref="paperForm"
  105. :model="paperForm"
  106. :rules="rules"
  107. label-position="right"
  108. label-width="120px"
  109. inline-message
  110. >
  111. <el-row>
  112. <el-form-item label="试卷名称" label-width="120px" prop="name">
  113. <el-input
  114. v-model="paperForm.name"
  115. class="dialog_input_width"
  116. placeholder="请输入试卷名称"
  117. ></el-input>
  118. </el-form-item>
  119. </el-row>
  120. <el-row class="margin_top_10 margin_left_120">
  121. <el-button type="primary" @click="submitPaperForm('paperForm')"
  122. >保 存</el-button
  123. >
  124. <el-button @click="resetPaperForm('paperForm')"
  125. ><i class="el-icon-refresh"></i> 重 置</el-button
  126. >
  127. </el-row>
  128. </el-form>
  129. </el-dialog>
  130. </div>
  131. </section>
  132. </template>
  133. <script>
  134. import { CORE_API, QUESTION_API } from "@/constants/constants";
  135. import { mapState } from "vuex";
  136. export default {
  137. data() {
  138. return {
  139. paperTitleForm: {
  140. courseNo: "",
  141. courseName: "",
  142. paperId: "",
  143. paperDetailId: "",
  144. value: "",
  145. },
  146. paperForm: {
  147. name: "",
  148. },
  149. paperDialog: false,
  150. courseList: [],
  151. tableData: [],
  152. detailsData: [],
  153. quesTypes: [
  154. { value: "SINGLE_ANSWER_QUESTION", label: "单选" },
  155. { value: "MULTIPLE_ANSWER_QUESTION", label: "多选" },
  156. { value: "BOOL_ANSWER_QUESTION", label: "判断" },
  157. { value: "FILL_BLANK_QUESTION", label: "填空" },
  158. { value: "TEXT_ANSWER_QUESTION", label: "问答" },
  159. ],
  160. rules: {
  161. name: [{ required: true, message: "请输入试卷名称", trigger: "blur" }],
  162. },
  163. };
  164. },
  165. computed: {
  166. paperTitelDisable() {
  167. if (this.paperTitleForm.courseNo) {
  168. return true;
  169. } else {
  170. return false;
  171. }
  172. },
  173. paperDetailDisable() {
  174. console.log(
  175. "this.paperTitleForm.courseNo:",
  176. this.paperTitleForm.courseNo
  177. );
  178. console.log("this.paperTitleForm.paperId:", this.paperTitleForm.paperId);
  179. console.log("this.detailsData.length:", this.detailsData.length);
  180. if (
  181. this.paperTitleForm.courseNo &&
  182. this.paperTitleForm.paperId &&
  183. this.detailsData.length > 0
  184. ) {
  185. return true;
  186. } else {
  187. return false;
  188. }
  189. },
  190. nextDisabled() {
  191. if (
  192. this.paperTitleForm.courseNo &&
  193. this.paperTitleForm.paperId &&
  194. this.paperTitleForm.paperDetailId &&
  195. this.paperTitleForm.value
  196. ) {
  197. return false;
  198. } else {
  199. return true;
  200. }
  201. },
  202. //获取课程的集合
  203. courseInfoSelect() {
  204. var courseList = [];
  205. for (let course of this.courseList) {
  206. var courseInfo = course.name + "(" + course.code + ")";
  207. var courseNo = course.code;
  208. courseList.push({ courseNo: courseNo, courseInfo: courseInfo });
  209. }
  210. return courseList;
  211. },
  212. //获取试卷的集合
  213. paperInfoSelect() {
  214. var paperList = [];
  215. for (let paper of this.tableData) {
  216. var paperId = paper.id;
  217. var paperName = paper.name;
  218. paperList.push({ id: paperId, name: paperName });
  219. }
  220. return paperList;
  221. },
  222. //获取大题的集合
  223. paperDetailInfoSelect() {
  224. var paperDetaliList = [];
  225. for (let paperDetail of this.detailsData) {
  226. var paperDetailId = paperDetail.id;
  227. var paperDetailName = paperDetail.name;
  228. paperDetaliList.push({ id: paperDetailId, name: paperDetailName });
  229. }
  230. return paperDetaliList;
  231. },
  232. routeType() {
  233. return this.$route.params.type;
  234. },
  235. ...mapState({ user: (state) => state.user }),
  236. },
  237. methods: {
  238. //远端查询课程
  239. queryCoursesByKeyword(query) {
  240. query = query.trim();
  241. this.courseLoading = true;
  242. this.$http
  243. .get(CORE_API + "/course/query?name=" + query + "&enable=true")
  244. .then((response) => {
  245. this.courseList = response.data;
  246. this.courseLoading = false;
  247. });
  248. },
  249. //根据课程查询试卷集合
  250. searchGenPaper() {
  251. this.$http
  252. .get(
  253. QUESTION_API +
  254. "/importPaper/1/500/?courseNo=" +
  255. this.paperTitleForm.courseNo
  256. )
  257. .then((response) => {
  258. this.tableData = response.data.content;
  259. });
  260. this.paperTitleForm.paperId = "";
  261. this.paperTitleForm.paperDetailId = "";
  262. },
  263. //根据试卷查询大题
  264. searchPaperDetail() {
  265. this.$http
  266. .get(QUESTION_API + "/paperDetail/paper/" + this.paperTitleForm.paperId)
  267. .then((response) => {
  268. this.detailsData = response.data;
  269. console.log("response.data:", response.data);
  270. console.log("this.detailsData:", this.detailsData);
  271. for (var i = 0; i < this.detailsData.length; i++) {
  272. if (!this.detailsData[i].name) {
  273. this.detailsData[i].name = "默认大题";
  274. }
  275. }
  276. });
  277. this.paperTitleForm.paperDetailId = "";
  278. },
  279. //新增试卷
  280. insertPaper() {
  281. this.paperDialog = true;
  282. },
  283. //重置
  284. resetPaperForm(formData) {
  285. this.$refs[formData].resetFields();
  286. },
  287. //提交新增试卷
  288. submitPaperForm(formData) {
  289. this.$refs[formData].validate((valid) => {
  290. if (valid) {
  291. for (let course of this.courseList) {
  292. if (course.code == this.paperTitleForm.courseNo) {
  293. this.paperTitleForm.courseName = course.name;
  294. }
  295. }
  296. console.log("课程名称:" + this.paperTitleForm.courseName);
  297. this.$http
  298. .post(
  299. QUESTION_API +
  300. "/importPaper/saveBlankPaper/" +
  301. this.paperTitleForm.courseNo +
  302. "/" +
  303. this.paperForm.name
  304. )
  305. .then((response) => {
  306. var paperId = response.data.paper.id;
  307. this.$http
  308. .get(
  309. QUESTION_API +
  310. "/importPaper/1/500/?courseNo=" +
  311. this.paperTitleForm.courseNo
  312. )
  313. .then((response) => {
  314. this.tableData = response.data.content;
  315. this.paperTitleForm.paperDetailId = "";
  316. this.paperTitleForm.paperId = paperId;
  317. this.searchPaperDetail();
  318. });
  319. this.paperDialog = false;
  320. })
  321. .catch((error) => {
  322. this.$notify({ type: "error", message: error.response.data.msg });
  323. this.paperDialog = false;
  324. });
  325. } else {
  326. return false;
  327. }
  328. });
  329. },
  330. //提交
  331. submitForm() {
  332. var path = "";
  333. switch (this.paperTitleForm.value) {
  334. case "SINGLE_ANSWER_QUESTION":
  335. case "MULTIPLE_ANSWER_QUESTION":
  336. path = "edit_select_question";
  337. break;
  338. case "TEXT_ANSWER_QUESTION":
  339. case "FILL_BLANK_QUESTION":
  340. case "BOOL_ANSWER_QUESTION":
  341. path = "edit_other_question";
  342. break;
  343. }
  344. for (let course of this.courseList) {
  345. if (course.code == this.paperTitleForm.courseNo) {
  346. this.paperTitleForm.courseName = course.name;
  347. }
  348. }
  349. console.log(path);
  350. this.$router.push({
  351. path:
  352. path +
  353. "/" +
  354. this.paperTitleForm.paperId +
  355. "/" +
  356. this.paperTitleForm.paperDetailId +
  357. "/" +
  358. this.paperTitleForm.value +
  359. "/" +
  360. this.paperTitleForm.courseNo +
  361. "/" +
  362. this.paperTitleForm.courseName,
  363. });
  364. },
  365. },
  366. };
  367. </script>
  368. <style scoped src="../styles/Common.css"></style>
  369. <style scoped>
  370. .box_width_lg {
  371. width: 600px;
  372. }
  373. </style>