更新流量池列表相關邏輯,替換獲客場景接口,調整用戶價值和狀態的篩選邏輯,並優化篩選模態框的狀態管理。

This commit is contained in:
超级老白兔
2025-08-13 17:07:51 +08:00
parent 2c509d5aa1
commit 94df1469c0
4 changed files with 56 additions and 73 deletions

View File

@@ -1,14 +1,9 @@
import React, { useState } from "react";
import React, { useState, useEffect } from "react";
import { Popup } from "antd-mobile";
import { Select, Button } from "antd";
import DeviceSelection from "@/components/DeviceSelection";
import type {
PackageOption,
ValueLevel,
UserStatus,
ScenarioOption,
} from "./data";
import type { UserStatus, ScenarioOption } from "./data";
import { fetchScenarioOptions } from "./api";
import { DeviceSelectionItem } from "@/components/DeviceSelection/data";
interface FilterModalProps {
@@ -18,59 +13,69 @@ interface FilterModalProps {
deviceIds: string[];
packageId: string;
scenarioId: string;
valueLevel: ValueLevel;
userStatus: UserStatus;
userValue: number;
userStatus: number;
}) => void;
packageOptions: PackageOption[];
scenarioOptions: ScenarioOption[];
}
const valueLevelOptions = [
{ label: "全部价值", value: "all" },
{ label: "高价值", value: "high" },
{ label: "中价值", value: "medium" },
{ label: "低价值", value: "low" },
{ label: "全部价值", value: 0 },
{ label: "高价值", value: 1 },
{ label: "中价值", value: 2 },
{ label: "低价值", value: 3 },
];
const statusOptions = [
{ label: "全部状态", value: "all" },
{ label: "已添加", value: "added" },
{ label: "待添加", value: "pending" },
{ label: "添加失败", value: "failed" },
{ label: "重复", value: "duplicate" },
{ label: "全部状态", value: 0 },
{ label: "已添加", value: 1 },
{ label: "待添加", value: 2 },
{ label: "重复", value: 3 },
{ label: "添加失败", value: -1 },
];
const FilterModal: React.FC<FilterModalProps> = ({
visible,
onClose,
packageOptions,
scenarioOptions,
onConfirm,
}) => {
const [selectedDevices, setSelectedDevices] = useState<DeviceSelectionItem[]>(
[],
);
const [packageId, setPackageId] = useState<string>("all");
const [scenarioId, setScenarioId] = useState<string>("all");
const [valueLevel, setValueLevel] = useState<ValueLevel>("all");
const [userStatus, setUserStatus] = useState<UserStatus>("all");
const [packageId, setPackageId] = useState<string>("");
const [scenarioId, setScenarioId] = useState<string>("");
const [userValue, setUserValue] = useState<number>(0);
const [userStatus, setUserStatus] = useState<number>(0);
const [scenarioOptions, setScenarioOptions] = useState<any[]>([]);
const [packageOptions, setPackageOptions] = useState<any[]>([]);
useEffect(() => {
if (visible) {
fetchScenarioOptions().then(res => {
setScenarioOptions(res);
});
}
}, [visible]);
const handleApply = () => {
onConfirm({
const params = {
deviceIds: selectedDevices.map(d => d.id.toString()),
packageId,
scenarioId,
valueLevel,
userValue,
userStatus,
});
};
console.log(params);
onConfirm(params);
onClose();
};
const handleReset = () => {
setSelectedDevices([]);
setPackageId("all");
setScenarioId("all");
setValueLevel("all");
setUserStatus("all");
setPackageId("");
setScenarioId("");
setUserValue(0);
setUserStatus(0);
};
return (
@@ -100,7 +105,7 @@ const FilterModal: React.FC<FilterModalProps> = ({
value={packageId}
onChange={setPackageId}
options={[
{ label: "全部流量池", value: "all" },
{ label: "全部流量池", value: "" },
...packageOptions.map(p => ({ label: p.name, value: p.id })),
]}
/>
@@ -112,7 +117,7 @@ const FilterModal: React.FC<FilterModalProps> = ({
value={scenarioId}
onChange={setScenarioId}
options={[
{ label: "全部场景", value: "all" },
{ label: "全部场景", value: "" },
...scenarioOptions.map(s => ({ label: s.name, value: s.id })),
]}
/>
@@ -121,8 +126,8 @@ const FilterModal: React.FC<FilterModalProps> = ({
<div style={{ marginBottom: 6 }}></div>
<Select
style={{ width: "100%" }}
value={valueLevel}
onChange={v => setValueLevel(v as ValueLevel)}
value={userValue}
onChange={v => setUserValue(v as number)}
options={valueLevelOptions}
/>
</div>

View File

@@ -18,13 +18,6 @@ export async function fetchPackageOptions(): Promise<any[]> {
];
}
// 获取获客场景列表
export async function fetchScenarioOptions(): Promise<any[]> {
// TODO: 替换为真实接口
return [
{ id: "scenario-1", name: "朋友圈推广" },
{ id: "scenario-2", name: "群聊引流" },
{ id: "scenario-3", name: "公众号推广" },
{ id: "scenario-4", name: "线下活动" },
];
return request("/v1/plan/scenes", {}, "GET");
}

View File

@@ -29,8 +29,8 @@ export function useTrafficPoolListLogic() {
const [selectedDevices, setSelectedDevices] = useState<any[]>([]);
const [packageId, setPackageId] = useState<string>("all");
const [scenarioId, setScenarioId] = useState<string>("all");
const [valueLevel, setValueLevel] = useState<ValueLevel>("all");
const [userStatus, setUserStatus] = useState<UserStatus>("all");
const [userValue, setUserValue] = useState<number>(0);
const [userStatus, setUserStatus] = useState<number>(0);
// 批量相关
const [selectedIds, setSelectedIds] = useState<number[]>([]);
@@ -69,19 +69,11 @@ export function useTrafficPoolListLogic() {
if (scenarioId !== "all") {
params.taskId = scenarioId;
}
if (valueLevel !== "all") {
params.userValue =
valueLevel === "high" ? 3 : valueLevel === "medium" ? 2 : 1;
if (userValue !== 0) {
params.userValue = userValue;
}
if (userStatus !== "all") {
params.addStatus =
userStatus === "added"
? 1
: userStatus === "pending"
? 0
: userStatus === "failed"
? -1
: -2;
if (userStatus !== 0) {
params.addStatus = userStatus;
}
const res = await fetchTrafficPoolList(params);
@@ -108,7 +100,7 @@ export function useTrafficPoolListLogic() {
selectedDevices,
packageId,
scenarioId,
valueLevel,
userValue,
userStatus,
]);
@@ -149,8 +141,8 @@ export function useTrafficPoolListLogic() {
setSelectedDevices([]);
setPackageId("all");
setScenarioId("all");
setValueLevel("all");
setUserStatus("all");
setUserValue(0);
setUserStatus(0);
};
return {
@@ -172,8 +164,8 @@ export function useTrafficPoolListLogic() {
setPackageId,
scenarioId,
setScenarioId,
valueLevel,
setValueLevel,
userValue,
setUserValue,
userStatus,
setUserStatus,
selectedIds,

View File

@@ -33,15 +33,10 @@ const TrafficPoolList: React.FC = () => {
setShowFilter,
packageOptions,
scenarioOptions,
selectedDevices,
setSelectedDevices,
packageId,
setPackageId,
scenarioId,
setScenarioId,
valueLevel,
setValueLevel,
userStatus,
setUserValue,
setUserStatus,
selectedIds,
handleSelectAll,
@@ -55,7 +50,6 @@ const TrafficPoolList: React.FC = () => {
setShowStats,
stats,
getList,
resetFilter,
} = useTrafficPoolListLogic();
return (
@@ -170,12 +164,11 @@ const TrafficPoolList: React.FC = () => {
);
setPackageId(filters.packageId);
setScenarioId(filters.scenarioId);
setValueLevel(filters.valueLevel);
setUserValue(filters.userValue);
setUserStatus(filters.userStatus);
// 重新获取列表
getList();
}}
packageOptions={packageOptions}
scenarioOptions={scenarioOptions}
/>
<div className={styles.listWrap}>