offlineExam.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <template>
  2. <div>
  3. <LinkTitlesCustom
  4. :currentPaths="['考试管理', '考试信息', '离线考试设置']"
  5. />
  6. <section class="content">
  7. <div class="box box-info">
  8. <!-- 正文信息 -->
  9. <div class="box-body">
  10. <el-form
  11. :inline="true"
  12. :rules="rules"
  13. ref="form"
  14. :model="form"
  15. label-position="right"
  16. >
  17. <div style="margin-bottom: 10px">
  18. <el-button type="primary" size="small" @click="saveExam"
  19. >保 存</el-button
  20. >
  21. <el-button type="primary" size="small" @click="back"
  22. >返 回</el-button
  23. >
  24. </div>
  25. <el-tabs type="border-card" v-model="activeName">
  26. <!-- 基础信息 -->
  27. <el-tab-pane label="基础信息" name="tab1">
  28. <el-row>
  29. <el-form-item
  30. label="考试名称"
  31. label-width="80px"
  32. placeholder="请输入考试名称"
  33. prop="name"
  34. >
  35. <el-input v-model="form.name"></el-input>
  36. </el-form-item>
  37. </el-row>
  38. <el-row>
  39. <el-form-item label="考试类型" label-width="80px">
  40. <el-select
  41. style="width:205px"
  42. :disabled="true"
  43. v-model="form.examType"
  44. placeholder="请选择"
  45. >
  46. <el-option
  47. v-for="item in examTypeList"
  48. :key="item.value"
  49. :label="item.label"
  50. :value="item.value"
  51. >
  52. </el-option>
  53. </el-select>
  54. </el-form-item>
  55. </el-row>
  56. <el-row>
  57. <el-form-item label="是否开启" label-width="80px">
  58. <el-radio-group
  59. v-model="form.enable"
  60. style="margin-left: 15px"
  61. >
  62. <el-radio label="true">开启</el-radio>
  63. <el-radio label="false">关闭</el-radio>
  64. </el-radio-group>
  65. </el-form-item>
  66. </el-row>
  67. <el-row>
  68. <el-form-item
  69. label="考试时间"
  70. prop="examDatetimeRange"
  71. label-width="70px"
  72. >
  73. <el-date-picker
  74. style="margin-left: 10px"
  75. v-model="examDatetimeRange"
  76. type="datetimerange"
  77. range-separator="至"
  78. start-placeholder="开始日期"
  79. end-placeholder="结束日期"
  80. value-format="yyyy-MM-dd HH:mm:ss"
  81. :clearable="false"
  82. >
  83. </el-date-picker>
  84. </el-form-item>
  85. </el-row>
  86. <el-row>
  87. <el-form-item label="上传附件">
  88. <el-radio-group
  89. v-model="form.properties.CAN_UPLOAD_ATTACHMENT"
  90. >
  91. <el-radio label="true">允许</el-radio>
  92. <el-radio label="false">不允许</el-radio>
  93. </el-radio-group>
  94. </el-form-item>
  95. </el-row>
  96. </el-tab-pane>
  97. </el-tabs>
  98. </el-form>
  99. </div>
  100. </div>
  101. </section>
  102. </div>
  103. </template>
  104. <script>
  105. import { EXAM_TYPE, EXAM_WORK_API } from "@/constants/constants.js";
  106. import moment from "moment";
  107. import LinkTitlesCustom from "@/components/LinkTitlesCustom.vue";
  108. let _this = null;
  109. let validateName = (rule, value, callback) => {
  110. let name = _this.form.name;
  111. if (name == "") {
  112. callback(new Error("请输入考试名称"));
  113. _this.activeName = "tab1";
  114. } else {
  115. callback();
  116. }
  117. };
  118. export default {
  119. components: { LinkTitlesCustom },
  120. data() {
  121. return {
  122. activeName: "tab1",
  123. examDatetimeRange: [],
  124. show_ckeditor: false,
  125. form: {
  126. started: false,
  127. name: "",
  128. examType: "OFFLINE",
  129. examTimes: 1,
  130. beginTime: null,
  131. endTime: null,
  132. duration: 120,
  133. enable: "true",
  134. properties: { CAN_UPLOAD_ATTACHMENT: "true" }
  135. },
  136. examTypeList: EXAM_TYPE,
  137. examId: "",
  138. rules: {
  139. name: [{ required: true, validator: validateName, trigger: "blur" }]
  140. }
  141. };
  142. },
  143. methods: {
  144. init() {
  145. if (this.examId != "add") {
  146. let url = EXAM_WORK_API + "/exam/" + this.examId;
  147. this.$http.get(url).then(response => {
  148. let body = response.data;
  149. body.properties = this.form.properties;
  150. this.form = Object.assign(this.form, response.data);
  151. this.form.enable = this.form.enable ? "true" : "false";
  152. this.examDatetimeRange = [this.form.beginTime, this.form.endTime];
  153. console.log("getOnlineExam(); form: ", this.form);
  154. let url = EXAM_WORK_API + "/exam/allProperties/" + this.examId;
  155. this.$http.get(url).then(response => {
  156. this.form.properties = Object.assign(
  157. this.form.properties,
  158. response.data
  159. );
  160. this.show_ckeditor = true;
  161. });
  162. });
  163. } else {
  164. let now = moment().format("YYYY-MM-DD HH:mm:ss");
  165. this.examDatetimeRange = [now, now];
  166. this.show_ckeditor = true;
  167. }
  168. },
  169. saveExam: function() {
  170. this.form.beginTime = this.examDatetimeRange[0];
  171. this.form.endTime = this.examDatetimeRange[1];
  172. console.log(this.form);
  173. let url = EXAM_WORK_API + "/exam";
  174. this.$refs.form.validate(valid => {
  175. if (valid) {
  176. if (this.examId != "add") {
  177. this.$http.put(url, this.form).then(response => {
  178. if (200 != response.status) {
  179. this.$notify({
  180. type: "error",
  181. message: response.body.desc
  182. });
  183. return;
  184. }
  185. this.$notify({
  186. type: "success",
  187. message: "保存成功"
  188. });
  189. });
  190. } else {
  191. this.$http.post(url, this.form).then(response => {
  192. console.log(response);
  193. this.$notify({
  194. type: "success",
  195. message: "新增成功"
  196. });
  197. this.back();
  198. });
  199. }
  200. } else {
  201. return false;
  202. }
  203. });
  204. },
  205. back() {
  206. this.$router.push({ path: "/examwork/examInfo" });
  207. }
  208. },
  209. created() {
  210. _this = this;
  211. this.examId = this.$route.params.id;
  212. this.init();
  213. }
  214. };
  215. </script>
  216. <style scoped></style>