zhangjie 1 год назад
Родитель
Сommit
eea8884051

+ 12 - 0
src/components/base/TrainingPlanCourseSelect.vue

@@ -29,6 +29,7 @@ export default {
     clearable: { type: Boolean, default: true },
     clearable: { type: Boolean, default: true },
     professionalId: { type: String, default: "" },
     professionalId: { type: String, default: "" },
     cultureProgramId: { type: String, default: "" },
     cultureProgramId: { type: String, default: "" },
+    defaultSelect: { type: Boolean, default: false },
   },
   },
   data() {
   data() {
     return {
     return {
@@ -70,6 +71,8 @@ export default {
         cultureProgramId: this.cultureProgramId,
         cultureProgramId: this.cultureProgramId,
       });
       });
       this.optionList = res;
       this.optionList = res;
+
+      if (this.defaultSelect && !this.value) this.selectDefault();
     },
     },
     select() {
     select() {
       this.$emit("input", this.selected);
       this.$emit("input", this.selected);
@@ -78,6 +81,15 @@ export default {
         this.optionList.find((item) => item.id === this.selected)
         this.optionList.find((item) => item.id === this.selected)
       );
       );
     },
     },
+    selectDefault() {
+      const defaultData = this.optionList[0];
+      if (defaultData) {
+        this.selected = defaultData.id;
+        this.$emit("input", this.selected);
+        this.$emit("change", defaultData);
+        this.$emit("default-selected", defaultData);
+      }
+    },
   },
   },
 };
 };
 </script>
 </script>

+ 45 - 47
src/modules/target/components/target-score/SyncPaperDialog.vue

@@ -3,48 +3,51 @@
     :visible.sync="modalIsShow"
     :visible.sync="modalIsShow"
     title="同步成绩"
     title="同步成绩"
     top="10vh"
     top="10vh"
-    width="500px"
+    width="600px"
     :close-on-click-modal="false"
     :close-on-click-modal="false"
     :close-on-press-escape="false"
     :close-on-press-escape="false"
     append-to-body
     append-to-body
     @open="visibleChange"
     @open="visibleChange"
   >
   >
-    <el-form ref="modalFormComp" :model="modalForm" label-width="60px">
-      <el-form-item
-        prop="paperNumber"
-        label="试卷:"
-        :rules="{
-          required: true,
-          message: '请选择试卷',
-          trigger: 'change',
-        }"
-      >
-        <el-select
-          v-model="modalForm.paperNumber"
-          placeholder="选择试卷"
-          clearable
-          class="width-full"
-        >
-          <el-option
-            v-for="paper in papers"
-            :key="paper.paperNumber"
-            :value="paper.paperNumber"
-            :label="paper.paperNumber"
-          ></el-option>
-        </el-select>
+    <el-form ref="FilterForm" label-position="left" inline label-width="0px">
+      <el-form-item>
+        <exam-select
+          v-model="filter.examId"
+          :semester-id="filter.semesterId"
+          placeholder="考试"
+          :clearable="false"
+        ></exam-select>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button type="primary" @click="getList">查询</el-button>
       </el-form-item>
       </el-form-item>
     </el-form>
     </el-form>
-    <div slot="footer">
-      <el-button type="primary" :disabled="isSubmit" @click="submit"
-        >确认</el-button
-      >
-      <el-button @click="cancel">取消</el-button>
-    </div>
+
+    <el-table ref="TableList" :data="dataList">
+      <el-table-column
+        type="index"
+        label="序号"
+        width="70"
+        :index="indexMethod"
+      ></el-table-column>
+      <el-table-column prop="paperNumber" label="试卷编号"> </el-table-column>
+      <el-table-column class-name="action-column" label="操作" width="80">
+        <template slot-scope="scope">
+          <el-button class="btn-primary" type="text" @click="toSync(scope.row)"
+            >同步</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <div slot="footer"></div>
   </el-dialog>
   </el-dialog>
 </template>
 </template>
 
 
 <script>
 <script>
 import { endScoreSyncPaperList, endScoreSync } from "../../api";
 import { endScoreSyncPaperList, endScoreSync } from "../../api";
+const initFilter = { semesterId: "", examId: "", courseId: "" };
 
 
 export default {
 export default {
   name: "SyncPaperDialog",
   name: "SyncPaperDialog",
@@ -59,20 +62,18 @@ export default {
   data() {
   data() {
     return {
     return {
       modalIsShow: false,
       modalIsShow: false,
-      isSubmit: false,
-      modalForm: { paperNumber: "" },
-      papers: [],
+      loading: false,
+      filter: { ...initFilter },
+      dataList: [],
     };
     };
   },
   },
   methods: {
   methods: {
-    async getPapers() {
-      if (this.papers.length) return;
-      const res = await endScoreSyncPaperList(this.course);
-      this.papers = res || [];
+    async getList() {
+      const res = await endScoreSyncPaperList(this.filter);
+      this.dataList = res || [];
     },
     },
     visibleChange() {
     visibleChange() {
-      this.getPapers();
-      this.modalForm = { paperNumber: "" };
+      this.filter = this.$objAssign(initFilter, this.course);
     },
     },
     cancel() {
     cancel() {
       this.modalIsShow = false;
       this.modalIsShow = false;
@@ -80,20 +81,17 @@ export default {
     open() {
     open() {
       this.modalIsShow = true;
       this.modalIsShow = true;
     },
     },
-    async submit() {
-      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
-      if (!valid) return;
-
-      if (this.isSubmit) return;
-      this.isSubmit = true;
+    async toSync(row) {
+      if (this.loading) return;
+      this.loading = true;
 
 
       const datas = {
       const datas = {
         cultureProgramId: this.course.cultureProgramId,
         cultureProgramId: this.course.cultureProgramId,
         courseId: this.course.courseId,
         courseId: this.course.courseId,
-        paperNumber: this.modalForm.paperNumber,
+        paperNumber: row.paperNumber,
       };
       };
       const res = await endScoreSync(datas).catch(() => {});
       const res = await endScoreSync(datas).catch(() => {});
-      this.isSubmit = false;
+      this.loading = false;
 
 
       if (!res) return;
       if (!res) return;
 
 

+ 1 - 1
src/modules/target/components/target-score/TargetScoreEnd.vue

@@ -111,7 +111,7 @@
     <!-- select papers -->
     <!-- select papers -->
     <sync-paper-dialog
     <sync-paper-dialog
       ref="SyncPaperDialog"
       ref="SyncPaperDialog"
-      :course="filter"
+      :course="course"
       @modified="getList"
       @modified="getList"
     ></sync-paper-dialog>
     ></sync-paper-dialog>
   </div>
   </div>

+ 13 - 0
src/modules/target/views/TargetScoreManage.vue

@@ -7,13 +7,19 @@
             <training-plan-select
             <training-plan-select
               v-model="filter.cultureProgramId"
               v-model="filter.cultureProgramId"
               placeholder="培养方案"
               placeholder="培养方案"
+              :clearable="false"
+              default-select
               @change="trainingPlanChange"
               @change="trainingPlanChange"
+              @default-selected="defaultFilterChange('cultureProgramId')"
             ></training-plan-select>
             ></training-plan-select>
           </el-form-item>
           </el-form-item>
           <el-form-item label="学期:">
           <el-form-item label="学期:">
             <semester-select
             <semester-select
               v-model="filter.semesterId"
               v-model="filter.semesterId"
               placeholder="学期"
               placeholder="学期"
+              :clearable="false"
+              default-select
+              @default-selected="defaultFilterChange('semesterId')"
             ></semester-select>
             ></semester-select>
           </el-form-item>
           </el-form-item>
           <el-form-item label="课程:">
           <el-form-item label="课程:">
@@ -115,6 +121,7 @@ export default {
       total: 0,
       total: 0,
       dataList: [],
       dataList: [],
       curRow: {},
       curRow: {},
+      defaultKeys: [],
     };
     };
   },
   },
   methods: {
   methods: {
@@ -140,6 +147,12 @@ export default {
     trainingPlanChange(val) {
     trainingPlanChange(val) {
       this.filter.professionalId = val?.professionalId;
       this.filter.professionalId = val?.professionalId;
     },
     },
+    defaultFilterChange(key) {
+      if (!this.defaultKeys.includes(key)) {
+        this.defaultKeys.push(key);
+      }
+      if (this.defaultKeys.length === 2) this.search();
+    },
     toDetail(row) {
     toDetail(row) {
       this.curRow = row;
       this.curRow = row;
       this.$refs.DetailTargetScore.open();
       this.$refs.DetailTargetScore.open();

+ 7 - 0
src/modules/target/views/TargetStatistics.vue

@@ -7,6 +7,8 @@
             <training-plan-select
             <training-plan-select
               v-model="filter.cultureProgramId"
               v-model="filter.cultureProgramId"
               placeholder="培养方案"
               placeholder="培养方案"
+              :clearable="false"
+              default-select
               @change="trainingPlanChange"
               @change="trainingPlanChange"
             ></training-plan-select>
             ></training-plan-select>
           </el-form-item>
           </el-form-item>
@@ -16,6 +18,9 @@
               placeholder="课程"
               placeholder="课程"
               :professional-id="filter.professionalId"
               :professional-id="filter.professionalId"
               :culture-program-id="filter.cultureProgramId"
               :culture-program-id="filter.cultureProgramId"
+              :clearable="false"
+              default-select
+              @default-selected="search"
             ></training-plan-course-select>
             ></training-plan-course-select>
           </el-form-item>
           </el-form-item>
         </template>
         </template>
@@ -119,6 +124,8 @@ export default {
     async getList() {
     async getList() {
       if (!this.checkPrivilege("list", "list")) return;
       if (!this.checkPrivilege("list", "list")) return;
 
 
+      if (!this.filter.cultureProgramId || !this.filter.courseId) return;
+
       const datas = {
       const datas = {
         ...this.filter,
         ...this.filter,
         pageNumber: this.current,
         pageNumber: this.current,