diff --git a/nkebao/src/pages/workspace/auto-group/AutoGroup.tsx b/nkebao/src/pages/workspace/auto-group/AutoGroup.tsx deleted file mode 100644 index 935827d6..00000000 --- a/nkebao/src/pages/workspace/auto-group/AutoGroup.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from "react"; -import PlaceholderPage from "@/components/PlaceholderPage"; - -const AutoGroup: React.FC = () => { - return ( - - ); -}; - -export default AutoGroup; diff --git a/nkebao/src/pages/workspace/auto-group/Detail.tsx b/nkebao/src/pages/workspace/auto-group/Detail.tsx deleted file mode 100644 index db34f334..00000000 --- a/nkebao/src/pages/workspace/auto-group/Detail.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import PlaceholderPage from "@/components/PlaceholderPage"; - -const AutoGroupDetail: React.FC = () => { - return ; -}; - -export default AutoGroupDetail; diff --git a/nkebao/src/pages/workspace/auto-group/detail/api.ts b/nkebao/src/pages/workspace/auto-group/detail/api.ts new file mode 100644 index 00000000..ff38e95f --- /dev/null +++ b/nkebao/src/pages/workspace/auto-group/detail/api.ts @@ -0,0 +1,6 @@ +import request from "@/api/request"; + +// 获取自动建群任务详情 +export function getAutoGroupDetail(id: string) { + return request(`/api/auto-group/detail/${id}`); +} diff --git a/nkebao/src/pages/workspace/auto-group/detail/index.module.scss b/nkebao/src/pages/workspace/auto-group/detail/index.module.scss new file mode 100644 index 00000000..93c42e85 --- /dev/null +++ b/nkebao/src/pages/workspace/auto-group/detail/index.module.scss @@ -0,0 +1,3 @@ +.autoGroupDetail { + // 这里写详情页样式 +} \ No newline at end of file diff --git a/nkebao/src/pages/workspace/auto-group/detail/index.tsx b/nkebao/src/pages/workspace/auto-group/detail/index.tsx new file mode 100644 index 00000000..00f574dd --- /dev/null +++ b/nkebao/src/pages/workspace/auto-group/detail/index.tsx @@ -0,0 +1,7 @@ +import React from "react"; + +const AutoGroupDetail: React.FC = () => { + return
自动建群详情页
; +}; + +export default AutoGroupDetail; diff --git a/nkebao/src/pages/workspace/auto-group/form/api.ts b/nkebao/src/pages/workspace/auto-group/form/api.ts new file mode 100644 index 00000000..4ab01f32 --- /dev/null +++ b/nkebao/src/pages/workspace/auto-group/form/api.ts @@ -0,0 +1,11 @@ +import request from "@/api/request"; + +// 新建自动建群任务 +export function createAutoGroup(data: any) { + return request("/api/auto-group/create", data, "POST"); +} + +// 编辑自动建群任务 +export function updateAutoGroup(id: string, data: any) { + return request(`/api/auto-group/update/${id}`, data, "POST"); +} diff --git a/nkebao/src/pages/workspace/auto-group/form/index.module.scss b/nkebao/src/pages/workspace/auto-group/form/index.module.scss new file mode 100644 index 00000000..19f9a662 --- /dev/null +++ b/nkebao/src/pages/workspace/auto-group/form/index.module.scss @@ -0,0 +1,3 @@ +.autoGroupForm { + // 这里写新建/编辑页样式 +} \ No newline at end of file diff --git a/nkebao/src/pages/workspace/auto-group/form/index.tsx b/nkebao/src/pages/workspace/auto-group/form/index.tsx new file mode 100644 index 00000000..3a8d8bd1 --- /dev/null +++ b/nkebao/src/pages/workspace/auto-group/form/index.tsx @@ -0,0 +1,7 @@ +import React from "react"; + +const AutoGroupForm: React.FC = () => { + return
自动建群新建/编辑页
; +}; + +export default AutoGroupForm; diff --git a/nkebao/src/pages/workspace/auto-group/list/api.ts b/nkebao/src/pages/workspace/auto-group/list/api.ts new file mode 100644 index 00000000..073a6242 --- /dev/null +++ b/nkebao/src/pages/workspace/auto-group/list/api.ts @@ -0,0 +1,8 @@ +import request from "@/api/request"; + +// 获取自动建群任务列表 +export function getAutoGroupList(params?: any) { + return request("/api/auto-group/list", params, "GET"); +} + +// 其他相关API可按需添加 diff --git a/nkebao/src/pages/workspace/auto-group/list/index.module.scss b/nkebao/src/pages/workspace/auto-group/list/index.module.scss new file mode 100644 index 00000000..02104154 --- /dev/null +++ b/nkebao/src/pages/workspace/auto-group/list/index.module.scss @@ -0,0 +1,3 @@ +.autoGroupList { + // 这里写列表页样式 +} \ No newline at end of file diff --git a/nkebao/src/pages/workspace/auto-group/list/index.tsx b/nkebao/src/pages/workspace/auto-group/list/index.tsx new file mode 100644 index 00000000..ec7b02eb --- /dev/null +++ b/nkebao/src/pages/workspace/auto-group/list/index.tsx @@ -0,0 +1,378 @@ +import React, { useState } from "react"; +import { useNavigate } from "react-router-dom"; +import { + Button, + Card, + Input, + Switch, + ProgressBar, + Popover, + Toast, +} from "antd-mobile"; +import { + MoreOutline, + AddCircleOutline, + SearchOutline, + FilterOutline, + UserAddOutline, + ClockCircleOutline, + TeamOutline, + CalendarOutline, +} from "antd-mobile-icons"; + +import { ReloadOutlined, SettingOutlined } from "@ant-design/icons"; + +import Layout from "@/components/Layout/Layout"; +import MeauMobile from "@/components/MeauMobile/MeauMoible"; +import style from "./index.module.scss"; + +interface GroupTask { + id: string; + name: string; + status: "running" | "paused" | "completed"; + deviceCount: number; + targetFriends: number; + createdGroups: number; + lastCreateTime: string; + createTime: string; + creator: string; + createInterval: number; + maxGroupsPerDay: number; + timeRange: { start: string; end: string }; + groupSize: { min: number; max: number }; + targetTags: string[]; + groupNameTemplate: string; + groupDescription: string; +} + +const mockTasks: GroupTask[] = [ + { + id: "1", + name: "VIP客户建群", + deviceCount: 2, + targetFriends: 156, + createdGroups: 12, + lastCreateTime: "2025-02-06 13:12:35", + createTime: "2024-11-20 19:04:14", + creator: "admin", + status: "running", + createInterval: 300, + maxGroupsPerDay: 20, + timeRange: { start: "09:00", end: "21:00" }, + groupSize: { min: 20, max: 50 }, + targetTags: ["VIP客户", "高价值"], + groupNameTemplate: "VIP客户交流群{序号}", + groupDescription: "VIP客户专属交流群,提供优质服务", + }, + { + id: "2", + name: "产品推广建群", + deviceCount: 1, + targetFriends: 89, + createdGroups: 8, + lastCreateTime: "2024-03-04 14:09:35", + createTime: "2024-03-04 14:29:04", + creator: "manager", + status: "paused", + createInterval: 600, + maxGroupsPerDay: 10, + timeRange: { start: "10:00", end: "20:00" }, + groupSize: { min: 15, max: 30 }, + targetTags: ["潜在客户", "中意向"], + groupNameTemplate: "产品推广群{序号}", + groupDescription: "产品推广交流群,了解最新产品信息", + }, +]; + +const getStatusColor = (status: string) => { + switch (status) { + case "running": + return style.statusRunning; + case "paused": + return style.statusPaused; + case "completed": + return style.statusCompleted; + default: + return style.statusPaused; + } +}; + +const getStatusText = (status: string) => { + switch (status) { + case "running": + return "进行中"; + case "paused": + return "已暂停"; + case "completed": + return "已完成"; + default: + return "未知"; + } +}; + +const AutoGroupList: React.FC = () => { + const navigate = useNavigate(); + const [expandedTaskId, setExpandedTaskId] = useState(null); + const [searchTerm, setSearchTerm] = useState(""); + const [tasks, setTasks] = useState(mockTasks); + + const toggleExpand = (taskId: string) => { + setExpandedTaskId(expandedTaskId === taskId ? null : taskId); + }; + + const handleDelete = (taskId: string) => { + const taskToDelete = tasks.find((task) => task.id === taskId); + if (!taskToDelete) return; + window.confirm(`确定要删除"${taskToDelete.name}"吗?`) && + setTasks(tasks.filter((task) => task.id !== taskId)); + Toast.show({ content: "删除成功" }); + }; + + const handleEdit = (taskId: string) => { + navigate(`/workspace/auto-group/${taskId}/edit`); + }; + + const handleView = (taskId: string) => { + navigate(`/workspace/auto-group/${taskId}`); + }; + + const handleCopy = (taskId: string) => { + const taskToCopy = tasks.find((task) => task.id === taskId); + if (taskToCopy) { + const newTask = { + ...taskToCopy, + id: `${Date.now()}`, + name: `${taskToCopy.name} (复制)`, + createTime: new Date().toISOString().replace("T", " ").substring(0, 19), + }; + setTasks([...tasks, newTask]); + Toast.show({ content: "复制成功" }); + } + }; + + const toggleTaskStatus = (taskId: string) => { + setTasks((prev) => + prev.map((task) => + task.id === taskId + ? { + ...task, + status: task.status === "running" ? "paused" : "running", + } + : task + ) + ); + Toast.show({ content: "状态已切换" }); + }; + + const handleCreateNew = () => { + navigate("/workspace/auto-group/new"); + }; + + const filteredTasks = tasks.filter((task) => + task.name.toLowerCase().includes(searchTerm.toLowerCase()) + ); + + return ( + +
自动建群
+ + + } + footer={} + > +
+
+ setSearchTerm(val)} + prefix={} + clearable + /> + + +
+
+ {filteredTasks.length === 0 ? ( + + +
暂无建群任务
+
创建您的第一个自动建群任务
+ +
+ ) : ( + filteredTasks.map((task) => ( + +
+
{task.name}
+ + {getStatusText(task.status)} + + toggleTaskStatus(task.id)} + disabled={task.status === "completed"} + style={{ marginLeft: 8 }} + /> + +
handleView(task.id)} + > + 查看 +
+
handleEdit(task.id)} + > + 编辑 +
+
handleCopy(task.id)} + > + 复制 +
+
handleDelete(task.id)} + > + 删除 +
+
+ } + trigger="click" + > + + +
+
+
+
执行设备
+
{task.deviceCount} 个
+
+
+
目标好友
+
+ {task.targetFriends} 个 +
+
+
+
已建群
+
+ {task.createdGroups} 个 +
+
+
+
创建人
+
{task.creator}
+
+
+
+
+ + 上次建群:{task.lastCreateTime} +
+
+ 创建时间:{task.createTime} + +
+
+ {expandedTaskId === task.id && ( +
+
+
+
+ {" "} + 基本设置 +
+
+ 建群间隔:{task.createInterval} 秒 +
+
+ 每日最大建群数:{task.maxGroupsPerDay} 个 +
+
+ 执行时间段:{task.timeRange.start} -{" "} + {task.timeRange.end} +
+
+ 群组规模:{task.groupSize.min}-{task.groupSize.max} 人 +
+
+
+
+ 目标人群 +
+
+ {task.targetTags.map((tag) => ( + + {tag} + + ))} +
+
+
+
+ 群组设置 +
+
+ 群名称模板:{task.groupNameTemplate} +
+
+ 群描述:{task.groupDescription} +
+
+
+
+ {" "} + 执行进度 +
+
+ 今日已建群:{task.createdGroups} /{" "} + {task.maxGroupsPerDay} +
+ +
+
+
+ )} + + )) + )} +
+ +
+ ); +}; + +export default AutoGroupList; diff --git a/nkebao/src/router/module/workspace.tsx b/nkebao/src/router/module/workspace.tsx index b7ccc7c2..f1230d2e 100644 --- a/nkebao/src/router/module/workspace.tsx +++ b/nkebao/src/router/module/workspace.tsx @@ -2,8 +2,9 @@ import Workspace from "@/pages/workspace/main"; import AutoLike from "@/pages/workspace/auto-like/AutoLike"; import NewAutoLike from "@/pages/workspace/auto-like/NewAutoLike"; import AutoLikeDetail from "@/pages/workspace/auto-like/AutoLikeDetail"; -import AutoGroup from "@/pages/workspace/auto-group/AutoGroup"; -import AutoGroupDetail from "@/pages/workspace/auto-group/Detail"; +import AutoGroupList from "@/pages/workspace/auto-group/list"; +import AutoGroupDetail from "@/pages/workspace/auto-group/detail"; +import AutoGroupForm from "@/pages/workspace/auto-group/form"; import GroupPush from "@/pages/workspace/group-push/GroupPush"; import NewGroupPush from "@/pages/workspace/group-push/new"; import MomentsSync from "@/pages/workspace/moments-sync/MomentsSync"; @@ -42,10 +43,15 @@ const workspaceRoutes = [ element: , auth: true, }, - // 自动分组 + // 自动建群 { path: "/workspace/auto-group", - element: , + element: , + auth: true, + }, + { + path: "/workspace/auto-group/new", + element: , auth: true, }, { @@ -53,6 +59,11 @@ const workspaceRoutes = [ element: , auth: true, }, + { + path: "/workspace/auto-group/:id/edit", + element: , + auth: true, + }, // 群发推送 { path: "/workspace/group-push",