Преглед изворни кода

考試试卷绑定变更,添加考试须知

lvmax пре 3 месеци
родитељ
комит
01b691e1ae

+ 1 - 1
src/views/buss/exam/exam/Exam.api.ts

@@ -5,7 +5,7 @@ const {createConfirm} = useMessage();
 
 enum Api {
   list = '/exam/list',
-  save = '/exam/add',
+  save = '/exam/addExamPapers',
   edit = '/exam/edit',
   deleteOne = '/exam/delete',
   deleteBatch = '/exam/deleteBatch',

+ 57 - 32
src/views/buss/exam/exam/ExamFormPage.vue

@@ -12,13 +12,15 @@
               <a-form-item label="考试名称" name="title">
                 <a-input v-model:value="form.title" placeholder="请输入考试标题" />
               </a-form-item>
-              <a-form-item label="选择试卷" name="paperId">
-                <a-input-search
-                  v-model:value="form.paper.title"
-                  placeholder="请选择试卷"
-                  enter-button
-                  @search="selectPaper"
-                />
+              <a-form-item label="选择试卷" name="examPapers">
+                <a-button
+style="display: block"
+                  @click="selectPaper"
+                >选择试卷</a-button>
+                <div style="background-color: #fffaf0;text-align: left;padding: 13px 15px 15px 10px;border: solid #a19d96 1px;border-radius: 5px; height: 50px;margin-top: 1%;margin-right: 1%;width: 25%;display: inline-block" v-for="o in form.examPapers" :key="o">
+                  <strong style="color: #000000;font-family: '黑体',serif">{{o.title}}</strong>
+
+                </div>
               </a-form-item>
               <a-form-item label="试卷id" name="paperId" hidden>
                 <a-input v-model:value="form.paperId" />
@@ -40,9 +42,10 @@
                 <a-input-number v-model:value="form.limitCount" />
               </a-form-item>
-              <a-form-item label="封面图片" name="image">
-                <JImageUpload :fileMax="1" v-model:value="form.image"></JImageUpload>
-              </a-form-item>
+                  <a-form-item label="考试须知">
+                    <Tinymce v-model="form.message" :height="250"/>
+                  </a-form-item>
+
             </a-card>
             <br />
             <a-card size="small" title="考试权限" id="exam_privilege">
@@ -89,7 +92,6 @@
             </a-card>
             <br />
             <a-card size="small" title="阅卷人" id="exam_reviewer">
-              <template v-if="form.paper.hasSubjective">
                 <a-form-item label="阅卷类型" name="reviewerType">
                   <a-select placeholder="请选择阅卷类型" v-model:value="form.reviewerType"
                             @change="reviewerTypeChange">
@@ -109,7 +111,6 @@
                                        :multi="true" />
                   </a-form-item>
                 </template>
-              </template>
               <template v-else>
                 <a-form-item>
                   本次考试无需阅卷。
@@ -118,10 +119,9 @@
             </a-card>
             <br />
             <a-card size="small" title="防作弊选项" id="exam_nocheat">
-              <a-form-item label="是否题目乱序"
-                           v-if="form.paper.joinType == 1 || form.paper.joinType == 3">
-                <a-switch v-model:checked="form.questionDisorder" />
-              </a-form-item>
+                <a-form-item label="是否题目乱序">
+                 <a-switch v-model:checked="form.questionDisorder" />
+                </a-form-item>
               <a-form-item label="是否答案乱序">
                 <a-switch v-model:checked="form.answerDisorder" />
               </a-form-item>
@@ -141,40 +141,48 @@
           </a-form>
         </a-col>
         <a-col :span="6">
-          <a-card size="small" style="min-height:calc(100vh - 180px);position:fixed;width: 20%"
+          <a-card  size="small" style="height: 75vh;position:fixed;width: 21%"
                   title="已选试卷">
-            <div class="groupCard">
+<div  style="overflow-y: scroll; height: 69vh;">
+            <div class="groupCard" v-for="(o,i) in form.examPapers" :key="o">
+              <a-divider v-if="i!==0" style="height: 1px; background-color: #b2b2b2"></a-divider>
               <a-row>
                 <a-col :span="24">
-                  试卷名称:{{ form.paper.title }}
+                  试卷名称:{{ o.title }}
                 </a-col>
               </a-row>
               <a-row>
                 <a-col :span="24">
-                  试卷总分:<span class="groupCardFont">{{ form.paper.totalScore }}</span>
+                  试卷总分:<span class="groupCardFont">{{ o.totalScore }}</span>
                 </a-col>
               </a-row>
               <a-row>
                 <a-col :span="24">
-                  试题总数: <span class="groupCardFont">{{ form.paper.questionCount }}</span>
+                  试题总数: <span class="groupCardFont">{{ o.questionCount }}</span>
                 </a-col>
               </a-row>
               <a-row>
                 <a-col :span="24">
-                  组卷方式:{{ form.paper.joinType_dictText }}
+                  组卷方式:{{ o.joinType_dictText }}
                 </a-col>
               </a-row>
               <a-row>
                 <a-col :span="24">
-                  出卷人员:{{ form.paper.createBy }}
+                  考试顺序: <a-input v-model:value="o.paperOrder" />
                 </a-col>
               </a-row>
               <a-row>
                 <a-col :span="24">
-                  创建时间:{{ form.paper.createTime }}
+                  考试时长: <a-input  v-model:value="o.paperTime"/>
+                </a-col>
+              </a-row>
+              <a-row>
+                <a-col :span="24">
+                  及 格 分 : <a-input v-model:value="o.qualifyScore"/>
                 </a-col>
               </a-row>
             </div>
+</div>
           </a-card>
         </a-col>
       </a-row>
@@ -196,6 +204,7 @@ import JDictSelectTag from "/@/components/Form/src/jeecg/components/JDictSelectT
 import JImageUpload from "/@/components/Form/src/jeecg/components/JImageUpload.vue";
 import SegmentAnchor from "@/views/buss/components/SegmentAnchor.vue";
 import { castArray2String } from "/@/utils";
+import {Tinymce} from "/@/components/Tinymce";
 
 const { createMessage } = useMessage();
 const options = [
@@ -253,7 +262,7 @@ const rangeConfig = {
 
 const validatorRules = {
   title: [{ required: true, message: "试卷名称不能为空", trigger: "blur" }],
-  paperId: [{ required: true, message: "请选择试卷", trigger: "blur" }],
+  examPapers: [{ required: true, message: "请选择试卷", trigger: "blur" }],
   totalTime: [{ required: true, message: "请输入考试时长", trigger: "blur" }],
   qualifyScore: [{ required: true, message: "请输入及格分", trigger: "blur" }],
   openType: [{ required: true, message: "请选择开放类型", trigger: "blur" }],
@@ -263,6 +272,7 @@ const validatorRules = {
 };
 const form: any = ref<any>({
   paper: {},
+  examPapers: [],
   rangeDate: []
 });
 
@@ -288,8 +298,8 @@ async function initFormData() {
     }
     form.value.rangeDate = [data.startTime, data.endTime];
 
-    if (data && !data.paper) {
-      form.value.paper = {};
+    if (data && !data.examPapers) {
+      form.value.examPapers = [];
       createMessage.error("未找到对应试卷");
       return;
     }
@@ -323,12 +333,27 @@ let paper = ref({});
  */
 function handleSuccess(data) {
   const paperDatas = toRaw(data);
-  if (paperDatas && paperDatas.length > 0) {
-    const paperData = paperDatas[0];
-    form.value.paperId = paperData.id;
-    form.value.paper = paperData;
-    form.value.totalScore = paperData.totalScore;
+  console.log(paperDatas)
+  let arr=ref([])
+  for (let i = 0; i < paperDatas.length; i++) {
+    arr.value.push({
+      paperId:paperDatas[i].id,
+      createBy: paperDatas[i].createBy,
+    hasSubjective   : paperDatas[i].hasSubjective,
+    joinType   : paperDatas[i].joinType,
+    joinType_dictText   : paperDatas[i].joinType_dictText,
+    paperOrder   : paperDatas[i].paperOrder,
+    paperTime   : paperDatas[i].paperTime,
+    qualifyScore   : paperDatas[i].qualifyScore,
+    questionCount   : paperDatas[i].questionCount,
+    title   : paperDatas[i].title,
+    totalScore   : paperDatas[i].totalScore,
+    updateBy: paperDatas[i].updateBy,
+    })
   }
+
+    form.value.examPapers = arr.value;
+
 }
 
 function openTypeChange() {

+ 51 - 36
src/views/buss/exam/exam/components/ExamPaperModal.vue

@@ -1,29 +1,43 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose title="选择试卷"
-              :width="900" :height="550" :wrapStyle="{top:'-40px',left:'200px'}" @ok="handleSubmit">
-    <BasicTable @register="registerTable" :rowSelection="rowSelection"></BasicTable>
+  <BasicModal
+    v-bind="$attrs"
+    @register="registerModal"
+    destroyOnClose
+    title="选择试卷"
+    :width="900"
+    :height="550"
+    :wrapStyle="{ top: '-40px', left: '200px' }"
+    @ok="handleSubmit"
+  >
+    <BasicTable @register="registerTable" :rowSelection="rowSelection" />
   </BasicModal>
 </template>
 
 <script lang="ts" setup>
-import { ref } from "vue";
-import { BasicModal, useModalInner } from "/@/components/Modal";
-import { useListPage } from "/@/hooks/system/useListPage";
-import { list } from "/@/views/buss/exam/paper/Paper.api";
-import { BasicColumn, BasicTable, FormSchema } from "/@/components/Table";
+import { ref } from 'vue';
+import { BasicModal, useModalInner } from '/@/components/Modal';
+import { useListPage } from '/@/hooks/system/useListPage';
+import { list } from '/@/views/buss/exam/paper/Paper.api';
+import { BasicColumn, BasicTable, FormSchema } from '/@/components/Table';
 // Emits声明
 const emit = defineEmits(['register', 'success']);
 const paperId = ref();
 
 //表单赋值
-const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
-  paperId.value = data.paperId
-  selectedRowKeys.value = []
-  if (paperId.value) {
-    selectedRowKeys.value.push(paperId.value)
-  }
-  //重置表单
-  setModalProps({confirmLoading: false, showCancelBtn: !!data?.showFooter, showOkBtn: !!data?.showFooter});
+const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
+  // paperId.value = data.paperId;
+  // selectedRowKeys.value = [];
+  // console.log(data)
+  // // from.paper.id
+  // if (paperId.value) {
+  //   selectedRowKeys.value.push(paperId.value);
+  // }
+  // 重置表单
+  setModalProps({
+    confirmLoading: false,
+    showCancelBtn: !!data?.showFooter,
+    showOkBtn: !!data?.showFooter,
+  });
 });
 
 //表单提交事件
@@ -31,11 +45,13 @@ async function handleSubmit() {
   try {
     //关闭弹窗
     closeModal();
+    console.log(selectedRows.value)
+    console.log(selectedRowKeys.value)
     //刷新列表
     emit('success', selectedRows.value);
-    selectedRowKeys.value = []
+    selectedRowKeys.value = [];
   } finally {
-    setModalProps({confirmLoading: false});
+    setModalProps({ confirmLoading: false });
   }
 }
 
@@ -43,23 +59,23 @@ async function handleSubmit() {
 const columns: BasicColumn[] = [
   {
     title: '试卷名称',
-    align: "center",
-    dataIndex: 'title'
+    align: 'center',
+    dataIndex: 'title',
   },
   {
     title: '组卷类型',
-    align: "center",
-    dataIndex: 'joinType_dictText'
+    align: 'center',
+    dataIndex: 'joinType_dictText',
   },
   {
     title: '试卷总分',
-    align: "center",
-    dataIndex: 'totalScore'
+    align: 'center',
+    dataIndex: 'totalScore',
   },
   {
     title: '试题总数',
-    align: "center",
-    dataIndex: 'questionCount'
+    align: 'center',
+    dataIndex: 'questionCount',
   },
 ];
 //查询数据
@@ -68,7 +84,7 @@ const searchFormSchema: FormSchema[] = [
     label: '试卷名称',
     field: 'title',
     component: 'JInput',
-    colProps: {span: 8},
+    colProps: { span: 8 },
   },
   {
     label: '组卷方式',
@@ -79,11 +95,11 @@ const searchFormSchema: FormSchema[] = [
       placeholder: '请选择组卷方式',
       stringToNumber: true,
     },
-    colProps: {span: 8},
+    colProps: { span: 8 },
   },
 ];
 //注册table数据
-const {tableContext} = useListPage({
+const { tableContext } = useListPage({
   tableProps: {
     api: list,
     columns,
@@ -99,21 +115,20 @@ const {tableContext} = useListPage({
     canResize: false,
     showActionColumn: false,
     rowSelection: {
-      type: 'radio'
-    }
+      type: 'checkbox',
+    },
   },
-})
-const [registerTable, {reload}, {rowSelection, selectedRowKeys, selectedRows}] = tableContext
-
+});
+const [registerTable, { reload }, { rowSelection, selectedRowKeys, selectedRows }] = tableContext;
 </script>
 
 <style lang="less" scoped>
 /** 时间和数字输入框样式 */
 :deep(.ant-input-number) {
-  width: 100%
+  width: 100%;
 }
 
 :deep(.ant-calendar-picker) {
-  width: 100%
+  width: 100%;
 }
 </style>