更新流量池列表相關邏輯,替換獲客場景接口,調整用戶價值和狀態的篩選邏輯,並優化篩選模態框的狀態管理。
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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}>
|
||||
|
||||
Reference in New Issue
Block a user