feat(功能中心): 新增功能中心相关页面和路由配置

添加SOP群发、AI模型训练、自动打招呼等9个功能页面的基础结构和样式
配置功能中心相关路由
调整消息通知按钮的Badge组件位置
This commit is contained in:
超级老白兔
2025-09-13 11:52:18 +08:00
parent 7749947138
commit 575e0f2924
20 changed files with 626 additions and 8 deletions

View File

@@ -180,14 +180,11 @@ const NavCommon: React.FC<NavCommonProps> = ({
/>
</div>
</Dropdown>
<Badge count={messageCount} size="small">
<div
className={styles.messageButton}
onClick={handleMessageClick}
>
<BellOutlined style={{ fontSize: 18 }} />
</div>
</Badge>
<div className={styles.messageButton} onClick={handleMessageClick}>
<Badge count={messageCount} size="small">
<BellOutlined style={{ fontSize: 20 }} />
</Badge>
</div>
</Space>
</div>
</Header>

View File

@@ -0,0 +1,43 @@
.container {
padding: 24px;
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.header {
margin-bottom: 24px;
h1 {
font-size: 24px;
font-weight: 600;
color: #262626;
margin: 0 0 8px 0;
}
p {
font-size: 14px;
color: #8c8c8c;
margin: 0;
}
}
.content {
min-height: 400px;
}
.placeholder {
display: flex;
align-items: center;
justify-content: center;
height: 300px;
background: #fafafa;
border: 1px dashed #d9d9d9;
border-radius: 6px;
p {
font-size: 16px;
color: #8c8c8c;
margin: 0;
}
}

View File

@@ -0,0 +1,21 @@
import React from "react";
import styles from "./index.module.scss";
const AiTraining: React.FC = () => {
return (
<div className={styles.container}>
<div className={styles.header}>
<h1>AI模型训练</h1>
<p>AI模型训练</p>
</div>
<div className={styles.content}>
{/* 功能内容待开发 */}
<div className={styles.placeholder}>
<p>AI模型训练功能正在开发中...</p>
</div>
</div>
</div>
);
};
export default AiTraining;

View File

@@ -0,0 +1,43 @@
.container {
padding: 24px;
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.header {
margin-bottom: 24px;
h1 {
font-size: 24px;
font-weight: 600;
color: #262626;
margin: 0 0 8px 0;
}
p {
font-size: 14px;
color: #8c8c8c;
margin: 0;
}
}
.content {
min-height: 400px;
}
.placeholder {
display: flex;
align-items: center;
justify-content: center;
height: 300px;
background: #fafafa;
border: 1px dashed #d9d9d9;
border-radius: 6px;
p {
font-size: 16px;
color: #8c8c8c;
margin: 0;
}
}

View File

@@ -0,0 +1,21 @@
import React from "react";
import styles from "./index.module.scss";
const AutoGreeting: React.FC = () => {
return (
<div className={styles.container}>
<div className={styles.header}>
<h1></h1>
<p></p>
</div>
<div className={styles.content}>
{/* 功能内容待开发 */}
<div className={styles.placeholder}>
<p>...</p>
</div>
</div>
</div>
);
};
export default AutoGreeting;

View File

@@ -0,0 +1,43 @@
.container {
padding: 24px;
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.header {
margin-bottom: 24px;
h1 {
font-size: 24px;
font-weight: 600;
color: #262626;
margin: 0 0 8px 0;
}
p {
font-size: 14px;
color: #8c8c8c;
margin: 0;
}
}
.content {
min-height: 400px;
}
.placeholder {
display: flex;
align-items: center;
justify-content: center;
height: 300px;
background: #fafafa;
border: 1px dashed #d9d9d9;
border-radius: 6px;
p {
font-size: 16px;
color: #8c8c8c;
margin: 0;
}
}

View File

@@ -0,0 +1,21 @@
import React from "react";
import styles from "./index.module.scss";
const CommunicationRecord: React.FC = () => {
return (
<div className={styles.container}>
<div className={styles.header}>
<h1></h1>
<p></p>
</div>
<div className={styles.content}>
{/* 功能内容待开发 */}
<div className={styles.placeholder}>
<p>...</p>
</div>
</div>
</div>
);
};
export default CommunicationRecord;

View File

@@ -0,0 +1,43 @@
.container {
padding: 24px;
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.header {
margin-bottom: 24px;
h1 {
font-size: 24px;
font-weight: 600;
color: #262626;
margin: 0 0 8px 0;
}
p {
font-size: 14px;
color: #8c8c8c;
margin: 0;
}
}
.content {
min-height: 400px;
}
.placeholder {
display: flex;
align-items: center;
justify-content: center;
height: 300px;
background: #fafafa;
border: 1px dashed #d9d9d9;
border-radius: 6px;
p {
font-size: 16px;
color: #8c8c8c;
margin: 0;
}
}

View File

@@ -0,0 +1,21 @@
import React from "react";
import styles from "./index.module.scss";
const ContentManagement: React.FC = () => {
return (
<div className={styles.container}>
<div className={styles.header}>
<h1></h1>
<p></p>
</div>
<div className={styles.content}>
{/* 功能内容待开发 */}
<div className={styles.placeholder}>
<p>...</p>
</div>
</div>
</div>
);
};
export default ContentManagement;

View File

@@ -0,0 +1,43 @@
.container {
padding: 24px;
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.header {
margin-bottom: 24px;
h1 {
font-size: 24px;
font-weight: 600;
color: #262626;
margin: 0 0 8px 0;
}
p {
font-size: 14px;
color: #8c8c8c;
margin: 0;
}
}
.content {
min-height: 400px;
}
.placeholder {
display: flex;
align-items: center;
justify-content: center;
height: 300px;
background: #fafafa;
border: 1px dashed #d9d9d9;
border-radius: 6px;
p {
font-size: 16px;
color: #8c8c8c;
margin: 0;
}
}

View File

@@ -0,0 +1,21 @@
import React from "react";
import styles from "./index.module.scss";
const CustomerManagement: React.FC = () => {
return (
<div className={styles.container}>
<div className={styles.header}>
<h1></h1>
<p></p>
</div>
<div className={styles.content}>
{/* 功能内容待开发 */}
<div className={styles.placeholder}>
<p>...</p>
</div>
</div>
</div>
);
};
export default CustomerManagement;

View File

@@ -0,0 +1,43 @@
.container {
padding: 24px;
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.header {
margin-bottom: 24px;
h1 {
font-size: 24px;
font-weight: 600;
color: #262626;
margin: 0 0 8px 0;
}
p {
font-size: 14px;
color: #8c8c8c;
margin: 0;
}
}
.content {
min-height: 400px;
}
.placeholder {
display: flex;
align-items: center;
justify-content: center;
height: 300px;
background: #fafafa;
border: 1px dashed #d9d9d9;
border-radius: 6px;
p {
font-size: 16px;
color: #8c8c8c;
margin: 0;
}
}

View File

@@ -0,0 +1,21 @@
import React from "react";
import styles from "./index.module.scss";
const MomentsMarketing: React.FC = () => {
return (
<div className={styles.container}>
<div className={styles.header}>
<h1></h1>
<p>AI智能生成朋友圈内容</p>
</div>
<div className={styles.content}>
{/* 功能内容待开发 */}
<div className={styles.placeholder}>
<p>...</p>
</div>
</div>
</div>
);
};
export default MomentsMarketing;

View File

@@ -0,0 +1,43 @@
.container {
padding: 24px;
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.header {
margin-bottom: 24px;
h1 {
font-size: 24px;
font-weight: 600;
color: #262626;
margin: 0 0 8px 0;
}
p {
font-size: 14px;
color: #8c8c8c;
margin: 0;
}
}
.content {
min-height: 400px;
}
.placeholder {
display: flex;
align-items: center;
justify-content: center;
height: 300px;
background: #fafafa;
border: 1px dashed #d9d9d9;
border-radius: 6px;
p {
font-size: 16px;
color: #8c8c8c;
margin: 0;
}
}

View File

@@ -0,0 +1,21 @@
import React from "react";
import styles from "./index.module.scss";
const PrecisionSend: React.FC = () => {
return (
<div className={styles.container}>
<div className={styles.header}>
<h1></h1>
<p></p>
</div>
<div className={styles.content}>
{/* 功能内容待开发 */}
<div className={styles.placeholder}>
<p>...</p>
</div>
</div>
</div>
);
};
export default PrecisionSend;

View File

@@ -0,0 +1,43 @@
.container {
padding: 24px;
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.header {
margin-bottom: 24px;
h1 {
font-size: 24px;
font-weight: 600;
color: #262626;
margin: 0 0 8px 0;
}
p {
font-size: 14px;
color: #8c8c8c;
margin: 0;
}
}
.content {
min-height: 400px;
}
.placeholder {
display: flex;
align-items: center;
justify-content: center;
height: 300px;
background: #fafafa;
border: 1px dashed #d9d9d9;
border-radius: 6px;
p {
font-size: 16px;
color: #8c8c8c;
margin: 0;
}
}

View File

@@ -0,0 +1,21 @@
import React from "react";
import styles from "./index.module.scss";
const SopSend: React.FC = () => {
return (
<div className={styles.container}>
<div className={styles.header}>
<h1>SOP群发</h1>
<p>使SOP标准化流程进行批量消息发送</p>
</div>
<div className={styles.content}>
{/* 功能内容待开发 */}
<div className={styles.placeholder}>
<p>SOP群发功能正在开发中...</p>
</div>
</div>
</div>
);
};
export default SopSend;

View File

@@ -0,0 +1,43 @@
.container {
padding: 24px;
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.header {
margin-bottom: 24px;
h1 {
font-size: 24px;
font-weight: 600;
color: #262626;
margin: 0 0 8px 0;
}
p {
font-size: 14px;
color: #8c8c8c;
margin: 0;
}
}
.content {
min-height: 400px;
}
.placeholder {
display: flex;
align-items: center;
justify-content: center;
height: 300px;
background: #fafafa;
border: 1px dashed #d9d9d9;
border-radius: 6px;
p {
font-size: 16px;
color: #8c8c8c;
margin: 0;
}
}

View File

@@ -0,0 +1,21 @@
import React from "react";
import styles from "./index.module.scss";
const TagManagement: React.FC = () => {
return (
<div className={styles.container}>
<div className={styles.header}>
<h1></h1>
<p></p>
</div>
<div className={styles.content}>
{/* 功能内容待开发 */}
<div className={styles.placeholder}>
<p>...</p>
</div>
</div>
</div>
);
};
export default TagManagement;

View File

@@ -2,6 +2,15 @@ import CkboxPage from "@/pages/pc/ckbox";
import WeChatPage from "@/pages/pc/ckbox/weChat";
import Dashboard from "@/pages/pc/ckbox/dashboard";
import PowerCenter from "@/pages/pc/ckbox/powerCenter";
import PrecisionSend from "@/pages/pc/ckbox/powerCenter/precision-send";
import SopSend from "@/pages/pc/ckbox/powerCenter/sop-send";
import MomentsMarketing from "@/pages/pc/ckbox/powerCenter/moments-marketing";
import TagManagement from "@/pages/pc/ckbox/powerCenter/tag-management";
import CustomerManagement from "@/pages/pc/ckbox/powerCenter/customer-management";
import CommunicationRecord from "@/pages/pc/ckbox/powerCenter/communication-record";
import ContentManagement from "@/pages/pc/ckbox/powerCenter/content-management";
import AiTraining from "@/pages/pc/ckbox/powerCenter/ai-training";
import AutoGreeting from "@/pages/pc/ckbox/powerCenter/auto-greeting";
const ckboxRoutes = [
{
path: "/pc",
@@ -20,6 +29,42 @@ const ckboxRoutes = [
path: "powerCenter",
element: <PowerCenter />,
},
{
path: "powerCenter/precision-send",
element: <PrecisionSend />,
},
{
path: "powerCenter/sop-send",
element: <SopSend />,
},
{
path: "powerCenter/moments-marketing",
element: <MomentsMarketing />,
},
{
path: "powerCenter/tag-management",
element: <TagManagement />,
},
{
path: "powerCenter/customer-management",
element: <CustomerManagement />,
},
{
path: "powerCenter/communication-record",
element: <CommunicationRecord />,
},
{
path: "powerCenter/content-management",
element: <ContentManagement />,
},
{
path: "powerCenter/ai-training",
element: <AiTraining />,
},
{
path: "powerCenter/auto-greeting",
element: <AutoGreeting />,
},
],
},
];