InsertPaperTitle.vue 11 KB

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