123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- <template>
- <div class="app-container">
- <slot name="select">
- <el-card shadow="hover">
- <template #header v-if="majorTree.length">
- <div class="fx-row fx-bet-cen">
- <span class="f-999 f12">
- 请从推荐专业门类中选择{{ reportConfig.selectMajorLimit }}个你喜欢的专业类
- </span>
- <el-button v-if="!readonly" type="primary" size="small" plain @click="majorPickerDisabled=false">
- {{ selectMajorText }}
- </el-button>
- </div>
- </template>
- <test-major-picker :major-tree="majorTree" :selected-codes="selectedCodes"
- :select-limit="reportConfig.selectMajorLimit" :disabled="disabled"
- @submit="handleMajorSubmit" @cancel="majorPickerDisabled=true"></test-major-picker>
- </el-card>
- </slot>
- <slot name="table">
- <el-card shadow="hover" class="mt20">
- <template #header>{{ reportConfig.category }}类型计分表</template>
- <el-row>
- <el-col :span="8">
- <mx-table-dynamic :local-data="dynamicTableData"></mx-table-dynamic>
- </el-col>
- <el-col :span="16">
- <mx-chart v-if="dynamicTableData.rows.length" :options="chartOptions" class="fx-1"
- :height="chartHeight"></mx-chart>
- </el-col>
- </el-row>
- </el-card>
- </slot>
- <slot>
- <el-card shadow="hover" class="mt20" v-if="reportConfig.resolveConfig">
- <template #header>
- {{ reportConfig.category }}解读
- <div class="f-999 f12">
- {{ reportConfig.categoryDescription }}
- </div>
- </template>
- <el-collapse v-model="defaultActives">
- <el-collapse-item v-for="(item,idx) in sortedMergedData" :key="idx" :name="item.key">
- <template #title>
- <span class="f16 bold">{{ reportConfig.resolveConfig[item.key].title }}</span>
- <span class="f16 bold" :class="{'f-red': topOfMergedData.includes(item)}">{{
- reportConfig.resolveConfig[item.key].code
- }}</span>
- </template>
- <div class="fx-column">
- <div>
- <span class="f14 bold i">类型解读:</span>
- <span>{{ reportConfig.resolveConfig[item.key].description }}</span></div>
- <div v-if="reportConfig.resolveConfig[item.key].matchedMajor.length">
- <span class="f14 bold i">推荐专业门类:</span>
- <span class="light" :class="{'f-red': topOfMergedData.includes(item)}">
- {{ reportConfig.resolveConfig[item.key].matchedMajor.join('、') }}
- </span>
- </div>
- </div>
- </el-collapse-item>
- </el-collapse>
- </el-card>
- </slot>
- </div>
- </template>
- <script>
- import MxTableDynamic from '@/components/MxTableDynamic/index'
- import MxChart from '@/components/MxChart/index'
- import ReportMixin from './test-report-mixin'
- import consts from '@/common/mx-const'
- import { getMatchCategoryTree, saveUserSelectedCategory } from '@/api/webApi/test-major'
- import TestMajorPicker from '@/views/elective/test/components/test-major-picker'
- export default {
- mixins: [ReportMixin],
- name: 'test-report',
- components: { TestMajorPicker, MxTableDynamic, MxChart },
- props: {
- readonly: {
- type: Boolean,
- default: false
- }
- },
- data() {
- return {
- majorTree: [],
- majorPickerDisabled: false
- }
- },
- computed: {
- selectMajorText() {
- return this.selectedCodes.length ? '更换专业类' : '选择专业类'
- },
- testType() {
- return consts.enum.selectTestType[this.category] || ''
- },
- selectedCodes() {
- return this.source?.selectedList?.map(s => s.majorCategoryCode) || []
- },
- disabled() {
- return this.majorPickerDisabled || this.readonly
- }
- },
- watch: {
- source: {
- immediate: true,
- handler: function(val) {
- this.majorPickerDisabled = !!val?.selectedList?.length
- }
- }
- },
- mounted() {
- this.loadMajorCategoryTree()
- },
- methods: {
- loadMajorCategoryTree() {
- if (!this.source.matchedCode) {
- console.log('Prevent `getMatchCategoryTree` request caused by no-matchedCode', this.source)
- return
- }
- getMatchCategoryTree({
- matchCode: this.source.matchedCode,
- testType: this.testType
- }).then(res => {
- this.majorTree = res.data
- })
- },
- handleMajorSubmit(commit) {
- saveUserSelectedCategory({
- majorCategoryCode: commit.toString(),
- examineeId: this.source.examineeId || '',
- testType: this.testType
- }).then(() => {
- this.msgSuccess('保存成功')
- this.majorPickerDisabled = true
- }).finally(() => {
- // 无论成功与否都外抛事件进行刷新
- this.$emit('changed')
- })
- }
- }
- }
- </script>
- <style scoped>
- </style>
|