feat: 页面适配审核需求
parent
1b4b545b65
commit
1171acbd27
|
|
@ -4,6 +4,7 @@
|
||||||
class="flex items-center justify-between mx-[34rpx] py-[26rpx]"
|
class="flex items-center justify-between mx-[34rpx] py-[26rpx]"
|
||||||
style="border-bottom: 2rpx solid #ededed"
|
style="border-bottom: 2rpx solid #ededed"
|
||||||
@click="handleChange"
|
@click="handleChange"
|
||||||
|
v-if="userStore.userInfo.openid"
|
||||||
>
|
>
|
||||||
<text class="text-[44rpx] text-[#333]">
|
<text class="text-[44rpx] text-[#333]">
|
||||||
{{
|
{{
|
||||||
|
|
@ -17,7 +18,14 @@
|
||||||
src="https://api.static.ycymedu.com/src/images/home/pen.svg"
|
src="https://api.static.ycymedu.com/src/images/home/pen.svg"
|
||||||
></image>
|
></image>
|
||||||
</view>
|
</view>
|
||||||
<view class="mt-[56rpx] flex items-center justify-between">
|
<view class="flex items-center justify-center" v-else>
|
||||||
|
<image
|
||||||
|
class="w-[74%] h-[50rpx]"
|
||||||
|
mode="widthFix"
|
||||||
|
src="https://api.static.ycymedu.com/images/homepageheadtmp.png"
|
||||||
|
/>
|
||||||
|
</view>
|
||||||
|
<view class="mt-[56rpx] flex items-center justify-between" v-if="userStore.userInfo.openid">
|
||||||
<button
|
<button
|
||||||
class="w-[240rpx]! h-[88rpx]! border-[#1580FF]! text-[#1580FF]! text-[30rpx]! font-normal! mr-[32rpx] flex! items-center! justify-center! rounded-[8rpx]!"
|
class="w-[240rpx]! h-[88rpx]! border-[#1580FF]! text-[#1580FF]! text-[30rpx]! font-normal! mr-[32rpx] flex! items-center! justify-center! rounded-[8rpx]!"
|
||||||
plain
|
plain
|
||||||
|
|
@ -32,6 +40,14 @@
|
||||||
智能填报
|
智能填报
|
||||||
</button>
|
</button>
|
||||||
</view>
|
</view>
|
||||||
|
<view class="flex items-center justify-between mt-[26rpx]" v-else>
|
||||||
|
<button
|
||||||
|
class="h-[88rpx]! w-full! text-[#fff]! text-[30rpx]! bg-[#1580FF]! font-normal flex! items-center! justify-center! rounded-[8rpx]!"
|
||||||
|
@click="navigatorToLogin"
|
||||||
|
>
|
||||||
|
登录/注册
|
||||||
|
</button>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
@ -65,4 +81,10 @@ const navigatorToAi = () => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const navigatorToLogin = () => {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/login-sub/index',
|
||||||
|
})
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
import { TabesItem } from '@/service/app'
|
import { TabesItem } from '@/service/app'
|
||||||
import { sysDictType } from '@/service/index/api'
|
import { sysDictType } from '@/service/index/api'
|
||||||
|
import { useUserStore } from '@/store'
|
||||||
|
|
||||||
const tabbarList = ref<TabesItem[]>([])
|
const tabbarList = ref<TabesItem[]>([])
|
||||||
|
const userStore = useUserStore()
|
||||||
|
|
||||||
sysDictType({ id: 619330547859525 }).then((res) => {
|
sysDictType({ id: 619330547859525 }).then((res) => {
|
||||||
const { code, result } = res
|
const { code, result } = res
|
||||||
|
|
@ -52,8 +54,10 @@ sysDictType({ id: 619330547859525 }).then((res) => {
|
||||||
if (code === 200) {
|
if (code === 200) {
|
||||||
if (status === 1) {
|
if (status === 1) {
|
||||||
tabbarList.value = _tabbarList.filter((item) => item.id !== 2)
|
tabbarList.value = _tabbarList.filter((item) => item.id !== 2)
|
||||||
|
userStore.setIsShowAi(false)
|
||||||
} else {
|
} else {
|
||||||
tabbarList.value = _tabbarList
|
tabbarList.value = _tabbarList
|
||||||
|
userStore.setIsShowAi(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -15,22 +15,30 @@
|
||||||
</text>
|
</text>
|
||||||
<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 ? 'bg-[#1580FF]' : 'bg-[#BFBFBF]'"
|
:class="checked.length > 0 ? 'bg-[#1580FF]' : 'bg-[#BFBFBF]'"
|
||||||
@click.stop="handleClick"
|
@click.stop="handleClick"
|
||||||
open-type="getPhoneNumber"
|
open-type="getPhoneNumber"
|
||||||
@getphonenumber="getPhoneNumber"
|
@getphonenumber="getPhoneNumber"
|
||||||
:disabled="!checked"
|
:disabled="checked.length === 0"
|
||||||
>
|
>
|
||||||
手机号快捷登录
|
手机号快捷登录
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<view class="flex items-center flex-nowrap" @click.stop="checked = 1">
|
<view class="flex items-center flex-nowrap">
|
||||||
<RadioGroup v-model="checked" custom-class="mr-10rpx">
|
<CheckboxGroup v-model="checked" class="check-class mr-[10rpx]">
|
||||||
<Radio :name="1"></Radio>
|
<Checkbox name="1" cell shape="button" class="custom-checkbox"></Checkbox>
|
||||||
</RadioGroup>
|
</CheckboxGroup>
|
||||||
|
|
||||||
<view class="flex items-center">
|
<view class="flex items-center">
|
||||||
<text class="text-[24rpx] whitespace-nowrap">
|
<text class="text-[24rpx] whitespace-nowrap">
|
||||||
已阅读并同意《服务条款》和《隐私条款》
|
已阅读并同意
|
||||||
|
<text class="text-[#1580FF]" @click.stop="handleClickUserAgreement">
|
||||||
|
<text>《用户协议》</text>
|
||||||
|
</text>
|
||||||
|
和
|
||||||
|
<text class="text-[#1580FF]" @click.stop="handleClickPrivacyPolicy">
|
||||||
|
<text>《隐私条款》</text>
|
||||||
|
</text>
|
||||||
</text>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
@ -44,6 +52,9 @@ import { useLogin } from '@/login-sub/hooks/useUserInfo'
|
||||||
import Overlay from './Overlay.vue'
|
import Overlay from './Overlay.vue'
|
||||||
import RadioGroup from './radio-group/RadioGroup.vue'
|
import RadioGroup from './radio-group/RadioGroup.vue'
|
||||||
import Radio from './radio-group/Radio.vue'
|
import Radio from './radio-group/Radio.vue'
|
||||||
|
import Checkbox from './check-group/Checkbox.vue'
|
||||||
|
import CheckboxGroup from './check-group/CheckboxGroup.vue'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
getSessionKey,
|
getSessionKey,
|
||||||
getVolunteerInitialization,
|
getVolunteerInitialization,
|
||||||
|
|
@ -74,9 +85,21 @@ const handleClose = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const phone = ref(true) // 手机号登陆
|
const phone = ref(true) // 手机号登陆
|
||||||
const checked = ref(0) // 是否同意条款
|
const checked = ref([]) // 是否同意条款
|
||||||
const getPhoneInfo = ref(null)
|
const getPhoneInfo = ref(null)
|
||||||
|
|
||||||
|
const handleClickUserAgreement = () => {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/login-sub/userAgreement',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleClickPrivacyPolicy = () => {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/login-sub/privacyPolicy',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
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
|
||||||
|
|
@ -169,7 +192,27 @@ const getUserInfo = async (code: string) => {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
:deep(.wd-radio) {
|
:deep(.custom-checkbox) {
|
||||||
--wot-radio-margin: 0;
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
.checkbox__icon {
|
||||||
|
border-radius: 50%;
|
||||||
|
height: 32rpx;
|
||||||
|
width: 32rpx;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-box {
|
||||||
|
width: 32rpx;
|
||||||
|
height: 32rpx;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.checkbox-active) {
|
||||||
|
border-color: #fff !important;
|
||||||
|
background-color: #fff !important;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,133 @@
|
||||||
|
<template>
|
||||||
|
<view
|
||||||
|
class="checkbox"
|
||||||
|
:class="{
|
||||||
|
'checkbox--disabled': isDisabled,
|
||||||
|
'checkbox-active': isChecked,
|
||||||
|
'checkbox-disabled': isDisabled,
|
||||||
|
}"
|
||||||
|
@click="handleClick"
|
||||||
|
>
|
||||||
|
<view class="checkbox__icon" :class="{ 'checkbox__icon--checked': isChecked }">
|
||||||
|
<text v-show="isChecked" class="i-carbon-checkmark checkbox__icon-check"></text>
|
||||||
|
</view>
|
||||||
|
<view class="checkbox__label">
|
||||||
|
<slot>{{ label }}</slot>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { computed, inject } from 'vue'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
name: {
|
||||||
|
type: [String, Number],
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
type: String,
|
||||||
|
default: '',
|
||||||
|
},
|
||||||
|
disabled: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const emit = defineEmits(['change'])
|
||||||
|
|
||||||
|
interface CheckboxGroupContext {
|
||||||
|
modelValue: ComputedRef<any[]>
|
||||||
|
disabled: ComputedRef<boolean>
|
||||||
|
max: ComputedRef<number>
|
||||||
|
selectedCount: ComputedRef<number>
|
||||||
|
toggleOption: (option: { value: string | number }) => void
|
||||||
|
}
|
||||||
|
|
||||||
|
// 注入checkbox group的上下文
|
||||||
|
const checkboxGroup = inject<CheckboxGroupContext>('checkboxGroup', {
|
||||||
|
modelValue: computed(() => []),
|
||||||
|
disabled: computed(() => false),
|
||||||
|
max: computed(() => 0),
|
||||||
|
selectedCount: computed(() => 0),
|
||||||
|
toggleOption: () => {},
|
||||||
|
})
|
||||||
|
|
||||||
|
// 是否选中
|
||||||
|
const isChecked = computed(() => {
|
||||||
|
const modelValue = checkboxGroup.modelValue.value
|
||||||
|
return modelValue.includes(props.name)
|
||||||
|
})
|
||||||
|
|
||||||
|
// 是否禁用
|
||||||
|
const isDisabled = computed(() => {
|
||||||
|
const max = checkboxGroup.max.value
|
||||||
|
const selectedCount = checkboxGroup.selectedCount.value
|
||||||
|
// 如果有原始禁用属性,或者group禁用,或者达到最大选择数且未选中,则禁用
|
||||||
|
return (
|
||||||
|
props.disabled ||
|
||||||
|
checkboxGroup.disabled.value ||
|
||||||
|
(max > 1 && !isChecked.value && selectedCount >= max)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
// 处理点击事件
|
||||||
|
const handleClick = () => {
|
||||||
|
if (isDisabled.value) return
|
||||||
|
|
||||||
|
checkboxGroup.toggleOption({
|
||||||
|
value: props.name,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.checkbox {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 28rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkbox--disabled {
|
||||||
|
cursor: not-allowed;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkbox__icon {
|
||||||
|
width: 40rpx;
|
||||||
|
height: 40rpx;
|
||||||
|
border: 2rpx solid #dcdfe6;
|
||||||
|
border-radius: 4rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
margin-right: 8rpx;
|
||||||
|
transition: all 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkbox__icon--checked {
|
||||||
|
background-color: #0083ff;
|
||||||
|
border-color: #0083ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkbox__icon-check {
|
||||||
|
color: #fff;
|
||||||
|
font-size: 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkbox__label {
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkbox-active {
|
||||||
|
background-color: #0083ff;
|
||||||
|
border-color: #0083ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkbox-disabled {
|
||||||
|
opacity: 0.5;
|
||||||
|
cursor: not-allowed !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
<template>
|
||||||
|
<view class="checkbox-group">
|
||||||
|
<slot></slot>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { provide, computed } from 'vue'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: Array,
|
||||||
|
default: () => [],
|
||||||
|
},
|
||||||
|
max: {
|
||||||
|
type: Number,
|
||||||
|
default: 0,
|
||||||
|
},
|
||||||
|
disabled: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const emit = defineEmits(['update:modelValue', 'change'])
|
||||||
|
|
||||||
|
// 内部维护一个响应式的值
|
||||||
|
const innerValue = computed(() => props.modelValue)
|
||||||
|
|
||||||
|
// 切换选项
|
||||||
|
const toggleOption = (option: { label: string; value: string | number }) => {
|
||||||
|
const currentValue = innerValue.value
|
||||||
|
const index = currentValue.indexOf(option.value)
|
||||||
|
let newValue = [...currentValue]
|
||||||
|
|
||||||
|
if (index === -1) {
|
||||||
|
if (props.max === 1) {
|
||||||
|
newValue = [option.value]
|
||||||
|
} else if (props.max && currentValue.length >= props.max) {
|
||||||
|
uni.showToast({
|
||||||
|
title: `最多只能选择${props.max}项`,
|
||||||
|
icon: 'none',
|
||||||
|
})
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
newValue.push(option.value)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
newValue.splice(index, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
emit('update:modelValue', newValue)
|
||||||
|
emit('change', newValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 提供给checkbox的上下文
|
||||||
|
provide('checkboxGroup', {
|
||||||
|
modelValue: computed(() => props.modelValue),
|
||||||
|
disabled: computed(() => props.disabled),
|
||||||
|
max: computed(() => props.max),
|
||||||
|
selectedCount: computed(() => props.modelValue.length),
|
||||||
|
toggleOption,
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.checkbox-group {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 20rpx;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<template>
|
||||||
|
<web-view src="https://api.static.ycymedu.com/lwxy.html" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup></script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<template>
|
||||||
|
<web-view src="https://api.static.ycymedu.com/lwuser.html" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup></script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
<view
|
<view
|
||||||
class="pt-[16rpx] px-[32rpx] mt-[20rpx] flex items-center justify-center bg-[#fff] pb-safe sticky bottom-0 z-999"
|
class="pt-[16rpx] px-[32rpx] mt-[20rpx] flex items-center justify-center bg-[#fff] pb-safe sticky bottom-0 z-999"
|
||||||
@click="toAiAssistant"
|
@click="toAiAssistant"
|
||||||
|
v-if="userStore.userInfo.isShowAi"
|
||||||
>
|
>
|
||||||
<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"
|
||||||
|
|
@ -14,9 +15,12 @@
|
||||||
<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 v-else class="pb-safe"></view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { useUserStore } from '@/store'
|
||||||
|
const userStore = useUserStore()
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
pageId: {
|
pageId: {
|
||||||
type: Number,
|
type: Number,
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
style: {
|
style: {
|
||||||
navigationStyle: 'custom',
|
navigationStyle: 'custom',
|
||||||
},
|
},
|
||||||
needLogin: true,
|
|
||||||
}
|
}
|
||||||
</route>
|
</route>
|
||||||
<template>
|
<template>
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
style: {
|
style: {
|
||||||
navigationStyle: 'custom',
|
navigationStyle: 'custom',
|
||||||
},
|
},
|
||||||
|
needLogin: true,
|
||||||
}
|
}
|
||||||
</route>
|
</route>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
style: {
|
style: {
|
||||||
navigationStyle: 'custom',
|
navigationStyle: 'custom',
|
||||||
},
|
},
|
||||||
needLogin: true,
|
|
||||||
}
|
}
|
||||||
</route>
|
</route>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
style: {
|
style: {
|
||||||
navigationStyle: 'custom',
|
navigationStyle: 'custom',
|
||||||
},
|
},
|
||||||
|
needLogin: true,
|
||||||
}
|
}
|
||||||
</route>
|
</route>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
style: {
|
style: {
|
||||||
navigationStyle: 'custom',
|
navigationStyle: 'custom',
|
||||||
},
|
},
|
||||||
needLogin: true,
|
|
||||||
}
|
}
|
||||||
</route>
|
</route>
|
||||||
<template>
|
<template>
|
||||||
|
|
|
||||||
|
|
@ -63,24 +63,21 @@
|
||||||
"type": "page",
|
"type": "page",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "测评"
|
"navigationBarTitleText": "测评"
|
||||||
},
|
}
|
||||||
"needLogin": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "pages/expert/index/index",
|
"path": "pages/expert/index/index",
|
||||||
"type": "page",
|
"type": "page",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "专家"
|
"navigationBarTitleText": "专家"
|
||||||
},
|
}
|
||||||
"needLogin": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "pages/ucenter/index/index",
|
"path": "pages/ucenter/index/index",
|
||||||
"type": "page",
|
"type": "page",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationStyle": "custom"
|
"navigationStyle": "custom"
|
||||||
},
|
}
|
||||||
"needLogin": true
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"preloadRule": {
|
"preloadRule": {
|
||||||
|
|
@ -141,15 +138,15 @@
|
||||||
"type": "page",
|
"type": "page",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationStyle": "custom"
|
"navigationStyle": "custom"
|
||||||
},
|
}
|
||||||
"needLogin": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "home/career/info",
|
"path": "home/career/info",
|
||||||
"type": "page",
|
"type": "page",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationStyle": "custom"
|
"navigationStyle": "custom"
|
||||||
}
|
},
|
||||||
|
"needLogin": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "home/city/index",
|
"path": "home/city/index",
|
||||||
|
|
@ -170,15 +167,15 @@
|
||||||
"type": "page",
|
"type": "page",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationStyle": "custom"
|
"navigationStyle": "custom"
|
||||||
},
|
}
|
||||||
"needLogin": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "home/college/info",
|
"path": "home/college/info",
|
||||||
"type": "page",
|
"type": "page",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationStyle": "custom"
|
"navigationStyle": "custom"
|
||||||
}
|
},
|
||||||
|
"needLogin": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "home/distinguish/index",
|
"path": "home/distinguish/index",
|
||||||
|
|
@ -214,8 +211,7 @@
|
||||||
"type": "page",
|
"type": "page",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationStyle": "custom"
|
"navigationStyle": "custom"
|
||||||
},
|
}
|
||||||
"needLogin": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "home/major/info",
|
"path": "home/major/info",
|
||||||
|
|
@ -323,6 +319,14 @@
|
||||||
"style": {
|
"style": {
|
||||||
"navigationStyle": "custom"
|
"navigationStyle": "custom"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "privacyPolicy",
|
||||||
|
"type": "page"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "userAgreement",
|
||||||
|
"type": "page"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,12 @@ const props = defineProps({
|
||||||
})
|
})
|
||||||
|
|
||||||
const toAssessmentPage = () => {
|
const toAssessmentPage = () => {
|
||||||
|
if (!userStore.userInfo.openid) {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/login-sub/index',
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
if (props.item.isFree) {
|
if (props.item.isFree) {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: `/pages-sub/evaluation/assessmentPage?id=${props.item.id}&name=${props.item.name}`,
|
url: `/pages-sub/evaluation/assessmentPage?id=${props.item.id}&name=${props.item.name}`,
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
style: {
|
style: {
|
||||||
navigationBarTitleText: '测评',
|
navigationBarTitleText: '测评',
|
||||||
},
|
},
|
||||||
needLogin: true,
|
|
||||||
}
|
}
|
||||||
</route>
|
</route>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
style: {
|
style: {
|
||||||
navigationBarTitleText: '专家',
|
navigationBarTitleText: '专家',
|
||||||
},
|
},
|
||||||
needLogin: true,
|
|
||||||
}
|
}
|
||||||
</route>
|
</route>
|
||||||
<template>
|
<template>
|
||||||
|
|
@ -63,6 +62,15 @@ const list = ref<any[]>([])
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
|
|
||||||
onShow(() => {
|
onShow(() => {
|
||||||
|
if (!userStore.userInfo.openid) {
|
||||||
|
getBusSpecialListGroup().then((res) => {
|
||||||
|
if (res.code === 200) {
|
||||||
|
list.value = res.result as any[]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
getMySpecialList({
|
getMySpecialList({
|
||||||
openId: userStore.userInfo?.estimatedAchievement.wxId.toString(),
|
openId: userStore.userInfo?.estimatedAchievement.wxId.toString(),
|
||||||
}).then((_res) => {
|
}).then((_res) => {
|
||||||
|
|
|
||||||
|
|
@ -3,22 +3,26 @@
|
||||||
style: {
|
style: {
|
||||||
navigationStyle: 'custom',
|
navigationStyle: 'custom',
|
||||||
},
|
},
|
||||||
needLogin: true,
|
|
||||||
}
|
}
|
||||||
</route>
|
</route>
|
||||||
<template>
|
<template>
|
||||||
<view class="bg-[#F8F8F8] h-screen flex flex-col gap-[32rpx]">
|
<view class="bg-[#F8F8F8] h-screen flex flex-col gap-[32rpx]">
|
||||||
<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">
|
<view class="flex px-[32rpx] gap-[24rpx] custom-user-info" @click.stop="goLogin">
|
||||||
<image
|
<image
|
||||||
:src="userStore.userInfo.avatar"
|
:src="
|
||||||
|
userStore.userInfo.avatar ||
|
||||||
|
'https://private-zhiyuan.oss-cn-beijing.aliyuncs.com/avatar.png'
|
||||||
|
"
|
||||||
class="w-[112rpx] h-[112rpx] rounded-full z-[1]"
|
class="w-[112rpx] h-[112rpx] rounded-full z-[1]"
|
||||||
mode="scaleToFill"
|
mode="scaleToFill"
|
||||||
/>
|
/>
|
||||||
<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">
|
||||||
<text class="text-[32rpx] font-semibold">{{ userStore.userInfo.nickname }}</text>
|
<text class="text-[32rpx] font-semibold">
|
||||||
<text class="text-[24rpx]">
|
{{ userStore.userInfo.nickname || '未登录' }}
|
||||||
|
</text>
|
||||||
|
<text class="text-[24rpx]" v-show="userStore.userInfo.openid">
|
||||||
{{ userStore.userInfo.estimatedAchievement.provinceName }}·{{
|
{{ userStore.userInfo.estimatedAchievement.provinceName }}·{{
|
||||||
userStore.userInfo.estimatedAchievement.expectedScore
|
userStore.userInfo.estimatedAchievement.expectedScore
|
||||||
}}
|
}}
|
||||||
|
|
@ -176,6 +180,14 @@ const toSetting = () => {
|
||||||
url: '/pages-sub/ucenter/setting/index',
|
url: '/pages-sub/ucenter/setting/index',
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const goLogin = () => {
|
||||||
|
if (!userStore.userInfo.openid) {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/login-sub/index',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@ const initState = {
|
||||||
batchDataUrl: '',
|
batchDataUrl: '',
|
||||||
batchName: '',
|
batchName: '',
|
||||||
wishList: [],
|
wishList: [],
|
||||||
|
isShowAi: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useUserStore = defineStore(
|
export const useUserStore = defineStore(
|
||||||
|
|
@ -190,6 +191,9 @@ export const useUserStore = defineStore(
|
||||||
const reset = () => {
|
const reset = () => {
|
||||||
userInfo.value = { ...initState }
|
userInfo.value = { ...initState }
|
||||||
}
|
}
|
||||||
|
const setIsShowAi = (val: boolean) => {
|
||||||
|
userInfo.value.isShowAi = val
|
||||||
|
}
|
||||||
const isLoginFlag = computed(() => !!userInfo.value.token)
|
const isLoginFlag = computed(() => !!userInfo.value.token)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
@ -216,6 +220,7 @@ export const useUserStore = defineStore(
|
||||||
sortWishCollegeList,
|
sortWishCollegeList,
|
||||||
setIsVIP,
|
setIsVIP,
|
||||||
setVipCode,
|
setVipCode,
|
||||||
|
setIsShowAi,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,7 @@ export type ExtraUserInfo = {
|
||||||
batchDataUrl: string
|
batchDataUrl: string
|
||||||
batchName: string
|
batchName: string
|
||||||
wishList: any[]
|
wishList: any[]
|
||||||
|
isShowAi: boolean
|
||||||
} & IUserInfo
|
} & IUserInfo
|
||||||
|
|
||||||
export type News = {
|
export type News = {
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,8 @@ interface NavigateToOptions {
|
||||||
"/pages-sub/ucenter/vip/openVip" |
|
"/pages-sub/ucenter/vip/openVip" |
|
||||||
"/pages-sub/ucenter/wishList/wishList" |
|
"/pages-sub/ucenter/wishList/wishList" |
|
||||||
"/login-sub/index" |
|
"/login-sub/index" |
|
||||||
|
"/login-sub/privacyPolicy" |
|
||||||
|
"/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" |
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue