offlineExam.vue 6.2 KB

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