Browse Source

模拟选科报名

shilipojs 3 năm trước cách đây
mục cha
commit
2577d55c5d

+ 1 - 1
doc/Mind/PrimaryElective.cs

@@ -124,7 +124,7 @@ namespace mxdemo.Mind
         // 学生获取自选专业及匹配情况
         List<ElectiveOptionalMajor> getOptionalMajors();
 
-        // 初选报名。这里简化原型里的操作,直接提交,如需排序,调sortElectiveSelected接口,并刷新getPrimaryElectives
+        // 初选报名。这里简化原型里的操作,直接提交,如需排序,调sortElectiveSelected接口,并刷新getPrimaryElectivesx
         void submitPrimaryElective(ElectiveSelectModel model);
 
         // 调整排序。这里简化原型里的操作,并刷新getPrimaryElectives

+ 96 - 0
mock/modules/elective-subject.js

@@ -0,0 +1,96 @@
+
+const Mock = require('mockjs')
+
+module.exports = [
+  {
+    url: '/mock/front/elective/optionalMajors',
+    type:'get',
+    response: config => {
+      return {
+        code: 200,
+        msg: 'success',
+        data:[
+          {
+            collegeId: 1,
+            collegeName: '百京带学',
+            majorCategoryName: '计算机技术',  // 专业类别
+            majorCategoryCode: '1',  // 专业编码
+            majors: [],          // 类别下分类
+            limitationA: '',
+            limitationB: '',
+            matchedGroupIds: [1,2,3,4,5,6], // 匹配哪几个组合?
+          },
+          {
+            collegeId: 2,
+            collegeName: '湖南带学',
+            majorCategoryName: '医学',  // 专业类别
+            majorCategoryCode: '2',  // 专业编码
+            majors: [],          // 类别下分类
+            limitationA: '',
+            limitationB: '',
+            matchedGroupIds: [1,2,3,4,5,6], // 匹配哪几个组合?
+          },
+          {
+            collegeId: 3,
+            collegeName: '中南带学',
+            majorCategoryName: '法学',  // 专业类别
+            majorCategoryCode: '1',  // 专业编码
+            majors: [],          // 类别下分类
+            limitationA: '',
+            limitationB: '',
+            matchedGroupIds: [1,2,3,4,5,6], // 匹配哪几个组合?
+          },
+          {
+            collegeId: 3,
+            collegeName: '中南带学',
+            majorCategoryName: '土木工程',  // 专业类别
+            majorCategoryCode: '1',  // 专业编码
+            majors: [],          // 类别下分类
+            limitationA: '',
+            limitationB: '',
+            matchedGroupIds: [1,2,3,4,5,6], // 匹配哪几个组合?
+          }
+        ]
+      }
+    }
+  },
+  {
+    url: '/mock/front/elective/primaryElectives',
+    type:'get',
+    response: config => {
+      return {
+        code: 200,
+        msg: 'success',
+        data:[
+          {
+            groupId: 1, // 组合
+            groupName: '物化生', // 名称
+            classCount: 5,  // 班级数
+            personCount: 200,  // 限制人数
+            personInTime: 100,  // 实时人数
+            rankInGroup: 53, // 选科实时排名
+            rankInGrade: 64, // 选科全校排名
+            allowSelect: true, // 是否可以报名
+            disabledReason: '不知道', // 不可报名时的原因
+            selected:  true, // 报名状态
+            selectedRank:  1, // 多志愿时的排序
+          },
+          {
+            groupId: 2, // 组合
+            groupName: '物化政', // 名称
+            classCount: 4,  // 班级数
+            personCount: 180,  // 限制人数
+            personInTime: 60,  // 实时人数
+            rankInGroup: 32, // 选科实时排名
+            rankInGrade: 67, // 选科全校排名
+            allowSelect: true, // 是否可以报名
+            disabledReason: '不知道', // 不可报名时的原因
+            selected:  false, // 报名状态
+            selectedRank:  2, // 多志愿时的排序
+          },
+        ]
+      }
+    }
+  },
+
+]

+ 23 - 0
src/api/webApi/elective/ selected-subject.js

@@ -0,0 +1,23 @@
+import request from '@/utils/request'
+// 选科报名接口
+
+// 学生获取自选专业及匹配情况
+export function getOptionalMajors(params) {
+  return request({
+    url: '/mock/front/elective/optionalMajors',
+    method: 'get',
+    params
+  })
+}
+
+// 学生获取选科状态数据,得到是每个组合最终状态和结果
+export function getPrimaryElectives(params) {
+  return request({
+    url: '/mock/front/elective/primaryElectives',
+    method: 'get',
+    params
+  })
+}
+
+
+

+ 98 - 0
src/views/system/user/profile/components/report-table.vue

@@ -0,0 +1,98 @@
+<template>
+  <el-card>
+    <template #header>
+      <div>
+        选科报名表
+      </div>
+    </template>
+    <mx-table :propDefines="propDefines" :rows="formatList">
+      <template #temp="{row}">
+        <span>选择</span>
+        <span>查看记录</span>
+      </template>
+      <template #signUp="{row}">
+        <span>{{row.selected ? '已报名' : '报名'}}</span>
+      </template>
+    </mx-table>
+  </el-card>
+</template>
+<script>
+
+export default {
+  data() {
+    return {
+      list:[],
+      optionalMajors: [],
+      propDefines: {
+        index: {
+          type: 'index',
+          label: '编号'
+        },
+        groupName: {
+          label: '选科组合'
+        },
+        classCount: {
+          label: '开设班级数'
+        },
+        personCount: {
+          label: '人数设置'
+        },
+        proportion: {
+          label: '选科人数比' // personInTime/personCount 实时人数/人数设置 = 选科人数比
+        },
+        rankInGroup: {
+          label: '当前组合实时排名'
+        },
+        rankInGrade: {
+          label: '选科全校排名'
+        },
+        allowSelect: {
+          label: '报名状态'
+        },
+        temp: {
+          label: '选择专业',
+          slot: 'temp'
+        },
+        subject: {
+          label: '已选专业'
+        },
+        college: {
+          label: '院校'
+        },
+        signUp: {
+          label: '操作',
+          slot: 'signUp'
+        }
+      }
+    }
+  },
+  computed: {
+    formatList() {
+      if (!this.list.length) return []
+      // 格式化
+      return this.list.map(item => {
+        item.proportion = item.personInTime+ '/'+ item.personCount
+        return item
+      })
+    }
+
+  },
+  methods: {
+    init(list) {
+      console.log(list)
+      this.list = list
+    },
+    initOption(optionalMajors) {
+      this.optionalMajors = optionalMajors
+    },
+    // async getOptionalMajors() {
+    //   const res = await getOptionalMajors()
+    //   this.optionalMajors = res.data
+    //   console.log(res)
+    // }
+  }
+}
+</script>
+<style scoped>
+
+</style>

+ 59 - 0
src/views/system/user/profile/components/select-subject.vue

@@ -0,0 +1,59 @@
+<template>
+  <el-row :gutter="20">
+    <el-col :span="12">
+      <el-card>
+        <template #header>
+          <div class="fx-row fx-bet-cen">
+            您的自选专业:
+            <el-button>整体匹配</el-button>
+          </div>
+
+        </template> <div>
+        <el-popover
+          placement="bottom"
+          trigger="hover"
+          v-for="item in optionalMajors"
+        >
+          <el-button type="primary">匹配组合</el-button>
+          <el-tag class="mr10 mb10" type="success" slot="reference">{{ item.majorCategoryName }}</el-tag>
+        </el-popover>
+      </div>
+      </el-card>
+    </el-col>
+    <el-col :span="12">
+      <el-card>
+        <template #header>
+          <div class="fx-row fx-bet-cen">
+            您的测评推荐专业:
+            <el-button>整体匹配</el-button>
+          </div>
+        </template>
+      </el-card>
+    </el-col>
+  </el-row>
+</template>
+<script>
+
+import { getOptionalMajors } from '@/api/webApi/elective/ selected-subject'
+
+export default {
+  data() {
+    return {
+      optionalMajors: []
+    }
+  },
+  created() {
+    this.getOptionalMajors()
+  },
+  methods: {
+    async getOptionalMajors() {
+      const res = await getOptionalMajors()
+      this.optionalMajors = res.data
+      console.log(res)
+    }
+  }
+}
+</script>
+<style scoped>
+
+</style>

+ 24 - 1
src/views/system/user/profile/round-select.vue

@@ -24,6 +24,10 @@
         </el-col>
       </el-row>
     </el-card>
+    <!--  自选专业 推荐专业  -->
+    <select-subject class="mt20"></select-subject>
+    <!--  选科报名表  -->
+    <report-table class="mt20"  ref="reportRef" :list="reportList"></report-table>
     <test-summary></test-summary>
     <el-card shadow="hover" class="mt20">
       <template #header>意向选科</template>
@@ -99,9 +103,12 @@ import consts from '@/common/mx-const'
 import TestEntry from '@/views/elective/test/components/test-entry'
 import TestResult from '@/views/elective/test/components/test-result'
 import TestSummary from '@/views/elective/test/components/test-summary'
+import SelectSubject from '@/views/system/user/profile/components/select-subject'
+import ReportTable from '@/views/system/user/profile/components/report-table'
+import { getOptionalMajors, getPrimaryElectives } from '@/api/webApi/elective/ selected-subject'
 
 export default {
-  components: { TestSummary, TestResult, TestEntry },
+  components: { SelectSubject, TestSummary, TestResult, TestEntry,ReportTable },
   mixins: [transferMixin],
   name: 'round-select',
   data() {
@@ -111,6 +118,8 @@ export default {
         src: '9fca0b997b8346ce8c3ce69feaf89294',
         aliIdType: 2
       },
+      reportList: [],
+      optionalMajors: [],
       form: {
         groupId: ''
       },
@@ -136,8 +145,22 @@ export default {
   },
   mounted() {
     this.loadStudentSelected()
+
+    this.getOptionalMajors()
+    this.getReportList()
   },
   methods: {
+    async getReportList() {
+      const res = await getPrimaryElectives()
+      this.reportList = res.data
+      this.$refs.reportRef.init(this.reportList)
+    },
+    async getOptionalMajors() {
+      const res = await getOptionalMajors()
+      this.optionalMajors = res.data
+      this.$refs.reportRef.initOption(this.optionalMajors)
+      console.log(res)
+    },
     loadStudentSelected() {
       getStudentSelected().then(res => {
         console.log('getStudentSelected', res)