Browse Source

选科 - 2级页 - 引入1级页面查询分类

hare8999@163.com 3 years ago
parent
commit
2b81f4b4ba

+ 24 - 24
mock/modules/elective-generation.js

@@ -1,7 +1,7 @@
 const Mock = require('mockjs')
 const Random = Mock['Random']
 
-const mockGeneration = 4 // primary
+const mockGeneration = 8 // primary
 const mockGroups = [1, 2, 3, 4, 5, 6]
 const mockPreferenceCount = 3 // 1 or 3 // 1志愿/3志愿
 
@@ -56,6 +56,7 @@ module.exports = [
               const groupDefines = [
                 {
                   category: 'actualCount',
+                  queryCode: Random.cname(),
                   displayName: '已报名',
                   values: mockGroups.map(groupId => ({
                     groupId: groupId,
@@ -63,7 +64,6 @@ module.exports = [
                     color: 'B',
                     bold: false,
                     star: false,
-                    queryCode: 'abc',
                     disabled: false
                   }))
                 }
@@ -71,6 +71,7 @@ module.exports = [
               const nonGroupDefines = [
                 {
                   category: 'unfinishedCount',
+                  queryCode: Random.cname(),
                   displayName: '未报名',
                   values: [{
                     groupId: 0,
@@ -78,7 +79,6 @@ module.exports = [
                     color: '',
                     bold: false,
                     star: false,
-                    queryCode: 'abc',
                     disabled: false
                   }]
                 }
@@ -100,6 +100,7 @@ module.exports = [
               factory: () => [
                 {
                   category: 'approvedCount',
+                  queryCode: Random.cname(),
                   displayName: '正常录取',
                   values: mockGroups.map(groupId => ({
                     groupId: groupId,
@@ -107,12 +108,12 @@ module.exports = [
                     color: '',
                     bold: false,
                     star: false,
-                    queryCode: 'abc',
                     disabled: false
                   }))
                 },
                 {
                   category: 'forcedCount',
+                  queryCode: Random.cname(),
                   displayName: '调剂录取',
                   values: mockGroups.map(groupId => ({
                     groupId: groupId,
@@ -120,7 +121,6 @@ module.exports = [
                     color: '',
                     bold: false,
                     star: false,
-                    queryCode: 'abc',
                     disabled: false
                   }))
                 }
@@ -145,6 +145,7 @@ module.exports = [
                   },
                   {
                     category: 'approvedCount',
+                    queryCode: Random.cname(),
                     displayName: '录取人数',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -152,12 +153,12 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   },
                   {
                     category: 'adjustCount',
+                    queryCode: Random.cname(),
                     displayName: '调剂人数',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -165,12 +166,12 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   },
                   {
                     category: 'matchedCount',
+                    queryCode: Random.cname(),
                     displayName: '专业符合',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -178,12 +179,12 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   },
                   {
                     category: 'nonmatchedCount',
+                    queryCode: Random.cname(),
                     displayName: '专业不符',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -191,7 +192,6 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   }
@@ -202,6 +202,7 @@ module.exports = [
                 factory: () => [
                   {
                     category: 'matchedApproved',
+                    queryCode: Random.cname(),
                     displayName: '专业符合同意',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -209,12 +210,12 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   },
                   {
                     category: 'matchedNotOptional',
+                    queryCode: Random.cname(),
                     displayName: '专业符合改选',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -222,12 +223,12 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   },
                   {
                     category: 'matchedRejected',
+                    queryCode: Random.cname(),
                     displayName: '专业符合拒绝',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -235,12 +236,12 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   },
                   {
                     category: 'matchedNonaction',
+                    queryCode: Random.cname(),
                     displayName: '专业符合未填',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -248,12 +249,12 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   },
                   {
                     category: 'matchedRankout',
+                    queryCode: Random.cname(),
                     displayName: '专业符合被挤出',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -261,12 +262,12 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   },
                   {
                     category: 'nonmatchedApproved',
+                    queryCode: Random.cname(),
                     displayName: '专业符合已填',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -274,12 +275,12 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   },
                   {
                     category: 'nonmatchedRejected',
+                    queryCode: Random.cname(),
                     displayName: '不可调剂拒绝',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -287,12 +288,12 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   },
                   {
                     category: 'nonmatchedNonaction',
+                    queryCode: Random.cname(),
                     displayName: '不可调剂未填',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -300,7 +301,6 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   }
@@ -311,6 +311,7 @@ module.exports = [
                 factory: () => [
                   {
                     category: 'approvedCount',
+                    queryCode: Random.cname(),
                     displayName: '补录录取',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -318,12 +319,12 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   },
                   {
                     category: 'forcedCount',
+                    queryCode: Random.cname(),
                     displayName: '调剂录取',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -331,12 +332,12 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   },
                   {
                     category: 'matchedCount',
+                    queryCode: Random.cname(),
                     displayName: '可调剂人数',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -344,12 +345,12 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   },
                   {
                     category: 'nonmatchedCount',
+                    queryCode: Random.cname(),
                     displayName: '不可调剂人数',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -357,7 +358,6 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   }
@@ -368,6 +368,7 @@ module.exports = [
                 factory: () => [
                   {
                     category: 'approvedCount',
+                    queryCode: Random.cname(),
                     displayName: '补录录取',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -375,12 +376,12 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   },
                   {
                     category: 'forcedCount',
+                    queryCode: Random.cname(),
                     displayName: '调剂录取',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -388,7 +389,6 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   }
@@ -399,6 +399,7 @@ module.exports = [
                 factory: () => [
                   {
                     category: 'forcedCount',
+                    queryCode: Random.cname(),
                     displayName: '调剂录取',
                     values: mockGroups.map(groupId => ({
                       groupId: groupId,
@@ -406,7 +407,6 @@ module.exports = [
                       color: '',
                       bold: false,
                       star: false,
-                      queryCode: 'abc',
                       disabled: false
                     }))
                   }

+ 14 - 0
src/components/MxCondition/condition-object/condition-generation-category.js

@@ -0,0 +1,14 @@
+import conditionBase from '../condition-object-base'
+
+export default {
+  ...conditionBase,
+  key: 'generationQueryCode',
+  title: '类别',
+  getList: function(param, $vue) {
+    if ($vue.localData.categories?.length) {
+      return Promise.resolve($vue.localData.categories)
+    } else {
+      return Promise.resolve([])
+    }
+  }
+}

+ 17 - 0
src/components/MxCondition/condition-object/condition-generation-group.js

@@ -0,0 +1,17 @@
+import localGroup from './condition-local-group'
+
+export default {
+  ...localGroup,
+  key: 'generationGroupId',
+  dependentKeys: ['generationQueryCode'],
+  disableAllByForce: true,
+  isDependencyReady(params) {
+    return true
+  },
+  getList: function(params, $vue) {
+    if ($vue.localData.ignoreGroupCategories.includes(params.generationQueryCode)) {
+      return Promise.resolve([])
+    }
+    return this._getList(params, $vue)
+  }
+}

+ 4 - 2
src/components/MxCondition/condition-object/condition-local-group.js

@@ -1,11 +1,13 @@
 import conditionBase from '../condition-object-base'
-import * as back from '@/api/webApi/back'
 
 export default {
   ...conditionBase,
   key: 'localGroupId',
   title: '组合',
   getList: function(param, $vue) {
+    return this._getList(param, $vue)
+  },
+  _getList: function(param, $vue) {
     if ($vue.localData.groups?.length) {
       return Promise.resolve($vue.localData.groups)
     } else {
@@ -17,5 +19,5 @@ export default {
   },
   getLabel(item) {
     return item.groupName
-  },
+  }
 }

+ 32 - 13
src/views/elective/generation/components/elective-generation-table.vue

@@ -32,8 +32,15 @@ export default {
       const mergedColumns = []
       this.chartBinding.tableData.forEach(item => {
         if (this.chartBinding.generation.hiddenGenerations.includes(item.generation)) return
-        const ext = { roundId: item.roundId, generation: item.generation }
         const isPreference = item.categories.every(item => Array.isArray(item))
+        const generationQueryableCategories = []
+        const generationQueryableIgnoreGroupCategories = []
+        const ext = {
+          roundId: item.roundId,
+          generation: item.generation,
+          queryableCategories: generationQueryableCategories, // 本代支持查询的列
+          ignoreGroupCategories: generationQueryableIgnoreGroupCategories // 本代支持查询,且与组合无关的列
+        }
 
         const subColumns = {}
         const mergedHeaderKey = 'generation_' + item.generation
@@ -41,13 +48,15 @@ export default {
         const mergedHeaderOpt = options.find(opt => opt.value == item.generation)
         const mergedHeaderDefine = { label: mergedHeaderOpt.title, children: subColumns }
         if (isPreference) {
+          const cnIndexer = ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十']
           item.categories.forEach((subItem, idx) => {
+            const cnIndex = idx < cnIndexer.length ? cnIndexer[idx] : (idx + 1)
             const innerHeaderKey = mergedHeaderKey + '_' + idx
             const innerHeaderDefine = item.categories.length > 1
-              ? { label: `第${idx + 1}志愿`, children: {} }
+              ? { label: `${cnIndex}志愿`, children: {} }
               : mergedHeaderDefine
-            const prefix = item.categories.length > 1 ? `第${idx + 1}志愿` : ''
-            subItem.forEach(data => this.resolveTableGeneration(ext, data, innerHeaderDefine.children, rows, mergedColumns, innerHeaderKey))
+            const overrideQueryName = item.categories.length > 1 ? innerHeaderDefine.label : ''
+            subItem.forEach(data => this.resolveTableGeneration(ext, data, innerHeaderDefine.children, rows, mergedColumns, innerHeaderKey, false, overrideQueryName))
             columns[innerHeaderKey] = innerHeaderDefine
           })
         } else {
@@ -61,7 +70,9 @@ export default {
         const prefix = 'accumulate_'
         const ext = {
           roundId: this.chartBinding.generation.status.roundId,
-          generation: -1 // for detail page special display
+          generation: -1, // for detail page special display,
+          queryableCategories: [], // 本代支持查询的列
+          ignoreGroupCategories: [] // 本代支持查询,且与组合无关的列
         }
         this.chartBinding.chartData.accumulates.forEach(acc => this.resolveTableGeneration(ext, acc, columns, rows, mergedColumns, prefix, true))
       }
@@ -83,19 +94,24 @@ export default {
     }
   },
   methods: {
-    resolveTableGeneration(ext, data, columnsRef, rowsRef, mergedColumnsRef, prefix = '', fixed = false) {
+    resolveTableGeneration(ext, data, columnsRef, rowsRef, mergedColumnsRef, prefix = '', fixed = false, overrideQueryName = '') {
       // resolve core
       const prop = prefix + ext.generation + '_' + data.category
       const name = data.displayName
-      const shouldMerge = data.values.length != rowsRef.length
-        || data.values.some(v => v.groupId == 0)
+      const shouldMerge = data.values.length != rowsRef.length || data.values.some(v => v.groupId == 0)
+      if (data.queryCode) {
+        let nextName = data.displayName
+        if (overrideQueryName) nextName = overrideQueryName + '/' + nextName
+        ext.queryableCategories.push({ id: data.queryCode, name: nextName })
+        if (shouldMerge) ext.ignoreGroupCategories.push(data.queryCode)
+      }
 
       columnsRef[prop] = { label: name, slot: 'elective-cell', fixed: fixed }
       if (!shouldMerge) {
         data.values.forEach(val => {
           const row = rowsRef.find(row => row.groupId == val.groupId)
           if (row) {
-            row[prop] = { ...ext, ...val }
+            row[prop] = { ...ext, ...val, queryCode: data.queryCode }
           }
         })
       } else {
@@ -105,7 +121,7 @@ export default {
         // keep value in display row
         const val = data.values.first()
         const row = rowsRef.first()
-        row[prop] = { ...ext, ...val }
+        row[prop] = { ...ext, ...val, queryCode: data.queryCode }
       }
     },
     mergeTable({ row, column, rowIndex }) {
@@ -128,15 +144,18 @@ export default {
       }
       return styles
     },
-    goDetails(option, label) {
+    goDetails(option) {
       const path = '/elective/generation/detail'
       const nextData = {
         year: this.chartBinding.generation.status.year,
         roundId: this.chartBinding.generation.status.roundId,
         roundName: this.chartBinding.generation.status.roundName,
-        queryLabel: label,
         queryGeneration: option.generation,
-        queryCode: option.queryCode
+        queryGroupId: option.groupId,
+        queryCode: option.queryCode,
+        queryableCategories: option.queryableCategories,
+        ignoreGroupCategories: option.ignoreGroupCategories,
+        groups: this.chartBinding.generation.roundGroups.map(rg => ({ groupId: rg.groupId, groupName: rg.groupName }))
       }
       this.transferTo(path, nextData)
     }

+ 35 - 5
src/views/elective/generation/detail.vue

@@ -1,7 +1,10 @@
 <template>
   <div class="app-container">
     <evaluation-title :title="title" :sub-title="subTitle" nav-back-button></evaluation-title>
-    查询列表-未实现
+    <el-card>
+      <mx-condition :query-params="queryParams" :require-fields="requireFields" :local-data="localData"
+                    @query="handleQuery"></mx-condition>
+    </el-card>
   </div>
 </template>
 
@@ -9,8 +12,10 @@
 import config from '@/common/mx-config'
 import transferMixin from '@/components/mx-transfer-mixin'
 import { mapGetters } from 'vuex'
+import MxCondition from '@/components/MxCondition/mx-condition'
 
 export default {
+  components: { MxCondition },
   mixins: [transferMixin],
   name: 'generation-detail',
   computed: {
@@ -20,12 +25,37 @@ export default {
       const s = this.school.schoolName
       const n = this.prevData.roundName
       return y + s + n
-    }, subTitle() {
+    },
+    subTitle() {
       const g = Object.values(config.electiveGenerationOptions).find(opt => opt.value == this.prevData.queryGeneration)
       const hideGeneration = g == config.electiveGenerationOptions.init || g == config.electiveGenerationOptions.terminate
-      let gName = hideGeneration ? '' : g?.title || ''
-      gName = gName && gName + '/'
-      return gName + this.prevData.queryLabel
+      return hideGeneration ? '' : g?.title || ''
+    },
+    localData() {
+      console.log('exec localData')
+      this.queryParams.generation = this.prevData.queryGeneration
+      this.queryParams.generationQueryCode = this.prevData.queryCode
+      this.queryParams.generationGroupId = this.prevData.queryGroupId
+      return {
+        ignoreGroupCategories: this.prevData.ignoreGroupCategories,
+        categories: this.prevData.queryableCategories,
+        groups: this.prevData.groups
+      }
+    }
+  },
+  data() {
+    return {
+      requireFields: ['generationQueryCode'],
+      queryParams: {
+        generation: '',
+        generationQueryCode: '',
+        generationGroupId: ''
+      }
+    }
+  },
+  methods: {
+    handleQuery() {
+      console.log('handle query', this.queryParams)
     }
   }
 }