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

This commit is contained in:
笔记本里的永平
2025-07-16 18:18:13 +08:00
parent 6c1646b23b
commit 3719671d1c
4 changed files with 74 additions and 23 deletions

View File

@@ -1,4 +1,4 @@
import { get, del, post } from './request';
import { get, del, post,put } from './request';
import type { ApiResponse } from '@/types/common';
// 服务器返回的场景数据类型
@@ -94,8 +94,7 @@ export interface TextUrl {
export interface PlanDetail {
id: number;
name: string;
planName: string;
scenario: string;
scenario: number;
scenarioTags: Tag[];
customTags: Tag[];
posters: Poster[];
@@ -103,7 +102,6 @@ export interface PlanDetail {
enabled: boolean;
addInterval: number;
remarkFormat: string;
planNameEdited: boolean;
endTime: string;
greeting: string;
startTime: string;
@@ -117,6 +115,7 @@ export interface PlanDetail {
apiKey: string;
wxMinAppSrc?: any;
textUrl: TextUrl;
[key: string]: any;
}
/**
@@ -304,4 +303,9 @@ export const getPlanScenes = () => get<any>('/v1/plan/scenes');
export async function createScenarioPlan(data: any) {
return post('/v1/plan/create', data);
}
// 编辑计划
export async function updateScenarioPlan(planId: number | string, data: any) {
return await put(`/v1/plan/update?planId=${planId}`, data);
}

View File

@@ -13,6 +13,7 @@ import {
createScenarioPlan,
fetchPlanDetail,
PlanDetail,
updateScenarioPlan,
} from "@/api/scenarios";
// 步骤定义 - 只保留三个步骤
@@ -22,11 +23,28 @@ const steps = [
{ id: 3, title: "步骤三", subtitle: "消息设置" },
];
// 类型定义
interface FormData {
name: string;
scenario: number;
posters: any[]; // 后续可替换为具体Poster类型
device: string[];
remarkType: string;
greeting: string;
addInterval: number;
startTime: string;
endTime: string;
enabled: boolean;
sceneId: string | number;
remarkFormat: string;
addFriendInterval: number;
}
export default function NewPlan() {
const router = useNavigate();
const [currentStep, setCurrentStep] = useState(1);
const [formData, setFormData] = useState({
planName: "",
const [formData, setFormData] = useState<FormData>({
name: "",
scenario: 1,
posters: [],
device: [],
@@ -37,7 +55,6 @@ export default function NewPlan() {
endTime: "18:00",
enabled: true,
sceneId: "",
planNameEdited: false,
remarkFormat: "",
addFriendInterval: 1,
});
@@ -64,10 +81,23 @@ export default function NewPlan() {
setIsEdit(true);
//获取计划详情
const res = await fetchPlanDetail(planId);
if (res.code === 200) {
if (res.code === 200 && res.data) {
const detail = res.data as PlanDetail;
setFormData((prev) => ({
...prev,
...{ scenario: Number(res?.data?.scenario) },
name: detail.name ?? "",
scenario: Number(detail.scenario) || 1,
posters: detail.posters ?? [],
device: detail.device ?? [],
remarkType: detail.remarkType ?? "phone",
greeting: detail.greeting ?? "",
addInterval: detail.addInterval ?? 1,
startTime: detail.startTime ?? "09:00",
endTime: detail.endTime ?? "18:00",
enabled: detail.enabled ?? true,
sceneId: Number(detail.scenario) || 1,
remarkFormat: detail.remarkFormat ?? "",
addFriendInterval: detail.addFriendInterval ?? 1,
}));
}
} else {
@@ -88,16 +118,30 @@ export default function NewPlan() {
// 处理保存
const handleSave = async () => {
try {
const result = await createScenarioPlan(formData);
console.log(result);
if (result.code === 200) {
Toast({ message: "获客计划已创建", theme: "success" });
router(`/scenarios/list/${scenarioId}/`);
let result;
if (isEdit && planId) {
// 编辑:拼接后端需要的完整参数
const editData = {
...formData,
id: Number(planId),
planId: Number(planId),
// 兼容后端需要的字段
// 你可以根据实际需要补充其它字段
};
result = await updateScenarioPlan(planId, editData);
} else {
// 新建
result = await createScenarioPlan(formData);
}
if (result.code === 200) {
Toast({
message: result.msg,
theme: "error",
message: isEdit ? "计划已更新" : "获客计划已创建",
theme: "success",
});
const sceneItem = sceneList.find((v) => formData.scenario === v.id);
router(`/scenarios/list/${formData.sceneId}/${sceneItem.name}`);
} else {
Toast({ message: result.msg, theme: "error" });
}
} catch (error) {
Toast({
@@ -106,6 +150,8 @@ export default function NewPlan() {
? error.message
: typeof error === "string"
? error
: isEdit
? "更新计划失败,请重试"
: "创建计划失败,请重试",
theme: "error",
});

View File

@@ -178,17 +178,18 @@ export function BasicSettings({
onChange({ ...formData, scenario: "haibao" });
}
if (!formData.planName) {
const today = new Date().toLocaleDateString("zh-CN").replace(/\//g, "");
onChange({ ...formData, planName: `海报${today}` });
}
// 检查是否已经有上传的订单文件
if (formData.orderFileUploaded) {
setOrderUploaded(true);
}
}, [formData, onChange]);
useEffect(() => {
const today = new Date().toLocaleDateString("zh-CN").replace(/\//g, "");
const sceneItem = sceneList.find((v) => formData.scenario === v.id);
onChange({ ...formData, name: `${sceneItem?.name || "海报"}${today}` });
}, [sceneList]);
// 选中场景
const handleScenarioSelect = (sceneId: number) => {
onChange({ ...formData, scenario: sceneId });

View File

@@ -66,7 +66,7 @@ export function FriendRequestSettings({
case "gongzhonghao":
return "公众号";
default:
return formData.planName || "获客计划";
return formData.name || "获客计划";
}
};
@@ -114,7 +114,7 @@ export function FriendRequestSettings({
status: "online",
}));
setSelectedDevices(newSelectedDevices);
onChange({ ...formData, selectedDevices: newSelectedDevices });
onChange({ ...formData, device: deviceIds });
}}
placeholder="选择设备"
/>