Parcourir la source

ai分析表格

shilipojs il y a 2 ans
Parent
commit
6b42889485

+ 5 - 131
src/views/system/user/profile/components/ai-analysis-dialog.vue

@@ -7,161 +7,35 @@
     width="80%"
   >
     <p class="mb10"><el-button type="primary" @click="toReport('all')">整体报告</el-button></p>
-
-    <mx-table :propDefines="propDefines" :rows="formatRows">
-      <template #underOver="{value}">
-        <over-under-badge :value="value"></over-under-badge>
-      </template>
-      <template #subjects="{row}">
-        <el-row>
-          <el-col :span="8" v-for="subject in row.subjects">
-            <el-popover
-              placement="top"
-              popper-class="zero-padding-popover"
-              trigger="hover"
-            >
-              <div class="fx-column">
-                <el-button plain type="text">{{ subject }}</el-button>
-              </div>
-              <el-tag type="success" slot="reference" class="mr10 mb10">{{ subject[0] }}</el-tag>
-            </el-popover>
-          </el-col>
-        </el-row>
-      </template>
-      <template #group="{row}">
-        <el-badge value="荐" :hidden="!row.isRecommend" type="success">
-          <el-tag size="medium" :type="row.allowSelect ? 'warning' : 'danger'" >{{row.groupName}}</el-tag>
-        </el-badge>
-      </template>
-      <template #colleges="{row}">
-        <el-row>
-          <el-col :span="12" v-for="college in row.colleges">
-            <el-popover
-              placement="top"
-              popper-class="zero-padding-popover"
-              trigger="hover"
-            >
-              <div class="fx-column">
-                <el-button plain type="text">{{ college.major }}</el-button>
-              </div>
-              <el-tag type="success" slot="reference" class="mr10 mb10">{{ college.major[0] }}</el-tag>
-            </el-popover>
-            :
-            <span>{{ college.college }}</span>
-          </el-col>
-        </el-row>
-      </template>
-      <template #report="{row}">
-        <el-button @click="toReport('single',row)" >查看</el-button>
-      </template>
-    </mx-table>
+    <ai-table :generation="generation" :optionalMajors="optionalMajors"></ai-table>
     <span slot="footer" class="dialog-footer">
         <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
     </span>
-    <single-subject-report :admissionInfo="prevPreferencesInfo"  :reportInfo="formatRows"  ref="SingleSubjectReport"></single-subject-report>
+<!--    <single-subject-report :admissionInfo="prevPreferencesInfo"  :reportInfo="formatRows"  ref="SingleSubjectReport"></single-subject-report>-->
   </el-dialog>
 </template>
 <script>
 import SingleSubjectReport from './single-subject-report'
-import OverUnderBadge from '@/views/elective/publish/components/steps/fauclty/over-under-badge'
+import AiTable from './ai-table'
 
-const resolverModules = require.context('./ai-round-select-resolvers', false, /\.js$/)
-const resolvers = resolverModules.keys().map(key => resolverModules(key).default)
 
 export default {
   components:{
-    SingleSubjectReport,
-    OverUnderBadge
+    AiTable
   },
   props: {
     generation: Object,
     prevPreferencesInfo: String,
+    optionalMajors: { type: Array, default: () => [] }
   },
-  mixins: [...resolvers],
   data() {
     return{
       dialogVisible:false,
-      formatRows: [],
-      tableInfo: {},
-      currentReportName: '',
-    }
-  },
-  computed: {
-    resolveTablePrefix() {
-      return {
-        groupName: {
-          label: '选科组合',
-          width:'120px',
-          slot: 'group'
-        },
-        scoreSumGroup: {
-          label: '组合成绩'
-        },
-      }
-    },
-    resolveTableSuffix() {
-      return{
-        subjects: {
-          label: '自选专业',
-          slot: 'subjects',
-          width: '150'
-        },
-        colleges: {
-          label: '院校',
-          slot: 'colleges',
-          width: '250'
-        },
-        signUp: {
-          label: '报告',
-          slot: 'report',
-          width: '100',
-          fixed: 'right',
-        }
-      }
-    },
-    formatTable() {
-      if (!this.formatRows) return {}
-      const options = this.generation.options
-      console.log(this.generation)
-      if (!options || !this.generation.active) return {}
-      // const optValues = Object.values(options)
-      const dynamicColumns = {}
-      const resolverKey = this.generation.activeOpt.key + 'Resolver'
-      const resolver = this[resolverKey]
-      if (typeof resolver === 'function') {
-         const genColumns = resolver(this.generation.active)
-         Object.assign(dynamicColumns, genColumns)
-      }
-      // for (let gen = options.primary.value; gen <= this.generation.active; gen++) {
-      //   const opt = optValues.find(opt => opt.value == gen)
-      //   const resolverKey = opt.key + 'Resolver'
-      //   const resolver = this[resolverKey]
-      //   if (typeof resolver === 'function') {
-      //     const genColumns = resolver(gen, this.generation.active)
-      //     Object.assign(dynamicColumns, genColumns)
-      //   }
-      // }
-      console.log(dynamicColumns)
-      return dynamicColumns
-    },
-    propDefines() {
-      return {
-        ...this.resolveTablePrefix,
-        ...this.formatTable,
-        ...this.resolveTableSuffix,
-      }
     }
   },
   methods: {
-    toReport(type,row) {
-      this.$refs.SingleSubjectReport.init(type,row)
-    },
     open(rows) {
       this.dialogVisible = true
-      this.formatRows = rows
-    },
-    handleClose() {
-
     }
   }
 }

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

@@ -3,7 +3,7 @@ export default {
     backTrackingResolver(gen, active) {
       const models = this.generation.activeModels.find(item => item.generation == gen)?.models || []
       console.log('back',models)
-      this.formatRows.forEach(item => {
+      this.rows.forEach(item => {
         const currentGroup = models.find(group => group.groupId == item.groupId) || {}
         const disenrollAll = Math.abs(models.sum(m => m.groupIndicator))
         item.groupIndicator = currentGroup.groupIndicator

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

@@ -3,7 +3,7 @@ export default {
     finalAdjustResolver(gen, active) {
       const models = this.generation.activeModels.find(item => item.generation == gen).models
       console.log('final',models)
-      this.formatRows.forEach(item => {
+      this.rows.forEach(item => {
         const currentGroup = models.find(group => group.groupId == item.groupId) || {}
         const disenrollAll = Math.abs(models.sum(m => m.groupIndicator))
         item.groupIndicator = currentGroup.groupIndicator

+ 152 - 0
src/views/system/user/profile/components/ai-table.vue

@@ -0,0 +1,152 @@
+<template>
+    <mx-table :propDefines="propDefines" :rows="rows">
+      <template #underOver="{value}">
+        <over-under-badge :value="value"></over-under-badge>
+      </template>
+      <template #subjects="{row}">
+        <el-row>
+          <el-col :span="8" v-for="subject in row.subjects">
+            <el-popover
+              placement="top"
+              popper-class="zero-padding-popover"
+              trigger="hover"
+            >
+              <div class="fx-column">
+                <el-button plain type="text">{{ subject }}</el-button>
+              </div>
+              <el-tag type="success" slot="reference" class="mr10 mb10">{{ subject[0] }}</el-tag>
+            </el-popover>
+          </el-col>
+        </el-row>
+      </template>
+      <template #group="{row}">
+        <el-badge value="荐" :hidden="!row.isRecommend" type="success">
+          <el-tag size="medium" :type="row.allowSelect ? 'warning' : 'danger'" >{{row.groupName}}</el-tag>
+        </el-badge>
+      </template>
+      <template #colleges="{row}">
+        <el-row>
+          <el-col :span="12" v-for="college in row.colleges">
+            <el-popover
+              placement="top"
+              popper-class="zero-padding-popover"
+              trigger="hover"
+            >
+              <div class="fx-column">
+                <el-button plain type="text">{{ college.major }}</el-button>
+              </div>
+              <el-tag type="success" slot="reference" class="mr10 mb10">{{ college.major[0] }}</el-tag>
+            </el-popover>
+            :
+            <span>{{ college.college }}</span>
+          </el-col>
+        </el-row>
+      </template>
+      <template #report="{row}">
+        <el-button @click="toReport('single',row)" >查看</el-button>
+      </template>
+    </mx-table>
+</template>
+<script>
+import OverUnderBadge from '@/views/elective/publish/components/steps/fauclty/over-under-badge'
+
+const resolverModules = require.context('./ai-round-select-resolvers', false, /\.js$/)
+const resolvers = resolverModules.keys().map(key => resolverModules(key).default)
+
+export default {
+  components:{
+    OverUnderBadge
+  },
+  props: {
+    generation: Object,
+    readonly: Boolean,
+    optionalMajors: { type: Array, default: () => [] }
+  },
+  mixins: [...resolvers],
+  data() {
+    return{
+      rows: [],
+    }
+  },
+  created() {
+    const optionalMajors = this.optionalMajorsoptionalMajors
+    // 初始化rows 当前activeModels
+    this.rows = this.generation.activeModel.models.map(row => {
+      row.colleges = optionalMajors.map(m => ({ college: m.collegeName, major: m.majorCategoryName }))
+      row.subjects = optionalMajors.map(m => m['majorCategoryName'])
+      return row
+    })
+
+
+  },
+  computed: {
+    resolveTablePrefix() {
+      return {
+        groupName: {
+          label: '选科组合',
+          width:'120px',
+          slot: 'group'
+        },
+        scoreSumGroup: {
+          label: '组合成绩'
+        },
+      }
+    },
+    resolveTableSuffix() {
+      return{
+        subjects: {
+          label: '自选专业',
+          slot: 'subjects',
+          width: '150'
+        },
+        colleges: {
+          label: '院校',
+          slot: 'colleges',
+          width: '250'
+        },
+        signUp: {
+          label: '报告',
+          slot: 'report',
+          width: '100',
+          fixed: 'right',
+          hidden: this.readonly
+        }
+      }
+    },
+    formatTable() {
+      // if (!this.formatRows) return {}
+      const options = this.generation.options
+      console.log(this.generation)
+      if (!options || !this.generation.active) return {}
+      // const optValues = Object.values(options)
+      const dynamicColumns = {}
+      const resolverKey = this.generation.activeOpt.key + 'Resolver'
+      const resolver = this[resolverKey]
+      if (typeof resolver === 'function') {
+        const genColumns = resolver(this.generation.active)
+        Object.assign(dynamicColumns, genColumns)
+      }
+      console.log(dynamicColumns)
+      return dynamicColumns
+    },
+    propDefines() {
+      return {
+        ...this.resolveTablePrefix,
+        ...this.formatTable,
+        ...this.resolveTableSuffix,
+      }
+    }
+  },
+  methods: {
+    toReport(type,row) {
+      this.$refs.SingleSubjectReport.init(type,row)
+    },
+  }
+}
+</script>
+<style scoped>
+/deep/ .el-badge__content.is-fixed {
+  top: 8px;
+  right: 8px;
+}
+</style>

+ 1 - 4
src/views/system/user/profile/components/report-table.vue

@@ -131,7 +131,7 @@
     <esign-dialog ref="esignDialog"></esign-dialog>
     <choose-subject-dialog ref="chooseDialog"></choose-subject-dialog>
     <select-subject-report-dialog ref="reportDialog"></select-subject-report-dialog>
-    <Ai-dialog ref="aiDialog" :prevPreferencesInfo="currentSupplyInfo" :generation="generation"></Ai-dialog>
+    <Ai-dialog ref="aiDialog" :optionalMajors="optionalMajors" :prevPreferencesInfo="currentSupplyInfo" :generation="generation"></Ai-dialog>
   </div>
 </template>
 <script>
@@ -209,7 +209,6 @@ export default {
       if (this.generation.active < this.generation.options.primaryDM.value) return ''
       let info = ''
       const activeModels = this.generation.models.find(item => item.generation == this.generation.active)
-      console.log(activeModels)
       // 当前代是否被录取?
       const approved = activeModels.models.filter(item => {
         return item.approved
@@ -222,9 +221,7 @@ export default {
           })
           if(flag) return model
         })
-        console.log(model)
         const admissionAgent = Object.values(this.generation.options).find(item => item.value == model[0].generation - 1)
-        console.log(Object.values(this.generation.options))
         // 已被录取
         info = `你在${admissionAgent.title}所选择的${approved[0].groupName}已被录取`
       } else {