feat: 钉钉适配

dingtalk
Mu Yi 2025-09-01 11:54:24 +08:00
parent 26d29fa646
commit 4bcb347d4a
63 changed files with 1274 additions and 695 deletions

View File

@ -2,7 +2,7 @@
// prettier
"editor.defaultFormatter": "esbenp.prettier-vscode",
//
"editor.formatOnSave": true,
"editor.formatOnSave": false,
//
"editor.codeActionsOnSave": {
"source.fixAll": "explicit",
@ -10,8 +10,8 @@
"source.fixAll.stylelint": "explicit"
},
// stylelint
"stylelint.validate": ["css", "scss", "vue", "html"], // package.jsonscripts
"stylelint.enable": true,
"stylelint.validate": ["css", "vue", "html"], // package.jsonscripts
"stylelint.enable": false,
"css.validate": false,
"less.validate": false,
"scss.validate": false,
@ -22,7 +22,7 @@
"editor.defaultFormatter": "foxundermoon.shell-format"
},
"[vue]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
"editor.defaultFormatter": "Vue.volar"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"

View File

@ -87,11 +87,22 @@
"bin-wrapper": "npm:bin-wrapper-china"
},
"dependencies": {
"@dcloudio/uni-app": "3.0.0-4020920240930001",
"@dcloudio/uni-app-plus": "3.0.0-4020920240930001",
"@dcloudio/uni-components": "3.0.0-4020920240930001",
"@dcloudio/uni-h5": "3.0.0-4020920240930001",
"@dcloudio/uni-mp-weixin": "3.0.0-4020920240930001",
"@dcloudio/uni-app": "3.0.0-4070520250711001",
"@dcloudio/uni-app-harmony": "3.0.0-4070520250711001",
"@dcloudio/uni-app-plus": "3.0.0-4070520250711001",
"@dcloudio/uni-components": "3.0.0-4070520250711001",
"@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",
"abortcontroller-polyfill": "^1.7.8",
"dayjs": "1.11.10",
@ -99,17 +110,18 @@
"pinia-plugin-persistedstate": "3.2.1",
"pinyin-pro": "^3.26.0",
"qs": "6.5.3",
"vue": "3.4.21",
"vue": "^3.4.21",
"vue-i18n": "^9.14.5",
"wot-design-uni": "^1.4.0"
},
"devDependencies": {
"@commitlint/cli": "^18.6.1",
"@commitlint/config-conventional": "^18.6.3",
"@dcloudio/types": "^3.4.14",
"@dcloudio/uni-automator": "3.0.0-4020920240930001",
"@dcloudio/uni-cli-shared": "3.0.0-4020920240930001",
"@dcloudio/uni-stacktracey": "3.0.0-4020920240930001",
"@dcloudio/vite-plugin-uni": "3.0.0-4020920240930001",
"@dcloudio/types": "^3.4.8",
"@dcloudio/uni-automator": "3.0.0-4070520250711001",
"@dcloudio/uni-cli-shared": "3.0.0-4070520250711001",
"@dcloudio/uni-stacktracey": "3.0.0-4070520250711001",
"@dcloudio/vite-plugin-uni": "3.0.0-4070520250711001",
"@esbuild/darwin-arm64": "0.20.2",
"@esbuild/darwin-x64": "0.20.2",
"@iconify-json/carbon": "^1.2.4",
@ -124,7 +136,7 @@
"@uni-helper/vite-plugin-uni-pages": "0.2.20",
"@uni-helper/vite-plugin-uni-platform": "^0.0.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",
"autoprefixer": "^10.4.20",
"commitlint": "^18.6.1",
@ -163,5 +175,8 @@
},
"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"
}
}

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

@ -5,12 +5,13 @@
hover-class="none"
:hover-stop-propagation="false"
>
<text class="text-[32rpx] text-[#333333] font-semibold">高考资讯</text>
<image
class="w-[40rpx] h-[40rpx]"
src="https://api.static.ycymedu.com/src/images/home/right.svg"
@click="toNewsPage"
></image>
<text class="text-[32rpx] text-[#333333] font-semibold w-max">高考资讯</text>
<view class="w-[40rpx] h-[40rpx]">
<image
src="https://api.static.ycymedu.com/src/images/home/right.svg"
@click="toNewsPage"
></image>
</view>
</view>
<view

View File

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

View File

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

View File

@ -1,5 +1,6 @@
import { onReady } from '@dcloudio/uni-app'
import { getIsTabbar, getLastItem } from '@/utils/index'
import { getWindowInfo } from '@/utils/tools'
export default () => {
// 获取页面栈
@ -9,7 +10,7 @@ export default () => {
// 页面滚动到底部时的操作,通常用于加载更多数据
const onScrollToLower = () => {}
// 获取屏幕边界到安全区域距离
const { safeAreaInsets } = uni.getWindowInfo()
const { safeAreaInsets } = getWindowInfo()
// #ifdef MP-WEIXIN
// 基于小程序的 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]"
@click.stop
>
<image
class="w-[200rpx] h-[200rpx]"
src="https://api.static.ycymedu.com/images/logo.png"
mode="aspectFit"
></image>
<view class="w-[200rpx] h-[200rpx]">
<image
class="w-[200rpx] h-[200rpx]"
src="https://api.static.ycymedu.com/images/logo.png"
mode="aspectFit"
></image>
</view>
<view class="flex flex-col items-center">
<text class="text-[26rpx] mt-[20rpx] mb-[40rpx]" :selectable="false">
{{ phone ? '申请使用您的手机号' : '申请获取您的个人信息' }}
@ -99,6 +101,8 @@ const handleClickPrivacyPolicy = () => {
}
const getPhoneNumber = async (e: any) => {
console.log(e);
if (e.detail.errMsg == 'getPhoneNumber:ok') {
const detail = e.detail
let _getPhoneInfo = {

View File

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

View File

@ -1,32 +1,22 @@
<route lang="json5" type="page">
{
style: {
navigationStyle: 'custom',
navigationBarTitleText: '新高考选科'
},
}
</route>
<template>
<view class="h-screen flex flex-col">
<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="h-screen flex flex-col bg-white">
<view class="flex flex-col justify-center items-center flex-1 pb-safe mt-[-100px]">
<image
class="w-[424rpx] h-[424rpx]"
src="https://api.static.ycymedu.com/images/logo.png"
mode="aspectFit"
></image>
<view class="w-[424rpx] h-[424rpx]">
<image
class="w-[424rpx] h-[424rpx]"
src="https://api.static.ycymedu.com/images/logo.png"
mode="aspectFit"
></image>
</view>
<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]'"
@ -82,6 +72,8 @@ const checked = ref([]) // 是否同意条款
const getPhoneInfo = ref(null)
const getPhoneNumber = async (e: any) => {
console.log(e.detail);
if (e.detail.errMsg == 'getPhoneNumber:ok') {
const detail = e.detail
let _getPhoneInfo = {

View File

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

View File

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

View File

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

View File

@ -1,24 +1,13 @@
<route lang="json5" type="page">
{
style: {
navigationStyle: 'custom',
navigationBarTitleText: '兴趣测评报告'
},
}
</route>
<template>
<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="overflow-auto relative mt-[40rpx] flex-1 pb-[20rpx]">

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,6 +1,6 @@
<template>
<view
class="checkbox"
:style="`${defaultStyle}`"
:class="{
'checkbox--disabled': isDisabled,
'checkbox-active': isChecked,
@ -8,7 +8,7 @@
}"
@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>
</view>
<view class="checkbox__label">
@ -33,6 +33,16 @@ const props = defineProps({
type: Boolean,
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'])
@ -83,12 +93,6 @@ const handleClick = () => {
</script>
<style scoped>
.checkbox {
display: inline-flex;
align-items: center;
cursor: pointer;
font-size: 28rpx;
}
.checkbox--disabled {
cursor: not-allowed;
@ -108,7 +112,6 @@ const handleClick = () => {
}
.checkbox__icon--checked {
background-color: #0083ff;
border-color: #0083ff;
}
@ -122,8 +125,8 @@ const handleClick = () => {
}
.checkbox-active {
background-color: #0083ff;
border-color: #0083ff;
border:var(--checkbox-active-border);
color: var(--checkbox-active-color)
}
.checkbox-disabled {

View File

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

View File

@ -1,12 +1,12 @@
<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-[32rpx]">
<view class="i-carbon-search text-[#999]"></view>
<input
v-model="searchValue"
:placeholder="placeholder"
confirm-type="search"
placeholder-style="color:#999"
class="text-start ml-20rpx"
class="text-start ml-20rpx bg-transparent"
@confirm="handleConfirm"
@input="handleInput"
/>

View File

@ -13,7 +13,7 @@
:class="[contentClass, fixed ? 'navbar-fixed' : '', bordered ? 'navbar-border' : '']"
:style="{
backgroundColor: bgColor,
height: navHeight + 'px',
height: `${navHeight}px`,
top: fixed ? (safeAreaInsetTop ? statusBarHeight : 0) + 'px' : '0',
}"
>
@ -51,7 +51,8 @@
</template>
<script lang="ts" setup>
import { computed } from 'vue'
import { getDeviceInfo, getWindowInfo } from '@/utils/tools'
defineProps({
title: {
@ -95,8 +96,9 @@ defineProps({
const emit = defineEmits(['clickLeft'])
//
const systemInfo = uni.getWindowInfo()
const deviceInfo = uni.getDeviceInfo()
const deviceInfo = getDeviceInfo()
const systemInfo = getWindowInfo()
const statusBarHeight = systemInfo.statusBarHeight || 0
//
@ -107,7 +109,7 @@ const navHeight = computed(() => {
// pxrpx
const ratio = 750 / screenWidth
//
if (platform === 'ios') {
return 88 / ratio // iOS 44ptpx
@ -134,20 +136,20 @@ const handleClickLeft = () => {
}
.navbar-content {
width: 100%;
box-sizing: border-box;
display: flex;
align-items: center;
width: 100%;
/* justify-content: space-between; */
padding: 0 16rpx;
box-sizing: border-box;
background-color: #fff;
}
.navbar-fixed {
position: fixed;
left: 0;
width: 100%;
z-index: 99;
width: 100%;
}
.navbar-border {
@ -168,20 +170,20 @@ const handleClickLeft = () => {
}
.navbar-title {
/* flex: 1; */
text-align: center;
overflow: hidden;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
height: 100%;
overflow: hidden;
/* flex: 1; */
text-align: center;
}
.title-text {
font-size: 34rpx;
color: #333;
font-weight: 500;
overflow: hidden;
font-size: 34rpx;
font-weight: 500;
color: #333;
text-overflow: ellipsis;
white-space: nowrap;
}
@ -189,8 +191,8 @@ const handleClickLeft = () => {
.navbar-right {
display: flex;
align-items: center;
min-width: 52rpx;
justify-content: flex-end;
min-width: 52rpx;
height: 100%;
}

File diff suppressed because one or more lines are too long

View File

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

View File

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

View File

@ -1,26 +1,23 @@
<route lang="json5" type="page">
{
style: {
navigationStyle: 'custom',
navigationBarTitleText: '在线客服'
},
}
</route>
<template>
<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="mt-[84rpx] h-[754rpx] rounded-[16rpx] bg-[#fff]">
<view class="py-[48rpx] mx-[48rpx] avatar-border flex justify-center items-center">
<image
class="min-w-[144rpx] min-h-[144rpx] w-[144rpx] h-[144rpx] rounded-full"
src="https://api.static.ycymedu.com/sub/images/customerService/avatar.jpg"
></image>
<view class="min-w-[144rpx] min-h-[144rpx] w-[144rpx] h-[144rpx]">
<image
class=" rounded-full"
src="https://api.static.ycymedu.com/sub/images/customerService/avatar.jpg"
></image>
</view>
<view class="flex flex-col text-[#000] ml-[32rpx]">
<text class="mb-[12rpx] font-normal text-[28rpx]">专属客服为您服务</text>
<view class="flex items-center">
@ -55,7 +52,6 @@
</template>
<script lang="ts" setup>
import Navbar from '@/pages-sub/components/navbar/Navbar.vue'
import { useUserStore } from '@/store'
const userStore = useUserStore()
@ -84,10 +80,6 @@ const makePhoneCall = () => {
})
}
const handleBack = () => {
uni.navigateBack()
}
onBeforeMount(() => {
phoneNumber.value = contact[userStore.userInfo.city.code]?.phone || phoneNumber.value
qrCodeUrl.value = contact[userStore.userInfo.city.code]?.qrCode || qrCodeUrl.value

View File

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

View File

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

View File

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

View File

@ -1,13 +1,12 @@
<route lang="json5" type="page">
{
style: {
navigationStyle: 'custom',
navigationBarTitleText: '城市列表'
},
}
</route>
<template>
<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">
<view v-for="item in cities" :key="item.letter">
<wd-index-anchor :index="item.letter" />
@ -28,7 +27,6 @@
import { useCityStore } from '@/store/city'
import { useUserStore } from '@/store/user'
import { City } from '@/types/app-type'
import Navbar from '@/pages-sub/components/navbar/Navbar.vue'
import { getUserCity } from '@/service/index/api'
const cityStore = useCityStore()

View File

@ -56,7 +56,7 @@
@change-name="handleRegionChangeName"
:defaultValue="provinceCode"
:max="1"
class="custom-check-group w-full"
class="w-full"
:defaultCols="4"
/>
</view>

View File

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

View File

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

View File

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

View File

@ -4,6 +4,7 @@
@change="handleChange"
label-key="simplename"
v-bind="$attrs"
:defaultCols="4"
width="100%"
/>
</template>
@ -12,6 +13,10 @@
import { getRegionInfo } from '@/service/index/api'
import CheckGroup from '@/pages-sub/components/check-group/CheckGroup.vue'
defineOptions({
inheritAttrs:true
})
interface Region {
code: 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">
{
style: {
navigationStyle: 'custom',
navigationBarTitleText:'查扩缩招'
},
}
</route>
@ -18,17 +18,6 @@
:safe-area-inset-bottom="true"
>
<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-item
:key="item.id"
@ -41,21 +30,21 @@
:defaultValue="regionKeyInfo"
@changeName="handleRegionChange"
@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"
/>
<Nature
:defaultValue="natureKeyInfo"
@changeName="handleNatureChange"
@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"
/>
<UniType
:defaultValue="uniTypeKeyInfo"
@change-name="handleUniTypeChange"
@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"
/>
<view class="flex items-center justify-between px-[32rpx] pb-[32rpx] gap-[20rpx]">
@ -101,7 +90,9 @@
>
<view class="flex items-center justify-between text-[20rpx] text-[#333] py-[16rpx]">
<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="text-[32rpx] font-semibold text-wrap max-w-[200rpx]">
{{ item.name }}
@ -139,7 +130,6 @@
</template>
<script lang="ts" setup>
import Navbar from '@/pages-sub/components/navbar/Navbar.vue'
import { useUserStore } from '@/store'
import DropMenu from '@/pages-sub/components/drop-menu/DropMenu.vue'
import DropMenuItem from '@/pages-sub/components/drop-menu/DropMenuItem.vue'
@ -199,7 +189,7 @@ const queryList = (page: number, pageSize: number) => {
getAdmissionTrends({
pageIndex: page,
pageSize,
locationCode: userStore.userInfo.estimatedAchievement.provinceCode,
locationCode: userStore.userInfo.estimatedAchievement.provinceCode || '370000',
provinceName: searchParams.value.locationName,
utype: searchParams.value.type,
nature: searchParams.value.searchNature,

View File

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

View File

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

View File

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

View File

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

View File

@ -1,21 +1,13 @@
<route lang="json5" type="page">
{
style: {
navigationStyle: 'custom',
navigationBarTitleText: '详细信息'
},
}
</route>
<template>
<view class="flex flex-col h-screen">
<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 flex-col px-[32rpx]">
<text class="font-semibold text-[28rpx] text-[#1F2329]">
@ -37,12 +29,6 @@
<script lang="ts" setup>
import { useCityNewDetail, newsDetail } from '@/hooks/useCityInfoHook'
import Navbar from '@/pages-sub/components/navbar/Navbar.vue'
const navigatorBack = () => {
uni.navigateBack()
}
onLoad((option) => {
let newsId = option.newsId
useCityNewDetail(newsId)

View File

@ -1,7 +1,7 @@
<route lang="json5" type="page">
{
style: {
navigationStyle: 'custom',
navigationBarTitleText: '高考头条'
},
}
</route>
@ -16,19 +16,6 @@
@virtualListChange="virtualListChange"
@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
class="item-wrapper"
:id="`zp-id-${item.zp_index}`"
@ -58,11 +45,6 @@
<script lang="ts" setup>
import { getNewsList } from '@/service/index/api'
import { useUserStore } from '@/store/user'
import Navbar from '@/pages-sub/components/navbar/Navbar.vue'
const navigatorBack = () => {
uni.navigateBack()
}
const userStore = useUserStore()

View File

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

View File

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

View File

@ -2,6 +2,8 @@
{
style: {
navigationStyle: 'custom',
transparentTitle: 'always',
navigationBarTitleText: '',
},
}
</route>
@ -20,24 +22,29 @@
></Navbar>
<view class="bg-[#fff] rounded-[8rpx] px-[46rpx] pt-[40rpx] pb-[30rpx] mx-[30rpx] mt-[40rpx]">
<view class="flex items-center gap-[12rpx]">
<image
:src="userStore.userInfo?.avatar"
mode="scaleToFill"
class="w-[60rpx] h-[60rpx] rounded-full"
/>
<view class="w-[60rpx] h-[60rpx]">
<image
:src="userStore.userInfo?.avatar"
mode="scaleToFill"
class="rounded-full"
/>
</view>
<text class="text-[#000] text-[36rpx] font-bold">{{ userStore.userInfo?.nickname }}</text>
<image
src="https://api.static.ycymedu.com/sub/images/ucenter/vip-flag.png"
mode="scaleToFill"
class="w-[120rpx] h-[28rpx]"
v-if="isVIP"
/>
<image
v-else
src="https://api.static.ycymedu.com/sub/images/ucenter/no-vip.png"
mode="scaleToFill"
class="w-[120rpx] h-[28rpx]"
/>
<view class="w-[120rpx] h-[28rpx]" v-if="isVIP">
<image
src="https://api.static.ycymedu.com/sub/images/ucenter/vip-flag.png"
mode="scaleToFill"
class="w-full h-full"
/>
</view>
<view v-else class="w-[120rpx] h-[28rpx]">
<image
src="https://api.static.ycymedu.com/sub/images/ucenter/no-vip.png"
mode="scaleToFill"
class="w-full h-full"
/>
</view>
</view>
<view class="mt-[40rpx]">
@ -137,8 +144,6 @@ const isVIP = computed(() => {
})
const handleClickLeft = () => {
console.log(123)
uni.navigateBack()
}

View File

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

View File

@ -14,7 +14,9 @@
:key="item.id"
>
<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
:class="`appointment-btn ${item.isAppointment ? 'bg-[#1580ff]!' : ''}`"
@click="handleAppointment(item, index)"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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