feat: 本次提交更新内容如下

同步导航栏
This commit is contained in:
笔记本里的永平
2025-07-22 11:15:41 +08:00
parent a1e707b12e
commit b8e309d26f
8 changed files with 43 additions and 70 deletions

View File

@@ -1,8 +1,8 @@
import React, { useState, useEffect } from "react";
import React from "react";
import { TabBar } from "antd-mobile";
import { PieOutline, UserOutline } from "antd-mobile-icons";
import { HomeOutlined, TeamOutlined } from "@ant-design/icons";
import { useLocation, useNavigate } from "react-router-dom";
import { useNavigate } from "react-router-dom";
const tabs = [
{
@@ -12,13 +12,13 @@ const tabs = [
path: "/",
},
{
key: "scene",
key: "scenarios",
title: "场景获客",
icon: <TeamOutlined />,
path: "/scenarios",
},
{
key: "work",
key: "workspace",
title: "工作台",
icon: <PieOutline />,
path: "/workspace",
@@ -31,38 +31,18 @@ const tabs = [
},
];
// 需要展示菜单的路由白名单(可根据实际业务调整)
const menuPaths = ["/", "/scenarios", "/workspace", "/mine"];
interface MeauMobileProps {
activeKey: string;
}
const MeauMobile: React.FC = () => {
const location = useLocation();
const MeauMobile: React.FC<MeauMobileProps> = ({ activeKey }) => {
const navigate = useNavigate();
const [activeKey, setActiveKey] = useState("home");
// 根据当前路由自动设置 activeKey支持嵌套路由
useEffect(() => {
const found = tabs.find((tab) =>
tab.path === "/"
? location.pathname === "/"
: location.pathname.startsWith(tab.path)
);
if (found) setActiveKey(found.key);
}, [location.pathname]);
// 判断当前路由是否需要展示菜单
const showMenu = menuPaths.some((path) =>
path === "/"
? location.pathname === "/"
: location.pathname.startsWith(path)
);
if (!showMenu) return null;
return (
<TabBar
style={{ background: "#fff" }}
activeKey={activeKey}
onChange={(key) => {
setActiveKey(key);
const tab = tabs.find((t) => t.key === key);
if (tab && tab.path) navigate(tab.path);
}}

View File

@@ -82,7 +82,7 @@ const Mine: React.FC = () => {
</div>
</NavBar>
}
footer={<MeauMobile />}
footer={<MeauMobile activeKey="mine" />}
>
<div className={style["mine-page"]}>
{/* 用户信息卡片 */}

View File

@@ -1,10 +0,0 @@
import React from "react";
import PlaceholderPage from "@/components/PlaceholderPage";
const Scenarios: React.FC = () => {
return (
<PlaceholderPage title="场景管理" showAddButton addButtonText="新建场景" />
);
};
export default Scenarios;

View File

@@ -83,17 +83,11 @@ const Scene: React.FC = () => {
header={
<NavBar back={null} style={{ background: "#fff" }}>
<div className="nav-title"></div>
<Button
size="small"
color="primary"
onClick={handleNewPlan}
className="new-plan-btn"
>
<Button size="small" color="primary" onClick={handleNewPlan}>
<PlusOutlined />
</Button>
</NavBar>
}
footer={<MeauMobile />}
>
<div className={style["error"]}>
<div className={style["error-text"]}>{error}</div>
@@ -125,6 +119,7 @@ const Scene: React.FC = () => {
}
></NavBar>
}
footer={<MeauMobile activeKey="scenarios" />}
>
<div className={style["scene-page"]}>
<div className={style["scenarios-grid"]}>

View File

@@ -24,7 +24,7 @@ import {
ClockCircleOutlined,
DownOutlined,
} from "@ant-design/icons";
import { LeftOutline } from "antd-mobile-icons";
import { ArrowLeftOutlined } from "@ant-design/icons";
import Layout from "@/components/Layout/Layout";
import {
@@ -357,10 +357,10 @@ const ScenarioList: React.FC = () => {
style={{ background: "#fff" }}
left={
<div className="nav-title">
<span className="nav-back-btn">
<LeftOutline onClick={() => navigate(-1)} fontSize={24} />
</span>
{scenarioName}
<ArrowLeftOutlined
twoToneColor="#1677ff"
onClick={() => navigate(-1)}
/>
</div>
}
right={
@@ -368,12 +368,13 @@ const ScenarioList: React.FC = () => {
size="small"
color="primary"
onClick={handleCreateNewPlan}
className="new-plan-btn"
>
<PlusOutlined />
</Button>
}
/>
>
<span className="nav-title"> {scenarioName}</span>
</NavBar>
{/* 搜索栏 */}
<div className={style["search-bar"]}>
<div className={style["search-input-wrapper"]}>

View File

@@ -1,9 +1,9 @@
import React, { useState, useEffect } from "react";
import { useNavigate, useParams } from "react-router-dom";
import { NavBar, Button, Toast, SpinLoading, Steps, Popup } from "antd-mobile";
import { LeftOutline } from "antd-mobile-icons";
import { ArrowLeftOutlined } from "@ant-design/icons";
import Layout from "@/components/Layout/Layout";
import MeauMobile from "@/components/MeauMobile/MeauMoible";
import BasicSettings from "./steps/BasicSettings";
import FriendRequestSettings from "./steps/FriendRequestSettings";
import MessageSettings from "./steps/MessageSettings";
@@ -235,7 +235,6 @@ const NewPlan: React.FC = () => {
</div>
</NavBar>
}
footer={<MeauMobile />}
>
<div className={style["loading"]}>
<SpinLoading color="primary" style={{ fontSize: 32 }} />
@@ -254,13 +253,17 @@ const NewPlan: React.FC = () => {
style={{ background: "#fff" }}
left={
<div className="nav-title">
<span className="nav-back-btn">
<LeftOutline onClick={() => navigate(-1)} fontSize={24} />
</span>
{isEdit ? "编辑计划" : "新建计划"}
<ArrowLeftOutlined
twoToneColor="#1677ff"
onClick={() => navigate(-1)}
/>
</div>
}
/>
>
<span className="nav-title">
{isEdit ? "编辑计划" : "新建计划"}
</span>
</NavBar>
{/* 步骤指示器 */}
<div className={style["steps-container"]}>

View File

@@ -24,10 +24,9 @@ import {
LikeOutlined,
ClockCircleOutlined,
} from "@ant-design/icons";
import { LeftOutline } from "antd-mobile-icons";
import { ArrowLeftOutlined } from "@ant-design/icons";
import Layout from "@/components/Layout/Layout";
import MeauMobile from "@/components/MeauMobile/MeauMoible";
import {
fetchAutoLikeTasks,
deleteAutoLikeTask,
@@ -243,20 +242,25 @@ const AutoLike: React.FC = () => {
header={
<>
<NavBar
back={null}
style={{ background: "#fff" }}
onBack={() => window.history.back()}
left={
<div style={{ color: "var(--primary-color)", fontWeight: 600 }}>
<div className="nav-title">
<ArrowLeftOutlined
twoToneColor="#1677ff"
onClick={() => navigate(-1)}
/>
</div>
}
right={
<Button size="small" color="primary" onClick={handleCreateNew}>
<PlusOutlined />
<span style={{ marginLeft: 4, fontSize: 12 }}></span>
<PlusOutlined />
</Button>
}
/>
>
<span className="nav-title"></span>
</NavBar>
{/* 搜索栏 */}
<div className={style["search-bar"]}>
<div className={style["search-input-wrapper"]}>

View File

@@ -140,7 +140,7 @@ const Workspace: React.FC = () => {
</div>
</NavBar>
}
footer={<MeauMobile />}
footer={<MeauMobile activeKey="workspace" />}
>
<div className={styles.workspace}>
{/* 常用功能 */}