Browse Source

初选报名多志愿

shilipojs 2 years ago
parent
commit
264134c43f

+ 14 - 10
src/views/system/user/profile/components/esign-dialog.vue

@@ -33,7 +33,7 @@
   </div>
 </template>
 <script>
-import { submitElectiveModels,saveEsign } from '@/api/webApi/elective/selected-subject'
+import { submitElectiveModels, saveEsign, getStudentElectiveModels } from '@/api/webApi/elective/selected-subject'
 export default {
   data() {
     return {
@@ -42,10 +42,11 @@ export default {
       lineWidth: 3, // 画笔的线条粗细
       lineColor: "#000000", // 画笔的颜色
       bgColor: "", // 画布的背景颜色
-      resultImg: "", // 最终画布生成的base64图片
+      base64Img: "", // 最终画布生成的base64图片
       isCrop: false, // 是否裁剪,在画布设定尺寸基础上裁掉四周空白部分
     };
   },
+  inject: ['loadStudentSelected','getStudentElectiveModels'],
   methods: {
     open(selectedList) {
       this.selectedList = selectedList
@@ -57,7 +58,16 @@ export default {
     },
     saveELective() {
       submitElectiveModels({
-        models:this.selectedList}).then(res => {
+        models:this.selectedList,
+        // esign:this.base64Img
+      }).then(res => {
+        if(res.code == 200) {
+          this.dialogVisible = false
+          this.$message.success('报名成功')
+          this.loadStudentSelected()
+          this.getStudentElectiveModels()
+        }
+
           console.log(res)
       })
     },
@@ -67,17 +77,11 @@ export default {
         .generate() // 使用生成器调用把签字的图片转换成为base64图片格式
         .then((res) => {
           console.log(this.selectedList)
-          this.resultImg = res;
+          this.base64Img = res;
           this.saveELective()
-          //
           // 在这里向后端发请求把转换后的base64文件传给后端,后端接收以后再转换成图片做静态图片存储
           // 当然也可以把base64转成流文件blob格式的,类似上传给后端这样,具体哪种方式看后端要求
           console.log(this.resultImg);
-          // setTimeout(() => {
-          //   // 这里要使用定时器稍微延后以后就能取到base64数据了,当然也可以再加一个确认按钮,如:确认使用这张base64签名图片
-          //   // 点击确认以后,在其回调函数中,再把base64的签名图片传给后端用于存储
-          //   console.log(this.resultImg);
-          // }, 200);
         })
         .catch((err) => {
           // 画布没有签字时会执行这里提示一下

+ 18 - 20
src/views/system/user/profile/components/report-table.vue

@@ -67,19 +67,19 @@
     </mx-table>
     <!-- 初录 多志愿拖拽 -->
     <div v-if="this.generation.current == 1">
-      <p>您的选科志愿: <span v-for="(item,index) in selectedList">
+      <p>您的选科志愿: <span v-for="(item) in activeModels.selectedList">
       {{ item.groupName }}
 <!--        {{ index + 1 < selectedList.length ? '、' : '' }}-->
       </span>
       </p>
-      <test-drage ref="drage" :sortList="selectedList"></test-drage>
+      <test-drage ref="drage"  :selectedList="activeModels.selectedList"></test-drage>
       <el-button @click="commit" type="primary">提交</el-button>
     </div>
     <!--  补录报名和二次补录报名和调剂报名 -->
     <div v-if="flagShow">
-      <div v-for="item in singleList" class="mb5 mt5">
-        <el-button @click="commit" type="primary">{{ `${item.groupName} : 报名` }}</el-button>
-      </div>
+<!--      <div v-for="item in singleList" class="mb5 mt5">-->
+<!--        <el-button @click="commit" type="primary">{{ `${item.groupName} : 报名` }}</el-button>-->
+<!--      </div>-->
       <div class="mb5 mt10 text-right">
         <el-popover
           placement="right"
@@ -97,7 +97,7 @@
             </el-input>
             <p class="fx-row jc-between mt10">
               <el-button type="primary" size="mini" @click="popoShow = false">取消</el-button>
-              <el-button type="danger" size="mini">提交</el-button>
+              <el-button type="danger" size="mini" v-if="">提交</el-button>
             </p>
           </div>
 
@@ -137,7 +137,6 @@ import ForceAdjustResolverMixins
 import OverUnderBadge from '@/views/elective/publish/components/steps/fauclty/over-under-badge'
 
 export default {
-
   props: {
     generation: Object,
     readonly: Boolean, // 校长端不允许操作
@@ -170,7 +169,6 @@ export default {
       dialogVisible: false,
       singleList: [], // 单志愿列表
       rows: [],
-      selectedList:[]
     }
   },
   computed: {
@@ -187,7 +185,7 @@ export default {
       return {
         index: {
           type: 'index',
-          label: '编号'
+          label: '编号',
         },
         groupName: {
           label: '选科组合'
@@ -253,14 +251,17 @@ export default {
       }
       return dynamicColumns
     },
+    activeModels(){
+      if(!this.generation) return {}
+      return this.generation.models.find(item => item.generation == this.generation.active)
+    },
     // 初始化 rows 填充固定数据
-
     formatRows() {
       if (!this.optionalMajors) return []
       if (!this.generation.roundGroups?.length) return []
       if (!this.generation.activeModels?.length) return []
       const generationModels = this.generation.activeModels.last()?.models || []
-      return this.generation.roundGroups.map(rg => {
+      return  this.generation.roundGroups.map(rg => {
         const row = generationModels.find(item => item.groupId == rg.groupId) || {}
         row.allowSelectTips = row.allowSelect ? '报名中' : row.disabledReason || '无法报名'
         const matchedMajors = this.optionalMajors.filter(college => college.matchedGroupIds.includes(row.groupId))
@@ -304,7 +305,7 @@ export default {
     },
     commit() {
       if (this.generation.current == 1) {
-        const real = this.selectedList.filter(item => {
+        const real = this.activeModels.selectedList.filter(item => {
           return item.selected == true
         })
         if (real.length < this.generation.status.preferenceCount) {
@@ -312,7 +313,7 @@ export default {
           return
         }
       }
-      this.$refs.esignDialog.open(this.selectedList)
+      this.$refs.esignDialog.open(this.activeModels.selectedList)
     },
     toSelect(row) {
       const preferenceCount = this.generation.status.preferenceCount
@@ -324,8 +325,7 @@ export default {
         return
       }
       row.selected = true
-      this.selectedList.push(row)
-      this.$refs.drage.init(this.selectedList)
+      this.activeModels.selectedList.push(row)
     },
     toUnSelect(row) {
       this.$confirm(`是否解除选科组合【${row.groupName}】`, '警告', {
@@ -334,11 +334,9 @@ export default {
         type: 'warning'
       }).then(() => {
         row.selected = false
-        const start = this.selectedList.indexOf(this.selectedList.find((selected) => {
-          return selected.groupId == row.groupId
-        }))
-        this.selectedList.splice(start, 1)
-        this.$refs.drage.init(this.selectedList)
+        const start = this.activeModels.selectedList.findIndex(item => item.groupId == row.groupId)
+        console.log(start)
+        this.activeModels.selectedList.splice(start, 1)
       }).catch(() => {
         this.$message({
           type: 'info',

+ 1 - 1
src/views/system/user/profile/components/round-select-resolvers/backTracking-resolver-mixins.js

@@ -12,7 +12,7 @@ export default {
       if (active < 4) {
         return {
           backTrackingApply: {
-            label: '补录情况'
+            label: '补录情况',
           }
         }
       } else {

+ 4 - 4
src/views/system/user/profile/components/test-drage.vue

@@ -20,17 +20,17 @@
 </template>
 <script>
 export default {
+  props: {
+    selectedList: Array
+  },
   data() {
     return {
       dragIndex: '',
       enterIndex: '',
-      sortList: [],
+      sortList: this.selectedList,
     }
   },
   methods: {
-    init(data) {
-      this.sortList = data
-    },
     dragstart(index) {
       this.dragIndex = index
     },

+ 19 - 3
src/views/system/user/profile/round-select.vue

@@ -29,7 +29,7 @@
       </template>
       <report-table v-if="generation.active <= generation.current" :generation="generation" :optional-majors="optionalMajors">
         <template #header-prefix>
-          <el-button circle icon="el-icon-refresh" @click="getStudentElectiveModels" class="mr30"></el-button>
+          <el-button circle icon="el-icon-refresh" @click="refresh" class="mr30"></el-button>
         </template>
       </report-table>
       <evaluation-empty v-else :shadow="false" :title="emptyTitle"></evaluation-empty>
@@ -64,7 +64,9 @@ import {
 export default {
   provide() {
     return {
-      optionalMajors: this.getOptionalMajors
+      optionalMajors: this.getOptionalMajors,
+      loadStudentSelected: this.loadStudentSelected,
+      getStudentElectiveModels: this.getStudentElectiveModels,
     }
   },
   components: { SelectSubject, TestResult, TestEntry, ReportTable, ElectiveGenerationSteps },
@@ -149,11 +151,25 @@ export default {
     getStudentElectiveModels() {
       this.loading = true
       getStudentElectiveModels().then(res => {
-        this.generationModels = res.data
+        this.generationModels = res.data.map(item => {
+          item.selectedList = item.models.filter(model => {
+            return model.selected
+          }).sort((prev,cur) => {
+            return prev.selectedRank - cur.selectedRank
+          })
+          return item
+        })
       }).finally(_ => {
         this.loading = false
       })
     },
+    refresh() {
+      // 刷新
+      this.loadStudentSelected()
+      this.getStudentElectiveModels()
+      this.getOptionalMajors()
+      this.getRecommendMajor()
+    },
     getRecommendMajor() {
       getRecommendMajor().then(res => {
         this.evaluationMajors = res.data