refactor: 界面优化
parent
e8eec5c38f
commit
ab1beec959
|
|
@ -36,7 +36,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, computed, watch, nextTick, onMounted } from 'vue'
|
import { ref, watch, nextTick, onMounted } from 'vue'
|
||||||
|
|
||||||
// 唯一ID,防止多个Tab组件冲突
|
// 唯一ID,防止多个Tab组件冲突
|
||||||
const tabScrollId = `tab-scroll-${Date.now()}`
|
const tabScrollId = `tab-scroll-${Date.now()}`
|
||||||
|
|
@ -201,7 +201,6 @@ const handleTabClick = (index) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab-item.active .tab-text {
|
.tab-item.active .tab-text {
|
||||||
font-weight: bold;
|
|
||||||
color: v-bind('props.themeColor');
|
color: v-bind('props.themeColor');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,6 @@ const handleClose = () => {
|
||||||
|
|
||||||
&-content {
|
&-content {
|
||||||
max-height: 75vh;
|
max-height: 75vh;
|
||||||
overflow-y: auto;
|
|
||||||
min-height: 500rpx;
|
min-height: 500rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,10 @@ provide('dropMenu', {
|
||||||
direction: props.direction,
|
direction: props.direction,
|
||||||
titles, // 提供titles给子组件
|
titles, // 提供titles给子组件
|
||||||
})
|
})
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
closeDropMenu,
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,12 @@
|
||||||
<view
|
<view
|
||||||
class="flex items-center rounded-[48rpx] bg-[#F7F7F7]! px-[24rpx] py-[12rpx] w-[350rpx] ml-[32rpx]"
|
class="flex items-center rounded-[48rpx] bg-[#F7F7F7]! px-[24rpx] py-[12rpx] w-[350rpx] ml-[32rpx]"
|
||||||
>
|
>
|
||||||
<view class="i-carbon-search text-[#d9d9d9]"></view>
|
<view class="i-carbon-search text-[#999]"></view>
|
||||||
<input
|
<input
|
||||||
v-model="searchValue"
|
v-model="searchValue"
|
||||||
:placeholder="placeholder"
|
:placeholder="placeholder"
|
||||||
confirm-type="done"
|
confirm-type="done"
|
||||||
|
placeholder-style="color:#999"
|
||||||
class="text-start ml-20rpx"
|
class="text-start ml-20rpx"
|
||||||
@confirm="handleConfirm"
|
@confirm="handleConfirm"
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<!-- 左侧区域 -->
|
<!-- 左侧区域 -->
|
||||||
<view class="navbar-left" @click="handleClickLeft">
|
<view :class="`navbar-left ${leftWidthMin ? 'w-m-[100rpx]' : ''}`" @click="handleClickLeft">
|
||||||
<view v-if="leftArrow" class="back-icon">
|
<view v-if="leftArrow" class="back-icon">
|
||||||
<view class="i-carbon-chevron-left text-[40rpx] text-[#333] font-semibold icon-class" />
|
<view class="i-carbon-chevron-left text-[40rpx] text-[#333] font-semibold icon-class" />
|
||||||
</view>
|
</view>
|
||||||
|
|
@ -53,7 +53,7 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue'
|
||||||
|
|
||||||
const props = defineProps({
|
defineProps({
|
||||||
title: {
|
title: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '',
|
default: '',
|
||||||
|
|
@ -86,6 +86,10 @@ const props = defineProps({
|
||||||
type: String,
|
type: String,
|
||||||
default: 'justify-between',
|
default: 'justify-between',
|
||||||
},
|
},
|
||||||
|
leftWidthMin: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const emit = defineEmits(['clickLeft'])
|
const emit = defineEmits(['clickLeft'])
|
||||||
|
|
@ -154,7 +158,6 @@ const handleClickLeft = () => {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
min-width: 100rpx;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.back-icon {
|
.back-icon {
|
||||||
|
|
|
||||||
|
|
@ -1,56 +1,54 @@
|
||||||
<template>
|
<template>
|
||||||
<view
|
<view
|
||||||
|
v-if="show"
|
||||||
class="overlay"
|
class="overlay"
|
||||||
:class="{ 'overlay-show': show }"
|
:class="{ 'overlay-show': show }"
|
||||||
:style="{
|
|
||||||
'background-color': backgroundColor,
|
|
||||||
'z-index': zIndex,
|
|
||||||
}"
|
|
||||||
@click="handleClick"
|
@click="handleClick"
|
||||||
@touchmove.prevent
|
:style="{ zIndex }"
|
||||||
>
|
>
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
withDefaults(
|
const props = defineProps({
|
||||||
defineProps<{
|
show: {
|
||||||
show: boolean
|
type: Boolean,
|
||||||
backgroundColor?: string
|
default: false,
|
||||||
zIndex?: number
|
|
||||||
lockScroll?: boolean
|
|
||||||
}>(),
|
|
||||||
{
|
|
||||||
backgroundColor: 'rgba(0, 0, 0, 0.7)',
|
|
||||||
zIndex: 10,
|
|
||||||
lockScroll: true,
|
|
||||||
},
|
},
|
||||||
)
|
zIndex: {
|
||||||
|
type: Number,
|
||||||
|
default: 10,
|
||||||
|
},
|
||||||
|
closeOnClickOverlay: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits(['click', 'update:show'])
|
||||||
(e: 'click'): void
|
|
||||||
}>()
|
|
||||||
|
|
||||||
const handleClick = (event: Event) => {
|
const handleClick = (event: Event) => {
|
||||||
emit('click')
|
emit('click', event)
|
||||||
|
if (props.closeOnClickOverlay) {
|
||||||
|
emit('update:show', false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style scoped>
|
||||||
.overlay {
|
.overlay {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
|
||||||
right: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
opacity: 0;
|
left: 0;
|
||||||
visibility: hidden;
|
background-color: rgba(0, 0, 0, 0.7);
|
||||||
transition: all 0.3s ease;
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
&-show {
|
.overlay-show {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<view class="flex flex-col p-[32rpx] bg-[#fff] mt-16rpx">
|
<view class="flex flex-col px-[32rpx] pt-[32rpx] bg-[#fff] mt-16rpx">
|
||||||
<text class="text-[32rpx] font-semibold text-[#333]">院系设置</text>
|
<text class="text-[32rpx] font-semibold text-[#333]">院系设置</text>
|
||||||
|
|
||||||
<WXXTable :data="tableData.slice(0, 4)" class="my-[24rpx]">
|
<WXXTable :data="tableData.slice(0, 4)" class="my-[24rpx]">
|
||||||
|
|
@ -15,23 +15,21 @@
|
||||||
<view class="i-carbon-chevron-down rotate-270"></view>
|
<view class="i-carbon-chevron-down rotate-270"></view>
|
||||||
</button>
|
</button>
|
||||||
</view>
|
</view>
|
||||||
<MessageBox v-model:show="show" title="院系设置">
|
<ActionSheet v-model:show="show" title="院系设置" :show-close="true">
|
||||||
<template>
|
<view class="mx-[32rpx]">
|
||||||
<scroll-view class="max-h-600rpx mb-[32rpx] overflow-y-auto" :scroll-y="true">
|
<WXXTable :data="tableData">
|
||||||
<WXXTable :data="tableData">
|
<WXXTableCol prop="name" label="学院" width="30%"></WXXTableCol>
|
||||||
<WXXTableCol prop="name" label="学院" width="30%"></WXXTableCol>
|
<WXXTableCol prop="major" label="所含专业" width="70%"></WXXTableCol>
|
||||||
<WXXTableCol prop="major" label="所含专业" width="70%"></WXXTableCol>
|
</WXXTable>
|
||||||
</WXXTable>
|
</view>
|
||||||
</scroll-view>
|
</ActionSheet>
|
||||||
</template>
|
|
||||||
</MessageBox>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import MessageBox from '@/pages-sub/components/messageBox/MessageBox.vue'
|
|
||||||
import WXXTable from '@/pages-sub/components/table/Table.vue'
|
import WXXTable from '@/pages-sub/components/table/Table.vue'
|
||||||
import WXXTableCol from '@/pages-sub/components/table/TableCol.vue'
|
import WXXTableCol from '@/pages-sub/components/table/TableCol.vue'
|
||||||
import { getUniversityListByProvince } from '@/service/index/api'
|
import { getUniversityListByProvince } from '@/service/index/api'
|
||||||
|
import ActionSheet from '@/pages-sub/components/ActionSheet.vue'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: {
|
id: {
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,15 @@
|
||||||
<template>
|
<template>
|
||||||
<scroll-view class="pb-safe" :scroll-y="false">
|
<view class="pb-safe overflow-y-auto">
|
||||||
<view class="mx-[32rpx] border-item" v-for="item in recruits" :key="item.id">
|
<view class="mx-[32rpx] border-item" v-for="item in recruits" :key="item.id">
|
||||||
<view class="text-[#303030] text-[28rpx] font-normal py-[32rpx]" @click="navigateTo(item.id)">
|
<view
|
||||||
|
class="text-[#303030] text-[28rpx] font-normal py-[32rpx] flex items-center justify-between"
|
||||||
|
@click="navigateTo(item.id)"
|
||||||
|
>
|
||||||
{{ item.title }}
|
{{ item.title }}
|
||||||
|
<view class="i-carbon-chevron-down rotate-270"></view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</scroll-view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
<view
|
<view
|
||||||
@click="handleShow(1)"
|
@click="handleShow(1)"
|
||||||
class="px-[24rpx] py-[8rpx] bg-[#f8f8f8] rounded-[8rpx] flex justify-between items-center text-[24rpx]"
|
class="px-[24rpx] py-[8rpx] bg-[#f8f8f8] rounded-[8rpx] flex justify-between items-center text-[24rpx]"
|
||||||
|
v-show="year"
|
||||||
>
|
>
|
||||||
{{ year }}
|
{{ year }}
|
||||||
<view class="i-carbon-chevron-down rotate-270"></view>
|
<view class="i-carbon-chevron-down rotate-270"></view>
|
||||||
|
|
@ -14,6 +15,7 @@
|
||||||
<view
|
<view
|
||||||
@click="handleShow(2)"
|
@click="handleShow(2)"
|
||||||
class="px-[24rpx] py-[8rpx] bg-[#f8f8f8] rounded-[8rpx] flex justify-between items-center text-[24rpx]"
|
class="px-[24rpx] py-[8rpx] bg-[#f8f8f8] rounded-[8rpx] flex justify-between items-center text-[24rpx]"
|
||||||
|
v-show="batche"
|
||||||
>
|
>
|
||||||
{{ batche }}
|
{{ batche }}
|
||||||
<view class="i-carbon-chevron-down rotate-270"></view>
|
<view class="i-carbon-chevron-down rotate-270"></view>
|
||||||
|
|
@ -35,7 +37,7 @@
|
||||||
<CustomPickerView :list="pickList" v-model:modelValue="pickValue" />
|
<CustomPickerView :list="pickList" v-model:modelValue="pickValue" />
|
||||||
</view>
|
</view>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<view class="flex items-center justify-between px-[32rpx]">
|
<view class="flex items-center justify-between px-[32rpx] gap-[32rpx]">
|
||||||
<view class="cancel-btn" @click="show = false">取消</view>
|
<view class="cancel-btn" @click="show = false">取消</view>
|
||||||
<view class="submit-btn" @click="handleConfirm">确认</view>
|
<view class="submit-btn" @click="handleConfirm">确认</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<template>
|
<template>
|
||||||
<view class="flex flex-col p-[32rpx] bg-[#fff] mt-16rpx" v-show="subjectIntroduceList.length > 0">
|
<view class="flex flex-col p-[32rpx] bg-[#fff]" v-show="subjectIntroduceList.length > 0">
|
||||||
<text class="text-[32rpx] font-semibold text-[#333]">
|
<text class="text-[32rpx] font-semibold text-[#333]">
|
||||||
双一流学科·{{ subjectIntroduceList.length }}
|
双一流学科·{{ subjectIntroduceList.length }}
|
||||||
</text>
|
</text>
|
||||||
<text class="text-[22rpx] font-normal text-[#636363] my-[24rpx] line-clamp-3">
|
<text class="text-[24rpx] font-normal text-[#636363] my-[24rpx] line-clamp-3">
|
||||||
{{ subjectIntroduceList.join(',') }}
|
{{ subjectIntroduceList.join(',') }}
|
||||||
</text>
|
</text>
|
||||||
<button
|
<button
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
<text class="text-[32rpx] font-semibold text-[#333]">
|
<text class="text-[32rpx] font-semibold text-[#333]">
|
||||||
学科评估·{{ assessmentSubjectList.length }}
|
学科评估·{{ assessmentSubjectList.length }}
|
||||||
</text>
|
</text>
|
||||||
<text class="text-[22rpx] font-normal text-[#636363] my-[24rpx] line-clamp-3">
|
<text class="text-[24rpx] font-normal text-[#636363] my-[24rpx] line-clamp-3">
|
||||||
{{ assessmentSubjectList.join(',') }}
|
{{ assessmentSubjectList.join(',') }}
|
||||||
</text>
|
</text>
|
||||||
<button
|
<button
|
||||||
|
|
@ -34,11 +34,11 @@
|
||||||
<view class="i-carbon-chevron-down rotate-270"></view>
|
<view class="i-carbon-chevron-down rotate-270"></view>
|
||||||
</button>
|
</button>
|
||||||
</view>
|
</view>
|
||||||
<view class="flex flex-col p-[32rpx] bg-[#fff] mt-[16rpx]">
|
<view class="flex flex-col p-[32rpx] bg-[#fff] mt-[16rpx]" v-show="featureSubjectList.length > 0">
|
||||||
<text class="text-[32rpx] font-semibold text-[#333]">
|
<text class="text-[32rpx] font-semibold text-[#333]">
|
||||||
特色专业·{{ featureSubjectList.length }}
|
特色专业·{{ featureSubjectList.length }}
|
||||||
</text>
|
</text>
|
||||||
<text class="text-[22rpx] font-normal text-[#636363] my-[24rpx]">
|
<text class="text-[24rpx] font-normal text-[#636363] my-[24rpx]">
|
||||||
{{ featureSubjectList.join(',') }}
|
{{ featureSubjectList.join(',') }}
|
||||||
</text>
|
</text>
|
||||||
<button
|
<button
|
||||||
|
|
@ -51,16 +51,16 @@
|
||||||
</button>
|
</button>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<MessageBox v-model:show="show" :title="title">
|
<ActionSheet v-model:show="show" :title="title" :show-close="true">
|
||||||
<template>
|
<view class="text-[24rpx] text-[#636363] px-[32rpx] pt-[32rpx]">
|
||||||
<view class="text-[22rpx] text-[#636363] max-h-600rpx mb-[32rpx]">{{ innerContent }}</view>
|
{{ innerContent }}
|
||||||
</template>
|
</view>
|
||||||
</MessageBox>
|
</ActionSheet>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { getSubjectIntroduceList } from '@/service/index/api'
|
import { getSubjectIntroduceList } from '@/service/index/api'
|
||||||
import MessageBox from '@/pages-sub/components/messageBox/MessageBox.vue'
|
import ActionSheet from '@/pages-sub/components/ActionSheet.vue'
|
||||||
|
|
||||||
const subjectIntroduceList = ref([])
|
const subjectIntroduceList = ref([])
|
||||||
const assessmentSubjectList = ref([])
|
const assessmentSubjectList = ref([])
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="line-clamp-4 mt-[14rpx] text-[22rpx] text-[#636363]">
|
<view class="line-clamp-4 mt-[14rpx] text-[24rpx] text-[#636363]">
|
||||||
{{ universityResult?.detail }}
|
{{ universityResult?.detail }}
|
||||||
</view>
|
</view>
|
||||||
<button
|
<button
|
||||||
|
|
@ -35,19 +35,18 @@
|
||||||
<view class="i-carbon-chevron-down rotate-270"></view>
|
<view class="i-carbon-chevron-down rotate-270"></view>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<MessageBox v-model:show="show" title="院校简介">
|
<ActionSheet v-model:show="show" title="院校简介" :show-close="true">
|
||||||
<template>
|
<view class="text-[22rpx] text-[#636363] px-[32rpx] pt-[32rpx]">
|
||||||
<scroll-view class="text-[22rpx] text-[#636363] max-h-600rpx mb-[32rpx]" :scroll-y="true">
|
{{ universityResult?.detail }}
|
||||||
{{ universityResult?.detail }}
|
</view>
|
||||||
</scroll-view>
|
</ActionSheet>
|
||||||
</template>
|
|
||||||
</MessageBox>
|
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { UniversityResult } from '@/types/app-type'
|
import { UniversityResult } from '@/types/app-type'
|
||||||
import MessageBox from '@/pages-sub/components/messageBox/MessageBox.vue'
|
|
||||||
|
import ActionSheet from '@/pages-sub/components/ActionSheet.vue'
|
||||||
|
|
||||||
defineProps({
|
defineProps({
|
||||||
universityResult: {
|
universityResult: {
|
||||||
|
|
|
||||||
|
|
@ -35,21 +35,42 @@
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</Navbar>
|
</Navbar>
|
||||||
<drop-menu>
|
<view style="box-shadow: 0rpx 8rpx 8rpx 0rpx rgba(225, 225, 225, 0.2)">
|
||||||
<drop-menu-item
|
<drop-menu ref="dropMenuRef">
|
||||||
v-for="item in subMenu"
|
<drop-menu-item
|
||||||
:key="item.id"
|
v-for="item in subMenu"
|
||||||
:title="item.title"
|
:key="item.id"
|
||||||
@open="handleOpenSubMenu(item.id)"
|
:title="item.title"
|
||||||
custom-class="flex items-center"
|
@open="handleOpenSubMenu(item.id)"
|
||||||
>
|
custom-class="flex items-center"
|
||||||
<view class="mx-[24rpx] my-[16rpx]">
|
>
|
||||||
<Region v-if="currentMenu === 1" @changeName="handleRegionChange" />
|
<view class="mx-[24rpx] my-[16rpx]">
|
||||||
<Nature v-if="currentMenu === 2" @changeName="handleNatureChange" />
|
<Region
|
||||||
<UniType v-if="currentMenu === 3" @changeName="handleUniTypeChange" />
|
:defaultValue="regionKeyInfo"
|
||||||
</view>
|
v-if="currentMenu === 1"
|
||||||
</drop-menu-item>
|
@changeName="handleRegionChange"
|
||||||
</drop-menu>
|
@change="handleRegionIdChange"
|
||||||
|
/>
|
||||||
|
<Nature
|
||||||
|
v-if="currentMenu === 2"
|
||||||
|
:defaultValue="natureKeyInfo"
|
||||||
|
@changeName="handleNatureChange"
|
||||||
|
@change="handleNatureIdChange"
|
||||||
|
/>
|
||||||
|
<UniType
|
||||||
|
v-if="currentMenu === 3"
|
||||||
|
:defaultValue="uniTypeKeyInfo"
|
||||||
|
@changeName="handleUniTypeChange"
|
||||||
|
@change="handleUniTypeIdChange"
|
||||||
|
/>
|
||||||
|
</view>
|
||||||
|
<view class="flex items-center justify-between px-[32rpx] pb-[32rpx]">
|
||||||
|
<view class="cancel-btn" @click="handleClear">清空</view>
|
||||||
|
<view class="submit-btn" @click="handleCheck">查看</view>
|
||||||
|
</view>
|
||||||
|
</drop-menu-item>
|
||||||
|
</drop-menu>
|
||||||
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<view
|
<view
|
||||||
class="item-wrapper"
|
class="item-wrapper"
|
||||||
|
|
@ -60,21 +81,21 @@
|
||||||
>
|
>
|
||||||
<view class="flex items-center p-[32rpx] w-full">
|
<view class="flex items-center p-[32rpx] w-full">
|
||||||
<image class="w-[80rpx] h-[80rpx] ml-[18rpx] mr-[24rpx]" :src="item.logo"></image>
|
<image class="w-[80rpx] h-[80rpx] ml-[18rpx] mr-[24rpx]" :src="item.logo"></image>
|
||||||
<view class="flex justify-between items-center flex-1">
|
<view class="flex justify-between items-center flex-1 overflow-y-hidden">
|
||||||
<view class="flex flex-col" hover-class="none">
|
<view class="flex flex-col w-full" hover-class="none">
|
||||||
<text class="text-[28rpx] text-[#333] font-semibold mb-[6rpx]">
|
<text class="text-[28rpx] text-[#333] font-semibold mb-[6rpx]">
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</text>
|
</text>
|
||||||
<view class="flex items-center gap-[8rpx] mb-[16rpx]">
|
<view class="flex items-center gap-[8rpx] mb-[16rpx] max-w-[90%]">
|
||||||
<view
|
<view
|
||||||
class="truncate max-w-[176rpx] bg-[#f8f8f8] rounded-[4rpx] text-[20rpx] px-[8rpx] py-[2rpx]"
|
class="truncate bg-[#f8f8f8] rounded-[4rpx] text-[20rpx] px-[8rpx] py-[2rpx] text-[#666]"
|
||||||
v-for="(fea, fIndex) in item.features.slice(0, 5)"
|
v-for="(fea, fIndex) in item.features.slice(0, 5)"
|
||||||
:key="fIndex"
|
:key="fIndex"
|
||||||
>
|
>
|
||||||
{{ fea }}
|
{{ fea }}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<text class="text-[22rpx] text-[#999] font-normal">
|
<text class="text-[22rpx] text-[#333] font-normal">
|
||||||
{{ item.cityName }}.{{ item.nature }}
|
{{ item.cityName }}.{{ item.nature }}
|
||||||
</text>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
@ -113,10 +134,16 @@ const subMenu = [
|
||||||
{ id: 3, title: '类型' },
|
{ id: 3, title: '类型' },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
const dropMenuRef = ref()
|
||||||
|
|
||||||
const regionInfo = ref([]) // 省份信息
|
const regionInfo = ref([]) // 省份信息
|
||||||
const uniTypeInfo = ref([]) // 层次信息
|
const uniTypeInfo = ref([]) // 层次信息
|
||||||
const natureInfo = ref([]) // 类型信息
|
const natureInfo = ref([]) // 类型信息
|
||||||
|
|
||||||
|
const regionKeyInfo = ref([]) // 省份信息
|
||||||
|
const uniTypeKeyInfo = ref([]) // 层次信息
|
||||||
|
const natureKeyInfo = ref([]) // 类型信息
|
||||||
|
|
||||||
const currentMenu = ref(1)
|
const currentMenu = ref(1)
|
||||||
const handleOpenSubMenu = (id: number) => {
|
const handleOpenSubMenu = (id: number) => {
|
||||||
currentMenu.value = id
|
currentMenu.value = id
|
||||||
|
|
@ -147,19 +174,40 @@ const itemClick = (item, index) => {
|
||||||
uni.navigateTo({ url: `/pages-sub/home/college/info?collegeId=${item._id}` })
|
uni.navigateTo({ url: `/pages-sub/home/college/info?collegeId=${item._id}` })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleClear = () => {
|
||||||
|
regionKeyInfo.value = []
|
||||||
|
uniTypeKeyInfo.value = []
|
||||||
|
natureKeyInfo.value = []
|
||||||
|
dropMenuRef.value.closeDropMenu()
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleRegionIdChange = (val) => {
|
||||||
|
regionKeyInfo.value = val
|
||||||
|
}
|
||||||
|
|
||||||
const handleRegionChange = (val) => {
|
const handleRegionChange = (val) => {
|
||||||
regionInfo.value = val
|
regionInfo.value = val
|
||||||
paging.value.reload()
|
}
|
||||||
|
|
||||||
|
const handleUniTypeIdChange = (val) => {
|
||||||
|
uniTypeKeyInfo.value = val
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleUniTypeChange = (val) => {
|
const handleUniTypeChange = (val) => {
|
||||||
uniTypeInfo.value = val
|
uniTypeInfo.value = val
|
||||||
paging.value.reload()
|
}
|
||||||
|
|
||||||
|
const handleNatureIdChange = (val) => {
|
||||||
|
natureKeyInfo.value = val
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleNatureChange = (val) => {
|
const handleNatureChange = (val) => {
|
||||||
natureInfo.value = val
|
natureInfo.value = val
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleCheck = () => {
|
||||||
paging.value.reload()
|
paging.value.reload()
|
||||||
|
dropMenuRef.value.closeDropMenu()
|
||||||
}
|
}
|
||||||
|
|
||||||
onShow(() => {
|
onShow(() => {
|
||||||
|
|
@ -169,4 +217,5 @@ onShow(() => {
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import '../styles/navbar_search.scss';
|
@import '../styles/navbar_search.scss';
|
||||||
|
@import '@/pages-sub/home/styles/picker-view-btn.scss';
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -15,12 +15,13 @@
|
||||||
:bordered="false"
|
:bordered="false"
|
||||||
left-arrow
|
left-arrow
|
||||||
@click-left="navigatorBack"
|
@click-left="navigatorBack"
|
||||||
|
:title="universityBaseInfo?.universityResult.name"
|
||||||
content-class="justify-between"
|
content-class="justify-between"
|
||||||
></Navbar>
|
></Navbar>
|
||||||
<view class="custom-background h-[200rpx] w-full absolute top-0 left-0 z-[-1]"></view>
|
<view class="custom-background h-[200rpx] w-full absolute top-0 left-0 z-[-1]"></view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<scroll-view class="flex-1 flex flex-col pb-safe" :scroll-y="true">
|
<view class="flex-1 flex flex-col pb-safe overflow-y-auto">
|
||||||
<view class="flex items-center p-[32rpx]" hover-class="none">
|
<view class="flex items-center p-[32rpx]" hover-class="none">
|
||||||
<image
|
<image
|
||||||
class="w-[104rpx] h-[104rpx]"
|
class="w-[104rpx] h-[104rpx]"
|
||||||
|
|
@ -47,7 +48,7 @@
|
||||||
</button>
|
</button>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="card-swiper mb-[32rpx] h-[126rpx]">
|
<view class="mb-[32rpx] h-[126rpx]">
|
||||||
<swiper
|
<swiper
|
||||||
class="mx-[32rpx]"
|
class="mx-[32rpx]"
|
||||||
circular
|
circular
|
||||||
|
|
@ -56,26 +57,31 @@
|
||||||
:display-multiple-items="universityBaseInfo?.universityResult.imglist ? 3 : 0"
|
:display-multiple-items="universityBaseInfo?.universityResult.imglist ? 3 : 0"
|
||||||
>
|
>
|
||||||
<swiper-item
|
<swiper-item
|
||||||
v-for="item in universityBaseInfo?.universityResult.imglist"
|
v-for="(item, index) in universityBaseInfo?.universityResult.imglist"
|
||||||
:key="item"
|
:key="item"
|
||||||
class="flex justify-center"
|
class="flex justify-center"
|
||||||
>
|
>
|
||||||
<image :src="item" mode="scaleToFill" class="w-full h-full mx-[4rpx] rounded-[8rpx]" />
|
<image
|
||||||
|
:src="item"
|
||||||
|
mode="scaleToFill"
|
||||||
|
class="w-full h-full mx-[4rpx] rounded-[8rpx]"
|
||||||
|
@click.stop="handlePreviewImage(item, index)"
|
||||||
|
/>
|
||||||
</swiper-item>
|
</swiper-item>
|
||||||
</swiper>
|
</swiper>
|
||||||
</view>
|
</view>
|
||||||
|
<view class="sticky top-0 z-9">
|
||||||
<z-tabs
|
<z-tabs
|
||||||
:current="currentTab"
|
:current="currentTab"
|
||||||
:list="tabsList"
|
:list="tabsList"
|
||||||
:scrollCount="4"
|
:scrollCount="4"
|
||||||
inactive-color="#BFBFBF"
|
inactive-color="#BFBFBF"
|
||||||
active-color="#303030"
|
active-color="#303030"
|
||||||
:bar-style="{ backgroundColor: '#1580FF' }"
|
:bar-style="{ backgroundColor: '#1580FF' }"
|
||||||
:tabsStyle="{ position: 'sticky', top: '0', zIndex: '9' }"
|
@change="handleTabChange"
|
||||||
@change="handleTabChange"
|
v-bind="{} as any"
|
||||||
v-bind="{} as any"
|
/>
|
||||||
/>
|
</view>
|
||||||
<view class="bg-[#f8f8f8]" v-show="currentTab === 0">
|
<view class="bg-[#f8f8f8]" v-show="currentTab === 0">
|
||||||
<Profile :university-result="universityBaseInfo?.universityResult" />
|
<Profile :university-result="universityBaseInfo?.universityResult" />
|
||||||
<FirstClass :id="collegeId" />
|
<FirstClass :id="collegeId" />
|
||||||
|
|
@ -87,7 +93,7 @@
|
||||||
<EnrollmentIntro :id="collegeId" v-show="currentTab === 2" />
|
<EnrollmentIntro :id="collegeId" v-show="currentTab === 2" />
|
||||||
<EnrollmentMark :id="collegeId" v-show="currentTab === 3" />
|
<EnrollmentMark :id="collegeId" v-show="currentTab === 3" />
|
||||||
<Situation :id="collegeId" v-show="currentTab === 4" />
|
<Situation :id="collegeId" v-show="currentTab === 4" />
|
||||||
</scroll-view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
@ -119,6 +125,13 @@ const universityBaseInfo = ref()
|
||||||
|
|
||||||
const collegeId = ref(0)
|
const collegeId = ref(0)
|
||||||
|
|
||||||
|
const handlePreviewImage = (src: string, index: number) => {
|
||||||
|
uni.previewImage({
|
||||||
|
urls: universityBaseInfo.value?.universityResult.imglist,
|
||||||
|
current: index,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
onLoad((options) => {
|
onLoad((options) => {
|
||||||
collegeId.value = Number(options.collegeId) || 0
|
collegeId.value = Number(options.collegeId) || 0
|
||||||
getUniversityInfo({ Id: collegeId.value }).then((res) => {
|
getUniversityInfo({ Id: collegeId.value }).then((res) => {
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
<CheckGroup
|
<CheckGroup
|
||||||
:list="infoList"
|
:list="infoList"
|
||||||
@change="handleChange"
|
@change="handleChange"
|
||||||
:default-value="defaultInfo"
|
|
||||||
value-key="id"
|
value-key="id"
|
||||||
label-key="name"
|
label-key="name"
|
||||||
v-bind="$attrs"
|
v-bind="$attrs"
|
||||||
|
|
@ -21,12 +20,11 @@ getNature().then((res) => {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const defaultInfo = ref<string[]>([])
|
const emits = defineEmits(['changeName', 'change'])
|
||||||
|
|
||||||
const emits = defineEmits(['changeName'])
|
|
||||||
|
|
||||||
const handleChange = (val: any) => {
|
const handleChange = (val: any) => {
|
||||||
const names = infoList.value.filter((item) => val.includes(item.id)).map((item) => item.name)
|
const names = infoList.value.filter((item) => val.includes(item.id)).map((item) => item.name)
|
||||||
emits('changeName', names)
|
emits('changeName', names)
|
||||||
|
emits('change', val)
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { getBatchData, getWxUserInfo } from '@/service/index/api'
|
import { getBatchDynamicData, getWxUserInfo } from '@/service/index/api'
|
||||||
import RadioGroup from '@/pages-sub/components/radio-group/RadioGroup.vue'
|
import RadioGroup from '@/pages-sub/components/radio-group/RadioGroup.vue'
|
||||||
import Radio from '@/pages-sub/components/radio-group/Radio.vue'
|
import Radio from '@/pages-sub/components/radio-group/Radio.vue'
|
||||||
import { useUserStore } from '@/store/user'
|
import { useUserStore } from '@/store/user'
|
||||||
|
|
@ -37,9 +37,14 @@ const choosePhase = ref('')
|
||||||
const emits = defineEmits(['changeName', 'change'])
|
const emits = defineEmits(['changeName', 'change'])
|
||||||
|
|
||||||
const fetchBatchData = () => {
|
const fetchBatchData = () => {
|
||||||
getBatchData(userStore.userInfo.batchDataUrl).then((res) => {
|
let _provinceCode = userStore.userInfo.estimatedAchievement.provinceCode
|
||||||
|
let _requireSubject = userStore.userInfo.estimatedAchievement.requireSubject
|
||||||
|
getBatchDynamicData({
|
||||||
|
LocationCode: _provinceCode,
|
||||||
|
Course: _requireSubject.length > 0 ? _requireSubject[0].name : '',
|
||||||
|
}).then((res) => {
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
phaseList.value = res.result[0].batches
|
phaseList.value = (res.result as { batches: any[] }).batches
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
choosePhase.value = userStore.userInfo.batchName
|
choosePhase.value = userStore.userInfo.batchName
|
||||||
|
|
@ -47,26 +52,27 @@ const fetchBatchData = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
onLoad(() => {
|
onLoad(() => {
|
||||||
if (userStore.userInfo.batchDataUrl) {
|
fetchBatchData()
|
||||||
fetchBatchData()
|
// if (userStore.userInfo.batchDataUrl) {
|
||||||
} else {
|
// fetchBatchData()
|
||||||
getWxUserInfo().then((resp) => {
|
// } else {
|
||||||
if (resp.code === 200) {
|
// getWxUserInfo().then((resp) => {
|
||||||
const infoData = resp.result as unknown as {
|
// if (resp.code === 200) {
|
||||||
userExtend: { provinceCode: string }
|
// const infoData = resp.result as unknown as {
|
||||||
zyBatches: any[]
|
// userExtend: { provinceCode: string }
|
||||||
batchDataUrl: string
|
// zyBatches: any[]
|
||||||
batchName: string
|
// batchDataUrl: string
|
||||||
}
|
// batchName: string
|
||||||
userStore.setEstimatedAchievement(infoData.userExtend)
|
// }
|
||||||
userStore.setZyBatches(infoData.zyBatches)
|
// userStore.setEstimatedAchievement(infoData.userExtend)
|
||||||
userStore.setBatchDataUrl(infoData.batchDataUrl)
|
// userStore.setZyBatches(infoData.zyBatches)
|
||||||
userStore.setBatchName(infoData.batchName)
|
// userStore.setBatchDataUrl(infoData.batchDataUrl)
|
||||||
|
// userStore.setBatchName(infoData.batchName)
|
||||||
|
|
||||||
fetchBatchData()
|
// fetchBatchData()
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
}
|
// }
|
||||||
})
|
})
|
||||||
|
|
||||||
const handleChange = (val: string) => {
|
const handleChange = (val: string) => {
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ export default defineComponent({
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.progress-bar {
|
.progress-bar {
|
||||||
width: 100%;
|
|
||||||
background-color: #f0f0f0;
|
background-color: #f0f0f0;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,7 @@
|
||||||
<input
|
<input
|
||||||
v-model="score"
|
v-model="score"
|
||||||
placeholder="请输入分数"
|
placeholder="请输入分数"
|
||||||
@confirm="handleChange"
|
@input="handleChange"
|
||||||
input-mode="numeric"
|
|
||||||
type="number"
|
type="number"
|
||||||
:focus="true"
|
:focus="true"
|
||||||
class="flex-1"
|
class="flex-1"
|
||||||
|
|
@ -80,7 +79,7 @@
|
||||||
({{ optionalSubjectList.length }}选{{ requireSubjectList.length > 0 ? 2 : 3 }})
|
({{ optionalSubjectList.length }}选{{ requireSubjectList.length > 0 ? 2 : 3 }})
|
||||||
</text>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
<CheckboxGroup v-model="optionalSubject" :max="3">
|
<CheckboxGroup v-model="optionalSubject" :max="requireSubjectList.length > 0 ? 2 : 3">
|
||||||
<Checkbox
|
<Checkbox
|
||||||
v-for="item in optionalSubjectList"
|
v-for="item in optionalSubjectList"
|
||||||
:key="item.code"
|
:key="item.code"
|
||||||
|
|
@ -179,7 +178,8 @@ const btnFlag = computed(() => {
|
||||||
|
|
||||||
onShow(() => {
|
onShow(() => {
|
||||||
userStore.$subscribe(() => {
|
userStore.$subscribe(() => {
|
||||||
requireSubject.value = userStore.userInfo.estimatedAchievement.requireSubject[0].code ?? ''
|
const _requireSubject = userStore.userInfo.estimatedAchievement.requireSubject
|
||||||
|
requireSubject.value = _requireSubject.length > 0 ? _requireSubject[0].code : ''
|
||||||
optionalSubject.value = userStore.userInfo.estimatedAchievement.optionalSubject.map(
|
optionalSubject.value = userStore.userInfo.estimatedAchievement.optionalSubject.map(
|
||||||
(item) => item.code,
|
(item) => item.code,
|
||||||
)
|
)
|
||||||
|
|
@ -206,10 +206,9 @@ const saveScore = () => {
|
||||||
|
|
||||||
const subjects = data.optionalSubject
|
const subjects = data.optionalSubject
|
||||||
.map((item) => item.simplename)
|
.map((item) => item.simplename)
|
||||||
.concat(data.requireSubject ? data.requireSubject[0].simplename : [])
|
.concat(data.requireSubject.length > 0 ? data.requireSubject[0].simplename : [])
|
||||||
.join(',')
|
.join(',')
|
||||||
|
|
||||||
console.log(subjects, data.requireSubject)
|
|
||||||
userStore.setEstimatedAchievement({
|
userStore.setEstimatedAchievement({
|
||||||
...data,
|
...data,
|
||||||
subjectGroup: subjects,
|
subjectGroup: subjects,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<view class="flex flex-col py-[32rpx] px-[24rpx] bg-[#fff] mt-16rpx">
|
<view class="flex flex-col py-[32rpx] px-[24rpx] bg-[#fff] mt-16rpx">
|
||||||
<text class="text-[32rpx] font-semibold text-[#333]">就业方向</text>
|
<text class="text-[32rpx] font-semibold text-[#333]">就业方向</text>
|
||||||
<text class="text-[22rpx] font-normal text-[#636363] my-[24rpx] line-clamp-3">
|
<text class="text-[24rpx] font-normal text-[#636363] my-[24rpx] line-clamp-3">
|
||||||
{{ careerInfo.jobs || '暂无' }}
|
{{ careerInfo.jobs || '暂无' }}
|
||||||
</text>
|
</text>
|
||||||
<button
|
<button
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
<view class="h-[16rpx] bg-[#f8f8f8]"></view>
|
<view class="h-[16rpx] bg-[#f8f8f8]"></view>
|
||||||
<view class="flex flex-col py-[32rpx] px-[24rpx] bg-[#fff]">
|
<view class="flex flex-col py-[32rpx] px-[24rpx] bg-[#fff]">
|
||||||
<text class="text-[32rpx] font-semibold text-[#333]">具体职位</text>
|
<text class="text-[32rpx] font-semibold text-[#333]">具体职位</text>
|
||||||
<text class="text-[22rpx] font-normal text-[#636363] my-[24rpx] line-clamp-3">
|
<text class="text-[24rpx] font-normal text-[#636363] my-[24rpx] line-clamp-3">
|
||||||
{{ careerInfo.profession || '暂无' }}
|
{{ careerInfo.profession || '暂无' }}
|
||||||
</text>
|
</text>
|
||||||
<button
|
<button
|
||||||
|
|
@ -34,31 +34,25 @@
|
||||||
<view class="flex flex-col py-[32rpx] px-[24rpx] bg-[#fff]">
|
<view class="flex flex-col py-[32rpx] px-[24rpx] bg-[#fff]">
|
||||||
<text class="text-[32rpx] font-semibold text-[#333]">从事行业</text>
|
<text class="text-[32rpx] font-semibold text-[#333]">从事行业</text>
|
||||||
<view class="my-[24rpx] flex flex-col gap-[30rpx]">
|
<view class="my-[24rpx] flex flex-col gap-[30rpx]">
|
||||||
<view
|
<view v-for="item in careerInfo.rates" :key="item.key" class="grid grid-cols-12 items-center">
|
||||||
v-for="item in careerInfo.rates"
|
<text class="col-span-4 text-[24rpx]">{{ item.key }}</text>
|
||||||
:key="item.key"
|
<ProgressBar :progress="item.value ?? 0" class="col-span-6 h-[16rpx]" />
|
||||||
class="grid grid-cols-12 gap-[16rpx] items-center"
|
<text class="col-span-2 text-end">{{ item.value ?? 0 }}%</text>
|
||||||
>
|
|
||||||
<text class="col-span-4">{{ item.key }}</text>
|
|
||||||
<ProgressBar :progress="item.value" class="flex-1 col-span-7 h-[16rpx]" />
|
|
||||||
<text class="col-span-1">{{ item.value }}%</text>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<MessageBox v-model:show="show" :title="title">
|
<ActionSheet v-model:show="show" :title="title" :show-close="true">
|
||||||
<template>
|
<view class="mx-[32rpx] mt-[32rpx] text-[24rpx] text-[#636363]" v-show="showType !== 3">
|
||||||
<view class="text-[22rpx] text-[#636363] max-h-600rpx mb-[32rpx]" v-show="showType !== 3">
|
{{ innerContent }}
|
||||||
{{ innerContent }}
|
</view>
|
||||||
</view>
|
</ActionSheet>
|
||||||
</template>
|
|
||||||
</MessageBox>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import MessageBox from '@/pages-sub/components/messageBox/MessageBox.vue'
|
|
||||||
import { getCareerProspects } from '@/service/index/api'
|
import { getCareerProspects } from '@/service/index/api'
|
||||||
import ProgressBar from '../../components/ProgressBar.vue'
|
import ProgressBar from '../../components/ProgressBar.vue'
|
||||||
|
import ActionSheet from '@/pages-sub/components/ActionSheet.vue'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
zydm: {
|
zydm: {
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<view class="flex flex-col py-[32rpx] px-[24rpx] bg-[#fff] mt-16rpx">
|
<view class="flex flex-col py-[32rpx] px-[24rpx] bg-[#fff] mt-16rpx">
|
||||||
<text class="text-[32rpx] font-semibold text-[#333]">专业介绍</text>
|
<text class="text-[32rpx] font-semibold text-[#333]">专业介绍</text>
|
||||||
<text class="text-[24rpx] font-semibold text-[#333] mt-[32rpx] mb-[26rpx]">专业简介</text>
|
<text class="text-[24rpx] font-semibold text-[#333] mt-[32rpx] mb-[26rpx]">专业简介</text>
|
||||||
<text class="text-[22rpx] font-normal text-[#636363] my-[24rpx] line-clamp-3">
|
<text class="text-[24rpx] font-normal text-[#636363] my-[24rpx] line-clamp-3">
|
||||||
{{ zyjx || '暂无' }}
|
{{ zyjx || '暂无' }}
|
||||||
</text>
|
</text>
|
||||||
<button
|
<button
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
<view class="flex flex-col py-[32rpx] px-[24rpx] bg-[#fff]">
|
<view class="flex flex-col py-[32rpx] px-[24rpx] bg-[#fff]">
|
||||||
<text class="text-[32rpx] font-semibold text-[#333]">课程要求</text>
|
<text class="text-[32rpx] font-semibold text-[#333]">课程要求</text>
|
||||||
<text class="text-[24rpx] font-semibold text-[#333] mt-[32rpx] mb-[26rpx]">主干课程</text>
|
<text class="text-[24rpx] font-semibold text-[#333] mt-[32rpx] mb-[26rpx]">主干课程</text>
|
||||||
<text class="text-[22rpx] font-normal text-[#636363] my-[24rpx] line-clamp-3">
|
<text class="text-[24rpx] font-normal text-[#636363] my-[24rpx] line-clamp-3">
|
||||||
{{ kyfx.map((item) => item.zymc).join(',') || '暂无' }}
|
{{ kyfx.map((item) => item.zymc).join(',') || '暂无' }}
|
||||||
</text>
|
</text>
|
||||||
|
|
||||||
|
|
@ -50,26 +50,23 @@
|
||||||
<view class="i-carbon-chevron-down rotate-270"></view>
|
<view class="i-carbon-chevron-down rotate-270"></view>
|
||||||
</button>
|
</button>
|
||||||
</view>
|
</view>
|
||||||
|
<ActionSheet v-model:show="show" :title="title" :show-close="true">
|
||||||
<MessageBox v-model:show="show" :title="title">
|
<view class="mx-[32rpx] mt-[32rpx]">
|
||||||
<template>
|
<view class="text-[24rpx] text-[#636363]" v-show="showType !== 3">
|
||||||
<view class="text-[22rpx] text-[#636363] max-h-600rpx mb-[32rpx]" v-show="showType !== 3">
|
|
||||||
{{ innerContent }}
|
{{ innerContent }}
|
||||||
</view>
|
</view>
|
||||||
<scroll-view class="max-h-600rpx mb-[32rpx] overflow-y-auto" :scroll-y="true">
|
<WXXTable :data="courseInfo" class="" v-show="showType === 3">
|
||||||
<WXXTable :data="courseInfo" class="my-[24rpx]" v-show="showType === 3">
|
>
|
||||||
>
|
<WXXTableCol prop="kcmc" label="课程名称" width="50%"></WXXTableCol>
|
||||||
<WXXTableCol prop="kcmc" label="课程名称" width="50%"></WXXTableCol>
|
<WXXTableCol prop="difficulty" label="课程难易度" width="25%"></WXXTableCol>
|
||||||
<WXXTableCol prop="difficulty" label="课程难易度" width="25%"></WXXTableCol>
|
<WXXTableCol prop="practicality" label="课程实用度" width="25%"></WXXTableCol>
|
||||||
<WXXTableCol prop="practicality" label="课程实用度" width="25%"></WXXTableCol>
|
</WXXTable>
|
||||||
</WXXTable>
|
</view>
|
||||||
</scroll-view>
|
</ActionSheet>
|
||||||
</template>
|
|
||||||
</MessageBox>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import MessageBox from '@/pages-sub/components/messageBox/MessageBox.vue'
|
import ActionSheet from '@/pages-sub/components/ActionSheet.vue'
|
||||||
import WXXTable from '@/pages-sub/components/table/Table.vue'
|
import WXXTable from '@/pages-sub/components/table/Table.vue'
|
||||||
import WXXTableCol from '@/pages-sub/components/table/TableCol.vue'
|
import WXXTableCol from '@/pages-sub/components/table/TableCol.vue'
|
||||||
import { getMajorCourse } from '@/service/index/api'
|
import { getMajorCourse } from '@/service/index/api'
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<view class="bg-white flex w-full flex-1">
|
<view class="bg-white flex h-full">
|
||||||
<view class="w-[260rpx] bg-[#F7F8FA] flex flex-col items-center">
|
<view class="w-[260rpx] bg-[#F7F8FA] flex flex-col items-center overflow-y-auto h-full">
|
||||||
<view
|
<view
|
||||||
v-for="item in menus"
|
v-for="item in menus"
|
||||||
:key="item.key"
|
:key="item.key"
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="flex-1 mt-[40rpx] flex flex-col">
|
<view class="flex-1 mt-[40rpx] flex flex-col overflow-y-auto h-full">
|
||||||
<MajorTreeList v-if="currentMenuObj" :sub-major-list="currentMenuObj" />
|
<MajorTreeList v-if="currentMenuObj" :sub-major-list="currentMenuObj" />
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
|
||||||
|
|
@ -130,6 +130,6 @@ const handleConfirm = () => {
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import '@/pages-sub/home/styles/picker-view-btn.scss';
|
@import '@/pages-sub/home/styles/picker-view-btn.scss';
|
||||||
.border-bt {
|
.border-bt {
|
||||||
border-bottom: 1rpx solid #f8f8f8;
|
border-bottom: 1rpx solid #ededed;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -22,23 +22,37 @@
|
||||||
</template>
|
</template>
|
||||||
</Navbar>
|
</Navbar>
|
||||||
|
|
||||||
<scroll-view class="flex-1 pb-safe flex flex-col" :scroll-y="true">
|
<z-tabs
|
||||||
<z-tabs
|
:current="currentTab"
|
||||||
:current="currentTab"
|
:list="tabsList"
|
||||||
:list="tabsList"
|
:scrollCount="4"
|
||||||
:scrollCount="4"
|
inactive-color="#BFBFBF"
|
||||||
inactive-color="#BFBFBF"
|
active-color="#303030"
|
||||||
active-color="#303030"
|
:bar-style="{ backgroundColor: '#1580FF' }"
|
||||||
:bar-style="{ backgroundColor: '#1580FF' }"
|
:tabsStyle="{ position: 'sticky', top: '0', zIndex: '99' }"
|
||||||
:tabsStyle="{ position: 'sticky', top: '0', zIndex: '99' }"
|
@change="handleTabChange"
|
||||||
@change="handleTabChange"
|
v-bind="{} as any"
|
||||||
v-bind="{} as any"
|
/>
|
||||||
/>
|
<view class="flex-1 pb-safe flex flex-col overflow-y-auto">
|
||||||
|
<MajorList
|
||||||
<MajorList :type="1050" :keyword="searchValue" v-show="currentTab === 0"></MajorList>
|
class="h-full"
|
||||||
<MajorList :type="1070" :keyword="searchValue" v-show="currentTab === 1"></MajorList>
|
:type="1050"
|
||||||
<MajorList :type="1060" :keyword="searchValue" v-show="currentTab === 2"></MajorList>
|
:keyword="searchValue"
|
||||||
</scroll-view>
|
v-if="currentTab === 0"
|
||||||
|
></MajorList>
|
||||||
|
<MajorList
|
||||||
|
class="h-full"
|
||||||
|
:type="1070"
|
||||||
|
:keyword="searchValue"
|
||||||
|
v-if="currentTab === 1"
|
||||||
|
></MajorList>
|
||||||
|
<MajorList
|
||||||
|
class="h-full"
|
||||||
|
:type="1060"
|
||||||
|
:keyword="searchValue"
|
||||||
|
v-if="currentTab === 2"
|
||||||
|
></MajorList>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@
|
||||||
src="https://api.static.ycymedu.com/sub/images/schoolRank/trophy.jpg"
|
src="https://api.static.ycymedu.com/sub/images/schoolRank/trophy.jpg"
|
||||||
/>
|
/>
|
||||||
</view>
|
</view>
|
||||||
<view class="px-[32rpx] my-[24rpx]">
|
<view class="my-[24rpx]">
|
||||||
<z-tabs
|
<z-tabs
|
||||||
:current="tabIndex"
|
:current="tabIndex"
|
||||||
:list="unSortTypeList"
|
:list="unSortTypeList"
|
||||||
|
|
@ -84,7 +84,7 @@
|
||||||
{{ item.cityName }}.{{ item.uType }}
|
{{ item.cityName }}.{{ item.uType }}
|
||||||
</text>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="flex flex-col">
|
<view class="flex flex-col items-end">
|
||||||
<text class="text-[28rpx] text-[#333] font-medium mb-[10rpx]">{{ item.score }}</text>
|
<text class="text-[28rpx] text-[#333] font-medium mb-[10rpx]">{{ item.score }}</text>
|
||||||
<text class="text-[22rpx] text-[#999] font-normal">综合得分</text>
|
<text class="text-[22rpx] text-[#999] font-normal">综合得分</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { getBatchBase } from '@/service/index/api'
|
import { getBatchDynamicData } from '@/service/index/api'
|
||||||
|
|
||||||
export const calcTypeName = (type: number) => {
|
export const calcTypeName = (type: number) => {
|
||||||
const style = {
|
const style = {
|
||||||
|
|
@ -66,11 +66,12 @@ export const countModel = (list: any[]) => {
|
||||||
return { tModel }
|
return { tModel }
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useScore = (provinceCode, batchName) => {
|
export const useScore = (provinceCode, batchName, requireSubject) => {
|
||||||
const score = ref(0)
|
const score = ref(0)
|
||||||
const minScore = ref(0)
|
const minScore = ref(0)
|
||||||
const maxScore = ref(0)
|
const maxScore = ref(0)
|
||||||
getBatchBase({ locationCode: provinceCode }).then((resp) => {
|
const _requireSubject = requireSubject.length > 0 ? requireSubject[0].name : ''
|
||||||
|
getBatchDynamicData({ LocationCode: provinceCode, Course: _requireSubject }).then((resp) => {
|
||||||
if (resp.code === 200) {
|
if (resp.code === 200) {
|
||||||
const _result = resp.result as { batches: any[]; maxScore: number; minScore: number }
|
const _result = resp.result as { batches: any[]; maxScore: number; minScore: number }
|
||||||
if (_result.batches.length > 0) {
|
if (_result.batches.length > 0) {
|
||||||
|
|
|
||||||
|
|
@ -66,8 +66,8 @@
|
||||||
class="item-wrapper"
|
class="item-wrapper"
|
||||||
:id="`zp-id-${item.zp_index}`"
|
:id="`zp-id-${item.zp_index}`"
|
||||||
:key="item.zp_index"
|
:key="item.zp_index"
|
||||||
v-for="(item, index) in schoolList"
|
v-for="item in schoolList"
|
||||||
@click="itemClick(item, index)"
|
@click="itemClick(item)"
|
||||||
>
|
>
|
||||||
<ScrollListItem
|
<ScrollListItem
|
||||||
:college="item"
|
:college="item"
|
||||||
|
|
@ -196,7 +196,7 @@ const virtualListChange = (_vList) => {
|
||||||
schoolList.value = _vList
|
schoolList.value = _vList
|
||||||
}
|
}
|
||||||
|
|
||||||
const itemClick = (item, index) => {
|
const itemClick = (item) => {
|
||||||
uni.navigateTo({ url: `/pages-sub/home/college/info?collegeId=${item.uId}` })
|
uni.navigateTo({ url: `/pages-sub/home/college/info?collegeId=${item.uId}` })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -245,8 +245,8 @@ const handleRegionName = (val: string[]) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const sliderValue = ref([
|
const sliderValue = ref([
|
||||||
+userStore.userInfo.estimatedAchievement.expectedScore - 50,
|
+userStore.userInfo.estimatedAchievement.expectedScore - 100,
|
||||||
+userStore.userInfo.estimatedAchievement.expectedScore + 50,
|
+userStore.userInfo.estimatedAchievement.expectedScore,
|
||||||
])
|
])
|
||||||
const handleSliderChange = (val) => {
|
const handleSliderChange = (val) => {
|
||||||
paging.value.reload()
|
paging.value.reload()
|
||||||
|
|
@ -255,6 +255,7 @@ const handleSliderChange = (val) => {
|
||||||
const { score, minScore, maxScore } = useScore(
|
const { score, minScore, maxScore } = useScore(
|
||||||
userStore.userInfo.estimatedAchievement.provinceCode,
|
userStore.userInfo.estimatedAchievement.provinceCode,
|
||||||
userStore.userInfo.batchName,
|
userStore.userInfo.batchName,
|
||||||
|
userStore.userInfo.estimatedAchievement.requireSubject,
|
||||||
)
|
)
|
||||||
|
|
||||||
const handlePreview = () => {
|
const handlePreview = () => {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
<template>
|
<template>
|
||||||
<view class="flex flex-col h-screen">
|
<view class="flex flex-col h-screen">
|
||||||
<Tabs v-model:modelValue="currentIndex" :tabs="tabs"></Tabs>
|
<Tabs v-model:modelValue="currentIndex" :tabs="tabs"></Tabs>
|
||||||
<swiper class="flex-1" :current="currentIndex">
|
<swiper class="flex-1" :current="currentIndex" @change="handleSwiperChange">
|
||||||
<swiper-item>
|
<swiper-item>
|
||||||
<view class="mx-[32rpx] overflow-auto h-full">
|
<view class="mx-[32rpx] overflow-auto h-full">
|
||||||
<EvaluationItem v-for="item in academicList" :key="item.id" :item="item"></EvaluationItem>
|
<EvaluationItem v-for="item in academicList" :key="item.id" :item="item"></EvaluationItem>
|
||||||
|
|
@ -54,6 +54,11 @@ const currentIndex = ref(0)
|
||||||
const academicList = ref([])
|
const academicList = ref([])
|
||||||
const healthList = ref([])
|
const healthList = ref([])
|
||||||
const learningList = ref([])
|
const learningList = ref([])
|
||||||
|
|
||||||
|
const handleSwiperChange = (val) => {
|
||||||
|
currentIndex.value = val.detail.current
|
||||||
|
}
|
||||||
|
|
||||||
onLoad(() => {
|
onLoad(() => {
|
||||||
getEvaluationList({ menuid: '340509778657349' }).then((res) => {
|
getEvaluationList({ menuid: '340509778657349' }).then((res) => {
|
||||||
academicList.value = res.result as any[]
|
academicList.value = res.result as any[]
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,6 @@ const opacity = ref(0)
|
||||||
|
|
||||||
onPageScroll((e) => {
|
onPageScroll((e) => {
|
||||||
const scrollTop = e.scrollTop
|
const scrollTop = e.scrollTop
|
||||||
// 在0-100px的滚动范围内,透明度从0渐变到1
|
|
||||||
opacity.value = Math.min(scrollTop / 100, 1)
|
opacity.value = Math.min(scrollTop / 100, 1)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -441,3 +441,7 @@ export const getOpinionAbout = (params: { ScaleId: number }) => {
|
||||||
export const downloadPDF = (params: { id: number; location: string }) => {
|
export const downloadPDF = (params: { id: number; location: string }) => {
|
||||||
return http.get('/api/volunTb/downloadpdfUrl', params)
|
return http.get('/api/volunTb/downloadpdfUrl', params)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const getBatchDynamicData = (params: { LocationCode: string; Course: string }) => {
|
||||||
|
return http.get('/api/busBatchBase/batch', params)
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ const initState = {
|
||||||
estimatedAchievement: {
|
estimatedAchievement: {
|
||||||
year: 0, // 学期
|
year: 0, // 学期
|
||||||
expectedScore: '', // 成绩
|
expectedScore: '', // 成绩
|
||||||
requireSubject: { code: 0, name: '', simplename: '' },
|
requireSubject: [],
|
||||||
optionalSubject: [],
|
optionalSubject: [],
|
||||||
provinceCode: '',
|
provinceCode: '',
|
||||||
|
|
||||||
|
|
@ -101,7 +101,7 @@ export const useUserStore = defineStore(
|
||||||
userInfo.value.estimatedAchievement = Object.assign(userInfo.value.estimatedAchievement, {
|
userInfo.value.estimatedAchievement = Object.assign(userInfo.value.estimatedAchievement, {
|
||||||
year: 0, // 学期
|
year: 0, // 学期
|
||||||
expectedScore: '', // 成绩
|
expectedScore: '', // 成绩
|
||||||
requireSubject: { code: 0, name: '', simplename: '' },
|
requireSubject: [],
|
||||||
optionalSubject: [],
|
optionalSubject: [],
|
||||||
provinceCode: '',
|
provinceCode: '',
|
||||||
subjectGroup: '',
|
subjectGroup: '',
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ export type ExtraUserInfo = {
|
||||||
estimatedAchievement: {
|
estimatedAchievement: {
|
||||||
year: number
|
year: number
|
||||||
expectedScore: number | string
|
expectedScore: number | string
|
||||||
requireSubject: Rule
|
requireSubject: Rule[]
|
||||||
optionalSubject: Rule[]
|
optionalSubject: Rule[]
|
||||||
provinceCode: string
|
provinceCode: string
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue