刘洋 1 年之前
父節點
當前提交
12881ed4b0

+ 1 - 1
src/assets/styles/base.scss

@@ -148,7 +148,7 @@ body {
 
 .el-form.part-filter-form {
   // padding: 20px 0 5px;
-  padding:5px 0 5px;
+  padding:5px 0 0;
   /* element-ui*/
   .el-form-item {
     margin-bottom: 15px;

+ 40 - 22
src/assets/styles/pages.scss

@@ -142,20 +142,18 @@
 // paper-structure-info
 .topic-set {
   text-align: center;
-  border: 1px solid #6e7590;
-  color: #393c4c;
-  border-radius: 10px;
-  background-color: #b1b6ce;
+  border: 1px solid #FFCF8B;
+  color: #FF7D00;
+  border-radius: 6px;
+  background-color: #FFF7E8;
   overflow: hidden;
+  font-size:14px;
+  height:62px;
   &-title {
-    height: 34px;
+    height: 30px;
     line-height: 34px;
-    color: #fff;
-    border-bottom: 1px solid #6e7590;
   }
   &-content {
-    background-color: #fff;
-    padding: 2px;
 
     .el-input__inner {
       border: none;
@@ -270,36 +268,55 @@
   .edit-property {
     flex-grow: 0;
     flex-shrink: 0;
-    width: 360px;
+    width: 390px;
     border-left: 1px solid #f0f2f6;
-    padding: 0 30px;
+    padding: 0 16px;
     font-size: 0;
     margin: 0 -3px;
 
     &-item {
       display: inline-block;
       vertical-align: top;
-      width: 25%;
-      padding: 3px;
-      font-size: 12px;
+      width: 78px;
+      height:62px;
+      margin-right:10px;
+      padding: 0;
+      font-size: 14px;
+      &:nth-child(4n){
+        margin-right:0;
+      }
+      margin-bottom:10px;
     }
 
     &-body {
+      width:100%;
+      height:100%;
       text-align: center;
-      border: 1px solid #6e7590;
       color: #393c4c;
       border-radius: 8px;
-      background-color: #73c7ff;
+      // background-color: #73c7ff;
       line-height: 24px;
       overflow: hidden;
+      &.level1,&.level2{
+        background-color: #FFF7E8;
+        color:#FF7D00;
+      border: 1px solid #FFCF8B;
+
+      }
+      &.level2{
+        background-color: #E8F3FF;
+        color:#165DFF;
+        border: 1px solid #6AA1FF;
+      }
     }
     &-title {
-      color: #fff;
-      border-bottom: 1px solid #6e7590;
-    }
-    &-content {
-      background-color: #fff;
+      line-height:30px;
+      // color: #fff;
+      // border-bottom: 1px solid #6e7590;
     }
+    // &-content {
+    //   background-color: #fff;
+    // }
   }
   .edit-property-danger {
     .edit-property-title {
@@ -308,7 +325,8 @@
   }
   .edit-cont {
     position: relative;
-    padding: 0 30px 35px;
+    // padding: 0 30px 35px;
+    padding: 0 30px 0;
     flex-grow: 2;
     overflow: hidden;
 

+ 1 - 1
src/modules/paper/views/BuildPaper.vue

@@ -6,7 +6,7 @@
           <el-button
             class="is-back"
             icon="el-icon-arrow-left"
-            @click="toBack"
+            @click="toback"
             size="mini"
           ></el-button>
           <h1 class="part-box-title">组卷</h1>

+ 210 - 68
src/modules/paper/views/EditPaper.vue

@@ -224,10 +224,22 @@
       <div class="edit-part-list">
         <div class="edit-part">
           <div class="edit-cont">
-            <div class="edit-cont-title">
+            <div
+              class="edit-cont-title"
+              style="display: flex; align-items: center"
+            >
               <h3>考试说明</h3>
+              <svg-btn
+                name="bianji"
+                color="#6D5FF6"
+                hoverBgColor="#F0EFFE"
+                class="hover-show"
+                @click="toEditExamRemark"
+                style="margin-left: 10px"
+                >编辑</svg-btn
+              >
             </div>
-            <div class="edit-cont-action">
+            <!-- <div class="edit-cont-action">
               <el-button
                 type="primary"
                 plain
@@ -235,7 +247,7 @@
                 @click="toEditExamRemark"
                 >编辑</el-button
               >
-            </div>
+            </div> -->
             <div class="edit-cont-body">
               <rich-text :text-json="paper.examRemark"></rich-text>
             </div>
@@ -249,7 +261,7 @@
         :key="paperDetail.id"
         class="edit-part-list"
       >
-        <div class="edit-part">
+        <div class="edit-part level1">
           <div class="edit-cont">
             <div class="edit-cont-title">
               <h3>
@@ -261,10 +273,31 @@
               class="edit-cont-body"
               :text-json="paperDetail.description"
             ></rich-text>
-            <div class="edit-cont-action box-justify">
-              <div>
-                共{{ paperDetail.unitCount }}小题,满分{{ paperDetail.score }}分
-              </div>
+          </div>
+          <div class="level1-hover-show">
+            <div style="color: #595959; margin-bottom: 5px">
+              共{{ paperDetail.unitCount }}小题,满分{{ paperDetail.score }}分
+            </div>
+            <div class="gray-btn-group">
+              <span @click="toSelectPaperDetailQues(paperDetail)">选题</span>
+              <span @click="toEditPaperDetail(paperDetail)">编辑</span>
+              <span
+                v-if="detailIndex"
+                @click="toMovePaperDetail(paperDetail, 'up')"
+                >上移</span
+              >
+              <span v-if="detailIndex < paper.paperDetails.length - 1"
+                >下移</span
+              >
+              <span @click="toDeletePaperDetail(paperDetail)">删除</span>
+              <span
+                @click.stop="
+                  paperDetail.showQuestions = !paperDetail.showQuestions
+                "
+                >{{ paperDetail.showQuestions ? "收起" : "展开" }}</span
+              >
+            </div>
+            <!-- 
               <div>
                 <el-button
                   size="small"
@@ -315,8 +348,7 @@
                     paperDetail.showQuestions = !paperDetail.showQuestions
                   "
                 ></el-button>
-              </div>
-            </div>
+              </div> -->
           </div>
           <div v-show="quesTagShow" class="edit-property">
             <div class="edit-property-box">
@@ -325,7 +357,7 @@
                 :key="tagIndex"
                 class="edit-property-item"
               >
-                <div class="edit-property-body edit-property-danger">
+                <div class="edit-property-body level1">
                   <div class="edit-property-title">
                     {{ paperDetailTag.tag }}
                   </div>
@@ -336,7 +368,7 @@
               </div>
               <template v-if="paperDetail.selective">
                 <div class="edit-property-item">
-                  <div class="edit-property-body edit-property-danger">
+                  <div class="edit-property-body level1">
                     <div class="edit-property-title">选做题数</div>
                     <div class="edit-property-content">
                       {{ paperDetail.selectiveCount }}
@@ -344,7 +376,7 @@
                   </div>
                 </div>
                 <div class="edit-property-item">
-                  <div class="edit-property-body edit-property-danger">
+                  <div class="edit-property-body level1">
                     <div class="edit-property-title">取分规则</div>
                     <div class="edit-property-content">
                       {{ paperDetail.selectiveRule | selectiveRuleTypeFilter }}
@@ -364,6 +396,7 @@
               :key="`question-${unitIndex}`"
               :class="[
                 'edit-part',
+                'level2',
                 {
                   'question-duplicate':
                     paperDetailUnit.question.checkDuplicateStatus ==
@@ -372,62 +405,53 @@
                 },
               ]"
             >
-              <div class="edit-cont">
-                <div class="edit-cont-title">
-                  <span>{{ paperDetailUnit.number }}.</span>
-                  <rich-text
-                    :text-json="paperDetailUnit.question.quesBody"
-                  ></rich-text>
-                  <span :class="{ 'color-danger': !paperDetailUnit.score }">
-                    ({{ paperDetailUnit.score }}分)
-                  </span>
-                </div>
-                <div class="edit-cont-body">
-                  <div
-                    v-for="(quesOption, optionIndex) in paperDetailUnit.question
-                      .quesOptions"
-                    :key="optionIndex"
-                    class="paper-option"
-                  >
-                    <span>{{ optionIndex | optionOrderWordFilter }}. </span>
-                    <rich-text :text-json="quesOption.optionBody"></rich-text>
-                  </div>
-                  <div v-if="!isNested(paperDetailUnit.questionType)">
-                    <div v-show="quesAnswerShow" class="paper-answer">
-                      <span>答案:</span>
-                      <question-answer
-                        :data="paperDetailUnit.question"
-                      ></question-answer>
-                    </div>
-                  </div>
-                </div>
-                <div
-                  v-if="paperDetailUnit.question.quesProperties"
-                  class="edit-cont-props"
-                  style="margin-top: 10px"
-                >
-                  <el-tag
-                    v-for="(content, propIndex) in paperDetailUnit.question
-                      .quesProperties"
-                    :key="propIndex"
-                    type="primary"
-                    effect="dark"
-                    style="margin-right: 5px; margin-bottom: 5px"
-                  >
-                    {{ content.courseProperty && content.courseProperty.name }}
-                    <span style="margin: 0 3px">/</span>
-                    {{ content.firstProperty && content.firstProperty.name }}
-                    <span v-if="content.secondProperty" style="margin: 0 3px"
-                      >/</span
+              <div class="level2-hover-show">
+                <div class="box-justify">
+                  <div class="gray-btn-group">
+                    <span
+                      v-if="
+                        paperDetailUnit.question.checkDuplicateStatus ===
+                        'TO_BE_DISPOSE'
+                      "
+                      @click="
+                        toCheckDuplicateQuestion(paperDetailUnit.question.id)
+                      "
+                      >进入查重</span
                     >
-                    {{ content.secondProperty && content.secondProperty.name }}
-                  </el-tag>
-                </div>
-                <div class="edit-cont-action">
+                    <span @click="toChangeQues(paperDetailUnit)">换题</span>
+                    <span @click="toEditQues(paperDetailUnit)">编辑</span>
+                    <span
+                      v-if="unitIndex"
+                      @click="
+                        toMoveQues(paperDetail.id, paperDetailUnit.id, 'up')
+                      "
+                      >上移</span
+                    >
+                    <span
+                      v-if="unitIndex < paperDetail.paperDetailUnits.length - 1"
+                      @click="
+                        toMoveQues(paperDetail.id, paperDetailUnit.id, 'down')
+                      "
+                      >下移</span
+                    >
+                    <span @click="toDeleteQues(paperDetailUnit)">删除</span>
+                    <span
+                      v-if="isNested(paperDetailUnit.questionType)"
+                      @click="
+                        paperDetailUnit.showSubQuestions =
+                          !paperDetailUnit.showSubQuestions
+                      "
+                      >{{
+                        paperDetailUnit.showSubQuestions ? "收起" : "展开"
+                      }}</span
+                    >
+                  </div>
                   <span class="tips-info">
                     {{ paperDetailUnit.question.bodyLengthText }}
                   </span>
-                  <el-button
+                </div>
+
+                <!-- <el-button
                     v-if="
                       paperDetailUnit.question.checkDuplicateStatus ===
                       'TO_BE_DISPOSE'
@@ -492,7 +516,58 @@
                       paperDetailUnit.showSubQuestions =
                         !paperDetailUnit.showSubQuestions
                     "
-                  ></el-button>
+                  ></el-button> -->
+              </div>
+              <div class="edit-cont">
+                <div class="edit-cont-title">
+                  <span>{{ paperDetailUnit.number }}.</span>
+                  <rich-text
+                    :text-json="paperDetailUnit.question.quesBody"
+                  ></rich-text>
+                  <span :class="{ 'color-danger': !paperDetailUnit.score }">
+                    ({{ paperDetailUnit.score }}分)
+                  </span>
+                </div>
+                <div class="edit-cont-body">
+                  <div
+                    v-for="(quesOption, optionIndex) in paperDetailUnit.question
+                      .quesOptions"
+                    :key="optionIndex"
+                    class="paper-option"
+                  >
+                    <span>{{ optionIndex | optionOrderWordFilter }}. </span>
+                    <rich-text :text-json="quesOption.optionBody"></rich-text>
+                  </div>
+                  <div v-if="!isNested(paperDetailUnit.questionType)">
+                    <div v-show="quesAnswerShow" class="paper-answer">
+                      <span>答案:</span>
+                      <question-answer
+                        :data="paperDetailUnit.question"
+                      ></question-answer>
+                    </div>
+                  </div>
+                </div>
+                <div
+                  v-if="paperDetailUnit.question.quesProperties"
+                  class="edit-cont-props"
+                  style="margin-top: 10px"
+                >
+                  <el-tag
+                    v-for="(content, propIndex) in paperDetailUnit.question
+                      .quesProperties"
+                    :key="propIndex"
+                    type="primary"
+                    effect="dark"
+                    style="margin-right: 5px; margin-bottom: 5px"
+                  >
+                    {{ content.courseProperty && content.courseProperty.name }}
+                    <span style="margin: 0 3px">/</span>
+                    {{ content.firstProperty && content.firstProperty.name }}
+                    <span v-if="content.secondProperty" style="margin: 0 3px"
+                      >/</span
+                    >
+                    {{ content.secondProperty && content.secondProperty.name }}
+                  </el-tag>
                 </div>
               </div>
               <div v-show="quesTagShow" class="edit-property">
@@ -503,7 +578,7 @@
                     :key="tagIndex"
                     class="edit-property-item"
                   >
-                    <div class="edit-property-body">
+                    <div class="edit-property-body level2">
                       <div class="edit-property-title">
                         {{ questionTag.tag }}
                       </div>
@@ -622,7 +697,7 @@
                       :key="tagIndex"
                       class="edit-property-item"
                     >
-                      <div class="edit-property-body">
+                      <div class="edit-property-body level2">
                         <div class="edit-property-title">
                           {{ subQuestionTag.tag }}
                         </div>
@@ -644,6 +719,7 @@
     <modify-rich-text
       ref="ModifyRichText"
       :content="paper.examRemark"
+      title="考试说明"
       @modified="examRemarkModified"
     ></modify-rich-text>
     <!-- 编辑大题弹框 -->
@@ -1198,3 +1274,69 @@ export default {
   },
 };
 </script>
+<style lang="scss" scoped>
+.edit-paper {
+  .edit-part {
+    &.level2 {
+      padding-bottom: 60px;
+      .level2-hover-show {
+        display: none;
+        position: absolute;
+        bottom: 15px;
+        left: 20px;
+        z-index: 1;
+        width: calc(100% - 450px);
+      }
+      &:hover {
+        .level2-hover-show {
+          display: block;
+        }
+      }
+    }
+    &.level1 {
+      padding-bottom: 80px;
+      .level1-hover-show {
+        display: none;
+        position: absolute;
+        bottom: 15px;
+        left: 20px;
+        z-index: 1;
+      }
+      &:hover {
+        .level1-hover-show {
+          display: block;
+        }
+      }
+    }
+    .hover-show {
+      visibility: hidden;
+    }
+    &:hover {
+      .hover-show {
+        visibility: visible;
+      }
+    }
+
+    .gray-btn-group {
+      height: 32px;
+      border-radius: 6px;
+      background: #f2f3f5;
+      display: flex;
+      align-items: center;
+      & > span {
+        color: #8c8c8c;
+        font-size: 14px;
+        padding: 0 12px;
+        cursor: pointer;
+        transition: all 0.3s;
+        &:not(:first-child) {
+          border-left: 1px solid #e5e5e5;
+        }
+        &:hover {
+          color: #262626;
+        }
+      }
+    }
+  }
+}
+</style>

+ 28 - 2
src/modules/portal/views/home/HomeSide.vue

@@ -87,8 +87,21 @@
         <span> 安全设置 </span>
       </el-menu-item>
       <el-menu-item>
-        <i class="icon icon-fast"></i>
-        <span> 快捷路径 </span>
+        <el-popover placement="right" width="180" trigger="hover">
+          <div slot="reference">
+            <i class="icon icon-fast"></i>
+            <span> 快捷路径 </span>
+          </div>
+          <div>
+            <div class="fast-menu-item">导入试题</div>
+            <div
+              class="fast-menu-item"
+              @click="$router.push('/questions/gen_paper/0')"
+            >
+              试卷列表
+            </div>
+          </div>
+        </el-popover>
       </el-menu-item>
       <el-menu-item
         class="red"
@@ -313,6 +326,7 @@ export default {
     margin-top: 30px;
     padding: 10px 0;
     position: relative;
+
     &:before {
       content: "";
       position: absolute;
@@ -344,3 +358,15 @@ export default {
   }
 }
 </style>
+<style lang="scss">
+.fast-menu-item {
+  height: 28px;
+  line-height: 28px;
+  cursor: pointer;
+  padding-left: 10px;
+  border-radius: 4px;
+  &:hover {
+    background-color: #f0f0f0;
+  }
+}
+</style>

+ 5 - 5
src/modules/question/views/QuestionManage.vue

@@ -26,7 +26,7 @@
             :course-id="filter.courseId"
           ></property-tree-select> -->
             <property-tree-select
-              v-model="filter.propertyIdList"
+              v-model="filter.questionProperty"
               :course-id="filter.courseId"
             ></property-tree-select>
           </el-form-item>
@@ -399,13 +399,13 @@ export default {
         sourceDetailId: "",
         questionBody: "",
         // questionProperty: [],
-        propertyIdList: [],
+        questionProperty: [],
 
         classifyId: "",
         // courseId: "",
         // questionType: "",
         // sourceDetailId: "",
-        // propertyIdList: [],
+        // questionProperty: [],
       },
       curFolderAction: "",
       folderList: [],
@@ -447,7 +447,7 @@ export default {
         courseId: "",
         questionType: "",
         sourceDetailId: "",
-        propertyIdList: [],
+        questionProperty: [],
       };
       this.toPage(1);
     },
@@ -470,7 +470,7 @@ export default {
         pageSize: this.pageSize,
       };
       // data.questionProperty = data.questionProperty.join();
-      data.propertyIdList = data.propertyIdList.join();
+      data.questionProperty = data.questionProperty.join();
       // const res = await questionPageListApi(data).catch(() => {});
       const res = await classifyQuestionPageListApi(data).catch(() => {});
       this.loading = false;

+ 36 - 19
src/modules/questions/views/SynthesisPaperStorage.vue

@@ -47,7 +47,7 @@
           <el-button type="danger" plain @click="resetForm">重置</el-button>
         </el-form-item>
       </el-form>
-      <div class="part-box-action">
+      <!-- <div class="part-box-action">
         <div>
           <el-button
             type="danger"
@@ -72,9 +72,24 @@
           @click="toBuildPaper"
           >综合组卷</el-button
         >
-      </div>
+      </div> -->
     </div>
     <div class="part-box">
+      <div class="icon-btn-group">
+        <svg-btn name="xinzeng">综合组卷</svg-btn>
+        <svg-btn
+          name="shanchu"
+          :disabled="noBatchSelected"
+          @click="batchDeleteGenPaper"
+          >删除成卷</svg-btn
+        >
+        <svg-btn
+          name="daoru"
+          :disabled="noBatchSelected"
+          @click="openBatchExportPaperDialog"
+          >下载成卷</svg-btn
+        >
+      </div>
       <el-table
         v-loading="loading"
         element-loading-text="拼命加载中"
@@ -138,11 +153,28 @@
           prop="updateTime"
         >
         </el-table-column>
-        <el-table-column label="操作" width="220" fixed="right">
+        <el-table-column label="操作" width="240" fixed="right">
           <template slot-scope="scope">
             <div class="operate_left">
+              <el-button
+                size="medium"
+                type="text"
+                class="normal"
+                :loading="downloading"
+                @click="toViewPaper(scope.row)"
+                >预览</el-button
+              >
+              <el-button
+                size="medium"
+                type="text"
+                class="normal"
+                @click="openExportDialog(scope.row)"
+                >下载</el-button
+              >
               <el-dropdown>
-                <el-button size="mini" type="primary" plain>编辑</el-button>
+                <el-button type="text" size="medium" class="normal">
+                  编辑<i class="el-icon-arrow-down el-icon--right"></i>
+                </el-button>
                 <el-dropdown-menu slot="dropdown" class="action-dropdown">
                   <el-dropdown-item
                     v-for="paper in scope.row.papers"
@@ -158,21 +190,6 @@
                   </el-dropdown-item>
                 </el-dropdown-menu>
               </el-dropdown>
-              <el-button
-                size="mini"
-                type="primary"
-                plain
-                :loading="downloading"
-                @click="toViewPaper(scope.row)"
-                >预览</el-button
-              >
-              <el-button
-                size="mini"
-                type="primary"
-                plain
-                @click="openExportDialog(scope.row)"
-                >下载</el-button
-              >
             </div>
           </template>
         </el-table-column>