feat: 本次提交更新内容如下
先存一版作为模板,然后开发其他的
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import request from "@/api/request";
|
import request from "@/api/request";
|
||||||
// 获取场景类型列表
|
// 获取场景类型列表
|
||||||
export function getScenarioTypes() {
|
export function getScenarioTypes() {
|
||||||
return request("/v1/scenarios/types", undefined, "GET");
|
return request("/v1/plan/scenes", undefined, "GET");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建计划
|
// 创建计划
|
||||||
|
|||||||
@@ -1,17 +1,18 @@
|
|||||||
import { useState, useEffect } from "react";
|
import { useState, useEffect } from "react";
|
||||||
import { useNavigate, useParams } from "react-router-dom";
|
import { useNavigate, useParams } from "react-router-dom";
|
||||||
import { LeftOutlined } from "@ant-design/icons";
|
import { message } from "antd";
|
||||||
import { Button, Steps, message } from "antd";
|
import { NavBar } from "antd-mobile";
|
||||||
|
import { ArrowLeftOutlined } from "@ant-design/icons";
|
||||||
import BasicSettings from "./steps/BasicSettings";
|
import BasicSettings from "./steps/BasicSettings";
|
||||||
import FriendRequestSettings from "./steps/FriendRequestSettings";
|
import FriendRequestSettings from "./steps/FriendRequestSettings";
|
||||||
import MessageSettings from "./steps/MessageSettings";
|
import MessageSettings from "./steps/MessageSettings";
|
||||||
import Layout from "@/components/Layout/Layout";
|
import Layout from "@/components/Layout/Layout";
|
||||||
|
import StepIndicator from "@/components/StepIndicator";
|
||||||
import {
|
import {
|
||||||
getPlanScenes,
|
getScenarioTypes,
|
||||||
createScenarioPlan,
|
createPlan,
|
||||||
fetchPlanDetail,
|
getPlanDetail,
|
||||||
PlanDetail,
|
updatePlan,
|
||||||
updateScenarioPlan,
|
|
||||||
} from "./index.api";
|
} from "./index.api";
|
||||||
|
|
||||||
// 步骤定义 - 只保留三个步骤
|
// 步骤定义 - 只保留三个步骤
|
||||||
@@ -70,7 +71,7 @@ export default function NewPlan() {
|
|||||||
const loadData = async () => {
|
const loadData = async () => {
|
||||||
setSceneLoading(true);
|
setSceneLoading(true);
|
||||||
//获取场景类型
|
//获取场景类型
|
||||||
getPlanScenes()
|
getScenarioTypes()
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
setSceneList(data || []);
|
setSceneList(data || []);
|
||||||
})
|
})
|
||||||
@@ -81,8 +82,8 @@ export default function NewPlan() {
|
|||||||
if (planId) {
|
if (planId) {
|
||||||
setIsEdit(true);
|
setIsEdit(true);
|
||||||
//获取计划详情
|
//获取计划详情
|
||||||
try {
|
|
||||||
const detail = await fetchPlanDetail(planId);
|
const detail = await getPlanDetail(planId);
|
||||||
setFormData((prev) => ({
|
setFormData((prev) => ({
|
||||||
...prev,
|
...prev,
|
||||||
name: detail.name ?? "",
|
name: detail.name ?? "",
|
||||||
@@ -100,9 +101,6 @@ export default function NewPlan() {
|
|||||||
addFriendInterval: detail.addFriendInterval ?? 1,
|
addFriendInterval: detail.addFriendInterval ?? 1,
|
||||||
tips: detail.tips ?? "",
|
tips: detail.tips ?? "",
|
||||||
}));
|
}));
|
||||||
} catch (err) {
|
|
||||||
message.error(err.message || "获取计划详情失败");
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (scenarioId) {
|
if (scenarioId) {
|
||||||
setFormData((prev) => ({
|
setFormData((prev) => ({
|
||||||
@@ -131,10 +129,10 @@ export default function NewPlan() {
|
|||||||
// 兼容后端需要的字段
|
// 兼容后端需要的字段
|
||||||
// 你可以根据实际需要补充其它字段
|
// 你可以根据实际需要补充其它字段
|
||||||
};
|
};
|
||||||
result = await updateScenarioPlan(planId, editData);
|
result = await updatePlan(planId, editData);
|
||||||
} else {
|
} else {
|
||||||
// 新建
|
// 新建
|
||||||
result = await createScenarioPlan(formData);
|
result = await createPlan(formData);
|
||||||
}
|
}
|
||||||
message.success(isEdit ? "计划已更新" : "获客计划已创建");
|
message.success(isEdit ? "计划已更新" : "获客计划已创建");
|
||||||
const sceneItem = sceneList.find((v) => formData.scenario === v.id);
|
const sceneItem = sceneList.find((v) => formData.scenario === v.id);
|
||||||
@@ -207,33 +205,29 @@ export default function NewPlan() {
|
|||||||
<Layout
|
<Layout
|
||||||
header={
|
header={
|
||||||
<>
|
<>
|
||||||
<header className="sticky top-0 z-10 bg-white border-b">
|
<NavBar
|
||||||
<div className="flex items-center justify-between h-14 px-4">
|
back={null}
|
||||||
<div className="flex items-center">
|
style={{ background: "#fff" }}
|
||||||
<Button
|
left={
|
||||||
type="text"
|
<div className="nav-title">
|
||||||
shape="circle"
|
<ArrowLeftOutlined
|
||||||
icon={<LeftOutlined />}
|
twoToneColor="#1677ff"
|
||||||
onClick={() => router(-1)}
|
onClick={() => router(-1)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
}
|
||||||
</header>
|
>
|
||||||
|
<span className="nav-title">
|
||||||
|
{isEdit ? "编辑朋友圈同步" : "新建朋友圈同步"}
|
||||||
|
</span>
|
||||||
|
</NavBar>
|
||||||
<div className="px-4 py-6">
|
<div className="px-4 py-6">
|
||||||
<Steps current={currentStep - 1}>
|
<StepIndicator currentStep={currentStep} steps={steps} />
|
||||||
{steps.map((step, idx) => (
|
|
||||||
<Steps.Step
|
|
||||||
key={step.id}
|
|
||||||
title={step.title}
|
|
||||||
description={step.subtitle}
|
|
||||||
/>
|
|
||||||
))}
|
|
||||||
</Steps>
|
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<div className="p-4">{renderStepContent()}</div>
|
{renderStepContent()}
|
||||||
</Layout>
|
</Layout>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { NavBar } from "antd-mobile";
|
|||||||
import { ArrowLeftOutlined } from "@ant-design/icons";
|
import { ArrowLeftOutlined } from "@ant-design/icons";
|
||||||
import { createGroupPushTask } from "@/pages/workspace/group-push/detail/groupPush";
|
import { createGroupPushTask } from "@/pages/workspace/group-push/detail/groupPush";
|
||||||
import Layout from "@/components/Layout/Layout";
|
import Layout from "@/components/Layout/Layout";
|
||||||
import StepIndicator from "./components/StepIndicator";
|
import StepIndicator from "@/components/StepIndicator";
|
||||||
import BasicSettings from "./components/BasicSettings";
|
import BasicSettings from "./components/BasicSettings";
|
||||||
import GroupSelector from "./components/GroupSelector";
|
import GroupSelector from "./components/GroupSelector";
|
||||||
import ContentSelector from "./components/ContentSelector";
|
import ContentSelector from "./components/ContentSelector";
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ import {
|
|||||||
Menu,
|
Menu,
|
||||||
} from "antd";
|
} from "antd";
|
||||||
import Layout from "@/components/Layout/Layout";
|
import Layout from "@/components/Layout/Layout";
|
||||||
import MeauMobile from "@/components/MeauMobile/MeauMoible";
|
|
||||||
import {
|
import {
|
||||||
fetchGroupPushTasks,
|
fetchGroupPushTasks,
|
||||||
deleteGroupPushTask,
|
deleteGroupPushTask,
|
||||||
@@ -41,8 +40,6 @@ import {
|
|||||||
} from "@/pages/workspace/group-push/detail/groupPush";
|
} from "@/pages/workspace/group-push/detail/groupPush";
|
||||||
import styles from "./index.module.scss";
|
import styles from "./index.module.scss";
|
||||||
|
|
||||||
const { Search } = Input;
|
|
||||||
|
|
||||||
const GroupPush: React.FC = () => {
|
const GroupPush: React.FC = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const [expandedTaskId, setExpandedTaskId] = useState<string | null>(null);
|
const [expandedTaskId, setExpandedTaskId] = useState<string | null>(null);
|
||||||
|
|||||||
Reference in New Issue
Block a user