123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- <template>
- <z-paging ref="paging" v-model="list" :auto="false" :default-page-size="20"
- @on-refresh="handleRefresh" @query="handleQuery">
- <template #top>
- <mx-nav-bar title="一分一段"/>
- <uv-gap height="15"/>
- <uv-form ref="form" :model="queryParams" :rules="rules" error-type="toast">
- <view class="px-30 bg-white fx-row items-center gap-30">
- <uv-tags icon="lock" shape="circle" plain plain-fill :text="currentUser.examMajorName"/>
- <mx-condition/>
- </view>
- </uv-form>
- </template>
- <view class="px-30 py-10 bg-white">
- <uv-search v-model="score" placeholder="输入分数查等效分" @search="handleScoreSearch(false)"
- @custom="handleScoreSearch(false)"/>
- <view class="mt-30 grid grid-cols-7 items-center">
- <view class="col-span-2 fx-col fx-cen-cen gap-10">
- <text class="text-2xs text-tips">分数</text>
- <text class="text-sm text-main font-bold">{{ match.score || '-' }}</text>
- </view>
- <view class="col-span-2 fx-col fx-cen-cen gap-10">
- <text class="text-2xs text-tips">同分人数</text>
- <text class="text-sm text-main font-bold">{{ match.num || '-' }}</text>
- </view>
- <view class="col-span-3 fx-col fx-cen-cen gap-10">
- <text class="text-2xs text-tips">位次区间</text>
- <text class="text-sm text-main font-bold">{{ match.highestRank + '~' + match.lowestRank }}</text>
- </view>
- </view>
- </view>
- <template v-if="eqList.length">
- <view class="px-30 bg-white py-10 text-main font-bold">历年等效分</view>
- <segment-score-table :cols="eqTable.cols" :rows="eqTable.rows" class="p-30 bg-white"/>
- <view class="px-30 bg-white">
- <uv-text prefix-icon="error-circle" type="info" size="12"
- :icon-style="{color: 'var(--error-color)', marginRight: '3px', fontSize: '14px'}"
- text="因高考人数及招生计划每年都存在一定的增减,分数和位次也会有相应浮动,我们根据历年省控线变化幅度等比计算出历年等效位次和等效分。"/>
- </view>
- </template>
- <view class="py-20 bg-white">
- <uv-gap height="15" class="!bg-bg"/>
- </view>
- <uv-sticky :custom-nav-height="-1">
- <view class="bg-white px-30 py-10 text-main font-bold">一分一段表</view>
- </uv-sticky>
- <segment-score-table :cols="segCols" :rows="list" class="p-30 bg-white"/>
- </z-paging>
- </template>
- <script setup>
- import {ref, watch, computed} from 'vue'
- import {useUserStore} from "@/hooks/useUserStore";
- import {useProvideSearchModel} from "@/components/mx-condition/useSearchModelInjection";
- import {useConditionSegmentLocation} from "@/components/mx-condition/modules/useConditionSegmentLocation";
- import {useConditionSegmentYear} from "@/components/mx-condition/modules/useConditionSegmentYear";
- import {useConditionSegmentMode} from "@/components/mx-condition/modules/useConditionSegmentMode";
- import {useProvideVoluntaryData} from "@/hooks/useVoluntaryDataInjection";
- import {useCacheStore} from "@/hooks/useCacheStore";
- import {cacheActions} from "@/hooks/defineCacheActions";
- import SegmentScoreTable from "@/pages/career/query-segment/components/segment-score-table.vue";
- const paging = ref(null)
- const form = ref(null)
- const list = ref([])
- const eqList = ref([])
- const {currentUser, isCultural} = useUserStore()
- const {provinceName: location, examMajor: mode} = currentUser.value
- const queryParams = ref({location, year: '', mode})
- const score = ref(currentUser.value.score)
- const defaultMatch = {
- highestRank: '',
- lowestRank: '',
- num: 0,
- numTotal: 0,
- score: 0
- }
- const match = ref(defaultMatch)
- const segCols = [
- {label: '分数', prop: 'score'},
- {label: '位次区间', prop: 'rank'},
- {label: '同分人数', prop: 'num'},
- ]
- const eqTable = computed(() => {
- const cols = [], rows = []
- if (!eqList.value.length) return {cols, rows}
- cols.push({label: '类型/年份', prop: 'type'})
- const eqSeat = {type: '等效位'}
- const eqScore = {type: '等效分'}
- eqList.value.forEach(r => {
- cols.push({label: r.year, prop: r.year})
- eqSeat[r.year] = r.seat || '-'
- eqScore[r.year] = r.score || '-'
- })
- rows.push(eqSeat)
- rows.push(eqScore)
- return {cols, rows}
- })
- const {dispatchCache, removeCache} = useCacheStore()
- const {onSearch, rules} = useProvideSearchModel([
- // useConditionSegmentLocation(),
- // useConditionSegmentYear(),
- // useConditionSegmentMode()
- // 目前只需要响应年份
- useConditionSegmentYear()
- ], queryParams, form)
- const {voluntaryData, validate: validateScore} = useProvideVoluntaryData(() => queryParams.value.year)
- onSearch(() => {
- handleScoreSearch()
- paging.value.reload()
- })
- watch(voluntaryData, () => handleScoreSearch())
- const handleRefresh = () => {
- removeCache(cacheActions.getSectionList)
- removeCache(cacheActions.getEquivalentScore)
- handleScoreSearch()
- }
- const handleQuery = (pageNum, pageSize) => {
- const payload = {...queryParams.value, pageNum, pageSize}
- dispatchCache(cacheActions.getSectionList, payload)
- .then(res => {
- res.rows.forEach(r => r.rank = r.highestRank + '~' + r.lowestRank)
- paging.value.completeByTotal(res.rows, res.total)
- })
- .catch(e => paging.value.complete(false))
- }
- const handleScoreSearch = async (silence = true) => {
- await validateScore(score.value, silence)
- const payload = {...queryParams.value, score: score.value}
- const res = await dispatchCache(cacheActions.getEquivalentScore, payload)
- match.value = res.match || defaultMatch
- eqList.value = res.scores || []
- }
- </script>
- <style lang="scss">
- </style>
|