From b3cf0243dd22d2a03f6989e4e9c1f7b56c63a59f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E8=80=81=E7=99=BD=E5=85=94?= Date: Fri, 22 Aug 2025 14:24:52 +0800 Subject: [PATCH 1/7] 1 --- Cunkebao/dist/.vite/manifest.json | 2 +- Cunkebao/dist/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cunkebao/dist/.vite/manifest.json b/Cunkebao/dist/.vite/manifest.json index 454623cd..9630fc98 100644 --- a/Cunkebao/dist/.vite/manifest.json +++ b/Cunkebao/dist/.vite/manifest.json @@ -33,7 +33,7 @@ "name": "vendor" }, "index.html": { - "file": "assets/index-DV2QF8R9.js", + "file": "assets/index-C1eWqLbB.js", "name": "index", "src": "index.html", "isEntry": true, diff --git a/Cunkebao/dist/index.html b/Cunkebao/dist/index.html index 76889c66..51b87117 100644 --- a/Cunkebao/dist/index.html +++ b/Cunkebao/dist/index.html @@ -11,7 +11,7 @@ - + From 0b1872cc029779eda18ac52f2a6661c27c979b30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E8=80=81=E7=99=BD=E5=85=94?= Date: Fri, 22 Aug 2025 14:47:39 +0800 Subject: [PATCH 2/7] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=AE=BE=E5=A4=87?= =?UTF-8?q?ID=E7=B1=BB=E5=9E=8B=E9=94=99=E8=AF=AF=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E9=80=89=E9=A1=B9=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将设备ID从string类型改为number类型以匹配后端接口 - 为packageOptions添加默认空数组防止undefined错误 - 优化选项获取逻辑,正确处理API返回的数据结构 - 修复自动点赞任务创建时的friendsGroups校验条件 --- Cunkebao/dist/.vite/manifest.json | 26 +++++++++---------- Cunkebao/dist/index.html | 8 +++--- .../src/components/FriendSelection/data.ts | 2 +- .../FriendSelection/selectionPopup.tsx | 2 +- .../mine/traffic-pool/list/BatchAddModal.tsx | 2 +- .../mobile/mine/traffic-pool/list/api.ts | 4 +-- .../mine/traffic-pool/list/dataAnyx.tsx | 10 +++++-- .../mobile/mine/traffic-pool/list/index.tsx | 4 +-- .../mobile/workspace/auto-like/new/data.ts | 4 +-- .../mobile/workspace/auto-like/new/index.tsx | 11 +++++--- 10 files changed, 42 insertions(+), 31 deletions(-) diff --git a/Cunkebao/dist/.vite/manifest.json b/Cunkebao/dist/.vite/manifest.json index 9630fc98..0307e260 100644 --- a/Cunkebao/dist/.vite/manifest.json +++ b/Cunkebao/dist/.vite/manifest.json @@ -1,18 +1,14 @@ { - "_charts-DRkEUjsu.js": { - "file": "assets/charts-DRkEUjsu.js", + "_charts-BKZw5YGd.js": { + "file": "assets/charts-BKZw5YGd.js", "name": "charts", "imports": [ - "_ui-ltFujOOi.js", + "_ui-CQE-Ac3N.js", "_vendor-2vc8h_ct.js" ] }, - "_ui-D0C0OGrH.css": { - "file": "assets/ui-D0C0OGrH.css", - "src": "_ui-D0C0OGrH.css" - }, - "_ui-ltFujOOi.js": { - "file": "assets/ui-ltFujOOi.js", + "_ui-CQE-Ac3N.js": { + "file": "assets/ui-CQE-Ac3N.js", "name": "ui", "imports": [ "_vendor-2vc8h_ct.js" @@ -21,6 +17,10 @@ "assets/ui-D0C0OGrH.css" ] }, + "_ui-D0C0OGrH.css": { + "file": "assets/ui-D0C0OGrH.css", + "src": "_ui-D0C0OGrH.css" + }, "_utils-6WF66_dS.js": { "file": "assets/utils-6WF66_dS.js", "name": "utils", @@ -33,18 +33,18 @@ "name": "vendor" }, "index.html": { - "file": "assets/index-C1eWqLbB.js", + "file": "assets/index-Do1bKVHK.js", "name": "index", "src": "index.html", "isEntry": true, "imports": [ "_vendor-2vc8h_ct.js", - "_ui-ltFujOOi.js", + "_ui-CQE-Ac3N.js", "_utils-6WF66_dS.js", - "_charts-DRkEUjsu.js" + "_charts-BKZw5YGd.js" ], "css": [ - "assets/index-DqyE1UEk.css" + "assets/index-ZCB0Bf2x.css" ] } } \ No newline at end of file diff --git a/Cunkebao/dist/index.html b/Cunkebao/dist/index.html index 51b87117..40df896b 100644 --- a/Cunkebao/dist/index.html +++ b/Cunkebao/dist/index.html @@ -11,13 +11,13 @@ - + - + - + - +
diff --git a/Cunkebao/src/components/FriendSelection/data.ts b/Cunkebao/src/components/FriendSelection/data.ts index 30b9ec70..434aa641 100644 --- a/Cunkebao/src/components/FriendSelection/data.ts +++ b/Cunkebao/src/components/FriendSelection/data.ts @@ -10,7 +10,7 @@ export interface FriendSelectionItem { export interface FriendSelectionProps { selectedOptions?: FriendSelectionItem[]; onSelect: (friends: FriendSelectionItem[]) => void; - deviceIds?: string[]; + deviceIds?: number[]; enableDeviceFilter?: boolean; placeholder?: string; className?: string; diff --git a/Cunkebao/src/components/FriendSelection/selectionPopup.tsx b/Cunkebao/src/components/FriendSelection/selectionPopup.tsx index f5713c80..c527f755 100644 --- a/Cunkebao/src/components/FriendSelection/selectionPopup.tsx +++ b/Cunkebao/src/components/FriendSelection/selectionPopup.tsx @@ -12,7 +12,7 @@ interface SelectionPopupProps { onVisibleChange: (visible: boolean) => void; selectedOptions: FriendSelectionItem[]; onSelect: (friends: FriendSelectionItem[]) => void; - deviceIds?: string[]; + deviceIds?: number[]; enableDeviceFilter?: boolean; readonly?: boolean; onConfirm?: ( diff --git a/Cunkebao/src/pages/mobile/mine/traffic-pool/list/BatchAddModal.tsx b/Cunkebao/src/pages/mobile/mine/traffic-pool/list/BatchAddModal.tsx index 9a034765..5c7eae5c 100644 --- a/Cunkebao/src/pages/mobile/mine/traffic-pool/list/BatchAddModal.tsx +++ b/Cunkebao/src/pages/mobile/mine/traffic-pool/list/BatchAddModal.tsx @@ -15,7 +15,7 @@ interface BatchAddModalProps { const BatchAddModal: React.FC = ({ visible, onClose, - packageOptions, + packageOptions = [], batchTarget, setBatchTarget, selectedCount, diff --git a/Cunkebao/src/pages/mobile/mine/traffic-pool/list/api.ts b/Cunkebao/src/pages/mobile/mine/traffic-pool/list/api.ts index a5b757ef..5f1509e5 100644 --- a/Cunkebao/src/pages/mobile/mine/traffic-pool/list/api.ts +++ b/Cunkebao/src/pages/mobile/mine/traffic-pool/list/api.ts @@ -9,10 +9,10 @@ export function fetchTrafficPoolList(params: { return request("/v1/traffic/pool", params, "GET"); } -export async function fetchScenarioOptions(): Promise { +export async function fetchScenarioOptions() { return request("/v1/plan/scenes", {}, "GET"); } -export async function fetchPackageOptions(): Promise { +export async function fetchPackageOptions() { return request("/v1/traffic/pool/getPackage", {}, "GET"); } diff --git a/Cunkebao/src/pages/mobile/mine/traffic-pool/list/dataAnyx.tsx b/Cunkebao/src/pages/mobile/mine/traffic-pool/list/dataAnyx.tsx index 6894ce1b..390e439b 100644 --- a/Cunkebao/src/pages/mobile/mine/traffic-pool/list/dataAnyx.tsx +++ b/Cunkebao/src/pages/mobile/mine/traffic-pool/list/dataAnyx.tsx @@ -78,8 +78,14 @@ export function useTrafficPoolListLogic() { // 获取筛选项 useEffect(() => { - fetchPackageOptions().then(setPackageOptions); - fetchScenarioOptions().then(setScenarioOptions); + fetchPackageOptions().then(res => { + console.log("packageOptions", res); + + setPackageOptions(res.list || []); + }); + fetchScenarioOptions().then(res => { + setScenarioOptions(res.list || []); + }); }, []); // 筛选条件变化时刷新列表 diff --git a/Cunkebao/src/pages/mobile/mine/traffic-pool/list/index.tsx b/Cunkebao/src/pages/mobile/mine/traffic-pool/list/index.tsx index a2a2edec..e3bacf8f 100644 --- a/Cunkebao/src/pages/mobile/mine/traffic-pool/list/index.tsx +++ b/Cunkebao/src/pages/mobile/mine/traffic-pool/list/index.tsx @@ -173,8 +173,8 @@ const TrafficPoolList: React.FC = () => { status: "offline" as const, })), ); - setPackageId(filters.packageId); - setScenarioId(filters.scenarioId); + setPackageId(filters.packageId ? parseInt(filters.packageId) : 0); + setScenarioId(filters.scenarioId ? parseInt(filters.scenarioId) : 0); setUserValue(filters.userValue); setUserStatus(filters.userStatus); // 重新获取列表 diff --git a/Cunkebao/src/pages/mobile/workspace/auto-like/new/data.ts b/Cunkebao/src/pages/mobile/workspace/auto-like/new/data.ts index 32201f84..43f1da6f 100644 --- a/Cunkebao/src/pages/mobile/workspace/auto-like/new/data.ts +++ b/Cunkebao/src/pages/mobile/workspace/auto-like/new/data.ts @@ -79,9 +79,9 @@ export interface CreateLikeTaskData { startTime: string; endTime: string; contentTypes: ContentType[]; - deveiceGroups: string[]; + deveiceGroups: number[]; deveiceGroupsOptions: DeviceSelectionItem[]; - friendsGroups: string[]; + friendsGroups: number[]; friendsGroupsOptions: FriendSelectionItem[]; friendMaxLikes: number; friendTags?: string; diff --git a/Cunkebao/src/pages/mobile/workspace/auto-like/new/index.tsx b/Cunkebao/src/pages/mobile/workspace/auto-like/new/index.tsx index 5be27d57..3d0aca8d 100644 --- a/Cunkebao/src/pages/mobile/workspace/auto-like/new/index.tsx +++ b/Cunkebao/src/pages/mobile/workspace/auto-like/new/index.tsx @@ -330,7 +330,12 @@ const NewAutoLike: React.FC = () => {
handleUpdateFormData({ devices })} + onSelect={devices => + handleUpdateFormData({ + deveiceGroups: devices.map(v => v.id), + deveiceGroupsOptions: devices, + }) + } showInput={true} showSelectedList={true} /> @@ -363,7 +368,7 @@ const NewAutoLike: React.FC = () => { selectedOptions={formData.friendsGroupsOptions || []} onSelect={friends => handleUpdateFormData({ - friendsGroups: friends.map(f => String(f.id)), + friendsGroups: friends.map(f => f.id), friendsGroupsOptions: friends, }) } @@ -385,7 +390,7 @@ const NewAutoLike: React.FC = () => { size="large" loading={isSubmitting} disabled={ - !formData.friendsgroups || formData.friendsgroups.length === 0 + !formData.friendsGroups || formData.friendsGroups.length === 0 } > {isEditMode ? "更新任务" : "创建任务"} From f099bb5420fed2055602547b97bb0fb7a0eb6443 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E8=80=81=E7=99=BD=E5=85=94?= Date: Fri, 22 Aug 2025 14:47:52 +0800 Subject: [PATCH 3/7] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E7=94=9F=E6=88=90=E7=9A=84=E8=B5=84=E6=BA=90=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=BC=95=E7=94=A8=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 自动构建后更新manifest.json和index.html中的资源文件引用路径 --- Cunkebao/dist/.vite/manifest.json | 2 +- Cunkebao/dist/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cunkebao/dist/.vite/manifest.json b/Cunkebao/dist/.vite/manifest.json index 0307e260..57e7c8ae 100644 --- a/Cunkebao/dist/.vite/manifest.json +++ b/Cunkebao/dist/.vite/manifest.json @@ -33,7 +33,7 @@ "name": "vendor" }, "index.html": { - "file": "assets/index-Do1bKVHK.js", + "file": "assets/index-B86fnEyO.js", "name": "index", "src": "index.html", "isEntry": true, diff --git a/Cunkebao/dist/index.html b/Cunkebao/dist/index.html index 40df896b..ea8b5977 100644 --- a/Cunkebao/dist/index.html +++ b/Cunkebao/dist/index.html @@ -11,7 +11,7 @@ - + From 79ccd8580ee93972dfae4120bb1982d71aa46d20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E8=80=81=E7=99=BD=E5=85=94?= Date: Wed, 27 Aug 2025 14:30:20 +0800 Subject: [PATCH 4/7] =?UTF-8?q?refactor(=E6=B5=81=E9=87=8F=E6=B1=A0):=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=89=B9=E9=87=8F=E5=8A=A0=E5=85=A5=E5=88=86?= =?UTF-8?q?=E7=BB=84=E5=BC=B9=E7=AA=97=E7=BB=84=E4=BB=B6=E5=B9=B6=E6=B8=85?= =?UTF-8?q?=E7=90=86=E6=97=A0=E7=94=A8=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将Modal组件替换为Popup组件以改善移动端用户体验,移除调试日志和未使用的类型导入 --- .../mine/traffic-pool/list/BatchAddModal.tsx | 28 +++++++++++++------ .../mine/traffic-pool/list/dataAnyx.tsx | 11 +------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/Cunkebao/src/pages/mobile/mine/traffic-pool/list/BatchAddModal.tsx b/Cunkebao/src/pages/mobile/mine/traffic-pool/list/BatchAddModal.tsx index 5c7eae5c..86dda202 100644 --- a/Cunkebao/src/pages/mobile/mine/traffic-pool/list/BatchAddModal.tsx +++ b/Cunkebao/src/pages/mobile/mine/traffic-pool/list/BatchAddModal.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { Modal, Selector } from "antd-mobile"; +import { Popup, Selector } from "antd-mobile"; import type { PackageOption } from "./data"; interface BatchAddModalProps { @@ -21,14 +21,24 @@ const BatchAddModal: React.FC = ({ selectedCount, onConfirm, }) => ( - + //
+ //
选择目标分组
+ // ({ label: p.name, value: p.id }))} + // value={[batchTarget]} + // onChange={v => setBatchTarget(v[0])} + // /> + //
+ //
+ // 将选中的{selectedCount}个用户加入所选分组 + //
+ //
+ onClose()} + position="bottom" + bodyStyle={{ height: "80vh" }} >
选择目标分组
@@ -41,7 +51,7 @@ const BatchAddModal: React.FC = ({
将选中的{selectedCount}个用户加入所选分组
- + ); export default BatchAddModal; diff --git a/Cunkebao/src/pages/mobile/mine/traffic-pool/list/dataAnyx.tsx b/Cunkebao/src/pages/mobile/mine/traffic-pool/list/dataAnyx.tsx index 390e439b..e0c7514f 100644 --- a/Cunkebao/src/pages/mobile/mine/traffic-pool/list/dataAnyx.tsx +++ b/Cunkebao/src/pages/mobile/mine/traffic-pool/list/dataAnyx.tsx @@ -4,14 +4,7 @@ import { fetchPackageOptions, fetchScenarioOptions, } from "./api"; -import type { - TrafficPoolUser, - DeviceOption, - PackageOption, - ValueLevel, - UserStatus, - ScenarioOption, -} from "./data"; +import type { TrafficPoolUser, PackageOption, ScenarioOption } from "./data"; import { Toast } from "antd-mobile"; export function useTrafficPoolListLogic() { @@ -79,8 +72,6 @@ export function useTrafficPoolListLogic() { // 获取筛选项 useEffect(() => { fetchPackageOptions().then(res => { - console.log("packageOptions", res); - setPackageOptions(res.list || []); }); fetchScenarioOptions().then(res => { From 29e6bf8582873804f9a71230af0211f549628d04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E8=80=81=E7=99=BD=E5=85=94?= Date: Wed, 27 Aug 2025 15:35:58 +0800 Subject: [PATCH 5/7] =?UTF-8?q?feat(=E7=BE=A4=E6=8E=A8=E4=BB=BB=E5=8A=A1):?= =?UTF-8?q?=20=E6=B7=BB=E5=8A=A0=E6=9B=B4=E6=96=B0=E7=BE=A4=E6=8E=A8?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=8E=A5=E5=8F=A3=E5=B9=B6=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=8E=A5=E5=8F=A3=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改创建群推任务的接口路径为/v1/workbench/create,并添加type参数 新增更新群推任务的接口/v1/workbench/update --- .../pages/mobile/workspace/group-push/form/index.api.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Cunkebao/src/pages/mobile/workspace/group-push/form/index.api.ts b/Cunkebao/src/pages/mobile/workspace/group-push/form/index.api.ts index e6fe977b..819926da 100644 --- a/Cunkebao/src/pages/mobile/workspace/group-push/form/index.api.ts +++ b/Cunkebao/src/pages/mobile/workspace/group-push/form/index.api.ts @@ -1,8 +1,12 @@ import request from "@/api/request"; -export function createGroupPushTask(taskData) { - return request("/v1/workspace/group-push/tasks", taskData, "POST"); + +export function createGroupPushTask(data) { + return request("/v1/workbench/create", { ...data, type: 3 }, "POST"); } +export function updateGroupPushTask(data) { + return request("/v1/workbench/update", { ...data, type: 3 }, "POST"); +} // 获取京东社交媒体列表 export const fetchSocialMediaList = async () => { return request("/v1/workbench/getJdSocialMedia", {}, "GET"); From 0d5e34cfdd0166de4320a6874bbbd88dd83f4aea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E8=80=81=E7=99=BD=E5=85=94?= Date: Wed, 27 Aug 2025 17:04:39 +0800 Subject: [PATCH 6/7] =?UTF-8?q?refactor(=E7=BE=A4=E6=8E=A8=E8=A1=A8?= =?UTF-8?q?=E5=8D=95):=20=E9=87=8D=E6=9E=84=E8=A1=A8=E5=8D=95=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=BB=93=E6=9E=84=E5=B9=B6=E6=95=B4=E5=90=88=E4=BA=AC?= =?UTF-8?q?=E4=B8=9C=E8=81=94=E7=9B=9F=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将布尔类型字段改为数字枚举类型以增强可读性 - 移除独立的京东联盟组件,将其功能整合到基础设置中 - 简化表单步骤,从4步减少到3步 - 优化表单字段命名使其更语义化 --- .../form/components/BasicSettings.tsx | 282 +++++++++++++----- .../form/components/JingDongLink.tsx | 148 --------- .../workspace/group-push/form/index.data.ts | 14 +- .../workspace/group-push/form/index.tsx | 119 ++++---- 4 files changed, 261 insertions(+), 302 deletions(-) delete mode 100644 Cunkebao/src/pages/mobile/workspace/group-push/form/components/JingDongLink.tsx diff --git a/Cunkebao/src/pages/mobile/workspace/group-push/form/components/BasicSettings.tsx b/Cunkebao/src/pages/mobile/workspace/group-push/form/components/BasicSettings.tsx index e83332ad..ad951714 100644 --- a/Cunkebao/src/pages/mobile/workspace/group-push/form/components/BasicSettings.tsx +++ b/Cunkebao/src/pages/mobile/workspace/group-push/form/components/BasicSettings.tsx @@ -1,16 +1,33 @@ -import React, { useImperativeHandle, forwardRef } from "react"; -import { Input, Button, Card, Switch, Form, InputNumber } from "antd"; +import React, { + useImperativeHandle, + forwardRef, + useState, + useEffect, +} from "react"; +import { + Input, + Button, + Card, + Switch, + Form, + InputNumber, + Select, + Radio, +} from "antd"; +import { fetchSocialMediaList, fetchPromotionSiteList } from "../index.api"; interface BasicSettingsProps { defaultValues?: { name: string; - pushTimeStart: string; - pushTimeEnd: string; - dailyPushCount: number; - pushOrder: "earliest" | "latest"; - isLoopPush: boolean; - isImmediatePush: boolean; - isEnabled: boolean; + startTime: string; // 允许推送的开始时间 + endTime: string; // 允许推送的结束时间 + maxPerDay: number; + pushOrder: number; // 1: 按最早, 2: 按最新 + isLoop: number; // 0: 否, 1: 是 + pushType: number; // 0: 定时推送, 1: 立即推送 + status: number; // 0: 否, 1: 是 + socialMediaId?: string; + promotionSiteId?: string; }; onNext: (values: any) => void; onSave: (values: any) => void; @@ -27,18 +44,61 @@ const BasicSettings = forwardRef( { defaultValues = { name: "", - pushTimeStart: "06:00", - pushTimeEnd: "23:59", - dailyPushCount: 20, - pushOrder: "latest", - isLoopPush: false, - isImmediatePush: false, - isEnabled: false, + startTime: "06:00", // 允许推送的开始时间 + endTime: "23:59", // 允许推送的结束时间 + maxPerDay: 20, + pushOrder: 1, + isLoop: 0, // 0: 否, 1: 是 + pushType: 0, // 0: 定时推送, 1: 立即推送 + status: 0, // 0: 否, 1: 是 + socialMediaId: undefined, + promotionSiteId: undefined, }, }, ref, ) => { const [form] = Form.useForm(); + const [, forceUpdate] = useState({}); + const [socialMediaList, setSocialMediaList] = useState([]); + const [promotionSiteList, setPromotionSiteList] = useState([]); + const [loadingSocialMedia, setLoadingSocialMedia] = useState(false); + const [loadingPromotionSite, setLoadingPromotionSite] = useState(false); + + // 确保组件初始化时能正确显示按钮状态 + useEffect(() => { + forceUpdate({}); + }, []); + + // 组件挂载时获取社交媒体列表 + useEffect(() => { + setLoadingSocialMedia(true); + fetchSocialMediaList() + .then(res => { + setSocialMediaList(res); + }) + .finally(() => { + setLoadingSocialMedia(false); + }); + }, []); + + // 监听社交媒体选择变化 + const handleSocialMediaChange = value => { + form.setFieldsValue({ socialMediaId: value }); + // 清空推广站点选择 + form.setFieldsValue({ promotionSiteId: undefined }); + setPromotionSiteList([]); + + if (value) { + setLoadingPromotionSite(true); + fetchPromotionSiteList(value) + .then(res => { + setPromotionSiteList(res); + }) + .finally(() => { + setLoadingPromotionSite(false); + }); + } + }; // 暴露方法给父组件 useImperativeHandle(ref, () => ({ @@ -55,7 +115,10 @@ const BasicSettings = forwardRef( return form.getFieldsValue(); }, })); - + const handlePushOrderChange = (value: number) => { + form.setFieldsValue({ pushOrder: value }); + forceUpdate({}); // 强制组件重新渲染 + }; return (
@@ -64,7 +127,10 @@ const BasicSettings = forwardRef( layout="vertical" initialValues={defaultValues} onValuesChange={(changedValues, allValues) => { - // 可以在这里处理表单值变化 + // 当pushOrder值变化时,强制更新组件 + if ("pushOrder" in changedValues) { + forceUpdate({}); + } }} > {/* 任务名称 */} @@ -78,32 +144,56 @@ const BasicSettings = forwardRef( > - - {/* 允许推送的时间段 */} - -
- - - - - - - -
+ {/* 推送类型 */} + + + 定时推送 + 立即推送 + + + {/* 允许推送的时间段 - 只在定时推送时显示 */} + + prevValues.pushType !== currentValues.pushType + } + > + {({ getFieldValue }) => { + // 只在pushType为0(定时推送)时显示时间段设置 + return getFieldValue("pushType") === 0 ? ( + +
+ + + + + + + +
+
+ ) : null; + }}
{/* 每日推送 */} ( >
+ {/* 京东联盟 */} + +
+ + ({ + label: item.name, + value: item.id, + }))} + /> + +
+
+ {/* 是否循环推送 */} - - - - {/* 是否立即推送 */} - (checked ? 1 : 0)} + getValueProps={value => ({ checked: value === 1 })} > @@ -177,30 +285,40 @@ const BasicSettings = forwardRef( {/* 是否启用 */} (checked ? 1 : 0)} + getValueProps={value => ({ checked: value === 1 })} > - {/* 立即推送提示 */} - - {() => { - const isImmediatePush = form.getFieldValue("isImmediatePush"); - return isImmediatePush ? ( -
- 如果启用,系统会把内容库里所有的内容按顺序推送到指定的社群 -
- ) : null; + {/* 推送类型提示 */} + + prevValues.pushType !== currentValues.pushType + } + > + {({ getFieldValue }) => { + const pushType = getFieldValue("pushType"); + if (pushType === 1) { + return ( +
+ 如果启用立即推送,系统会把内容库里所有的内容按顺序推送到指定的社群 +
+ ); + } + return null; }}
diff --git a/Cunkebao/src/pages/mobile/workspace/group-push/form/components/JingDongLink.tsx b/Cunkebao/src/pages/mobile/workspace/group-push/form/components/JingDongLink.tsx deleted file mode 100644 index 969666ce..00000000 --- a/Cunkebao/src/pages/mobile/workspace/group-push/form/components/JingDongLink.tsx +++ /dev/null @@ -1,148 +0,0 @@ -import React, { - useState, - useEffect, - useImperativeHandle, - forwardRef, -} from "react"; -import { Form, Select, Card } from "antd"; -import { fetchSocialMediaList, fetchPromotionSiteList } from "../index.api"; - -// 京东社交媒体接口 -interface JdSocialMedia { - id: string; - name: string; - [key: string]: any; -} - -// 京东推广站点接口 -interface JdPromotionSite { - id: string; - name: string; - [key: string]: any; -} - -interface JingDongLinkProps { - defaultValues?: { - socialMediaId?: string; - promotionSiteId?: string; - }; - onNext?: (values: any) => void; - onSave?: (values: any) => void; - loading?: boolean; -} - -export interface JingDongLinkRef { - validate: () => Promise; - getValues: () => any; -} - -const JingDongLink = forwardRef( - ( - { - defaultValues = { - socialMediaId: undefined, - promotionSiteId: undefined, - }, - onNext, - onSave, - loading = false, - }, - ref, - ) => { - const [form] = Form.useForm(); - const [socialMediaList, setSocialMediaList] = useState([]); - const [promotionSiteList, setPromotionSiteList] = useState< - JdPromotionSite[] - >([]); - const [loadingSocialMedia, setLoadingSocialMedia] = useState(false); - const [loadingPromotionSite, setLoadingPromotionSite] = useState(false); - - // 暴露方法给父组件 - useImperativeHandle(ref, () => ({ - validate: async () => { - try { - await form.validateFields(); - return true; - } catch (error) { - console.log("JingDongLink 表单验证失败:", error); - return false; - } - }, - getValues: () => { - return form.getFieldsValue(); - }, - })); - - // 组件挂载时获取社交媒体列表 - useEffect(() => { - fetchSocialMediaList().then(res => { - setSocialMediaList(res); - }); - }, []); - - // 监听社交媒体选择变化 - const handleSocialMediaChange = (value: number) => { - form.setFieldsValue({ socialMediaId: value }); - // 清空推广站点选择 - form.setFieldsValue({ promotionSiteId: undefined }); - setPromotionSiteList([]); - - if (value) { - fetchPromotionSiteList(value).then(res => { - setPromotionSiteList(res); - }); - } - }; - - return ( -
- -
- {/* 京东社交媒体选择 */} - -
- - ({ - label: item.name, - value: item.id, - }))} - /> - -
-
-
-
-
- ); - }, -); - -JingDongLink.displayName = "JingDongLink"; - -export default JingDongLink; diff --git a/Cunkebao/src/pages/mobile/workspace/group-push/form/index.data.ts b/Cunkebao/src/pages/mobile/workspace/group-push/form/index.data.ts index a158470a..8a5fdc68 100644 --- a/Cunkebao/src/pages/mobile/workspace/group-push/form/index.data.ts +++ b/Cunkebao/src/pages/mobile/workspace/group-push/form/index.data.ts @@ -21,13 +21,13 @@ export interface ContentLibrary { export interface FormData { name: string; - pushTimeStart: string; - pushTimeEnd: string; - dailyPushCount: number; - pushOrder: "earliest" | "latest"; - isLoopPush: boolean; - isImmediatePush: boolean; - isEnabled: boolean; + startTime: string; // 允许推送的开始时间 + endTime: string; // 允许推送的结束时间 + maxPerDay: number; + pushOrder: number; // 1: 按最早, 2: 按最新 + isLoop: number; // 0: 否, 1: 是 + pushType: number; // 0: 定时推送, 1: 立即推送 + status: number; // 0: 否, 1: 是 contentGroups: string[]; wechatGroups: string[]; // 京东联盟相关字段 diff --git a/Cunkebao/src/pages/mobile/workspace/group-push/form/index.tsx b/Cunkebao/src/pages/mobile/workspace/group-push/form/index.tsx index 24469531..30025dd1 100644 --- a/Cunkebao/src/pages/mobile/workspace/group-push/form/index.tsx +++ b/Cunkebao/src/pages/mobile/workspace/group-push/form/index.tsx @@ -9,7 +9,6 @@ import GroupSelector, { GroupSelectorRef } from "./components/GroupSelector"; import ContentSelector, { ContentSelectorRef, } from "./components/ContentSelector"; -import JingDongLink, { JingDongLinkRef } from "./components/JingDongLink"; import type { FormData } from "./index.data"; import NavCommon from "@/components/NavCommon"; import { GroupSelectionItem } from "@/components/GroupSelection/data"; @@ -18,7 +17,6 @@ const steps = [ { id: 1, title: "步骤 1", subtitle: "基础设置" }, { id: 2, title: "步骤 2", subtitle: "选择社群" }, { id: 3, title: "步骤 3", subtitle: "选择内容库" }, - { id: 4, title: "步骤 4", subtitle: "京东联盟" }, ]; const NewGroupPush: React.FC = () => { @@ -35,13 +33,13 @@ const NewGroupPush: React.FC = () => { const [formData, setFormData] = useState({ name: "", - pushTimeStart: "06:00", - pushTimeEnd: "23:59", - dailyPushCount: 20, - pushOrder: "latest", - isLoopPush: false, - isImmediatePush: false, - isEnabled: false, + startTime: "06:00", // 允许推送的开始时间 + endTime: "23:59", // 允许推送的结束时间 + maxPerDay: 20, + pushOrder: 2, // 2: 按最新 + isLoop: 0, // 0: 否, 1: 是 + pushType: 0, // 0: 定时推送, 1: 立即推送 + status: 0, // 0: 否, 1: 是 wechatGroups: [], contentGroups: [], }); @@ -51,7 +49,6 @@ const NewGroupPush: React.FC = () => { const basicSettingsRef = useRef(null); const groupSelectorRef = useRef(null); const contentSelectorRef = useRef(null); - const jingDongLinkRef = useRef(null); useEffect(() => { if (!id) return; @@ -83,56 +80,59 @@ const NewGroupPush: React.FC = () => { }; const handleSave = async () => { - if (!formData.name.trim()) { - window.alert("请输入任务名称"); - return; - } - if (formData.wechatGroups.length === 0) { - window.alert("请选择至少一个社群"); - return; - } - if (formData.contentGroups.length === 0) { - window.alert("请选择至少一个内容库"); - return; - } - - // 获取京东联盟数据 - const jingDongLinkValues = jingDongLinkRef.current?.getValues(); - - setLoading(true); try { + // 调用 ContentSelector 的表单校验 + const isValid = (await contentSelectorRef.current?.validate()) || false; + if (!isValid) return; + + setLoading(true); + + // 获取基础设置中的京东联盟数据 + const basicSettingsValues = basicSettingsRef.current?.getValues() || {}; + + // 构建 API 请求数据 const apiData = { name: formData.name, - timeRange: { - start: formData.pushTimeStart, - end: formData.pushTimeEnd, - }, - maxPushPerDay: formData.dailyPushCount, + startTime: formData.startTime, // 允许推送的开始时间 + endTime: formData.endTime, // 允许推送的结束时间 + maxPushPerDay: formData.maxPerDay, pushOrder: formData.pushOrder, - isLoopPush: formData.isLoopPush, - isImmediatePush: formData.isImmediatePush, - isEnabled: formData.isEnabled, + isLoop: formData.isLoop, // 0: 否, 1: 是 + pushType: formData.pushType, // 0: 定时推送, 1: 立即推送 + status: formData.status, // 0: 否, 1: 是 wechatGroups: formData.wechatGroups, contentGroups: formData.contentGroups, - // 京东联盟数据 - socialMediaId: jingDongLinkValues?.socialMediaId, - promotionSiteId: jingDongLinkValues?.promotionSiteId, - pushMode: formData.isImmediatePush - ? ("immediate" as const) - : ("scheduled" as const), + // 京东联盟数据从基础设置中获取 + socialMediaId: basicSettingsValues.socialMediaId, + promotionSiteId: basicSettingsValues.promotionSiteId, + pushMode: + formData.pushType === 1 + ? ("immediate" as const) + : ("scheduled" as const), messageType: "text" as const, messageContent: "", targetTags: [], pushInterval: 60, }; - const response = await createGroupPushTask(apiData); - if (response.code === 200) { - window.alert("保存成功"); - navigate("/workspace/group-push"); + + // 打印API请求数据,用于调试 + console.log("发送到API的数据:", apiData); + + // 调用创建或更新 API + if (id) { + // 更新逻辑将在这里实现 + window.alert("更新成功"); } else { - window.alert("保存失败,请稍后重试"); + const response = await createGroupPushTask(apiData); + if (response.code === 200) { + window.alert("创建成功"); + navigate("/workspace/group-push"); + } else { + window.alert("保存失败,请稍后重试"); + } } } catch (error) { + console.error("保存失败:", error); window.alert("保存失败,请稍后重试"); } finally { setLoading(false); @@ -146,7 +146,7 @@ const NewGroupPush: React.FC = () => { }; const handleNext = async () => { - if (currentStep < 4) { + if (currentStep < 3) { try { let isValid = false; @@ -171,14 +171,6 @@ const NewGroupPush: React.FC = () => { } break; - case 3: - // 调用 ContentSelector 的表单校验 - isValid = (await contentSelectorRef.current?.validate()) || false; - if (isValid) { - setCurrentStep(4); - } - break; - default: setCurrentStep(currentStep + 1); } @@ -196,7 +188,7 @@ const NewGroupPush: React.FC = () => { 上一步 )} - {currentStep === 4 ? ( + {currentStep === 3 ? ( @@ -224,13 +216,13 @@ const NewGroupPush: React.FC = () => { ref={basicSettingsRef} defaultValues={{ name: formData.name, - pushTimeStart: formData.pushTimeStart, - pushTimeEnd: formData.pushTimeEnd, - dailyPushCount: formData.dailyPushCount, + startTime: formData.startTime, + endTime: formData.endTime, + maxPerDay: formData.maxPerDay, pushOrder: formData.pushOrder, - isLoopPush: formData.isLoopPush, - isImmediatePush: formData.isImmediatePush, - isEnabled: formData.isEnabled, + isLoop: formData.isLoop, + status: formData.status, + pushType: formData.pushType, }} onNext={handleBasicSettingsChange} onSave={handleSave} @@ -253,9 +245,6 @@ const NewGroupPush: React.FC = () => { onNext={handleLibrariesChange} /> )} - {currentStep === 4 && ( - - )}
From 35c5cf60d4fe1c9e047a9779afcbaa0579c7a30d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E8=80=81=E7=99=BD=E5=85=94?= Date: Wed, 27 Aug 2025 17:26:00 +0800 Subject: [PATCH 7/7] =?UTF-8?q?refactor(=E7=BE=A4=E6=8E=A8=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1):=20=E7=BB=9F=E4=B8=80API=E6=8E=A5=E5=8F=A3=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E5=92=8C=E5=93=8D=E5=BA=94=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构群推任务相关API接口,将参数改为对象形式并统一响应处理 更新任务状态切换接口,添加type参数区分任务类型 修改字段名maxPushPerDay为maxPerDay保持一致性 使用Toast组件替代window.alert进行提示 --- .../mobile/workspace/auto-like/list/api.ts | 4 ++-- .../workspace/group-push/detail/groupPush.ts | 5 ++-- .../workspace/group-push/detail/index.tsx | 8 +++---- .../workspace/group-push/form/index.tsx | 24 ++++++++++--------- .../workspace/group-push/list/index.api.ts | 17 +++++-------- .../workspace/group-push/list/index.tsx | 2 +- 6 files changed, 28 insertions(+), 32 deletions(-) diff --git a/Cunkebao/src/pages/mobile/workspace/auto-like/list/api.ts b/Cunkebao/src/pages/mobile/workspace/auto-like/list/api.ts index 7f828d56..615cb7ff 100644 --- a/Cunkebao/src/pages/mobile/workspace/auto-like/list/api.ts +++ b/Cunkebao/src/pages/mobile/workspace/auto-like/list/api.ts @@ -35,8 +35,8 @@ export function deleteAutoLikeTask(id: string): Promise { } // 切换任务状态 -export function toggleAutoLikeTask(id: string, status: string): Promise { - return request("/v1/workbench/update-status", { id, status }, "POST"); +export function toggleAutoLikeTask(data): Promise { + return request("/v1/workbench/update-status", { ...data, type: 1 }, "POST"); } // 复制自动点赞任务 diff --git a/Cunkebao/src/pages/mobile/workspace/group-push/detail/groupPush.ts b/Cunkebao/src/pages/mobile/workspace/group-push/detail/groupPush.ts index 0295e2f9..b5f685c9 100644 --- a/Cunkebao/src/pages/mobile/workspace/group-push/detail/groupPush.ts +++ b/Cunkebao/src/pages/mobile/workspace/group-push/detail/groupPush.ts @@ -12,8 +12,9 @@ export interface GroupPushTask { createTime: string; creator: string; pushInterval: number; - maxPushPerDay: number; - timeRange: { start: string; end: string }; + maxPerDay: number; + startTime: string; // 允许推送的开始时间 + endTime: string; // 允许推送的结束时间 messageType: "text" | "image" | "video" | "link"; messageContent: string; targetTags: string[]; diff --git a/Cunkebao/src/pages/mobile/workspace/group-push/detail/index.tsx b/Cunkebao/src/pages/mobile/workspace/group-push/detail/index.tsx index c38ba67e..188321fe 100644 --- a/Cunkebao/src/pages/mobile/workspace/group-push/detail/index.tsx +++ b/Cunkebao/src/pages/mobile/workspace/group-push/detail/index.tsx @@ -179,7 +179,7 @@ const Detail: React.FC = () => {
基本设置
推送间隔:{task.pushInterval} 秒
-
每日最大推送数:{task.maxPushPerDay} 条
+
每日最大推送数:{task.maxPerDay} 条
执行时间段:{task.timeRange.start} - {task.timeRange.end}
@@ -221,12 +221,10 @@ const Detail: React.FC = () => {
执行进度
- 今日已推送:{task.pushCount} / {task.maxPushPerDay} + 今日已推送:{task.pushCount} / {task.maxPerDay}
{task.targetTags.length > 0 && ( diff --git a/Cunkebao/src/pages/mobile/workspace/group-push/form/index.tsx b/Cunkebao/src/pages/mobile/workspace/group-push/form/index.tsx index 30025dd1..0a07fa08 100644 --- a/Cunkebao/src/pages/mobile/workspace/group-push/form/index.tsx +++ b/Cunkebao/src/pages/mobile/workspace/group-push/form/index.tsx @@ -1,6 +1,7 @@ import React, { useState, useEffect, useRef } from "react"; import { useNavigate, useParams } from "react-router-dom"; import { Button } from "antd"; +import { Toast } from "antd-mobile"; import { createGroupPushTask } from "./index.api"; import Layout from "@/components/Layout/Layout"; import StepIndicator from "@/components/StepIndicator"; @@ -95,7 +96,7 @@ const NewGroupPush: React.FC = () => { name: formData.name, startTime: formData.startTime, // 允许推送的开始时间 endTime: formData.endTime, // 允许推送的结束时间 - maxPushPerDay: formData.maxPerDay, + maxPerDay: formData.maxPerDay, pushOrder: formData.pushOrder, isLoop: formData.isLoop, // 0: 否, 1: 是 pushType: formData.pushType, // 0: 定时推送, 1: 立即推送 @@ -121,19 +122,20 @@ const NewGroupPush: React.FC = () => { // 调用创建或更新 API if (id) { // 更新逻辑将在这里实现 - window.alert("更新成功"); + Toast.show({ content: "更新成功", position: "top" }); + navigate("/workspace/group-push"); } else { - const response = await createGroupPushTask(apiData); - if (response.code === 200) { - window.alert("创建成功"); - navigate("/workspace/group-push"); - } else { - window.alert("保存失败,请稍后重试"); - } + createGroupPushTask(apiData) + .then(() => { + Toast.show({ content: "创建成功", position: "top" }); + navigate("/workspace/group-push"); + }) + .catch(() => { + Toast.show({ content: "创建失败,请稍后重试", position: "top" }); + }); } } catch (error) { - console.error("保存失败:", error); - window.alert("保存失败,请稍后重试"); + Toast.show({ content: "保存失败,请稍后重试", position: "top" }); } finally { setLoading(false); } diff --git a/Cunkebao/src/pages/mobile/workspace/group-push/list/index.api.ts b/Cunkebao/src/pages/mobile/workspace/group-push/list/index.api.ts index 2a6c1153..c11a7e3b 100644 --- a/Cunkebao/src/pages/mobile/workspace/group-push/list/index.api.ts +++ b/Cunkebao/src/pages/mobile/workspace/group-push/list/index.api.ts @@ -1,4 +1,5 @@ import request from "@/api/request"; +import { GroupPushTask } from "../detail/groupPush"; interface ApiResponse { code: number; @@ -11,22 +12,16 @@ export async function fetchGroupPushTasks() { } export async function deleteGroupPushTask(id: string): Promise { - return request(`/v1/workspace/group-push/tasks/${id}`, {}, "DELETE"); + return request("/v1/workbench/delete", { id }, "DELETE"); } -export async function toggleGroupPushTask( - id: string, - status: string, -): Promise { - return request( - `/v1/workspace/group-push/tasks/${id}/toggle`, - { status }, - "POST", - ); +// 切换任务状态 +export function toggleGroupPushTask(data): Promise { + return request("/v1/workbench/update-status", { ...data, type: 3 }, "POST"); } export async function copyGroupPushTask(id: string): Promise { - return request(`/v1/workspace/group-push/tasks/${id}/copy`, {}, "POST"); + return request("/v1/workbench/copy", { id }, "POST"); } export async function createGroupPushTask( diff --git a/Cunkebao/src/pages/mobile/workspace/group-push/list/index.tsx b/Cunkebao/src/pages/mobile/workspace/group-push/list/index.tsx index 8aa3fca3..d4e9f362 100644 --- a/Cunkebao/src/pages/mobile/workspace/group-push/list/index.tsx +++ b/Cunkebao/src/pages/mobile/workspace/group-push/list/index.tsx @@ -133,7 +133,7 @@ const GroupPush: React.FC = () => { const task = tasks.find(t => t.id === taskId); if (!task) return; const newStatus = task.status === 1 ? 2 : 1; - await toggleGroupPushTask(taskId, String(newStatus)); + await toggleGroupPushTask({ id: taskId, status: newStatus }); fetchTasks(); };