From 82771bc103ad086763c26e63e7ad5838aa2f28bc Mon Sep 17 00:00:00 2001
From: doublex001 <16157008+doublex001@user.noreply.gitee.com>
Date: Tue, 15 Sep 2026 13:09:15 +0800
Subject: [PATCH] =?UTF-8?q?fix(ui):=20=E4=BF=AE=E5=A4=8D=E5=A4=9A=E5=A4=84?=
=?UTF-8?q?=E6=8C=89=E9=92=AE=E7=BB=91=E5=AE=9A=E7=A9=BA=E5=87=BD=E6=95=B0?=
=?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=82=B9=E5=87=BB=E6=97=A0=E5=8F=8D=E9=A6=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
9 个页面存在 onPress={() => {}} 的死控件,用户点击后无任何反馈,无法区分「功能不存在」与「App 卡住了」。按项目既有约定分别处理:
- talent-recommendation:人才池快捷操作接入分发函数,「面试安排」改「面试评分」并跳 /interview-score(路由已存在),其余无对应页面者弹「功能开发中」
- hr-evaluation:「申诉」入口接 /appeal(路由已存在,此前是死按钮)
- chat/[id] / holland-result / interview / onboarding:右上角「更多 / 分享」无对应页面,统一弹提示
- progress:右上角漏斗按钮与页内 FilterTabs 功能重复且点击无响应,直接移除,保留同尺寸占位维持标题居中
- resume/export:「保存」仅在数据就绪后渲染,loading/error 态不再出现点了无反应的入口
- enterprise-chat:空状态文案「人才库」→「人才推荐」,与实际路由名对齐
---
app/(enterprise)/enterprise-chat.tsx | 2 +-
app/(enterprise)/talent-recommendation.tsx | 45 ++++++++++++++++++----
app/chat/[id].tsx | 7 +++-
app/holland-result.tsx | 12 ++++--
app/hr-evaluation.tsx | 4 +-
app/interview.tsx | 12 ++++--
app/onboarding.tsx | 12 ++++--
app/progress.tsx | 14 +++----
app/resume/export.tsx | 21 +++++++---
9 files changed, 96 insertions(+), 33 deletions(-)
diff --git a/app/(enterprise)/enterprise-chat.tsx b/app/(enterprise)/enterprise-chat.tsx
index 5285b60..76c2104 100644
--- a/app/(enterprise)/enterprise-chat.tsx
+++ b/app/(enterprise)/enterprise-chat.tsx
@@ -193,7 +193,7 @@ function EmptyState({
还没有沟通记录
- 从人才库中发现合适的候选人,主动发起沟通吧
+ 从人才推荐中发现合适的候选人,主动发起沟通吧
去发现人才
diff --git a/app/(enterprise)/talent-recommendation.tsx b/app/(enterprise)/talent-recommendation.tsx
index e4cbe28..37e127e 100644
--- a/app/(enterprise)/talent-recommendation.tsx
+++ b/app/(enterprise)/talent-recommendation.tsx
@@ -3,6 +3,7 @@ import { useRouter } from 'expo-router';
import { useState } from 'react';
import {
ActivityIndicator,
+ Alert,
Pressable,
ScrollView,
StyleSheet,
@@ -140,7 +141,7 @@ function CandidateCard({ candidate }: { candidate: TalentCandidate }) {
/* ===================== 子组件:人才池数据 ===================== */
-function TalentPool({ stats, actions }: { stats: { id: string; value: string; label: string }[]; actions: { icon: string; label: string }[] }) {
+function TalentPool({ stats, actions, onPressAction }: { stats: { id: string; value: string; label: string }[]; actions: PoolActionItem[]; onPressAction: (action: PoolActionItem) => void }) {
return (
人才池数据
@@ -154,7 +155,7 @@ function TalentPool({ stats, actions }: { stats: { id: string; value: string; la
{actions.map((action) => (
-
+ onPressAction(action)}>
{action.label}
@@ -217,10 +218,16 @@ function EmptyState({
/* ===================== 页面 ===================== */
-const POOL_ACTIONS = [
+/**
+ * 人才池快捷操作项:带 route 的跳转目标页,无对应页面的弹「功能开发中」提示。
+ * 与 enterprise-chat.tsx 的 QuickActionItem 保持同一约定。
+ */
+type PoolActionItem = { icon: string; label: string; route?: string };
+
+const POOL_ACTIONS: PoolActionItem[] = [
{ icon: 'mail-outline', label: '批量发邀请' },
{ icon: 'document-text-outline', label: '批量发Offer' },
- { icon: 'calendar-outline', label: '面试安排' },
+ { icon: 'calendar-outline', label: '面试评分', route: '/interview-score' },
{ icon: 'notifications-outline', label: '群发通知' },
];
@@ -229,6 +236,26 @@ export default function TalentRecommendationScreen() {
const { recommendation, loading, error, refresh } = useTalentRecommendation();
const [activeTab, setActiveTab] = useState('all');
+ // 人才池快捷操作分发:有目标路由则跳转,无对应页面则提示「功能开发中」,
+ // 避免按钮点击后无任何反馈。与 enterprise-chat.tsx 的 handleQuickAction 同约定。
+ const handlePoolAction = (action: PoolActionItem) => {
+ if (action.route) {
+ router.push(action.route);
+ } else {
+ Alert.alert('提示', `${action.label}功能开发中,敬请期待`);
+ }
+ };
+
+ // 以下两处原先绑的是空函数(() => {}),按钮点击后无任何反馈。
+ // 暂无对应页面,按项目约定弹「功能开发中」提示。
+ const handleReport = () => {
+ Alert.alert('提示', '人才市场报告功能开发中,敬请期待');
+ };
+
+ const handleFilter = () => {
+ Alert.alert('提示', '筛选条件功能开发中,敬请期待');
+ };
+
if (loading) {
return (
@@ -264,18 +291,22 @@ export default function TalentRecommendationScreen() {
{}}
+ onReport={handleReport}
/>
{recommendation.candidates.map((candidate) => (
))}
-
+
) : (
{}}
+ onFilter={handleFilter}
/>
)}
diff --git a/app/chat/[id].tsx b/app/chat/[id].tsx
index 9907a33..d98c9b0 100644
--- a/app/chat/[id].tsx
+++ b/app/chat/[id].tsx
@@ -325,6 +325,11 @@ export default function ChatDetailScreen() {
setTimeout(() => scrollRef.current?.scrollToEnd({ animated: true }), 100);
}, [input, sending, sendMessage]);
+ // 右上角「更多」暂无对应菜单页,按本文件既有约定弹提示(此前为空函数,点了无反应)
+ const handleMore = () => {
+ Alert.alert('提示', '功能开发中,敬请期待');
+ };
+
if (loading) {
return (
@@ -357,7 +362,7 @@ export default function ChatDetailScreen() {
avatar={detail.avatar}
online={detail.online}
onBack={() => router.back()}
- onMore={() => {}}
+ onMore={handleMore}
/>
{detail.matchInfo && (
diff --git a/app/holland-result.tsx b/app/holland-result.tsx
index bc74188..bd61991 100644
--- a/app/holland-result.tsx
+++ b/app/holland-result.tsx
@@ -3,6 +3,7 @@ import { LinearGradient } from 'expo-linear-gradient';
import { useRouter } from 'expo-router';
import {
ActivityIndicator,
+ Alert,
Pressable,
ScrollView,
StyleSheet,
@@ -228,10 +229,15 @@ export default function HollandResultScreen() {
const { assessment, loading, error, refresh } = useHollandAssessment();
const result = assessment?.result;
+ // 右上角「分享」暂无对应页面,按项目约定弹提示(此前绑定空函数,点击无任何反馈)
+ const handleShare = () => {
+ Alert.alert('提示', '分享测评报告功能开发中,敬请期待');
+ };
+
if (loading) {
return (
- router.back()} onShare={() => {}} />
+ router.back()} onShare={handleShare} />
);
@@ -240,7 +246,7 @@ export default function HollandResultScreen() {
if (error || !result) {
return (
- router.back()} onShare={() => {}} />
+ router.back()} onShare={handleShare} />
);
@@ -248,7 +254,7 @@ export default function HollandResultScreen() {
return (
- router.back()} onShare={() => {}} />
+ router.back()} onShare={handleShare} />
diff --git a/app/hr-evaluation.tsx b/app/hr-evaluation.tsx
index ba15b4e..a01432e 100644
--- a/app/hr-evaluation.tsx
+++ b/app/hr-evaluation.tsx
@@ -256,7 +256,7 @@ export default function HREvaluationScreen() {
if (loading) {
return (
- router.back()} onAppeal={() => {}} />
+ router.back()} onAppeal={() => router.push('/appeal')} />
);
@@ -265,7 +265,7 @@ export default function HREvaluationScreen() {
if (error || !evaluation) {
return (
- router.back()} onAppeal={() => {}} />
+ router.back()} onAppeal={() => router.push('/appeal')} />
);
diff --git a/app/interview.tsx b/app/interview.tsx
index 96f3315..9347a81 100644
--- a/app/interview.tsx
+++ b/app/interview.tsx
@@ -2,6 +2,7 @@ import { Ionicons } from '@expo/vector-icons';
import { useRouter } from 'expo-router';
import {
ActivityIndicator,
+ Alert,
Pressable,
ScrollView,
StyleSheet,
@@ -289,10 +290,15 @@ export default function InterviewScreen() {
await start();
};
+ // 右上角「分享」暂无对应页面,按项目约定弹提示(此前绑定空函数,点击无任何反馈)
+ const handleShare = () => {
+ Alert.alert('提示', '分享面试配置功能开发中,敬请期待');
+ };
+
if (loading) {
return (
- router.back()} onShare={() => {}} />
+ router.back()} onShare={handleShare} />
);
@@ -301,7 +307,7 @@ export default function InterviewScreen() {
if (error || !data) {
return (
- router.back()} onShare={() => {}} />
+ router.back()} onShare={handleShare} />
);
@@ -309,7 +315,7 @@ export default function InterviewScreen() {
return (
- router.back()} onShare={() => {}} />
+ router.back()} onShare={handleShare} />
diff --git a/app/onboarding.tsx b/app/onboarding.tsx
index 380a206..9b28bd6 100644
--- a/app/onboarding.tsx
+++ b/app/onboarding.tsx
@@ -4,6 +4,7 @@ import { useRouter } from 'expo-router';
import { useEffect, useState } from 'react';
import {
ActivityIndicator,
+ Alert,
Pressable,
ScrollView,
StyleSheet,
@@ -267,10 +268,15 @@ export default function OnboardingScreen() {
await toggle(itemId, done);
};
+ // 右上角「分享」暂无对应页面,按项目约定弹提示(此前绑定空函数,点击无任何反馈)
+ const handleShare = () => {
+ Alert.alert('提示', '分享入职清单功能开发中,敬请期待');
+ };
+
if (loading) {
return (
- router.back()} onShare={() => {}} />
+ router.back()} onShare={handleShare} />
);
@@ -279,7 +285,7 @@ export default function OnboardingScreen() {
if (error || !display) {
return (
- router.back()} onShare={() => {}} />
+ router.back()} onShare={handleShare} />
);
@@ -287,7 +293,7 @@ export default function OnboardingScreen() {
return (
- router.back()} onShare={() => {}} />
+ router.back()} onShare={handleShare} />
= {
/* ===================== 子组件:顶部导航 ===================== */
-function Header({ onBack, onFilter }: { onBack: () => void; onFilter: () => void }) {
+function Header({ onBack }: { onBack: () => void }) {
return (
求职进度
-
-
-
+ {/* 原右侧漏斗筛选按钮与页内 FilterTabs 功能重复且点击无反应,已移除。
+ 此处保留同尺寸占位以维持标题居中。 */}
+
);
}
@@ -242,7 +242,7 @@ export default function ProgressScreen() {
if (loading) {
return (
- router.back()} onFilter={() => {}} />
+
);
@@ -251,7 +251,7 @@ export default function ProgressScreen() {
if (error || !progress) {
return (
- router.back()} onFilter={() => {}} />
+
);
@@ -259,7 +259,7 @@ export default function ProgressScreen() {
return (
- router.back()} onFilter={() => {}} />
+ router.back()} />
diff --git a/app/resume/export.tsx b/app/resume/export.tsx
index 40f44dd..ec1b0d7 100644
--- a/app/resume/export.tsx
+++ b/app/resume/export.tsx
@@ -36,16 +36,25 @@ const TEMPLATE_COLORS: Record = {
/* ===================== 子组件:顶部导航 ===================== */
-function Header({ onBack, onSave }: { onBack: () => void; onSave: () => void }) {
+/**
+ * 顶部导航。onSave 可选:加载中 / 加载失败时设置尚未就绪(localSettings 为 null),
+ * 此时不渲染「保存」按钮,避免出现点了无反应的入口(比照 progress.tsx 移除无效按钮的处理)。
+ * 该态下仍渲染同尺寸占位,维持标题居中。
+ */
+function Header({ onBack, onSave }: { onBack: () => void; onSave?: () => void }) {
return (
导出简历
-
- 保存
-
+ {onSave ? (
+
+ 保存
+
+ ) : (
+
+ )}
);
}
@@ -264,7 +273,7 @@ export default function ResumeExportScreen() {
if (loading) {
return (
- router.back()} onSave={() => {}} />
+
);
@@ -273,7 +282,7 @@ export default function ResumeExportScreen() {
if (error || !localSettings) {
return (
- router.back()} onSave={() => {}} />
+
);