Compare commits

15 Commits

Author SHA1 Message Date
d78382ba08 Merge remote-tracking branch 'origin/main' into CareerMap 2025-12-08 20:24:39 +08:00
a74cdcc850 Fix career map missing info redirect flow 2025-12-08 20:22:40 +08:00
d89b566ad3 修改政策 2025-12-08 16:11:01 +08:00
3c66e16e49 Merge branch 'main' of http://124.243.245.42:3000/sdz/ks-app-employment-service 2025-12-08 16:02:20 +08:00
ccbb5008bd 修改跳转 2025-12-08 16:01:34 +08:00
bc48d7fff0 fix:修改跳转逻辑 2025-12-05 17:59:37 +08:00
francis_fh
6baacfcf20 Merge branch 'main' of http://124.243.245.42:3000/sdz/ks-app-employment-service 2025-12-05 17:11:56 +08:00
sh
e290340b8c Merge branch 'CareerMap'
# Conflicts:
#	config.js
2025-12-05 17:07:38 +08:00
francis_fh
c4f7d6d998 服务指导页面优化 2025-12-05 17:06:22 +08:00
fa7749da9d fix: 更新 appUserInfo 完整地址 2025-12-05 17:02:44 +08:00
francis_fh
b2016378fb 服务指导页面开发 2025-12-05 17:01:50 +08:00
francis_fh
a812c7b1d6 Merge branch 'main' of http://124.243.245.42:3000/sdz/ks-app-employment-service 2025-12-05 16:29:49 +08:00
francis_fh
85a6066494 优化页面栈 2025-12-05 16:29:47 +08:00
hanguangpu01
ad69929666 Merge branch 'main' of http://124.243.245.42:3000/sdz/ks-app-employment-service 2025-12-05 16:21:00 +08:00
hanguangpu01
75a8edad10 feat(video): 优化视频详情页加载逻辑
- 添加 v-if 条件渲染确保视频封面存在时才加载视频组件
- 设置 preload="metadata" 提高页面初始加载性能
- 保留原有事件监听器和样式配置
2025-12-05 16:20:56 +08:00
13 changed files with 668 additions and 68 deletions

View File

@@ -8,7 +8,7 @@ import request from '@/utilsRc/request'
// 获取用户信息(职业规划推荐用)
export function appUserInfo() {
return request({
fullUrl: 'http://ks.zhaopinzao8dian.com/api/ks/app/user/appUserInfo',
fullUrl: 'http://222.80.110.161:11111/api/ks/app/user/appUserInfo',
method: 'get'
})
}

View File

@@ -61,34 +61,74 @@ export const urls ='http://222.80.110.161:11111/images/train/'
* @param {object} options.query - 携带参数
* @param {function} options.onBack - 页面返回时的回调(目标页调用 uni.navigateBack 时传递数据)
*/
export const navTo = function(url, {
needLogin = false,
query = {},
onBack = null
} = {}) {
const userStore = useUserStore();
if (needLogin && !userStore.hasLogin) {
uni.navigateTo({
url: '/pages/complete-info/complete-info'
});
return;
}
const queryStr = Object.entries(query)
.map(([key, val]) => `${key}=${encodeURIComponent(val)}`)
.join('&');
const finalUrl = queryStr ? `${url}?${queryStr}` : url;
if (onBack) {
const pages = getCurrentPages();
const currentPage = pages[pages.length - 1];
currentPage.__onBackCallback__ = onBack;
}
uni.navigateTo({
url: finalUrl
});
export const navTo = function(url, {
needLogin = false,
query = {},
onBack = null
} = {}) {
const userStore = useUserStore();
if (needLogin && !userStore.hasLogin) {
const pages = getCurrentPages();
if (pages.length >= 10) {
uni.redirectTo({
url: '/pages/complete-info/complete-info',
fail: (err) => {
console.error('页面跳转失败:', err);
}
});
} else {
uni.navigateTo({
url: '/pages/complete-info/complete-info',
fail: (err) => {
console.error('页面跳转失败:', err);
uni.redirectTo({
url: '/pages/complete-info/complete-info',
fail: (err2) => {
console.error('redirectTo也失败:', err2);
}
});
}
});
}
return;
}
const queryStr = Object.entries(query)
.map(([key, val]) => `${key}=${encodeURIComponent(val)}`)
.join('&');
const finalUrl = queryStr ? `${url}?${queryStr}` : url;
if (onBack) {
const pages = getCurrentPages();
const currentPage = pages[pages.length - 1];
currentPage.__onBackCallback__ = onBack;
}
const pages = getCurrentPages();
if (pages.length >= 10) {
// 页面栈已满使用redirectTo替代
uni.redirectTo({
url: finalUrl,
fail: (err) => {
console.error('页面跳转失败:', err);
}
});
} else {
uni.navigateTo({
url: finalUrl,
fail: (err) => {
console.error('页面跳转失败:', err);
// 失败后尝试redirectTo
uni.redirectTo({
url: finalUrl,
fail: (err2) => {
console.error('redirectTo也失败:', err2);
}
});
}
});
}
};
export const navBack = function({

View File

@@ -1,6 +1,6 @@
export default {
// baseUrl: 'http://39.98.44.136:8080', // 测试
baseUrl: 'http://222.80.110.161:11111/api/ks', // 正式环境
baseUrl: 'http://222.80.110.161:11111/api/ks', // 测试
// baseUrl: 'http://ks.zhaopinzao8dian.com/api/ks', // 测试
// LCBaseUrl:'http://10.110.145.145:9100',//内网端口

View File

@@ -81,10 +81,16 @@ const fromValue = reactive({
area: '',
jobTitleId: [],
});
onLoad(async () => {
const needSkill = ref(false);
onLoad(async (options) => {
// 初始化字典数据
await getDictData();
initLoad();
// 检查是否需要继续跳转到技能页面
if (options && options.needSkill === 'true') {
needSkill.value = true;
}
});
const confirm = () => {
if (!fromValue.jobTitleId) {
@@ -94,7 +100,12 @@ const confirm = () => {
$api.msg('完成');
state.disbleDate = true;
getUserResume().then(() => {
navBack();
// 如果需要继续跳转到技能页面,则跳转到个人信息页面(携带 needSkill 标记,便于返回两级)
if (needSkill.value) {
navTo('/packageA/pages/personalInfo/personalInfo?needSkill=true');
} else {
navBack();
}
});
});
};

View File

@@ -150,6 +150,8 @@ const openSelectPopup = (config) => {
};
const percent = ref('0%');
// 当从“先职位后技能”链路进入时,提交后需直接返回职业规划页
const needGoBackTwoStep = ref(false);
const state = reactive({
educationText: '',
politicalAffiliationText: '',
@@ -168,7 +170,10 @@ const fromValue = reactive({
// 移除重复的onLoad定义已在上方实现
// 在onLoad中初始化数据确保页面加载时就能获取技能信息
onLoad(() => {
onLoad((options = {}) => {
if (options.needSkill === 'true') {
needGoBackTwoStep.value = true;
}
// 初始化页面数据
initLoad();
});
@@ -369,7 +374,12 @@ const confirm = () => {
$api.createRequest('/app/user/resume', params, 'post').then((resData) => {
$api.msg('完成');
getUserResume().then(() => {
navBack();
// 如果从“缺职位+技能”链路进入,回退两层直接返回职业规划页
if (needGoBackTwoStep.value) {
navBack({ delta: 2 });
} else {
navBack();
}
});
});
};

View File

@@ -9,7 +9,9 @@
<view class="video-detail-container">
<!-- 视频播放组件 -->
<view class="video-wrapper">
<video id="myVideo" :src="videoInfo.currentUrl" :poster="trainVideoImgUrl+ videoInfo.cover" @seeked="onSeeked"
<video v-if="videoInfo && videoInfo.cover" id="myVideo" :src="videoInfo.currentUrl" :poster="trainVideoImgUrl+ videoInfo.cover" @seeked="onSeeked"
preload="metadata"
enable-danmu controls style="width: 100%;" @pause="onPause" @timeupdate="onTimeupdate" @ended="onEnded"></video>
</view>
</view>

View File

@@ -1,7 +1,7 @@
<!--
* @Date: 2025-10-16 15:15:47
* @LastEditors: lip
* @LastEditTime: 2025-11-19 18:22:34
* @LastEditors: shirlwang
* @LastEditTime: 2025-12-08 16:10:47
-->
<template>
<!-- @scroll="handleScroll" @scrolltolower="scrollBottom" -->
@@ -66,7 +66,7 @@
<view class="title-item active"><view>政策专区</view></view>
<view @click="toPolicyList">{{'查看更多 >'}}</view>
</view>
<view v-for="(item, index) in policyList" :key="index" class="job-list" @click="toPolicyDetail">
<view v-for="(item, index) in policyList" :key="index" class="job-list" @click="toPolicyDetail(item)">
<view class="sign">推荐</view>
<view class="title">
<image src="../../../packageRc/static/zcLeft.png"/>
@@ -100,7 +100,7 @@ function getPolicy() {
function toPolicyList() {
navTo(`/packageRc/pages/policy/policyList`)
}
function toPolicyDetail() {
function toPolicyDetail(item) {
navTo(`/packageRc/pages/policy/policyDetail?id=${item.id}`)
}
let activeTab = ref(1)

View File

@@ -138,12 +138,18 @@
"navigationBarTitleText": "简历示例"
}
},
{
"path": "pages/service/salary-info",
"style": {
"navigationBarTitleText": "薪酬信息"
}
}
{
"path": "pages/service/salary-info",
"style": {
"navigationBarTitleText": "薪酬信息"
}
},
{
"path": "pages/service/guidance",
"style": {
"navigationBarTitleText": "服务指导"
}
}
],
"subpackages": [
{

View File

@@ -95,12 +95,7 @@
</view>
<view class="service-title">服务指导</view>
</view>
<view class="service-item press-button" @click="handleServiceClick('public-recruitment')">
<view class="service-icon service-icon-2">
<IconfontIcon name="zhengfulou" :size="48" color="#FFFFFF" />
</view>
<view class="service-title">事业单位招录</view>
</view>
<view class="service-item press-button" @click="handleServiceClick('resume-creation')">
<view class="service-icon service-icon-3">
<IconfontIcon name="jianli" :size="48" color="#FFFFFF" />
@@ -111,7 +106,7 @@
<view class="service-icon service-icon-4">
<IconfontIcon name="zhengce" :size="48" color="#FFFFFF" />
</view>
<view class="service-title">劳动政策指引</view>
<view class="service-title">政策指引</view>
</view>
<view class="service-item press-button" @click="handleServiceClick('skill-training')">
<view class="service-icon service-icon-5">
@@ -861,7 +856,7 @@ function navToService(serviceType) {
'service-guidance': '/pages/service/guidance',
'public-recruitment': '/pages/service/public-recruitment',
'resume-creation': '/pages/resume-guide/resume-guide',
'labor-policy': '/pages/service/labor-policy',
'labor-policy': '/packageRc/pages/policy/policyList',
'skill-training': '/packageB/train/video/videoList',
'skill-evaluation': '/packageB/train/index',
// 'skill-evaluation': '/pages/service/skill-evaluation',
@@ -1070,7 +1065,6 @@ import storeRc from '@/utilsRc/store/index.js';
function goRc(){
if (checkLogin()) {
let userInfo = uni.getStorageSync('userInfo')
console.log(uni.getStorageSync('userInfo'), "uni.getStorageSync('userInfo')");
storeRc.dispatch('LoginByUserInfo', userInfo).then(res => {
// console.log(res, "'res");
navTo('/packageRc/pages/index/index');

View File

@@ -64,7 +64,7 @@
<script setup>
import { ref, inject, nextTick, onMounted } from 'vue';
import { onLoad } from '@dcloudio/uni-app';
import { onLoad, onShow } from '@dcloudio/uni-app';
import { appUserInfo } from '@/apiRc/user/user.js';
import RemindPopup from './components/RemindPopup.vue';
import PageHeader from './components/PageHeader.vue';
@@ -143,6 +143,11 @@ function openRemindPopup() {
// 检查用户是否完善了个人信息(调用接口获取)
let hasCheckedRemindInfo = false;
// 保存缺失信息的标识
const missingInfo = ref({
hasJobInfo: false,
hasSkills: false
});
async function getRemindInfo() {
if (hasCheckedRemindInfo) {
@@ -186,6 +191,10 @@ async function getRemindInfo() {
return skillName && skillName.trim() !== '';
});
// 保存缺失信息标识(只保存职位信息和技能标签,身份证信息跳转到个人信息页面)
missingInfo.value.hasJobInfo = hasJobInfo;
missingInfo.value.hasSkills = hasSkills;
// 判断信息是否完整idCard、职位信息、技能标签都必须有
const isComplete = hasIdCard && hasJobInfo && hasSkills;
@@ -250,6 +259,10 @@ async function getRemindInfo() {
return skillName && skillName.trim() !== '';
});
// 保存缺失信息标识
missingInfo.value.hasJobInfo = hasJobInfo;
missingInfo.value.hasSkills = hasSkills;
// 判断信息是否完整idCard、职位信息、技能标签都必须有
const isComplete = hasIdCard && hasJobInfo && hasSkills;
@@ -299,8 +312,25 @@ function handleCancel() {
async function handleConfirm() {
remindPopup.value?.close();
// 跳转到完善信息页面
navTo('/pages/complete-info/complete-info');
const { hasJobInfo, hasSkills } = missingInfo.value;
// 如果同时缺少职位信息和技能标签:先跳转到职位信息页面,并传递参数表示完成后需要继续跳转到技能页面
if (!hasJobInfo && !hasSkills) {
// 跳转到职位信息页面,传递参数表示完成后需要继续跳转到技能页面
navTo('/packageA/pages/jobExpect/jobExpect?needSkill=true');
}
// 如果只缺少技能标签:直接跳转到技能页面(个人信息页面的技能部分)
else if (!hasSkills) {
navTo('/packageA/pages/personalInfo/personalInfo');
}
// 如果只缺少职位信息:直接跳转到职位信息页面
else if (!hasJobInfo) {
navTo('/packageA/pages/jobExpect/jobExpect');
}
// 如果只缺少身份证信息:跳转到个人信息页面
else {
navTo('/packageA/pages/personalInfo/personalInfo');
}
}
// 切换tab
@@ -483,6 +513,14 @@ onLoad(() => {
getRemindInfo();
});
onShow(() => {
// 返回本页后,如果之前因为信息缺失未展示内容,则重新检查
if (!showContent.value) {
hasCheckedRemindInfo = false;
getRemindInfo();
}
});
onMounted(() => {
if (remindList.value.length > 0 && !showContent.value) {
setTimeout(() => {

456
pages/service/guidance.vue Normal file
View File

@@ -0,0 +1,456 @@
<template>
<view class="service-guidance-container">
<view class="guidance-header">
<text class="header-title">服务指导</text>
<text class="header-subtitle">如何使用喀什智慧就业平台</text>
</view>
<scroll-view class="guidance-content" scroll-y="true">
<!-- 欢迎介绍 -->
<view class="guidance-section">
<view class="section-title">
<uni-icons type="info-filled" size="24" color="#256BFA"></uni-icons>
<text class="title-text">欢迎使用</text>
</view>
<view class="section-content">
<text class="content-text">喀什智慧就业平台是为您提供全方位就业服务的小程序包括职位搜索简历创建职业规划等功能</text>
</view>
</view>
<!-- 使用步骤 -->
<view class="guidance-section">
<view class="section-title">
<uni-icons type="steps-filled" size="24" color="#256BFA"></uni-icons>
<text class="title-text">使用步骤</text>
</view>
<view class="section-content">
<view class="step-item">
<view class="step-number">1</view>
<view class="step-content">
<text class="step-title">登录/注册</text>
<text class="step-desc">首次使用请先完成登录或注册完善个人信息以便获取更好的服务</text>
</view>
</view>
<view class="step-item">
<view class="step-number">2</view>
<view class="step-content">
<text class="step-title">浏览首页</text>
<text class="step-desc">首页展示了推荐职位附近工作和各种服务功能您可以根据需求选择</text>
</view>
</view>
<view class="step-item">
<view class="step-number">3</view>
<view class="step-content">
<text class="step-title">搜索职位</text>
<text class="step-desc">使用顶部搜索框输入职位名称关键词等快速找到您感兴趣的职位</text>
</view>
</view>
<view class="step-item">
<view class="step-number">4</view>
<view class="step-content">
<text class="step-title">查看职位详情</text>
<text class="step-desc">点击职位卡片查看详细信息包括薪资待遇工作地点任职要求等</text>
</view>
</view>
<view class="step-item">
<view class="step-number">5</view>
<view class="step-content">
<text class="step-title">投递简历</text>
<text class="step-desc">如果您对某个职位感兴趣可以直接投递简历等待企业联系</text>
</view>
</view>
<view class="step-item">
<view class="step-number">6</view>
<view class="step-content">
<text class="step-title">使用服务功能</text>
<text class="step-desc">首页九宫格提供了多种服务包括简历指导劳动政策指引技能培训等您可以根据需要使用</text>
</view>
</view>
</view>
</view>
<!-- 功能介绍 -->
<view class="guidance-section">
<view class="section-title">
<uni-icons type="grid-filled" size="24" color="#256BFA"></uni-icons>
<text class="title-text">主要功能</text>
</view>
<view class="section-content">
<view class="feature-grid">
<view class="feature-item">
<view class="feature-icon">
<uni-icons type="search" size="36" color="#256BFA"></uni-icons>
</view>
<text class="feature-title">职位搜索</text>
<text class="feature-desc">智能匹配精准推荐</text>
</view>
<view class="feature-item">
<view class="feature-icon">
<uni-icons type="person-filled" size="36" color="#256BFA"></uni-icons>
</view>
<text class="feature-title">简历管理</text>
<text class="feature-desc">在线创建一键投递</text>
</view>
<view class="feature-item">
<view class="feature-icon">
<uni-icons type="map-pin" size="36" color="#256BFA"></uni-icons>
</view>
<text class="feature-title">附近工作</text>
<text class="feature-desc">基于位置就近推荐</text>
</view>
<view class="feature-item">
<view class="feature-icon">
<uni-icons type="document" size="36" color="#256BFA"></uni-icons>
</view>
<text class="feature-title">简历指导</text>
<text class="feature-desc">专业建议优化简历</text>
</view>
<view class="feature-item">
<view class="feature-icon">
<uni-icons type="book-filled" size="36" color="#256BFA"></uni-icons>
</view>
<text class="feature-title">政策指引</text>
<text class="feature-desc">最新政策实时更新</text>
</view>
<view class="feature-item">
<view class="feature-icon">
<uni-icons type="videocam-filled" size="36" color="#256BFA"></uni-icons>
</view>
<text class="feature-title">技能培训</text>
<text class="feature-desc">线上学习提升技能</text>
</view>
</view>
</view>
</view>
<!-- 常见问题 -->
<view class="guidance-section">
<view class="section-title">
<uni-icons type="help-filled" size="24" color="#256BFA"></uni-icons>
<text class="title-text">常见问题</text>
</view>
<view class="section-content">
<view class="faq-item">
<view class="faq-question">
<uni-icons type="right" size="18" color="#256BFA"></uni-icons>
<text>如何修改个人信息</text>
</view>
<view class="faq-answer">
<text>"我的"页面点击个人信息进入编辑页面即可修改基本信息求职意向等</text>
</view>
</view>
<view class="faq-item">
<view class="faq-question">
<uni-icons type="right" size="18" color="#256BFA"></uni-icons>
<text>如何查看投递记录</text>
</view>
<view class="faq-answer">
<text>"我的"页面点击"投递记录"即可查看所有已投递的职位和状态</text>
</view>
</view>
<view class="faq-item">
<view class="faq-question">
<uni-icons type="right" size="18" color="#256BFA"></uni-icons>
<text>如何收藏职位</text>
</view>
<view class="faq-answer">
<text>在职位详情页面点击右上角的收藏按钮即可将职位添加到收藏夹</text>
</view>
</view>
<!-- <view class="faq-item">
<view class="faq-question">
<uni-icons type="right" size="18" color="#256BFA"></uni-icons>
<text>如何联系客服</text>
</view>
<view class="faq-answer">
<text>如果您在使用过程中遇到问题可以在"我的"页面找到"联系客服"入口或拨打客服热线</text>
</view>
</view> -->
</view>
</view>
<!-- 温馨提示 -->
<view class="guidance-section">
<view class="section-title">
<uni-icons type="warning-filled" size="24" color="#256BFA"></uni-icons>
<text class="title-text">温馨提示</text>
</view>
<view class="section-content">
<view class="tips-list">
<view class="tip-item">
<uni-icons type="circle" size="12" color="#256BFA" class="tip-icon"></uni-icons>
<text class="tip-text">请确保填写的个人信息真实有效这有助于企业更好地了解您</text>
</view>
<view class="tip-item">
<uni-icons type="circle" size="12" color="#256BFA" class="tip-icon"></uni-icons>
<text class="tip-text">定期更新简历保持简历内容的时效性</text>
</view>
<view class="tip-item">
<uni-icons type="circle" size="12" color="#256BFA" class="tip-icon"></uni-icons>
<text class="tip-text">多关注"附近工作""推荐职位"不错过好机会</text>
</view>
<view class="tip-item">
<uni-icons type="circle" size="12" color="#256BFA" class="tip-icon"></uni-icons>
<text class="tip-text">如有任何疑问欢迎随时联系我们的客服团队</text>
</view>
</view>
</view>
</view>
<!-- 结尾鼓励 -->
<view class="guidance-section end-section">
<view class="encourage-content">
<uni-icons type="thumbsup-filled" size="48" color="#256BFA"></uni-icons>
<text class="encourage-text">祝您早日找到理想的工作</text>
<text class="encourage-subtext">喀什智慧就业平台与您同行</text>
</view>
</view>
</scroll-view>
</view>
</template>
<script setup>
import { onLoad } from '@dcloudio/uni-app';
onLoad(() => {
// 页面加载时的逻辑
console.log('服务指导页面加载');
});
</script>
<style lang="stylus" scoped>
.service-guidance-container {
width: 100%;
height: 100vh;
background-color: #F5F7FA;
display: flex;
flex-direction: column;
position: relative;
}
.guidance-header {
padding: 32rpx 24rpx;
background-color: #FFFFFF;
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05);
text-align: center;
box-sizing: border-box;
}
.header-title {
display: block;
font-size: 36rpx;
font-weight: bold;
color: #333333;
margin-bottom: 8rpx;
}
.header-subtitle {
display: block;
font-size: 24rpx;
color: #666666;
}
.guidance-content {
flex: 1;
padding: 24rpx;
overflow-y: scroll;
box-sizing: border-box;
-webkit-overflow-scrolling: touch;
}
.guidance-section {
background-color: #FFFFFF;
border-radius: 16rpx;
padding: 32rpx;
margin-bottom: 24rpx;
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05);
}
.section-title {
display: flex;
align-items: center;
margin-bottom: 24rpx;
}
.title-text {
font-size: 28rpx;
font-weight: bold;
color: #333333;
margin-left: 12rpx;
}
.section-content {
font-size: 24rpx;
color: #666666;
line-height: 1.6;
}
/* 步骤样式 */
.step-item {
display: flex;
margin-bottom: 32rpx;
align-items: flex-start;
}
.step-number {
width: 48rpx;
height: 48rpx;
border-radius: 50%;
background-color: #256BFA;
color: #FFFFFF;
font-size: 24rpx;
font-weight: bold;
display: flex;
align-items: center;
justify-content: center;
margin-right: 20rpx;
flex-shrink: 0;
}
.step-content {
flex: 1;
}
.step-title {
display: block;
font-size: 26rpx;
font-weight: bold;
color: #333333;
margin-bottom: 8rpx;
}
.step-desc {
display: block;
font-size: 24rpx;
color: #666666;
line-height: 1.6;
}
/* 功能网格样式 */
.feature-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 24rpx;
margin-top: 16rpx;
}
.feature-item {
text-align: center;
padding: 24rpx;
background-color: #F8FAFC;
border-radius: 12rpx;
}
.feature-icon {
margin-bottom: 16rpx;
}
.feature-title {
display: block;
font-size: 24rpx;
font-weight: bold;
color: #333333;
margin-bottom: 8rpx;
}
.feature-desc {
display: block;
font-size: 20rpx;
color: #999999;
}
/* 常见问题样式 */
.faq-item {
margin-bottom: 24rpx;
padding-bottom: 24rpx;
border-bottom: 1rpx solid #F0F0F0;
}
.faq-item:last-child {
border-bottom: none;
margin-bottom: 0;
padding-bottom: 0;
}
.faq-question {
display: flex;
align-items: center;
font-size: 26rpx;
font-weight: bold;
color: #333333;
margin-bottom: 12rpx;
}
.faq-question uni-icons {
margin-right: 12rpx;
}
.faq-answer {
font-size: 24rpx;
color: #666666;
line-height: 1.6;
padding-left: 40rpx;
}
/* 温馨提示样式 */
.tips-list {
margin-top: 16rpx;
}
.tip-item {
display: flex;
align-items: flex-start;
margin-bottom: 16rpx;
font-size: 24rpx;
color: #666666;
line-height: 1.6;
}
.tip-icon {
margin-right: 12rpx;
margin-top: 8rpx;
flex-shrink: 0;
}
.tip-text {
flex: 1;
}
/* 结尾鼓励样式 */
.end-section {
text-align: center;
background: linear-gradient(135deg, #256BFA 0%, #6A8FFF 100%);
color: #FFFFFF;
}
.end-section .section-title {
color: #FFFFFF;
justify-content: center;
}
.end-section .title-text {
color: #FFFFFF;
}
.encourage-content {
text-align: center;
}
.encourage-content uni-icons {
margin-bottom: 16rpx;
}
.encourage-text {
display: block;
font-size: 32rpx;
font-weight: bold;
color: #FFFFFF;
margin-bottom: 8rpx;
}
.encourage-subtext {
display: block;
font-size: 24rpx;
color: rgba(255, 255, 255, 0.9);
}
</style>

View File

@@ -72,9 +72,32 @@ export function navigateToLoginPage(options = {}) {
? `?${new URLSearchParams(params).toString()}`
: '';
uni.navigateTo({
url: `${loginPage}${queryString}`
});
const finalUrl = `${loginPage}${queryString}`;
const pages = getCurrentPages();
if (pages.length >= 10) {
// 页面栈已满使用redirectTo替代
uni.redirectTo({
url: finalUrl,
fail: (err) => {
console.error('页面跳转失败:', err);
}
});
} else {
uni.navigateTo({
url: finalUrl,
fail: (err) => {
console.error('页面跳转失败:', err);
// 失败后尝试redirectTo
uni.redirectTo({
url: finalUrl,
fail: (err2) => {
console.error('redirectTo也失败:', err2);
}
});
}
});
}
}
}

View File

@@ -215,14 +215,34 @@ export function myRequest(url, data = {}, method = 'GET', port = 9100, headers =
resolve(resData.data)
return
}
// 处理业务错误
if (resData.data?.code === 401 || resData.data?.code === 402) {
uni.navigateTo({
url:'/packageB/login?flag=nw'
})
// navTo('/packageB/login?flag=nw');
useUserStore().logOut()
// 处理业务错误
if (resData.data?.code === 401 || resData.data?.code === 402) {
const pages = getCurrentPages();
if (pages.length >= 10) {
// 页面栈已满使用redirectTo替代
uni.redirectTo({
url:'/packageB/login?flag=nw',
fail: (err) => {
console.error('页面跳转失败:', err);
}
});
} else {
uni.navigateTo({
url:'/packageB/login?flag=nw',
fail: (err) => {
console.error('页面跳转失败:', err);
// 失败后尝试redirectTo
uni.redirectTo({
url:'/packageB/login?flag=nw',
fail: (err2) => {
console.error('redirectTo也失败:', err2);
}
});
}
});
}
useUserStore().logOut()
}
// 显示具体的错误信息
const errorMsg = msg || '请求出现异常,请联系工作人员'