feat: 本次提交更新内容如下
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { get, del, post } from './request';
|
import { get, del, post,put } from './request';
|
||||||
import type { ApiResponse } from '@/types/common';
|
import type { ApiResponse } from '@/types/common';
|
||||||
|
|
||||||
// 服务器返回的场景数据类型
|
// 服务器返回的场景数据类型
|
||||||
@@ -94,8 +94,7 @@ export interface TextUrl {
|
|||||||
export interface PlanDetail {
|
export interface PlanDetail {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
planName: string;
|
scenario: number;
|
||||||
scenario: string;
|
|
||||||
scenarioTags: Tag[];
|
scenarioTags: Tag[];
|
||||||
customTags: Tag[];
|
customTags: Tag[];
|
||||||
posters: Poster[];
|
posters: Poster[];
|
||||||
@@ -103,7 +102,6 @@ export interface PlanDetail {
|
|||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
addInterval: number;
|
addInterval: number;
|
||||||
remarkFormat: string;
|
remarkFormat: string;
|
||||||
planNameEdited: boolean;
|
|
||||||
endTime: string;
|
endTime: string;
|
||||||
greeting: string;
|
greeting: string;
|
||||||
startTime: string;
|
startTime: string;
|
||||||
@@ -117,6 +115,7 @@ export interface PlanDetail {
|
|||||||
apiKey: string;
|
apiKey: string;
|
||||||
wxMinAppSrc?: any;
|
wxMinAppSrc?: any;
|
||||||
textUrl: TextUrl;
|
textUrl: TextUrl;
|
||||||
|
[key: string]: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -304,4 +303,9 @@ export const getPlanScenes = () => get<any>('/v1/plan/scenes');
|
|||||||
|
|
||||||
export async function createScenarioPlan(data: any) {
|
export async function createScenarioPlan(data: any) {
|
||||||
return post('/v1/plan/create', data);
|
return post('/v1/plan/create', data);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 编辑计划
|
||||||
|
export async function updateScenarioPlan(planId: number | string, data: any) {
|
||||||
|
return await put(`/v1/plan/update?planId=${planId}`, data);
|
||||||
}
|
}
|
||||||
@@ -13,6 +13,7 @@ import {
|
|||||||
createScenarioPlan,
|
createScenarioPlan,
|
||||||
fetchPlanDetail,
|
fetchPlanDetail,
|
||||||
PlanDetail,
|
PlanDetail,
|
||||||
|
updateScenarioPlan,
|
||||||
} from "@/api/scenarios";
|
} from "@/api/scenarios";
|
||||||
|
|
||||||
// 步骤定义 - 只保留三个步骤
|
// 步骤定义 - 只保留三个步骤
|
||||||
@@ -22,11 +23,28 @@ const steps = [
|
|||||||
{ id: 3, title: "步骤三", subtitle: "消息设置" },
|
{ 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() {
|
export default function NewPlan() {
|
||||||
const router = useNavigate();
|
const router = useNavigate();
|
||||||
const [currentStep, setCurrentStep] = useState(1);
|
const [currentStep, setCurrentStep] = useState(1);
|
||||||
const [formData, setFormData] = useState({
|
const [formData, setFormData] = useState<FormData>({
|
||||||
planName: "",
|
name: "",
|
||||||
scenario: 1,
|
scenario: 1,
|
||||||
posters: [],
|
posters: [],
|
||||||
device: [],
|
device: [],
|
||||||
@@ -37,7 +55,6 @@ export default function NewPlan() {
|
|||||||
endTime: "18:00",
|
endTime: "18:00",
|
||||||
enabled: true,
|
enabled: true,
|
||||||
sceneId: "",
|
sceneId: "",
|
||||||
planNameEdited: false,
|
|
||||||
remarkFormat: "",
|
remarkFormat: "",
|
||||||
addFriendInterval: 1,
|
addFriendInterval: 1,
|
||||||
});
|
});
|
||||||
@@ -64,10 +81,23 @@ export default function NewPlan() {
|
|||||||
setIsEdit(true);
|
setIsEdit(true);
|
||||||
//获取计划详情
|
//获取计划详情
|
||||||
const res = await fetchPlanDetail(planId);
|
const res = await fetchPlanDetail(planId);
|
||||||
if (res.code === 200) {
|
if (res.code === 200 && res.data) {
|
||||||
|
const detail = res.data as PlanDetail;
|
||||||
setFormData((prev) => ({
|
setFormData((prev) => ({
|
||||||
...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 {
|
} else {
|
||||||
@@ -88,16 +118,30 @@ export default function NewPlan() {
|
|||||||
// 处理保存
|
// 处理保存
|
||||||
const handleSave = async () => {
|
const handleSave = async () => {
|
||||||
try {
|
try {
|
||||||
const result = await createScenarioPlan(formData);
|
let result;
|
||||||
console.log(result);
|
if (isEdit && planId) {
|
||||||
if (result.code === 200) {
|
// 编辑:拼接后端需要的完整参数
|
||||||
Toast({ message: "获客计划已创建", theme: "success" });
|
const editData = {
|
||||||
router(`/scenarios/list/${scenarioId}/`);
|
...formData,
|
||||||
|
id: Number(planId),
|
||||||
|
planId: Number(planId),
|
||||||
|
// 兼容后端需要的字段
|
||||||
|
// 你可以根据实际需要补充其它字段
|
||||||
|
};
|
||||||
|
result = await updateScenarioPlan(planId, editData);
|
||||||
} else {
|
} else {
|
||||||
|
// 新建
|
||||||
|
result = await createScenarioPlan(formData);
|
||||||
|
}
|
||||||
|
if (result.code === 200) {
|
||||||
Toast({
|
Toast({
|
||||||
message: result.msg,
|
message: isEdit ? "计划已更新" : "获客计划已创建",
|
||||||
theme: "error",
|
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) {
|
} catch (error) {
|
||||||
Toast({
|
Toast({
|
||||||
@@ -106,6 +150,8 @@ export default function NewPlan() {
|
|||||||
? error.message
|
? error.message
|
||||||
: typeof error === "string"
|
: typeof error === "string"
|
||||||
? error
|
? error
|
||||||
|
: isEdit
|
||||||
|
? "更新计划失败,请重试"
|
||||||
: "创建计划失败,请重试",
|
: "创建计划失败,请重试",
|
||||||
theme: "error",
|
theme: "error",
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -178,17 +178,18 @@ export function BasicSettings({
|
|||||||
onChange({ ...formData, scenario: "haibao" });
|
onChange({ ...formData, scenario: "haibao" });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!formData.planName) {
|
|
||||||
const today = new Date().toLocaleDateString("zh-CN").replace(/\//g, "");
|
|
||||||
onChange({ ...formData, planName: `海报${today}` });
|
|
||||||
}
|
|
||||||
|
|
||||||
// 检查是否已经有上传的订单文件
|
// 检查是否已经有上传的订单文件
|
||||||
if (formData.orderFileUploaded) {
|
if (formData.orderFileUploaded) {
|
||||||
setOrderUploaded(true);
|
setOrderUploaded(true);
|
||||||
}
|
}
|
||||||
}, [formData, onChange]);
|
}, [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) => {
|
const handleScenarioSelect = (sceneId: number) => {
|
||||||
onChange({ ...formData, scenario: sceneId });
|
onChange({ ...formData, scenario: sceneId });
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ export function FriendRequestSettings({
|
|||||||
case "gongzhonghao":
|
case "gongzhonghao":
|
||||||
return "公众号";
|
return "公众号";
|
||||||
default:
|
default:
|
||||||
return formData.planName || "获客计划";
|
return formData.name || "获客计划";
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -114,7 +114,7 @@ export function FriendRequestSettings({
|
|||||||
status: "online",
|
status: "online",
|
||||||
}));
|
}));
|
||||||
setSelectedDevices(newSelectedDevices);
|
setSelectedDevices(newSelectedDevices);
|
||||||
onChange({ ...formData, selectedDevices: newSelectedDevices });
|
onChange({ ...formData, device: deviceIds });
|
||||||
}}
|
}}
|
||||||
placeholder="选择设备"
|
placeholder="选择设备"
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user