volunteer-4/src/pages-sub/home/autoFill/index.vue

150 lines
4.1 KiB
Vue

<route lang="json5" type="page">
{
style: {
navigationStyle: 'custom',
},
needLogin: true,
}
</route>
<template>
<view class="flex flex-col h-screen">
<Navbar
title="一键填报"
left-arrow
@click-left="navigatorBack"
safeAreaInsetTop
:bordered="false"
class="bg-transparent"
></Navbar>
<view class="flex-1 bg-[#f8f8f8] pb-safe flex flex-col items-center pt-[48rpx]">
<Badge :value="badgeValue">
<button
plain
class="w-[188rpx]! h-[58rpx]! min-w-[unset]! text-[24rpx]! flex! items-center! justify-center! rounded-[88rpx]! color-[#1580FF]! border-[#1580FF]! border-[2rpx]"
@click="show = true"
>
条件筛选
<view class="i-carbon-chevron-down"></view>
</button>
</Badge>
<image
class="w-[286rpx] h-[286rpx] mt-[134rpx] mix-blend-multiply"
src="@/pages-sub/static/images/autoFill/auto-fill.jpg"
mode="widthFix"
@click="show = true"
></image>
</view>
<ActionSheet
v-model:show="show"
title="筛选"
@close="close"
custom-header-class="text-[36rpx]! text-[#303030]! font-medium!"
>
<FilterMenu ref="filterMenuRef" />
<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>
<script lang="ts" setup>
import FilterMenu from '@/pages-sub/home/components/FilterMenu.vue'
import Navbar from '@/pages-sub/components/navbar/Navbar.vue'
import Badge from '@/pages-sub/components/badge/Badge.vue'
import ActionSheet from '@/pages-sub/components/ActionSheet.vue'
import { ref } from 'vue'
import { getUniversityListByFilter } from '@/service/index/api'
import { useUserStore } from '@/store/user'
const userStore = useUserStore()
const navigatorBack = () => {
uni.navigateBack()
}
const show = ref(false)
const badgeValue = ref(1)
const close = () => {
show.value = false
}
const filterMenuRef = ref()
const handleResult = () => {
let _params = filterMenuRef.value.handleConfirm()
countBadgeValue(_params)
let params = {
p: userStore.userInfo.estimatedAchievement.sp,
location: userStore.userInfo.estimatedAchievement.provinceCode,
subjects: userStore.userInfo.estimatedAchievement.subjectGroup.split(','),
score: +userStore.userInfo.estimatedAchievement.expectedScore,
batchname: _params.choosePhase,
nature: _params.chooseNature,
province: _params.chooseRegion,
subjectType: _params.chooseUniType,
}
getUniversityListByFilter(params).then((res) => {
if (res.code === 200) {
let collegeList = (res.result as { rows: any[] }).rows
let wishList = collegeList.map((item) => {
let _major = {
...item,
name: item.universityName,
vItems: item.majorItems.map((majorItem) => ({
...majorItem,
name: majorItem.majorName,
items: majorItem.planItems,
})),
}
return _major
})
userStore.sortWishCollegeList({ list: wishList })
uni.navigateTo({
url: `/pages-sub/home/wishesList/wishesList?typeName=一键填报&editType=add`,
})
}
})
}
const countBadgeValue = (params) => {
badgeValue.value = 0
for (let key in params) {
let value = params[key]
if (value instanceof Object) {
badgeValue.value += value ? Object.keys(value).length : 0
} else if (typeof value === 'string' && value.trim() !== '') {
badgeValue.value += 1
}
}
}
</script>
<style lang="scss" scoped>
.tbn-border {
border-radius: 68rpx !important;
border: 2rpx solid #1580ff !important;
background-color: #fff !important;
}
</style>