InsertPaperTitle.vue 11 KB

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