InsertPaperTitle.vue 11 KB

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