Compare commits

...

4 Commits

Author SHA1 Message Date
xjs 94d7d1a7ae feat: 修改项目名 2025-11-10 14:24:22 +08:00
xjs ee5042a830 feat: 更新内容 2025-10-14 15:38:05 +08:00
xjs 7c4cedaeff feat: 钉钉适配 2025-09-05 09:30:04 +08:00
Mu Yi 4bcb347d4a feat: 钉钉适配 2025-09-01 11:54:24 +08:00
96 changed files with 1752 additions and 1047 deletions

12
.vscode/settings.json vendored
View File

@ -2,7 +2,7 @@
// prettier // prettier
"editor.defaultFormatter": "esbenp.prettier-vscode", "editor.defaultFormatter": "esbenp.prettier-vscode",
// //
"editor.formatOnSave": true, "editor.formatOnSave": false,
// //
"editor.codeActionsOnSave": { "editor.codeActionsOnSave": {
"source.fixAll": "explicit", "source.fixAll": "explicit",
@ -10,8 +10,8 @@
"source.fixAll.stylelint": "explicit" "source.fixAll.stylelint": "explicit"
}, },
// stylelint // stylelint
"stylelint.validate": ["css", "scss", "vue", "html"], // package.jsonscripts "stylelint.validate": ["css", "vue", "html"], // package.jsonscripts
"stylelint.enable": true, "stylelint.enable": false,
"css.validate": false, "css.validate": false,
"less.validate": false, "less.validate": false,
"scss.validate": false, "scss.validate": false,
@ -22,7 +22,7 @@
"editor.defaultFormatter": "foxundermoon.shell-format" "editor.defaultFormatter": "foxundermoon.shell-format"
}, },
"[vue]": { "[vue]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "Vue.volar"
}, },
"[typescript]": { "[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode"
@ -59,8 +59,4 @@
"package.json": "pnpm-lock.yaml,pnpm-workspace.yaml,LICENSE,.gitattributes,.gitignore,.gitpod.yml,CNAME,.npmrc,.browserslistrc", "package.json": "pnpm-lock.yaml,pnpm-workspace.yaml,LICENSE,.gitattributes,.gitignore,.gitpod.yml,CNAME,.npmrc,.browserslistrc",
".eslintrc.cjs": ".eslintignore,.prettierignore,.stylelintignore,.commitlintrc.*,.prettierrc.*,.stylelintrc.*,.eslintrc-auto-import.json,.editorconfig,.commitlint.cjs" ".eslintrc.cjs": ".eslintignore,.prettierignore,.stylelintignore,.commitlintrc.*,.prettierrc.*,.stylelintrc.*,.eslintrc-auto-import.json,.editorconfig,.commitlint.cjs"
}, },
"vetur.validation.template": false,
"vetur.validation.script": false,
"vetur.validation.style": false,
"vetur.experimental.templateInterpolationService": true
} }

2
env/.env vendored
View File

@ -1,4 +1,4 @@
VITE_APP_TITLE = '六纬志愿' VITE_APP_TITLE = '六纬升学'
VITE_APP_PORT = 9000 VITE_APP_PORT = 9000
VITE_UNI_APPID = 'H57F2ACE4' VITE_UNI_APPID = 'H57F2ACE4'

View File

@ -2,22 +2,7 @@
"name": "volunteer-4", "name": "volunteer-4",
"type": "commonjs", "type": "commonjs",
"version": "2.5.5", "version": "2.5.5",
"description": "unibest - 最好的 uniapp 开发模板",
"author": {
"name": "feige996",
"zhName": "菲鸽",
"email": "1020103647@qq.com",
"github": "https://github.com/feige996",
"gitee": "https://gitee.com/feige996"
},
"license": "MIT", "license": "MIT",
"repository": "https://github.com/feige996/unibest",
"repository-gitee": "https://gitee.com/feige996/unibest",
"repository-deprecated": "https://github.com/codercup/unibest",
"bugs": {
"url": "https://github.com/feige996/unibest/issues"
},
"homepage": "https://feige996.github.io/unibest/",
"engines": { "engines": {
"node": ">=18", "node": ">=18",
"pnpm": ">=7.30" "pnpm": ">=7.30"
@ -87,29 +72,42 @@
"bin-wrapper": "npm:bin-wrapper-china" "bin-wrapper": "npm:bin-wrapper-china"
}, },
"dependencies": { "dependencies": {
"@dcloudio/uni-app": "3.0.0-4020920240930001", "@dcloudio/uni-app": "3.0.0-4070520250711001",
"@dcloudio/uni-app-plus": "3.0.0-4020920240930001", "@dcloudio/uni-app-harmony": "3.0.0-4070520250711001",
"@dcloudio/uni-components": "3.0.0-4020920240930001", "@dcloudio/uni-app-plus": "3.0.0-4070520250711001",
"@dcloudio/uni-h5": "3.0.0-4020920240930001", "@dcloudio/uni-components": "3.0.0-4070520250711001",
"@dcloudio/uni-mp-weixin": "3.0.0-4020920240930001", "@dcloudio/uni-h5": "3.0.0-4070520250711001",
"@dcloudio/uni-mp-alipay": "3.0.0-4070520250711001",
"@dcloudio/uni-mp-baidu": "3.0.0-4070520250711001",
"@dcloudio/uni-mp-harmony": "3.0.0-4070520250711001",
"@dcloudio/uni-mp-jd": "3.0.0-4070520250711001",
"@dcloudio/uni-mp-kuaishou": "3.0.0-4070520250711001",
"@dcloudio/uni-mp-lark": "3.0.0-4070520250711001",
"@dcloudio/uni-mp-qq": "3.0.0-4070520250711001",
"@dcloudio/uni-mp-toutiao": "3.0.0-4070520250711001",
"@dcloudio/uni-mp-weixin": "3.0.0-4070520250711001",
"@dcloudio/uni-mp-xhs": "3.0.0-4070520250711001",
"@dcloudio/uni-quickapp-webview": "3.0.0-4070520250711001",
"@tanstack/vue-query": "^5.62.16", "@tanstack/vue-query": "^5.62.16",
"abortcontroller-polyfill": "^1.7.8", "abortcontroller-polyfill": "^1.7.8",
"dayjs": "1.11.10", "dayjs": "1.11.10",
"htmlparser2": "^10.0.0",
"pinia": "2.0.36", "pinia": "2.0.36",
"pinia-plugin-persistedstate": "3.2.1", "pinia-plugin-persistedstate": "3.2.1",
"pinyin-pro": "^3.26.0", "pinyin-pro": "^3.26.0",
"qs": "6.5.3", "qs": "6.5.3",
"vue": "3.4.21", "vue": "^3.4.21",
"vue-i18n": "^9.14.5",
"wot-design-uni": "^1.4.0" "wot-design-uni": "^1.4.0"
}, },
"devDependencies": { "devDependencies": {
"@commitlint/cli": "^18.6.1", "@commitlint/cli": "^18.6.1",
"@commitlint/config-conventional": "^18.6.3", "@commitlint/config-conventional": "^18.6.3",
"@dcloudio/types": "^3.4.14", "@dcloudio/types": "^3.4.8",
"@dcloudio/uni-automator": "3.0.0-4020920240930001", "@dcloudio/uni-automator": "3.0.0-4070520250711001",
"@dcloudio/uni-cli-shared": "3.0.0-4020920240930001", "@dcloudio/uni-cli-shared": "3.0.0-4070520250711001",
"@dcloudio/uni-stacktracey": "3.0.0-4020920240930001", "@dcloudio/uni-stacktracey": "3.0.0-4070520250711001",
"@dcloudio/vite-plugin-uni": "3.0.0-4020920240930001", "@dcloudio/vite-plugin-uni": "3.0.0-4070520250711001",
"@esbuild/darwin-arm64": "0.20.2", "@esbuild/darwin-arm64": "0.20.2",
"@esbuild/darwin-x64": "0.20.2", "@esbuild/darwin-x64": "0.20.2",
"@iconify-json/carbon": "^1.2.4", "@iconify-json/carbon": "^1.2.4",
@ -124,7 +122,7 @@
"@uni-helper/vite-plugin-uni-pages": "0.2.20", "@uni-helper/vite-plugin-uni-pages": "0.2.20",
"@uni-helper/vite-plugin-uni-platform": "^0.0.4", "@uni-helper/vite-plugin-uni-platform": "^0.0.4",
"@unocss/preset-legacy-compat": "^0.59.4", "@unocss/preset-legacy-compat": "^0.59.4",
"@vue/runtime-core": "^3.5.13", "@vue/runtime-core": "^3.4.21",
"@vue/tsconfig": "^0.1.3", "@vue/tsconfig": "^0.1.3",
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"commitlint": "^18.6.1", "commitlint": "^18.6.1",
@ -163,5 +161,8 @@
}, },
"minimize": { "minimize": {
"dev:mp-weixin": "cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch --minimize" "dev:mp-weixin": "cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch --minimize"
},
"volta": {
"node": "23.8.0"
} }
} }

View File

@ -3,7 +3,7 @@ import { defineUniPages } from '@uni-helper/vite-plugin-uni-pages'
export default defineUniPages({ export default defineUniPages({
globalStyle: { globalStyle: {
navigationBarTextStyle: 'black', navigationBarTextStyle: 'black',
navigationBarTitleText: '六纬志愿', navigationBarTitleText: '六纬升学',
navigationBarBackgroundColor: '#fff', navigationBarBackgroundColor: '#fff',
backgroundColor: '#F8F8F8', backgroundColor: '#F8F8F8',
}, },

File diff suppressed because it is too large Load Diff

View File

@ -40,16 +40,6 @@ onLoad((options) => {
url.value += `&fileId=${options.fileId}` url.value += `&fileId=${options.fileId}`
} }
}) })
// if (options.locationCode) {
// url.value += `&locationCode=${options.locationCode}`
// }
// const recorderManager = uni.getRecorderManager()
// recorderManager.onError((res) => {
// console.log('', res)
// })
// recorderManager.onStop((res) => {
// console.log('', res)
// })
}) })
</script> </script>

View File

@ -2,7 +2,7 @@
<!-- TabBar占位块 - 与TabBar高度一致 --> <!-- TabBar占位块 - 与TabBar高度一致 -->
<view <view
v-if="showPlaceholder" v-if="showPlaceholder"
class="tabbar-placeholder" class="tabbar-placeholder mb-safe"
:style="{ height: `${tabbarTotalHeight}px` }" :style="{ height: `${tabbarTotalHeight}px` }"
></view> ></view>
@ -71,7 +71,6 @@ const changeItem = (item: TabesItem) => {
onMounted(() => { onMounted(() => {
uni.hideTabBar() uni.hideTabBar()
// //
uni.getSystemInfo({ uni.getSystemInfo({
success: (res) => { success: (res) => {
@ -162,4 +161,9 @@ defineExpose({
padding-bottom: constant(safe-area-inset-bottom); padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom); padding-bottom: env(safe-area-inset-bottom);
} }
.mb-safe {
margin-bottom: constant(safe-area-inset-bottom);
margin-bottom: env(safe-area-inset-bottom);
}
</style> </style>

View File

@ -14,6 +14,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { getWindowInfo } from '@/utils/tools'
import { ref } from 'vue' import { ref } from 'vue'
const props = defineProps({ const props = defineProps({
@ -27,7 +28,7 @@ const props = defineProps({
}, },
}) })
const systemInfo = uni.getWindowInfo() const systemInfo = getWindowInfo()
const position = ref({ x: props.initialX, y: props.initialY }) const position = ref({ x: props.initialX, y: props.initialY })
const startPosition = ref({ x: 0, y: 0 }) const startPosition = ref({ x: 0, y: 0 })
@ -110,11 +111,11 @@ const handleClick = () => {
<style scoped> <style scoped>
.fab-button { .fab-button {
position: fixed; position: fixed;
display: flex;
align-items: center;
justify-content: center;
width: 128rpx; width: 128rpx;
height: 128rpx; height: 128rpx;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer; cursor: pointer;
} }
</style> </style>

View File

@ -15,10 +15,12 @@
: '输入模考/高考成绩' : '输入模考/高考成绩'
}} }}
</text> </text>
<image <view class="w-[42rpx] h-[39rpx]">
class="w-[42rpx] h-[39rpx]" <image
src="https://api.static.ycymedu.com/src/images/home/pen.svg" class="w-[42rpx] h-[39rpx]"
></image> src="https://api.static.ycymedu.com/src/images/home/pen.svg"
></image>
</view>
</view> </view>
<view class="flex items-center justify-center" v-else> <view class="flex items-center justify-center" v-else>
<image <image

View File

@ -5,12 +5,13 @@
hover-class="none" hover-class="none"
:hover-stop-propagation="false" :hover-stop-propagation="false"
> >
<text class="text-[32rpx] text-[#333333] font-semibold">高考资讯</text> <text class="text-[32rpx] text-[#333333] font-semibold w-max">高考资讯</text>
<image <view class="w-[40rpx] h-[40rpx]">
class="w-[40rpx] h-[40rpx]" <image
src="https://api.static.ycymedu.com/src/images/home/right.svg" src="https://api.static.ycymedu.com/src/images/home/right.svg"
@click="toNewsPage" @click="toNewsPage"
></image> ></image>
</view>
</view> </view>
<view <view
@ -34,9 +35,7 @@
import { useCityNewTop, newsList } from '@/hooks/useCityInfoHook' import { useCityNewTop, newsList } from '@/hooks/useCityInfoHook'
import { News } from '@/types/app-type' import { News } from '@/types/app-type'
onShow(() => { useCityNewTop()
useCityNewTop()
})
const handleClick = (item: News) => { const handleClick = (item: News) => {
uni.navigateTo({ uni.navigateTo({

View File

@ -5,12 +5,14 @@
hover-class="none" hover-class="none"
:hover-stop-propagation="false" :hover-stop-propagation="false"
> >
<text class="text-[32rpx] text-[#333333] font-semibold">热门排行榜</text> <text class="text-[32rpx] text-[#333333] font-semibold w-max">热门排行榜</text>
<image
class="w-[40rpx] h-[40rpx]" <view class="w-[40rpx] h-[40rpx]">
src="https://api.static.ycymedu.com/src/images/home/right.svg" <image
@click="toSchool('0')" src="https://api.static.ycymedu.com/src/images/home/right.svg"
></image> @click="toSchool('0')"
></image>
</view>
</view> </view>
<view <view
@ -19,63 +21,75 @@
:hover-stop-propagation="false" :hover-stop-propagation="false"
> >
<!-- 骨架屏 --> <!-- 骨架屏 -->
<view <template v-if="isLoading">
v-if="isLoading" <view
v-for="(_skeleton, index) in skeletonItems" v-for="(_skeleton, index) in skeletonItems"
:key="'skeleton-' + index" :key="'skeleton-' + index"
:class="`hot-rank-item flex-none skeleton-item`" :class="`hot-rank-item flex-none skeleton-item`"
hover-class="none" hover-class="none"
:hover-stop-propagation="false" :hover-stop-propagation="false"
> >
<view class="skeleton-text mx-[32rpx] mt-[32rpx] h-[40rpx] w-[120rpx] rounded"></view> <view class="skeleton-text mx-[32rpx] mt-[32rpx] h-[40rpx] w-[120rpx] rounded"></view>
<view class="flex items-center justify-left mt-[30rpx] mx-[32rpx]" v-for="i in 3" :key="i"> <view
<view class="skeleton-text w-[20rpx] h-[28rpx] mr-[10rpx] rounded"></view> class="flex items-center justify-left mt-[30rpx] mx-[32rpx]"
<view class="skeleton-image w-[80rpx] h-[80rpx] rounded-full flex-none mr-[16rpx]"></view> v-for="i in 3"
<view class="flex flex-col w-full"> :key="i"
<view class="skeleton-text h-[28rpx] w-[120rpx] rounded"></view> >
<view class="skeleton-text h-[22rpx] w-[100rpx] mt-[10rpx] rounded"></view> <view class="skeleton-text w-[20rpx] h-[28rpx] mr-[10rpx] rounded"></view>
<view
class="skeleton-image w-[80rpx] h-[80rpx] rounded-full flex-none mr-[16rpx]"
></view>
<view class="flex flex-col w-full">
<view class="skeleton-text h-[28rpx] w-[120rpx] rounded"></view>
<view class="skeleton-text h-[22rpx] w-[100rpx] mt-[10rpx] rounded"></view>
</view>
</view> </view>
</view> </view>
</view> </template>
<!-- 真实数据 --> <!-- 真实数据 -->
<view <template v-else>
v-else
:class="`hot-rank-item flex-none`"
hover-class="none"
:hover-stop-propagation="false"
v-for="typeWrap in universityTypeRankList"
:key="typeWrap.type"
@click="toSchool(typeWrap.type)"
v-show="typeWrap.rows.length > 0"
>
<text class="font-semibold text-[#303030] text-[32rpx] inline-block mx-[32rpx] mt-[32rpx]">
{{ typeWrap.name }}
</text>
<view <view
class="flex items-center justify-left mt-[30rpx] mx-[32rpx]" :class="`hot-rank-item flex-none`"
v-for="(item, index) in typeWrap.rows" hover-class="none"
:key="index" :hover-stop-propagation="false"
v-for="typeWrap in universityTypeRankList"
:key="typeWrap.type"
@click="toSchool(typeWrap.type)"
v-show="typeWrap.rows.length > 0"
> >
<text class="font-[28rpx] text-[#999999] font-normal mr-[10rpx]"> <text
{{ item.rank }} class="font-semibold text-[#303030] text-[32rpx] inline-block mx-[32rpx] mt-[32rpx]"
>
{{ typeWrap.name }}
</text> </text>
<image
class="w-[80rpx] h-[80rpx] rounded-full flex-none mr-[16rpx]" <view
:src="item.logo" class="flex items-center justify-left mt-[30rpx] mx-[32rpx]"
></image> v-for="(item, index) in typeWrap.rows"
<view class="truncate flex flex-col" hover-class="none"> :key="index"
<text class="font-normal text-[#333333] text-[28rpx] truncate"> >
{{ item.universityName }} <text class="font-[28rpx] text-[#999999] font-normal mr-[10rpx]">
</text> {{ item.rank }}
<text class="text-[22rpx] text-[#999999] font-normal mt-[10rpx]">
{{ item.cityName }}.{{ item.uType }}
</text> </text>
<view class="w-[80rpx] h-[80rpx] rounded-full">
<image
class="flex-none mr-[16rpx] w-full h-full rounded-full"
:src="item.logo"
></image>
</view>
<view class="truncate flex flex-col" hover-class="none">
<text class="font-normal text-[#333333] text-[28rpx] truncate">
{{ item.universityName }}
</text>
<text class="text-[22rpx] text-[#999999] font-normal mt-[10rpx]">
{{ item.cityName }}.{{ item.uType }}
</text>
</view>
</view> </view>
</view> </view>
</view> </template>
</view> </view>
</view> </view>
</template> </template>
@ -91,7 +105,7 @@ const toSchool = (id: string) => {
} }
const { unSortTypeList } = useUnSortType() const { unSortTypeList } = useUnSortType()
let universityTypeRankList = ref([]) const universityTypeRankList = ref([])
const isLoading = ref(true) const isLoading = ref(true)
// //
@ -138,22 +152,22 @@ watch(
<style lang="scss" scoped> <style lang="scss" scoped>
.hot-rank-item { .hot-rank-item {
position: relative;
width: 356rpx; width: 356rpx;
height: 452rpx; height: 452rpx;
position: relative;
background: #fff; background: #fff;
border-radius: 8px; border-radius: 8px;
} }
.hot-rank-item::before { .hot-rank-item::before {
content: '';
width: 360rpx;
height: 456rpx;
position: absolute; position: absolute;
border-radius: 8px;
top: -2rpx; top: -2rpx;
left: -2rpx; left: -2rpx;
z-index: -1; z-index: -1;
width: 360rpx;
height: 456rpx;
content: '';
border-radius: 8px;
} }
.hot-rank-outer .hot-rank-item:nth-child(1) { .hot-rank-outer .hot-rank-item:nth-child(1) {
@ -198,7 +212,6 @@ watch(
.hot-rank-outer .hot-rank-item:nth-child(5) { .hot-rank-outer .hot-rank-item:nth-child(5) {
background: linear-gradient(180deg, #e5ffc4 0%, rgba(213, 255, 196, 0) 23%, #fff 100%); background: linear-gradient(180deg, #e5ffc4 0%, rgba(213, 255, 196, 0) 23%, #fff 100%);
} }
/* 骨架屏样式 */ /* 骨架屏样式 */
.skeleton-text, .skeleton-text,
.skeleton-image { .skeleton-image {

View File

@ -1,22 +1,16 @@
<template> <template>
<view class="navbar"> <view class="navbar">
<!-- 状态栏占位 --> <!-- 状态栏占位 -->
<view <view v-if="safeAreaInsetTop" class="status-bar"
v-if="safeAreaInsetTop" :style="{ height: statusBarHeight + 'px', backgroundColor: bgColor }"></view>
class="status-bar"
:style="{ height: statusBarHeight + 'px', backgroundColor: bgColor }"
></view>
<!-- 导航栏主体 --> <!-- 导航栏主体 -->
<view <view class="navbar-content" :class="[contentClass, fixed ? 'navbar-fixed' : '', bordered ? 'navbar-border' : '']"
class="navbar-content"
:class="[contentClass, fixed ? 'navbar-fixed' : '', bordered ? 'navbar-border' : '']"
:style="{ :style="{
backgroundColor: bgColor, backgroundColor: bgColor,
height: navHeight + 'px', height: navHeight + 'px',
top: fixed ? (safeAreaInsetTop ? statusBarHeight : 0) + 'px' : '0', top: fixed ? (safeAreaInsetTop ? statusBarHeight : 0) + 'px' : '0',
}" }">
>
<!-- 左侧区域 --> <!-- 左侧区域 -->
<view class="navbar-left" @click="handleClickLeft"> <view class="navbar-left" @click="handleClickLeft">
<view v-if="leftArrow" class="back-icon"> <view v-if="leftArrow" class="back-icon">
@ -39,18 +33,16 @@
</view> </view>
<!-- 占位元素 --> <!-- 占位元素 -->
<view <view v-if="placeholder && fixed" :style="{
v-if="placeholder && fixed" height: `${navHeight}px`,
:style="{ backgroundColor: bgColor,
height: `${navHeight}px`, }"></view>
backgroundColor: bgColor,
}"
></view>
<slot name="background"></slot> <slot name="background"></slot>
</view> </view>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { getDeviceInfo, getWindowInfo } from '@/utils/tools'
import { computed } from 'vue' import { computed } from 'vue'
defineProps({ defineProps({
@ -91,8 +83,8 @@ defineProps({
const emit = defineEmits(['clickLeft']) const emit = defineEmits(['clickLeft'])
// //
const systemInfo = uni.getWindowInfo() const systemInfo = getWindowInfo()
const deviceInfo = uni.getDeviceInfo() const deviceInfo = getDeviceInfo()
const statusBarHeight = systemInfo.statusBarHeight || 0 const statusBarHeight = systemInfo.statusBarHeight || 0
@ -131,20 +123,20 @@ const handleClickLeft = () => {
} }
.navbar-content { .navbar-content {
width: 100%; box-sizing: border-box;
display: flex; display: flex;
align-items: center; align-items: center;
width: 100%;
/* justify-content: space-between; */ /* justify-content: space-between; */
padding: 0 16rpx; padding: 0 16rpx;
box-sizing: border-box;
background-color: #fff; background-color: #fff;
} }
.navbar-fixed { .navbar-fixed {
position: fixed; position: fixed;
left: 0; left: 0;
width: 100%;
z-index: 999; z-index: 999;
width: 100%;
} }
.navbar-border { .navbar-border {
@ -154,8 +146,8 @@ const handleClickLeft = () => {
.navbar-left { .navbar-left {
display: flex; display: flex;
align-items: center; align-items: center;
height: 100%;
min-width: 100rpx; min-width: 100rpx;
height: 100%;
} }
.back-icon { .back-icon {
@ -166,20 +158,20 @@ const handleClickLeft = () => {
} }
.navbar-title { .navbar-title {
/* flex: 1; */
text-align: center;
overflow: hidden;
height: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
height: 100%;
overflow: hidden;
/* flex: 1; */
text-align: center;
} }
.title-text { .title-text {
font-size: 34rpx;
color: #333;
font-weight: 500;
overflow: hidden; overflow: hidden;
font-size: 34rpx;
font-weight: 500;
color: #333;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
@ -187,15 +179,14 @@ const handleClickLeft = () => {
.navbar-right { .navbar-right {
display: flex; display: flex;
align-items: center; align-items: center;
min-width: 52rpx;
justify-content: flex-end; justify-content: flex-end;
min-width: 52rpx;
height: 100%; height: 100%;
} }
@font-face { @font-face {
font-family: 'iconfont'; font-family: 'iconfont';
src: url('data:font/woff2;charset=utf-8;base64,d09GMgABAAAAAAKYAAsAAAAABlAAAAJMAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACCcApcdgE2AiQDCAsGAAQgBYRnBzYbmQXIHpIkBQQKkYCABBEPz2/t/XN3twEbowBkQTxQEQ1RKaKSxEOi0agkJKF5Qvj/f037IFKwlZ2dWU2tJu0EhPwHkBwgOVAclKcvAQpI/v/fz/08XECy+YBymmPQiwIcSmhAY4uSFcgJ+IaxC1zCYwLtRjWSnZ2rGgQWBowLxCPrVBBYllQqNTQ0VISaBXEHtTRNUwW4jb4f/xYEC0kqMzDx6CGrQuKXxKc6Zf7POYQgQHs5kIwjYwEoxK3G/DpRwbi0dlNwKKjAL4lf6vw/R2zVWvTPIwuiCnp2wCRUZ3yJX5pJFVDfByyAFR2AblMAX/OR3t7+zOJi8GyyfzC1uQXLZvtnk/0zyfTy+PvH0/Xp5OzR98/H797/+/fDu3d/3739+/fd+/+nmxvLc5vrS+sry2vz84tLs9Mzc4vzs9NTM/Ozc1OzM3MzU/Mz0wvTU4vTk0tTE8uTEyuT4yv/G0E3XUxv7wwNbu/s9G8fbO9v7+3sb+3ubW4dbO4dbO3vbu4dbO3JzqPFtRE4gEGAX0NBkL+hpCZALkEp5FKUQqE0NHlXJIGrDNAOcEQBCHU+kXT5QNblC7kEv1EK9Y9SB/8o7YYu2m0YXrJLouNIjQJhH+QbVkVZrUQ+YuqzUJdzxPMHhdIj0+hg4o0D8ogj5r5bSoQUxjADz+A8hBDQFEYwh3mommXTul7Vm5ZtqAqJHIdoKCDYDyQ3mCqUG1YKn5+C0s0yiJ/qKVAQedKAhg6Y3mEHJBQaWKnvLVMiiEIxGAY8Aw6HIAhAJmEIzIIOUjLTTAB1taL1QvNq+fYN7QDjcc2okeioaOmy5LFXt3QAAAAA') src: url('data:font/woff2;charset=utf-8;base64,d09GMgABAAAAAAKYAAsAAAAABlAAAAJMAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACCcApcdgE2AiQDCAsGAAQgBYRnBzYbmQXIHpIkBQQKkYCABBEPz2/t/XN3twEbowBkQTxQEQ1RKaKSxEOi0agkJKF5Qvj/f037IFKwlZ2dWU2tJu0EhPwHkBwgOVAclKcvAQpI/v/fz/08XECy+YBymmPQiwIcSmhAY4uSFcgJ+IaxC1zCYwLtRjWSnZ2rGgQWBowLxCPrVBBYllQqNTQ0VISaBXEHtTRNUwW4jb4f/xYEC0kqMzDx6CGrQuKXxKc6Zf7POYQgQHs5kIwjYwEoxK3G/DpRwbi0dlNwKKjAL4lf6vw/R2zVWvTPIwuiCnp2wCRUZ3yJX5pJFVDfByyAFR2AblMAX/OR3t7+zOJi8GyyfzC1uQXLZvtnk/0zyfTy+PvH0/Xp5OzR98/H797/+/fDu3d/3739+/fd+/+nmxvLc5vrS+sry2vz84tLs9Mzc4vzs9NTM/Ozc1OzM3MzU/Mz0wvTU4vTk0tTE8uTEyuT4yv/G0E3XUxv7wwNbu/s9G8fbO9v7+3sb+3ubW4dbO4dbO3vbu4dbO3JzqPFtRE4gEGAX0NBkL+hpCZALkEp5FKUQqE0NHlXJIGrDNAOcEQBCHU+kXT5QNblC7kEv1EK9Y9SB/8o7YYu2m0YXrJLouNIjQJhH+QbVkVZrUQ+YuqzUJdzxPMHhdIj0+hg4o0D8ogj5r5bSoQUxjADz+A8hBDQFEYwh3mommXTul7Vm5ZtqAqJHIdoKCDYDyQ3mCqUG1YKn5+C0s0yiJ/qKVAQedKAhg6Y3mEHJBQaWKnvLVMiiEIxGAY8Aw6HIAhAJmEIzIIOUjLTTAB1taL1QvNq+fYN7QDjcc2okeioaOmy5LFXt3QAAAAA') format('woff2');
format('woff2');
} }
.back-text { .back-text {

View File

@ -1,5 +1,6 @@
import { onReady } from '@dcloudio/uni-app' import { onReady } from '@dcloudio/uni-app'
import { getIsTabbar, getLastItem } from '@/utils/index' import { getIsTabbar, getLastItem } from '@/utils/index'
import { getWindowInfo } from '@/utils/tools'
export default () => { export default () => {
// 获取页面栈 // 获取页面栈
@ -9,7 +10,7 @@ export default () => {
// 页面滚动到底部时的操作,通常用于加载更多数据 // 页面滚动到底部时的操作,通常用于加载更多数据
const onScrollToLower = () => {} const onScrollToLower = () => {}
// 获取屏幕边界到安全区域距离 // 获取屏幕边界到安全区域距离
const { safeAreaInsets } = uni.getWindowInfo() const { safeAreaInsets } = getWindowInfo()
// #ifdef MP-WEIXIN // #ifdef MP-WEIXIN
// 基于小程序的 Page 类型扩展 uni-app 的 Page // 基于小程序的 Page 类型扩展 uni-app 的 Page

View File

@ -4,11 +4,13 @@
class="fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 flex flex-col items-center bg-white p-[40rpx] rounded-[32rpx]" class="fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 flex flex-col items-center bg-white p-[40rpx] rounded-[32rpx]"
@click.stop @click.stop
> >
<image <view class="w-[200rpx] h-[200rpx]">
class="w-[200rpx] h-[200rpx]" <image
src="https://api.static.ycymedu.com/images/logo.png" class="w-[200rpx] h-[200rpx]"
mode="aspectFit" src="https://api.static.ycymedu.com/images/logo.png"
></image> mode="aspectFit"
></image>
</view>
<view class="flex flex-col items-center"> <view class="flex flex-col items-center">
<text class="text-[26rpx] mt-[20rpx] mb-[40rpx]" :selectable="false"> <text class="text-[26rpx] mt-[20rpx] mb-[40rpx]" :selectable="false">
{{ phone ? '申请使用您的手机号' : '申请获取您的个人信息' }} {{ phone ? '申请使用您的手机号' : '申请获取您的个人信息' }}
@ -101,7 +103,7 @@ const handleClickPrivacyPolicy = () => {
const getPhoneNumber = async (e: any) => { const getPhoneNumber = async (e: any) => {
if (e.detail.errMsg == 'getPhoneNumber:ok') { if (e.detail.errMsg == 'getPhoneNumber:ok') {
const detail = e.detail const detail = e.detail
let _getPhoneInfo = { const _getPhoneInfo = {
iv: detail.iv, iv: detail.iv,
encryptedData: detail.encryptedData, encryptedData: detail.encryptedData,
code: detail.code, code: detail.code,
@ -127,12 +129,11 @@ const handleClick = () => {
title: '您需先同意《服务条款》和《隐私条款》', title: '您需先同意《服务条款》和《隐私条款》',
icon: 'none', icon: 'none',
}) })
return
} }
} }
const getUserInfo = async (_code: string) => { const getUserInfo = async (_code: string) => {
let userInfo = (await useLogin()) as { code: string; errMsg: string } const userInfo = (await useLogin()) as { code: string; errMsg: string }
if (userInfo.errMsg == 'login:ok') { if (userInfo.errMsg == 'login:ok') {
const resp = await getSessionKey({ JsCode: userInfo.code }) const resp = await getSessionKey({ JsCode: userInfo.code })
@ -163,8 +164,8 @@ const getUserInfo = async (_code: string) => {
if (resp.code === 200) { if (resp.code === 200) {
// //
getVolunteerInitialization().then((res) => { getVolunteerInitialization().then((res) => {
let list = res.result as any[] const list = res.result as any[]
let code = infoData.userExtend ? infoData.userExtend.provinceCode : '' const code = infoData.userExtend ? infoData.userExtend.provinceCode : ''
let addressItem: City let addressItem: City
if (code !== '') { if (code !== '') {
for (let i = 0; i < list.length; i++) { for (let i = 0; i < list.length; i++) {

View File

@ -51,6 +51,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { getDeviceInfo, getWindowInfo } from '@/utils/tools'
import { computed } from 'vue' import { computed } from 'vue'
defineProps({ defineProps({
@ -91,8 +92,8 @@ defineProps({
const emit = defineEmits(['clickLeft']) const emit = defineEmits(['clickLeft'])
// //
const systemInfo = uni.getWindowInfo() const systemInfo = getWindowInfo()
const deviceInfo = uni.getDeviceInfo() const deviceInfo = getDeviceInfo()
const statusBarHeight = systemInfo.statusBarHeight || 0 const statusBarHeight = systemInfo.statusBarHeight || 0
@ -131,20 +132,20 @@ const handleClickLeft = () => {
} }
.navbar-content { .navbar-content {
width: 100%; box-sizing: border-box;
display: flex; display: flex;
align-items: center; align-items: center;
width: 100%;
/* justify-content: space-between; */ /* justify-content: space-between; */
padding: 0 16rpx; padding: 0 16rpx;
box-sizing: border-box;
background-color: #fff; background-color: #fff;
} }
.navbar-fixed { .navbar-fixed {
position: fixed; position: fixed;
left: 0; left: 0;
width: 100%;
z-index: 999; z-index: 999;
width: 100%;
} }
.navbar-border { .navbar-border {
@ -154,8 +155,8 @@ const handleClickLeft = () => {
.navbar-left { .navbar-left {
display: flex; display: flex;
align-items: center; align-items: center;
height: 100%;
min-width: 100rpx; min-width: 100rpx;
height: 100%;
} }
.back-icon { .back-icon {
@ -166,20 +167,20 @@ const handleClickLeft = () => {
} }
.navbar-title { .navbar-title {
/* flex: 1; */
text-align: center;
overflow: hidden;
height: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
height: 100%;
overflow: hidden;
/* flex: 1; */
text-align: center;
} }
.title-text { .title-text {
font-size: 34rpx;
color: #333;
font-weight: 500;
overflow: hidden; overflow: hidden;
font-size: 34rpx;
font-weight: 500;
color: #333;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
@ -187,8 +188,8 @@ const handleClickLeft = () => {
.navbar-right { .navbar-right {
display: flex; display: flex;
align-items: center; align-items: center;
min-width: 52rpx;
justify-content: flex-end; justify-content: flex-end;
min-width: 52rpx;
height: 100%; height: 100%;
} }

View File

@ -1,32 +1,22 @@
<route lang="json5" type="page"> <route lang="json5" type="page">
{ {
style: { style: {
navigationStyle: 'custom', navigationBarTitleText: '新高考选科',
}, },
} }
</route> </route>
<template> <template>
<view class="h-screen flex flex-col"> <view class="h-screen flex flex-col bg-white">
<Navbar
safeAreaInsetTop
:bordered="false"
:fixed="true"
:placeholder="true"
left-arrow
bgColor="transparent"
@click-left="handleClickLeft"
>
<template #title>
<text class="text-[#1F2329] text-[36rpx] font-medium">新高考选科</text>
</template>
</Navbar>
<view class="flex flex-col justify-center items-center flex-1 pb-safe mt-[-100px]"> <view class="flex flex-col justify-center items-center flex-1 pb-safe mt-[-100px]">
<image <view class="w-[424rpx] h-[424rpx]">
class="w-[424rpx] h-[424rpx]" <image
src="https://api.static.ycymedu.com/images/logo.png" class="w-[424rpx] h-[424rpx]"
mode="aspectFit" src="https://api.static.ycymedu.com/images/logo.png"
></image> mode="aspectFit"
></image>
</view>
<!-- #ifdef MP-WEIXIN -->
<button <button
class="w-[493rpx]! mb-[40rpx] h-[88rpx]! rounded-[44rpx] text-[32rpx] text-white flex items-center justify-center" class="w-[493rpx]! mb-[40rpx] h-[88rpx]! rounded-[44rpx] text-[32rpx] text-white flex items-center justify-center"
:class="checked.length > 0 ? 'bg-[#1580FF]' : 'bg-[#BFBFBF]'" :class="checked.length > 0 ? 'bg-[#1580FF]' : 'bg-[#BFBFBF]'"
@ -37,6 +27,17 @@
> >
一键登录 一键登录
</button> </button>
<!-- #endif -->
<!-- #ifdef MP-ALIPAY -->
<button
class="w-[493rpx]! mb-[40rpx] h-[88rpx]! rounded-[44rpx] text-[32rpx] text-white flex items-center justify-center"
:class="checked.length > 0 ? 'bg-[#1580FF]' : 'bg-[#BFBFBF]'"
@click.stop="handleClick"
>
一键登录
</button>
<!-- #endif -->
<view class="flex items-center flex-nowrap"> <view class="flex items-center flex-nowrap">
<CheckboxGroup v-model="checked" class="check-class mr-[10rpx]"> <CheckboxGroup v-model="checked" class="check-class mr-[10rpx]">
@ -84,7 +85,7 @@ const getPhoneInfo = ref(null)
const getPhoneNumber = async (e: any) => { const getPhoneNumber = async (e: any) => {
if (e.detail.errMsg == 'getPhoneNumber:ok') { if (e.detail.errMsg == 'getPhoneNumber:ok') {
const detail = e.detail const detail = e.detail
let _getPhoneInfo = { const _getPhoneInfo = {
iv: detail.iv, iv: detail.iv,
encryptedData: detail.encryptedData, encryptedData: detail.encryptedData,
code: detail.code, code: detail.code,
@ -110,8 +111,18 @@ const handleClick = () => {
title: '您需先同意《服务条款》和《隐私条款》', title: '您需先同意《服务条款》和《隐私条款》',
icon: 'none', icon: 'none',
}) })
return
} }
// #ifdef MP-ALIPAY
dd.getAuthCode({
corpId: '3912995586',
success: (res) => {
const { authCode } = res
console.log(res)
},
fail: () => {},
complete: () => {},
})
// #endif
} }
// //
@ -138,7 +149,7 @@ const handleClickPrivacyPolicy = () => {
const userStore = useUserStore() const userStore = useUserStore()
const getUserInfo = async (_code: string) => { const getUserInfo = async (_code: string) => {
let userInfo = (await useLogin()) as { code: string; errMsg: string } const userInfo = (await useLogin()) as { code: string; errMsg: string }
if (userInfo.errMsg == 'login:ok') { if (userInfo.errMsg == 'login:ok') {
const resp = await getSessionKey({ JsCode: userInfo.code }) const resp = await getSessionKey({ JsCode: userInfo.code })
@ -173,8 +184,8 @@ const getUserInfo = async (_code: string) => {
// //
getVolunteerInitialization() getVolunteerInitialization()
.then((res) => { .then((res) => {
let list = res.result as any[] const list = res.result as any[]
let code = infoData.userExtend ? infoData.userExtend.provinceCode : '' const code = infoData.userExtend ? infoData.userExtend.provinceCode : ''
let addressItem: City let addressItem: City
if (code !== '') { if (code !== '') {
for (let i = 0; i < list.length; i++) { for (let i = 0; i < list.length; i++) {

View File

@ -1,5 +1,5 @@
{ {
"name": "六纬志愿", "name": "六纬升学",
"appid": "H57F2ACE4", "appid": "H57F2ACE4",
"description": "", "description": "",
"versionName": "1.0.0", "versionName": "1.0.0",

View File

@ -13,18 +13,21 @@
:class="[contentClass, fixed ? 'navbar-fixed' : '', bordered ? 'navbar-border' : '']" :class="[contentClass, fixed ? 'navbar-fixed' : '', bordered ? 'navbar-border' : '']"
:style="{ :style="{
backgroundColor: bgColor, backgroundColor: bgColor,
height: navHeight + 'px', height: `${navHeight}px`,
top: fixed ? (safeAreaInsetTop ? statusBarHeight : 0) + 'px' : '0', top: fixed ? (safeAreaInsetTop ? statusBarHeight : 0) + 'px' : '0',
}" }"
> >
<!-- 左侧区域 --> <view
<view class="navbar-left" @click="handleClickLeft"> :class="`navbar-left ${leftWidthMin ? 'min-w-[48rpx]' : ''} min-w-[48rpx]`"
@click="handleClickLeft"
>
<!-- #ifndef MP-ALIPAY -->
<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>
<!-- #endif -->
<slot name="left"></slot> <slot name="left"></slot>
</view> </view>
<!-- 中间标题区域 --> <!-- 中间标题区域 -->
<view class="navbar-title"> <view class="navbar-title">
<slot name="title"> <slot name="title">
@ -51,9 +54,9 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { computed } from 'vue' import { getDeviceInfo, getWindowInfo } from '@/utils/tools'
const props = defineProps({ defineProps({
title: { title: {
type: String, type: String,
default: '', default: '',
@ -86,13 +89,18 @@ 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'])
// //
const systemInfo = uni.getWindowInfo() const deviceInfo = getDeviceInfo()
const deviceInfo = uni.getDeviceInfo() const systemInfo = getWindowInfo()
const statusBarHeight = systemInfo.statusBarHeight || 0 const statusBarHeight = systemInfo.statusBarHeight || 0
// //
@ -130,20 +138,20 @@ const handleClickLeft = () => {
} }
.navbar-content { .navbar-content {
width: 100%; box-sizing: border-box;
display: flex; display: flex;
align-items: center; align-items: center;
width: 100%;
/* justify-content: space-between; */ /* justify-content: space-between; */
padding: 0 16rpx; padding: 0 16rpx;
box-sizing: border-box;
background-color: #fff; background-color: #fff;
} }
.navbar-fixed { .navbar-fixed {
position: fixed; position: fixed;
left: 0; left: 0;
width: 100%;
z-index: 99; z-index: 99;
width: 100%;
} }
.navbar-border { .navbar-border {
@ -164,20 +172,20 @@ const handleClickLeft = () => {
} }
.navbar-title { .navbar-title {
/* flex: 1; */
text-align: center;
overflow: hidden;
height: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
height: 100%;
overflow: hidden;
/* flex: 1; */
text-align: center;
} }
.title-text { .title-text {
font-size: 34rpx;
color: #333;
font-weight: 500;
overflow: hidden; overflow: hidden;
font-size: 34rpx;
font-weight: 500;
color: #333;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
@ -185,8 +193,8 @@ const handleClickLeft = () => {
.navbar-right { .navbar-right {
display: flex; display: flex;
align-items: center; align-items: center;
min-width: 52rpx;
justify-content: flex-end; justify-content: flex-end;
min-width: 52rpx;
height: 100%; height: 100%;
} }

View File

@ -31,7 +31,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { computed, ref, watch } from 'vue' import { computed } from 'vue'
const props = defineProps({ const props = defineProps({
modelValue: { modelValue: {

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>
@ -24,10 +26,12 @@
<view class="overflow-auto relative mt-[40rpx] flex-1 pb-[20rpx]"> <view class="overflow-auto relative mt-[40rpx] flex-1 pb-[20rpx]">
<!-- 顶部卡片 --> <!-- 顶部卡片 -->
<view class="flex flex-col pt-[32rpx] px-[84rpx] h-[244rpx] mb-[-116rpx] font-700"> <view class="flex flex-col pt-[32rpx] px-[84rpx] h-[244rpx] mb-[-116rpx] font-700">
<image <view class="header-bg">
src="https://api.static.ycymedu.com/src/images/evaluate/bg.png" <image
class="header-bg" src="https://api.static.ycymedu.com/src/images/evaluate/bg.png"
/> class="w-full h-full"
/>
</view>
<text class="text-[#333] text-[28rpx] mb-[14rpx] z-2">您的性格类型为</text> <text class="text-[#333] text-[28rpx] mb-[14rpx] z-2">您的性格类型为</text>
<text class="text-[#117CFC] text-[36rpx] z-2">{{ studyRecord.title }}</text> <text class="text-[#117CFC] text-[36rpx] z-2">{{ studyRecord.title }}</text>
</view> </view>

View File

@ -1,33 +1,23 @@
<route lang="json5" type="page"> <route lang="json5" type="page">
{ {
style: { style: {
navigationStyle: 'custom', navigationBarTitleText: '兴趣测评报告',
}, },
} }
</route> </route>
<template> <template>
<view class="flex flex-col h-screen relative custom-bg"> <view class="flex flex-col h-screen relative custom-bg">
<Navbar
safeAreaInsetTop
:bordered="false"
leftArrow
@clickLeft="handleBack"
bg-color="transparent"
>
<template #title>
<text class="text-[#1F2329] text-[36rpx] font-medium text-[#fff]">兴趣测评报告</text>
</template>
</Navbar>
<view class="flex-1 overflow-auto relative mt-[40rpx]"> <view class="flex-1 overflow-auto relative mt-[40rpx]">
<view class="overflow-auto relative mt-[40rpx] flex-1 pb-[20rpx]"> <view class="overflow-auto relative mt-[40rpx] flex-1 pb-[20rpx]">
<!-- 顶部卡片 --> <!-- 顶部卡片 -->
<view class="flex flex-col pt-[32rpx] px-[84rpx] h-[244rpx] mb-[-116rpx] font-700"> <view class="flex flex-col pt-[32rpx] px-[84rpx] h-[244rpx] mb-[-116rpx] font-700">
<image <view class="header-bg">
src="https://api.static.ycymedu.com/src/images/evaluate/bg.png" <image
class="header-bg" src="https://api.static.ycymedu.com/src/images/evaluate/bg.png"
/> class="w-full h-full"
/>
</view>
<text class="text-[#333] text-[28rpx] mb-[14rpx] z-2">您的兴趣类型为</text> <text class="text-[#333] text-[28rpx] mb-[14rpx] z-2">您的兴趣类型为</text>
<text class="text-[#117CFC] text-[36rpx] z-2">{{ studyRecord.title }}</text> <text class="text-[#117CFC] text-[36rpx] z-2">{{ studyRecord.title }}</text>
</view> </view>

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>
@ -24,10 +26,12 @@
<view class="overflow-auto relative mt-[40rpx] flex-1 pb-[20rpx]"> <view class="overflow-auto relative mt-[40rpx] flex-1 pb-[20rpx]">
<!-- 顶部卡片 --> <!-- 顶部卡片 -->
<view class="flex flex-col pt-[32rpx] px-[84rpx] h-[244rpx] mb-[-116rpx] font-700"> <view class="flex flex-col pt-[32rpx] px-[84rpx] h-[244rpx] mb-[-116rpx] font-700">
<image <view class="header-bg">
src="https://api.static.ycymedu.com/src/images/evaluate/bg.png" <image
class="header-bg" src="https://api.static.ycymedu.com/src/images/evaluate/bg.png"
/> class="w-full h-full"
/>
</view>
<text class="text-[#333] text-[28rpx] mb-[14rpx] z-2">您的职业价值观</text> <text class="text-[#333] text-[28rpx] mb-[14rpx] z-2">您的职业价值观</text>
<text class="text-[#117CFC] text-[40rpx] z-2">{{ studyRecord.tag }}</text> <text class="text-[#117CFC] text-[40rpx] z-2">{{ studyRecord.tag }}</text>
</view> </view>

View File

@ -8,10 +8,12 @@
<view <view
class="rounded-[8rpx] border-[#1580FF] border-[2rpx] border-solid w-full py-[14rpx] flex items-center justify-center" class="rounded-[8rpx] border-[#1580FF] border-[2rpx] border-solid w-full py-[14rpx] flex items-center justify-center"
> >
<image <view class="w-[52rpx] h-[52rpx] mr-[10rpx]">
src="https://api.static.ycymedu.com/images/btn-bottom.png" <image
class="w-[52rpx] h-[52rpx] mr-[10rpx]" src="https://api.static.ycymedu.com/images/btn-bottom.png"
></image> class="w-[52rpx] h-[52rpx]"
></image>
</view>
<text class="text-[#1580FF] text-[32rpx] font-700">智能AI顾问</text> <text class="text-[#1580FF] text-[32rpx] font-700">智能AI顾问</text>
</view> </view>
</view> </view>

View File

@ -17,11 +17,13 @@
v-for="(person, index) in personList" v-for="(person, index) in personList"
:key="index" :key="index"
> >
<image <view class="w-[120rpx] h-[120rpx]">
:src="person.avatarUrl" <image
class="w-[120rpx] h-[120rpx] rounded-full" :src="person.avatarUrl"
mode="aspectFill" class="w-[120rpx] h-[120rpx] rounded-full"
></image> mode="aspectFill"
></image>
</view>
<text class="mt-[10rpx] text-[26rpx] text-[28rpx] font-normal text-center"> <text class="mt-[10rpx] text-[26rpx] text-[28rpx] font-normal text-center">
{{ person.nickName }} {{ person.nickName }}
</text> </text>

View File

@ -13,11 +13,13 @@
</view> </view>
<view class="relative mt-[68rpx] bg-[#F5FAFF]"> <view class="relative mt-[68rpx] bg-[#F5FAFF]">
<image <view class="absolute top-[-9rpx] left-[20rpx] w-[180rpx] h-[52rpx]">
src="https://api.static.ycymedu.com/src/images/home/test-icon.png" <image
mode="scaleToFill" src="https://api.static.ycymedu.com/src/images/home/test-icon.png"
class="w-[180rpx] h-[52rpx] absolute top-[-9rpx] left-[20rpx]" mode="scaleToFill"
/> class="w-[180rpx] h-[52rpx]"
/>
</view>
<view class="px-[20rpx] pb-[20rpx] pt-[58rpx] text-[#333] text-[26rpx]"> <view class="px-[20rpx] pb-[20rpx] pt-[58rpx] text-[#333] text-[26rpx]">
{{ description }} {{ description }}
</view> </view>

View File

@ -2,11 +2,13 @@
<view class="flex flex-col bg-white rounded-[24rpx] p-[30rpx] gap-[40rpx]"> <view class="flex flex-col bg-white rounded-[24rpx] p-[30rpx] gap-[40rpx]">
<view class="flex flex-col gap-[12rpx]"> <view class="flex flex-col gap-[12rpx]">
<view class="flex items-center gap-[10rpx]"> <view class="flex items-center gap-[10rpx]">
<image <view class="w-[38rpx] h-[38rpx]">
src="https://api.static.ycymedu.com/src/images/home/life-icon.png" <image
mode="scaleToFill" src="https://api.static.ycymedu.com/src/images/home/life-icon.png"
class="w-[38rpx] h-[38rpx]" mode="scaleToFill"
/> class="w-[38rpx] h-[38rpx]"
/>
</view>
<text class="text-[32rpx] text-[#000] font-700">生活建议</text> <text class="text-[32rpx] text-[#000] font-700">生活建议</text>
</view> </view>
<view class="text-[26rpx] text-[#666] font-400"> <view class="text-[26rpx] text-[#666] font-400">
@ -16,11 +18,13 @@
</view> </view>
<view class="flex flex-col gap-[12rpx]"> <view class="flex flex-col gap-[12rpx]">
<view class="flex items-center gap-[10rpx]"> <view class="flex items-center gap-[10rpx]">
<image <view class="w-[38rpx] h-[38rpx]">
src="https://api.static.ycymedu.com/src/images/home/diet-icon.png" <image
mode="scaleToFill" src="https://api.static.ycymedu.com/src/images/home/diet-icon.png"
class="w-[38rpx] h-[38rpx]" mode="scaleToFill"
/> class="w-[38rpx] h-[38rpx]"
/>
</view>
<text class="text-[32rpx] text-[#000] font-700">饮食建议</text> <text class="text-[32rpx] text-[#000] font-700">饮食建议</text>
</view> </view>
<view class="text-[26rpx] text-[#666] font-400"> <view class="text-[26rpx] text-[#666] font-400">
@ -30,11 +34,13 @@
</view> </view>
<view class="flex flex-col gap-[12rpx]"> <view class="flex flex-col gap-[12rpx]">
<view class="flex items-center gap-[10rpx]"> <view class="flex items-center gap-[10rpx]">
<image <view class="w-[38rpx] h-[38rpx]">
src="https://api.static.ycymedu.com/src/images/home/learn-icon.png" <image
mode="scaleToFill" src="https://api.static.ycymedu.com/src/images/home/learn-icon.png"
class="w-[38rpx] h-[38rpx]" mode="scaleToFill"
/> class="w-[38rpx] h-[38rpx]"
/>
</view>
<text class="text-[32rpx] text-[#000] font-700">学习建议</text> <text class="text-[32rpx] text-[#000] font-700">学习建议</text>
</view> </view>
<view class="text-[26rpx] text-[#666] font-400"> <view class="text-[26rpx] text-[#666] font-400">

View File

@ -4,11 +4,13 @@
<LEchart ref="echart" :customStyle="`z-index:1;`"></LEchart> <LEchart ref="echart" :customStyle="`z-index:1;`"></LEchart>
</view> </view>
<view class="relative mt-[68rpx] bg-[#F5FAFF] mx-[20rpx] px-[24rpx] pt-[58rpx] pb-[20rpx]"> <view class="relative mt-[68rpx] bg-[#F5FAFF] mx-[20rpx] px-[24rpx] pt-[58rpx] pb-[20rpx]">
<image <view class="w-[180rpx] h-[52rpx] absolute top-[-9rpx] left-[20rpx]">
src="https://api.static.ycymedu.com/src/images/home/test-icon.png" <image
mode="scaleToFill" src="https://api.static.ycymedu.com/src/images/home/test-icon.png"
class="w-[180rpx] h-[52rpx] absolute top-[-9rpx] left-[20rpx]" mode="scaleToFill"
/> class="w-[180rpx] h-[52rpx]"
/>
</view>
<view v-for="(item, index) in innerParsing" class="text-[26rpx] mb-[20rpx]" :key="index"> <view v-for="(item, index) in innerParsing" class="text-[26rpx] mb-[20rpx]" :key="index">
<text class="text-[#000] font-700">{{ item.title }}:&nbsp;</text> <text class="text-[#000] font-700">{{ item.title }}:&nbsp;</text>
<text class="text-[#3d3d3d] font-400">{{ item.desc }}</text> <text class="text-[#3d3d3d] font-400">{{ item.desc }}</text>
@ -57,7 +59,6 @@ watch(
_val.tags.forEach((item) => { _val.tags.forEach((item) => {
if (item.title === '策略偏好') { if (item.title === '策略偏好') {
policy.value = item policy.value = item
return
} else { } else {
innerParsing.value.push(...item.items) innerParsing.value.push(...item.items)
} }
@ -89,7 +90,7 @@ watch(
// //
const maxLength = 4 const maxLength = 4
const result = [] const result = []
let _val = value.split(',') const _val = value.split(',')
for (let i = 0; i < _val[0].length; i += maxLength) { for (let i = 0; i < _val[0].length; i += maxLength) {
result.push(value.slice(i, i + maxLength)) result.push(value.slice(i, i + maxLength))
} }

View File

@ -2,19 +2,15 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>
<template> <template>
<view :scroll-y="true" class="flex flex-col h-screen relative custom-bg"> <view :scroll-y="true" class="flex flex-col h-screen relative custom-bg">
<Navbar <Navbar safeAreaInsetTop :bordered="false" leftArrow @clickLeft="handleBack" bg-color="transparent">
safeAreaInsetTop
:bordered="false"
leftArrow
@clickLeft="handleBack"
bg-color="transparent"
>
<template #title> <template #title>
<text class="text-[#1F2329] text-[36rpx] font-medium text-[#fff]">MHT心理健康自评</text> <text class="text-[#1F2329] text-[36rpx] font-medium text-[#fff]">MHT心理健康自评</text>
</template> </template>
@ -68,6 +64,7 @@ onLoad((options) => {
.custom-bg { .custom-bg {
background: linear-gradient(184deg, #0d79fc 0%, #2186fc 100%); background: linear-gradient(184deg, #0d79fc 0%, #2186fc 100%);
} }
:deep(.icon-class) { :deep(.icon-class) {
color: #fff !important; color: #fff !important;
} }

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>

File diff suppressed because one or more lines are too long

View File

@ -1,28 +1,35 @@
<template> <template>
<CheckboxGroup <view class="custom-checkbox">
v-model="defValue"
checked-color="#1580FF" <CheckboxGroup v-model="defValue" checked-color="#1580FF" @change="handleChange" v-bind="$attrs" :default-cols="4">
@change="handleChange"
v-bind="$attrs" <Checkbox v-for="item in list" :key="item[valueKey]" :name="item[valueKey]" cell shape="button" :default-style="`
:style="{ '--default-cols': defaultCols }" ${checkboxStyle}
> --checkbox-bg: #f7f8fa;
<Checkbox --checkbox-radius: 8rpx;
v-for="item in list" --checkbox-active-border: 2rpx solid #1580ff;
:key="item[valueKey]" --checkbox-active-color: #1580ff;
:name="item[valueKey]"
cell height: var(--checkbox-height);
shape="button"
class="custom-checkbox" background-color: var(--checkbox-bg);
:style="checkboxStyle" border-radius: var(--checkbox-radius);
> display: flex;
{{ item[labelKey] }} align-items: center;
</Checkbox> justify-content: center;
</CheckboxGroup> `">
{{ item[labelKey] }}
</Checkbox>
</CheckboxGroup>
</view>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import Checkbox from './Checkbox.vue' import Checkbox from './Checkbox.vue'
import CheckboxGroup from './CheckboxGroup.vue' import CheckboxGroup from './CheckboxGroup.vue'
const props = defineProps({ const props = defineProps({
list: { list: {
type: Array, type: Array,
@ -84,15 +91,13 @@ watch(
const checkboxStyle = computed(() => { const checkboxStyle = computed(() => {
const width = typeof props.width === 'number' ? `${props.width}rpx` : props.width const width = typeof props.width === 'number' ? `${props.width}rpx` : props.width
const height = typeof props.height === 'number' ? `${props.height}rpx` : props.height const height = typeof props.height === 'number' ? `${props.height}rpx` : props.height
return { return `--checkbox-width: ${width};--checkbox-height: ${height};`
'--checkbox-width': width,
'--checkbox-height': height,
}
}) })
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
:deep(.custom-checkbox) { .custom-checkbox {
// //
--checkbox-width: 216rpx; --checkbox-width: 216rpx;
--checkbox-height: 60rpx; --checkbox-height: 60rpx;
@ -100,30 +105,29 @@ const checkboxStyle = computed(() => {
--checkbox-radius: 8rpx; --checkbox-radius: 8rpx;
color: #333; color: #333;
.checkbox {
width: var(--checkbox-width);
height: var(--checkbox-height);
min-width: var(--checkbox-width);
background-color: var(--checkbox-bg);
border-radius: var(--checkbox-radius);
display: flex;
align-items: center;
justify-content: center;
border: 2rpx solid var(--checkbox-bg);
}
.checkbox__icon {
display: none;
}
} }
:deep(.checkbox-group) { :deep(.ycym-checkbox) {
display: grid; width: var(--checkbox-width);
grid-template-columns: repeat(var(--default-cols), 1fr); height: var(--checkbox-height);
gap: 16rpx; min-width: var(--checkbox-width);
background-color: var(--checkbox-bg);
border-radius: var(--checkbox-radius);
display: flex;
align-items: center;
justify-content: center;
border: 2rpx solid var(--checkbox-bg);
} }
:deep(.checkbox__icon) {
display: none;
}
:deep(.checkbox-active) { :deep(.checkbox-active) {
border-color: #1580ff !important; border-color: #1580ff !important;
.checkbox__label { .checkbox__label {
color: #1580ff !important; color: #1580ff !important;
} }

View File

@ -1,6 +1,6 @@
<template> <template>
<view <view
class="checkbox" :style="`${defaultStyle}`"
:class="{ :class="{
'checkbox--disabled': isDisabled, 'checkbox--disabled': isDisabled,
'checkbox-active': isChecked, 'checkbox-active': isChecked,
@ -8,7 +8,7 @@
}" }"
@click="handleClick" @click="handleClick"
> >
<view class="checkbox__icon" :class="{ 'checkbox__icon--checked': isChecked }"> <view class="checkbox__icon" :class="{ 'checkbox__icon--checked': isChecked }" v-if="showIcon">
<text v-if="isChecked" class="i-carbon-checkmark checkbox__icon-check"></text> <text v-if="isChecked" class="i-carbon-checkmark checkbox__icon-check"></text>
</view> </view>
<view class="checkbox__label"> <view class="checkbox__label">
@ -33,6 +33,16 @@ const props = defineProps({
type: Boolean, type: Boolean,
default: false, default: false,
}, },
showIcon:{
default:false
},
defaultStyle:{
type:String,
default: 'display: inline-flex;align-items: center;cursor: pointer;font-size: 28rpx;'
},
checkboxActive:{
default:'background-color: #0083ff;border-color: #0083ff;'
}
}) })
const emit = defineEmits(['change']) const emit = defineEmits(['change'])
@ -83,12 +93,6 @@ const handleClick = () => {
</script> </script>
<style scoped> <style scoped>
.checkbox {
display: inline-flex;
align-items: center;
cursor: pointer;
font-size: 28rpx;
}
.checkbox--disabled { .checkbox--disabled {
cursor: not-allowed; cursor: not-allowed;
@ -108,7 +112,6 @@ const handleClick = () => {
} }
.checkbox__icon--checked { .checkbox__icon--checked {
background-color: #0083ff;
border-color: #0083ff; border-color: #0083ff;
} }
@ -122,8 +125,8 @@ const handleClick = () => {
} }
.checkbox-active { .checkbox-active {
background-color: #0083ff; border:var(--checkbox-active-border);
border-color: #0083ff; color: var(--checkbox-active-color)
} }
.checkbox-disabled { .checkbox-disabled {

View File

@ -1,5 +1,5 @@
<template> <template>
<view class="checkbox-group"> <view class="checkbox-group" :style="`${checkgroupStyle}`">
<slot></slot> <slot></slot>
</view> </view>
</template> </template>
@ -20,6 +20,10 @@ const props = defineProps({
type: Boolean, type: Boolean,
default: false, default: false,
}, },
checkgroupStyle:{
type:String,
default:'grid-template-columns: repeat(3, 1fr);'
}
}) })
const emit = defineEmits(['update:modelValue', 'change']) const emit = defineEmits(['update:modelValue', 'change'])
@ -64,9 +68,9 @@ provide('checkboxGroup', {
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.checkbox-group {
display: flex; .checkbox-group{
flex-wrap: wrap; display: grid;
gap: 20rpx; gap: 16rpx;
} }
</style> </style>

View File

@ -12,7 +12,9 @@
<view class="uni-collapse-item__title-wrap"> <view class="uni-collapse-item__title-wrap">
<slot name="title" :expanded="isOpen"> <slot name="title" :expanded="isOpen">
<view class="uni-collapse-item__title-box" :class="{ 'is-disabled': disabled }"> <view class="uni-collapse-item__title-box" :class="{ 'is-disabled': disabled }">
<image v-if="thumb" :src="thumb" class="uni-collapse-item__title-img" /> <view class="uni-collapse-item__title-img">
<image v-if="thumb" :src="thumb" class="uni-collapse-item__title-img" />
</view>
<text class="uni-collapse-item__title-text">{{ title }}</text> <text class="uni-collapse-item__title-text">{{ title }}</text>
</view> </view>
</slot> </slot>

View File

@ -1,12 +1,12 @@
<template> <template>
<view class="flex items-center rounded-[48rpx] bg-[#F7F7F7]! px-[24rpx] py-[12rpx] ml-[32rpx]"> <view class="flex items-center rounded-[48rpx] bg-[#F7F7F7] px-[24rpx] py-[12rpx] ml-[12rpx]">
<view class="i-carbon-search text-[#999]"></view> <view class="i-carbon-search text-[#999]"></view>
<input <input
v-model="searchValue" v-model="searchValue"
:placeholder="placeholder" :placeholder="placeholder"
confirm-type="search" confirm-type="search"
placeholder-style="color:#999" placeholder-style="color:#999"
class="text-start ml-20rpx" class="text-start ml-20rpx bg-transparent"
@confirm="handleConfirm" @confirm="handleConfirm"
@input="handleInput" @input="handleInput"
/> />

View File

@ -11,11 +11,13 @@
/> />
</view> </view>
<image <view class="mx-[20rpx] flex-1 h-[20rpx]">
src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/qujian.png" <image
mode="scaleToFill" src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/qujian.png"
class="mx-[20rpx] flex-1 h-[20rpx]" mode="scaleToFill"
/> class="h-[20rpx]"
/>
</view>
<view <view
class="w-[84rpx] h-[36rpx] rounded-full border-[#187CFF] border-solid border-[2rpx] flex items-center px-[18rpx] py-[10rpx] text-[#1580FF] text-[26rpx] bg-[rgba(21,128,255,0.1)]" class="w-[84rpx] h-[36rpx] rounded-full border-[#187CFF] border-solid border-[2rpx] flex items-center px-[18rpx] py-[10rpx] text-[#1580FF] text-[26rpx] bg-[rgba(21,128,255,0.1)]"
> >
@ -92,7 +94,7 @@ const handleNumberChange = () => {
} }
const handleRightThumbTouchEnd = () => { const handleRightThumbTouchEnd = () => {
let changeValue = [currentLeftValue.value, currentRightValue.value] const changeValue = [currentLeftValue.value, currentRightValue.value]
emits('change', changeValue) emits('change', changeValue)
} }

View File

@ -13,18 +13,21 @@
:class="[contentClass, fixed ? 'navbar-fixed' : '', bordered ? 'navbar-border' : '']" :class="[contentClass, fixed ? 'navbar-fixed' : '', bordered ? 'navbar-border' : '']"
:style="{ :style="{
backgroundColor: bgColor, backgroundColor: bgColor,
height: navHeight + 'px', height: `${navHeight}px`,
top: fixed ? (safeAreaInsetTop ? statusBarHeight : 0) + 'px' : '0', top: fixed ? (safeAreaInsetTop ? statusBarHeight : 0) + 'px' : '0',
}" }"
> >
<!-- 左侧区域 --> <view
<view :class="`navbar-left ${leftWidthMin ? 'w-m-[100rpx]' : ''}`" @click="handleClickLeft"> :class="`navbar-left ${leftWidthMin ? 'min-w-[48rpx]' : ''} min-w-[48rpx]`"
@click="handleClickLeft"
>
<!-- #ifndef MP-ALIPAY -->
<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>
<!-- #endif -->
<slot name="left"></slot> <slot name="left"></slot>
</view> </view>
<!-- 中间标题区域 --> <!-- 中间标题区域 -->
<view class="navbar-title"> <view class="navbar-title">
<slot name="title"> <slot name="title">
@ -51,7 +54,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { computed } from 'vue' import { getDeviceInfo, getWindowInfo } from '@/utils/tools'
defineProps({ defineProps({
title: { title: {
@ -95,8 +98,9 @@ defineProps({
const emit = defineEmits(['clickLeft']) const emit = defineEmits(['clickLeft'])
// //
const systemInfo = uni.getWindowInfo() const deviceInfo = getDeviceInfo()
const deviceInfo = uni.getDeviceInfo() const systemInfo = getWindowInfo()
const statusBarHeight = systemInfo.statusBarHeight || 0 const statusBarHeight = systemInfo.statusBarHeight || 0
// //
@ -134,20 +138,20 @@ const handleClickLeft = () => {
} }
.navbar-content { .navbar-content {
width: 100%; box-sizing: border-box;
display: flex; display: flex;
align-items: center; align-items: center;
width: 100%;
/* justify-content: space-between; */ /* justify-content: space-between; */
padding: 0 16rpx; padding: 0 16rpx;
box-sizing: border-box;
background-color: #fff; background-color: #fff;
} }
.navbar-fixed { .navbar-fixed {
position: fixed; position: fixed;
left: 0; left: 0;
width: 100%;
z-index: 99; z-index: 99;
width: 100%;
} }
.navbar-border { .navbar-border {
@ -168,20 +172,20 @@ const handleClickLeft = () => {
} }
.navbar-title { .navbar-title {
/* flex: 1; */
text-align: center;
overflow: hidden;
height: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
height: 100%;
overflow: hidden;
/* flex: 1; */
text-align: center;
} }
.title-text { .title-text {
font-size: 34rpx;
color: #333;
font-weight: 500;
overflow: hidden; overflow: hidden;
font-size: 34rpx;
font-weight: 500;
color: #333;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
@ -189,8 +193,8 @@ const handleClickLeft = () => {
.navbar-right { .navbar-right {
display: flex; display: flex;
align-items: center; align-items: center;
min-width: 52rpx;
justify-content: flex-end; justify-content: flex-end;
min-width: 52rpx;
height: 100%; height: 100%;
} }

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
<template> <template>
<view v-if="slot.default"> <view>
<slot></slot> <slot></slot>
</view> </view>
</template> </template>

View File

@ -16,13 +16,12 @@ type TableContext = {
const key = Symbol('table') const key = Symbol('table')
export function useTable() { export function useTable() {
const columns = ref<Column[]>([]) const columns = ref<Column[]>([])
const addColumn = (column: Column) => { const addColumn = (column: Column) => {
columns.value.push(column) columns.value.push(column)
} }
provide(key, { provide(key, {
columns, columns,
addColumn, addColumn,

View File

@ -1,26 +1,22 @@
<route lang="json5" type="page"> <route lang="json5" type="page">
{ {
style: { style: {
navigationStyle: 'custom', navigationBarTitleText: '在线客服',
}, },
} }
</route> </route>
<template> <template>
<view class="bg-[#fff] h-[100vh] flex flex-col"> <view class="bg-[#fff] h-[100vh] flex flex-col">
<Navbar safeAreaInsetTop :bordered="false" title="在线客服" leftArrow @clickLeft="handleBack">
<template #title>
<text class="text-[#1F2329] text-[36rpx] font-medium">在线客服</text>
</template>
</Navbar>
<view class="flex-1 bg-[#F8F8F8] px-[32rpx] pb-safe"> <view class="flex-1 bg-[#F8F8F8] px-[32rpx] pb-safe">
<view class="mt-[84rpx] h-[754rpx] rounded-[16rpx] bg-[#fff]"> <view class="mt-[84rpx] h-[754rpx] rounded-[16rpx] bg-[#fff]">
<view class="py-[48rpx] mx-[48rpx] avatar-border flex justify-center items-center"> <view class="py-[48rpx] mx-[48rpx] avatar-border flex justify-center items-center">
<image <view class="min-w-[144rpx] min-h-[144rpx] w-[144rpx] h-[144rpx]">
class="min-w-[144rpx] min-h-[144rpx] w-[144rpx] h-[144rpx] rounded-full" <image
src="https://api.static.ycymedu.com/sub/images/customerService/avatar.jpg" class="rounded-full"
></image> src="https://api.static.ycymedu.com/sub/images/customerService/avatar.jpg"
></image>
</view>
<view class="flex flex-col text-[#000] ml-[32rpx]"> <view class="flex flex-col text-[#000] ml-[32rpx]">
<text class="mb-[12rpx] font-normal text-[28rpx]">专属客服为您服务</text> <text class="mb-[12rpx] font-normal text-[28rpx]">专属客服为您服务</text>
<view class="flex items-center"> <view class="flex items-center">
@ -36,11 +32,13 @@
</view> </view>
<view class="px-[168rpx] pt-[48rpx]"> <view class="px-[168rpx] pt-[48rpx]">
<image <view class="w-[352rpx] h-[352rpx]">
class="w-[352rpx] h-[352rpx]" <image
:src="qrCodeUrl" class="w-[352rpx] h-[352rpx]"
:show-menu-by-longpress="true" :src="qrCodeUrl"
></image> :show-menu-by-longpress="true"
></image>
</view>
<view class="flex items-center justify-center mt-[34rpx]"> <view class="flex items-center justify-center mt-[34rpx]">
<view class="i-carbon-fingerprint-recognition text-[#E75859] text-[28rpx]"></view> <view class="i-carbon-fingerprint-recognition text-[#E75859] text-[28rpx]"></view>
@ -55,7 +53,6 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import Navbar from '@/pages-sub/components/navbar/Navbar.vue'
import { useUserStore } from '@/store' import { useUserStore } from '@/store'
const userStore = useUserStore() const userStore = useUserStore()
@ -84,10 +81,6 @@ const makePhoneCall = () => {
}) })
} }
const handleBack = () => {
uni.navigateBack()
}
onBeforeMount(() => { onBeforeMount(() => {
phoneNumber.value = contact[userStore.userInfo.city.code]?.phone || phoneNumber.value phoneNumber.value = contact[userStore.userInfo.city.code]?.phone || phoneNumber.value
qrCodeUrl.value = contact[userStore.userInfo.city.code]?.qrCode || qrCodeUrl.value qrCodeUrl.value = contact[userStore.userInfo.city.code]?.qrCode || qrCodeUrl.value

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>
@ -45,6 +47,7 @@
cell cell
shape="button" shape="button"
class="custom-checkbox" class="custom-checkbox"
default-style="width: 100%;height: 80rpx;background-color: #f6f7f8;border-radius: 8rpx;display: flex;align-items: center;justify-content: center;font-size: 28rpx;font-weight: 400;color: #303030;border: 2rpx solid #f6f7f8;"
> >
{{ item.name }} {{ item.name }}
</Checkbox> </Checkbox>

View File

@ -122,12 +122,12 @@
<view class="text-[24rpx] text-[#1580FF] mr-[8rpx]"> <view class="text-[24rpx] text-[#1580FF] mr-[8rpx]">
{{ isExpand ? '展开' : '收起' }} {{ isExpand ? '展开' : '收起' }}
</view> </view>
<image <view class="w-[16rpx] h-[12rpx]" :style="isExpand ? 'transform:rotate(180deg)' : ''">
src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/shouqi.png" <image
mode="scaleToFill" src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/shouqi.png"
class="w-[16rpx] h-[12rpx]" class="w-[16rpx] h-[12rpx]"
:style="isExpand ? 'transform:rotate(180deg)' : ''" />
/> </view>
</view> </view>
</view> </view>
</template> </template>

View File

@ -42,11 +42,12 @@
</view> </view>
<view class="top-[50%] left-[50%] absolute translate-x-[-50%] translate-y-[-50%]"> <view class="top-[50%] left-[50%] absolute translate-x-[-50%] translate-y-[-50%]">
<image <view class="w-[184rpx] h-[184rpx]">
src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/zhongjian.png" <image
mode="scaleToFill" src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/zhongjian.png"
class="w-[184rpx] h-[184rpx]" mode="scaleToFill"
/> />
</view>
</view> </view>
</view> </view>
</template> </template>

View File

@ -1,43 +1,53 @@
<template> <template>
<view class="w-full flex flex-col"> <view class="w-full flex flex-col">
<view class="flex flex-col items-center"> <view class="flex flex-col items-center">
<image <view class="w-full h-[538rpx]">
src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/toubu.png " <image
mode="scaleToFill" src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/toubu.png "
class="w-full h-[538rpx]" mode="scaleToFill"
/> class="w-full h-[538rpx]"
<image />
src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/mingzi.png" </view>
mode="scaleToFill" <view class="h-[44rpx] w-[420rpx] mt-[-78rpx]">
class="h-[44rpx] w-[420rpx] bg-transparent mt-[-78rpx]" <image
/> src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/mingzi.png"
mode="scaleToFill"
class="h-[44rpx] w-[420rpx] bg-transparent"
/>
</view>
</view> </view>
<view <view
class="rounded-[0rpx_0rpx_20rpx_20rpx] h-[474rpx] ml-[36rpx] mr-[38rpx] bg-white px-[24rpx] pt-[28rpx] pb-[18rpx]" class="rounded-[0rpx_0rpx_20rpx_20rpx] h-[474rpx] ml-[36rpx] mr-[38rpx] bg-white px-[24rpx] pt-[28rpx] pb-[18rpx]"
> >
<view class="flex items-center"> <view class="flex items-center">
<image <view class="w-[214rpx] h-[180rpx] min-w-[214rpx]">
src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/xuexiao.png" <image
mode="scaleToFill" src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/xuexiao.png"
class="w-[214rpx] h-[180rpx] min-w-[214rpx]" mode="scaleToFill"
@click=" class="w-[214rpx] h-[180rpx] min-w-[214rpx]"
previewImg( @click="
['https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/xuexiao.png'], previewImg(
0, [
) 'https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/xuexiao.png',
" ],
/> 0,
)
"
/>
</view>
<view class="text-[26rpx] text-[#3d3d3d] ml-[16rpx] text-wrap"> <view class="text-[26rpx] text-[#3d3d3d] ml-[16rpx] text-wrap">
经济南市教育局批准成立的十二年一贯制学校由山东锦泽实业集团投资创办坐落于济南市平阴县深泉路1号占地12万平方米环境清幽设施一流 经济南市教育局批准成立的十二年一贯制学校由山东锦泽实业集团投资创办坐落于济南市平阴县深泉路1号占地12万平方米环境清幽设施一流
</view> </view>
</view> </view>
<image <view class="h-[234rpx]">
src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/tifen.png" <image
mode="scaleToFill" src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/tifen.png"
class="h-[234rpx]" mode="scaleToFill"
/> class="h-[234rpx]"
/>
</view>
<view class="grid grid-cols-[1fr_2fr_1fr] text-[#333] text-[26rpx] gap-[10prx] mt-[6rpx]"> <view class="grid grid-cols-[1fr_2fr_1fr] text-[#333] text-[26rpx] gap-[10prx] mt-[6rpx]">
<view class="justify-self-center">轻松可提</view> <view class="justify-self-center">轻松可提</view>
<view class="justify-self-center">复读生平均提分</view> <view class="justify-self-center">复读生平均提分</view>

View File

@ -11,14 +11,16 @@
</view> </view>
<view class="grid grid-cols-2 gap-x-[16rpx] gap-y-[10rpx]"> <view class="grid grid-cols-2 gap-x-[16rpx] gap-y-[10rpx]">
<image <view class="w-full h-[170rpx]">
:src="item" <image
mode="scaleToFill" :src="item"
v-for="(item, index) in imageList" mode="scaleToFill"
:key="index" v-for="(item, index) in imageList"
class="w-full h-[170rpx]" :key="index"
@click="previewImg(imageList, index)" class="w-full h-[170rpx]"
/> @click="previewImg(imageList, index)"
/>
</view>
</view> </view>
</view> </view>
</template> </template>

View File

@ -1,11 +1,13 @@
<template> <template>
<view class="flex mx-[20rpx] flex-col"> <view class="flex mx-[20rpx] flex-col">
<view class="w-full relative z-2"> <view class="w-full relative z-2">
<image <view class="w-full h-[100rpx]">
src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/biaoti.png" <image
mode="widthFix" src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/biaoti.png"
class="w-full h-[100rpx]" mode="widthFix"
/> class="w-full h-[100rpx]"
/>
</view>
<view <view
class="text-[40rpx] font-700 absolute top-[12rpx] left-[50rpx] tracking-[10rpx] text-white italic" class="text-[40rpx] font-700 absolute top-[12rpx] left-[50rpx] tracking-[10rpx] text-white italic"
> >

View File

@ -6,7 +6,9 @@
class="rounded-[40rpx] bg-white px-[36rpx] pt-[38rpx] pb-[20rpx] grid grid-cols-4 gap-x-[0rpx] gap-y-[28rpx]" class="rounded-[40rpx] bg-white px-[36rpx] pt-[38rpx] pb-[20rpx] grid grid-cols-4 gap-x-[0rpx] gap-y-[28rpx]"
> >
<view class="flex flex-col items-center" v-for="(item, index) in schools" :key="index"> <view class="flex flex-col items-center" v-for="(item, index) in schools" :key="index">
<image :src="item.badge" mode="scaleToFill" class="w-[120rpx] h-[120rpx]" /> <view class="w-[120rpx] h-[120rpx]">
<image :src="item.badge" mode="scaleToFill" class="w-[120rpx] h-[120rpx]" />
</view>
<span class="text-[26rpx] text-[#333]">{{ item.name }}</span> <span class="text-[26rpx] text-[#333]">{{ item.name }}</span>
</view> </view>

View File

@ -1,26 +1,33 @@
<template> <template>
<view class="bg-white px-[30rpx] pb-safe pt-[14rpx] grid grid-cols-2 gap-[24rpx]"> <view class="bg-white px-[30rpx] pb-safe pt-[14rpx] grid grid-cols-2 gap-[24rpx]">
<image <view class="h-[88rpx]">
src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/dh.png" <image
mode="scaleToFill" src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/dh.png"
class="h-[88rpx]" mode="scaleToFill"
@click="handlePhone" class="h-[88rpx]"
/> @click="handlePhone"
<image />
src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/wx.png" </view>
mode="scaleToFill"
class="h-[88rpx]" <view class="h-[88rpx]">
@click="handleFriend" <image
/> src="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/wx.png"
mode="scaleToFill"
class="h-[88rpx]"
@click="handleFriend"
/>
</view>
<MessageBox v-model:show="show" title="好友添加"> <MessageBox v-model:show="show" title="好友添加">
<template> <template>
<image <view class="w-full h-[80vh] py-[20rpx]">
:src="friendImage" <image
mode="scaleToFill" :src="friendImage"
class="w-full h-[80vh] py-[20rpx]" mode="scaleToFill"
:show-menu-by-longpress="true" class="w-full h-[80vh]"
/> :show-menu-by-longpress="true"
/>
</view>
</template> </template>
</MessageBox> </MessageBox>
</view> </view>

View File

@ -9,11 +9,13 @@
<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 :current="currentIndex" class="flex-1" @change="handleSwiperChange"> <view class="flex-1">
<swiper-item v-for="(item, index) in tabs" :key="index"> <swiper :current="currentIndex" @change="handleSwiperChange">
<image :src="item.image" mode="scaleToFill" class="w-full h-full" /> <swiper-item v-for="(item, index) in tabs" :key="index">
</swiper-item> <image :src="item.image" mode="scaleToFill" class="w-full h-full" />
</swiper> </swiper-item>
</swiper>
</view>
<ShareButtonGroup <ShareButtonGroup
phone-number="18516500555" phone-number="18516500555"
friend-image="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/tianjiawx-liuxue.jpg" friend-image="https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/ad-banner/tianjiawx-liuxue.jpg"

View File

@ -20,12 +20,14 @@
</button> </button>
</Badge> </Badge>
<image <view class="w-[286rpx] h-[286rpx] mt-[134rpx]">
class="w-[286rpx] h-[286rpx] mt-[134rpx] mix-blend-darken" <image
src="https://api.static.ycymedu.com/sub/images/autoFill/auto-fill.jpg" class="w-[286rpx] h-[286rpx] mix-blend-darken"
mode="widthFix" src="https://api.static.ycymedu.com/sub/images/autoFill/auto-fill.jpg"
@click="show = true" mode="widthFix"
></image> @click="show = true"
></image>
</view>
</view> </view>
<ActionSheet <ActionSheet
v-model:show="show" v-model:show="show"
@ -76,9 +78,9 @@ const handleChange = (params) => {
} }
const handleResult = () => { const handleResult = () => {
let _params = filterMenuRef.value.handleConfirm() const _params = filterMenuRef.value.handleConfirm()
let params = { const params = {
p: userStore.userInfo.estimatedAchievement.sp, p: userStore.userInfo.estimatedAchievement.sp,
location: userStore.userInfo.estimatedAchievement.provinceCode, location: userStore.userInfo.estimatedAchievement.provinceCode,
subjects: userStore.userInfo.estimatedAchievement.subjectGroup.split(','), subjects: userStore.userInfo.estimatedAchievement.subjectGroup.split(','),
@ -91,9 +93,9 @@ const handleResult = () => {
getUniversityListByFilter(params).then((res) => { getUniversityListByFilter(params).then((res) => {
if (res.code === 200) { if (res.code === 200) {
let collegeList = (res.result as { rows: any[] }).rows const collegeList = (res.result as { rows: any[] }).rows
let wishList = collegeList.map((item) => { const wishList = collegeList.map((item) => {
let _major = { const _major = {
...item, ...item,
name: item.universityName, name: item.universityName,
vItems: item.majorItems.map((majorItem) => ({ vItems: item.majorItems.map((majorItem) => ({

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
needLogin: true, needLogin: true,
} }
@ -25,11 +27,13 @@
<text class="text-[36rpx] text-[#000] font-bold mt-[24rpx] mb-[22rpx]"> <text class="text-[36rpx] text-[#000] font-bold mt-[24rpx] mb-[22rpx]">
{{ professionInfo.career }} {{ professionInfo.career }}
</text> </text>
<image <view class="w-full h-[264rpx]">
class="w-full h-[264rpx] rounded-[8rpx]" <image
:src="professionInfo.img_url" class="w-full h-[264rpx] rounded-[8rpx]"
mode="aspectFill" :src="professionInfo.img_url"
/> mode="aspectFill"
/>
</view>
</view> </view>
<view class="h-[18rpx] bg-[#F8F8F8] mt-[24rpx] mb-[16rpx]"></view> <view class="h-[18rpx] bg-[#F8F8F8] mt-[24rpx] mb-[16rpx]"></view>
<view class=""> <view class="">

View File

@ -1,13 +1,12 @@
<route lang="json5" type="page"> <route lang="json5" type="page">
{ {
style: { style: {
navigationStyle: 'custom', navigationBarTitleText: '城市列表'
}, },
} }
</route> </route>
<template> <template>
<view class="wraper overflow-hidden flex flex-col" :bordered="false"> <view class="wraper overflow-hidden flex flex-col" :bordered="false">
<Navbar title="城市列表" left-arrow @click-left="navigatorBack" safeAreaInsetTop />
<wd-index-bar sticky class="overflow-y h-0 flex-auto"> <wd-index-bar sticky class="overflow-y h-0 flex-auto">
<view v-for="item in cities" :key="item.letter"> <view v-for="item in cities" :key="item.letter">
<wd-index-anchor :index="item.letter" /> <wd-index-anchor :index="item.letter" />
@ -28,7 +27,6 @@
import { useCityStore } from '@/store/city' import { useCityStore } from '@/store/city'
import { useUserStore } from '@/store/user' import { useUserStore } from '@/store/user'
import { City } from '@/types/app-type' import { City } from '@/types/app-type'
import Navbar from '@/pages-sub/components/navbar/Navbar.vue'
import { getUserCity } from '@/service/index/api' import { getUserCity } from '@/service/index/api'
const cityStore = useCityStore() const cityStore = useCityStore()

View File

@ -1,11 +1,13 @@
<template> <template>
<view class="flex flex-col px-[32rpx] pt-[32rpx] bg-[#fff] mt-16rpx"> <view class="flex flex-col px-[32rpx] pt-[32rpx] bg-[#fff] mt-16rpx">
<view class="flex items-center gap-[10rpx]"> <view class="flex items-center gap-[10rpx]">
<image <view class="w-[48rpx] h-[48rpx]">
class="w-[48rpx] h-[48rpx]" <image
src="https://api.static.ycymedu.com/zdx/faculty.png" class="w-[48rpx] h-[48rpx]"
mode="scaleToFill" src="https://api.static.ycymedu.com/zdx/faculty.png"
/> mode="scaleToFill"
/>
</view>
<text class="text-[32rpx] font-semibold text-[#333]">院系设置</text> <text class="text-[32rpx] font-semibold text-[#333]">院系设置</text>
</view> </view>
@ -51,9 +53,9 @@ watch(
(newVal) => { (newVal) => {
getUniversityListByProvince({ id: newVal }).then((resp) => { getUniversityListByProvince({ id: newVal }).then((resp) => {
if (resp.code === 200) { if (resp.code === 200) {
let _res = (originTableData = resp.result as { name: string; item: { name: string }[] }[]) const _res = (originTableData = resp.result as { name: string; item: { name: string }[] }[])
_res.forEach((college) => { _res.forEach((college) => {
let _college = { name: college.name, major: '' } const _college = { name: college.name, major: '' }
_college.major = college.item.map((item) => item.name).join(',') _college.major = college.item.map((item) => item.name).join(',')
tableData.value.push(_college) tableData.value.push(_college)
}) })

View File

@ -37,11 +37,13 @@
v-show="assessmentSubjectList.length > 0" v-show="assessmentSubjectList.length > 0"
> >
<view class="flex items-center gap-[10rpx]"> <view class="flex items-center gap-[10rpx]">
<image <view class="w-[48rpx] h-[48rpx]">
class="w-[48rpx] h-[48rpx]" <image
src="https://api.static.ycymedu.com/zdx/subject.png" class="w-[48rpx] h-[48rpx]"
mode="scaleToFill" src="https://api.static.ycymedu.com/zdx/subject.png"
/> mode="scaleToFill"
/>
</view>
<text class="text-[30rpx] font-600 text-[#000]"> <text class="text-[30rpx] font-600 text-[#000]">
学科评估·{{ assessmentSubjectList.length }} 学科评估·{{ assessmentSubjectList.length }}
</text> </text>
@ -72,11 +74,13 @@
</view> </view>
<view class="flex flex-col p-[32rpx] bg-[#fff] mt-[16rpx]" v-show="featureSubjectList.length > 0"> <view class="flex flex-col p-[32rpx] bg-[#fff] mt-[16rpx]" v-show="featureSubjectList.length > 0">
<view class="flex items-center gap-[10rpx]"> <view class="flex items-center gap-[10rpx]">
<image <view class="w-[48rpx] h-[48rpx]">
class="w-[48rpx] h-[48rpx]" <image
src="https://api.static.ycymedu.com/zdx/profession.png" class="w-[48rpx] h-[48rpx]"
mode="scaleToFill" src="https://api.static.ycymedu.com/zdx/profession.png"
/> mode="scaleToFill"
/>
</view>
<text class="text-[30rpx] font-600 text-[#000]"> <text class="text-[30rpx] font-600 text-[#000]">
特色专业·{{ featureSubjectList.length }} 特色专业·{{ featureSubjectList.length }}
</text> </text>
@ -207,7 +211,7 @@ const parsedNames = (name: string) => {
} }
} }
return { return {
name: name, name,
grade: '', grade: '',
} }
} }

File diff suppressed because one or more lines are too long

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>
@ -49,21 +51,21 @@
v-if="currentMenu === 1" v-if="currentMenu === 1"
@changeName="handleRegionChange" @changeName="handleRegionChange"
@change="handleRegionIdChange" @change="handleRegionIdChange"
class="custom-check-group" checkgroupStyle="display: grid;grid-template-columns: repeat(4, 1fr);gap: 16rpx;padding: 24rpx 24rpx 36rpx;"
/> />
<Nature <Nature
v-if="currentMenu === 2" v-if="currentMenu === 2"
:defaultValue="natureKeyInfo" :defaultValue="natureKeyInfo"
@changeName="handleNatureChange" @changeName="handleNatureChange"
@change="handleNatureIdChange" @change="handleNatureIdChange"
class="custom-check-group" checkgroupStyle="display: grid;grid-template-columns: repeat(4, 1fr);gap: 16rpx;padding: 24rpx 24rpx 36rpx;"
/> />
<UniType <UniType
v-if="currentMenu === 3" v-if="currentMenu === 3"
:defaultValue="uniTypeKeyInfo" :defaultValue="uniTypeKeyInfo"
@changeName="handleUniTypeChange" @changeName="handleUniTypeChange"
@change="handleUniTypeIdChange" @change="handleUniTypeIdChange"
class="custom-check-group" checkgroupStyle="display: grid;grid-template-columns: repeat(4, 1fr);gap: 16rpx;padding: 24rpx 24rpx 36rpx;"
/> />
<view class="flex items-center justify-between px-[32rpx] pb-[32rpx] gap-[20rpx]"> <view class="flex items-center justify-between px-[32rpx] pb-[32rpx] gap-[20rpx]">
<view class="cancel-btn" @click="handleClear(index)"></view> <view class="cancel-btn" @click="handleClear(index)"></view>
@ -80,8 +82,12 @@
v-for="item in schoolList" v-for="item in schoolList"
@click="itemClick(item, item.zp_index)" @click="itemClick(item, item.zp_index)"
> >
<view class="flex items-center p-[32rpx] w-full"> <view class="flex items-center p-[32rpx]">
<image class="w-[80rpx] h-[80rpx] ml-[18rpx] mr-[24rpx]" :src="item.logo"></image> <view class="w-[80rpx] h-[80rpx] ml-[18rpx] mr-[24rpx]">
<view class="w-[80rpx] h-[80rpx]">
<image class="w-[80rpx] h-[80rpx] rounded-full" :src="item.logo"></image>
</view>
</view>
<view class="flex justify-between items-center flex-1 overflow-y-hidden"> <view class="flex justify-between items-center flex-1 overflow-y-hidden">
<view class="flex flex-col w-full" 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]">

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
needLogin: true, needLogin: true,
} }
@ -24,11 +26,13 @@
<view class="flex-1 flex flex-col pb-safe overflow-y-auto"> <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 <view class="w-[104rpx] h-[104rpx]">
class="w-[104rpx] h-[104rpx]" <image
:src="universityBaseInfo?.universityResult.logo" class="w-[104rpx] h-[104rpx]"
:lazy-load="true" :src="universityBaseInfo?.universityResult.logo"
></image> :lazy-load="true"
></image>
</view>
<view class="flex flex-col ml-[24rpx]"> <view class="flex flex-col ml-[24rpx]">
<text class="text-[32rpx] font-semibold text-[#303030]"> <text class="text-[32rpx] font-semibold text-[#303030]">
{{ universityBaseInfo?.universityResult.name }} {{ universityBaseInfo?.universityResult.name }}

View File

@ -4,6 +4,7 @@
@change="handleChange" @change="handleChange"
label-key="simplename" label-key="simplename"
v-bind="$attrs" v-bind="$attrs"
:defaultCols="4"
width="100%" width="100%"
/> />
</template> </template>
@ -12,6 +13,10 @@
import { getRegionInfo } from '@/service/index/api' import { getRegionInfo } from '@/service/index/api'
import CheckGroup from '@/pages-sub/components/check-group/CheckGroup.vue' import CheckGroup from '@/pages-sub/components/check-group/CheckGroup.vue'
defineOptions({
inheritAttrs:true
})
interface Region { interface Region {
code: string code: string
name: string name: string

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
<route lang="json5" type="page"> <route lang="json5" type="page">
{ {
style: { style: {
navigationStyle: 'custom', navigationBarTitleText: '查扩缩招',
}, },
} }
</route> </route>
@ -16,19 +16,9 @@
@query="queryList" @query="queryList"
:auto-show-system-loading="true" :auto-show-system-loading="true"
:safe-area-inset-bottom="true" :safe-area-inset-bottom="true"
:pagingStyle="{ backgroundColor: 'white' }"
> >
<template #top> <template #top>
<view class="relative">
<Navbar
safeAreaInsetTop
bg-color="transparent"
:bordered="false"
left-arrow
title="查扩缩招"
@click-left="navigatorBack"
/>
<view class="custom-background h-[200rpx] w-full absolute top-0 left-0 z-[-1]"></view>
</view>
<drop-menu ref="dropMenuRef"> <drop-menu ref="dropMenuRef">
<drop-menu-item <drop-menu-item
:key="item.id" :key="item.id"
@ -41,21 +31,21 @@
:defaultValue="regionKeyInfo" :defaultValue="regionKeyInfo"
@changeName="handleRegionChange" @changeName="handleRegionChange"
@change="handleRegionChangeCode" @change="handleRegionChangeCode"
class="custom-check-group" checkgroupStyle="display: grid;grid-template-columns: repeat(4, 1fr);gap: 16rpx;padding: 24rpx 24rpx 36rpx;"
v-if="item.id === 1" v-if="item.id === 1"
/> />
<Nature <Nature
:defaultValue="natureKeyInfo" :defaultValue="natureKeyInfo"
@changeName="handleNatureChange" @changeName="handleNatureChange"
@change="handleNatureChangeCode" @change="handleNatureChangeCode"
class="custom-check-group" checkgroupStyle="display: grid;grid-template-columns: repeat(4, 1fr);gap: 16rpx;padding: 24rpx 24rpx 36rpx;"
v-if="item.id === 2" v-if="item.id === 2"
/> />
<UniType <UniType
:defaultValue="uniTypeKeyInfo" :defaultValue="uniTypeKeyInfo"
@change-name="handleUniTypeChange" @change-name="handleUniTypeChange"
@change="handleUniTypeChangeCode" @change="handleUniTypeChangeCode"
class="custom-check-group" checkgroupStyle="display: grid;grid-template-columns: repeat(4, 1fr);gap: 16rpx;padding: 24rpx 24rpx 36rpx;"
v-if="item.id === 3" v-if="item.id === 3"
/> />
<view class="flex items-center justify-between px-[32rpx] pb-[32rpx] gap-[20rpx]"> <view class="flex items-center justify-between px-[32rpx] pb-[32rpx] gap-[20rpx]">
@ -64,7 +54,6 @@
</view> </view>
</drop-menu-item> </drop-menu-item>
</drop-menu> </drop-menu>
<view class="px-32rpx"> <view class="px-32rpx">
<view class="flex items-center justify-between input-wrapper-class"> <view class="flex items-center justify-between input-wrapper-class">
<input <input
@ -79,7 +68,7 @@
</view> </view>
<view class="bg-[#F8F8F8] h-[16rpx] mt-[40rpx]"></view> <view class="bg-[#F8F8F8] h-[16rpx] mt-[40rpx]"></view>
</template> </template>
<view class="px-[32rpx] pt-[32rpx]"> <view class="px-[32rpx] pt-[32rpx] bg-white">
<view <view
class="bg-[#F7F7F7] flex items-center justify-between text-[20rpx] text-[#333] px-[28rpx] py-[16rpx] sticky top-0" class="bg-[#F7F7F7] flex items-center justify-between text-[20rpx] text-[#333] px-[28rpx] py-[16rpx] sticky top-0"
> >
@ -97,11 +86,13 @@
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 lineList" v-for="item in lineList"
> >
<view class="flex items-center justify-between text-[20rpx] text-[#333] py-[16rpx]"> <view class="flex items-center justify-between text-[20rpx] text-[#333] py-[16rpx]">
<view class="flex-1 flex items-center"> <view class="flex-1 flex items-center">
<image :src="item.logo" mode="scaleToFill" class="w-[72rpx] h-[72rpx] mr-[6rpx]" /> <view class="w-[72rpx] h-[72rpx] mr-[6rpx]">
<image :src="item.logo" mode="scaleToFill" class="w-full h-full" />
</view>
<view class="ml-[6rpx]"> <view class="ml-[6rpx]">
<view class="text-[32rpx] font-semibold text-wrap max-w-[200rpx]"> <view class="text-[32rpx] font-semibold text-wrap max-w-[200rpx]">
{{ item.name }} {{ item.name }}
@ -118,18 +109,20 @@
<text v-if="item.newPlan - item.oldPlan === 0"></text> <text v-if="item.newPlan - item.oldPlan === 0"></text>
<view v-else class="flex items-center justify-center gap-[10rpx]"> <view v-else class="flex items-center justify-center gap-[10rpx]">
<text>{{ item.newPlan - item.oldPlan }}</text> <text>{{ item.newPlan - item.oldPlan }}</text>
<image <view class="w-[16rpx] h-[16rpx]">
v-if="item.newPlan - item.oldPlan < 0" <image
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAATCAYAAACORR0GAAAAAXNSR0IArs4c6QAAARRJREFUSEu91EFOhDAYhuH370TXHGGOwMaEuNJM4jnKCYwnEE4yeAoTE0LcsZwb6BE8wFC1OBBGO6UmZboikPTJ9/Uvkj3rtbqkMUqK9nb7xEJLrmv9Bqzt/kaJXgqTrNZawXYIshQmFjgH1kPnwEboP9jVi05XkLZ3VRU6O0dQCGaRixUNkBgo2k1VhmB/IB82RcbhCcSckBMzlEpxb5MckI/hOSTZSciFTVLkXcduqLC/gzPJvJAzGeTt5mcIflfpw2ah6YYGHgZkSBeKBUFzU+XDslo/YniNAp2q0b5XUNCRR4Nc2NiEoYwKebAqOmTPpK/reMU7o8NVcCH203vURDeNTvZ7UhGS7pMUIUFI5ftv8gVvqo+bwdfwaAAAAABJRU5ErkJggg==" v-if="item.newPlan - item.oldPlan < 0"
mode="scaleToFill" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAATCAYAAACORR0GAAAAAXNSR0IArs4c6QAAARRJREFUSEu91EFOhDAYhuH370TXHGGOwMaEuNJM4jnKCYwnEE4yeAoTE0LcsZwb6BE8wFC1OBBGO6UmZboikPTJ9/Uvkj3rtbqkMUqK9nb7xEJLrmv9Bqzt/kaJXgqTrNZawXYIshQmFjgH1kPnwEboP9jVi05XkLZ3VRU6O0dQCGaRixUNkBgo2k1VhmB/IB82RcbhCcSckBMzlEpxb5MckI/hOSTZSciFTVLkXcduqLC/gzPJvJAzGeTt5mcIflfpw2ah6YYGHgZkSBeKBUFzU+XDslo/YniNAp2q0b5XUNCRR4Nc2NiEoYwKebAqOmTPpK/reMU7o8NVcCH203vURDeNTvZ7UhGS7pMUIUFI5ftv8gVvqo+bwdfwaAAAAABJRU5ErkJggg=="
class="w-[16rpx] h-[16rpx]" mode="scaleToFill"
/> class="w-[16rpx] h-[16rpx]"
<image />
v-if="item.newPlan - item.oldPlan > 0" <image
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAATCAYAAACORR0GAAAAAXNSR0IArs4c6QAAATlJREFUSEu11eFNwzAQBeB3gQEyAIV2g67QDewJgBGYgHYCRmhH8AbABHSDRhSJvxmA5sEFtTKuk7jIza9EivP57l0SQcZjY8z0ApgSGAtwI0ApInpdSkYH78bcicjy6JnkOiukQAwj8Jod+rD29qd1K78qkqusUAxRsCEX2aAQIXmviGam58mQTtTEuXVseGLItXNt+zSzAkgbhq0xjxCZg5yPnFv4WB/i3zdY0QHZr/KwAKlB2pFzL7Gqe6EjxMNEpPKmqxZydtXR2jarrhc2QGoNtBB50rc+WDOIdEIhst/tpzHjncizhyUhUagL2VfhYeVQuzqHYQj5gwFlXyZhJIeMUpH/foRb6NxIm5GPEKgK0p7SktQKZWvtG35/VtWOnE2cq1IXn3KfbIwpL4ti+dU0D+dCdEPf+I3M1u2H9e8AAAAASUVORK5CYII=" v-if="item.newPlan - item.oldPlan > 0"
mode="scaleToFill" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAATCAYAAACORR0GAAAAAXNSR0IArs4c6QAAATlJREFUSEu11eFNwzAQBeB3gQEyAIV2g67QDewJgBGYgHYCRmhH8AbABHSDRhSJvxmA5sEFtTKuk7jIza9EivP57l0SQcZjY8z0ApgSGAtwI0ApInpdSkYH78bcicjy6JnkOiukQAwj8Jod+rD29qd1K78qkqusUAxRsCEX2aAQIXmviGam58mQTtTEuXVseGLItXNt+zSzAkgbhq0xjxCZg5yPnFv4WB/i3zdY0QHZr/KwAKlB2pFzL7Gqe6EjxMNEpPKmqxZydtXR2jarrhc2QGoNtBB50rc+WDOIdEIhst/tpzHjncizhyUhUagL2VfhYeVQuzqHYQj5gwFlXyZhJIeMUpH/foRb6NxIm5GPEKgK0p7SktQKZWvtG35/VtWOnE2cq1IXn3KfbIwpL4ti+dU0D+dCdEPf+I3M1u2H9e8AAAAASUVORK5CYII="
class="w-[16rpx] h-[16rpx]" mode="scaleToFill"
/> class="w-[16rpx] h-[16rpx]"
/>
</view>
</view> </view>
</view> </view>
</view> </view>
@ -139,7 +132,6 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import Navbar from '@/pages-sub/components/navbar/Navbar.vue'
import { useUserStore } from '@/store' import { useUserStore } from '@/store'
import DropMenu from '@/pages-sub/components/drop-menu/DropMenu.vue' import DropMenu from '@/pages-sub/components/drop-menu/DropMenu.vue'
import DropMenuItem from '@/pages-sub/components/drop-menu/DropMenuItem.vue' import DropMenuItem from '@/pages-sub/components/drop-menu/DropMenuItem.vue'
@ -162,10 +154,6 @@ const handleConfirm = () => {
paging.value.reload() paging.value.reload()
} }
const navigatorBack = () => {
uni.navigateBack()
}
const handleNatureChangeCode = (val) => { const handleNatureChangeCode = (val) => {
natureKeyInfo.value = val natureKeyInfo.value = val
} }
@ -199,7 +187,7 @@ const queryList = (page: number, pageSize: number) => {
getAdmissionTrends({ getAdmissionTrends({
pageIndex: page, pageIndex: page,
pageSize, pageSize,
locationCode: userStore.userInfo.estimatedAchievement.provinceCode, locationCode: userStore.userInfo.estimatedAchievement.provinceCode || '370000',
provinceName: searchParams.value.locationName, provinceName: searchParams.value.locationName,
utype: searchParams.value.type, utype: searchParams.value.type,
nature: searchParams.value.searchNature, nature: searchParams.value.searchNature,

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
needLogin: true, needLogin: true,
} }

View File

@ -2,13 +2,15 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>
<template> <template>
<view class="flex flex-col h-screen"> <view class="flex flex-col h-screen">
<view class="relative"> <view class="relative z-11">
<Navbar <Navbar
safeAreaInsetTop safeAreaInsetTop
bg-color="transparent" bg-color="transparent"
@ -28,7 +30,7 @@
<Region <Region
:defaultValue="searchParams.locationCode ? [searchParams.locationCode] : []" :defaultValue="searchParams.locationCode ? [searchParams.locationCode] : []"
:max="1" :max="1"
class="custom-check-group" checkgroupStyle="display: grid;grid-template-columns: repeat(4, 1fr);gap: 16rpx;padding: 24rpx 24rpx 36rpx;"
@changeName="handleRegionChange" @changeName="handleRegionChange"
@change="handleRegionChangeCode" @change="handleRegionChangeCode"
/> />
@ -46,18 +48,20 @@
labelKey="year" labelKey="year"
valueKey="year" valueKey="year"
:max="1" :max="1"
class="custom-check-group" checkgroupStyle="display: grid;grid-template-columns: repeat(4, 1fr);gap: 16rpx;padding: 24rpx 24rpx 36rpx;"
width="100%" width="100%"
/> />
</drop-menu-item> </drop-menu-item>
</drop-menu> </drop-menu>
<WXXTable :data="lineList" class="px-[32rpx] mt-[16rpx] pb-safe flex-1"> <view class="px-[32rpx] mt-[16rpx] pb-safe flex-1">
<WXXTableCol prop="province_name" label="地区" width="14%"></WXXTableCol> <WXXTable :data="lineList">
<WXXTableCol prop="year" label="年份" width="23%"></WXXTableCol> <WXXTableCol prop="province_name" label="地区" width="14%"></WXXTableCol>
<WXXTableCol prop="subject_name" label="类别" width="23%"></WXXTableCol> <WXXTableCol prop="year" label="年份" width="23%"></WXXTableCol>
<WXXTableCol prop="batch_name" label="批次" width="23%"></WXXTableCol> <WXXTableCol prop="subject_name" label="类别" width="23%"></WXXTableCol>
<WXXTableCol prop="score" label="分数线" width="17%"></WXXTableCol> <WXXTableCol prop="batch_name" label="批次" width="23%"></WXXTableCol>
</WXXTable> <WXXTableCol prop="score" label="分数线" width="17%"></WXXTableCol>
</WXXTable>
</view>
</view> </view>
</template> </template>

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>
@ -9,7 +11,7 @@
<view class="flex flex-col h-screen"> <view class="flex flex-col h-screen">
<Navbar <Navbar
safeAreaInsetTop safeAreaInsetTop
bg-color="transparent" bg-color="#fff"
:bordered="false" :bordered="false"
left-arrow left-arrow
@click-left="navigatorBack" @click-left="navigatorBack"
@ -36,19 +38,19 @@
class="h-full" class="h-full"
:type="1050" :type="1050"
:keyword="searchValue" :keyword="searchValue"
v-show="currentTab === 0" v-if="currentTab === 0"
></MajorList> ></MajorList>
<MajorList <MajorList
class="h-full" class="h-full"
:type="1070" :type="1070"
:keyword="searchValue" :keyword="searchValue"
v-show="currentTab === 1" v-if="currentTab === 1"
></MajorList> ></MajorList>
<MajorList <MajorList
class="h-full" class="h-full"
:type="1060" :type="1060"
:keyword="searchValue" :keyword="searchValue"
v-show="currentTab === 2" v-if="currentTab === 2"
></MajorList> ></MajorList>
</view> </view>
</view> </view>

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>

View File

@ -1,21 +1,13 @@
<route lang="json5" type="page"> <route lang="json5" type="page">
{ {
style: { style: {
navigationStyle: 'custom', navigationBarTitleText: '详细信息',
}, },
} }
</route> </route>
<template> <template>
<view class="flex flex-col h-screen"> <view class="flex flex-col h-screen bg-white">
<Navbar
title="详细信息"
left-arrow
@click-left="navigatorBack"
safeAreaInsetTop
:bordered="false"
custom-class="bg-transparent! z-[99]"
/>
<view class="flex-1 overflow-auto pb-safe"> <view class="flex-1 overflow-auto pb-safe">
<view class="flex flex-col px-[32rpx]"> <view class="flex flex-col px-[32rpx]">
<text class="font-semibold text-[28rpx] text-[#1F2329]"> <text class="font-semibold text-[28rpx] text-[#1F2329]">
@ -29,22 +21,58 @@
</view> </view>
</view> </view>
<view class="w-full h-[1px] bg-[#E5E5E5] my-[16rpx]"></view> <view class="w-full h-[1px] bg-[#E5E5E5] my-[16rpx]"></view>
<view class="px-[32rpx]" v-html="newsDetail.detail"></view> <view class="px-[32rpx]">
<rich-text :nodes="nodes"></rich-text>
</view>
</view> </view>
</view> </view>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { useCityNewDetail, newsDetail } from '@/hooks/useCityInfoHook' import { useCityNewDetail, newsDetail } from '@/hooks/useCityInfoHook'
import * as htmlparser from 'htmlparser2'
import Navbar from '@/pages-sub/components/navbar/Navbar.vue'
const navigatorBack = () => {
uni.navigateBack()
}
onLoad((option) => { onLoad((option) => {
let newsId = option.newsId const newsId = option.newsId
useCityNewDetail(newsId) useCityNewDetail(newsId)
}) })
const nodes = ref<any[]>([])
const parseHTMLToObject = (htmlString) => {
const handler = new htmlparser.DomHandler((error, dom) => {
if (error) {
console.error('Error parsing HTML:', error)
} else {
console.log('Parsed DOM:', dom)
}
})
const parser = new htmlparser.Parser(handler)
parser.write(htmlString)
parser.end()
return handler.dom
}
function traverseNodes(nodes) {
return nodes.map((node) => {
if (node.type === 'text') {
return { type: 'text', text: node.data }
} else if (node.type === 'tag') {
return {
name: node.name,
attrs: node.attribs,
children: traverseNodes(node.children || []),
}
}
})
}
watch(
() => newsDetail.value.detail,
(newV: string) => {
const _nodes = parseHTMLToObject(newV)
nodes.value = traverseNodes(_nodes)
},
)
</script> </script>

View File

@ -1,7 +1,7 @@
<route lang="json5" type="page"> <route lang="json5" type="page">
{ {
style: { style: {
navigationStyle: 'custom', navigationBarTitleText: '高考头条'
}, },
} }
</route> </route>
@ -16,19 +16,6 @@
@virtualListChange="virtualListChange" @virtualListChange="virtualListChange"
@query="queryList" @query="queryList"
> >
<!-- 需要固定在顶部不滚动的view放在slot="top"的view中如果需要跟着滚动则不要设置slot="top" -->
<template #top>
<view class="relative h-max" hover-class="none" :hover-stop-propagation="false">
<Navbar
title="高考头条"
left-arrow
@click-left="navigatorBack"
safeAreaInsetTop
:bordered="false"
custom-class="bg-transparent! z-[99]"
/>
</view>
</template>
<view <view
class="item-wrapper" class="item-wrapper"
:id="`zp-id-${item.zp_index}`" :id="`zp-id-${item.zp_index}`"
@ -58,11 +45,6 @@
<script lang="ts" setup> <script lang="ts" setup>
import { getNewsList } from '@/service/index/api' import { getNewsList } from '@/service/index/api'
import { useUserStore } from '@/store/user' import { useUserStore } from '@/store/user'
import Navbar from '@/pages-sub/components/navbar/Navbar.vue'
const navigatorBack = () => {
uni.navigateBack()
}
const userStore = useUserStore() const userStore = useUserStore()

View File

@ -1,7 +1,7 @@
<route lang="json5" type="page"> <route lang="json5" type="page">
{ {
style: { style: {
navigationStyle: 'custom', navigationBarTitleText: '院校排行榜',
}, },
} }
</route> </route>
@ -18,28 +18,25 @@
<!-- 需要固定在顶部不滚动的view放在slot="top"的view中如果需要跟着滚动则不要设置slot="top" --> <!-- 需要固定在顶部不滚动的view放在slot="top"的view中如果需要跟着滚动则不要设置slot="top" -->
<template #top> <template #top>
<view class="relative h-[400rpx]" hover-class="none" :hover-stop-propagation="false"> <view class="relative h-[400rpx]" hover-class="none" :hover-stop-propagation="false">
<Navbar <view class="absolute top-0 z-[-1] w-full h-full">
title="院校排行榜" <image
left-arrow class=""
@click-left="navigatorBack" src="https://api.static.ycymedu.com/sub/images/schoolRank/background.svg"
safeAreaInsetTop />
:bordered="false" </view>
bgColor="transparent" <view class="h-[78rpx] w-[270rpx] absolute top-[249rpx] left-[102rpx] z-[-1]">
/> <image class="" src="https://api.static.ycymedu.com/sub/images/schoolRank/title.svg" />
<image </view>
class="absolute top-0 z-[-1]" <view
src="https://api.static.ycymedu.com/sub/images/schoolRank/background.svg"
/>
<image
class="h-[78rpx] w-[270rpx] absolute top-[249rpx] left-[102rpx] z-[-1]"
src="https://api.static.ycymedu.com/sub/images/schoolRank/title.svg"
/>
<image
class="h-[190rpx] w-[190rpx] absolute top-[194rpx] left-[460rpx] mix-blend-multiply z-[-1]" class="h-[190rpx] w-[190rpx] absolute top-[194rpx] left-[460rpx] mix-blend-multiply z-[-1]"
src="https://api.static.ycymedu.com/sub/images/schoolRank/trophy.png" >
/> <image
class="w-full h-full"
src="https://api.static.ycymedu.com/sub/images/schoolRank/trophy.png"
/>
</view>
</view> </view>
<view class="my-[24rpx]"> <view class="my-[24rpx] mx-[8rpx]">
<z-tabs <z-tabs
:current="tabIndex" :current="tabIndex"
:list="unSortTypeList" :list="unSortTypeList"
@ -55,7 +52,7 @@
top: '0', top: '0',
zIndex: '99', zIndex: '99',
height: '52rpx', height: '52rpx',
gap: '16rpx', background: 'transparent',
}" }"
:active-style="{ :active-style="{
background: 'linear-gradient( 270deg, #F2CE95 0%, #F8DEBA 100%)', background: 'linear-gradient( 270deg, #F2CE95 0%, #F8DEBA 100%)',
@ -74,7 +71,9 @@
> >
<view class="flex items-center py-[32rpx] w-full"> <view class="flex items-center py-[32rpx] w-full">
<text class="text-[28rpx] text-[#999] font-normal">{{ item.rank }}</text> <text class="text-[28rpx] text-[#999] font-normal">{{ item.rank }}</text>
<image class="w-[80rpx] h-[80rpx] ml-[18rpx] mr-[24rpx]" :src="item.logo"></image> <view class="w-[80rpx] h-[80rpx] ml-[18rpx] mr-[24rpx]">
<image class="rounded-full" :src="item.logo"></image>
</view>
<view class="flex justify-between items-center flex-1"> <view class="flex justify-between items-center flex-1">
<view class="flex flex-col" hover-class="none"> <view class="flex flex-col" hover-class="none">
<text class="text-[28rpx] text-[#333] font-medium mb-[10rpx]"> <text class="text-[28rpx] text-[#333] font-medium mb-[10rpx]">
@ -99,19 +98,14 @@
<script lang="ts" setup> <script lang="ts" setup>
import { getUniversityRank, getUnSortType } from '@/service/index/api' import { getUniversityRank, getUnSortType } from '@/service/index/api'
import zTabs from '@/pages-sub/uni_modules/z-tabs/components/z-tabs/z-tabs.vue' import zTabs from '@/pages-sub/uni_modules/z-tabs/components/z-tabs/z-tabs.vue'
import Navbar from '@/pages-sub/components/navbar/Navbar.vue'
type UnSortType = { type: number; name: string }[] type UnSortType = { type: number; name: string }[]
let unSortTypeList = ref([]) const unSortTypeList = ref([])
getUnSortType().then((res) => { getUnSortType().then((res) => {
unSortTypeList.value = res.result as UnSortType unSortTypeList.value = res.result as UnSortType
}) })
const navigatorBack = () => {
uni.navigateBack()
}
const tabIndex = ref<number>(0) const tabIndex = ref<number>(0)
const tabsRef = ref(null) const tabsRef = ref(null)
@ -188,22 +182,28 @@ const handleTabChange = (index: number) => {
:deep(.z-tabs-item) { :deep(.z-tabs-item) {
width: 160rpx; width: 160rpx;
font-size: 28rpx; font-size: 28rpx;
font-weight: 500; font-weight: 500;
color: #a28c6c; color: #a28c6c;
background-color: #f5efe1; background-color: #f5efe1;
border-radius: 8rpx; border-radius: 8rpx;
padding: 0 !important; padding: 0 !important;
} }
:deep(.z-tabs-item):not(:last-child) {
margin-right: 16rpx;
}
:deep(.z-tabs-list.tabs--z-tabs-list) { :deep(.z-tabs-list.tabs--z-tabs-list) {
margin-top: 0 !important; margin-top: 0 !important;
display: flex; display: flex;
gap: 16rpx; gap: 16rpx;
} }
:deep(.z-tabs-list) {
margin-top: 0 !important;
}
:deep(.z-tabs-item-title-container) { :deep(.z-tabs-item-title-container) {
height: 100%; height: 100%;
flex: 1 1 auto; flex: 1 1 auto;

View File

@ -38,18 +38,20 @@
</view> </view>
<view class="flex items-center gap-[8rpx]" v-else-if="col.key === 'rankDiff'"> <view class="flex items-center gap-[8rpx]" v-else-if="col.key === 'rankDiff'">
{{ item['rankDiff'] }} {{ item['rankDiff'] }}
<image <view class="w-[16rpx] h-[16rpx]">
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAATCAYAAACORR0GAAAAAXNSR0IArs4c6QAAATlJREFUSEu11eFNwzAQBeB3gQEyAIV2g67QDewJgBGYgHYCRmhH8AbABHSDRhSJvxmA5sEFtTKuk7jIza9EivP57l0SQcZjY8z0ApgSGAtwI0ApInpdSkYH78bcicjy6JnkOiukQAwj8Jod+rD29qd1K78qkqusUAxRsCEX2aAQIXmviGam58mQTtTEuXVseGLItXNt+zSzAkgbhq0xjxCZg5yPnFv4WB/i3zdY0QHZr/KwAKlB2pFzL7Gqe6EjxMNEpPKmqxZydtXR2jarrhc2QGoNtBB50rc+WDOIdEIhst/tpzHjncizhyUhUagL2VfhYeVQuzqHYQj5gwFlXyZhJIeMUpH/foRb6NxIm5GPEKgK0p7SktQKZWvtG35/VtWOnE2cq1IXn3KfbIwpL4ti+dU0D+dCdEPf+I3M1u2H9e8AAAAASUVORK5CYII=" <image
mode="scaleToFill" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAATCAYAAACORR0GAAAAAXNSR0IArs4c6QAAATlJREFUSEu11eFNwzAQBeB3gQEyAIV2g67QDewJgBGYgHYCRmhH8AbABHSDRhSJvxmA5sEFtTKuk7jIza9EivP57l0SQcZjY8z0ApgSGAtwI0ApInpdSkYH78bcicjy6JnkOiukQAwj8Jod+rD29qd1K78qkqusUAxRsCEX2aAQIXmviGam58mQTtTEuXVseGLItXNt+zSzAkgbhq0xjxCZg5yPnFv4WB/i3zdY0QHZr/KwAKlB2pFzL7Gqe6EjxMNEpPKmqxZydtXR2jarrhc2QGoNtBB50rc+WDOIdEIhst/tpzHjncizhyUhUagL2VfhYeVQuzqHYQj5gwFlXyZhJIeMUpH/foRb6NxIm5GPEKgK0p7SktQKZWvtG35/VtWOnE2cq1IXn3KfbIwpL4ti+dU0D+dCdEPf+I3M1u2H9e8AAAAASUVORK5CYII="
class="w-[16rpx] h-[16rpx]" mode="scaleToFill"
v-if="item['rankDiff'] > 0" class="w-[16rpx] h-[16rpx]"
/> v-if="item['rankDiff'] > 0"
<image />
v-else <image
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAATCAYAAACORR0GAAAAAXNSR0IArs4c6QAAARRJREFUSEu91EFOhDAYhuH370TXHGGOwMaEuNJM4jnKCYwnEE4yeAoTE0LcsZwb6BE8wFC1OBBGO6UmZboikPTJ9/Uvkj3rtbqkMUqK9nb7xEJLrmv9Bqzt/kaJXgqTrNZawXYIshQmFjgH1kPnwEboP9jVi05XkLZ3VRU6O0dQCGaRixUNkBgo2k1VhmB/IB82RcbhCcSckBMzlEpxb5MckI/hOSTZSciFTVLkXcduqLC/gzPJvJAzGeTt5mcIflfpw2ah6YYGHgZkSBeKBUFzU+XDslo/YniNAp2q0b5XUNCRR4Nc2NiEoYwKebAqOmTPpK/reMU7o8NVcCH203vURDeNTvZ7UhGS7pMUIUFI5ftv8gVvqo+bwdfwaAAAAABJRU5ErkJggg==" v-else
mode="scaleToFill" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAATCAYAAACORR0GAAAAAXNSR0IArs4c6QAAARRJREFUSEu91EFOhDAYhuH370TXHGGOwMaEuNJM4jnKCYwnEE4yeAoTE0LcsZwb6BE8wFC1OBBGO6UmZboikPTJ9/Uvkj3rtbqkMUqK9nb7xEJLrmv9Bqzt/kaJXgqTrNZawXYIshQmFjgH1kPnwEboP9jVi05XkLZ3VRU6O0dQCGaRixUNkBgo2k1VhmB/IB82RcbhCcSckBMzlEpxb5MckI/hOSTZSciFTVLkXcduqLC/gzPJvJAzGeTt5mcIflfpw2ah6YYGHgZkSBeKBUFzU+XDslo/YniNAp2q0b5XUNCRR4Nc2NiEoYwKebAqOmTPpK/reMU7o8NVcCH203vURDeNTvZ7UhGS7pMUIUFI5ftv8gVvqo+bwdfwaAAAAABJRU5ErkJggg=="
class="w-[16rpx] h-[16rpx]" mode="scaleToFill"
/> class="w-[16rpx] h-[16rpx]"
/>
</view>
</view> </view>
<view v-else> <view v-else>
{{ item[col.key] }} {{ item[col.key] }}
@ -135,20 +137,20 @@ const columns = ref([
const rankDiff = (index: number, item) => { const rankDiff = (index: number, item) => {
return index === props.data.length - 1 return index === props.data.length - 1
? item['rankLine'] ? item.rankLine
: item['rankLine'] - props.data[index + 1]['rankLine'] : item.rankLine - props.data[index + 1].rankLine
} }
const recompileData = computed(() => { const recompileData = computed(() => {
if (!props.data) return [] if (!props.data) return []
let _data = props.data.map((item, index) => { const _data = props.data.map((item, index) => {
item['rankDiff'] = item.rankDiff =
props.lowscoreRank !== -1 props.lowscoreRank !== -1
? props.lowscoreRank === 0 ? props.lowscoreRank === 0
? '--' ? '--'
: item['rankLine'] - props.lowscoreRank : item.rankLine - props.lowscoreRank
: rankDiff(index, item) : rankDiff(index, item)
item['lineDiff'] = item['score'] - props.score item.lineDiff = item.score - props.score
return item return item
}) })
return _data return _data

View File

@ -2,7 +2,9 @@
<view class="h-[16rpx] bg-[#F5F5F5]"></view> <view class="h-[16rpx] bg-[#F5F5F5]"></view>
<view class="flex items-start p-[32rpx]"> <view class="flex items-start p-[32rpx]">
<view class="flex flex-col items-center gap-[16rpx]"> <view class="flex flex-col items-center gap-[16rpx]">
<image :src="college.logo" mode="scaleToFill" class="w-[112rpx] h-[112rpx]" /> <view class="w-[112rpx] h-[112rpx]">
<image :src="college.logo" mode="scaleToFill" class="w-[112rpx] h-[112rpx]" />
</view>
<view <view
class="w-[52rpx] h-[52rpx] rounded-[8rpx] font-semibold text-[28rpx] flex items-center justify-center" class="w-[52rpx] h-[52rpx] rounded-[8rpx] font-semibold text-[28rpx] flex items-center justify-center"
:style="calcTypeName(college.type).style" :style="calcTypeName(college.type).style"

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>
@ -117,7 +119,7 @@
v-show="actionType === 2" v-show="actionType === 2"
width="210rpx" width="210rpx"
height="60rpx" height="60rpx"
class="custom-check-group" checkgroupStyle="display: grid;grid-template-columns: repeat(4, 1fr);gap: 16rpx;padding: 24rpx 24rpx 36rpx;"
@change-name="handleRegionName" @change-name="handleRegionName"
/> />

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -40,11 +40,9 @@
v-if="currentTab === 0" v-if="currentTab === 0"
@click.stop="navigatorTo(item)" @click.stop="navigatorTo(item)"
> >
<image <view class="min-w-[112rpx] min-h-[112rpx] w-[112rpx] h-[112rpx]">
class="min-w-[112rpx] min-h-[112rpx] w-[112rpx] h-[112rpx]" <image class="" :src="item.logo" mode="scaleToFill" />
:src="item.logo" </view>
mode="scaleToFill"
/>
<view class="flex flex-col flex-1"> <view class="flex flex-col flex-1">
<text class="text-[28rpx] text-[#333] font-semibold mb-[6rpx]"> <text class="text-[28rpx] text-[#333] font-semibold mb-[6rpx]">
{{ item.name }} {{ item.name }}

View File

@ -8,7 +8,7 @@
<!-- 表头 --> <!-- 表头 -->
<view class="vip-table-header"> <view class="vip-table-header">
<view class="feature-column">功能</view> <view class="feature-column">功能</view>
<view class="vip-column vip-header"> <view class="vip-column vip-header w-[66rpx] h-[46rpx]">
<image <image
src="https://api.static.ycymedu.com/sub/images/ucenter/vip-crown.png" src="https://api.static.ycymedu.com/sub/images/ucenter/vip-crown.png"
class="vip-icon" class="vip-icon"

View File

@ -9,11 +9,13 @@
<template> <template>
<view class="h-screen flex flex-col bg-[#f8f8f8]"> <view class="h-screen flex flex-col bg-[#f8f8f8]">
<view class="px-[32rpx]"> <view class="px-[32rpx]">
<image <view class="mt-[32rpx] h-[400rpx]">
src="https://api.static.ycymedu.com/sub/images/ucenter/vip-back.png" <image
class="mt-[32rpx] h-[400rpx]" src="https://api.static.ycymedu.com/sub/images/ucenter/vip-back.png"
mode="aspectFit" class="w-full h-full"
/> mode="aspectFit"
/>
</view>
<view <view
class="flex flex-col rounded-[16rpx] bg-[#fff] mt-[30rpx] pt-[24rpx] pl-[18rpx] pr-[20rpx] pb-[32rpx]" class="flex flex-col rounded-[16rpx] bg-[#fff] mt-[30rpx] pt-[24rpx] pl-[18rpx] pr-[20rpx] pb-[32rpx]"
> >
@ -108,10 +110,10 @@ const requestPay = (res) => {
provider: 'wxpay', provider: 'wxpay',
timeStamp: res.timeStamp, timeStamp: res.timeStamp,
orderInfo: '', orderInfo: '',
nonceStr: res.nonceStr, //32 nonceStr: res.nonceStr, // 32
package: res.package, //prepay_id prepay_id=xx package: res.package, // prepay_id prepay_id=xx
signType: res.signType, //MD5 signType: res.signType, // MD5
paySign: res.paySign, // paySign: res.paySign, //
success: (result) => { success: (result) => {
uni.showToast({ uni.showToast({
title: '支付成功!', title: '支付成功!',

View File

@ -1,7 +1,7 @@
{ {
"globalStyle": { "globalStyle": {
"navigationBarTextStyle": "black", "navigationBarTextStyle": "black",
"navigationBarTitleText": "六纬志愿", "navigationBarTitleText": "六纬升学",
"navigationBarBackgroundColor": "#fff", "navigationBarBackgroundColor": "#fff",
"backgroundColor": "#F8F8F8" "backgroundColor": "#F8F8F8"
}, },
@ -55,7 +55,9 @@
"style": { "style": {
"navigationStyle": "custom", "navigationStyle": "custom",
"enableShareAppMessage": true, "enableShareAppMessage": true,
"enableShareTimeline": true "enableShareTimeline": true,
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
}, },
{ {
@ -84,7 +86,9 @@
"path": "pages/ucenter/index/index", "path": "pages/ucenter/index/index",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
} }
], ],
@ -123,14 +127,16 @@
"path": "evaluation/assessmentPage", "path": "evaluation/assessmentPage",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
}, },
{ {
"path": "customerService/index/index", "path": "customerService/index/index",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationBarTitleText": "在线客服"
} }
}, },
{ {
@ -163,14 +169,18 @@
"path": "home/career/index", "path": "home/career/index",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
}, },
{ {
"path": "home/career/info", "path": "home/career/info",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
}, },
"needLogin": true "needLogin": true
}, },
@ -178,28 +188,34 @@
"path": "home/city/index", "path": "home/city/index",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationBarTitleText": "城市列表"
} }
}, },
{ {
"path": "home/college/enrollmentIntroDetail", "path": "home/college/enrollmentIntroDetail",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
}, },
{ {
"path": "home/college/index", "path": "home/college/index",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
}, },
{ {
"path": "home/college/info", "path": "home/college/info",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
}, },
"needLogin": true "needLogin": true
}, },
@ -207,21 +223,23 @@
"path": "home/distinguish/index", "path": "home/distinguish/index",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationBarTitleText": "大学甄别"
} }
}, },
{ {
"path": "home/expand/index", "path": "home/expand/index",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationBarTitleText": "查扩缩招"
} }
}, },
{ {
"path": "home/inputScore/index", "path": "home/inputScore/index",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
}, },
"needLogin": true "needLogin": true
}, },
@ -229,49 +247,57 @@
"path": "home/line/index", "path": "home/line/index",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
}, },
{ {
"path": "home/major/index", "path": "home/major/index",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
}, },
{ {
"path": "home/major/info", "path": "home/major/info",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
}, },
{ {
"path": "home/news/index", "path": "home/news/index",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationBarTitleText": "详细信息"
} }
}, },
{ {
"path": "home/news/newsList", "path": "home/news/newsList",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationBarTitleText": "高考头条"
} }
}, },
{ {
"path": "home/schoolRank/index", "path": "home/schoolRank/index",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationBarTitleText": "院校排行榜"
} }
}, },
{ {
"path": "home/wishesList/index", "path": "home/wishesList/index",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
}, },
{ {
@ -285,7 +311,9 @@
"path": "ucenter/active/activePage", "path": "ucenter/active/activePage",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
}, },
{ {
@ -350,7 +378,7 @@
"path": "index", "path": "index",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationBarTitleText": "新高考选科"
} }
}, },
{ {
@ -385,77 +413,97 @@
"path": "rank/index", "path": "rank/index",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
}, },
{ {
"path": "evaluate/academicReport/capabilityReport", "path": "evaluate/academicReport/CapabilityReport",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
}, },
{ {
"path": "evaluate/academicReport/characterReport", "path": "evaluate/academicReport/CharacterReport",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
}, },
{ {
"path": "evaluate/academicReport/interestReport", "path": "evaluate/academicReport/InterestReport",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationBarTitleText": "兴趣测评报告"
} }
}, },
{ {
"path": "evaluate/academicReport/opinionAboutReport", "path": "evaluate/academicReport/opinionAboutReport",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
}, },
{ {
"path": "evaluate/psychologicalReport/mhtReport", "path": "evaluate/psychologicalReport/mhtReport",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
}, },
{ {
"path": "evaluate/psychologicalReport/sasReport", "path": "evaluate/psychologicalReport/sasReport",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
}, },
{ {
"path": "evaluate/psychologicalReport/sdsReport", "path": "evaluate/psychologicalReport/sdsReport",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
}
},
{
"path": "evaluate/studyReport/LearnSkillReport",
"type": "page",
"style": {
"navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
}
},
{
"path": "evaluate/studyReport/LearnStudyReport",
"type": "page",
"style": {
"navigationStyle": "custom",
"transparentTitle": "always",
"navigationBarTitleText": ""
} }
}, },
{ {
"path": "evaluate/studyReport/anxietyReport", "path": "evaluate/studyReport/anxietyReport",
"type": "page", "type": "page",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
} "transparentTitle": "always",
}, "navigationBarTitleText": ""
{
"path": "evaluate/studyReport/learnSkillReport",
"type": "page",
"style": {
"navigationStyle": "custom"
}
},
{
"path": "evaluate/studyReport/learnStudyReport",
"type": "page",
"style": {
"navigationStyle": "custom"
} }
} }
] ]

View File

@ -14,7 +14,9 @@
:key="item.id" :key="item.id"
> >
<view class="flex flex-col gap-[24rpx]"> <view class="flex flex-col gap-[24rpx]">
<image :src="item.pic" mode="aspectFit" class="w-[112rpx] h-[112rpx] rounded-full" /> <view class="w-[112rpx] h-[112rpx] rounded-full">
<image :src="item.pic" mode="aspectFit" class="w-[112rpx] h-[112rpx] rounded-full" />
</view>
<button <button
:class="`appointment-btn ${item.isAppointment ? 'bg-[#1580ff]!' : ''}`" :class="`appointment-btn ${item.isAppointment ? 'bg-[#1580ff]!' : ''}`"
@click="handleAppointment(item, index)" @click="handleAppointment(item, index)"

View File

@ -3,7 +3,7 @@
class="w-full h-[184rpx] my-[32rpx]" class="w-full h-[184rpx] my-[32rpx]"
circular circular
:indicator-dots="true" :indicator-dots="true"
:autoplay="true" :autoplay="false"
:interval="3000" :interval="3000"
:duration="200" :duration="200"
> >
@ -12,7 +12,7 @@
<image <image
:src="item.img" :src="item.img"
mode="scaleToFill" mode="scaleToFill"
class="w-full rounded-[20rpx]" class="h-[184rpx] rounded-[20rpx] w-full"
@click.stop="handleRouter(item)" @click.stop="handleRouter(item)"
/> />
</view> </view>

View File

@ -4,6 +4,8 @@
navigationStyle: 'custom', navigationStyle: 'custom',
enableShareAppMessage: true, enableShareAppMessage: true,
enableShareTimeline: true, enableShareTimeline: true,
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>
@ -32,7 +34,7 @@
</navigator> </navigator>
</template> </template>
<template #title> <template #title>
<view class="title"> <view class="flex items-center justify-center w-[198rpx] h-[88rpx] text-[32rpx]">
<image <image
class="w-[198rpx] h-[32rpx]" class="w-[198rpx] h-[32rpx]"
src="https://api.static.ycymedu.com/src/images/home/app-logo.svg" src="https://api.static.ycymedu.com/src/images/home/app-logo.svg"
@ -107,14 +109,14 @@ onShow(() => {
}) })
onShareAppMessage(() => { onShareAppMessage(() => {
return { return {
title: '六纬志愿', title: '六纬升学',
path: '/pages/home/index/index', path: '/pages/home/index/index',
imageUrl: 'https://api.static.ycymedu.com/images/share.png', imageUrl: 'https://api.static.ycymedu.com/images/share.png',
} }
}) })
onShareTimeline(() => { onShareTimeline(() => {
return { return {
title: '六纬志愿', title: '六纬升学',
} }
}) })
@ -162,14 +164,6 @@ onLoad(() => {
color: #000; color: #000;
} }
.title {
display: flex;
align-items: center;
justify-content: center;
height: 44px;
font-size: 32rpx;
color: #000;
}
.custom-background { .custom-background {
background-image: linear-gradient( background-image: linear-gradient(

View File

@ -9,11 +9,13 @@
<template> <template>
<view class="flex flex-col items-center"> <view class="flex flex-col items-center">
<image <view class="w-[440rpx] h-[440rpx] mt-[136rpx]">
class="w-[440rpx] h-[440rpx] mt-[136rpx]" <image
src="https://api.static.ycymedu.com/images/logo.png" class="w-[440rpx] h-[440rpx]"
mode="aspectFit" src="https://api.static.ycymedu.com/images/logo.png"
></image> mode="aspectFit"
></image>
</view>
<button <button
class="w-[493rpx]! mb-[40rpx] h-[88rpx]! rounded-[44rpx] text-[32rpx] text-white flex items-center justify-center bg-[#1580FF]" class="w-[493rpx]! mb-[40rpx] h-[88rpx]! rounded-[44rpx] text-[32rpx] text-white flex items-center justify-center bg-[#1580FF]"

View File

@ -2,6 +2,8 @@
{ {
style: { style: {
navigationStyle: 'custom', navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
}, },
} }
</route> </route>
@ -10,14 +12,16 @@
<view class="background-wrapper"> <view class="background-wrapper">
<Navbar safeAreaInsetTop bg-color="transparent" placeholder :bordered="false"></Navbar> <Navbar safeAreaInsetTop bg-color="transparent" placeholder :bordered="false"></Navbar>
<view class="flex px-[32rpx] gap-[24rpx] custom-user-info" @click.stop="goLogin"> <view class="flex px-[32rpx] gap-[24rpx] custom-user-info" @click.stop="goLogin">
<image <view class="w-[112rpx] h-[112rpx] rounded-full">
:src=" <image
userStore.userInfo.avatar || :src="
'https://private-zhiyuan.oss-cn-beijing.aliyuncs.com/avatar.png' userStore.userInfo.avatar ||
" 'https://private-zhiyuan.oss-cn-beijing.aliyuncs.com/avatar.png'
class="w-[112rpx] h-[112rpx] rounded-full z-[1]" "
mode="scaleToFill" class="w-[112rpx] h-[112rpx] rounded-full z-[1]"
/> mode="scaleToFill"
/>
</view>
<view class="flex flex-col gap-[6rpx] py-[8rpx] z-[1] text-white"> <view class="flex flex-col gap-[6rpx] py-[8rpx] z-[1] text-white">
<view class="text-[32rpx] font-semibold flex items-center"> <view class="text-[32rpx] font-semibold flex items-center">
<view> <view>
@ -65,27 +69,33 @@
class="mx-[32rpx] flex items-center justify-center text-[#303030] text-[24rpx] bg-[#fff] pt-[24rpx] pb-[18rpx] gap-[144rpx] rounded-[8rpx]" class="mx-[32rpx] flex items-center justify-center text-[#303030] text-[24rpx] bg-[#fff] pt-[24rpx] pb-[18rpx] gap-[144rpx] rounded-[8rpx]"
> >
<view class="flex flex-col items-center gap-[16rpx]" @click="goWishList"> <view class="flex flex-col items-center gap-[16rpx]" @click="goWishList">
<image <view class="w-[51rpx] h-[51rpx]">
src="https://api.static.ycymedu.com/src/images/ucenter/wish-list.png" <image
class="w-[51rpx] h-[51rpx]" src="https://api.static.ycymedu.com/src/images/ucenter/wish-list.png"
mode="scaleToFill" class="w-[51rpx] h-[51rpx]"
/> mode="scaleToFill"
/>
</view>
<text>志愿表</text> <text>志愿表</text>
</view> </view>
<view class="flex flex-col items-center gap-[16rpx]" @click="goEvaluate"> <view class="flex flex-col items-center gap-[16rpx]" @click="goEvaluate">
<image <view class="w-[51rpx] h-[51rpx]">
src="https://api.static.ycymedu.com/src/images/ucenter/evaluation-list.png" <image
class="w-[51rpx] h-[51rpx]" src="https://api.static.ycymedu.com/src/images/ucenter/evaluation-list.png"
mode="scaleToFill" class="w-[51rpx] h-[51rpx]"
/> mode="scaleToFill"
/>
</view>
<text>测评结果</text> <text>测评结果</text>
</view> </view>
<view class="flex flex-col items-center gap-[16rpx]" @click="goStar"> <view class="flex flex-col items-center gap-[16rpx]" @click="goStar">
<image <view class="w-[51rpx] h-[51rpx]">
src="https://api.static.ycymedu.com/src/images/ucenter/star.png" <image
class="w-[51rpx] h-[51rpx]" src="https://api.static.ycymedu.com/src/images/ucenter/star.png"
mode="scaleToFill" class="w-[51rpx] h-[51rpx]"
/> mode="scaleToFill"
/>
</view>
<text>收藏</text> <text>收藏</text>
</view> </view>
</view> </view>

View File

@ -137,7 +137,7 @@ export const getUnCollectionList = (params: {
Page?: number Page?: number
PageSize?: number PageSize?: number
}) => { }) => {
//获取用户院校收藏表列表 // 获取用户院校收藏表列表
return http.get('/api/unCollection/list', params) return http.get('/api/unCollection/list', params)
} }
@ -499,7 +499,7 @@ export const authQrCode = ({
return http.post( return http.post(
'https://api.sso.ycymedu.com/api/syswxopen/hookscuess', 'https://api.sso.ycymedu.com/api/syswxopen/hookscuess',
{ {
userCode: userCode, userCode,
messageType, messageType,
weChat, weChat,
tpkey: '9k1cbc3f546eda35168c3aa3cb91780fbe703f0996c6d123ea96dc85c70bbc0a', tpkey: '9k1cbc3f546eda35168c3aa3cb91780fbe703f0996c6d123ea96dc85c70bbc0a',

View File

@ -47,16 +47,16 @@ interface NavigateToOptions {
"/login-sub/userAgreement" | "/login-sub/userAgreement" |
"/pages-evaluation-sub/aiAutoFill/index" | "/pages-evaluation-sub/aiAutoFill/index" |
"/pages-evaluation-sub/rank/index" | "/pages-evaluation-sub/rank/index" |
"/pages-evaluation-sub/evaluate/academicReport/capabilityReport" | "/pages-evaluation-sub/evaluate/academicReport/CapabilityReport" |
"/pages-evaluation-sub/evaluate/academicReport/characterReport" | "/pages-evaluation-sub/evaluate/academicReport/CharacterReport" |
"/pages-evaluation-sub/evaluate/academicReport/interestReport" | "/pages-evaluation-sub/evaluate/academicReport/InterestReport" |
"/pages-evaluation-sub/evaluate/academicReport/opinionAboutReport" | "/pages-evaluation-sub/evaluate/academicReport/opinionAboutReport" |
"/pages-evaluation-sub/evaluate/psychologicalReport/mhtReport" | "/pages-evaluation-sub/evaluate/psychologicalReport/mhtReport" |
"/pages-evaluation-sub/evaluate/psychologicalReport/sasReport" | "/pages-evaluation-sub/evaluate/psychologicalReport/sasReport" |
"/pages-evaluation-sub/evaluate/psychologicalReport/sdsReport" | "/pages-evaluation-sub/evaluate/psychologicalReport/sdsReport" |
"/pages-evaluation-sub/evaluate/studyReport/LearnSkillReport" |
"/pages-evaluation-sub/evaluate/studyReport/LearnStudyReport" |
"/pages-evaluation-sub/evaluate/studyReport/anxietyReport" | "/pages-evaluation-sub/evaluate/studyReport/anxietyReport" |
"/pages-evaluation-sub/evaluate/studyReport/learnSkillReport" |
"/pages-evaluation-sub/evaluate/studyReport/learnStudyReport" |
"/aiService-sub/index/index"; "/aiService-sub/index/index";
} }
interface RedirectToOptions extends NavigateToOptions {} interface RedirectToOptions extends NavigateToOptions {}

View File

@ -1,5 +1,6 @@
import { CustomRequestOptions } from '@/interceptors/request' import { CustomRequestOptions } from '@/interceptors/request'
import { staticBaseUrl, baseUrl } from '@/utils/index' import { staticBaseUrl, baseUrl } from '@/utils/index'
import { getDeviceInfo } from './tools'
export const http = <T>(options: CustomRequestOptions) => { export const http = <T>(options: CustomRequestOptions) => {
// 1. 返回 Promise 对象 // 1. 返回 Promise 对象
@ -7,16 +8,16 @@ export const http = <T>(options: CustomRequestOptions) => {
if (options.query?.staticType === 'static') { if (options.query?.staticType === 'static') {
options.url = `${staticBaseUrl}${options.url}` options.url = `${staticBaseUrl}${options.url}`
} else if (options.query?.hasPrefix) { } else if (options.query?.hasPrefix) {
console.log('hasPrefix', options.url)
} else { } else {
options.url = `${baseUrl}${options.url}` options.url = `${baseUrl}${options.url}`
} }
// options.url = `${options.query?.staticType === 'static' ? staticBaseUrl : baseUrl}${options.url}` // // #ifndef MP-WEIXIN
options.responseType = 'json'
// // #endif
uni.request({ uni.request({
...options, ...options,
dataType: 'json', dataType: 'json',
// #ifndef MP-WEIXIN
responseType: 'json',
// #endif
// 响应成功 // 响应成功
success(res) { success(res) {
// 状态码 2xx参考 axios 的设计 // 状态码 2xx参考 axios 的设计

View File

@ -7,13 +7,13 @@ import { CustomRequestOptions } from '@/interceptors/request'
*/ */
const http = <T>(options: CustomRequestOptions) => { const http = <T>(options: CustomRequestOptions) => {
// 1. 返回 Promise 对象 // 1. 返回 Promise 对象
// #ifndef MP-WEIXIN
options.responseType = 'json'
// #endif
return new Promise<T>((resolve, reject) => { return new Promise<T>((resolve, reject) => {
uni.request({ uni.request({
...options, ...options,
dataType: 'json', dataType: 'json',
// #ifndef MP-WEIXIN
responseType: 'json',
// #endif
// 响应成功 // 响应成功
success(res) { success(res) {
// 状态码 2xx参考 axios 的设计 // 状态码 2xx参考 axios 的设计

25
src/utils/tools.ts Normal file
View File

@ -0,0 +1,25 @@
/**
*
*
* @see [uni.getDeviceInfo](https://uniapp.dcloud.net.cn/api/system/getDeviceInfo.html)
*/
export function getDeviceInfo() {
if (uni.getSystemInfoSync || uni.canIUse('getSystemInfoSync')) {
return uni.getSystemInfoSync()
} else {
return uni.getDeviceInfo()
}
}
/**
*
*
* @see [uni.getWindowInfo](https://uniapp.dcloud.net.cn/api/system/getWindowInfo.html)
*/
export function getWindowInfo() {
if (uni.getWindowInfo || uni.canIUse('getWindowInfo')) {
return uni.getWindowInfo()
} else {
return uni.getSystemInfoSync()
}
}

View File

@ -131,6 +131,9 @@ export default ({ command, mode }) => {
alias: { alias: {
'@': path.join(process.cwd(), './src'), '@': path.join(process.cwd(), './src'),
'@img': path.join(process.cwd(), './src/static/images'), '@img': path.join(process.cwd(), './src/static/images'),
// 修复部分三方库引用 entities/decode / entities/encode 的子路径导入在 exports 下无法解析的问题
'entities/decode': 'entities/lib/decode.js',
'entities/encode': 'entities/lib/encode.js',
}, },
}, },
server: { server: {