weiwenhai пре 6 година
родитељ
комит
1fd0a40504

+ 1 - 0
src/directives/directives.js

@@ -0,0 +1 @@
+import "../modules/questions/directives/directives";

+ 1 - 0
src/filters/filters.js

@@ -0,0 +1 @@
+import "../modules/questions/filters/filters";

+ 0 - 68
src/modules/questions/constants/constants.js

@@ -1,7 +1,3 @@
-import Vue from "vue";
-import _ from "lodash";
-import CKEditor from "@ckeditor/ckeditor5-vue";
-export const QUESTION_API = "/api/ecs_ques"; //题库API
 export const LEVEL_TYPE = [
   { label: "专升本", value: "ZSB" },
   { label: "高起专", value: "GQZ" },
@@ -20,76 +16,12 @@ export const PUBLICITY_LIST = [
   { label: "公开", value: true },
   { label: "非公开", value: false }
 ];
-//option字母顺序过滤器
-Vue.filter("optionOrderWordFilter", function(value) {
-  return String.fromCharCode(65 + value);
-});
-//题型过滤器
-Vue.filter("questionType", function(value) {
-  for (let questionType of QUESTION_TYPES) {
-    if (questionType.value === value) {
-      return questionType.label;
-    }
-  }
-});
-
 export const EXAM_TYPES = [
   { value: "TRADITION", label: "传统考试" },
   { value: "ONLINE", label: "网络考试" },
   { value: "PRACTICE", label: "在线练习" }
 ];
-
 export const EXPORT_TYPES = [
   { value: "ONLINE", label: "机考" },
   { value: "NORMAL", label: "普通" }
 ];
-
-Vue.filter("examTypesFilter", function(value) {
-  for (let item of EXAM_TYPES) {
-    if (item.value === value) {
-      return item.label;
-    }
-  }
-});
-Vue.filter("exportTypesFilter", function(value) {
-  for (let item of EXPORT_TYPES) {
-    if (item.value === value) {
-      return item.label;
-    }
-  }
-});
-
-Vue.prototype._ = _;
-Vue.use(CKEditor);
-
-Vue.directive("questionAudio", {
-  bind: function(el, binding, vnode) {
-    addAudio(el, binding, vnode);
-  }
-});
-
-function addAudio(el, binding, vnode) {
-  // console.log(el, binding, vnode);
-  var list = el.getElementsByTagName("a");
-  for (let obj of list) {
-    var questionAudioId = obj.getAttribute("id");
-    if (questionAudioId) {
-      console.log("come in");
-      vnode.context.$http
-        .get(QUESTION_API + "/questionAudio/" + questionAudioId)
-        .then(response => {
-          console.log("response:", response);
-          if (response && response.data) {
-            let audioFlag =
-              '<audio controls><source src="http://exam-cloud-test.b0.upaiyun.com' +
-              response.data.fileUrl +
-              '" type="audio/mpeg"></audio>';
-            var b = document.createElement("span");
-            b.innerHTML = audioFlag;
-            obj.append(b);
-          }
-        });
-    }
-  }
-  console.log("el:", el);
-}

+ 32 - 0
src/modules/questions/directives/directives.js

@@ -0,0 +1,32 @@
+import Vue from "vue";
+import { QUESTION_API } from "@/constants/constants";
+Vue.directive("questionAudio", {
+  bind: function(el, binding, vnode) {
+    addAudio(el, binding, vnode);
+  }
+});
+function addAudio(el, binding, vnode) {
+  // console.log(el, binding, vnode);
+  var list = el.getElementsByTagName("a");
+  for (let obj of list) {
+    var questionAudioId = obj.getAttribute("id");
+    if (questionAudioId) {
+      console.log("come in");
+      vnode.context.$http
+        .get(QUESTION_API + "/questionAudio/" + questionAudioId)
+        .then(response => {
+          console.log("response:", response);
+          if (response && response.data) {
+            let audioFlag =
+              '<audio controls><source src="http://exam-cloud-test.b0.upaiyun.com' +
+              response.data.fileUrl +
+              '" type="audio/mpeg"></audio>';
+            var b = document.createElement("span");
+            b.innerHTML = audioFlag;
+            obj.append(b);
+          }
+        });
+    }
+  }
+  console.log("el:", el);
+}

+ 32 - 0
src/modules/questions/filters/filters.js

@@ -0,0 +1,32 @@
+import Vue from "vue";
+import {
+  QUESTION_TYPES,
+  EXAM_TYPES,
+  EXPORT_TYPES
+} from "../constants/constants";
+//option字母顺序过滤器
+Vue.filter("optionOrderWordFilter", function(value) {
+  return String.fromCharCode(65 + value);
+});
+//题型过滤器
+Vue.filter("questionType", function(value) {
+  for (let questionType of QUESTION_TYPES) {
+    if (questionType.value === value) {
+      return questionType.label;
+    }
+  }
+});
+Vue.filter("examTypesFilter", function(value) {
+  for (let item of EXAM_TYPES) {
+    if (item.value === value) {
+      return item.label;
+    }
+  }
+});
+Vue.filter("exportTypesFilter", function(value) {
+  for (let item of EXPORT_TYPES) {
+    if (item.value === value) {
+      return item.label;
+    }
+  }
+});

+ 223 - 214
src/modules/questions/views/EditOtherQuestion.vue

@@ -1,244 +1,253 @@
 <!-- 编辑填空,问答,判断题 -->
-<style></style>
 <template>
-  <section class="content" v-loading="fullscreenLoading">
-    <div class="box box-info">
-      <div class="box-header with-border">
-        <h3 class="box-title">
-          <span v-if="!quesModel.id">试题新增</span>
-          <span v-if="quesModel.id">试题修改</span>
-        </h3>
-      </div>
-      <div class="box-body">
-        <el-form
-          :model="quesModel"
-          ref="quesModel"
-          :rules="rules"
-          label-position="right"
-          label-width="80px"
-        >
-          <el-row :gutter="10">
-            <el-col :xs="10" :sm="10" :md="10" :lg="10">
-              <el-form-item label="题型">
-                <el-select
-                  :disabled="true"
-                  v-model="quesModel.questionType"
-                  placeholder="请输入题型"
-                >
-                  <el-option
-                    v-for="item in questionTypes"
-                    :label="item.label"
-                    :value="item.value"
-                    :key="item.value"
+  <div id="editOtherApp">
+    <section class="content" v-loading="fullscreenLoading">
+      <div class="box box-info">
+        <div class="box-header with-border">
+          <h3 class="box-title">
+            <span v-if="!quesModel.id">试题新增</span>
+            <span v-if="quesModel.id">试题修改</span>
+          </h3>
+        </div>
+        <div class="box-body">
+          <el-form
+            :model="quesModel"
+            ref="quesModel"
+            :rules="rules"
+            label-position="right"
+            label-width="80px"
+          >
+            <el-row :gutter="10">
+              <el-col :xs="10" :sm="10" :md="10" :lg="10">
+                <el-form-item label="题型">
+                  <el-select
+                    :disabled="true"
+                    v-model="quesModel.questionType"
+                    placeholder="请输入题型"
                   >
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <!-- created by weiwenhai -->
-          <el-form-item label="难度">
-            <el-select
-              v-model="quesModel.difficultyDegree"
-              placeholder="请输入难度"
-            >
-              <el-option
-                v-for="item in difficultyDegreeList"
-                :label="item.label"
-                :value="item.value"
-                :key="item.value"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="公开度">
-            <el-select v-model="quesModel.publicity" placeholder="请输入公开度">
-              <el-option
-                v-for="item in publicityList"
-                :label="item.label"
-                :value="item.value"
-                :key="item.value"
+                    <el-option
+                      v-for="item in questionTypes"
+                      :label="item.label"
+                      :value="item.value"
+                      :key="item.value"
+                    >
+                    </el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <!-- created by weiwenhai -->
+            <el-form-item label="难度">
+              <el-select
+                v-model="quesModel.difficultyDegree"
+                placeholder="请输入难度"
               >
-              </el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="属性列表">
-            <el-tooltip
-              placement="top"
-              v-for="(content, index) in quesModel.quesProperties"
-              :key="index"
-            >
-              <div slot="content">
-                <span v-if="content.firstProperty != null"
-                  >一级属性:{{ content.firstProperty.name }}</span
-                ><br />
-                <span v-if="content.secondProperty != null"
-                  >二级属性:{{ content.secondProperty.name }}</span
+                <el-option
+                  v-for="item in difficultyDegreeList"
+                  :label="item.label"
+                  :value="item.value"
+                  :key="item.value"
                 >
-              </div>
-              <el-tag
-                style="margin-right:5px;"
-                :key="content.id"
-                closable
-                type="success"
-                @close="handleClose(content);"
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="公开度">
+              <el-select
+                v-model="quesModel.publicity"
+                placeholder="请输入公开度"
               >
-                {{ content.coursePropertyName }}
-              </el-tag>
-            </el-tooltip>
-          </el-form-item>
-          <el-row :gutter="20">
-            <el-col :xs="6" :sm="6" :md="6" :lg="6">
-              <el-form-item label="属性名">
-                <el-select
-                  v-model="coursePropertyName"
-                  placeholder="属性名"
-                  @change="searchFirst"
-                  class="property_with"
+                <el-option
+                  v-for="item in publicityList"
+                  :label="item.label"
+                  :value="item.value"
+                  :key="item.value"
                 >
-                  <el-option
-                    v-for="item in coursePropertyList"
-                    :label="item.name"
-                    :value="item.name"
-                    :key="item.name"
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="属性列表">
+              <el-tooltip
+                placement="top"
+                v-for="(content, index) in quesModel.quesProperties"
+                :key="index"
+              >
+                <div slot="content">
+                  <span v-if="content.firstProperty != null"
+                    >一级属性:{{ content.firstProperty.name }}</span
+                  ><br />
+                  <span v-if="content.secondProperty != null"
+                    >二级属性:{{ content.secondProperty.name }}</span
                   >
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :xs="6" :sm="6" :md="6" :lg="6">
-              <el-form-item label="一级">
-                <el-select
-                  v-model="firstPropertyId"
-                  placeholder="一级"
-                  @change="searchSecond"
-                  class="property_with"
+                </div>
+                <el-tag
+                  style="margin-right:5px;"
+                  :key="content.id"
+                  closable
+                  type="success"
+                  @close="handleClose(content);"
                 >
-                  <el-option
-                    v-for="item in firstPropertyList"
-                    :label="item.name"
-                    :value="item.id"
-                    :key="item.id"
+                  {{ content.coursePropertyName }}
+                </el-tag>
+              </el-tooltip>
+            </el-form-item>
+            <el-row :gutter="20">
+              <el-col :xs="6" :sm="6" :md="6" :lg="6">
+                <el-form-item label="属性名">
+                  <el-select
+                    v-model="coursePropertyName"
+                    placeholder="属性名"
+                    @change="searchFirst"
+                    class="property_with"
                   >
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :xs="6" :sm="6" :md="6" :lg="6">
-              <el-form-item label="二级">
-                <el-select
-                  v-model="secondPropertyId"
-                  placeholder="二级"
-                  class="property_with"
-                >
-                  <el-option
-                    v-for="item in secondPropertyList"
-                    :label="item.name"
-                    :value="item.id"
-                    :key="item.id"
+                    <el-option
+                      v-for="item in coursePropertyList"
+                      :label="item.name"
+                      :value="item.name"
+                      :key="item.name"
+                    >
+                    </el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :xs="6" :sm="6" :md="6" :lg="6">
+                <el-form-item label="一级">
+                  <el-select
+                    v-model="firstPropertyId"
+                    placeholder="一级"
+                    @change="searchSecond"
+                    class="property_with"
                   >
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :xs="3" :sm="3" :md="3" :lg="3">
-              <el-form-item>
-                <el-button
-                  type="info"
-                  @click="insertProperty"
-                  style="margin-left:-30px;"
-                  >新增属性</el-button
-                >
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <!-- end -->
-          <el-row :gutter="10">
-            <el-col :xs="30" :sm="30" :md="30" :lg="30">
-              <el-form-item label="题干" prop="quesBody">
-                <ckeditor
-                  :editor="editor"
-                  v-model="quesModel.quesBody"
-                  :config="editorConfig"
-                ></ckeditor>
-              </el-form-item>
-            </el-col>
-          </el-row>
-
-          <el-row
-            :gutter="10"
-            v-for="quesOption in quesModel.quesOptions"
-            :key="quesOption"
-          >
-            <el-col :xs="30" :sm="30" :md="30" :lg="30">
-              <el-form-item :label="quesOption.number">
-                <ckeditor
-                  :editor="editor"
-                  v-model="quesOption.quesBody"
-                  :config="editorConfig"
-                ></ckeditor>
-              </el-form-item>
-            </el-col>
-          </el-row>
-
-          <!-- 非套题 -->
-          <div
-            v-if="
-              quesModel.questionType !== 'NESTED_ANSWER_QUESTION' &&
-                quesModel.questionType !== 'BOOL_ANSWER_QUESTION'
-            "
-          >
-            <el-form-item label="答案" prop="quesAnswer">
-              <ckeditor
-                :editor="editor"
-                v-model="quesModel.quesAnswer"
-                :config="editorConfig"
-              ></ckeditor>
-            </el-form-item>
-          </div>
-          <div v-if="quesModel.questionType == 'BOOL_ANSWER_QUESTION'">
-            <el-row>
-              <el-col>
-                <el-form-item label="答案" prop="quesAnswer">
+                    <el-option
+                      v-for="item in firstPropertyList"
+                      :label="item.name"
+                      :value="item.id"
+                      :key="item.id"
+                    >
+                    </el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :xs="6" :sm="6" :md="6" :lg="6">
+                <el-form-item label="二级">
                   <el-select
-                    v-model="quesModel.quesAnswer"
-                    placeholder="请选择"
+                    v-model="secondPropertyId"
+                    placeholder="二级"
+                    class="property_with"
                   >
                     <el-option
-                      v-for="op in options"
-                      :label="op"
-                      :value="op"
-                      :key="op"
+                      v-for="item in secondPropertyList"
+                      :label="item.name"
+                      :value="item.id"
+                      :key="item.id"
                     >
                     </el-option>
                   </el-select>
                 </el-form-item>
               </el-col>
+              <el-col :xs="3" :sm="3" :md="3" :lg="3">
+                <el-form-item>
+                  <el-button
+                    type="info"
+                    @click="insertProperty"
+                    style="margin-left:-30px;"
+                    >新增属性</el-button
+                  >
+                </el-form-item>
+              </el-col>
             </el-row>
-          </div>
-          <div class="paper-top">
-            <el-form-item>
-              <el-button type="primary" @click="saveQues('quesModel');"
-                >保存</el-button
-              >
-              <el-button
-                type="primary"
-                icon="caret-left"
-                @click="backToQuesList();"
-                >返回列表</el-button
-              >
-            </el-form-item>
-          </div>
-        </el-form>
+            <!-- end -->
+            <el-row :gutter="10">
+              <el-col :xs="30" :sm="30" :md="30" :lg="30">
+                <el-form-item label="题干" prop="quesBody">
+                  <ckeditor
+                    :editor="editor"
+                    v-model="quesModel.quesBody"
+                    :config="editorConfig"
+                  ></ckeditor>
+                </el-form-item>
+              </el-col>
+            </el-row>
+
+            <el-row
+              :gutter="10"
+              v-for="quesOption in quesModel.quesOptions"
+              :key="quesOption"
+            >
+              <el-col :xs="30" :sm="30" :md="30" :lg="30">
+                <el-form-item :label="quesOption.number">
+                  <ckeditor
+                    :editor="editor"
+                    v-model="quesOption.quesBody"
+                    :config="editorConfig"
+                  ></ckeditor>
+                </el-form-item>
+              </el-col>
+            </el-row>
+
+            <!-- 非套题 -->
+            <div
+              v-if="
+                quesModel.questionType !== 'NESTED_ANSWER_QUESTION' &&
+                  quesModel.questionType !== 'BOOL_ANSWER_QUESTION'
+              "
+            >
+              <el-form-item label="答案" prop="quesAnswer">
+                <ckeditor
+                  :editor="editor"
+                  v-model="quesModel.quesAnswer"
+                  :config="editorConfig"
+                ></ckeditor>
+              </el-form-item>
+            </div>
+            <div v-if="quesModel.questionType == 'BOOL_ANSWER_QUESTION'">
+              <el-row>
+                <el-col>
+                  <el-form-item label="答案" prop="quesAnswer">
+                    <el-select
+                      v-model="quesModel.quesAnswer"
+                      placeholder="请选择"
+                    >
+                      <el-option
+                        v-for="op in options"
+                        :label="op"
+                        :value="op"
+                        :key="op"
+                      >
+                      </el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </div>
+            <div class="paper-top">
+              <el-form-item>
+                <el-button type="primary" @click="saveQues('quesModel');"
+                  >保存</el-button
+                >
+                <el-button
+                  type="primary"
+                  icon="caret-left"
+                  @click="backToQuesList();"
+                  >返回列表</el-button
+                >
+              </el-form-item>
+            </div>
+          </el-form>
+        </div>
       </div>
-    </div>
-  </section>
+    </section>
+  </div>
 </template>
 <script>
 import { CORE_API } from "@/constants/constants";
 import { QUESTION_TYPES } from "../constants/constants";
+import CKEditor from "@ckeditor/ckeditor5-vue";
 import ClassicEditor from "@ckeditor/ckeditor5-build-inline";
 export default {
+  name: "editOtherApp",
+  components: {
+    ckeditor: CKEditor.component
+  },
   data() {
     return {
       editor: ClassicEditor,

+ 5 - 1
src/modules/questions/views/EditPaper.vue

@@ -3,6 +3,7 @@
     class="paper"
     v-loading="loading"
     element-loading-text="拼命加载中。。。"
+    id="editPaperApp"
   >
     <div class="edit-paper-top">
       <div class="edit-paper-top-inline">
@@ -680,10 +681,13 @@ import { QUESTION_TYPES } from "../constants/constants";
 import { mapState } from "vuex";
 import reduplicate_mark from "../component/reduplicate_mark.vue";
 import randomColor from "randomcolor";
+import CKEditor from "@ckeditor/ckeditor5-vue";
 import ClassicEditor from "@ckeditor/ckeditor5-build-inline";
 export default {
+  name: "editPaperApp",
   components: {
-    reduplicate_mark
+    reduplicate_mark,
+    ckeditor: CKEditor.component
   },
   data() {
     return {

+ 6 - 1
src/modules/questions/views/EditSelectQuestion.vue

@@ -1,5 +1,5 @@
 <template>
-  <div v-loading="fullscreenLoading">
+  <div v-loading="fullscreenLoading" id="editSelectApp">
     <section class="content">
       <div class="box box-info">
         <!-- 头信息 -->
@@ -227,8 +227,13 @@
 <script>
 import { QUESTION_API } from "@/constants/constants";
 import { QUESTION_TYPES } from "../constants/constants";
+import CKEditor from "@ckeditor/ckeditor5-vue";
 import ClassicEditor from "@ckeditor/ckeditor5-build-inline";
 export default {
+  name: "editSelectApp",
+  components: {
+    ckeditor: CKEditor.component
+  },
   data() {
     return {
       editor: ClassicEditor,

+ 6 - 1
src/modules/questions/views/InsertBluePaperStructure.vue

@@ -1,5 +1,5 @@
 <template>
-  <div>
+  <div id="insertBlueApp">
     <section class="content">
       <div class="box box-info">
         <!-- 头信息 -->
@@ -223,8 +223,13 @@
 <script>
 import { CORE_API, QUESTION_API } from "@/constants/constants";
 import { QUESTION_TYPES } from "../constants/constants";
+import CKEditor from "@ckeditor/ckeditor5-vue";
 import ClassicEditor from "@ckeditor/ckeditor5-build-inline";
 export default {
+  name: "insertBlueApp",
+  components: {
+    ckeditor: CKEditor.component
+  },
   data() {
     return {
       editor: ClassicEditor,

+ 6 - 1
src/modules/questions/views/InsertPaperStructure.vue

@@ -1,5 +1,5 @@
 <template>
-  <div>
+  <div id="insertApp">
     <section class="content">
       <div>
         <!-- 头信息 -->
@@ -201,8 +201,13 @@
 
 <script>
 import { CORE_API, QUESTION_API } from "@/constants/constants";
+import CKEditor from "@ckeditor/ckeditor5-vue";
 import ClassicEditor from "@ckeditor/ckeditor5-build-inline";
 export default {
+  name: "insertApp",
+  components: {
+    ckeditor: CKEditor.component
+  },
   data() {
     return {
       editor: ClassicEditor,