|
|
@@ -1,146 +1,144 @@
|
|
|
<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>
|
|
|
+ <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>
|
|
|
- <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"/>
|
|
|
+ </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>
|
|
|
- <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>
|
|
|
+ <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 { 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 "@/pagesOther/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 { 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
|
|
|
+ highestRank: '',
|
|
|
+ lowestRank: '',
|
|
|
+ num: 0,
|
|
|
+ numTotal: 0,
|
|
|
+ score: 0
|
|
|
}
|
|
|
const match = ref(defaultMatch)
|
|
|
|
|
|
const segCols = [
|
|
|
- {label: '分数', prop: 'score'},
|
|
|
- {label: '位次区间', prop: 'rank'},
|
|
|
- {label: '同分人数', prop: 'num'},
|
|
|
+ { 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 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()
|
|
|
+const { dispatchCache, removeCache } = useCacheStore()
|
|
|
+const { onSearch, rules } = useProvideSearchModel([
|
|
|
+ useConditionSegmentLocation(),
|
|
|
+ // useConditionSegmentYear(),
|
|
|
+ // useConditionSegmentMode()
|
|
|
+ // 目前只需要响应年份
|
|
|
+ useConditionSegmentYear()
|
|
|
], queryParams, form)
|
|
|
-const {voluntaryData, validate: validateScore} = useProvideVoluntaryData(() => queryParams.value.year)
|
|
|
+const { voluntaryData, validate: validateScore } = useProvideVoluntaryData(() => queryParams.value.year)
|
|
|
|
|
|
onSearch(() => {
|
|
|
- handleScoreSearch()
|
|
|
- paging.value.reload()
|
|
|
+ handleScoreSearch()
|
|
|
+ paging.value.reload()
|
|
|
})
|
|
|
watch(voluntaryData, () => handleScoreSearch())
|
|
|
|
|
|
const handleRefresh = () => {
|
|
|
- removeCache(cacheActions.getSectionList)
|
|
|
- removeCache(cacheActions.getEquivalentScore)
|
|
|
+ removeCache(cacheActions.getSectionList)
|
|
|
+ removeCache(cacheActions.getEquivalentScore)
|
|
|
|
|
|
- handleScoreSearch()
|
|
|
+ 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 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 || []
|
|
|
+ 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>
|
|
|
+<style lang="scss"></style>
|