feat: 我的志愿表页面编写中

master
xjs 2025-03-14 18:06:49 +08:00
parent 3c753725db
commit 207c569505
24 changed files with 607 additions and 131 deletions

View File

@ -18,6 +18,7 @@
</button>
<button
class="w-[350rpx]! h-[88rpx]! text-[#fff]! text-[28rpx]! bg-[#1580FF]! font-normal flex! items-center! justify-center! rounded-[8rpx]!"
@click="navigatorToAi"
>
智能填报
</button>
@ -39,4 +40,10 @@ const navigatorTo = () => {
url: '/pages-sub/home/autoFill/index',
})
}
const navigatorToAi = () => {
uni.navigateTo({
url: '/pages-evaluation-sub/aiAutoFill/index',
})
}
</script>

View File

@ -1,20 +1,4 @@
import {
getUniversityType,
getRegionInfo,
getUniversityLevel,
getNature,
} from '@/service/index/api'
export const useUniversityLevel = () => {
const phaseList = ref([])
getUniversityLevel().then((res) => {
if (res.code === 200) {
phaseList.value = res.result as { code: number; name: string }[]
}
})
return { phaseList }
}
import { getUniversityType, getRegionInfo, getNature } from '@/service/index/api'
interface Region {
code: string

View File

@ -0,0 +1,82 @@
export const renderEchart = ({ echart, echarts, pieChartData }) => {
const typeColorMap = {
: { color: '#EB5241', simpleName: '冲' },
: { color: '#F0BA16', simpleName: '稳' },
: { color: '#15C496', simpleName: '保' },
}
const formattedData = pieChartData.value.map((item) => ({
...item,
itemStyle: {
color: typeColorMap[item.name]?.color,
},
label: {
formatter: (params) => typeColorMap[params.name]?.simpleName || params.name,
},
}))
echart.value.init(echarts, (chart) => {
let option = {
tooltip: {
trigger: 'item',
formatter: '{b}: {c} ({d}%)',
},
legend: {
orient: 'horizontal',
bottom: 0,
left: 'center',
icon: 'circle',
itemWidth: 10,
itemHeight: 10,
itemGap: 20,
},
series: [
{
type: 'pie',
radius: ['40%', '70%'],
data: formattedData,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)',
},
},
label: {
formatter: (params) => typeColorMap[params.name]?.simpleName || params.name,
},
},
],
graphic: {
elements: [
{
type: 'text',
left: 'center',
top: '40%',
style: {
text: '适合的大学',
fontSize: 12,
fill: '#1F2329',
textAlign: 'center',
textVerticalAlign: 'middle',
},
},
{
type: 'text',
left: 'center',
top: '50%',
style: {
text: formattedData.reduce((acc, curr) => acc + curr.value, 0),
fontSize: 24,
fill: '#1F2329',
textAlign: 'center',
textVerticalAlign: 'middle',
},
},
],
},
}
chart.setOption(option)
})
}

View File

@ -0,0 +1,105 @@
<route lang="json5" type="page">
{
style: {
navigationBarTitleText: 'AI智能填报',
},
needLogin: true,
}
</route>
<template>
<view class="bg-[#FAFAFA]">
<view class="text-[#000] text-[24rpx] p-[32rpx]">
{{ userInfo.estimatedAchievement.expectedScore }}{{
userInfo.estimatedAchievement.subjectGroup.split(',').join('/')
}}
</view>
<view class="mx-[32rpx] h-[426rpx] bg-[#fff] rounded-[16rpx]">
<l-echart ref="echart"></l-echart>
</view>
<view class="mt-[32rpx] mx-[32rpx] bg-[#fff] rounded-[16rpx] p-[32rpx]">
<text class="text-[#000] text-[24rpx]">
{{ pieChartData.reduce((total, cur) => total + cur.value, 0) }}所适合我的大学
</text>
<view class="pl-[30rpx] mt-[22rpx] grid grid-cols-3 gap-x-[150rpx] gap-y-[30rpx]">
<view
class="flex flex-col items-center gap-[8rpx]"
v-for="item in universities"
:key="item.name"
>
<text class="text-[56rpx] text-[#1F2329] font-semibold">{{ item.count }}</text>
<text class="text-[24rpx] text-[#B6B6B6]">{{ item.name }}</text>
</view>
</view>
</view>
<view class="mt-[32rpx] mx-[32rpx] bg-[#FEF0F0] rounded-[16rpx] p-[32rpx]">
<view class="text-[#F56C6C] text-[28rpx] flex items-center gap-[8rpx]">
<view class="i-carbon-volume-down text-[32rpx]"></view>
说明
</view>
<view class="text-[20rpx] text-[#F56C6C] flex flex-col">
<text>
1.
本平台基于历史分数及等效位次进行志愿推荐和风险评估由于志愿填报本身存在不确定性请谨慎参考
</text>
<text>
2.在正式填报时院校/专业名称及代码请务必与官方信息平台核对若发现差异则以官方数据为准本平台数据仅供参考
</text>
</view>
</view>
<view class="mt-[32rpx] bg-[#fff] rounded-[16rpx] p-[32rpx] box-shadow px-[32rpx] pt-[32rpx]">
<view
class="text-[#fff] text-[32rpx] rounded-[8rpx] bg-[#1580FF] text-center py-[26rpx]"
@click="navigatorTo"
>
智能选校
</view>
</view>
</view>
</template>
<script setup lang="ts">
import { useUserStore } from '@/store/user'
import { aiPreview, getBatchData } from '@/service/index/api'
import lEchart from '@/pages-evaluation-sub/uni_modules/lime-echart/components/l-echart/l-echart.vue'
import { renderEchart } from './echartRender'
const echarts = require('../uni_modules/lime-echart/static/echarts.min')
const userStore = useUserStore()
const userInfo = computed(() => userStore.userInfo)
const echart = ref(null)
const pieChartData = ref([])
const universities = ref([])
onLoad(() => {
aiPreview({
location: userInfo.value.estimatedAchievement.provinceCode,
p: userInfo.value.estimatedAchievement.sp,
score: userInfo.value.estimatedAchievement.expectedScore,
subjects: userInfo.value.estimatedAchievement.subjectGroup.split(','),
}).then((res) => {
let _result = res.result as {
pieChats: { name: string; value: number }[]
universities: { name: string; count: number }[]
}
pieChartData.value = _result.pieChats
universities.value = _result.universities
renderEchart({ echart, echarts, pieChartData })
})
})
const navigatorTo = () => {
uni.navigateTo({
url: '/pages-sub/home/wishesList/index',
})
}
</script>
<style lang="scss" scoped>
.box-shadow {
box-shadow: 0rpx -8rpx 8rpx 0rpx rgba(225, 225, 225, 0.2);
}
</style>

View File

@ -11,8 +11,6 @@ const echarts = require('./uni_modules/lime-echart/static/echarts.min')
const echart = ref(null)
onMounted(() => {
console.log(echarts, echart.value)
echart.value.init(echarts, (chart) => {
let option = {
title: {

View File

@ -10,9 +10,9 @@
<view class="action-sheet-header" v-if="title">
<text class="action-sheet-title">{{ title }}</text>
</view>
<view class="action-sheet-content">
<scroll-view class="action-sheet-content" :scroll-y="true">
<slot></slot>
</view>
</scroll-view>
<view class="action-sheet-footer" v-if="$slots.footer">
<slot name="footer"></slot>
</view>

View File

@ -358,7 +358,7 @@ const emitValueChange = () => {
border: 2px solid v-bind('activeColor');
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
z-index: 1;
z-index: 0;
top: 50%;
transition:
transform 0.2s,

View File

@ -14,6 +14,7 @@
<view class="table-row">
<view class="table-cell" :class="[`text-${indexColumn.align || 'center'} w-full`]">
<TableCol
v-if="index"
:prop="indexColumn.prop"
:label="indexColumn.label"
:width="indexColumn.width"

View File

@ -7,6 +7,7 @@
@click="handleRowClick(index)"
:style="cellStyle"
>
{{ $slots.value }}
<slot name="value" v-if="$slots.value" :row="getScope(index)" :index="index"></slot>
<text :class="`table-value`" v-else>{{ row }}</text>
</view>

View File

@ -1,10 +0,0 @@
<route lang="json5" type="page">
{
style: {
navigationStyle: 'custom',
},
}
</route>
<template></template>
<script setup lang="ts"></script>

View File

@ -40,6 +40,23 @@
custom-header-class="text-[36rpx]! text-[#303030]! font-medium!"
>
<FilterMenu />
<template #footer>
<view class="flex items-center">
<button
plain
class="border-[#f5f5f5]! flex-auto bg-[#f5f5f5]! rounded-[8rpx]! text-[#1580FF]! text-[32rpx]! font-normal! mr-[22rpx]"
@click="close"
>
清空
</button>
<button
class="border-[#1580FF]! flex-auto bg-[#1580FF]! rounded-[8rpx]! text-[#fff]! text-[32rpx]! font-normal!"
@click="handleResult"
>
查看结果
</button>
</view>
</template>
</ActionSheet>
</view>
</template>
@ -61,6 +78,12 @@ const badgeValue = ref(12)
const close = () => {
show.value = false
}
const handleResult = () => {
uni.navigateTo({
url: `/pages-sub/home/wishesList/index`,
})
}
</script>
<style lang="scss" scoped>

View File

@ -43,7 +43,7 @@
@open="handleOpenSubMenu(item.id)"
custom-class="flex items-center"
>
<view class="">
<view class="mx-[24rpx] my-[16rpx]">
<Region v-if="currentMenu === 1" @changeName="handleRegionChange" />
<Nature v-if="currentMenu === 2" @changeName="handleNatureChange" />
<UniType v-if="currentMenu === 3" @changeName="handleUniTypeChange" />

View File

@ -0,0 +1,32 @@
<template>
<CheckGroup
:list="infoList"
@change="handleChange"
:default-value="defaultInfo"
value-key="id"
label-key="name"
v-bind="$attrs"
/>
</template>
<script lang="ts" setup>
import { getUniversityFeature } from '@/service/index/api'
import CheckGroup from '@/pages-sub/components/check-group/CheckGroup.vue'
const infoList = ref()
getUniversityFeature().then((res) => {
if (res.code === 200) {
infoList.value = res.result as { id: number; name: string }[]
}
})
const defaultInfo = ref<string[]>([])
const emits = defineEmits(['changeName'])
const handleChange = (val: any) => {
const names = infoList.value.filter((item) => val.includes(item.id)).map((item) => item.name)
emits('changeName', names)
}
</script>

View File

@ -11,8 +11,16 @@
{{ item.name }}
</view>
</view>
<view class="flex-1 pb-[24rpx] h-[50vh] overflow-y-auto mt-[32rpx] mx-[32rpx]">
<Phase v-show="currentMenu === 1 && showPhase" />
<scroll-view class="flex-1 pb-[24rpx] h-[50vh] mt-[32rpx] mx-[32rpx]" :scroll-y="true">
<Phase v-show="currentMenu === 1" />
<CollegeFeature
v-show="currentMenu === 5"
width="240rpx"
height="60rpx"
class="justify-center!"
:defaultValue="defaultCollegeFeature"
@change-name="handleCollegeFeatureChange"
/>
<Region
width="240rpx"
height="60rpx"
@ -35,10 +43,10 @@
v-show="currentMenu === 4"
:defaultValue="defaultNature"
/>
</scroll-view>
</view>
</view>
<view class="pt-[32rpx] px-[32rpx] wei-xin-pt box-shadow">
<!-- <view class="flex items-center flex-wrap gap-[24rpx]">
<!-- <view class="pt-[32rpx] px-[32rpx] wei-xin-pt box-shadow">
<view class="flex items-center flex-wrap gap-[24rpx]">
<view
class="px-[20rpx] py-[12rpx] bg-[#f8f8f8] rounded-[8rpx]"
v-for="item in 4"
@ -48,23 +56,8 @@
<view class="i-carbon-close-filled"></view>
</view>
</view>
</view> -->
<view class="flex items-center">
<button
plain
class="border-[#f5f5f5]! flex-auto bg-[#f5f5f5]! rounded-[8rpx]! text-[#1580FF]! text-[32rpx]! font-normal! mr-[22rpx]"
@click="close"
>
清空
</button>
<button
class="border-[#1580FF]! flex-auto bg-[#1580FF]! rounded-[8rpx]! text-[#fff]! text-[32rpx]! font-normal!"
@click="handleResult"
>
查看结果
</button>
</view>
</view>
</view>
</template>
@ -73,33 +66,29 @@ import Phase from './Phase.vue'
import Region from './Region.vue'
import UniType from './UniType.vue'
import Nature from './Nature.vue'
import CollegeFeature from './CollegeFeature.vue'
const props = defineProps({
showPhase: {
type: Boolean,
default: true,
menuBit: {
type: Number,
default: 15, // (01111)
},
})
const close = () => {
defaultRegion.value = []
defaultNature.value = []
defaultUniType.value = []
}
const menus = [
{ id: 1, name: '阶段' },
{ id: 2, name: '院校省份' },
{ id: 5, name: '院校特色' },
{ id: 3, name: '院校类型' },
{ id: 4, name: '办学性质' },
]
const splitMenus = computed(() => {
let _menus = menus
if (!props.showPhase) {
_menus = menus.filter((item) => item.id !== 1)
}
return _menus
let effectiveBitMask = props.menuBit
return menus.filter((item) => {
const bitMask = 1 << (item.id - 1)
return (effectiveBitMask & bitMask) !== 0
})
})
const currentMenu = ref(splitMenus.value[0].id)
@ -110,10 +99,12 @@ const changeMenu = (item: { id: number; name: string }) => {
const defaultRegion = ref([])
const defaultNature = ref([])
const defaultUniType = ref([])
const defaultCollegeFeature = ref([])
const chooseRegion = ref([])
const chooseNature = ref([])
const chooseUniType = ref([])
const chooseCollegeFeature = ref([])
const handleRegionChange = (val: string[]) => {
chooseRegion.value = val
@ -126,11 +117,23 @@ const handleNatureChange = (val: string[]) => {
const handleUniTypeChange = (val: string[]) => {
chooseUniType.value = val
}
const handleResult = () => {
uni.navigateTo({
url: `/pages-sub/home/wishesList/index?province=${chooseRegion.value.join(',')}&nature=${chooseNature.value.join(',')}&uniType=${chooseUniType.value.join(',')}`,
})
const handleCollegeFeatureChange = (val: string[]) => {
chooseCollegeFeature.value = val
}
const handleConfirm = () => {
console.log(
chooseRegion.value,
chooseNature.value,
chooseUniType.value,
chooseCollegeFeature.value,
)
}
defineExpose({
handleConfirm,
})
</script>
<style lang="scss" scoped>

View File

@ -1,6 +1,6 @@
<template>
<view class="">
<RadioGroup v-model="choosePhase" class="custom-radio-group">
<RadioGroup v-model="choosePhase" class="custom-radio-group" @change="handleChange">
<Radio v-for="item in phaseList" :key="item.batch" :name="item.batch" class="custom-radio">
{{ item.batch }}
</Radio>
@ -34,6 +34,8 @@ const phaseList = ref([])
const choosePhase = ref('')
const emits = defineEmits(['changeName', 'change'])
const fetchBatchData = () => {
getBatchData(userStore.userInfo.batchDataUrl).then((res) => {
if (res.code === 200) {
@ -65,6 +67,12 @@ onLoad(() => {
})
}
})
const handleChange = (val: string) => {
choosePhase.value = val
emits('changeName', val)
emits('change', val)
}
</script>
<style lang="scss">

View File

@ -25,26 +25,32 @@
:title="searchParams.locationName || '省份'"
custom-class="flex items-center"
>
<view class="pl-[32rpx] pb-[32rpx]">
<Region
:defaultValue="searchParams.locationCode ? [searchParams.locationCode] : []"
:max="1"
@changeName="handleRegionChange"
@change="handleRegionChangeCode"
/>
</view>
</drop-menu-item>
<drop-menu-item
:key="2"
:title="searchParams.searchNature || '层次'"
custom-class="flex items-center"
>
<view class="pl-[32rpx] pb-[32rpx]">
<Nature @changeName="handleNatureChange" />
</view>
</drop-menu-item>
<drop-menu-item :key="3" title="类别" custom-class="flex items-center">
<view class="pl-[32rpx] pb-[32rpx]">
<UniType
@change="handleUniTypeChange"
:max="1"
:default-value="searchParams.type ? [searchParams.type] : []"
/>
</view>
</drop-menu-item>
</drop-menu>

View File

@ -20,23 +20,22 @@
<view class="custom-background h-[200rpx] w-full absolute top-0 left-0 z-[-1]"></view>
</view>
<drop-menu>
<drop-menu-item
:key="1"
:title="searchParams.locationName || '省份'"
custom-class="flex items-center"
>
<drop-menu-item :key="1" :title="searchParams.locationName || '省份'">
<view class="pl-[32rpx] pb-[32rpx]">
<Region
:defaultValue="searchParams.locationCode ? [searchParams.locationCode] : []"
:max="1"
@changeName="handleRegionChange"
@change="handleRegionChangeCode"
/>
</view>
</drop-menu-item>
<drop-menu-item
:key="2"
:title="searchParams.year || '年份'"
custom-class="flex items-center"
>
<view class="pl-[32rpx] pb-[32rpx]">
<CheckGroup
:list="checkYearList"
:default-value="searchParams.year ? [searchParams.year] : []"
@ -45,13 +44,16 @@
valueKey="year"
:max="1"
/>
</view>
</drop-menu-item>
<drop-menu-item :key="3" title="类别" custom-class="flex items-center">
<view class="pl-[32rpx] pb-[32rpx]">
<UniType
@change="handleUniTypeChange"
:max="1"
:default-value="searchParams.type ? [searchParams.type] : []"
/>
</view>
</drop-menu-item>
</drop-menu>
<WXXTable :data="lineList" class="px-[32rpx] mt-[16rpx] pb-safe">

View File

@ -0,0 +1,27 @@
<template>
<view class="w-full">
<!-- 头部 -->
<view class="flex gap-[22rpx]">
<view v-for="item in columns" :key="item.prop" class="text-[#505050] text-[22rpx]">
{{ item.label }}
</view>
</view>
<view>
<view v-for="dataItem in data" :key="dataItem._id" class="flex gap-[22rpx]">
<view v-for="item in columns" :key="item.prop" class="text-[#505050] text-[22rpx]">
{{ dataItem[item.prop] }}
</view>
</view>
</view>
</view>
</template>
<script setup lang="ts">
const props = defineProps<{
columns: any[]
data: any[]
}>()
</script>
<style scoped lang="scss"></style>

View File

@ -59,11 +59,8 @@
</view>
<view class="flex gap-[10rpx] px-[32rpx] border-top">
<view
@click="handleShow(3)"
class="flex justify-between items-center text-[28rpx] line-height-none"
>
全部(15)
<view class="flex justify-between items-center text-[28rpx] line-height-none">
全部({{ total }})
<view class="i-carbon-caret-down"></view>
</view>
@ -88,10 +85,72 @@
:key="item.zp_index"
v-for="(item, index) in schoolList"
@click="itemClick(item, item.zp_index)"
></view>
>
<view class="flex items-start p-[32rpx]">
<view class="flex flex-col items-center gap-[16rpx]">
<image :src="item.logo" mode="scaleToFill" class="w-[112rpx] h-[112rpx]" />
<view
class="w-[52rpx] h-[52rpx] rounded-[8rpx] font-semibold text-[28rpx] flex items-center justify-center"
:style="calcTypeName(item.type).style"
>
{{ calcTypeName(item.type).text }}
</view>
<text class="text-[32rpx] font-semibold">
{{
Math.round(
item.items.reduce((a, b) => a + Number(b.percentAge.replace('%', '')), 0) /
item.items.length,
)
}}
%
</text>
</view>
<view class="flex flex-col ml-[24rpx] justify-between flex-1">
<view class="flex justify-between mb-[14rpx]">
<view class="flex justify-between flex-col gap-[6rpx]">
<text class="text-[32rpx] font-semibold">{{ item.name }}</text>
<text class="text-[22rpx] text-[#505050]">
{{ item.city }}·{{ item.educationCategory }}
</text>
<view class="text-[22rpx] text-[#8F959E] flex items-center">
<text class="truncate max-w-[300rpx]" v-show="item.features.length > 0">
{{ item.features.slice(0, 3).join('/') }}/
</text>
<text>排名{{ item.rank }}</text>
</view>
<view class="text-[22rpx] text-[#1F2329] mt-[8rpx]">
<text class="">代码{{ item.collegeCode }}</text>
<text>
{{ item.year }}计划{{ item.items.reduce((a, b) => a + b.planCount, 0) }}
</text>
</view>
</view>
<view class="flex flex-col gap-[8rpx] items-center">
<view
class="text-[24rpx] px-[16rpx] py-[12rpx] rounded-[8rpx] border-[2rpx] border-[#1580FF] border-solid"
>
专业{{ item.items.length }}
</view>
<text class="text-[20rpx] text-[#8F959E]">已填 1</text>
</view>
</view>
<WXXTable :data="item.childItems">
<WXXTableCol label="年份" prop="year" />
<WXXTableCol label="录取" prop="planCount" />
<WXXTableCol label="线差" prop="lineDiff" />
<WXXTableCol label="最低分" prop="score" />
<WXXTableCol label="最低位次" prop="rankLine" />
<WXXTableCol label="位次差" prop="rankLine">
<template>hello</template>
</WXXTableCol>
</WXXTable>
</view>
</view>
</view>
<ActionSheet v-model:show="show" :title="actionTitle">
<view class="py-[16rpx]">
<view class="px-[36rpx]">
<Region
v-if="actionTitle === '地域'"
width="210rpx"
@ -99,12 +158,19 @@
class="px-[32rpx]"
@change-name="handleRegionName"
/>
<FilterMenu v-if="actionTitle === ''" :show-phase="false" />
</view>
<view class="flex items-center justify-between px-[32rpx]" v-show="actionTitle === '地域'">
<FilterMenu
v-if="actionTitle === '院校'"
:show-phase="false"
ref="filterMenuRef"
:menuBit="28"
/>
<template #footer>
<view class="flex items-center justify-between gap-[30rpx]">
<view class="cancel-btn" @click="show = false">取消</view>
<view class="submit-btn" @click="handleConfirm"></view>
</view>
</template>
</ActionSheet>
</z-paging>
</template>
@ -115,18 +181,67 @@ import ActionSheet from '@/pages-sub/components/ActionSheet.vue'
import Region from '@/pages-sub/home/components/Region.vue'
import FilterMenu from '@/pages-sub/home/components/FilterMenu.vue'
import Slider from '@/pages-sub/components/Slider.vue'
import { getPlanProListByFilter } from '@/service/index/api'
import WXXTable from '@/pages-sub/components/table/Table.vue'
import WXXTableCol from '@/pages-sub/components/table/TableCol.vue'
// import DataTable from './DataTable.vue'
import { useUserStore } from '@/store/user'
const columns = ref([
{
label: '年份',
prop: 'year',
},
{
label: '录取',
prop: 'planCount',
},
{
label: '线差',
prop: 'lineDiff',
},
{
label: '最低分',
prop: 'score',
},
{
label: '最低位次',
prop: 'rankLine',
},
{
label: '位次差',
prop: 'rankLine',
},
])
const userStore = useUserStore()
const sliderValue = ref([550, 590])
const schoolList = ref([])
const paging = ref(null)
const filterMenuRef = ref(null)
const location = ref(userStore.userInfo.estimatedAchievement.provinceCode)
const total = ref(0)
const queryList = (page: number, pageSize: number) => {
paging.value.complete([])
getPlanProListByFilter({
pageIndex: page,
pageSize: pageSize,
location: userStore.userInfo.estimatedAchievement.provinceCode,
p: userStore.userInfo.estimatedAchievement.sp,
subjects: userStore.userInfo.estimatedAchievement.subjectGroup.split(','),
score: +userStore.userInfo.estimatedAchievement.expectedScore,
batchName: userStore.userInfo.batchName,
}).then((resp) => {
if (resp.code === 200) {
paging.value.complete((resp.result as { rows: any[] }).rows)
total.value = (resp.result as { totalRows: number }).totalRows
}
})
}
const virtualListChange = (_vList) => {
schoolList.value = _vList
@ -146,6 +261,9 @@ const show = ref(false)
const actionTitle = ref('')
const handleConfirm = () => {
show.value = false
if (actionTitle.value === '院校') {
filterMenuRef.value.handleConfirm()
}
}
const handleShow = (type: number) => {
@ -165,6 +283,34 @@ const handleRegionName = (val: string[]) => {
const handleSliderChange = (val) => {
console.log('滑块值变化:', val)
}
const calcTypeName = (type: number) => {
const style = {
0: {
text: '冲',
color: '#EB5241',
bgColor: 'rgba(235,82,65,0.15)',
},
1: {
text: '稳',
color: '#FA8E23',
bgColor: 'rgba(250,142,35,0.15)',
},
2: {
text: '保',
color: '#15C496',
bgColor: 'rgba(21,196,150,0.15)',
},
}[type] || { text: '保', color: '#15C496', bgColor: 'rgba(21,196,150,0.15)' }
return {
text: style.text,
style: {
color: style.color,
backgroundColor: style.bgColor,
},
}
}
</script>
<style lang="scss" scoped>

View File

@ -0,0 +1,16 @@
import { getBatchData } from '@/service/index/api'
import { useUserStore } from '@/store/user'
export const getPhaseLine = () => {
let phaseLine = ref(0)
const userStore = useUserStore()
getBatchData(userStore.userInfo.batchDataUrl).then((res) => {
if (res.code === 200) {
phaseLine.value = res.result[0].batches.find(
(item) => item.batch === userStore.userInfo.batchName,
).score
}
})
return { phaseLine }
}

View File

@ -118,13 +118,6 @@
"navigationStyle": "custom"
}
},
{
"path": "home/aiAutoFill/index",
"type": "page",
"style": {
"navigationStyle": "custom"
}
},
{
"path": "home/autoFill/index",
"type": "page",
@ -246,6 +239,10 @@
"navigationStyle": "custom"
}
},
{
"path": "home/wishesList/DataTable",
"type": "page"
},
{
"path": "home/wishesList/index",
"type": "page",
@ -275,6 +272,14 @@
"path": "index",
"type": "page"
},
{
"path": "aiAutoFill/index",
"type": "page",
"style": {
"navigationBarTitleText": "AI智能填报"
},
"needLogin": true
},
{
"path": "rank/index",
"type": "page",

View File

@ -25,6 +25,10 @@ export const getUniversityLevel = () => {
return http.get('/api/v1/base/un_level.json', { staticType: 'static' })
}
export const getUniversityFeature = () => {
return http.get('/api/v1/base/features.json', { staticType: 'static' })
}
export const getRegionInfo = () => {
return http.get('/api/v1/base/regions.json', { staticType: 'static' })
}
@ -236,3 +240,39 @@ export interface filterParams {
export const getFilterData = (params: filterParams) => {
return http.get('/api/PlanPro/planList', params)
}
export interface AutoFillParams {
batchName?: null | string
endscore?: number | null
feature?: string[] | null
keyword?: null | string
location?: null | string
majors?: string[] | null
nature?: string[] | null
ownership?: string[] | null
p?: number | null
pageIndex?: number
pageSize?: number
province?: string[] | null
score?: number | null
startscore?: number | null
subjects?: string[] | null
subjectType?: string[] | null
type?: number | null
}
export const getUniversityListByFilter = (params: AutoFillParams) => {
return http.post('/api/PlanPro/v2/oneKey', params)
}
export const aiPreview = (params: {
location: string
p: number
score: string | number
subjects: string[]
}) => {
return http.post('/api/PlanPro/aiPerview', params)
}
export const getPlanProListByFilter = (params: AutoFillParams) => {
return http.post('/api/PlanPro/aiUniversity', params)
}

View File

@ -218,7 +218,6 @@ declare module 'vue' {
readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
readonly useTemplateRef: UnwrapRef<typeof import('vue')['useTemplateRef']>
readonly useUnSortType: UnwrapRef<typeof import('../hooks/useUnSortType')['useUnSortType']>
readonly useUniversityLevel: UnwrapRef<typeof import('../hooks/useFilterSchool')['useUniversityLevel']>
readonly useUniversityRank: UnwrapRef<typeof import('../hooks/useUnSortType')['useUniversityRank']>
readonly useUniversityType: UnwrapRef<typeof import('../hooks/useFilterSchool')['useUniversityType']>
readonly useUpload: UnwrapRef<typeof import('../hooks/useUpload')['default']>

View File

@ -10,7 +10,6 @@ interface NavigateToOptions {
"/pages/expert/index/index" |
"/pages/ucenter/index/index" |
"/pages-sub/customerService/index/index" |
"/pages-sub/home/aiAutoFill/index" |
"/pages-sub/home/autoFill/index" |
"/pages-sub/home/career/index" |
"/pages-sub/home/career/info" |
@ -28,9 +27,11 @@ interface NavigateToOptions {
"/pages-sub/home/news/index" |
"/pages-sub/home/news/newsList" |
"/pages-sub/home/schoolRank/index" |
"/pages-sub/home/wishesList/DataTable" |
"/pages-sub/home/wishesList/index" |
"/login-sub/index" |
"/pages-evaluation-sub/index" |
"/pages-evaluation-sub/aiAutoFill/index" |
"/pages-evaluation-sub/rank/index";
}
interface RedirectToOptions extends NavigateToOptions {}