From e23b37f0d75f43d8216e8a4169e54cfb0b601b8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=AC=94=E8=AE=B0=E6=9C=AC=E9=87=8C=E7=9A=84=E6=B0=B8?= =?UTF-8?q?=E5=B9=B3?= Date: Wed, 23 Jul 2025 19:40:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9C=AC=E6=AC=A1=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=86=85=E5=AE=B9=E5=A6=82=E4=B8=8B=20?= =?UTF-8?q?=E5=9C=BA=E6=99=AF=E8=AE=A1=E5=88=92=E6=9E=84=E5=BB=BA=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/scenarios/plan/new/index.api.ts | 2 +- nkebao/src/pages/scenarios/plan/new/index.tsx | 2 +- .../plan/new/steps/MessageSettings.tsx | 80 ++++++++++++++++--- 3 files changed, 69 insertions(+), 15 deletions(-) diff --git a/nkebao/src/pages/scenarios/plan/new/index.api.ts b/nkebao/src/pages/scenarios/plan/new/index.api.ts index bdb1906f..0eb6c231 100644 --- a/nkebao/src/pages/scenarios/plan/new/index.api.ts +++ b/nkebao/src/pages/scenarios/plan/new/index.api.ts @@ -6,7 +6,7 @@ export function getScenarioTypes() { // 创建计划 export function createPlan(data: any) { - return request("/v1/scenarios/plans", data, "POST"); + return request("/v1/plan/create", data, "POST"); } // 更新计划 diff --git a/nkebao/src/pages/scenarios/plan/new/index.tsx b/nkebao/src/pages/scenarios/plan/new/index.tsx index 7ab9db15..cc981115 100644 --- a/nkebao/src/pages/scenarios/plan/new/index.tsx +++ b/nkebao/src/pages/scenarios/plan/new/index.tsx @@ -135,7 +135,7 @@ export default function NewPlan() { } message.success(isEdit ? "计划已更新" : "获客计划已创建"); const sceneItem = sceneList.find((v) => formData.scenario === v.id); - router(`/scenarios/list/${formData.sceneId}/${sceneItem.name}`); + router(`/scenarios/list/${formData.scenario}/${sceneItem.name}`); } catch (error) { message.error( error instanceof Error diff --git a/nkebao/src/pages/scenarios/plan/new/steps/MessageSettings.tsx b/nkebao/src/pages/scenarios/plan/new/steps/MessageSettings.tsx index d344f898..56589ceb 100644 --- a/nkebao/src/pages/scenarios/plan/new/steps/MessageSettings.tsx +++ b/nkebao/src/pages/scenarios/plan/new/steps/MessageSettings.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React, { useState, useRef } from "react"; import { Input, Button, Tabs, Modal, Alert, message } from "antd"; import { PlusOutlined, @@ -14,6 +14,7 @@ import { TeamOutlined, } from "@ant-design/icons"; import styles from "./messages.module.scss"; +import { uploadFile } from "@/api/common"; interface MessageContent { id: string; @@ -87,6 +88,13 @@ const MessageSettings: React.FC = ({ const [isAddDayPlanOpen, setIsAddDayPlanOpen] = useState(false); const [isGroupSelectOpen, setIsGroupSelectOpen] = useState(false); const [selectedGroupId, setSelectedGroupId] = useState(""); + const fileInputRef = useRef(null); + const [uploadingIndex, setUploadingIndex] = useState(null); + const [uploadingType, setUploadingType] = useState< + "miniprogram" | "link" | null + >(null); + const [uploadingDay, setUploadingDay] = useState(null); + const [uploadingMsgIdx, setUploadingMsgIdx] = useState(null); // 添加新消息 const handleAddMessage = (dayIndex: number, type = "text") => { @@ -177,17 +185,50 @@ const MessageSettings: React.FC = ({ ); }; - // 处理文件上传 - const handleFileUpload = ( - dayIndex: number, - messageIndex: number, - type: "image" | "video" | "file" + // 触发文件选择 + const triggerUpload = ( + dayIdx: number, + msgIdx: number, + type: "miniprogram" | "link" ) => { - message.success( - `${ - type === "image" ? "图片" : type === "video" ? "视频" : "文件" - }上传成功` - ); + setUploadingDay(dayIdx); + setUploadingMsgIdx(msgIdx); + setUploadingType(type); + setTimeout(() => { + fileInputRef.current?.click(); + }, 0); + }; + + // 处理文件上传 + const handleFileChange = async (e: React.ChangeEvent) => { + const file = e.target.files?.[0]; + if ( + !file || + uploadingDay === null || + uploadingMsgIdx === null || + !uploadingType + ) + return; + setUploadingIndex(`${uploadingDay}-${uploadingMsgIdx}`); + try { + const url = await uploadFile(file); + // 更新对应消息的coverImage + setDayPlans((prev) => { + const newPlans = [...prev]; + const msg = newPlans[uploadingDay].messages[uploadingMsgIdx]; + msg.coverImage = url; + return newPlans; + }); + message.success("上传成功"); + } catch (err) { + message.error("上传失败"); + } finally { + setUploadingIndex(null); + setUploadingType(null); + setUploadingDay(null); + setUploadingMsgIdx(null); + if (fileInputRef.current) fileInputRef.current.value = ""; + } }; const items = dayPlans.map((plan, dayIndex) => ({ @@ -390,8 +431,11 @@ const MessageSettings: React.FC = ({ ) : (